ZZZ http://zzz.rezo.net/ une sorte de fatras... fr SPIP - www.spip.net <span class="caps">ZZZ</span> http://zzz.rezo.net/local/cache-vignettes/L144xH93/siteon0-21452.png http://zzz.rezo.net/ 93 144 ZZZ sous Zpip http://zzz.rezo.net/ZZZ-sous-Zpip.html http://zzz.rezo.net/ZZZ-sous-Zpip.html 2009-11-13T23:16:11Z text/html fr Fil Logiciels libres Web Interfaces <p>Le squelette Zpip, qui vient de sortir sur SPIP-Contrib, est une nouvelle manière de concevoir un site sous SPIP. La présentation de ce site, réalisée par Baroug, était essentiellement une feuille de style pour la « dist » de SPIP. Je viens de le transformer en un thème pour Zpip, le nouveau squelette proposé par Cédric et Marcimat pour remplacer la « dist ». Qu'est-ce que ça change ? On avait déjà pris l'habitude de séparer, dans une même page Web, la structure de la page (son arbre HTML) de sa (...)</p> - <a href="http://zzz.rezo.net/-SPIP-.html" rel="directory">SPIP</a> / <a href="http://zzz.rezo.net/+-Logiciels-libres-+.html" rel="tag">Logiciels libres</a>, <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a>, <a href="http://zzz.rezo.net/+-Interfaces-+.html" rel="tag">Interfaces</a> <img class='spip_logos' alt="" align="right" src='http://zzz.rezo.net/local/cache-vignettes/L100xH100/arton48-fa39b.png' width='100' height='100' style='height:100px;width:100px;' /> <div class='rss_chapo'><p>Le <a href="http://www.spip-contrib.net/Le-Squelette-Zpip" class='spip_out' rel='external'>squelette Zpip</a>, qui vient de sortir sur <span class="caps">SPIP</span>-Contrib, est une nouvelle manière de concevoir un site sous <span class="caps">SPIP</span>.</p></div> <div class='rss_texte'><p>La présentation de ce site, réalisée par <a href='http://zzz.rezo.net/_Baroug_.html' class='spip_in'>Baroug</a>, était essentiellement une feuille de style pour la « dist » de <span class="caps">SPIP</span>. Je viens de le transformer en un thème pour Zpip, le nouveau squelette proposé par <a href="http://www.spip-contrib.net/Cedric-Morin" class='spip_out' rel='external'>Cédric</a> et <a href="http://www.spip-contrib.net/Matthieu-Marcillaud" class='spip_out' rel='external'>Marcimat</a> pour remplacer la <a href="http://www.spip-blog.net/La-dist-de-SPIP.html" class='spip_out' rel='external'>« dist »</a>.</p> <p>Qu'est-ce que ça change ? On avait déjà pris l'habitude de séparer, dans une même page Web, la structure de la page (son arbre <span class="caps">HTML</span>) de sa présentation (sa <span class="caps">CSS</span>). Zpip ajoute un étage à cette fusée en séparant la structure de la page (son « layout »), de sa fonctionnalité.</p> <p>Ainsi par exemple, une « page article » a pour fonctionnalité d'« afficher un article ». Avec Zpip, elle ne fait que cela. Le « layout » (quel terme affreux) se chargeant de préciser où doit aller cette fonctionnalité dans l'arbre <span class="caps">HTML</span>.</p> <p>La différence n'est pas censée être visible dans le rendu, qui reste, dans le cas de ce site, le même au pixel près. Mais dans la manière dont le code est composé.</p> <p>Observons la page avec toutes ses inclusions, en ajoutant <code class='spip_code' dir='ltr'>?var_mode=inclure</code> dans l'adresse.</p> <p>Avec Zpip le sommaire ressemble à ceci :</p> <dl class='spip_document_21 spip_documents spip_documents_center'> <dt><a href='http://zzz.rezo.net/IMG/png/Capture_d_ecran_2009-11-13_a_23-43-19.png' class="spip_in" title='PNG - 117 ko' type="image/png"><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH480/Capture_d_ecran_2009-11-13_a_23-43-19-b3da2.png' width='500' height='480' alt='PNG - 117 ko' style='height:480px;width:500px;' /></a></dt> <dt class='crayon document-titre-21 spip_doc_titre' style='width:350px;'><strong>Les inclusions de Zpip</strong></dt> </dl> <p>Avec l'ancien squelette (dist), il ressemblait à cela :</p> <dl class='spip_document_22 spip_documents spip_documents_center'> <dt><a href='http://zzz.rezo.net/IMG/png/Capture_d_ecran_2009-11-14_a_00-03-58.png' class="spip_in" title='PNG - 134.7 ko' type="image/png"><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH516/Capture_d_ecran_2009-11-14_a_00-03-58-d32c5.png' width='500' height='516' alt='PNG - 134.7 ko' style='height:516px;width:500px;' /></a></dt> <dt class='crayon document-titre-22 spip_doc_titre' style='width:350px;'><strong>Les inclusions de la dist</strong></dt> </dl> <p>Quoi de neuf, au final ? Rien. Sauf que désormais pour ajouter un nouveau type de page, il suffit de se concentrer sur sa fonctionnalité (son « applicatif »), et l'on est sûr qu'il s'intégrera sans aucune adaptation à tous les layouts de Zpip.</p> <p>Ce qui permet donc de développer cet applicatif indépendamment de toute considération de présentation. On pourra alors plus facilement partager un même développement d'un site à l'autre ; et on n'a plus le souci de mettre à jour 50 squelettes le jour où l'on décide de modifier la structure du site.</p> <p>Dernier bonus, et non des moindres : il devient très facile de prendre un gabarit (<span class="caps">HTML</span>) et une décoration (<span class="caps">CSS</span>) existants — il en existe des milliers sur le net —, et de les appliquer à son site sans devoir encoder chaque applicatif (la page sommaire, la page article, la page rubrique, la page de login, etc.). Zpip est livré d'ailleurs avec un gestionnaire de thèmes, nommé <a href="http://www.spip-contrib.net/SPIP-Zen-Garden" class='spip_out' rel='external'>Zen Garden</a>, qui permet de visualiser instantanément son site sous différentes peaux.</p> <dl class='spip_document_23 spip_documents'> <dt><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH446/Capture_d_ecran_2009-11-14_a_00-06-20-2bf7e.png' width='500' height='446' alt='PNG - 181.3 ko' style='height:446px;width:500px;' /></dt> <dt class='crayon document-titre-23 spip_doc_titre' style='width:350px;'><strong>Le thème BluePigment</strong></dt> <dd class='crayon document-descriptif-23 spip_doc_descriptif' style='width:350px;'>design de styleshout, adapté pour Zpip par Cédric </dd> </dl> <p> </p> <dl class='spip_document_24 spip_documents'> <dt><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH404/Capture_d_ecran_2009-11-14_a_00-07-19-61199.png' width='500' height='404' alt='PNG - 126.2 ko' style='height:404px;width:500px;' /></dt> <dt class='crayon document-titre-24 spip_doc_titre' style='width:350px;'><strong>Le thème Keep It Simple</strong></dt> <dd class='crayon document-descriptif-24 spip_doc_descriptif' style='width:350px;'>design de styleshout, adapté pour Zpip par Cédric </dd> </dl> <p> </p> <dl class='spip_document_25 spip_documents'> <dt><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH498/Capture_d_ecran_2009-11-14_a_00-06-50-8174c.png' width='500' height='498' alt='PNG - 243.8 ko' style='height:498px;width:500px;' /></dt> <dt class='crayon document-titre-25 spip_doc_titre' style='width:350px;'><strong>Le thème FreshMedia</strong></dt> <dd class='crayon document-descriptif-25 spip_doc_descriptif' style='width:350px;'>design de styleshout, adapté pour Zpip par Cédric </dd> </dl></div> Tests A/B http://zzz.rezo.net/Tests-A-B.html http://zzz.rezo.net/Tests-A-B.html 2009-10-27T08:52:42Z text/html fr Fil Interfaces <p>Les tests A/B (aussi appelés split tests) sont une méthode d'aide à la mise au point d'une interface (par exemple, pour un site Internet) en comparant les usages réels. Voici un plugin SPIP destiné à ces tests. Le principe des tests A/B est simple : on scinde les visiteurs en deux cohortes (d'où le nom A/B), et on leur donne à voir des pages différentes. On suit alors le parcours des deux cohortes, et on regarde laquelle des deux donne le meilleur résultat par rapport à un objectif donné. Pour (...)</p> - <a href="http://zzz.rezo.net/-SPIP-.html" rel="directory">SPIP</a> / <a href="http://zzz.rezo.net/+-Interfaces-+.html" rel="tag">Interfaces</a> <div class='rss_chapo'><p>Les tests A/B (aussi appelés split tests) sont une méthode d'aide à la mise au point d'une interface (par exemple, pour un site Internet) en comparant les usages réels. Voici un plugin <span class="caps">SPIP</span> destiné à ces tests.</p></div> <div class='rss_texte'><p>Le principe des tests A/B est simple : on scinde les visiteurs en deux cohortes (d'où le nom A/B), et on leur donne à voir des pages différentes. On suit alors le parcours des deux cohortes, et on regarde laquelle des deux donne le meilleur résultat par rapport à un objectif donné.</p> <blockquote class="spip"> <p>Pour télécharger le plugin, il faut utiliser <span class="caps">SVN</span> et lancer la commande<br class='autobr' /> <code class='spip_code' dir='ltr'>svn co svn://zone.spip.org/spip-zone/_plugins_/ab_testing/</code></p> </blockquote> <p>Ce plugin <span class="caps">SPIP</span> permet de définir deux dossiers de squelettes <span class="caps">AB0</span>/ et <span class="caps">AB1</span>/, qui seront affectés respectivement à la cohorte 0 et à la cohorte 1. Il monitore alors le parcours de ces deux cohortes sur une liste d'URLs, et permet de déduire le « taux de conversion » qu'apporte chaque squelette.</p> <p>Par exemple, supposons que l'on souhaite placer sur la page d'accueil (<span class="caps">URL</span> = /) un bouton « Inscrivez-vous », mais qu'on hésite à mettre ce bouton en lien texte, ou en image. On va créer le test A/B de la façon suivante :</p> <p>1. Dans <code class='spip_code' dir='ltr'>sommaire.html</code>, ajouter :<br class='manualbr' /><code class='spip_code' dir='ltr'>#INCLUDE{fond=bouton-inscrivez}</code></p> <p>2. Dans <code class='spip_code' dir='ltr'>AB0/bouton-inscrivez.html</code>, on indique :<br class='manualbr' /><code class='spip_code' dir='ltr'><a href="/Inscrivez-vous.html"><img src="images/inscrivez.png" /></a></code></p> <p>3. Dans <code class='spip_code' dir='ltr'>AB1/bouton-inscrivez.html</code>, on indique :<br class='manualbr' /><code class='spip_code' dir='ltr'><a href="/Inscrivez-vous.html">Inscrivez-vous</a></code></p> <p>4. Dans le <span class="caps">CFG</span> du plugin A/B testing, indiquer qu'on veut monitorer les deux URLs :</p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'>/ /Inscrivez-vous.html</textarea></div></form> <p>Désormais la cohorte 0 voit l'image (squelettes <span class="caps">AB0</span>/), et la cohorte 1 voit le lien texte (squelettes <span class="caps">AB1</span>/).</p> <p>Ensuite, on attend... jusqu'à observer au minimum quelques centaines de visites.</p> <p>Après quelque temps, la page exec=ab_testing affiche alors :</p> <p><strong>Cohorte 0</strong></p> <table class="spip"> <thead><tr class='row_first'><th id='id90d3_c0'><span class="caps">URI</span></th> <th id='id90d3_c1'>hits</th> <th id='id90d3_c2'>%</th> </tr> </thead> <tbody> <tr class='row_odd odd'> <td headers='id90d3_c0'>/</td> <td class='numeric ' headers='id90d3_c1'>1489</td> <td headers='id90d3_c2'>100%</td> </tr> <tr class='row_even even'> <td headers='id90d3_c0'>/Inscrivez-vous.html</td> <td class='numeric ' headers='id90d3_c1'>32</td> <td headers='id90d3_c2'>2.1%</td> </tr> </tbody> </table> <p><strong>Cohorte 1</strong></p> <table class="spip"> <thead><tr class='row_first'><th id='id4c51_c0'><span class="caps">URI</span></th> <th id='id4c51_c1'>hits</th> <th id='id4c51_c2'>%</th> </tr> </thead> <tbody> <tr class='row_odd odd'> <td headers='id4c51_c0'>/</td> <td class='numeric ' headers='id4c51_c1'>1067</td> <td headers='id4c51_c2'>100%</td> </tr> <tr class='row_even even'> <td headers='id4c51_c0'>/Inscrivez-vous.html</td> <td class='numeric ' headers='id4c51_c1'>45</td> <td headers='id4c51_c2'>4.2%</td> </tr> </tbody> </table> <p>Si l'on regarde le total, on voit que sur 1489+1067=2556 visiteurs de la page d'accueil, 45+32=77 sont allés sur la page d'inscription. Soit un ratio de 3%. Mais ceux de la cohorte 0 ont un ratio de 32/1489 = 2,1%, tandis que ceux de la cohorte 1 ont un ratio de 45/1067 = 4,2%.</p> <p>On en déduit donc que le lien texte (présenté à la cohorte 1) est deux fois plus affordant au clic que l'image (présentée à la cohorte 0). On peut alors décider de mettre le lien texte pour tous... ou encore d'embaucher un graphiste pour améliorer l'image.</p> <h3 class='h3 spip'> Spécificités du plugin </h3> <p>Ce plugin ne pose pas de cookie au visiteur : cela permet de faire notre test de manière totalement non intrusive. Les cohortes sont séparées par leur <span class="caps">IP</span>, avec une méthode d'affectation (très basique) de la cohorte en fonction de l'<span class="caps">IP</span> du visiteur, qui produit des cohortes de taille équivalente.</p> <p>On peut faire du A/B/Z testing en augmentant le nombre de cohortes, fixé par la configuration (par défaut, n=2).</p> <p>Le cache est multiplié par le nombre de cohortes.</p> <p>On peut tester une variante d'un squelette présent dans un plugin, en plaçant une seule variante dans <span class="caps">AB1</span>/ (<span class="caps">AB0</span>/ restant vide).</p> <p>Cependant pour des raisons techniques, il est impossible de tester ainsi une variante d'un squelette se trouvant déjà dans le dossier squelettes/ : pour le tester, il faut le recopier dans <span class="caps">AB0</span>/ et <span class="caps">AB1</span>/, et le supprimer temporairement de squelettes/. Ne pas oublier de le remettre avant de désactiver le plugin.</p> <p>En cas de doute, vérifier avec le débugueur de <span class="caps">SPIP</span> si les squelettes testés sont bien pris dans les répertoires ABx/</p> <h3 class='h3 spip'> Limitations et extensions possibles </h3> <p>Actuellement le découpage des visiteurs se fait en deux cohortes de tailles à peu près égales. Si l'on souhaite mener un test sur seulement 10% des visiteurs, il faut adapter un peu la ligne :<br class='autobr' /> _ <code class='spip_code' dir='ltr'>$ab = intval($ab)%intval($n);</code></p> <p>Dans notre exemple, le système ne vérifie pas que le visiteur est passé par la page d'accueil avant d'aller sur la page Inscrivez-vous.html ; la page d'accueil sert en fait plus de variable de contrôle — pour savoir si les numéros <span class="caps">IP</span> sont bien répartis dans les cohortes — que de base pour le <span class="caps">CTR</span> 100%. (Il est possible de changer cela, en posant un cookie au visiteur, au risque toutefois d'alourdir le processus.)</p></div>