<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.publo.fr/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>publo.fr - blog - technique</title>
  <link>http://blog.publo.fr/</link>
  <atom:link href="http://blog.publo.fr/feed/category/technique/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Fri, 20 Jan 2012 17:59:07 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>De la géolocalisation dans Google Maps</title>
    <link>http://blog.publo.fr/post/geolocalisation-google-maps</link>
    <guid isPermaLink="false">urn:md5:9d63e53768873932f576b9d3f7aad721</guid>
    <pubDate>Fri, 10 Jul 2009 23:30:00 +0200</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>géolocalisation</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.publo.fr/public/illustration/panneaux.png&quot; alt=&quot;panneaux.png&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Depuis hier, Google Maps propose une fonctionde géolocalisation à ses visiteurs connectés sur PC. Le service existait déjà pour les mobiles mais il a été étendu aux PC équipés de Firefox 3.5 ou de Google Chrome. Il est également compatible avec les navigateurs équipés de Google Gears.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Le &lt;a href=&quot;http://google-latlong.blogspot.com/2009/07/blue-circle-comes-to-your-desktop.html&quot; hreflang=&quot;en&quot;&gt;blog de l'équipe de Google Maps donne plus de détails sur le service&lt;/a&gt; qui s'appuie sur le tout nouveau standard du W3C, l'API de Géolocalisation. Pour déterminer la position de l'internaute, le système de géolocalisation se base sur de la géolocalisation Wifi et de la géolocalisation IP.&lt;/p&gt;


&lt;h3&gt;Un lancement discret&lt;/h3&gt;

&lt;p&gt;Même si la blogosphère en parle beaucoup, ce service fait une apparition timide. Pour y recourir, il faut cliquer sur un petit bouton à l'apparence anodine qui a été ajouté à l'interface de Google Maps. Rien ne laisse d'ailleurs supposer que ce bouton sert à cela, à part le tooltip qui apparaître lorsqu'on passe la souris sur le bouton, et rien n'invite vraiment à l'essayer. Bref, il faut connaître pour l'utiliser.&lt;img src=&quot;http://blog.publo.fr/public/geolocalisation-googlemaps/accueil-google-maps.png&quot; alt=&quot;accueil-google-maps.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Lorsqu'on clique sur ce petit bouton, c'est la machinerie de la W3C Geolocation API qui se met en marche. Sur Firefox, un bandeau de dialogue vous demande si vous souhaitez communiquer vos données de géolocalisation au site, en l'occurrence maps.google.fr.&lt;img src=&quot;http://blog.publo.fr/public/geolocalisation-googlemaps/invite-partage-geolocalisation.png&quot; alt=&quot;invite-partage-geolocalisation.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;h3&gt;Des résultats variables&lt;/h3&gt;

&lt;p&gt;Après une longue réflexion pour savoir si l'on va oui ou non permettre la géolocalisation, et si effectivement on l'accepte, on obtient normalement un recentrage de la carte sur la localisation probable, avec dans certains cas un disque bleu qui recouvre la zone où doit se trouver l'internaute.&lt;br /&gt;
&lt;img src=&quot;http://blog.publo.fr/public/geolocalisation-googlemaps/geolocalisation-wifi.png&quot; alt=&quot;geolocalisation-wifi.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;
Nous avons fait le test depuis deux PCs, l'un en région parisienne, l'autre en province dans le Sud-Est de la France. Dans le premier cas, la précision est impressionnante&amp;nbsp;: la zone bleue fait 300m de diamètre et son centre est à moins de 50m de la localisation du PC. Dans le second cas, pas de zone bleue, une carte centrée sur le Sud-Est de la France mais qui laisse apparaître une zone de 500km par 500km environ&amp;nbsp;: bref le système reste excessivement prudent quant à la localisation.&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Géolocalisation IP et géolocalisation Wifi&lt;/h3&gt;

&lt;p&gt;La précision du résultat obtenu pour le PC situé en région parisienne laisse à penser que le calcul ne s'est pas appuyé uniquement sur de la géolocalisation IP. En effet, il est difficile de descendre en dessous du km pour la précision d'une géolocalisation IP sur une adresse IP résidentielle. Il y a donc de la géolocalisation Wifi derrière ce résultat.&lt;br /&gt;
Pour en avoir le coeur net, nous avons fait 2 tests de géolocalisation sur le PC. Pour ces 2 tests, le PC était connecté en Ethernet à notre box et le Wifi de la box était désactivé. Puis nous avons testé la géolocalisation d'abord avec la carte Wifi du PC désactivée, puis avec la carte Wifi activée.&lt;br /&gt;
Les résultats en image :&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avec la carte Wifi désactivée&amp;nbsp;: &lt;img src=&quot;http://blog.publo.fr/public/geolocalisation-googlemaps/geolocalisation-ip.png&quot; alt=&quot;geolocalisation-ip.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le système s'est appuyé sur une géolocalisation IP et il propose la carte de toute la région parisienne. C'est une proposition excessivement prudente par rapport à ce que l'on peut obtenir à partir de l'adresse IP.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avec la carte Wifi activée&amp;nbsp;: &lt;img src=&quot;http://blog.publo.fr/public/geolocalisation-googlemaps/geolocalisation-wifi.png&quot; alt=&quot;geolocalisation-wifi.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On voit que le Wifi doit bien servir à quelque chose... Notez que le PC n'étant pas connecté en Wifi à la box (dont le Wifi est désactivé), ce sont les box du voisinage qui ont permis de faire cette géolocalisation. En fait, le PC a écouté les boxes présentes dans le voisinage et a transmis ces informations (avec notre consentement) au système de géolocalisation qui, connaissant les boxes en question en a déduit la localisation probable du PC. Il est à noter que le résultat est variable dans le temps, probablement à cause des fluctuations de réception des signaux des boxes.&lt;/p&gt;


&lt;h3&gt;Conclusions&lt;/h3&gt;

&lt;p&gt;On peut tirer plusieurs conclusions de ces tests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google reste très prudent quant il s'agit de géolocalisation IP mais affiche une belle assurance lorsqu'il s'agit de géolocalisation Wifi&lt;/li&gt;
&lt;li&gt;la région parisienne a - au moins en partie - été cartographiée en terme de Wifi. Peut-être un engin similaire à la Google car a-t-il sillonné la région en écoutant toutes les bornes Wifi qu'il rencontrait sur son chemin.&lt;/li&gt;
&lt;li&gt;l'autorisation demandée avant la géolocalisation n'est pas superflue puisque dans le cas de la géolocalisation Wifi, il y a transmission d'informations depuis le PC. Par contre, lorsqu'il n'y a qu'une géolocalisation IP, cette autorisation perd son sens dans la mesure où le système a déjà tout en main pour faire une géolocalisation. Mais bien sûr, il peut faire semblant de ne pas être au courant ;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et vous, avez-vous testé cette nouvelle fonctionnalité&amp;nbsp;?&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/geolocalisation-google-maps#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/geolocalisation-google-maps#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/97</wfw:commentRss>
      </item>
    
  <item>
    <title>4 techniques pour optimiser le référencement d'un blog DotClear 2</title>
    <link>http://blog.publo.fr/post/optimiser-referencement-blog-dotclear</link>
    <guid isPermaLink="false">urn:md5:9966266b49d8135e5207f9cab2e6a6d8</guid>
    <pubDate>Thu, 25 Jun 2009 23:30:00 +0200</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>DotClear</category><category>référencement</category><category>SEO</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.publo.fr/public/illustration/engrenages.png&quot; alt=&quot;engrenages.png&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Il ne suffit pas d'écrire des billets intéressants pour qu'ils soient lus. Encore faut-il que cela se sache. Et d'abord, encore faut-il que les moteurs de recherche le sachent !&lt;br /&gt;
Dans ce billet, nous décrivons quelques techniques simples permettant d'améliorer le référencement de billets créés sur le &lt;a href=&quot;http://dotclear.org/&quot; hreflang=&quot;fr&quot;&gt;moteur de blog DotClear 2&lt;/a&gt;.&lt;/p&gt;    &lt;h3&gt;Soignez l'élément &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;&lt;/h3&gt;


&lt;p&gt;Par défaut, l'élément &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; est généré par DotClear et correspond au titre du billet. Or c'est un élément important pour les moteurs de recherche et il peut être intéressant de le modifier un peu. Si vous avez accès aux templates, vous pouvez modifier le format général de vos titres (ajouter le nom du site par exemple). Si vous n'y avez pas accès, vous pouvez également utiliser &lt;a href=&quot;http://plugins.dotaddict.org/dc2/details/miniSEO&quot; hreflang=&quot;fr&quot;&gt;le plugin miniseo de DotClear&lt;/a&gt;&amp;nbsp;: celui-ci vous permet de définir vous-même et individuellement l'élément &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; de chacun de vos billets.&lt;br /&gt;
Le titre de vos billets doit être clair, de préférence pas trop long et il vaut mieux que ce qui est important se trouve au début du titre. Ce sera d'une part plus lisible sur les pages de résultats des moteurs de recherche (un titre court accroche mieux) et cela évitera que le titre soit tronqué, que ce soit sur les pages de résultats ou sur les lecteurs RSS.&lt;/p&gt;


&lt;h3&gt;Ajoutez un élément &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; de description&lt;/h3&gt;


&lt;p&gt;Ce point rejoint le précédent. Comme pour le title, la description (dans un élément &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; du header) est importante car même s'il n'est pas certain qu'elle serve pour l'indexation par mots clés, c'est bien souvent cette description qui apparaît dans les résultats de la recherche. Lorsqu'elle n'est pas renseignée, le moteur de recherche affiche généralement le début de l'article. Or il est plus efficace de lui fournir un petit résumé bien tourné que de le laisser découper bêtement le début de votre article. Là encore, le plugin miniseo est bien utile.&lt;/p&gt;


&lt;h3&gt;Fournissez toujours un extrait&lt;/h3&gt;


&lt;p&gt;DotClear donne la possibilité de fournir un extrait qui sera affiché sur la page d'accueil, les archives, les catégories et autres pages &quot;multi-billets&quot; du blog en lieu et place de l'article complet. Le fait que ce soit seulement un extrait qui apparaisse sur ces pages est très important car il permet d'éviter le problème du &quot;duplicate content&quot;&amp;nbsp;: en effet les moteurs de recherche pénalisent les sites qui font apparaître un contenu similaire sur plusieurs pages.&lt;/p&gt;


&lt;h3&gt;Remaniez les URLs&lt;/h3&gt;


&lt;p&gt;Par défaut, DotClear propose des URLs pas très jolies (avec un vilain index.php et des paramètres), avec une date et en utilisant le titre de l'article. Par exemple, pour le présent billet, l'URL par défaut serait&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
http://blog.publo.fr/index.php?post/2009/06/25/5-techniques-pour-optimiser-le-referencement-d-un-blog-dotclear-2
&lt;/pre&gt;


&lt;p&gt;Cela a plusieurs inconvénients&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'URL est très longue et profonde (6 niveaux!), ce qui ne plaît pas forcément aux moteurs de recherches et qui n'est pas franchement sympathique lorsque vous transmettez cette URL par mail, dans un forum ou en commentaire dans un autre blog.&lt;/li&gt;
&lt;li&gt;l'URL contient un paramètre&amp;nbsp;: là encore, méfiance vis à vis des moteurs de recherche même si Google en accepte deux normalement.&lt;/li&gt;
&lt;li&gt;la présence de la date dans l'URL risque de laisser penser à vos lecteurs potentiels que vos billets sont obsolètes même pour  les billets que le temps n'use pas...&lt;/li&gt;
&lt;li&gt;l'URL ne contient pas forcément les mots-clés qui caractérisent le billet (ce n'est pas le cas dans notre exemple), or mettre les bons mots-clés dans une URL a des effets positifs sur l'indexation de la page correspondante&lt;/li&gt;
&lt;li&gt;les mots-clés, quand ils sont là, sont &quot;dilués&quot; et vers la fin de l'URL. On peut donc craindre qu'ils ne pèsent plus grand-chose dans l'indexation. Regardez dans l'exemple le nombre de mots inutiles (&quot;index&quot;, &quot;post&quot;, &quot;pour&quot;, &quot;2009&quot;, &quot;d&quot;...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La question des URLs est un vaste débat et ceux que cela intéressent peuvent jeter un coup d'oeil au débat qui suit l'article &lt;a href=&quot;http://monetiweb.com/bien-utiliser-wordpress/quel-modele-de-reecriture-durl-faut-il-utiliser-pour-son-blog&quot; hreflang=&quot;fr&quot;&gt;&quot;Quel modèle de réécriture d'URL faut-il utiliser pour son blog ?&quot; sur monetiweb&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour résoudre tous ces problèmes, deux étapes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configurez le format des URLs de vos billets&amp;nbsp;: c'est l'objet d'un précédent &lt;a href=&quot;http://blog.publo.fr/post/2008/06/17/De-plus-jolies-URL-pour-mon-DotClear&quot; hreflang=&quot;fr&quot;&gt;billet sur l'amélioration des URL DotClear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Spécifiez vous-même la partie spécifique de l'URL de chacun de vos billets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En reprenant notre exemple, l'URL obtenue est&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
http://blog.publo.fr/post/optimiser-referencement-blog-dotclear
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour terminer, il est utile de rappeler que ces 4 points ne sont que des techniques pour faire en sorte que lorsqu'un billet est pertinent par rapport à certains mots clés, ils soit vu comme tel par les moteurs de recherche. Cela n'améliorera pas sa popularité qui est la deuxième composante majeure du référencement et qui ne peut se construire que par la création de liens pertinents pointant vers ce billet.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/optimiser-referencement-blog-dotclear#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/optimiser-referencement-blog-dotclear#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/95</wfw:commentRss>
      </item>
    
  <item>
    <title>Google éternue et tout le web s'enrhume : de l'intérêt du téléchargement paresseux des javascript</title>
    <link>http://blog.publo.fr/post/2009/05/14/decoupler-son-site-internet-des-services-tiers</link>
    <guid isPermaLink="false">urn:md5:b4d20d21531c13e706b8eff480536f1e</guid>
    <pubDate>Thu, 14 May 2009 18:10:00 +0200</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>Javascript</category>    
    <description>&lt;p&gt;Le recours à des Javascript tiers sur un site internet peut introduire un couplage gênant, comme le montre la perturbation d'accès aux services de Google que subit actuellement le web. Voici quelques mesures pour s'en prémunir.&lt;/p&gt;    &lt;p&gt;Vu d'ici, il semble qu'il y ait de gros soucis en ce moment pour atteindre les services de Google. Problème de réseau ou dysfonctionnement  des serveurs, l'autopsie de l'incident dira ce qui s'est passé. Toujours est-il que ce type d'incident révèle le nombre impressionnant de sites qui utilisent Google et dont le fonctionnement normal est  intimement couplé à celui des services du géant californien.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En effet, Google fournit à de très nombreux sites de la publicité à afficher (google ads et doubleclick), des mouchards pour faire des statistiques (google-analytics) ou encore des librairies Javascript (googleapis). Tout ceci sous forme de fichiers Javascript.&lt;br /&gt;
Lorsque le téléchargement de ces Javascripts est ralenti, cela peut avoir des conséquences importantes sur l'affichage des pages qui les utilisent. En effet, le téléchargement des éléments d'un document HTML (feuilles de style, javascripts, images) étant généralement séquentiel, si le browser bloque sur le téléchargement d'un javascript, ce sont tous les éléments suivants qui se retrouvent dans la file d'attente. Par ailleurs, chaque fois que le browser télécharge un élément, l'affichage est figé. Et donc, suivant l'emplacement du Javascript dans le document HTML, cela peut bloquer l'affichage de toute la page (pour un script situé très haut dans le document) ou bien ne pas le perturber mais laisser le browser en attente (pour script situé en fin de document comme généralement le script google-analytics).&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Naturellement, qu'il s'agisse de scripts de Google ou de tout autre site (y compris les scripts de publo.fr !), le problème est le même. Comment s'en prémunir&amp;nbsp;? Comment affaiblir le couplage pour qu'un site ne soit pas perturbé par la lenteur du téléchargement de Javascripts tiers ?&lt;br /&gt;
Voici trois pistes:&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Héberger les scripts soi-même&lt;/h3&gt;

&lt;p&gt;Cette solution consiste à héberger soi-même les Javascripts que l'on utilise. C'est bien pour tout un tas de raisons d'utiliser un réseau de distribution pour les Javascripts que l'on utilise, mais cela peut aboutir à la situation décrite précédemment.&lt;br /&gt;
En hébergeant les Javascript sur le même serveur que celui qui sert les documents qui les incluent, on est assuré de ne pas rencontrer cette difficulté.&lt;/p&gt;


&lt;h3&gt;Faire du téléchargement asynchrone&lt;/h3&gt;

&lt;p&gt;Les fichiers Javascript sont téléchargés de façon synchrone lorsqu'ils sont inclus dans le document au moyen de balises &amp;lt;javascript src=&quot;http://blog.publo.fr/post/2009/05/14/.............&quot;/&amp;gt; dans le document HTML.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Par contre, si l'on inclut ces scripts dynamiquement dans le DOM, ils sont téléchargés de manière asynchrone, donc parallélisable.&lt;br /&gt;
Pour ce faire, il faut ajouter un peu de Javascript sur la page de façon à générer dynamiquement un nouvel élément Javascript qui inclut le script tiers.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En code, cela donne&lt;/p&gt;
&lt;pre&gt;
&amp;lt;javascript type=&amp;quot;text/javascript&amp;quot;&amp;gt;
        var script = document.createElement('script');
        script.setAttribute('type','text/javascript');
        script.setAttribute('src','.........................');
        document.getElementsByTagName('head')[0].appendChild(script);
&amp;lt;/javascript&amp;gt;
&lt;/pre&gt;

&lt;p&gt;En faisant cela, le téléchargement du script ne bloquera pas le téléchargement des autres éléments ni l'affichage de la page.
Seul inconvénient&amp;nbsp;: le browser reste en attente tant que le script n'est pas chargé.&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Faire du téléchargement paresseux&lt;/h3&gt;

&lt;p&gt;Si l'on veut palier à l'inconvénient relevé pour le téléchargement asynchrone, il faut ruser en différant le chargement du script. Pour ce faire, on va comme précédemment générer dynamiquement l'élément javascript d'inclusion, mais un peu plus tard&amp;nbsp;: lorsque la page sera chargée.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En code cela donne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;javascript type=&amp;quot;text/javascript&amp;quot;&amp;gt;
function ajouteScript(){
        var script = document.createElement('script');
        script.setAttribute('type','text/javascript');
        script.setAttribute('src','.....................');
        document.getElementsByTagName('head')[0].appendChild(script);
}
if( window.addEventListener ) { 
        window.addEventListener('load',ajouteScript,false);
} else if( document.addEventListener ) { 
        document.addEventListener('load',ajouteScript,false);
} else if( window.attachEvent ) { 
        window.attachEvent('onload',ajouteScript);
}
&amp;lt;/javascript&amp;gt;
&lt;/pre&gt;

&lt;p&gt;dans ce code, on associe la création de l'élément Javascript à l'événement 'load' du document.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Bien sûr, ces mesures ne règlent pas tout. Elles ne permettent de traiter que le cas de Javascripts autonomes. Lorsque la page utilise plusieurs scripts liés, il est nettement plus compliqué de faire du téléchargement paresseux tout en respectant les dépendances, mais cela dépasse largement le cadre de cet article fait sur le vif&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2009/05/14/decoupler-son-site-internet-des-services-tiers#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2009/05/14/decoupler-son-site-internet-des-services-tiers#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/93</wfw:commentRss>
      </item>
    
  <item>
    <title>Référencement vidéo sur Google</title>
    <link>http://blog.publo.fr/post/2009/04/29/Referencement-de-video</link>
    <guid isPermaLink="false">urn:md5:42c6049a6efeb20240d02796007aa690</guid>
    <pubDate>Wed, 29 Apr 2009 10:00:00 +0200</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>référencement</category><category>SEO</category>    
    <description>&lt;p&gt;La recherche Web de Google fait apparaître depuis quelque temps des résultats de vidéo en plus des résultats &quot;classiques&quot;. Ces résultats comprennent une petite image représentant la vidéo trouvée et se remarquent bien au milieu des autres résultats.
De quoi bien perturber le &quot;&lt;a href=&quot;http://www.enquiro.com/marketing-glossary/Googles-Golden-Triangle.asp&quot; hreflang=&quot;en&quot;&gt;triangle d'or de Google&lt;/a&gt;&quot; et donner un avantage certain à ce type de résultat face aux résultats classiques.&lt;/p&gt;    &lt;p&gt;Le référencement de publo.fr était déjà intéressant (en première page de Google et Yahoo depuis quelques semaines pour la recherche &quot;publicité locale&quot;) mais pour améliorer encore la visibilité, nous sommes partis en quête de référencement vidéo. Objectif&amp;nbsp;: faire référencer par Google la vidéo de &lt;a href=&quot;http://www.publo.fr/demonstration.html&quot; hreflang=&quot;fr&quot;&gt;démonstration de notre service de publicité locale&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Héberger ou faire héberger&amp;nbsp;?&lt;/h3&gt;

&lt;p&gt;La solution de facilité consiste à déposer la vidéo sur YouTube. Seul problème&amp;nbsp;: cela n'amène pas directement de trafic sur le site puisque la vidéo est sur YouTube, consultée sur YouTube et sans aucun lien vers le site...&lt;br /&gt;
Il faut donc plutôt héberger la vidéo sur le site et la faire référencer à cet endroit par Google.&lt;/p&gt;


&lt;h3&gt;Le robot va-t-il enfin trouver ma vidéo&amp;nbsp;?&lt;/h3&gt;

&lt;p&gt;Le référencement vidéo est un peu plus délicat que le référencement de pages webs. Pour les pages Web, il peut se faire spontanément ou bien on peut le favoriser en fournissant un &lt;a href=&quot;http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=40318&quot; hreflang=&quot;en&quot;&gt;sitemap&lt;/a&gt; (un plan de site en XML) à Google. Pour les vidéos, il semble qu'on ne puisse pas compter sur le référencement spontané, notamment lorsqu'on héberge soi-même la vidéo. Le sitemap s'impose. En effet, notre vidéo de démonstration est restée plus de deux mois sur notre site sans être jamais indexée, alors qu'elle se trouvait sur une page indexée.&lt;/p&gt;


&lt;h3&gt;Le sitemap vidéo&lt;/h3&gt;

&lt;p&gt;Google a défini un &lt;a href=&quot;http://www.google.com/support/webmasters/bin/answer.py?answer=80472&quot; hreflang=&quot;en&quot;&gt;format spécifique pour le référencement de vidéos&lt;/a&gt;. Attention, quoique la structure globale soit la même que pour les pages Web (un sitemap n'est jamais qu'une liste d'URL...), on ne peut pas faire de sitemap mixte pages Web / vidéos. Il faut faire deux sitemaps séparés.
Pour les sitemaps vidéo, il est vivement recommandé d'utiliser des sections CDATA dans les entités terminales, sans quoi on s'expose à des problèmes s'il y a des caractères accentués ou des '&amp;amp;'.
Une fois le sitemap terminé et chargé sur le serveur HTTP, il reste à l'indiquer à Google dans les Outils pour Webmaster, comme un sitemap ordinaire.&lt;/p&gt;


&lt;h3&gt;Une indexation rapide&lt;/h3&gt;

&lt;p&gt;Dans notre cas, il n'a fallu que 24h pour que la vidéo soit parcourue par le robot puis indexée. Elle apparaissait alors en première page de Google pour la recherche &quot;publicité locale démonstration&quot; dans les résultats Web. Quand aux résultats vidéo, elle y apparaissait en première position pour la recherche &quot;publicité locale&quot;. La concurrence y est moins rude que dans les résultats Web&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2009/04/29/Referencement-de-video#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2009/04/29/Referencement-de-video#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/92</wfw:commentRss>
      </item>
    
  <item>
    <title>Un petit régime avant l'été ?</title>
    <link>http://blog.publo.fr/post/2009/04/26/reduire-la-taille-de-javascript</link>
    <guid isPermaLink="false">urn:md5:c5ec96ea0624f73f404b887db5e38f44</guid>
    <pubDate>Sun, 26 Apr 2009 18:00:00 +0200</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>Javascript</category>    
    <description>&lt;p&gt;À l'occasion d'une petite campagne d'amélioration des performances de nos services sur laquelle nous reviendrons prochainement, nos gadgets météo et actualité viennent de suivre une cure amaigrissante.&lt;/p&gt;    &lt;p&gt;Ces gadgets reposent chacun sur du Javascript généré dynamiquement par notre serveur. Le petit régime s'est fait en deux étapes&lt;/p&gt;


&lt;h3&gt;Obfuscation&amp;nbsp;:&lt;/h3&gt;

&lt;p&gt;Les scripts ont été écrits (et sont maintenus) par un humain qui a une fâcheuse tendance à donner des noms explicites aux variables - des noms de plus d'une lettre - à aller à la ligne de temps en temps... C'est là qu'entrent en scène des outils d'obfuscation comme&lt;a href=&quot;http://developer.yahoo.com/yui/compressor/&quot; hreflang=&quot;en&quot;&gt; YUI Compressor&lt;/a&gt; de Yahoo. Leur objectif est double&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;réduire la taille du code&amp;nbsp;: toutes les variables sont renommées avec des noms d'une lettre de préférence, les retours chariot sont supprimés, etc.&lt;/li&gt;
&lt;li&gt;rendre le code incompréhensible pour lutter contre le reverse-engineering et la copie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans notre cas, c'est le premier aspect qui nous intéressait.  Seule difficulté&amp;nbsp;: le Javascript est généré dynamiquement à partir de JSP et ce sont donc des templates de Javascript qu'il a fallu obfusquer. Cela a nécessité un travail un peu fastidieux pour rendre ces fichiers compréhensibles par YUI Compressor, puis retransformer en templates les résultats obtenus. Bref La transformation a permis de passer de 4,1Ko à 3,4Ko pour la météo et de 3.8Ko à 3,3Ko pour les actualités, soit une perte de poids entre 20 et 26%&lt;/p&gt;


&lt;h3&gt;Compression&lt;/h3&gt;

&lt;p&gt;Jusqu'à présent, les scripts étaient servis non compressés, pour préserver un peu la puissance de calcul du serveur. Ce n'est plus le cas&amp;nbsp;! Après une légère modification de la configuration du serveur HTTP (activation du module deflate sur Apache) une débauche de calculs (comme les scripts sont dynamiques, on ne peut pas se contenter de les comprimer une fois pour toutes) a permis de passer de 4,1Ko à  948o pour le script correspondant au gadget météo et de 3,8 Ko à 2 Ko pour le script correspondant aux actualités, soit une perte de poids de l'ordre de 47 à 78%. Il est à noter que pour les actualités surtout, le poids dépend beaucoup des actualités du moment, mais c'est l'ordre de grandeur qui importe.&lt;/p&gt;


&lt;h3&gt;Résultats&lt;/h3&gt;

&lt;p&gt;Finalement, en combinant les deux, on passe de 4,1Ko à 845o pour la météo et de 3,8Ko à 1008o pour les actualités, soit une perte de poids de 74 à 80%.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Les résultats sont synthétisés dans le tableau ci-dessous&amp;nbsp;:&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Composant&lt;/th&gt;&lt;th&gt;Poids d'origine&lt;/th&gt;&lt;th&gt;Poids compressé&lt;/th&gt;&lt;th&gt;Poids obfusqué&lt;/th&gt;&lt;th&gt;Poids obfusqué et compressé&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;météo&lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;td&gt;22%&lt;/td&gt;&lt;td&gt;83%&lt;/td&gt;&lt;td&gt;20%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;actualité&lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;td&gt;53%&lt;/td&gt;&lt;td&gt;87%&lt;/td&gt;&lt;td&gt;26%&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;p&gt;En conclusion, grâce à YUI Compressor et au module deflate, nos gadgets ont perdu 6K avant l'été&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2009/04/26/reduire-la-taille-de-javascript#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2009/04/26/reduire-la-taille-de-javascript#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/91</wfw:commentRss>
      </item>
    
  <item>
    <title>IE et l'ajout d'iframe en Javascript</title>
    <link>http://blog.publo.fr/post/2009/01/10/IE-Javascript-Iframe-bug</link>
    <guid isPermaLink="false">urn:md5:6b656de3b6f68a78909504b280dad79e</guid>
    <pubDate>Thu, 15 Jan 2009 11:30:00 +0100</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>Javascript</category>    
    <description>&lt;p&gt;Ce billet décrit deux anomalies d'Internet Explorer dans la façon dont il gère des iframes ajoutés dynamiquement, et une façon d'y remédier.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;La manipulation du DOM avec Javascript est la technique de base utilisée pour enrichir des pages HTML (c'est d'ailleurs ce qu'utilisent les &lt;a href=&quot;http://blog.publo.fr/post/2009/01/05/gadgets-publo-fr&quot;&gt;gadgets publo.fr&lt;/a&gt;). Cependant, tous les navigateurs ne respectent pas les standard du Web, et bien sûr, certains ajoutent des bugs à ces incompatibilités.&lt;/p&gt;


&lt;p&gt;Internet Explorer présente un bug assez original dans ce domaine. Le problème survient lorsqu'on utilise du Javascript pour ajouter un &lt;code&gt;iframe&lt;/code&gt; au document et que l'on tente de modifier ses attributs &lt;em&gt;a posteriori&lt;/em&gt;.&lt;/p&gt;


&lt;h5&gt;Premier exemple&amp;nbsp;: les changement d'attributs sans effet&lt;br /&gt;&lt;/h5&gt;

&lt;p&gt;On ajoute un iframe au noeud &quot;noeudIFrame&quot; puis on tente de masquer sa bordure et ses scrollbars (par défaut, IE affiche une bordure et des scrollbars aux iframes, ce qui n'est pas toujours du meilleur effet).&lt;/p&gt;

&lt;pre&gt;
var iframe = noeudIFrame.appendChild(
                     document.createElement('iframe'));
iframe.setAttribute('frameBorder', '0'); 
iframe.setAttribute('scrolling', 'no');
&lt;/pre&gt;


&lt;p&gt;Malheureusement, les deux dernières lignes de code n'ont aucun effet (la bordure et le scrolling resteront visibles) sous IE... Il est trop tard lorsque l'&lt;code&gt;iframe&lt;/code&gt; a été ajouté dans le DOM pour modifier ces deux attributs. Par contre, le code suivant fonctionne&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var iframe = document.createElement('iframe');
iframe.setAttribute('frameBorder', '0'); 
iframe.setAttribute('scrolling', 'no');
noeudIFrame.appendChild(iframe);
&lt;/pre&gt;


&lt;p&gt;Notez au passage que la casse utilisée pour l'attribut &lt;code&gt;frameBorder&lt;/code&gt; n'est pas une coquille de ma part&amp;nbsp;: alors que le nom standard est &lt;code&gt;frameborder&lt;/code&gt;, IE ne le comprend pas mais comprend &lt;code&gt;frameBorder&lt;/code&gt;.&lt;/p&gt;


&lt;h5&gt;Second exemple (plus vicieux)&amp;nbsp;: l'&lt;code&gt;iframe&lt;/code&gt; qui plante le navigateur&lt;br /&gt;&lt;/h5&gt;

&lt;p&gt;On ajoute un &lt;code&gt;iframe&lt;/code&gt; au document puis on définit sa source (attribut &lt;code&gt;src&lt;/code&gt;)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var iframe = noeudIFrame.appendChild(
                      document.createElement('iframe'));
iframe.setAttribute('src','http://blog.publo.fr');
&lt;/pre&gt;


&lt;p&gt;Ici le résultat est encore plus catastrophique&amp;nbsp;: il peut aboutir à un crash du navigateur sous Windows XP, avec IE6 et IE7 (le bug semble corrigé sous Vista). Là encore, la prudence recommande de définir la source avant d'ajouter l'élément&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var iframe = document.createElement('iframe');
iframe.setAttribute('src', 'http://blog.publo.fr'); 
noeudIFrame.appendChild(iframe);
&lt;/pre&gt;


&lt;p&gt;En conclusion, si l'on veut éviter des problèmes avec certains navigateurs puis des bugs difficiles à identifier, il vaut mieux ménager le DOM&amp;nbsp;! En particulier pour les &lt;code&gt;iframe&lt;/code&gt;&amp;nbsp;: on commence par les créer, on les définit complètement puis on les insère dans le document.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2009/01/10/IE-Javascript-Iframe-bug#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2009/01/10/IE-Javascript-Iframe-bug#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/75</wfw:commentRss>
      </item>
    
  <item>
    <title>Tutoriel sur le partitionnement d'un serveur Kimsufi</title>
    <link>http://blog.publo.fr/post/2008/10/16/tutoriel-partitionnement-serveur-kimsufi</link>
    <guid isPermaLink="false">urn:md5:bd2c56cfa4521a319852b5960604a8fe</guid>
    <pubDate>Tue, 04 Nov 2008 09:00:00 +0000</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>Ubuntu</category>    
    <description>&lt;p&gt;Le partitionnement de base fourni sur les serveurs Kimsufi sous Ubuntu mérite généralement un bon remaniement pour coller à ses besoins. Ce tutoriel retrace comment passer d'une partitionnement monolithique à un partitionnement plus adapté à un serveur.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Le serveur d'origine n'est pas vraiment partitionné selon mes goûts. Cela ressemble à ceci&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;

root@serveur:~# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              3099260    492972   2448856  17% /
varrun                  493172        44    493128   1% /var/run
varlock                 493172         0    493172   0% /var/lock
udev                    493172        20    493152   1% /dev
devshm                  493172         0    493172   0% /dev/shm
/dev/sda2            236749404     32844 224690304   1% /home
&lt;/pre&gt;


&lt;p&gt;Bref, une partition énorme pour &lt;code&gt;/home&lt;/code&gt; et pas grand chose pour le reste&amp;nbsp;: même la racine n'a droit qu'à une portion congrue. Sachant que la plus grande partie du disque sera consacrée à &lt;code&gt;/var&lt;/code&gt; (i.e. les données) et à &lt;code&gt;/usr&lt;/code&gt; (i.e. les applications installées), quelques transformations s'imposent.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour retailler les partitions, j'utilise &lt;code&gt;&lt;a href=&quot;http://www.gnu.org/software/parted/manual/parted.html&quot; hreflang=&quot;en&quot;&gt;parted&lt;/a&gt;&lt;/code&gt; en ligne de commande.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En fait, je me contente de retailler &lt;code&gt;/home&lt;/code&gt; pour disposer d'un &lt;code&gt;/var&lt;/code&gt; et d'un &lt;code&gt;/usr&lt;/code&gt; de bonne taille. Le &lt;code&gt;/home&lt;/code&gt; lui-même ne me servira pas à grand chose. Disons qu'on part pour un &lt;code&gt;/var&lt;/code&gt; et un &lt;code&gt;/usr&lt;/code&gt; de 100Go chacun et un &lt;code&gt;/home&lt;/code&gt; de 49Go et on y ajoute un petit &lt;code&gt;/tmp&lt;/code&gt; de 1Go.
Pour commencer, il faut démonter la partition:&lt;/p&gt;
&lt;pre&gt;
root@serveur:~# umount /home
&lt;/pre&gt;


&lt;p&gt;Ensuite, une petite vérification ne fait pas de mal&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
root@serveur:~#parted
GNU Parted 1.7.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
&lt;/pre&gt;


&lt;p&gt;On commence par regarder les partitions&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
(parted) print                                                            

Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  3224MB  3224MB  primary  ext3         boot 
 2      3224MB  250GB   246GB   primary  ext3              
 3      250GB   250GB   535MB   primary  linux-swap        
&lt;/pre&gt;


&lt;p&gt;Puis on vérifie rapidement l'état de &lt;code&gt;/home&lt;/code&gt; (la deuxième dans la liste):&lt;/p&gt;
&lt;pre&gt;
(parted) check 2                                                          
Information: The ext2 file system passed a basic check.  For a more comprehensive check, use the e2fsck program.
&lt;/pre&gt;


&lt;p&gt;Et l'on regarde ce qu'on peut en faire&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
(parted) print 2                                                          

Minor: 2
Flags: 
File System: ext2
Size:         246GB (98.5%)
Minimum size: 3900MB (1.56%)
Maximum size: 250GB (100%)
&lt;/pre&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Elle est donc énorme pour le moment, mais très peu occupée (c'est un peu normal pour un serveur fraîchement installé).
Voici le partitionnement souhaité (avec &lt;code&gt;parted&lt;/code&gt;, on doit préciser où commence et où se termine une partition):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/home&amp;nbsp;: début à 0, fin à 49Go&lt;/li&gt;
&lt;li&gt;/tmp&amp;nbsp;: début à 49Go, fin à 50Go&lt;/li&gt;
&lt;li&gt;/var&amp;nbsp;: début à 50Go, fin à 150Go&lt;/li&gt;
&lt;li&gt;/usr&amp;nbsp;: début à 150Go, fin à 250Go&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour le resizing de &lt;code&gt;/home&lt;/code&gt;, cela se passe ici (en mode intéractif, c'est plus facile!)&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
(parted) resize                                                          
Partition number? 2                                                       
Start?  [3224MB]?                                                         
End?  [250GB]? 52GB                                                       
Warning: A resize operation on this file system will use EXPERIMENTAL code
that MAY CORRUPT it (although it hasn't doneso yet
in the past).
You should at least backup your data and run 'e2fsck -f' afterwards.
OK/Cancel? OK                                                             
&lt;/pre&gt;


&lt;p&gt;Bon, le &lt;em&gt;warning&lt;/em&gt; n'est pas très encourageant, mais ça fonctionne...&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;On commence par une partition étendue (pas besoin d'une primaire vu que je ne vais pas y installer un autre OS):&lt;/p&gt;
&lt;pre&gt;
(parted) mkpart                                                           
Partition type?  primary/extended? extended                               
Start? 52GB                                                               
End? 250GB 
&lt;/pre&gt;


&lt;p&gt;Dans cette partition, on va placer les partitions logiques &lt;code&gt;/tmp&lt;/code&gt; &lt;code&gt;/var&lt;/code&gt; et &lt;code&gt;/usr&lt;/code&gt;&amp;nbsp;:
pour &lt;code&gt;/tmp&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
(parted) mkpartfs                                                         
Partition type?  [logical]?                                               
File system type?  [ext2]?                                           
Start? 52.0GB                                                               
End? 53.0GB         
&lt;/pre&gt;


&lt;p&gt;et ainsi de suite pour &lt;code&gt;/var&lt;/code&gt; et &lt;code&gt;/usr&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Attention, il est judicieux d'être précis sur la taille des partitions indiquées à &lt;code&gt;parted&lt;/code&gt;, sinon c'est lui qui choisira comment il gère l'approximation. Pour une partition de 100Go, une approximation à 1Go n'est pas franchement gênante&amp;nbsp;; elle l'est plus pour une partition de 1Go, comme &lt;code&gt;/tmp&lt;/code&gt;. C'est pour cela que j'ai précisé la première décimale du &lt;code&gt;start&lt;/code&gt; et du &lt;code&gt;end&lt;/code&gt;.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Finalement, on obtient&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
(parted) print                                                            

Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      32.3kB  3224MB  3224MB  primary   ext3         boot 
 2      3224MB  52.0GB  48.8GB  primary   ext3              
 4      52.0GB  250GB   198GB   extended               lba  
 5      52.0GB  52.0GB  8193kB  logical   ext2              
 6      52.0GB  152GB   100GB   logical   ext2              
 7      152GB   250GB   97.5GB  logical   ext2              
 3      250GB   250GB   535MB   primary   linux-swap
&lt;/pre&gt;


&lt;p&gt;Reste maintenant à mettre à jour &lt;code&gt;/etc/fstab&lt;/code&gt; pour y faire figurer les nouvelles partitions&lt;/p&gt;
&lt;pre&gt;
root@serveur:~#vi /etc/fstab

/dev/sda1       /       ext3    errors=remount-ro       0       1
/dev/sda2       /home   ext3    defaults                0       2
/dev/sda3       none    swap    defaults                0       0
/dev/sda5       /tmp    ext2    defaults                0       2
/dev/sda6       /usr    ext2    defaults                0       2
/dev/sda7       /var    ext2    defaults                0       2
proc            /proc   proc    defaults        0       0
sysfs           /sys    sysfs   defaults        0       0
&lt;/pre&gt;


&lt;p&gt;Et le tour est joué.&lt;br /&gt;
Ensuite, il reste à déplacer le contenu actuel de &lt;code&gt;/usr&lt;/code&gt; de la partition &lt;code&gt;/dev/sda1&lt;/code&gt; à la partition &lt;code&gt;/dev/sda5&lt;/code&gt;, et le contenu de &lt;code&gt;/var&lt;/code&gt; de la partition &lt;code&gt;/dev/sda1&lt;/code&gt; à &lt;code&gt;/dev/sda7&lt;/code&gt;. Tout ceci peut se faire à coups de &lt;code&gt;mv&lt;/code&gt;, en utilisant &lt;code&gt;/home&lt;/code&gt; comme tampon.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Attention, un &lt;code&gt;mv&lt;/code&gt; des répertoires &lt;code&gt;/usr&lt;/code&gt; et &lt;code&gt;/lib&lt;/code&gt; n'est pas complètement anodin&amp;nbsp;: il y a des choses qui servent là-dedans&amp;nbsp;! Pareil pour le changement de la table des partitions. En cas de grosse erreur pendant ces manip, le mode secours du Kimsufi vous permettra de remettre de l'ordre dans tout cela, mais c'est un peu pénible et cela peut donner quelques sueurs froides...&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;
root@serveur:~# mv /usr /home
root@serveur:~# mkdir /usr
root@serveur:~# mount /usr
root@serveur:~# mv /home/usr/* /usr
&lt;/pre&gt;


&lt;p&gt;et la même chose pour &lt;code&gt;var&lt;/code&gt;, ou presque car &lt;code&gt;/var/run&lt;/code&gt; et &lt;code&gt;/var/lock&lt;/code&gt; sont gérés différemment, donc on les laisse en place.&lt;br /&gt;
Après un &lt;code&gt;reboot&lt;/code&gt;, tout doit rentrer dans l'ordre&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
root@serveur:~# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              3099260     69504   2872324   3% /
varrun                  493172        44    493128   1% /var/run
varlock                 493172         0    493172   0% /var/lock
udev                    493172        36    493136   1% /dev
devshm                  493172         0    493172   0% /dev/shm
/dev/sda2             46884132     32848  44469648   1% /home
/dev/sda5                 74960        13      70830   1% /tmp
/dev/sda6             96116872    298880  90935440   1% /usr
/dev/sda7             93738184    124756  88851764   1% /var
&lt;/pre&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2008/10/16/tutoriel-partitionnement-serveur-kimsufi#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2008/10/16/tutoriel-partitionnement-serveur-kimsufi#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/42</wfw:commentRss>
      </item>
    
  <item>
    <title>Le problème des cadres arrondis en HTML</title>
    <link>http://blog.publo.fr/post/2008/10/09/Le-probleme-des-cadres-arrondis-en-HTML</link>
    <guid isPermaLink="false">urn:md5:1c994bc4a0e37860623d655631c7fb95</guid>
    <pubDate>Fri, 10 Oct 2008 10:41:00 +0000</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>CSS</category><category>Javascript</category><category>Prototype</category>    
    <description>&lt;p&gt;Faire des cadres à coins arrondis en HTML qui s'adaptent à la taille du contenu n'est pas une sinécure. Les limitations actuelles de CSS conduisent souvent à un code HTML plus ou moins pollué par la mise en forme. Cet article présente un exemple de mise en oeuvre de la technique de décoration qui fait appelle à Javascript pour pallier à cet inconvénient.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Le problème des cadres à coins arrondis est vieux comme le Web. En HTML et CSS, alors qu'il est très simple de faire des cadres rectangulaires qui se redimensionnent tout seuls, il n'existe pas de façon simple de faire le même genre de cadres avec des coins arrondis ou plus généralement des cadres composés d'images.&lt;/p&gt;


&lt;p&gt;En attendant la prochaine version de CSS qui devrait apporter une solution propre, il faut se résoudre à utiliser un contournement. Sur ce point il y a deux écoles&amp;nbsp;: ceux qui utilisent des éléments TABLEs et ceux qui utilisent des DIVs avec du CSS. Aucune de ces deux méthodes n'est satisfaisante. La première car elle détourne l'élément TABLE de son usage normal (représenter des données tabulaires). La seconde car elle introduit une multitude d'éléments DIV qui ne portent aucun sens et polluent le HTML. En outre, les inconvénients existent aussi bien du côté client (code HTML pollué donc plus lourd et moins accessible) que du côté serveur (on se retrouve avec du spaghettiware HTML à maintenir).&lt;/p&gt;


&lt;p&gt;Cet article présente un exemple d'utilisation d'une technique qui ne résout pas tous ces problèmes mais qui permet de faciliter la maintenance du code HTML. Cet exemple ne prend pas non plus parti dans la querelle des pro-DIV contre les pro-TABLE, mais arbitrairement, il s'appuie sur un layout en TABLEs. L'objectif est d'avoir un code HTML non pollué par la mise en forme, du point de vue du développeur (on ne peut hélas pas grand chose pour le client...).&lt;/p&gt;


&lt;p&gt;Le principe consiste à utiliser du Javascript pour décorer le code HTML en ajoutant là où on le souhaite les fameux cadres à coins arrondis. Pour développer commodément la chose et s'assurer de la portabilité du code, le recours à la librairie Prototype n'est pas inintéressant, aussi ne s'en privera-t-on pas.&lt;/p&gt;


&lt;p&gt;Voici donc une page d'exemple&amp;nbsp;:
&lt;a href=&quot;http://blog.publo.fr/public/cadre_arrondi/page_sans_cadre.html&quot;&gt;page_sans_cadre.html&lt;/a&gt;
dont le code source est le suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;fr_FR&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Ceci est une page qui parle pour ne rien dire&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;important&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ceci est une zone encadrée que j'aimerais bien voir encadrée&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Et puis, je préfère les coins arrondis car c'est plus joli !&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Ceci est le bas de la page...&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Le but du jeu est de faire un cadre à bord arrondis autour de la section importante (celle de class &quot;important&quot;).
On peut bien sûr faire cela directement dans le code HTML, à coups de TABLE et CSS et en utilisant des images pour le cadre. On aboutit au code HTML suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html lang=&amp;quot;fr_FR&amp;quot; xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;
&amp;lt;link href=&amp;quot;./cadre.css&amp;quot; type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Ceci est une page qui parle pour ne rien dire&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;coin_haut_gauche&amp;quot;/&amp;gt;
&amp;lt;td class=&amp;quot;bord_haut&amp;quot;/&amp;gt;
&amp;lt;td class=&amp;quot;coin_haut_droit&amp;quot;/&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;bord_gauche&amp;quot;/&amp;gt;
&amp;lt;td class=&amp;quot;coeur'&amp;gt;
&amp;lt;div class=&amp;quot;important&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ceci est une zone encadrée que j'aimerais bien voir encadrée&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Et puis, je préfère les coins arrondis car c'est plus joli !&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;bord_droit&amp;quot;/&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;coin_bas_gauche&amp;quot;/&amp;gt;
&amp;lt;td class=&amp;quot;bord_bas&amp;quot;/&amp;gt;
&amp;lt;td class=&amp;quot;coin_bas_droit&amp;quot;/&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;p&amp;gt;Ceci est le bas de la page...&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

&lt;p&gt;avec la feuille style suivante&amp;nbsp;: &lt;a href=&quot;http://blog.publo.fr/public/cadre_arrondi/cadre.css&quot;&gt;cadre.css&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Le résultat peut être visualisé ici&amp;nbsp;: &lt;a href=&quot;http://blog.publo.fr/public/cadre_arrondi/page_avec_cadre.html&quot;&gt;page_avec_cadre.html&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Cela fonctionne, mais le fichier a doublé de volume, et c'est un devenu un cauchemar pour celui qui doit maintenir ce code...&lt;/p&gt;


&lt;p&gt;La technique de décoration avec Javascript permet de revenir à un code très voisin du code d'origine. C'est en Javascript que le DOM sera modifié pour ressembler au code complexe ci-dessus. Avec Prototype, il suffit de quelques lignes pour enrober dans une table la section &quot;importante&quot;.
Voici le code utilisé&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
function decore(){
	var element = $$('.important')[0];
	var td = element.wrap('td');
	td.addClassName('coeur');
	var tr= td.wrap('tr');
	td.insert({before : '&amp;lt;td class=&amp;quot;bord_gauche&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;'});
	td.insert({after : '&amp;lt;td class=&amp;quot;bord_droit&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;'});
	var tbody = tr.wrap('tbody');
	tbody.wrap('table');
	tr.insert({before : '&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;coin_haut_gauche&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;bord_haut&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;coin_haut_droit&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;'});
	tr.insert({after : '&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;coin_bas_gauche&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;bord_bas&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;coin_bas_droit&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;'});
}
Event.observe(window,'load',decore,false);
&lt;/pre&gt;

&lt;p&gt;Voici la nouvelle forme du fichier HTML&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;fr_FR&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./prototype.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./test.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link href=&amp;quot;./test.css&amp;quot; type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Ceci est une page qui parle pour ne rien dire&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;important&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ceci est une zone encadrée que j'aimerais bien voir encadrée&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Et puis, je préfère les coins arrondis car c'est plus joli !&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Ceci est le bas de la page...&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Vous remarquerez que l'on est revenu à une structure simple, non polluée par la mise en forme. Seule différence avec le code d'origine&amp;nbsp;: les deux entités script de l'entête et bien sûr la feuille de style.
Le résultat peut être vu ici&amp;nbsp;: &lt;a href=&quot;http://blog.publo.fr/public/cadre_arrondi/page_avec_cadre_decore.html&quot;&gt;page_avec_cadre_decore.html&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2008/10/09/Le-probleme-des-cadres-arrondis-en-HTML#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2008/10/09/Le-probleme-des-cadres-arrondis-en-HTML#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/35</wfw:commentRss>
      </item>
    
  <item>
    <title>Prototype et l'encodage</title>
    <link>http://blog.publo.fr/post/2008/10/01/Prototype-Javascript-et-encodage</link>
    <guid isPermaLink="false">urn:md5:2a7941402c055afffad47c5b7b29891c</guid>
    <pubDate>Wed, 01 Oct 2008 11:34:00 +0000</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>encodage</category><category>Javascript</category><category>Prototype</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.prototypejs.org&quot; hreflang=&quot;en&quot;&gt;Prototype&lt;/a&gt; est un framework Javascript qui facilite grandement le développement d'interfaces riches. Il offre notamment des objets bien utiles pour faire de l'&lt;a href=&quot;http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML&quot; hreflang=&quot;fr&quot;&gt;AJAX&lt;/a&gt;. Hélas, même si Prototype permet de s'affranchir de nombreux problèmes de compatibilité de navigateurs, on finit toujours par être rattrapé par le problème récurrent le plus vieux de l'Internet&amp;nbsp;: l'encodage dès qu'on quitte le monde merveilleux de l'ASCII.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;J'avais déjà évoqué le &lt;a href=&quot;http://blog.publo.fr/post/2008/08/09/jsp%3Ainclude-et-lencodage&quot;&gt;problème de l'encodage dans les JSPs&lt;/a&gt; (donc côté serveur). Voici maintenant un problème rencontré côté client, sur du Javascript basé sur Prototype.
Le problème survient lorsqu'on utilise l'objet &lt;code&gt;&lt;a href=&quot;http://www.prototypejs.org/api/ajax/request&quot; hreflang=&quot;en&quot;&gt;Ajax.Request&lt;/a&gt;&lt;/code&gt; pour transporter dans données en JSON. Si l'on s'en tient à la documentation de Prototype, cela se fait de la manière suivante&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
new Ajax.Request('/data',{
	    onSuccess: function(transport){
	    	json = transport.headerJSON;
                // et utilisez ce joli objet !
            }
});
&lt;/pre&gt;

&lt;p&gt;où &lt;code&gt;/data&lt;/code&gt; est la ressource qui renvoie les données en &lt;a href=&quot;http://fr.wikipedia.org/wiki/JSON&quot; hreflang=&quot;fr&quot;&gt;JSON&lt;/a&gt;. On aura pris soin de lui affecter un &lt;code&gt;Content-type&lt;/code&gt; de type &lt;code&gt;application/javascript&lt;/code&gt; et de mettre les données JSON dans un Header nommé &lt;code&gt;X-JSON&lt;/code&gt;.&lt;br /&gt;
Les données renvoyées en JSON sont évaluées automatiquement et cela fonctionne très bien tant que ces données ne contiennent aucun caractère non ASCII. Par contre, si vous avez besoin de caractères non ASCII (ça peut servir, en français), les ennuis commencent.&lt;br /&gt;
Avec un navigateur FireFox (les curieux pourront tester sur d'autres navigateurs), dès que parmi les données, il y a des caractères accentués, FireFox lève une erreur mystérieuse&amp;nbsp;: &lt;code&gt;malformed URI sequence&lt;/code&gt;
On aura beau ajouter dans la réponse du serveur toutes sortes d'artifices pour bien préciser que la réponse est encodée en UTF-8, l'erreur surgira inévitablement...&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Heureusement, voici un contournement qui permet d'utiliser malgré tout nos chers caractères accentués dans les données JSON.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Primo, côté serveur, oubliez l'envoi JSON à la manière orthodoxe&amp;nbsp;: renvoyez plutôt les données JSON dans le corps de la réponse HTTP et optez pour un &lt;code&gt;Content-type&lt;/code&gt; de la forme &lt;code&gt;text/html; charset=UTF-8&lt;/code&gt;.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Secundo, côté client (Javascript), oubliez l'évaluation automatique des données reçues&amp;nbsp;: récupérez la réponse sous forme texte puis évaluez-là. En clair, cela donne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
new Ajax.Request('/data',{
           onSuccess: function(transport){
	    	json = transport.responseText;
	    	json = json.evalJSON();
                // et utilisez ce joli objet !
           }
});
&lt;/pre&gt;

&lt;p&gt;C'est moins propre, moins élégant, mais cela a le mérite de fonctionner&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2008/10/01/Prototype-Javascript-et-encodage#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2008/10/01/Prototype-Javascript-et-encodage#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/23</wfw:commentRss>
      </item>
    
  <item>
    <title>Google Chrome au banc d'essai</title>
    <link>http://blog.publo.fr/post/2008/09/04/Google-Chrome-au-banc-dessai</link>
    <guid isPermaLink="false">urn:md5:32e742b476bcbb13e9eda73032c687ff</guid>
    <pubDate>Fri, 05 Sep 2008 00:13:00 +0000</pubDate>
    <dc:creator>Benjamin</dc:creator>
        <category>technique</category>
        <category>CSS</category><category>Javascript</category>    
    <description>&lt;p&gt;Dans cet article, nous comparons Google Chrome à ses principaux concurrents sur des critères de performance et de respect des standards du Web. S'il a une longueur d'avance sur les navigateurs en version stable, c'est loin d'être le cas avec les versions beta et autres versions de développement.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Difficile de passer à travers le battage médiatique qui a accompagné la sortie de la version beta du navigateur de Google : Chrome. A en croire la &lt;a href=&quot;http://www.google.com/googlebooks/chrome/&quot; hreflang=&quot;en&quot;&gt;bande dessinée&lt;/a&gt; publicitaire faite par Google, leur navigateur est bien entendu le plus ergonomique, le plus riche, le plus performant...&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Face à cette avalanches d'affirmations dont certaines sont probablement exactes, rien de tel que quelques tests pour se convaincre du bien fondé ou non de ce discours marketting. J'ai donc en premier lieu souhaité comparer Chrome à d'autres navigateurs du marché sur deux points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le respect des standards du web au travers d'une célèbre batterie de tests : &lt;em&gt;acid3&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;les performances du moteur Javascript embarqué au travers d'une autre batterie de tests : &lt;em&gt;sunspider&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avant de nous lancer dans les tests, passons en revue les forces en présences&lt;/p&gt;


&lt;h3&gt;Les navigateurs testés&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Chrome beta, bien sûr&lt;/li&gt;
&lt;li&gt;Internet Explorer, l'inévitable, dans sa version 7.0, et vu que Chrome est lui-même en version beta, je me suis permis de faire également les tests avec Internet Explorer 8 beta&lt;/li&gt;
&lt;li&gt;Firefox, son challenger dans sa version stable 3.0 et Firefox 3.1 (nightly build), la version de développement&lt;/li&gt;
&lt;li&gt;Opera, l'aristocrate des navigateurs, dans sa version stable 9.51 et dans sa version en cours de développement (9.6)&lt;/li&gt;
&lt;li&gt;Safari, pour les inconditionnels de la marque à la pomme, dans sa version stable 3.1.2, et dans sa version de développement WebKit (36012)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tous ces navigateurs ont été installés sur la même machine qui tourne sous Windows XP, avec un processeur double-cœur.&lt;/p&gt;


&lt;h3&gt;Test de respect des standards du web&lt;/h3&gt;

&lt;p&gt;Tout d'abord, pourquoi tester cet aspect ? En fait, le respect des standards du web (DOM, CSS et JavaScript notamment) est primordial pour un navigateur : c'est ce qui fait que le comportement et le rendu d'une application web seront ceux attendus, et sensiblement les mêmes quel que soit le navigateur. Et pour nous développeurs, c'est ce qui permet d'éviter d'avoir à coder autant de versions d'une interface web qu'il y a de navigateurs sur le marché.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour tester cet aspect, je me suis donc appuyé sur le &lt;a href=&quot;http://www.webstandards.org/action/acid3/&quot; hreflang=&quot;en&quot;&gt;test acid3&lt;/a&gt; qui permet en seulement une page web, d'attribuer une note au navigateur testé, par rapport à son respect des standards du web. D'ailleurs, pour tester votre navigateur, &lt;a href=&quot;http://acid3.acidtests.org/&quot; hreflang=&quot;en&quot;&gt;faites-lui passer le test acid3&lt;/a&gt; !&lt;br /&gt;
Un sans-faute sur ce test devrait donner &lt;a href=&quot;http://blog.publo.fr/public/acid/reference.PNG&quot;&gt; un rendu avec la note 100/100 &lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Voici les résultats obtenus par mes cobbayes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome beta : &lt;a href=&quot;http://blog.publo.fr/public/acid/chrome.PNG&quot;&gt;76/100 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Internet Explorer 7.0 : &lt;a href=&quot;http://blog.publo.fr/public/acid/ie7.PNG&quot;&gt;12/100 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Internet Explorer 8.0 beta : &lt;a href=&quot;http://blog.publo.fr/public/acid/ie8.PNG&quot;&gt;21/100 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Firefox 3.0 : &lt;a href=&quot;http://blog.publo.fr/public/acid/ff3.PNG&quot;&gt;71/100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Firefox 3.1 (version développement) : &lt;a href=&quot;http://blog.publo.fr/public/acid/ff31.PNG&quot;&gt;84/100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Opera 9.51 : &lt;a href=&quot;http://blog.publo.fr/public/acid/opera951.PNG&quot;&gt;84/100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Opera 9.6 : &lt;a href=&quot;http://blog.publo.fr/public/acid/opera96.PNG&quot;&gt;84/100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Safari 3.1.2 : &lt;a href=&quot;http://blog.publo.fr/public/acid/safari312.PNG&quot;&gt;75/100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Webkit (Safari version développement) : &lt;a href=&quot;http://blog.publo.fr/public/acid/webkit.PNG&quot;&gt;99/100&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le gagnant de cette manche est donc WebKit, qui fait figure d'extraterrestre avec ses 99/100... On peut tout de même décerner une mention spéciale à Opéra 9.51 avec ses 84/100 puisqu'il s'agit d'une version stable, contrairement à WebKit, Chrome et Firefox 3.1. Au passage, on peut aussi remettre un bonnet d'âne à Internet Explorer pour son non respect des standard, même si ça s'améliore un peu avec la version 8 beta.
Chrome est donc bien placé par rapport aux navigateurs en version stable (Internet 7, Firefox 3.0, Safari 3.1.2), mais il reste derrière Opéra (y compris version stable) et derrière WebKit et Firefox 3.1 (versions de développement).&lt;/p&gt;


&lt;h3&gt;Test des performances du moteur JavaScript&lt;/h3&gt;

&lt;p&gt;Les performances de Chrome en termes d'exécution de JavaScript constituent un argument fort de Google, et certains utilisateurs de GMail, qui met en oeuvre JavaScript de façon intensive, font déjà état de progrès fabuleux constatés par rapport à leur ancien navigateur.
Voyons donc ce qu'il en est sur un test classique des performances d'exécution de moteurs JavaScript : &lt;a href=&quot;http://www2.webkit.org/perf/sunspider-0.9/sunspider.html&quot; hreflang=&quot;en&quot;&gt;le test sunspider&lt;/a&gt;. Ce test en ligne permet de chronométrer votre navigateur (ou plutôt son moteur Javascript) lorsqu'il fait des calculs, des manipulations de chaînes, de la crypto, bref, un peu de tout.&lt;br /&gt;
Voici les résultats obtenus :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome beta : 2726.8ms (+/- 1.6%)&lt;/li&gt;
&lt;li&gt;Internet Explorer 7.0 : 50887.8ms (+/- 5.1%)&lt;/li&gt;
&lt;li&gt;Internet Explorer 8.0 : 10394.4ms (+/- 0.3%)&lt;/li&gt;
&lt;li&gt;Firefox 3.0 : 4574.6ms (+/- 3.4%)&lt;/li&gt;
&lt;li&gt;Firefox 3.1 nightly build : 2613.2ms (+/- 4.5%)&lt;/li&gt;
&lt;li&gt;Opera 9.51 : 6468.8ms (+/- 1.8%)&lt;/li&gt;
&lt;li&gt;Opera 9.6 : 6583.4ms (+/- 2.6%)&lt;/li&gt;
&lt;li&gt;Safari 3.1.2 : 6127.2ms (+/- 0.8%)&lt;/li&gt;
&lt;li&gt;Webkit (Safari en version de développement) : 4029.2ms (+/- 2.3%)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour Firefox 3.1, précisons que nous utilisons TraceMonkey (le tout nouveau moteur JavaScript de Firefox), que l'on peut activer en mettant à true les paramètres javascript.options.jit.chrome et javascript.options.jit.content. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ici, Chrome affiche une supériorité par rapport aux autres navigateurs en version stable, et même la version de développement de Safari est un peu moins vive. Cependant, Firefox 3.1 (version de développement) le surpasse légèrement.&lt;br /&gt;
Là encore, force est de constater que Microsoft fait figure de mauvais élève.&lt;/p&gt;


&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Le discours de Google n'est pas complètement faux, mais totalement vrai non plus... Sur les points évalués, Chrome apporte assurément un progrès par rapport à la plupart des navigateurs du marché en version stable. Par contre, dès que l'on s'intéresse à ses vrais concurrents, c'est à dire aux versions en cours de développement, on trouve mieux. Firefox notamment donne de meilleurs résultats sur les deux séries de tests.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.publo.fr/post/2008/09/04/Google-Chrome-au-banc-dessai#comment-form</comments>
      <wfw:comment>http://blog.publo.fr/post/2008/09/04/Google-Chrome-au-banc-dessai#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.publo.fr/feed/atom/comments/21</wfw:commentRss>
      </item>
    
</channel>
</rss>
