<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blogbangbang.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog Bang Bang - geeks</title>
  <link>http://blogbangbang.com/</link>
  <atom:link href="http://blogbangbang.com/feed/category/geeks/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Sat, 11 Oct 2008 11:21:48 +0200</pubDate>
  <copyright>cc-by-sa</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Du neuf dans mon  PC  !</title>
    <link>http://blogbangbang.com/post/2008/08/30/Du-neuf-dans-mon-PC</link>
    <guid isPermaLink="false">urn:md5:877ff0cccc05959910f1f426fb7c5833</guid>
    <pubDate>Sat, 30 Aug 2008 15:57:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>logiciels libres</category>    
    <description>    &lt;p&gt;
Quand on est Developpeur Web, et par-dessus le tout un peu Geek,
on passe pas mal de temps devant un PC.
&lt;/p&gt;
&lt;p&gt;
De ce fait, on s'habitue à ses outils, ses logiciels et il est assez rare de
voir un logiciel modifier en profondeur ses habitudes.
&lt;/p&gt;
&lt;p&gt;
Pourtant, récemment, deux découvertes ont vraiment changé ma façon de travailler
et de me servir de mon PC.
&lt;/p&gt;
&lt;h3&gt;Gnome-DO&lt;/h3&gt;
&lt;p&gt;
La première est le logiciel &lt;a hreflang=&quot;en&quot; href=&quot;http://do.davebsd.com/&quot;&gt;Gnome-Do&lt;/a&gt;, équivalent dans Gnome (Linux) de &lt;a hreflang=&quot;en&quot; href=&quot;http://docs.blacktree.com/quicksilver/what_is_quicksilver&quot;&gt;Quicksilver&lt;/a&gt;
sous Mac ou &lt;a hreflang=&quot;en&quot; href=&quot;http://humanized.com/enso/&quot;&gt;Enso&lt;/a&gt; sous Windows.
&lt;/p&gt;
&lt;p&gt;
Depuis toujours, pour lancer une application il fallait soit réduire les fenêtres
gênantes pour aller cliquer sur le bureau, soit aller la chercher
dans un menu sous 2 niveaux d'arborescence obscures (Last FM c'est dans Musique ou Internet ? )
&lt;/p&gt;
&lt;p&gt;
Certes il y a aussi la barre des tâches ou le Dock mais ceux-ci s'encombrent très, très vite.
&lt;/p&gt;
&lt;p&gt;
Avec Gnome-Do, tout est plus simple, une combinaison de touche et la fenêtre suivante apparait
&lt;/p&gt;
&lt;img title=&quot;do_1_small.png, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/do_1_small.png&quot; /&gt;&lt;br /&gt;&lt;p&gt;
Tapez ensuite les premières lettres de l'application à démarrer &amp;quot;Fil&amp;quot; pour Filezilla par exemple et
Gnome-Do va deviner seul ce que vous souhaitez faire, un appui sur la touche Entrée plus tard, Filezilla est lancé.
&lt;/p&gt;
&lt;img title=&quot;do_3_small.png, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/do_3_small.png&quot; /&gt;&lt;br /&gt;&lt;p&gt;
Mais Gnome-Do va plus loin, tapez mail, ou chat et celui-ci vous affichera la liste des contacts correspondant à l'application choisie et démarrera automatiquement l'application correspondante (une fenêtre de chat Pidgin par exemple)
&lt;/p&gt;
&lt;img title=&quot;do_2_small.png, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/do_2_small.png&quot; /&gt;&lt;br /&gt;&lt;p&gt;
Des tas de plugins, pour gérer votre musique, Twitter... sont déjà disponibles et le gain de temps est tout simplement sidérant !
&lt;/p&gt;
&lt;p&gt;
Seul défaut, l'application se base sur les mots, la langue... mais elle n'est pas pour autant localisée, pour rechercher une adresse sur Google il vous faudra donc taper &lt;br /&gt;
&lt;code&gt;&lt;strong&gt;map&lt;/strong&gt; Rue de Tolbiac, Paris&lt;/code&gt;&lt;br /&gt;
et pas &lt;br /&gt;
&lt;code&gt;&lt;strong&gt;Carte&lt;/strong&gt; Rue de Tolbiac, Paris&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Pour les &amp;quot;Power users&amp;quot;, c'est plutôt une bonne nouvelle, l'anglais est souvent plus court et l'on chat plus régulièrement que l'on ne clavarde...
&lt;/p&gt;
&lt;p&gt;
Par contre, pour le commun des mortels, ce sera surement un obstacle à une large adoption.
&lt;/p&gt;
&lt;h3&gt;Synergy&lt;/h3&gt;
&lt;p&gt;
Le deuxième logiciel à avoir changé ma façon de travailler récemment est &lt;a hreflang=&quot;en&quot; href=&quot;http://synergy2.sourceforge.net/&quot;&gt;Synergy&lt;/a&gt;.
&lt;/p&gt;
&lt;img title=&quot;synergy.gif, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/synergy.gif&quot; /&gt;&lt;br /&gt;&lt;p&gt;
Là pas de jaloux, les utilisateurs de Windows, de Mac, de Linux sont concernés, à condition d'avoir au moins deux machines.
&lt;/p&gt;
&lt;p&gt;
En effet, Synergy vous permet en trois clics et avec une configuration du genre&amp;quot;plus simple tu meurs&amp;quot;, de partager le clavier et la souris de votre PC principal sur vos PC secondaires.
&lt;/p&gt;
&lt;p&gt;
Vous pouvez préciser ou ceux-ci se place par rapport au PC &amp;quot;serveur&amp;quot; (droite, gauche, dessus dessous) et même effectuer des copier-coller de texte entre les PC.
&lt;/p&gt;
&lt;p&gt;
Synergy s'accommode de ces tâches sous tous les environnements cités précémment mais également quand ceux-ci se &amp;quot;mélangent&amp;quot;, un PC Linux, le portable Windows à gauche, le MAC à droite et avec Synergy tout cela se contrôle avec 1 seul clavier et une seule souris !
&lt;/p&gt;
&lt;p&gt;Du bonheur à l'état pur ! &lt;/p&gt;
&lt;p&gt;Une application ? &lt;/p&gt;
&lt;p&gt;Vous êtes développeur Web, vous travaillez sous Linux, mais 60 % des personnes de ce monde utilisant encore un navigateur plus qu'obsolète,
il vous faut tester tout vos sites sous IE6, IE7 et sous une résolution différente. &lt;/p&gt;
&lt;p&gt;Une autre ? &lt;/p&gt;
&lt;p&gt;
Toujours développeur Web, vous développer une application dont le serveur est en RubyOnRails et vous avez l'habitude de coder tout cela sous Linux.
&lt;br /&gt;Un des clients possible est une application, Flash, Flex ou AIR, là vos habitudes sont sous Windows...
&lt;br /&gt;Avec Synergy, vous passez de l'un à l'autre en un subtil mouvement de poignet &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt; Testez, vous verrez ! &lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/08/30/Du-neuf-dans-mon-PC#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/08/30/Du-neuf-dans-mon-PC#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/92</wfw:commentRss>
      </item>
    
  <item>
    <title>OK pour le HomeServer mais comment ? (3/4)</title>
    <link>http://blogbangbang.com/post/2008/05/20/OK-pour-le-HomeServer-mais-comment-3/4</link>
    <guid isPermaLink="false">urn:md5:a74662b31bc3d428848a455892785f9b</guid>
    <pubDate>Tue, 20 May 2008 00:39:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>&lt;p&gt;
Que gère t'on :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De la musique&lt;/li&gt;
&lt;li&gt;Des photos&lt;/li&gt;
&lt;li&gt;Des vidéos&lt;/li&gt;
&lt;li&gt;Des (cercles d') amis&lt;/li&gt;
&lt;li&gt;Des mails &lt;/li&gt;
&lt;li&gt;Des bookmarks &lt;/li&gt;
&lt;li&gt;Un frigo&lt;/li&gt;
&lt;li&gt;Une Télé&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Et pourquoi pas
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des noms de domaines et des sites Web&lt;/li&gt;
&lt;li&gt;Des flux RSS&lt;/li&gt;
&lt;li&gt;Les stores de la maison&lt;/li&gt;
&lt;li&gt;les lumières d'ambiance&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Que va t-on utiliser pour gérer tout cela ?
&lt;/p&gt;    &lt;p&gt;
Pour ce qui est du matériel, le &amp;quot;HomeServer&amp;quot; ne sera rien de plus qu'un PC, avec de gros disques durs (mais vu les prix du stockage actuellement, on peut se le permettre, d'autant plus qu'avec suffisamment de place, le serveur pourra également contenir des sauvegardes de vos données).
&lt;/p&gt;
&lt;p&gt;
Pour le reste un PC bon marché suffira amplement à nos besoins.
&lt;/p&gt;
&lt;p&gt;
Je dis HomeServer mais après tout rien n'empêche de placer l'application que j'aimerais développer sur un hébergement dédié.
&lt;/p&gt;
&lt;p&gt;
La seule différence se situe dans le fait que certains préfèrent avoir cela vraiment &amp;quot;à la maison&amp;quot; et qu'il sera plus difficile &amp;quot;d'augmenter&amp;quot; cet objet avec les fonctions décrites précédemment (table interactive...).
&lt;/p&gt;
&lt;p&gt;
Par contre, le dédié amènera des débits plus intéressant !
&lt;/p&gt;
&lt;p&gt;
Il faut bien garder en tête que cette méthode vise à fournir à tout un chacun de multiples services dans le même produit, mais à destination d'un public restreint !
&lt;/p&gt;
&lt;p&gt;
Si vous souhaitez faire 20.000 visites jours sur votre serveur web, gérer 50 comptes mails et streamer de la vidéo pour le monde entier, vous feriez mieux de vous tourner vers des solutions professionnelles !
&lt;/p&gt;
&lt;p&gt;
Par contre, si vous souhaitez gérer vos quatre comptes mails uploader vos photos du week end en Bretagne et proposer à votre famille et vos amis de regarder la vidéo du petit dernier qui souffle sa première bougie, nul besoin d'un serveur professionnel !
&lt;/p&gt;
&lt;p&gt;
Passons aux logiciels :
&lt;/p&gt;
&lt;p&gt;
Actuellement, pour que vous puissiez lire et écrire des mails partout et depuis beaucoup de terminaux différents(PC, téléphone portable notamment), l'industrie s'appuie sur des &lt;strong&gt;formats&lt;/strong&gt; et &lt;strong&gt;protocoles&lt;/strong&gt; qui ont la sympathique particularité d'être &lt;strong&gt;ouverts&lt;/strong&gt; !
&lt;/p&gt;
&lt;p&gt;
Pour les moins initiés, cela veut dire qu'il est possible à tout un chacun de connaitre l'intégralité de leur fonctionnement et donc de concevoir facilement des applications utilisant ces formats.
&lt;/p&gt;
&lt;p&gt;
Si l'on veut pouvoir gérer sa musique, ses vidéos, ses bookmarks, mais aussi ses cercles d'amis ou son frigo, il est impératifs de tirer les enseignements des problèmes du passé et de s'appuyer sur des protocoles et standards ouverts !
&lt;/p&gt;
&lt;p&gt;
Comparons à nos besoins et regardons ce qu'il existe de ce côté-là :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour la musique, la vidéo, la photo aucun problème du côté des formats de fichiers, les formats sont déjà reconnus (ogg vorbis, ogg theora, Jpeg) et ne demandent qu'à se généraliser.&lt;/li&gt;
&lt;li&gt;Pour les protocoles de streaming, on citera notamment le  &lt;abbr title=&quot;Real-time Transport Protocol&quot;&gt;RTP&lt;/abbr&gt; &lt;/li&gt;
&lt;li&gt;Pour gérer ses cercles d'amis, des solutions existent également, notamment &lt;abbr title=&quot;Friend of a Friend&quot;&gt;FOAF&lt;/abbr&gt; mais aussi des initiatives comme opensocial de Google .&lt;/li&gt;
&lt;li&gt;Pour vos mails, là aussi les solutions existent et sont plus que rodées !  &lt;/li&gt;
&lt;li&gt;Pour vos noms de domaines et vos sites web tout est près.  &lt;/li&gt;
&lt;li&gt;Pour les bookmarks, il n'y a pas à ma connaissance de format officiel même si plusieurs sites se sont calqués sur Del.icio.us pour leur formats d'import et d'export de vos bookmarks (donc un format HTML).  &lt;/li&gt;
&lt;li&gt;Pour les collections de flux RSS (ou Atom), le format de description le plus répandu est l'&lt;abbr title=&quot;Outline Processor Markup Language&quot;&gt;OPML&lt;/abbr&gt;. &lt;/li&gt;
&lt;li&gt;Pour décrire le contenu de votre frigo, tout reste à faire...  &lt;/li&gt;
&lt;li&gt;Pour dialoguer avec ce même frigo, la TV, les stores et vos lampes d'ambiances, on rentre dans le cadre de la domotique et là encore des gens se penchent sur le problème depuis quelques années et des standards existent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Comme vous pouvez le constater nous avons entre les mains tout le nécessaire pour mener à bien notre mission !
&lt;br /&gt;
Avec le nouveau HomeServer, vous avez accès à tout, partout, sur tout vos appareils, tout le temps !
&lt;/p&gt;
&lt;p&gt;
Alors il y a plus qu'à ?
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/20/OK-pour-le-HomeServer-mais-comment-3/4#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/20/OK-pour-le-HomeServer-mais-comment-3/4#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/79</wfw:commentRss>
      </item>
    
  <item>
    <title>Mes données m'appartiennent (2/4)</title>
    <link>http://blogbangbang.com/post/2008/05/15/Mes-donnees-mappartiennent</link>
    <guid isPermaLink="false">urn:md5:8638cc70297d74048deebcdd26af5f0c</guid>
    <pubDate>Thu, 15 May 2008 23:20:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>&lt;p&gt;
Le ton de mon premier billet trahissait déjà surement ma retenue sur le fait d'offrir à des sociétés tierces l'intégralité de ma vie numérique.
&lt;/p&gt;
&lt;p&gt;
De plus, j'aimerais pouvoir gérer plus finement les contenus que je mets à disposition de ces plateformes (qui peut voir telle ou telle photo), pouvoir supprimer facilement une vidéo, un profil...
&lt;/p&gt;    &lt;p&gt;
Pourtant, je suis moi aussi un grand fan du 'tout-en-ligne', je rêve du jour où ma &lt;strong&gt;musique&lt;/strong&gt;, mes &lt;strong&gt;vidéos&lt;/strong&gt;... seront accessibles aussi facilement &lt;strong&gt;au travail ou à la maison, depuis un PC, un téléphone portable, un baladeur numérique ou sur mon frigo&lt;/strong&gt; :D (oui j'aime bien le principe du frigo connecté).
&lt;/p&gt;
&lt;p&gt;
Mais à y regarder de plus près ces deux approches, sont elles vraiment incompatibles ?
&lt;/p&gt;
&lt;p&gt;
Imaginez, que plutôt que de placer vos contenus (musique, photo...) sur votre PC principal, vous déléguiez cette tâche à un autre appareil de la maison (que j'appellerai par la suite &amp;quot;&lt;strong&gt;HomeServer&lt;/strong&gt;&amp;quot;), cet appareil se ferait tout discret, mais aurait la lourde tâche d'héberger tout vos contenus.
&lt;/p&gt;
&lt;p&gt;
Comme nous sommes gourmands, imaginons que nous connections cet appareil à votre réseau &amp;quot;local&amp;quot; (en wifi tant qu'à faire ça évite les câbles qui courent partout) : vous voilà désormais avec des médias disponibles&lt;strong&gt; pour tous les PC de la maison &lt;/strong&gt;et sur votre téléphone portable quand vous êtes chez vous.
&lt;/p&gt;
&lt;p&gt;
Maintenant imaginons que nous relions cet appareil au web, nous voilà en un clin d'oeil, avec la possibilité d'accéder à tout nos contenus depuis la maison mais également &lt;strong&gt;depuis l'extérieur&lt;/strong&gt; ! vous pouvez enfin lire le dernier album de Cyndy Sanders du travail même si les chansons sont hébergées dans votre petit nid douillet.
&lt;/p&gt;
&lt;p&gt;
Tiens et puisque nous avons là un HomeServer connecté au web, pourquoi ne pas lui faire également gérer nos &lt;strong&gt;mails&lt;/strong&gt; et nos &lt;strong&gt;bookmarks&lt;/strong&gt; ?
&lt;/p&gt;
&lt;p&gt;
Maintenant, plongeons nous en 2010 ou 2015, ce n'est pas si loin ! Pourtant, nombre d'entre vous bénéficierons alors déjà de la fibre optique, votre HomeServer serait alors capable d'envoyer les données vers l'extérieur beaucoup plus vite et vous pourrez alors non plus écouter le dernier single mais également regarder le dernier clip de Cyndy Sanders depuis votre lieu de vacances !
&lt;/p&gt;
&lt;p&gt;
Et puisque ces contenus sont disponibles sur le web, pourquoi en limiter l'accès à votre petite personne ? Vos grands parents canadiens seraient surement ravis de découvrir cette perle musicale (à moins qu'ils ne préferent la vidéo du petit dernier qui souffle sa première bougie)...
&lt;/p&gt;
&lt;p&gt;
En maîtrisant de A à Z ce &amp;quot;HomeServer&amp;quot;, vous pourrez gérer très finement qui peut consulter quelle photo.
&lt;/p&gt;
&lt;p&gt;
Vous pourriez même prévenir automatiquement certaines personnes de l'ajout de nouvelles ressources sur votre &amp;quot;HomeServer&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
J'entends d'ici les ronchons qui se disent &amp;quot;oui mais bon moi je partage mon dossier musique de chez moi, j'ai configuré mon routeur et je peux y accéder de partout !&amp;quot; ou les plus geeks &amp;quot;Avec Music Player Daemon et Icecast chez moi je fais la même chose pour la musique&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
Certes la plupart des choses annoncées sont d'ores et déjà possibles, mais le but est d'en facilité la mise en place en fournissant à terme un
&amp;quot;HomeServer&amp;quot; PlugAndPlay qui permettrait toutes les choses énoncées ci-dessus pour tout le monde et même plus...
&lt;/p&gt;
&lt;p&gt;
Allez poussons le bouchon encore un peu plus loin Maurice !
&lt;/p&gt;
&lt;p&gt;
On va intégrer ce PC à votre table de salon.&lt;br /&gt;
Vous arrivez chez vous, vous posez votre téléphone portable sur la table et celle-ci se charge toute seule d'aller récupérer les dernières
photo prises pour les mettre sur votre &amp;quot;HomeServer&amp;quot; puis elle synchronise vos différents &lt;strong&gt;Agenda&lt;/strong&gt; et puisqu'elle converse régulièrement avec votre &lt;strong&gt;frigo&lt;/strong&gt; et votre &lt;strong&gt;TV&lt;/strong&gt;, elle vous rappelle que demain, Julien et Anthony viennent regarder le foot et qu'il n'y a plus de bières au frais[&lt;a id=&quot;rev-pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/05/15/#pnote-1&quot;&gt;1&lt;/a&gt;] !
&lt;/p&gt;
&lt;p&gt;
Alors, si ce &amp;quot;HomeServer&amp;quot; existait, ça ne vous tenterait pas ?
&lt;/p&gt;
&lt;p&gt;
Le but pour dire vrai n'est pas forcement de créer des clones open sources de Youtube ou FlickR mais plutôt de créer un ensemble de &lt;strong&gt;WebServices&lt;/strong&gt; et d'&lt;strong&gt;API&lt;/strong&gt; permettant à chacun de créer des applications (web ou non et de préférence open sources &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; ) pouvant se connecter aux webservices via l'API pour réaliser les différentes tâches.
&lt;/p&gt;
&lt;p&gt;
De cette manière, la communauté de développeurs Java pourra faire une application mobile, les web-addicts se feront leur FlickR like et les Iphone lovers une application de lecture de vidéos...&lt;br /&gt;
A terme tout cela serait préinstallé sur un serveur adapté et pourquoi pas installé dans un dispositif bien intégré à la maison (table basse ou autre...)
&lt;/p&gt;
&lt;p&gt;
[&lt;a id=&quot;pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/05/15/#rev-pnote-1&quot;&gt;1&lt;/a&gt;] C'est mieux que Surface de Microsoft et puis est ce Microsoft ou Google ont vraiment besoin de savoir que vous préférez la Leffe à la Kro ?
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/15/Mes-donnees-mappartiennent#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/15/Mes-donnees-mappartiennent#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/78</wfw:commentRss>
      </item>
    
  <item>
    <title>Retour sur la libération des spécifications du SWF et du FLV.</title>
    <link>http://blogbangbang.com/post/2008/05/01/Retour-sur-la-liberation-des-specifications-du-SWF-et-du-FLV</link>
    <guid isPermaLink="false">urn:md5:2e07738483a51117ce27342d49b9b781</guid>
    <pubDate>Thu, 01 May 2008 22:18:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>&lt;p&gt;
Comme &lt;a href=&quot;http://blogbangbang.com/post/2008/05/01/Flash-en-route-vers-la-liberte&quot;&gt;promis&lt;/a&gt; (finalement j'ai été plus vite que prévu), je vais revenir ici sur les changements apportés par l'annonce récente de la libération des spécifications des formats swf et flv faîte par Adobe aujourd'hui.
&lt;/p&gt;
&lt;p&gt;
Cet article va donc s'efforcer de détailler ce qui va changer, mais aussi ce qui ne changera pas suite à cette annonce.
&lt;/p&gt;    &lt;h3&gt;Ce qui change : &lt;/h3&gt;
&lt;h4&gt;Le player unique&lt;/h4&gt;
&lt;p&gt;
C'est le principal changement apporté par cette nouvelle, d'autres players flashs vont être écrits et chacun va pouvoir écrire le sien.
&lt;/p&gt;
&lt;p&gt;
Cette situation à des avantages, on va pouvoir avoir de bon player flash sur des plateformes non-supportés par le player officiel (64bits, &lt;a href=&quot;http://en.wikipedia.org/wiki/Intel_Mobile_Internet_Device&quot; hreflang=&quot;en&quot;&gt;MID&lt;/a&gt;...) ainsi que des mini-players (j'y reviendrais plus tard) et ses inconvénients, on va surement voir apparaître des problèmes de compatibilité de certaines fonctionnalités de flash sur certains players notamment à cause des plateformes
(même si c'est déjà le cas avec le player officiel qui par exemple ne supporte pas le scrolling sous Mac).
&lt;/p&gt;
&lt;p&gt;
Malgré quelques déboires à prévoir, c'est vraiment la révolution apportée par cette annonce, vos télévisions, votre portable, votre frigo... pourront bientôt embarquer un player flash quelquesoit leur architecture matérielle !
&lt;/p&gt;
&lt;p&gt;
De plus dans son annonce, Adobe annnonce un énigmatique &amp;quot;Publishing the device porting layer APIs for Adobe Flash Player&amp;quot;, qui selon les rumeurs, se traduirait par un player flash livré en deux parties.
La première serait le player proprement dit (machine virtuelle, codecs...), et la deuxième serait une couche d'abstraction (&amp;quot;device porting layer&amp;quot;) correspondant à l'architecture matériel hôte.
Il suffirait donc de coder cette couche d'abstraction pour profiter du player officiel sur de nouvelles plateformes, à suivre, car cela limiterait en grande partie les problèmes de compatibilité...
&lt;/p&gt;
&lt;h4&gt;L'accessibilité&lt;/h4&gt;
&lt;p&gt;
Si le format SWF est ouvert, puisque finalement c'est bien de celà qu'il s'agit, l'accessibilité du flash va s'en trouver transformée !
&lt;/p&gt;
&lt;p&gt;
En effet, les lecteurs d'écran et autres dispositifs destinés aux différents handicaps pourront intégrer leur propre lecteur (les fameux mini-lecteurs) et adapter la lecture des contenus Flash à l'utilisateur.
&lt;/p&gt;
&lt;h4&gt;L'indexation&lt;/h4&gt;
&lt;p&gt;
L'indexation est finalement un problème assez proche de l'accessibilité et de la même façon que les lecteurs d'écran pourront &amp;quot;lire&amp;quot; ces contenus, les robots fureteurs de Google et ses amis pourraient bien intégrer une version minimaliste d'un player flash capable de lire les différents contenus et donc, de les indexer.
&lt;/p&gt;
&lt;p class=&quot;avertissement&quot;&gt;
Attention, l'accessibilité ne se résume pas à une question de formats (ouvert ou non).
&lt;br /&gt;
L'accessibilité passe aussi notamment par des contenus &amp;quot;structurés&amp;quot;.
Un site HTML qui ne contiendrait que des &amp;quot;div&amp;quot; et une tartine de CSS n'aurait rien d'accessible !  &lt;br /&gt;
En HTML, c'est les balises qui décrivent le contenu ( &amp;lt;p&amp;gt; pour un paragraphe, &amp;lt;h1&amp;gt; pour un titre de niveau 1 &amp;lt;h2&amp;gt; pour un titre de niveau 2 ...)
&lt;br /&gt;
A ce titre, il faut espérer que flash intégrera dans ses prochaines versions un mécanisme de structuration des contenus afin d'apporter une notion de sémantique à ses contenus.
&lt;/p&gt;
&lt;h4&gt;Les développements de contenus Flash&lt;/h4&gt;
&lt;p&gt;
En libérant les spécifications des formats SWF et FLV, Adobe ne se contente pas de facilité leur lecture, ils vont aussi faciliter leur création, on peut donc imaginer que des
Flash IDE et Flex Builder alternatifs devraient voir le jour ces prochains mois.
&lt;/p&gt;
&lt;p&gt;
Pour le PDF, son ouverture avait permis son intégration dans un grand nombre de logiciel tiers avec la possibilité d'exporter son document en PDF, on pourrait pourquoi pas imaginer la même chose par exemple dans une plateforme de blog que l'on pourrait avoir soit en flash, soit en HTML (même si je ne souhaite pas voir apparaître de tel solutions notamment pour les problèmes d'accessibilité abordés juste au-dessus).
&lt;/p&gt;
&lt;h3&gt;Ce qui ne change pas (pour le moment ? ) :&lt;/h3&gt;
&lt;h4&gt;La sécurité&lt;/h4&gt;
&lt;p&gt;
J'ai abordé dans un billet récent le problème de la sécurité du player Flash, celui-ci ne change pas suite à cette ouverture puisque le player reste lui propriétaire.
&lt;br /&gt;
On ne sait toujours pas ce qui se passe dans celui-ci et les problèmes de sécurité sont donc toujours là, ils sont même plus présent puisque les plateformes &amp;quot;d'attaque&amp;quot; vont se multiplier.
&lt;/p&gt;
&lt;p&gt;
Imaginez un nouveau virus qui passerait par une faille de sécurité de Flash, il ne viserait alors plus &amp;quot;que&amp;quot; les PC mais aussi les mobiles et autres dispositifs intégrant le player.
&lt;/p&gt;
&lt;p&gt;
Par contre dans le cas de logiciels nécessitant une sécurité avancée, ils pourraient embarquer un des players libres amenés à sortir et donc limité les problèmes de sécurité.
&lt;/p&gt;
&lt;h4&gt;Le streaming ?&lt;/h4&gt;
&lt;p&gt;
C'est presque hors sujet mais à-priori, cette annonce ne fait pas mention du protocole RTMP,
le protocole utilisé par Flash pour streamer de la vidéo et dont l'ouverture offrirait une myriade de possibilités.
&lt;/p&gt;
&lt;h3&gt;Conclusion :&lt;/h3&gt;
&lt;p&gt;
Selon moi, cette nouvelle est évidemment une excellente nouvelle même si elle ne va pas encore assez loin.
&lt;/p&gt;
&lt;p&gt;
La première conséquence va être comme je l'ai expliqué, la prolifération de nouveaux players Flash et forcément, l'avantage N°1 du flash (la quasi absence de problèmes de compatibilité)
va en prendre un coup.
&lt;/p&gt;
&lt;p&gt;
Pour ce qui est de la &amp;quot;guerre&amp;quot; des applications web mobile, qui comprenait pour le moment Google et son Android et Apple avec l'Iphone, Adobe va surement devenir le troisième participant et la lutte s'annonce rude !
&lt;/p&gt;
&lt;p&gt;
Enfin, ma recherche d'informations sur les blogs anglophone m'as également permis d'apprendre de nombreuses choses et notament des raisons qui se tiennent (plus que les miennes) pour expliquer la non-libération du player flash.
&lt;/p&gt;
&lt;p&gt;
En effet, certains codecs audios et videos (comme le H.264 ou le fameux NellyMoser) ne sont pas libres mais également pas gratuits !
&lt;br /&gt;
Adobe paye pour intégrer ces composants à son player.
&lt;/p&gt;
&lt;p&gt;
La prochaine étape est donc de &amp;quot;remplacer&amp;quot; ces codecs par des codecs libres (il en existe pourtant tant de très bons ! Pourquoi avoir été chercher du côté des codecs propriétaires ? )
&lt;/p&gt;
&lt;p&gt;
Et vous, vous en pensez quoi de cette annonce, vous êtes plus ravi de la bonne nouvelle pour les mobiles ou vous craignez les problèmes de compatibilité un peu partout ?
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/01/Retour-sur-la-liberation-des-specifications-du-SWF-et-du-FLV#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/01/Retour-sur-la-liberation-des-specifications-du-SWF-et-du-FLV#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/74</wfw:commentRss>
      </item>
    
  <item>
    <title>Flash en route vers la liberté ?</title>
    <link>http://blogbangbang.com/post/2008/05/01/Flash-en-route-vers-la-liberte</link>
    <guid isPermaLink="false">urn:md5:6056474b3fc760379eb3cdadb1e20c17</guid>
    <pubDate>Thu, 01 May 2008 16:02:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>    &lt;p&gt;
Alors, ça y est, c'est donc vrai ?
&lt;/p&gt;
&lt;p&gt;
Les dirigeants d'Adobe lisent ce blog !
&lt;/p&gt;
&lt;p&gt;
Pourquoi cet enthousiasme ?
&lt;br /&gt;
Parce qu'Adobe vient d'annoncer la libération des spécifications des formats SWF et FLV (&lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/aboutadobe/pressroom/pressreleases/200804/050108AdobeOSP.html&quot;&gt;Annonce officielle&lt;/a&gt;), sous un projet au doux nom de &lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/openscreenproject/&quot;&gt;Open Screen Project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Il va me falloir un peu plus de temps pour décrire les conséquences réelles de cette libération
mais on peut déjà imaginer que les players libres alternatifs (Gnash, SWFDec...) vont très rapidement refaire leur retard sur le player officiel.
&lt;/p&gt;
&lt;p&gt;
Atention, Adobe n'as pas annoncé pour le moment la libération du player,
mais juste des spécifications, mais si Adobe souhaite voir son player et pas un autre installé
dans les différents &amp;quot;devices&amp;quot;, ils le feront peut-être.
&lt;/p&gt;
&lt;p&gt;
Aujourd'hui, Adobe à en fait mis les formats SWF et FLV au même niveau que le format PDF.
&lt;br /&gt;
Le format de document est ouvert (mais pas libre pour le moment) et chacun peut créer facilement son lecteur PDF (et pourquoi pas le founir en open source &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; ).
&lt;br /&gt;
Les lecteurs officiels (AcrobatReader ou le Player Flash) restent eux propriétaires.
&lt;/p&gt;
&lt;p&gt;
Ce sera tout pour aujourd'hui, un autre article examinant plus en détails les conséquences de cet acte arrivera dans les jours à venir (&lt;a href=&quot;http://blogbangbang.com/post/2008/05/01/Retour-sur-la-liberation-des-specifications-du-SWF-et-du-FLV&quot;&gt;il est là&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Une chose est sûre, les conséquences sont lourdes, très lourdes !
&lt;/p&gt;
&lt;p&gt;
P.S. : Tout ceci sera réel à compter de la prochaine major release (ils sors quand le player 10 ? )
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/01/Flash-en-route-vers-la-liberte#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/01/Flash-en-route-vers-la-liberte#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/73</wfw:commentRss>
      </item>
    
  <item>
    <title>Un peu de lecture</title>
    <link>http://blogbangbang.com/post/2008/04/24/Un-peu-de-lecture</link>
    <guid isPermaLink="false">urn:md5:f617ecbc170d7f0ba373b1b6d7335fbc</guid>
    <pubDate>Thu, 24 Apr 2008 00:08:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>livre</category><category>ruby</category><category>RubyOnRails</category>    
    <description>    &lt;p&gt;Je viens de recevoir ceci : &lt;/p&gt;
&lt;a class=&quot;thickbox&quot; title=&quot;The Rails and the Ruby way&quot; href=&quot;http://blogbangbang.com/images/rails_and_ruby_way.jpg&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;The Rails and the Ruby way&quot; src=&quot;http://blogbangbang.com/images/small_rails_and_ruby_way.jpg&quot; /&gt;
&lt;/a&gt;
&lt;p&gt;
Deux pavés d'environ 850 pages chacun qui ne sont pas près de quitter mon bureau &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Ces livres ne sont pas à conseiller aux vrais débutants (qui iront plutôt vers &lt;a href=&quot;http://blogbangbang.com/post/2007/05/11/Livte-%3A-Ruby-on-rails-seconde-edition&quot;&gt;celui-ci&lt;/a&gt; chez Eyrolles) puisqu'il ne s'agit pas vraiment de livre aidant à l'apprentissage, mais plus de &amp;quot;bible&amp;quot; de Ruby et de Rails qui vous donneront les outils et méthodes à utiliser pour un problème donné&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
J'ai déjà commencé à fouiner un peu dans chacun et les problématiques abordées sont vraiment larges et pour certains plutôt pointues ! &lt;br /&gt;
Je crois que vais bien m'amuser &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/04/24/Un-peu-de-lecture#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/04/24/Un-peu-de-lecture#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/72</wfw:commentRss>
      </item>
    
  <item>
    <title>Pourquoi le player flash n'est pas déjà libre ?</title>
    <link>http://blogbangbang.com/post/2008/04/21/Pourquoi-le-player-flash-nest-pas-deja-libre</link>
    <guid isPermaLink="false">urn:md5:20feac58a10f3bc16c16bcbc9758ae7e</guid>
    <pubDate>Mon, 21 Apr 2008 23:24:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>flash</category><category>sécurité</category>    
    <description>&lt;p&gt;
Un sujet récurent sur ce blog et un de mes bouc-émissaire préféré, le player flash...&lt;br /&gt;
Ce tout petit logiciel installé sur parait-il, plus de 98.8 % des &amp;quot;Internet-enabled desktops&amp;quot; des &amp;quot;mature markets&amp;quot;[&lt;a id=&quot;rev-pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#pnote-1&quot;&gt;1&lt;/a&gt;], n'est pourtant toujours pas libre (Ah croire que les dirigeants d'Adobe ne lisent même pas ce blog :D)&lt;br /&gt;
Mais la vraie question, c'est pourquoi ne l'est-il toujours pas ?
Et en discutant avec quelques amis plus flasheurs que moi, eux aussi se posent la question...
&lt;/p&gt;    &lt;p&gt;
Après tout le player ne rapporte pas d'argent à Adobe et en ne le libérant pas, ils se coupent comme je l'ai &lt;a href=&quot;http://blogbangbang.com/post/2007/12/12/Flash-is-everywhere-or-not&quot;&gt;déjà expliqué&lt;/a&gt; d'une partie des utilisateurs supposés de ce player
et des architectures matérielles exotiques qui aimeraient en profiter (64bits...).
&lt;/p&gt;
&lt;p&gt;
Pourtant, dernièrement une possible réponse m'est apparue.
En effet le flash player est installé sur un nombre important de machine et même s'il
est régulièrement accusé pour ses failles de sécurité, celles-ci restent bien cachées et peu exposées au grand public.&lt;br /&gt;
Pourtant récemment, c'est bien grâce une faille du player Flash qui a permis de faire tomber la machine sous Vista[&lt;a id=&quot;rev-pnote-2&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#pnote-2&quot;&gt;2&lt;/a&gt;]
lors du &amp;quot;PWN to OWN contest&amp;quot; (un concours visant à tester la sécurité des OS Mac OS Leopard, Windows Vista et Linux Ubuntu)[&lt;a id=&quot;rev-pnote-3&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#pnote-3&quot;&gt;3&lt;/a&gt;], et si l'on se rend sur les différents sites (anglophones) traitant de sécurité informatique on peut se rendre compte que flash est souvent décrié sur ce point.
&lt;/p&gt;
&lt;p&gt;
Le problème, c'est que quand un hacker cherche à prendre le contrôle d'une machine distante, il va chercher à exploiter une faille d'un logiciel installé sur celle-ci.
Hors Flash est installé à peu près partout (je suppose qu'il y a plus de player Flash installés de part le monde que de Windows), cela en fait une cible idéale. &lt;/p&gt;
&lt;p&gt;Le vrai problème est qu'il n'est pas possible à chacun (chaque OS ou chaque navigateur) d'implémenter sa machine virtuelle pour interpreté l'ActionScript. &lt;br /&gt;
Il n'existe qu'une (ou presque) machine virtuelle  (la machine officielle) et lorsque l'on trouve une faille dans celle-ci on touche donc absolument tous les players flash de la planète( la dernière faille trouvée permettait de prendre le contrôle de la machine distante et était exécutable sur Mac, Linux, Windows et sur toutes les versions de Flash depuis la 7 ! )
&lt;/p&gt;
&lt;p&gt;
Revenons au fait, si Adobe libérait le code de son player immédiatement, il s'en suivrait une période de flottement ou des dizaines et des dizaines de failles seraient surement découvertes en peu de temps.
Ce qui aurait pour effet de ternir l'image de Flash pour pas mal de monde ! &lt;br /&gt;
Certains en déduirais presque que je viens de donner un argument à Adobe pour garder son code propriétaire.
&lt;/p&gt;
&lt;p&gt;
Mais d'un autre côté, à l'heure ou l'on parle de plus en plus de flash pour faire de l'applicatif(Flex, Air et leurs amis).
Peut-on vraiment se permettre d'utiliser dans des secteurs ou la sécurité est souvent très importante un player et une technologie qui eux ne sont pas sécurisés ?
&lt;/p&gt;
&lt;p&gt;
Un jour ou l'autre, Adobe devra libérer son player (à moins qu'une faille plus importante que les autres mette beaucoup de monde sur les genoux et décrédibilise le player face à une concurrence qui pointe le bout de son nez [&lt;a id=&quot;rev-pnote-4&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#pnote-4&quot;&gt;4&lt;/a&gt;]).
&lt;/p&gt;
&lt;p&gt;
Adobe devrait donc le libérer au plus vite d'autant plus qu'ils se sont déjà rapproché du libre avec Flex et Tamarin et qu'ils ont là un vivier de bêta-découvreurs de failles qui pourrait leur permettre de découvrir une grande partie des failles de sécurité avant une réelle libération du player Flash.
&lt;br /&gt;
De plus certaines société spécialisées seraient surement prête à exécuter cette mission contre quelques euros...
&lt;/p&gt;
&lt;p&gt;
[&lt;a id=&quot;pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#rev-pnote-1&quot;&gt;1&lt;/a&gt;] &amp;quot;Internet-enabled desktops&amp;quot; et &amp;quot;mature markets&amp;quot;, avec deux trois autres conditions, ils auraient pu nous annoncer 100% &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;br /&gt;
[&lt;a id=&quot;pnote-2&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#rev-pnote-2&quot;&gt;2&lt;/a&gt;] L'an dernier c'est le player quicktime qui avait fait sauter une machine, saloperies de players propriétaires &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; !
&lt;br /&gt;
[&lt;a id=&quot;pnote-3&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#rev-pnote-3&quot;&gt;3&lt;/a&gt;] Sachez pour information que le MacBook Air est tombé le premier à cause d'une faille de Safari, suivi de la machine Vista pour la faille Flash, le Ubuntu lui n'est pas tombé bien que la faille Flash aurait pu être exploité sous tous les systèmes sus-cités.
&lt;br /&gt;
[&lt;a id=&quot;pnote-4&quot; href=&quot;http://blogbangbang.com/post/2008/04/21/#rev-pnote-4&quot;&gt;4&lt;/a&gt;] Sylverlight pour la vidéo et l'applicatif même si on peut imaginer qu'à terme, le problème serait le même.
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://blogbangbang.com/images/flash_bug.png&quot; class=&quot;billet&quot; /&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/04/21/Pourquoi-le-player-flash-nest-pas-deja-libre#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/04/21/Pourquoi-le-player-flash-nest-pas-deja-libre#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/71</wfw:commentRss>
      </item>
    
  <item>
    <title>Sortir des conventions dans Rails - retour d'expérience.</title>
    <link>http://blogbangbang.com/post/2008/04/08/Sortir-des-conventions-dans-Rails-retour-dexperience</link>
    <guid isPermaLink="false">urn:md5:654029dfe70b837d7752064c06f44387</guid>
    <pubDate>Tue, 08 Apr 2008 23:01:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>ruby</category><category>RubyOnRails</category><category>Tutorial</category>    
    <description>&lt;p&gt;
Tout d'abord, sachez qu'il ne faut jamais outrepasser les conventions de Rails sans une excellente raison.
&lt;/p&gt;
&lt;p&gt;
Toutefois, il arrive que l'on ai une excellente raison, le cas présenté dans ce billet sera celui (tiré d'une application réelle) d'une base de données assez mal conçue où les noms de tables sont tous au singulier et où, comble du massacre, les id d'une des tables sont sous forme de chaine de caractères.
&lt;/p&gt;
&lt;p&gt;
Bien sur, cette base de données est utilisée par 18 autres applications dans la société et vous ne pouvez en aucun cas en modifier la structure (sinon ce serait trop facile).
&lt;/p&gt;    &lt;h3&gt;Problème N°1 : Les noms de tables.&lt;/h3&gt;
&lt;p&gt;
Notre premier problème est donc que Rails considère par défaut qu'un nom de modèle doit-être un singulier et que le nom de la table correspondante doit être un pluriel. 
&lt;/p&gt;
&lt;p&gt;
Nous pourrions donc ajouter à l'un de nos modèles la ligne suivante :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;pluralize_table_names&lt;/span&gt; = &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;false&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
Mais selon moi, cette propriété étant commune à tous nos modèles, il n'est pas logique de la placer dans l'un d'entre eux. Nous allons donc spécifier cette propriété générale à tous les instances d'AciveRecord ailleurs.
&lt;/p&gt;
&lt;p&gt;
Pour cela, la version 2 de Rails nous offre un dossier config/initializers où placer tous nos scripts à exécuter au démarrage de l'application après les configurations par défaut, c'est donc l'endroit parfait pour rajouter un script &amp;quot;do_not_pluralize.rb&amp;quot; avec pour contenu : 
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;module&lt;/span&gt; ActiveRecord&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; Base&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;pluralize_table_names&lt;/span&gt; = &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;false&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Et voilà, nous venons d'overrider le paramètre pluralize_table_names d'ActiveRecord::Base et désormais, tout est clean.
&lt;/p&gt;

&lt;h3&gt;Problème N°2 : Des chaînes de caractères comme id, drôle d'idée...&lt;/h3&gt;
&lt;p&gt;
Les id de notre table &amp;quot;comment&amp;quot; (nom d'emprunt) sont donc des strings. Cela ne pose aucun problème à activeRecord qui saura évidemment faire un find(&amp;quot;a12.bcd.3456789&amp;quot;) si &amp;quot;a12.bcd.3456789&amp;quot; est la valeur du champ id de notre enregistrement.
&lt;/p&gt;
&lt;p&gt;
Là où intervient le problème, c'est que comme vous êtes quelqu'un d'attentif, vous savez qu'avec Rails2, &lt;a href=&quot;http://fr.wikipedia.org/wiki/REST&quot;&gt;REST&lt;/a&gt; et les &lt;a href=&quot;http://wiki.Rubyonrails.org/rails/pages/NamedRoutes&quot;&gt;named routes&lt;/a&gt; ont enfin droit leurs heures de gloire.
&lt;/p&gt;

&lt;p&gt;
Or, cela implique que l'URL d'accès à votre enregistrement soit de la forme : 
&lt;/p&gt;

&lt;p&gt;
/comments pour la liste des commentaires.&lt;br /&gt;
/comments/1 pour le commentaire 1&lt;br /&gt;
/comments/last pour une méthode supplémentaire last que vous auriez définie et qui vous ramènerait probablement les derniers commentaires. &lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
Or avec notre id, l'url est de la forme &amp;quot;/comments/a12.bcd.3456789&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
Rails pense alors que 'a12.bcd.3456789' est une méthode à appeler  mais il ne la trouvera évidement jamais.
&lt;/p&gt;

&lt;div class=&quot;edit&quot;&gt;
&lt;p&gt;
&lt;b&gt;Edit du 17/04/08&lt;/b&gt;&lt;br /&gt;
Avant de vous montrer la solution que j'ai utilisé dans mon cas je vais suite au commentaire de Nicolas, de &lt;a href=&quot;http://blog.boldr.fr/&quot;&gt;boldr.fr&lt;/a&gt; vous montrer une solution qui fonctionnera dans la majorité des cas (mais pas le mien.)
&lt;/p&gt;

&lt;p&gt;
Afin de dire à rails d'utiliser autre chose qu'un id numérique dans les url de la forme &amp;quot;/comments/1&amp;quot; il existe une option des ressources appellée member_path. 
En modifiant donc votre fichier &amp;quot;config/routes.rb&amp;quot;, vous pouvez indiqué à Rails d'utiliser l'id de votre table pour avoir des url de la forme &amp;quot;/comments/a12bcd3456789&amp;quot; comprises par rails.
&lt;/p&gt;
&lt;p&gt;Il suffit donc de remplacer : &lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;map.&lt;span style=&quot;color:#9900CC;&quot;&gt;resources&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:comments&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;map.&lt;span style=&quot;color:#9900CC;&quot;&gt;resources&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:comments&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:member_path&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#996600;&quot;&gt;'/comments/:id'&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;Grâce à celà, vous éviterez beaucoup d'ennuis mais malheureusement, la solution ne fonctionne pas si l'id nouveau contient des '&lt;b&gt;.&lt;/b&gt;' car rails se sert de ce caractère pour séparer la partie relative à l'url de l'action de la partie relative au format de retour (html, xml, js...).
&lt;/p&gt;
&lt;p&gt;La solution dans mon cas devait donc venir d'autre part...&lt;/p&gt;
&lt;/div&gt;



&lt;p&gt;
Dans le cas que j'ai eu à d'étudier, le salut est venu du fait que la suite de nombre suffixant l'id (ici '3456789') était unique, j'ai donc décider d'utiliser celle-ci comme paramètre de l'URL. 
&lt;/p&gt;
&lt;p&gt;
Pour récupérer ce nouvel id (que j'appellerai numeric_id), j'ai donc écrit la méthode suivante : 
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; numeric_id&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;id&lt;/span&gt;.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;last&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;to_i&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Il ne me restait plus qu'à indiquer à rails d'utiliser ce paramètre dans les URL grâce à la méthode to_param &lt;sup&gt;[&lt;a id=&quot;rev-pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/04/08/#pnote-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; (toujours dans mon modèle).
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; to_param&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;#{self.numeric_id}&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Grâce à cela, j'ai donc des url &amp;quot;/comments/3456789&amp;quot; que Rails analisera sans problème.
&lt;/p&gt;
&lt;p&gt;
Dernières modifications, il faut indiquer aux méthodes agissant sur un seul enregistrement dans le controller (show, edit, update, destroy et celle que vous pourriez créer) d'utiliser notre nouvel identifiant numérique plutôt que celui par défaut.
&lt;/p&gt;
&lt;p&gt;
Pour cela je rajoute une méthode find_by_numeric_id dans notre modèle : 
&lt;/p&gt;
  def self.find_by_numeric_id(nid)
    Comment.find(:first,:conditions =&amp;gt; ['id LIKE ? ', '%'+nid.to_s])
  end
&lt;p&gt;
Et je modifie les méthodes précédemment citées pour utiliser notre find, ma méthode show devient donc :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;# GET /comments/1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;# GET /comments/1.xml&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; show&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@comment&lt;/span&gt; = Comment.&lt;span style=&quot;color:#9900CC;&quot;&gt;find_by_numeric_id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; respond_to &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |format|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;# show.html.erb&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;xml&lt;/span&gt; &amp;nbsp;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; render &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:xml&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@comment&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Et voilà vous avez désormais une base seine sur laquelle faire reposer la suite de votre développement. 
&lt;/p&gt;

&lt;p&gt;Je me répète mais ce genre de modification ne doit être utilisé que si vous ne pouvez pas faire autrement&lt;/p&gt;

&lt;p&gt;[&lt;a id=&quot;pnote-1&quot; href=&quot;http://blogbangbang.com/post/2008/04/08/#rev-pnote-1&quot;&gt;1&lt;/a&gt;]Attention, si vous prévoyez d'utiliser la méthode to_param dans le cas d'un model Active_ressource, allez faire un tour &lt;a href=&quot;http://dev.Rubyonrails.org/changeset/9114&quot;&gt;ici&lt;/a&gt; afin de résoudre un bug de rails (corrigé dans la version SVN) qui fait que activeressource utilise parfois l'id au lieu de to_param.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/04/08/Sortir-des-conventions-dans-Rails-retour-dexperience#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/04/08/Sortir-des-conventions-dans-Rails-retour-dexperience#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/70</wfw:commentRss>
      </item>
    
  <item>
    <title>A l'écoute du marché</title>
    <link>http://blogbangbang.com/post/2008/04/02/A-lecoute-du-marche</link>
    <guid isPermaLink="false">urn:md5:cb60e31ab5292f7cff1f169ebc9a7482</guid>
    <pubDate>Wed, 02 Apr 2008 23:58:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>emploi</category>    
    <description>    &lt;p class=&quot;modification&quot;&gt;
J'ai trouvé mon futur employeur. Je ne suis donc plus à l'écoute du marché pour le moment.
&lt;/p&gt;
&lt;p&gt;
Ceux qui me lisent régulièrement le savent sûrement, je suis actuellement étudiant en apprentissage
dans la formation &lt;a href=&quot;http://www.gobelins.fr/fi/multimedia/concepteurrealisateur.htm&quot;&gt;Concepteur Réalisateur Multimédia&lt;/a&gt; aux &lt;a href=&quot;http://www.gobelins.fr&quot;&gt;Gobelins&lt;/a&gt; et
dans la société &lt;a href=&quot;http://a-g.fr&quot;&gt;Abtrakt Graphics&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Mon apprentissage se termine au mois de juin et même si ma société actuelle souhaite me conserver dans son effectif, je suis à l'écoute d'autres propositions.
&lt;/p&gt;
&lt;p&gt;
Je souhaite tout particulièrement m'investir dans les domaines du développement web à l'aide du framework en &lt;a href=&quot;http://rubyonrails.com&quot;&gt;Ruby On Rails&lt;/a&gt; et du respect des standards du web.
J'apprécie également les projets bien menés, les méthodes agiles et la conception orientée utilisateurs.
&lt;/p&gt;
&lt;p&gt;
Je cherche donc l'entreprise qui me permettrait de mettre en œuvre ces compétences et j'invite les personnes intéressées à consulter mon CV à l'adresse suivante :
&lt;a href=&quot;http://cv.blogbangbang.com&quot;&gt;cv.blogbangbang.com&lt;/a&gt;
et à me &lt;a href=&quot;mailto:jonathan.blanchet@gmail.com&quot;&gt;contacter&lt;/a&gt; si mon profil les intéresse.
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/04/02/A-lecoute-du-marche#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/04/02/A-lecoute-du-marche#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/69</wfw:commentRss>
      </item>
    
  <item>
    <title>Premier RailsCamp parisien</title>
    <link>http://blogbangbang.com/post/2008/04/01/Premier-RailsCamp-parisien</link>
    <guid isPermaLink="false">urn:md5:eece202c4d7cf0547761a4897eff5f0f</guid>
    <pubDate>Tue, 01 Apr 2008 23:14:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>    &lt;p&gt;
Rails progresse encore, la preuve c'est que pour la première fois, un &lt;a href=&quot;http://barcamp.org/RailsCampParis&quot; hreflang=&quot;fr&quot;&gt;RailsCamp&lt;/a&gt; aura lieu à Paris le 17 mai.
&lt;img class=&quot;billet&quot; src=&quot;http://blogbangbang.com/images/railscamp_paris.png&quot; alt=&quot;logo railscamp&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;C'est quoi un Railscamp ? &lt;/strong&gt; &lt;br /&gt;
Un Railscamp, c'est un Barcamp sur RubyOnRails et un BarCamp est une &amp;quot;non-conférence&amp;quot; ouverte qui prend la forme d'ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un titre ou à un autre, apporter quelque chose au Barcamp (définition de la page officielle du RailsCamp).&lt;/p&gt;
&lt;p&gt;
Je serais donc de la partie en espérant que naisse de cet évènement, des rencontre sympa avec d'autres Railers, des projets sympa et pourquoi pas plus. &lt;/p&gt;
&lt;p&gt;
Par contre, je ne sais pas encore ce que je vais amener à part ma bonne humeur et ma motivation :).
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/04/01/Premier-RailsCamp-parisien#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/04/01/Premier-RailsCamp-parisien#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/68</wfw:commentRss>
      </item>
    
  <item>
    <title>Comparatif Prototype vs Jquery</title>
    <link>http://blogbangbang.com/post/2008/03/27/Comparatif-Prototype-vs-Jquery</link>
    <guid isPermaLink="false">urn:md5:cbb9121d0df9bdaa707c0c697126103e</guid>
    <pubDate>Thu, 27 Mar 2008 00:36:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>javascript</category><category>jquery</category><category>prototype</category>    
    <description>&lt;p&gt;
Retour des billets plus &amp;quot;technos&amp;quot; avec un comparatif des deux frameworks Javascripts les plus utilisés du moment, j'ai nommé Prototype et Jquery.
&lt;br /&gt;
Jusqu'ici j'étais plutôt Prototype, car je l'ai connu avant, qu'il est le framework par défaut de Rails auquel il est magnifiquement intégré.
&lt;br /&gt;
Mais à force d'entendre dire que Jquery était plus esthétique plus facile, plus sympa, je me suis dit qu'il fallait que j'essai.
&lt;/p&gt;    &lt;p&gt;
Il en est ressorti le billet suivant comparant le nécessaire dans chacun des deux framework pour réaliser les mêmes opérations.
&lt;br /&gt;
Ces bouts de code correspondent en partie à ceux utilisés dans le billet &lt;a href=&quot;http://blogbangbang.com/post/2008/02/04/Tutorial-%3A-Prototype-and-JSON&quot;&gt;Tutorial : Prototype and JSON&lt;/a&gt; et les fichiers sont disponibles au téléchargement (&lt;a href=&quot;http://lab.blogbangbang.com/jquery_prototype/proto.js&quot;&gt;prototype&lt;/a&gt; / &lt;a href=&quot;http://lab.blogbangbang.com/jquery_prototype/jq.js&quot;&gt;jquery&lt;/a&gt;).
&lt;br /&gt;
L'application est quand à elle visible ici pour &lt;a href=&quot;http://lab.blogbangbang.com/jquery_prototype/jquery.html&quot;&gt;Jquery&lt;/a&gt; et ici pour &lt;a href=&quot;http://lab.blogbangbang.com/jquery_prototype/prototype.html&quot;&gt;Prototype&lt;/a&gt;.
&lt;/p&gt;


&lt;h3&gt;Ecouter l'évènement signalant que le DOM est chargé et lancer une méthode. &lt;/h3&gt;

&lt;h4&gt;Prototype&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;document.&lt;span style=&quot;color: #006600;&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'dom:loaded'&lt;/span&gt;, init&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;h4&gt;Jquery&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;document&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;ready&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;init&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;

&lt;p&gt;
La syntaxe Jquery est un peu plus courte, mais à mon sens un peu moins lisible ('dom:loaded' est plus clair que 'ready' )
Pas de quoi fouetter un chat donc :
&lt;/p&gt;
&lt;p class=&quot;score&quot;&gt;
Prototype 1 - 1 Jquery
&lt;/p&gt;

&lt;h3&gt;Écouter un évenement sur un ensemble d'objets du DOM&lt;/h3&gt;


&lt;h4&gt;Prototype&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;$$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'a'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'observe'&lt;/span&gt;, &lt;span style=&quot;color: #3366CC;&quot;&gt;'click'&lt;/span&gt;, link_click_handler&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;h4&gt;Jquery&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'a'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link_click_handler&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;p&gt;
Ici clairement, la concision comme la clarté sont du côté de Jquery à moins qu'il y ait moyen de faire plus propre en Prototype ?
&lt;/p&gt;
&lt;p class=&quot;score&quot;&gt;
Prototype 1 - 2 Jquery
&lt;/p&gt;
&lt;h3&gt;Réaliser une opération Ajax simple (1 callback max).&lt;/h3&gt;

&lt;h4&gt;Prototype&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Ajax.&lt;span style=&quot;color: #006600;&quot;&gt;Request&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'json.php'&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; method: &lt;span style=&quot;color: #3366CC;&quot;&gt;'post'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; parameters: &amp;nbsp;$H&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; onSuccess: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport.&lt;span style=&quot;color: #006600;&quot;&gt;responseJSON&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;h4&gt;Jquery&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;$.&lt;span style=&quot;color: #006600;&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;'proto.php'&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;data, textStatus&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;data&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;json&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;p&gt;
La concision est encore légèrement du côté de Jquery, mais la lisibilité est encore pour Prototype.&lt;br /&gt;
Perso j'aime beaucoup l'utilisation de chaine comme clé de tableau (method, parameters...) de Prototype qui fait penser aux symboles de Ruby.&lt;br /&gt;
Par contre je n'aime pas le fait de devoir passer mon tableau link à la méthode $H pour que tout ce passe bien. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Pas de note ici, vous allez comprendre pourquoi juste après.
&lt;/p&gt;

&lt;h3&gt;Réaliser une opération Ajax avancée (plus de 1 callback).&lt;/h3&gt;

&lt;h4&gt;Prototype&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Ajax.&lt;span style=&quot;color: #006600;&quot;&gt;Request&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'json.php'&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; method: &lt;span style=&quot;color: #3366CC;&quot;&gt;'post'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; parameters: &amp;nbsp;$H&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; onLoading: toggleLoader,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; onSuccess: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport.&lt;span style=&quot;color: #006600;&quot;&gt;responseJSON&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; onFailure: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'There was a problem'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; onComplete: toggleLoader&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;

&lt;h4&gt;Jquery&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;$.&lt;span style=&quot;color: #006600;&quot;&gt;ajax&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; type: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;json.php&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;data: link,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dataType: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;json&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;beforeSend: toggleLoader,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;msg&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;msg&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;error: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;req,str,e&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;str&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;complete: toggleLoader&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;p&gt;
Alors là, du coup je suis bien embetté, Jquery se met aux clés nommées également et y gagne en lisibilité mais du coup, il perd en cohérence.&lt;br /&gt;
Si l'on veut rajouter un callback à une requête comme celle écrite au-dessus, il suffit de rajouter 1 lignes en Prototype alors qu'il faut tout réécrire en Jquery.&lt;br /&gt;
A moins bien sûr d'écrire toutes ses requêtes avec la méthode de plus haut niveau .ajax et d'oublier les .post, mais ce n'est pas ce que l'on voit
la plupart du temps dans les forums, tutoriels...
&lt;/p&gt;

&lt;p&gt;
Autre différence, Jquery à besoin de savoir dès le départ qu'il va recevoir du JSON alors que Prototype décide dans le callback quel objet utiliser (responseJSON ici).&lt;br /&gt;
Deux points à attribuer ici puisque l'on en a pas attribué au cas précédent.&lt;br /&gt;
Pour moi l'avantage va à Prototype qui garde la même logique et facilite les modifications sur une requête tel que l'ajout de callback et ne nécessite pas de connaitre le type de la réponse avant d'en avoir besoin.
&lt;/p&gt;
&lt;p&gt;
Toutefois Jquery étant clair dans le deuxième cas, je dirais 2-1 pour Prototype dans cette partie du tutoriel, soit au total : 
&lt;/p&gt;

&lt;p class=&quot;score&quot;&gt;
Prototype 3 - 3 Jquery
&lt;/p&gt;

&lt;h3&gt;Utiliser des templates pour insérer le code souhaité.&lt;/h3&gt;


&lt;h4&gt;Prototype&lt;/h4&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; rowTemplate = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Template&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;tr&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;#{text}&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;#{href}&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;#{timestamp}&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;/tr&amp;gt;'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; $&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'clicked_links_table'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; bottom: rowTemplate.&lt;span style=&quot;color: #006600;&quot;&gt;evaluate&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; text: link.&lt;span style=&quot;color: #006600;&quot;&gt;text&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; href: link.&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; timestamp: link.&lt;span style=&quot;color: #006600;&quot;&gt;timestamp&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;

&lt;h4&gt;Jquery&lt;/h4&gt;
&lt;p&gt;
 Pas de système de template chez Jquery à ma connaissance, on doit donc faire : 
&lt;/p&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'#clicked_links_table'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;tr&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;'&lt;/span&gt;+link.&lt;span style=&quot;color: #006600;&quot;&gt;text&lt;/span&gt;+&lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;'&lt;/span&gt;+link.&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;+&lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;td&amp;gt;'&lt;/span&gt;+link.&lt;span style=&quot;color: #006600;&quot;&gt;timestamp&lt;/span&gt;+&lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;+&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;/tr&amp;gt;'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Alors là, par contre il n'y a pas photo, Ce n'est peut-être pas très visible sur un petit template comme celui ci
mais le code Prototype est beaucoup plus lisible et facile à écrire, relire, débugger... 
&lt;/p&gt;
&lt;p class=&quot;score&quot;&gt;
Prototype 4 - 3 Jquery
&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;
Évidemment, toutes ces notes sont très subjectives, mais pour ma part je vais en rester à Prototype.&lt;br /&gt;
Jquery est un excellent framework Javascript et est bien plus concis que Prototype dans la majorité des syntaxes
mais à mon sens il y perd en lisibilité et en clarté.
&lt;/p&gt;

&lt;p&gt;
Et vous, vous en pensez quoi ? 
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/03/27/Comparatif-Prototype-vs-Jquery#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/03/27/Comparatif-Prototype-vs-Jquery#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/67</wfw:commentRss>
      </item>
    
  <item>
    <title>Tutorial : Prototype and JSON</title>
    <link>http://blogbangbang.com/post/2008/02/04/Tutorial-%3A-Prototype-and-JSON</link>
    <guid isPermaLink="false">urn:md5:7b852f8edbdcadf2cf55a94ed2753920</guid>
    <pubDate>Mon, 04 Feb 2008 01:03:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
            
    <description>&lt;p&gt;
Après plusieurs discussions à l'école comme au travail, j'avais envie de tester un peu plus le format JSON pour donner et recevoir des données en AJAX (on devrait dire AJAJ du coup non ?).
&lt;/p&gt;
&lt;p&gt;
Et vu que j'avais également envie de tester des petites choses avec prototype suite à la conférence ParisOnRails, je me suis dis pourquoi pas faire d'une pierre deux coups.
&lt;/p&gt;
&lt;p&gt;
Je vous propose donc le résultat de mes différents tests avec Prototype 1.6 et Scriptaculous côté Javascript et PHP (version 5.2 minimum obligatoire) côté serveur.
&lt;/p&gt;    &lt;p&gt;
J'ai retenu de la conférence de Cristophe Portenneuve que je faisais une grosse bêtise en n'utilisant pas les trésors d'Énumérable (un module de Prototype dédié aux collections), je me suis donc penché de ce côté-là et essayé de construire un petit &amp;quot;site&amp;quot;, ou les clics sur les liens sont surveillés par Prototype, envoyés au serveur afin de tenir des statistiques, puis renvoyé (statistiques comprises) en JSON à l'application afin d'offrir un retour à l'utilisateur (ceci afin de tester un autre élément intéressant du nouveau Prototype, les Templates).
&lt;/p&gt;&lt;p&gt;
Voilà là donc le résultat, en commencant par le code :
&lt;/p&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* J'observe le document pour repéré l'évenement 'dom:loaded' signifiant que le &lt;br /&gt;
* dom est chargé&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
document.&lt;span style=&quot;color: #006600;&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'dom:loaded'&lt;/span&gt;, init&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; init&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je récupère un tableau contenant tout les liens et j'appelle pour chaque &lt;br /&gt;
* élément la méthode observe avec les paramètres &lt;br /&gt;
* mouseover et link_click_handler.&lt;br /&gt;
* Cette méthode crée un écouteur sur chaque lien qui appellera &lt;br /&gt;
* la méthode link_click_handler à chaque évenement click sur le lien.&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'a'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'observe'&lt;/span&gt;, &lt;span style=&quot;color: #3366CC;&quot;&gt;'click'&lt;/span&gt;, link_click_handler&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.&lt;span style=&quot;color: #006600;&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'click'&lt;/span&gt;,click_handler&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je crée un object handler (de type fonction)&lt;br /&gt;
* que je vais appliquer à tous les objets que je veut surveiller&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; link_click_handler = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; register_link_click&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je crée ici mon objet lien en Javasript, il contient le texte&lt;br /&gt;
* et la cible du lien surveillé&lt;br /&gt;
* Le formatage link[] pour les clés permet de récupérer un array link&lt;br /&gt;
* avec toutes les propriétés coté Serveur&lt;br /&gt;
* S'il existe un moyen plus élégant d'obtenir le même résultat,&lt;br /&gt;
* &amp;nbsp;je suis preneur...&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; link = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'link[text]'&lt;/span&gt;: &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;innerHTML&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3366CC;&quot;&gt;'link[href]'&lt;/span&gt;: &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//Je crée une requête AJAX&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Ajax.&lt;span style=&quot;color: #006600;&quot;&gt;Request&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'register_links.php'&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//en POST c'est plus sur pour passer des données&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; method: &lt;span style=&quot;color: #3366CC;&quot;&gt;'post'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters: &amp;nbsp;$H&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* la seule ligne un peu compliquée Je transforme mon object JS&lt;br /&gt;
* en HASH JS auquel j'applique la méthode toJSON qui porte bien son nom&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; onSuccess: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//je passe la réponse JSON à la fonction qui va remplir mon tableau&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;transport.&lt;span style=&quot;color: #006600;&quot;&gt;responseJSON&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; click_handler = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; register_link_click&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;e&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; populate_clicks_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;e&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* La fonction chargée de peupler mon tableau&lt;br /&gt;
* Elle recoit le résultat de la requête AJAX PHP&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; populate_links_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;link&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je crée un Template Prototype de ce que je souhaite inséré&lt;br /&gt;
* en mettant entre #{} (syntaxe Ruby) les propriété dynamiques&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; rowTemplate = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Template&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;' #{text} #{href} #{timestamp}'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//J'appelle la méthode insert de prototype sur mon élément tableau&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'clicked_links_table'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Je spécifie d'insérer les éléments en bas (bottom) du tableau puis&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * j'évalue (interprête) mon template avec les propriétés associées&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bottom: rowTemplate.&lt;span style=&quot;color: #006600;&quot;&gt;evaluate&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; text: link.&lt;span style=&quot;color: #006600;&quot;&gt;text&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; href: link.&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timestamp: link.&lt;span style=&quot;color: #006600;&quot;&gt;timestamp&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Un petit effet de pulsate sur la dernière ligne insérée &lt;br /&gt;
* avant de lui retirer la classe last_row&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'.last_row'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'pulsate'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'.last_row'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'removeClassName'&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;'last_row'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; populate_clicks_table&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;event&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; elem = event.&lt;span style=&quot;color: #006600;&quot;&gt;target&lt;/span&gt; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; rowTemplate = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Template&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'#{identifiant} #{posX} #{posY} '&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'clicks_table'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bottom: rowTemplate.&lt;span style=&quot;color: #006600;&quot;&gt;evaluate&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; identifiant: elem.&lt;span style=&quot;color: #006600;&quot;&gt;identify&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posX: event.&lt;span style=&quot;color: #006600;&quot;&gt;pointerX&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posY: event.&lt;span style=&quot;color: #006600;&quot;&gt;pointerY&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Un petit effet de pulsate sur la dernière ligne insérée avant &lt;br /&gt;
* de lui retirer la classe last_row&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'.last_row'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'pulsate'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;invoke&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'removeClassName'&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;'last_row'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Le Javascript fait usage d'une autre fonctionnalité de Prototype1.6, l'évènement dom:loaded afin de repérer le moment où le DOM est complètement chargé.
&lt;/p&gt;&lt;p&gt;
C'est à cet endroit que doit se situer 99,99% du code JS que vous souhaitez exécuter au chargement de la page.
&lt;/p&gt;&lt;p&gt;
Dans mon cas l'initialisation consiste à surveiller tous les liens pour repérer les clics et agir en conséquence.
&lt;/p&gt;&lt;p&gt;
C'est là où on est heureux d'utiliser un framework car grâce à &lt;code&gt;$$('a')&lt;/code&gt; je récupère une collection de tous les liens du document.
&lt;/p&gt;&lt;p&gt;
Grâce à la méthode invoke, de Enumerable, j'appelle une méthode identique sur tous les objets de cette collection.
&lt;/p&gt;&lt;p&gt;
Le premier paramètre étant la méthode appelée, les suivants les paramètres à passer.
&lt;/p&gt;&lt;p&gt;
Je fait donc ici l'équivalent d'un &lt;code&gt;$('un_lien').observe('click',link_click_handler)&lt;/code&gt; pour chaque lien ce qui serait bien plus long à écrire (boucle each puis observe su chaque lien...) et bien moins performant.
&lt;/p&gt;&lt;p&gt;
Pour ce qui est de la méthode observe elle indique à l'objet &amp;quot;appelant&amp;quot; de surveiller l'évènement passé en premier paramètre et exécute le deuxième paramètre.
&lt;/p&gt;&lt;p&gt;
Pendant que nous sommes dans les évènements, étudions la suite, le deuxième tableau de la page liste tous les clics, l'élément cliqué (son id s'il en a un) ainsi que les positions X et Y du clic.
&lt;/p&gt;&lt;p&gt;
On pourrait penser à faire quelque chose comme &lt;code&gt;$$('*').invoke('observe', 'click', click_handler);&lt;/code&gt; mais ce serait oublier une chose très pratique avec la majorité des évènements, c'est qu'ils font des bulles (en anglais on dit bubbling event).
&lt;/p&gt;&lt;p&gt;
Cela veut dire que si la cible du lien ne l'intercepte pas, il est passé à l'élément supérieur et ainsi de suite.
&lt;/p&gt;&lt;p&gt;
On peut donc se contenter d'un écouteur sur le document qui détectera tous les clics : &lt;code&gt;document.observe('click',click_handler)&lt;/code&gt;
&lt;/p&gt;&lt;p&gt;
Rien de très magique dans la partie AJAX du javascript à part le responseJSON qui vous permet de récupérer directement l'objet JSON renvoyé par le serveur, je ne m'attarderais pas plus.
&lt;/p&gt;&lt;p&gt;
Hop le javascript a fait son boulot (pour l'instant), la suite se passe côté serveur (en PHP, rare sur ce blog mais ça permet à tout le monde de suivre et en Ruby la logique est la même )
&lt;/p&gt;&lt;p&gt;
Le code :
&lt;/p&gt;
&lt;code class=&quot;PHP&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je crée une petite classe Link qui va geré les liens et les sauvegarder &lt;br /&gt;
* dans ma Base de Données&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;a href=&quot;http://www.php.net/link&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;Link&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$text&lt;/span&gt; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$href&lt;/span&gt; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$timestamp&lt;/span&gt; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; __construct&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$_text&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$_href&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;text&lt;/span&gt; &amp;nbsp; &amp;nbsp; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$_text&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt; &amp;nbsp; &amp;nbsp; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$_href&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;timestamp&lt;/span&gt;= &lt;a href=&quot;http://www.php.net/time&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;time&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; save&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//Je sauvegarde le lien dans ma Base de Données&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//END Class LINK&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je précise le header (type de contenu) de ce que je vais renvoyé, nécessaire &lt;br /&gt;
* pour avoir acces au responseJSON de Prototype&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/header&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;header&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'Content-type: application/json'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je récupère le contenu passé en POST&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$post_data&lt;/span&gt; = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$_POST&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;link&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; ;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//Je construit mon objet Link&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$link&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;a href=&quot;http://www.php.net/link&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;Link&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$post_data&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$post_data&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;href&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
* Je renvoi l'objet JSON complet (avec timestamp) pour vous montrer&lt;br /&gt;
* les templates en Prototype et également car une requete Ajax ne se &lt;br /&gt;
* termine bien (onSuccess de Prototype) qu'a la réception d'une réponse&lt;br /&gt;
* qui peut être print(&amp;quot;&amp;quot;); si vous ne souhaitez rien renvoyé de particulier&lt;br /&gt;
* mais qui doit absolument exister.&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; json_encode&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$link&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;
&lt;p&gt;
Côté php donc, plus besoin de s'embêter à créer du XML, je récupère l'objet link passé en POST.
&lt;/p&gt;&lt;p&gt;
Je &amp;quot;l'augmente&amp;quot; avec une info timestamp dans le constructeur de sa classe.
&lt;/p&gt;&lt;p&gt;
Et je renvoie le tout en JSON en 2 temps trois mouvements en faisant &lt;code&gt; json_encode($link) &lt;/code&gt; qui me renvoie par exemple
&lt;/p&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;href&amp;quot;&lt;/span&gt;:&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/lab/proto1_6/#api/date&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;:&lt;span style=&quot;color: #CC0000;&quot;&gt;1202080178&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Retour côté Javascript, je récupère l'objet renvoyé et le passe à la méthode chargée de peuplé le tableau adéquat.
&lt;/p&gt;&lt;p&gt;
Là encore énorme gain de temps et de lignes de code (donc de probables erreurs) car l'on a plus à parser, le XML pour construire un objet Javascript, on a déjà un objet javascript.
&lt;/p&gt;&lt;p&gt;
Je construit donc un template qui correspond au code HTML que je souhaite inséré dans le tableau en spécifiant les propriétés dynamiques avec la syntaxe inspirée du ruby &lt;code&gt; #{var} &lt;/code&gt;
&lt;/p&gt;&lt;p&gt;
J'appelle ensuite la méthode insert de prototype, lui spécifie d'insérer à la fin du tableau le résultat de l'évaluation du template précédemment crée avec les variables propres à mon Evenement.
&lt;/p&gt;
&lt;code class=&quot;Javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; rowTemplate = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Template&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'#{identifiant} #{posX} #{posY} '&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
$&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'clicks_table'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bottom: rowTemplate.&lt;span style=&quot;color: #006600;&quot;&gt;evaluate&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; identifiant: elem.&lt;span style=&quot;color: #006600;&quot;&gt;identify&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posX: event.&lt;span style=&quot;color: #006600;&quot;&gt;pointerX&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posY: event.&lt;span style=&quot;color: #006600;&quot;&gt;pointerY&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/02/04/Tutorial-%3A-Prototype-and-JSON#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/02/04/Tutorial-%3A-Prototype-and-JSON#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/63</wfw:commentRss>
      </item>
    
  <item>
    <title>Merci Microsoft, merci IE !</title>
    <link>http://blogbangbang.com/post/2007/12/20/Merci-Microsoft-merci-IE</link>
    <guid isPermaLink="false">urn:md5:b1b9505f051f96bfa47c764b22c716aa</guid>
    <pubDate>Thu, 20 Dec 2007 19:00:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>css</category><category>internet explorer</category><category>windows</category>    
    <description>    &lt;p&gt;
Dieu que ce titre sent le troll à plein nez.
&lt;/p&gt;
&lt;p&gt;
Pourtant, ce sont bien des félicitations que j'adresse pour une fois à Internet Explorer, mais puisque rien n'est parfait, c'est à la version 8 qu'elles sont destinées.
&lt;/p&gt;
&lt;p&gt;
En effet, on a appris cette semaine que la version 8 du célébrissime navigateur détesté des webdéveloppeurs passerait le test &lt;a href=&quot;http://fr.wikipedia.org/wiki/Acid2&quot;&gt;Acid2&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
En fait, il semblerait même, selon le &lt;a href=&quot;http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx&quot;&gt;blog IE&lt;/a&gt; officiel, que la version de dev actuelle passe déjà ce test ! (mais il est impossible de la télécharger et donc de vérifier).
&lt;/p&gt;
&lt;p&gt;
Si cela s'avère vrai, ce serait vraiment une excellente nouvelle pour tous les webdéveloppeurs du monde, plus de feuille de style alternative, plus de journée &amp;quot;Debug IE&amp;quot; au planning, beaucoup moins de différence de rendu entre les navigateurs...
&lt;/p&gt;
&lt;p&gt;
Toutefois, inutile de s'arrêter en si bon chemin, j'invite donc les développeurs Microsoft à s'atteler dès à présent à l'intégration des spécifications &lt;a href=&quot;http://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade#CSS3&quot;&gt;CSS3&lt;/a&gt;, du futur &lt;a hreflang=&quot;en&quot; href=&quot;http://ajaxian.com/archives/brendan-eich-javascript-2-and-the-future-of-the-web&quot;&gt;Javascript2&lt;/a&gt;, des éléments &lt;a hreflang=&quot;en&quot; href=&quot;http://ajaxian.com/archives/html5-media-support-video-and-audio-tags-and-scriptability&quot;&gt;audio et vidéo&lt;/a&gt; de HTML5, du &lt;a href=&quot;http://fr.wikipedia.org/wiki/Scalable_Vector_Graphics&quot;&gt;SVG&lt;/a&gt;, de &lt;a href=&quot;http://fr.wikipedia.org/wiki/SMIL&quot;&gt;SMIL&lt;/a&gt;, des &lt;a href=&quot;http://fr.wikipedia.org/wiki/Microformats&quot;&gt;microformats&lt;/a&gt;... (C'est Noël, laissez moi rêver ! )
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/12/20/Merci-Microsoft-merci-IE#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/12/20/Merci-Microsoft-merci-IE#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/61</wfw:commentRss>
      </item>
    
  <item>
    <title>Flash is everywhere, or not...</title>
    <link>http://blogbangbang.com/post/2007/12/12/Flash-is-everywhere-or-not</link>
    <guid isPermaLink="false">urn:md5:f419974bcb9a7c15ac6566a8cdb46133</guid>
    <pubDate>Wed, 12 Dec 2007 23:15:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>flash</category><category>logiciels libres</category><category>mozilla</category>    
    <description>&lt;p&gt;
Selon les statistiques d'Adobe, Flash est installé sur 99.1 % des Ordinateurs Desktop (PC+Mac) connectés au web.
&lt;/p&gt;
&lt;p&gt;
Selon ces mêmes statistiques, le player 9 serait même déjà installé sur environ 90 % du même matériel.
&lt;/p&gt;
&lt;p&gt;
Ces statistiques impressionnantes sont souvent la défense des flasheurs face aux critiques adressées contre leur technologie favorite.
&lt;/p&gt;
&lt;p&gt;
Pourtant, la vérité est moins rose...
&lt;/p&gt;    &lt;p&gt;
Sans remettre en cause les statistiques fournies par Adobe, il faut aussi regarder ce qui se cache derrière.
&lt;/p&gt;
&lt;p&gt;
Premièrement, comme je l'ai déjà dit auparavant, le flash player 9 à beau être installable par exemple sur une plateforme Linux, ce n'est pas pour autant que les utilisateurs Linux en sont satisfait.
&lt;/p&gt;
&lt;p&gt;
Le player fourni pour Linux est loin d'être parfait, sa stabilité laisse parfois à désirer (notamment pour la lecture de vidéos encodées avec le codec H264).
&lt;/p&gt;
&lt;p&gt;
De plus, le plein écran, disponible sous Windows et Mac depuis quelques mois déjà, n'est toujours pas à l'ordre du jour sous Linux.
&lt;/p&gt;
&lt;p&gt;
Même si ces limitations sont très gênantes, Linux ne concerne qu'un petit pourcent d'utilisateurs et les flasheurs vous rétorquerons donc que l'argument ne tient pas la route.
&lt;/p&gt;
&lt;p&gt;
Certes, mais un autre problème bien plus important se pose déjà et devrait s'amplifier dans les mois et années à venir.
&lt;/p&gt;
&lt;p&gt;
Ce problème, c'est que les statistiques données concernent les matériels &amp;quot;Desktop&amp;quot;, alors que l'informatique devient de plus en plus embarquée.
&lt;/p&gt;
&lt;p&gt;
Aujourd'hui dans nos portables, PDA, Personal Media Player(ITouch, Archos...).
&lt;/p&gt;
&lt;p&gt;
Demain absolument partout, du frigo à la voiture, en passant par la table basse.
&lt;/p&gt;
&lt;p&gt;
Et sur cette informatique embarquée connectée, le constat est beaucoup moins sympa.
&lt;/p&gt;
&lt;p&gt;
En effet, de 90 %, on passe selon le peu de sources à disposition, à très très peu de PDA, téléphones... compatible Flash9 (Le N800 de Nokia étant le seul pour lequel je suis sur de la compatibilité).
&lt;/p&gt;
&lt;p&gt;
Sur les autres, il y a parfois FlashLite, mais cela veut dire Flash8 au maximum (et pas intégralement supporté), on a donc droit à un web à deux vitesses ou l'on ne peut pas développer des applications en étant certain qu'elles fonctionneront à la fois sur PC et sur mobile.
&lt;/p&gt;
&lt;p&gt;
Hors comme le clame la pub IPhone, ce que l'utilisateur veut, ce n'est pas une pâle copie d'Internet, c'est Internet sur son mobile, lecteur audio et vidéo...(d'ailleurs l'Iphone à semble t-il considéré que l'internet sans Flash restait l'internet ! Osé...)
&lt;/p&gt;
&lt;p&gt;
Enfin pour une autre partie des plateformes, FlashLite n'est même pas disponible...
&lt;/p&gt;
&lt;p&gt;
En refusant depuis des années de délivrer les sources de son player, Flash (et pendant longtemps Macromédia) empêche de nombreuses plateformes de participer au marché des périphériques connectés.
&lt;/p&gt;
&lt;p&gt;
En libérant le code source de sa machine virtuelle ActionScript et en entamant le projet Tamarin avec Mozilla, Adobe a montré son intention de se rapprocher de la communauté du logiciel libre.
&lt;/p&gt;
&lt;p&gt;
Aujourd'hui, il est tant de passer à l'étape suivante et de livrer à tous, le nécessaire au portage du player flash(DOM, bibliothèques multimédias, gestion des événements...) sur toutes les plateformes.
&lt;/p&gt;
&lt;p&gt;
On pourrait alors trouver celui-ci dans tous les téléphones, lecteurs audio et vidéo portables...
&lt;/p&gt;
&lt;p&gt;
A bon entendeur... Salut !
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/12/12/Flash-is-everywhere-or-not#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/12/12/Flash-is-everywhere-or-not#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/60</wfw:commentRss>
      </item>
    
  <item>
    <title>Paris on Rails : a chaud !</title>
    <link>http://blogbangbang.com/post/2007/12/10/Paris-on-Rails-%3A-a-chaud</link>
    <guid isPermaLink="false">urn:md5:d661786f16f2d9ffa44b9b1c08c340a9</guid>
    <pubDate>Mon, 10 Dec 2007 23:39:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>conférence</category><category>ParisOnRails</category><category>ruby</category><category>RubyOnRails</category>    
    <description>    &lt;p&gt;
Je rentre juste de &lt;a href=&quot;http://paris.onrails.info/&quot;&gt;Paris on Rails&lt;/a&gt;, le moins que l'on puisse dire, c'est que le programme était dense.
&lt;/p&gt;
&lt;p&gt;
Pas moins de 8 conférences officielles, 4 officieuses, 1 présentation de Ruby et Rails et une visioconférence avec &lt;acronym title=&quot;David Heinemeier Hansson&quot;&gt;DHH&lt;/acronym&gt;, le créateur du framework et tout ça dans une petite journée.
&lt;/p&gt;
&lt;p&gt;
A chaud donc, une excellente journée, j'ai appris des choses dans à peu près toutes les conférences, discuté avec quelques railers français et parisiens qui ont réussi à en faire le métier et récupéré 2-3 cartes de visites.
&lt;/p&gt;
&lt;p&gt;
Rails pousse, lentement mais surement et s'installe dans les petites moyennes grandes et même très grandes entreprises.
&lt;/p&gt;
&lt;p&gt;
La demande est parait-il beaucoup plus élevée que l'offre, ce qui laisse présager de bonnes choses pour les développeurs qui s'engagent dans cette voie.
&lt;/p&gt;
&lt;p&gt;
Pour revenir, sur les conférences, il y en avait pour tous les goûts :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
retour d'expériences d'entreprises (moyennes ou grandes)
&lt;/li&gt;
&lt;li&gt;
Javascript avancé avec Chistophe Porteneuve qui a tenu sa réputation de sliders fou avec une cinquantaine de diapositives en 30mn (et un contenu hautement exhaustif et intéressant)
&lt;/li&gt;
&lt;li&gt;
les vues dans Rails, dans la conférence de Nicolas Merouze de Boldr était également du pain béni pour tous les développeurs rails (les slides de la conf sont déjà disponibles sur son &lt;a href=&quot;http://blog.boldr.fr/2007/12/10/slides-de-ma-conf-v-comme-vitesse&quot;&gt;blog&lt;/a&gt;).
&lt;/li&gt;
&lt;li&gt;
L'internationalisation avec un des codeurs du plugin Globalize.
&lt;/li&gt;
&lt;li&gt;
Les tests par Jean-Michel Garnier heureux railer français à Barcelone :D...
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
J'ai un peu moins accroché sur la conférence intitulée : &amp;quot;JRuby et JRuby on Rails, mais que viennent faire Java, NetBeans et GlassFish?&amp;quot;, dont je retiendrais seulement que Rails s'intègre à merveille dans un système d'informations en Java (ce qui peut rassurer de grosses structures).
&lt;/p&gt;
&lt;p&gt;
Après la journée de conférence officielle, je me suis rendu au MetroOnRails (organisé par &lt;a href=&quot;http://www.pierlis.com/&quot;&gt;Pierlis&lt;/a&gt; et &lt;a href=&quot;http://www.bloogk.com/&quot;&gt;bloogk&lt;/a&gt;), un petit buffet entre railers où j'ai pu assister à 4 autres conférences : sur le plugin searchAPI, la librairie Prototype UI, un retour d'expérience sur un DataWarehouse en Ruby et une conférence &amp;quot;fourre-tout&amp;quot; très intéressante sur Atom Publishing Protocol, ActiveResource, ActiveMessaging et les fourmis :).
&lt;/p&gt;
&lt;p&gt;
J'ai enfin discuté avec Nicolas Mérouze de &lt;a href=&quot;http://blog.boldr.fr/&quot;&gt;BoldR&lt;/a&gt; et un membre de l'association &lt;a href=&quot;http://www.votons.info/&quot;&gt;votons.info&lt;/a&gt; (discussion dont-il ressortira peut être quelque chose dans les jours à venir...)
&lt;/p&gt;
&lt;p&gt;
Voilà pour ce soir je vais laisser reposer tout ça quelques heures et je reviendrais surement sur les points les plus marquant de cette journée (notamment Prototype 1.6, ça déchire grave comme le dis TDD aka Christophe Porteneuve ! ).
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/12/10/Paris-on-Rails-%3A-a-chaud#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/12/10/Paris-on-Rails-%3A-a-chaud#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/59</wfw:commentRss>
      </item>
    
  <item>
    <title>Ruby et RubyOnRails</title>
    <link>http://blogbangbang.com/post/2007/10/27/Ruby-et-RubyOnRails</link>
    <guid isPermaLink="false">urn:md5:2622c28611f49cfe770aabb08c10f702</guid>
    <pubDate>Sat, 27 Oct 2007 17:54:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>ruby</category><category>RubyOnRails</category>    
    <description>    &lt;p&gt;Vous êtes développeur ? logiciel ou web ?&lt;/p&gt;
&lt;p&gt;Vous ne cessez d'entendre parler d'un presque vieux langage qui revient à la mode : Le Ruby.&lt;/p&gt;
&lt;p&gt;Vous entendez aussi parler d'un frame_quelquechose, framework surement, qui permettrait de faire des sites Webs et bien plus en Ruby plutôt qu'en PHP.&lt;/p&gt;
&lt;p&gt;Vous vous dîtes à quoi bon changer puisque je me débrouille en PHP, où vous aimeriez bien essayer, mais vous craignez de vous retrouver perdu dans un nouveau langage, de nouvelles pratiques...&lt;/p&gt;
&lt;p&gt;Alors, un seul conseil, foncez sur le dernier hors-série de Linux magazine. &lt;/p&gt;
&lt;a href=&quot;http://www.gnulinuxmag.com/index.php?2007/10/15/59-gnu-linux-magazine-france-hors-serie-33-ruby-ruby-on-rails&quot;&gt;
&lt;img class=&quot;billet&quot; src=&quot;http://blogbangbang.com/images/linuxmag.jpg&quot; alt=&quot;Couverture du hors dérie 33 de Linux Magazine&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Ne vous laissez pas avoir par le titre du magazine, on ne vous demandera pas de recompiler un noyau ou de porter une barbe de 3 mois pour commencer les tutos de ce magazine et tout est également faisable sur un environnement MacOS ou Windows. &lt;/p&gt;
&lt;p&gt;Le magazine traite dans un premier temps du langage Ruby en tant que tel, de ses spécificités, avantages au travers d'une multitude d'exemples vous apprendrez donc à écrire vos premières variables, méthodes et classes ruby.&lt;/p&gt;
&lt;p&gt;Puis dans un deuxième temps, il vous sera proposé de créer votre première application RubyOnRails, le fameux framework permettant de construire des applications Web en Ruby. &lt;/p&gt;
&lt;p&gt;Là encore on commence avec les bases, les tutoriaux fourmillent d'exemples et si à la fin de cette lecture, vous n'avez pas envie de créer votre première application RubyOnRails, c'est vous êtes déjà un vieux têtu qui refuse de regarder la vérité en face :-D. &lt;/p&gt;
&lt;p&gt;Le magazine vous coûtera 6€40, ce n'est certes pas donné, mais il les vaut (pour ceux qui me connaissent, je serais ravi de vous le prêter.)&lt;/p&gt;
&lt;p&gt;Et si vous êtes convaincus, vous pourrez venir me rejoindre à &lt;a href=&quot;http://paris.onrails.info/&quot;&gt;ParisOnRails&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/10/27/Ruby-et-RubyOnRails#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/10/27/Ruby-et-RubyOnRails#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/53</wfw:commentRss>
      </item>
    
  <item>
    <title>ParisOnRails, j'y serais !</title>
    <link>http://blogbangbang.com/post/2007/10/23/ParisOnRails-jy-serais</link>
    <guid isPermaLink="false">urn:md5:0c3f29ac21d01512f048598f5ecc5bbb</guid>
    <pubDate>Tue, 23 Oct 2007 20:33:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>geeks</category>
        <category>conférence</category><category>ParisOnRails</category><category>RubyOnRails</category>    
    <description>&lt;img class=&quot;billet&quot; alt=&quot;logo de Paris On Rails&quot; src=&quot;http://blogbangbang.com/images/por2007.png&quot; /&gt;
&lt;p&gt;Quand j'ai vu il y a quelques jours que la cuvée 2007 de ParisOnRails aurait lieu le 10 décembre, j'en ai profité pour me replonger dans rails, que j'avais un peu délaissé par manque de temps ces dernières semaines.&lt;/p&gt;    &lt;p&gt;Après ces tests, j'avais d'autant plus envie de me rendre à cette conférence, j'en ai donc parlé au boulot hier et aujourd'hui, j'ai mon ticket. &lt;/p&gt;
&lt;p&gt;Un grand merci à mon entreprise (&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.a-g.fr&quot;&gt;a-g.fr&lt;/a&gt;), et à mon école, (&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.gobelins.fr&quot;&gt;les Gobelins&lt;/a&gt;),  pour m'avoir respectivement offert la place et permis de manquer une journée de cours afin de me rendre à cette conférence.&lt;/p&gt;
&lt;p&gt;J'aurais donc la joie d'assister à des conférences présentées par de grands connaisseurs français de RubyOnrails (les auteurs du bouquin de Eyrolles sur RubyonRails ainsi que l'auteur de Bien Développer pour le Web2.0, deux de mes livres de chevets) ainsi que par l'auteur d'un mes blogs favoris : &lt;a hreflang=&quot;fr&quot; href=&quot;http://blog.boldr.fr/&quot;&gt;http://blog.boldr.fr/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je n'attends plus qu'une chose, être au 10 décembre ! &lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/10/23/ParisOnRails-jy-serais#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/10/23/ParisOnRails-jy-serais#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/52</wfw:commentRss>
      </item>
    
  <item>
    <title>Allo Pam, ici la touffe bleue !</title>
    <link>http://blogbangbang.com/post/2007/10/10/Allo-Pam-ici-la-touffe-bleue</link>
    <guid isPermaLink="false">urn:md5:190667421d601056c722cc955571538e</guid>
    <pubDate>Thu, 11 Oct 2007 01:35:00 +0200</pubDate>
    <dc:creator>alban</dc:creator>
        <category>geeks</category>
        <category>Linux</category><category>Ubuntu</category>    
    <description>&lt;p&gt;Je disais donc, comment utiliser son téléphone portable (compatible
bluetooth) pour s'authentifier sur un pc. En effet, je trouvais lassant de devoir saisir mon mot de passe plusieurs fois (au démarrage, pour obtenir les droits admins, etc).&lt;/p&gt;
&lt;p&gt;
Par l'intermédiaire de quelques &lt;del&gt;bidouilles&lt;/del&gt; gymnastiques, j'ai mis en place une solution me convenant parfaitement (sous GNU/Linux et plus précisément &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.ubuntu-fr.org/&quot;&gt;Ubuntu&lt;/a&gt; ).&lt;br /&gt;
Je vais dans ce billet vous montrer &lt;del&gt;que les geeks sont fainéants&lt;/del&gt; comment mettre en place ce système.
&lt;/p&gt;    &lt;p&gt;Le mécanisme d'authenification sous GNU/Linux est réalisé par &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Pluggable_authentication_module&quot;&gt;Pam&lt;/a&gt;&lt;br /&gt;
Il s'agit donc de faire intéragir le téléphone via le réseau sans fil bluetooth avec ce fameux Pam.
&lt;/p&gt;
&lt;p&gt;
En bref Pam est celui qui reçoit votre mot de passe et vous autorise a vous connecter.
&lt;/p&gt;
&lt;p&gt;
Pam fonctionne avec des modules et l'un d'entre eux permet l'interaction avec un périphérique mobile : pam_blue.&lt;br /&gt;
Je vais donc vous décrire l'installation de pam_blue et sa configuration rapide sous mon système d'exploitation préféré.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Première étape &lt;/strong&gt;: récupérer les sources de pam_b