<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.nikrou.net/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>Le Journal de Nikrou</title>
  <link>http://www.nikrou.net/</link>
  <atom:link href="http://www.nikrou.net/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Sun, 05 May 2013 14:52:41 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Comment faire des tests fonctionnels ?</title>
    <link>http://www.nikrou.net/post/2013/04/09/Comment-faire-des-tests-fonctionnels</link>
    <guid isPermaLink="false">urn:md5:34eca4f3388d99c916da9d3902305bd9</guid>
    <pubDate>Tue, 09 Apr 2013 16:42:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>behat</category><category>phyxo</category><category>piwigo</category><category>postgresql</category><category>tests</category>    
    <description>&lt;p&gt;Développer une application web de manière itérative sur de longues années et en gardant une compatibilité ascendante maximum n'est pas chose aisée sans faire de régression. Je me demandais déjà il y a quelques années &lt;a href=&quot;http://www.nikrou.net/post/2006/06/07/101-comment-ne-pas-faire-de-regressions-fonctionnelles&quot;&gt;comment ne pas faire de régressions fonctionnelles&lt;/a&gt;. Sans forcément faire du développement piloté par les tests (ce qui me semble pourtant toujours aussi intéressant), le choix d'un outil n'est pas chose aisé.&lt;/p&gt;    &lt;p&gt;Pendant longtemps, j'ai utilisé &lt;a href=&quot;http://symfony.com/legacy&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;symfony&lt;/a&gt; (dans sa première mouture) qui venait avec ses outils &quot;maison&quot; permettant de faire des tests unitaires mais aussi des tests fonctionnels, en simulant notamment un navigateur. C'était très bien. Je suis depuis passé à la version 2 et il n'y a pas d'équivalent. De plus les tests de symfony sont fait avec &lt;a href=&quot;http://www.phpunit.de/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;PHPUnit&lt;/a&gt; et je n'ai jamais réussi à me faire à ce framework et je ne m'y fais toujours pas.&lt;/p&gt;
&lt;p&gt;Je n'ai pas trouvé d'équivalent à &lt;a href=&quot;http://simpletest.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;simpletest&lt;/a&gt; (un peu vieillisant pour rester gentil) ou &lt;a href=&quot;http://www.symfony-project.org/api/1_4/sfBrowser&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;sfBrowser&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;J'ai ce besoin aussi bien pour des développements nouveaux mais aussi pour faire évoluer des applications où aucun test n'a été écrit. L'idée est d'alors de tester l'application de l'extérieur, en boîte noire. En cherchant à droite à gauche, je me suis finalement décidé à utiliser &lt;a href=&quot;http://www.behat.org/&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;Behat&lt;/a&gt;, même si ce n'est pas forcément sa vocation première. Behat est un framework permettant de faire du développement piloté par le comportement - &lt;a href=&quot;http://fr.wikipedia.org/wiki/Behavior_Driven_Development&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;BDD&lt;/a&gt;. Dit autrement, on écrit des tests correspondant aux fonctionnalités de l'application. Le gros avantage de Behat est que les tests sont écrits en langage naturel. Cela ressemble à ça :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-yaml&quot;&gt;
Fonctionnalité: Avoir un compte bancaire
   Afin d'offrir aux utilisateurs la possibilité d'avoir un compte bancaire
   Etant donné que je suis inscrit
   Je dois être capable d'ajouter ou de retirer de l'argent sur mon compte
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;J'ai bien sûr une idée derrière la tête en expliquant tout cela. Depuis quelques semaines, j'essaie tant bien que mal de couvrir le périmètre fonctionnel de &lt;a href=&quot;http://piwigo.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;piwigo&lt;/a&gt;. L'idée est de pouvoir ensuite faire revivre le support de PostgreSQL. Oui oui quand j'ai une idée... Les quelques tests que j'ai écrit sont déjà disponibles : &lt;a href=&quot;https://github.com/nikrou/phyxo&quot;&gt;mon dépôt github&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.nikrou.net/post/2013/04/09/Comment-faire-des-tests-fonctionnels#comment-form</comments>
      <wfw:comment>http://www.nikrou.net/post/2013/04/09/Comment-faire-des-tests-fonctionnels#comment-form</wfw:comment>
      <wfw:commentRss>http://www.nikrou.net/feed/atom/comments/257</wfw:commentRss>
      </item>
    
  <item>
    <title>Filtrer efficacement le spam</title>
    <link>http://www.nikrou.net/post/2013/01/20/Filtrer-efficacement-le-spam</link>
    <guid isPermaLink="false">urn:md5:d57ca74eb1deea4d74228daf31cd1cdc</guid>
    <pubDate>Sun, 20 Jan 2013 19:47:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Général</category>
        <category>dotclear</category><category>plugin</category><category>spam</category>    
    <description>    &lt;p&gt;Pendant des années, je me suis contenté de filtrer le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Spam&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;spam&lt;/a&gt;&amp;nbsp;avec les filtres natifs de dotclear : listes blanches, listes noires, filtre par IP (bloquées par blog ou globalement). J'ai même essayé &lt;a href=&quot;http://akismet.com/&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;akismet&lt;/a&gt;&amp;nbsp;pendant un moment mais je n'en étais pas complètement satisfait et je n'aimais pas dépendre d'un service externe. On peut aussi en interdisant certains mots.&lt;/p&gt;
&lt;p&gt;Tous ces filtres ont leur limite. Depuis quelques semaines et notamment sur &lt;a href=&quot;http://www.nikrou.net/post/2012/12/23/Mettre-%C3%A0-jour-deux-zones-avec-une-seule-requ%C3%AAte-ajax&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;le billet précédent&lt;/a&gt;&amp;nbsp;j'ai été spammé très régulièrement. J'ai décidé de sortir &lt;a href=&quot;http://plugins.dotaddict.org/dc2/details/spamplemousse2&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;l'artillerie lourde&lt;/a&gt;. En fait même pas. Le plugin Spamplemouse qui s'installe très simplement via l'installeur DotAddict. Spamplemouse est plugin de dotclear qui utilise un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Filtrage_bay%C3%A9sien_du_spam&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;filtrage bayésien&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour utiliser Spamplemouse, il suffit d'aller dans Extension &amp;gt; Antispam puis d'éditer la configuration pour que le système apprenne à partir des anciens messages. Ne supprimer pas vos spams. Le système s'enrichie aussi bien des messages légitimes que des spams. Depuis plus aucun spam ...&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.nikrou.net/post/2013/01/20/Filtrer-efficacement-le-spam#comment-form</comments>
      <wfw:comment>http://www.nikrou.net/post/2013/01/20/Filtrer-efficacement-le-spam#comment-form</wfw:comment>
      <wfw:commentRss>http://www.nikrou.net/feed/atom/comments/256</wfw:commentRss>
      </item>
    
  <item>
    <title>Mettre à jour deux zones avec une seule requête ajax</title>
    <link>http://www.nikrou.net/post/2012/12/23/Mettre-%C3%A0-jour-deux-zones-avec-une-seule-requ%C3%AAte-ajax</link>
    <guid isPermaLink="false">urn:md5:36db649069545cb59bf06b4542d15a28</guid>
    <pubDate>Sun, 23 Dec 2012 15:21:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>ajax</category><category>jquery</category><category>php</category>    
    <description>&lt;p&gt;Il est aisé avec &lt;a href=&quot;http://jquery.com/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;jQuery&lt;/a&gt; (par exemple) de faire une requête ajax pour mettre à jour une portion de la page dynamiquement. On peut vouloir mettre à jour deux zones de la page. C'est facile en faisant deux requêtes. Faire cela en ne faisant qu'une seule requête n'est pas beaucoup plus complexe.&lt;/p&gt;    &lt;p&gt;Imaginons &lt;a href=&quot;http://www.nikrou.net/article255/index.html&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;la page suivante&lt;/a&gt; avec deux &lt;strong&gt;div&lt;/strong&gt; ayant les identifiants &lt;strong&gt;div1&lt;/strong&gt; et &lt;strong&gt;div2&lt;/strong&gt;. La page contient aussi un lien avec un identifiant &lt;strong&gt;update&lt;/strong&gt; qui déclenchera la mise à jour. On souhaite ajouter du contenu dans les deux div. Le contenu à ajouter dans le div#div1 proviendra du div ayant la classe div1 dans la page &lt;a href=&quot;http://www.nikrou.net/article255/ajax.html&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;ajax.html&lt;/a&gt;&amp;nbsp;et le contenu à ajouter dans le div#div2 proviendra du div ayant la classe div2 dans la même page.&lt;/p&gt;
&lt;p&gt;Si on voulait insérer tout le contenu de la page ajax.html dans le div#div1, le code javascript correspondant ressemblerait à ça :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-js&quot;&gt;
$(function() {
   $('#update').click(function(e) {
      e.preventDefault();
      $.get($(this).attr('href'), function(data) {
            $(data).appendTo('#div1');
      });
   });
});
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Pour mettre à jour deux zones, il suffit d'utiliser la fonction &lt;a href=&quot;http://api.jquery.com/filter/&quot; rel=&quot;external&quot; hreflang=&quot;en&quot;&gt;filter&lt;/a&gt; sur le contenu récupéré :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-js&quot;&gt;
$(function() {
   $('#update').click(function(e) {
      e.preventDefault();
      $.get($(this).attr('href'), function(data) {
         $(data).filter('.div1').appendTo('#div1');
         $(data).filter('.div2').appendTo('#div2');
      });
   });
});
&lt;/code&gt;
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Et hop dotclear en version 2.4.0 dans debian</title>
    <link>http://www.nikrou.net/post/2011/12/04/Et-hop-dotclear-en-version-2.4.0-dans-debian</link>
    <guid isPermaLink="false">urn:md5:c2e578565ba4d774a0ead558a37bf9c8</guid>
    <pubDate>Sun, 04 Dec 2011 13:54:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>debian</category><category>dotclear</category>    
    <description>    &lt;p&gt;La version &lt;a href=&quot;http://fr.dotclear.org/blog/post/2011/11/13/Dotclear-2.4&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;2.4.0 de dotclear est sortie le 13 novembre&lt;/a&gt;&amp;nbsp;avec son lot de nouveauté. Elle est depuis aujourd'hui disponible dans &lt;a href=&quot;http://www.debian.org/&quot; rel=&quot;external&quot;&gt;debian&lt;/a&gt;, pour le moment uniquement dans le dépôt unstable.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Zooplus - un simulacre de commerçant</title>
    <link>http://www.nikrou.net/post/2011/11/01/Zooplus-un-simulacre-de-commer%C3%A7ant</link>
    <guid isPermaLink="false">urn:md5:9c8203ff3835b1832cffda07477564df</guid>
    <pubDate>Tue, 01 Nov 2011 12:03:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Général</category>
        <category>arnaque</category><category>commerce</category><category>contact</category><category>internet</category>    
    <description>&lt;p&gt;Le 25 septembre dernier, j'ai commandé chez &lt;a href=&quot;http://www.zooplus.fr/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;zooplus&lt;/a&gt;&amp;nbsp;un filtre d'aquarium. J'ai choisi cette entreprise qui essaie de faire du commerce car le prix était intéressant et il n'y avait pas de frais de port. Cela semblait intéressant et je ne me suis pas méfié. J'aurai dû. C'était trop beau pour être vrai...&lt;/p&gt;    &lt;p&gt;J'ai commandé le dimanche25 &amp;nbsp;et le mardi 27 septembre, je m'aperçois sur mon suivi de livraison que mon colis est sensé avoir été livré mais il n'a pas été remis en main propre. Toute la journée il y avait quelqu'un chez moi. Le livreur a ouvert mon portail et a déposé le colis à côté de la boîtes aux lettres. Il n'a pas pris la peine de venir frapper à la porte de chez moi (moins de 20 mètres). Je signale les faits à zooplus qui me propose une remise sur une prochaine commande.&lt;/p&gt;
&lt;p&gt;Cette livraison me donne déjà une très mauvaise image de la société. J'hésite à renvoyer le colis sans autre forme de procès. J'aurai dû !&lt;/p&gt;
&lt;p&gt;Le samedi suivant, le 1er octobre, j'ouvre le colis et je me prépare pour mettre en place le filtre. En commençant à nettoyer les différentes pièces, je m'aperçois qu'il me manque une pièce : il me manque la canne d'aspiration (un tuyau courbé qui amène l'eau viciée jusqu'à la pompe). Du coup j'arrête tout et j'envoie un nouveau mail à la société. Et à partir de là commence la galère.&lt;/p&gt;
&lt;p&gt;Sans réponse j'envoie un nouveau mail le lundi 3 octobre, puis un autre le mardi 4 octobre et enfin un dernier le vendredi 7 octobre. Lorsqu'on était dans les 7 jours du délais de rétractation je n'avais aucun problème pour avoir des réponses. Passé ce délais plus aucune réponse.&lt;/p&gt;
&lt;p&gt;Je tente ma dernière chance en postant un message sur le forum du site &lt;a href=&quot;http://www.lesarnaques.com/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;les arnaques&lt;/a&gt;, une formidable association qui a pour objectif principal la médiation entre les particuliers et les commerçants dans les litiges qui les opposent lors de ventes par correspondance par exemple. Je poste un message sur le forum le 11 octobre et dès le lendemain j'ai un message d'un représentant de la société plein de mauvaise foi mais qui me dit que la pièce manquante va être commandée auprès de son fournisseur et que je serai livré ensuite. Il me dit que cela peut prendre un peu de temps !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pour justifier le fait qu'il ne répondait pas aux mails que je leur ai envoyé il dit que &quot;&amp;nbsp;comme vous aviez demandé fin septembre de ne plus faire partie de notre base de données, votre adresse email avait été désactivée. Vous n'avez donc pas reçu nos réponses&quot;. Ils sont forts, très forts. Je demande à ne plus faire partie de leur base client et cela désactive mon adresse email. Dans les messages que j'ai envoyé je précisais mon nom, mon numéro de client, et mon numéro de commande. Il essaie de me faire croire qu'ils ont tout supprimé de leur base ! Il y en a qui doute de rien. En attendant de recevoir ma pièce, je fais quand même profil bas.&lt;/p&gt;
&lt;p&gt;Le 25 octobre, soit un mois après ma commande je n'ai toujours pas la pièce manquante. Je pose un nouveau message sur le forum, les arnaques. La société répond un quart d'heure plus tard avec le même refrain que le 12 octobre : &quot;la pièce a été commandée et je la recevrais dès que possible. Cela peut prendre un peu de temps.&quot; Je réponds à ce message en demandant plus de précisions et bizarrement la pièce est arrivée et a été tout de suite envoyée par la poste vers mon domicile. Je l'ai finalement reçue le&amp;nbsp;&amp;nbsp;vendredi 28 octobre.&lt;/p&gt;
&lt;p&gt;Encore une société qui essaie de faire du commerce. Encore un commerçant qui n'en a que le nom. Le temps des sociétés de vente par correspondance qui se permettaient de pouvoir prendre le client de haut est révolu. Avec le formidable essor d'internet, l'image d'une société peut être ternie avec quelques clients.&lt;/p&gt;
Si quelqu'un de la société &lt;a href=&quot;http://www.zooplus.fr/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;zooplus&lt;/a&gt;&amp;nbsp;passe sur ce blog et lit ce billet, je suis prêt à régler ce différend&amp;nbsp;rapidement et à l'amiable. Ce n'est pas grave de me perdre comme client. Vous pensez peut-être même que c'est une bonne chose, mais le bouche à oreille fonctionne vraiment très bien sur le web ! A bon entendeur.</description>
    
    
    
      </item>
    
  <item>
    <title>Apprendre à faire des macarons</title>
    <link>http://www.nikrou.net/post/2011/10/27/Apprendre-%C3%A0-faire-des-macarons</link>
    <guid isPermaLink="false">urn:md5:ddc9ffd4232403a2610c6f17eb395835</guid>
    <pubDate>Thu, 27 Oct 2011 13:16:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Cuisine</category>
        <category>cuisine</category><category>macaron</category>    
    <description>    &lt;p&gt;Mardi dernier, en fin de journée je suis allé à un cours de cuisine pour apprendre à faire des macarons. Audrey nous a accueilli dans son &lt;a href=&quot;http://atelierdesgateaux.blogspot.com/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;atelier des gâteaux&lt;/a&gt;&amp;nbsp;dans une ambiance ludique et chaleureuse. Tout a été fait pour que l'on passe un bon moment, tout en apprenant à faire des macarons. Je dois avouer que j'en suis sorti enchanté.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nous avons goûté les merveilles que nous avons réalisées, accompagnées d'une coupe de champagne comme il se doit. C'était légèrement décevant car les macarons n'étaient pas moelleux mais comme c'étaient les nôtres nous les avons aimés quand même ! Je les ai goûté de nouveau après 24h et ils étaient excellents et je les ai terminés ce midi et c'était une fois de plus divin. Il va rapidement falloir que je fasse les miens sans l'aide d'Audrey cette fois !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Abstraction de base de données</title>
    <link>http://www.nikrou.net/post/2011/09/13/Abstraction-de-base-de-donn%C3%A9es</link>
    <guid isPermaLink="false">urn:md5:ad02ed58c32dc51da0322baab5813641</guid>
    <pubDate>Tue, 13 Sep 2011 23:14:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>doctrine</category><category>optimisation</category><category>php</category><category>sql</category>    
    <description>&lt;p&gt;Certains n'ont toujours pas compris l'intérêt de faire une abstraction de base de données. Non seulement cela rend l'ensemble du projet compatible avec plusieurs moteurs de base de données mais cela peut aussi simplifier la vie du développeur.&lt;/p&gt;
&lt;p&gt;Voici un petit exemple pour en comprendre un petit peu mieux l'intérêt ...&lt;/p&gt;    &lt;p&gt;Imaginons une table d'une base de données où on stockerait la configuration d'une application. Cette table pourrait avoir la structure suivante :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-sql&quot;&gt;
create table config (
   param varchar(255) not null default '',
   value text
   comment varchar(255) defautl null
)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Pour mettre à jour, une clé de configuration de cette table il faut vérifier si la clé existe ou non pour créer ou mettre à jour l'enregistrement dans la base. Avec MySQL, on peut résoudre ce problème en utilisant la commande &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/replace.html&quot; rel=&quot;external&quot;&gt;REPLACE&lt;/a&gt; mais cette commande n'est pas dans le standard SQL. Donc si on veut que cette requête fonctionne avec des moteurs de base de données plus proche du standard, on est obligé de faire deux requête : une pour tester l'existence et une autre pour mettre à jour ou insérer.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Plutôt que d'avoir un code comme le suivant :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-php&quot;&gt;
&lt;?php
$query = '
SELECT
param,
value
FROM '.CONFIG_TABLE.'
WHERE param =&quot; &quot;&quot;\&quot;''.$param.'\'
;';
$params = array_from_query($query, 'param');
if (count($params) == 0)
{
   $query = '
INSERT
INTO '.CONFIG_TABLE.'
(param, value)
VALUES(\''.$param.'\', \''.$value.'\')
;';
   pwg_query($query);
}
else
{
   $query = '
UPDATE '.CONFIG_TABLE.'
SET value =&quot; &quot;&quot;\&quot;''.$value.'\'
WHERE param =&quot; &quot;&quot;\&quot;''.$param.'\'
;';
   pwg_query($query);
}
&lt;/code--&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;code class=&quot;pygments language-php&quot;&gt;
&lt;p&gt;En utilisant &lt;a href=&quot;http://www.doctrine-project.org/&quot; rel=&quot;external&quot;&gt;Doctrine&lt;/a&gt; (par exemple)l suffit d'écrire quelque chose comme : &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-php&quot;&gt;
&lt;?php
$conf = new Conf();
$conf-&gt;param = $param;
$conf-&gt;value = $value;
$conf-&gt;save();
&lt;/code--&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Faire un fork de piwigo ?</title>
    <link>http://www.nikrou.net/post/2011/09/09/Faire-un-fork-de-piwigo</link>
    <guid isPermaLink="false">urn:md5:cc20e98797b477eb59b7fec3018783df</guid>
    <pubDate>Fri, 09 Sep 2011 20:48:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>debian</category><category>développement</category><category>fork</category><category>logiciel libre</category><category>piwigo</category>    
    <description>&lt;p&gt;Un énorme avantage d'un logiciel libre est que sa licence permet le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Fork_(d%C3%A9veloppement_logiciel)&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;fork&lt;/a&gt;. Mais est-ce une bonne idée de faire un fork ?&lt;/p&gt;    &lt;p&gt;Pendant plusieurs années j'ai contribué à &lt;a href=&quot;http://piwigo.org/&quot; rel=&quot;external&quot;&gt;Piwigo&lt;/a&gt;. Pour diverses raisons, je me suis un peu éloigné de l'équipe. Je maintiens tout de même le &lt;a href=&quot;http://packages.qa.debian.org/p/piwigo.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;package debian de piwigo&lt;/a&gt;, ainsi que celui de &lt;a href=&quot;http://packages.qa.debian.org/p/ploader.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;pLoader&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je continue à faire évoluer piwigo dans mon coin, soit par l'intermédiaire de plugins, soit par des modifications dans le code. Personne n'en profite mis à part ma galerie photos personnelle ! Une évolution de piwigo qui me tenait particulièrement à cœur était la gestion multi-bases. On pouvait au choix utiliser &lt;a href=&quot;http://www.mysql.com&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;MySQL&lt;/a&gt;, &lt;a href=&quot;http://www.postgresql.org/&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;PostgreSQL&lt;/a&gt;&amp;nbsp;ou &lt;a href=&quot;http://www.sqlite.org/&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;SQLite&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Les changements ne sont pas encore dans une version publique mais déjà quelques commits (&lt;a href=&quot;http://piwigo.org/dev/changeset/12103&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;Juste MySQL à l'installation&lt;/a&gt;, &lt;a href=&quot;http://piwigo.org/dev/changeset/12118&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;Optimisation pour MySQL&lt;/a&gt;, ...) &amp;nbsp;dans le &lt;a href=&quot;http://piwigo.org/dev/browser&quot; rel=&quot;external&quot;&gt;gestionnaire de version&lt;/a&gt; montrent clairement que le changement est programmé. La prochaine version de piwigo ne fonctionnera plus qu'avec MySQL.&lt;/p&gt;
&lt;p&gt;Le fait de rendre piwigo compatible avec plusieurs bases de données n'a pas nécessairement était fait dans les règles de l'art. Il aurait été plus simple d'utiliser une abstraction de base de données telle que &lt;a href=&quot;http://php.net/manual/fr/book.pdo.php&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;PDO&lt;/a&gt;. Mais quoi qu'il en soit, je pense qu'avoir fait cette pseudo abstraction aurait pu améliorer la partie d'accès aux données. Confronter un logiciel à des environnements différents et hétérogène ne peut que le rendre meilleur.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Depuis que j'ai fait cette abstraction, j'utilise piwigo avec PostgreSQL pour ma galerie photos et je n'ai pas rencontré de problèmes majeurs. Je continuerais à faire évoluer ma galerie dans mon coin. La question que je me pose : est-ce que je rends mes modifications ou évolutions publiques ? En clair, est-ce que je crée un fork de Piwigo ?&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Installer dotclear sur debian</title>
    <link>http://www.nikrou.net/post/2011/09/02/Installer-dotclear-sur-debian</link>
    <guid isPermaLink="false">urn:md5:c175123988a9f2eb2100555353bc7f97</guid>
    <pubDate>Fri, 02 Sep 2011 21:34:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>debian</category><category>linux</category><category>logiciel libre</category>    
    <description>&lt;p&gt;Pour votre blog vous utiliser évidemment &lt;a href=&quot;http://dotclear.org/&quot; hreflang=&quot;fr&quot;&gt;dotclear&lt;/a&gt;, et votre serveur a comme système d'exploitation gnu/linux. Evidemment c'est une &lt;a href=&quot;http://www.nikrou.net/post/2011/09/02/debian&quot;&gt;debian&lt;/a&gt; ! Depuis quelques jours, vous pouvez installer très facilement votre gestionnaire de blog préféré sur votre système préféré...&amp;nbsp;&lt;/p&gt;    &lt;p&gt;En effet, depuis mercredi 2 septembre, le &lt;a href=&quot;http://packages.qa.debian.org/d/dotclear.html&quot;&gt;package debian dotclear&lt;/a&gt; est entré dans les dépôts officiels.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La tâche a été un peu compliquée du fait notamment de fichier swf (flash) qui ne peuvent être généré facilement sur un système debian à partir des sources. En effet, un prérequis (parmi de nombreux autres) est que l'ensemble du contenu d'un package puisse être généré à partir des sources (en général fournies par l'équipe de développement).&lt;/p&gt;
&lt;p&gt;Les autres fichiers posant problème étaient certains fichiers javascript compressés alors qu'ils auraient dû être dans un format plus facilement lisible.&lt;/p&gt;
&lt;p&gt;Quoi qu'il en soit, il est désormais facile d'installer dotclear :&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-bash&quot;&gt;# apt-get install dotclear&lt;/code&gt;&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CPL facile à la maison</title>
    <link>http://www.nikrou.net/post/2011/08/30/CPL-facile-%C3%A0-la-maison</link>
    <guid isPermaLink="false">urn:md5:6cc6a9b51351434cbb4443785eb64f32</guid>
    <pubDate>Tue, 30 Aug 2011 17:15:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Internet</category>
        <category>free</category><category>freebox</category><category>réseau</category>    
    <description>&lt;p&gt;Depuis ce matin, je suis équipé de la &lt;a href=&quot;http://www.free.fr/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;freebox&lt;/a&gt; en version 6. Comme pour la version 5, elle est alimenté par des &lt;a href=&quot;http://www.free.fr/adsl/pages/internet/connexion/freeplugs.html&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;freeplugs&lt;/a&gt;. Ces petits boîtiers gèrent l'alimentation mais ils intègrent aussi le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Courants_porteurs_en_ligne&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;CPL&lt;/a&gt;. J'ai un peu galéré pour mettre en place mon réseau local alors que sur le papier cela semble si simple.&lt;/p&gt;    &lt;p&gt;En fait pour mettre en place un réseau CPL, il faut procéder petit à petit et ajouter les éléments les uns après les autres. Le boîtier serveur et le boîtier multimédia de la nouvelle freebox ont chacun leur freeplug. Il faut les apparier pour qu'ils puissent se &quot;voir&quot;. Pour faire cela il suffit de les brancher sur la même multiprise. Après on appuie 2 secondes sur le bouton de l'un qui se met à clignoter rouge/vert puis on appuie sur le bouton de l'autre. Quand l'appariement est correct les deux boutons passent au vert. Une fois l'appariement fait on peut les débrancher et les brancher où on veut.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://static.nikrou.net/public/freeplug_classic.png&quot; alt=&quot;freeplug_classic.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Les choses se compliquent un peu avec les freeplug classic qui ne fournissent que le CPL et pas l'alimentation. Il faut les connecter au même réseau. Mes deux freeplug classic étaient connectés sur le réseau de mon ancienne freebox. J'avais beau tenter de les apparier un par un avec un freeplug, la synchronisation ne se faisait jamais. En fait, il suffit de le remettre à zéro en appuyant longuement (entre 10 et 15 secondes) sur le bouton. Quand la remise à zéro s'effectue, le bouton s'étteint très brièvement.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Après on prend le boîtier que l'on branche sur la même multiprise que le freeplug du freebox serveur par exemple et on appuie 2 secondes sur le bouton de chaque freeplug (le classic et le &quot;normal&quot;). Au bout d'un certain temps la synchronisation se fait et les deux boutons passent au vert. On recommence la procédure avec tous les boîtier un par un.&amp;nbsp;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Une perle de développeur</title>
    <link>http://www.nikrou.net/post/2011/05/28/Une-perle-de-d%C3%A9veloppeur</link>
    <guid isPermaLink="false">urn:md5:c5a10780a9b2f881d8df580956aa72ff</guid>
    <pubDate>Sat, 28 May 2011 14:18:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>développement</category><category>php</category>    
    <description>&lt;p&gt;&lt;br _moz_editor_blogus_node=&quot;TRUE&quot; _moz_dirty=&quot;&quot; /&gt;&lt;/p&gt;    &lt;p&gt;En lisant le code de certains projets, on apprend souvent de bonnes pratiques, on y trouve de bonnes idées, des modèles de conception,... Mais on peut aussi y trouver une perle. Récemment, j'ai trouvé le bout de code suivant dans un fichier visiblement inclus sur toutes les pages du site :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-php&quot;&gt;
&lt;?php
echo utf8_encode('Une phrase comprenant des accents tels que é ou à ou è');
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas bien &lt;a href=&quot;http://www.php.net&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;PHP&lt;/a&gt;, la fonction &lt;a href=&quot;http://fr2.php.net/utf8_encode&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;utf8_encode&lt;/a&gt; convertit une chaîne de caractères codée en ISO-8859-1 vers UTF-8.&lt;/p&gt;
&lt;p&gt;Quelle bonne idée de faire cette conversion à chaque fois !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Contribuer à un logiciel libre</title>
    <link>http://www.nikrou.net/post/2011/05/13/Contribuer-%C3%A0-un-logiciel-libre</link>
    <guid isPermaLink="false">urn:md5:1afa10b9177a81794b6acb394080677f</guid>
    <pubDate>Fri, 13 May 2011 10:00:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>développement</category><category>gpl</category><category>logiciel libre</category><category>piwigo</category><category>subversion</category>    
    <description>&lt;p&gt;Il y a de nombreuses manières pour contribuer à un logiciel libre. Et contrairement à ce que de nombreuses personnes pourraient penser, il n'y a pas besoin d'être développeur ! Par exemple, utiliser le logiciel et juste signifier qu'on l'utilise est déjà une forme de contribution. Cela le rend plus populaire !&lt;/p&gt;
&lt;p&gt;Il y a bien sûr plein d'autres manières de contribuer...&lt;/p&gt;    &lt;p&gt;On peut, toujours sans être développeur, proposer de traduire le logiciel dans sa langue préférée. On peut rapporter au développeur un bug que l'on a rencontré en lui expliquant comment le reproduire afin de lui permettre de le reproduire et ainsi de le corriger plus facilement. On peut même proposer un patch au développeur qui pourra l'intégrer s'il le souhaite. Certains connaissent bien le principe et &lt;a href=&quot;http://www.nikrou.net/post/2008/04/08/De-lart-de-signaler-un-bug&quot;&gt;rapportent des bugs de manière très constructive&lt;/a&gt;. Cela donne envie de corriger rapidement.&lt;/p&gt;
&lt;p&gt;Je développe pour mon plaisir et sur mon temps libre des plugins pour &lt;a href=&quot;http://fr.piwigo.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;piwigo&lt;/a&gt; ou &lt;a href=&quot;http://dotclear.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;dotclear&lt;/a&gt;. Ces plugins ne sont très certainement pas exempts de bugs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hier, &lt;a href=&quot;http://www.planete-flop.fr&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;flop25&lt;/a&gt; me contacte par mail en me demandant de l'ajouter comme auteur d'un de mes plugins. Il a soit-disant rendu mon plugin &lt;a href=&quot;http://fr.piwigo.org/ext/extension_view.php?eid=307&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;akBookStyle&lt;/a&gt; pour piwigo compatible avec la version 2.2. Il l'a aussi selon ses dires corriger un bug et un peu amélioré. Je ne demande qu'à le croire et je lui demande ce qu'il a amélioré et modifié. Je m'attends à recevoir un patch et une manière de reproduire le bug. Et bien non ! Ayant les permissions nécessaires pour publier dans le gestionnaire de version, flop25 a directement modifié mon plugin. Du grand n'importe quoi.&lt;/p&gt;
&lt;p&gt;Je vais commencer par revenir en arrière sur le commit et si vraiment il y a un bug je le corrigerai. Mais flop25 ne sera certainement pas nommé, ni remercié pour ce rapport de bug. Ce n'est pas une façon de faire.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Un caddy pour piwigo</title>
    <link>http://www.nikrou.net/post/2011/04/09/Un-caddy-pour-piwigo</link>
    <guid isPermaLink="false">urn:md5:8b1c305a864ccd51693eecc6cb6131b1</guid>
    <pubDate>Sat, 09 Apr 2011 20:48:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>commerce</category><category>dotclear</category><category>gpl</category><category>logiciel libre</category><category>php</category><category>piwigo</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.nikrou.net/post/2010/12/04/Faire-une-commande-pour-un-d%C3%A9veloppement&quot;&gt;Il y a quelques semaines&lt;/a&gt;, je me demandais s'il était possible de faire des plugins pour &lt;a href=&quot;http://piwigo.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;piwigo&lt;/a&gt; ou &lt;a href=&quot;http://fr.dotclear.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;dotclear&lt;/a&gt; en se faisant payer. Et bien c'est possible !&lt;/p&gt;    &lt;p&gt;On m'a commandé un plugin de caddy pour piwigo. Et cerise sur le gateau, le plugin sera sous &lt;a href=&quot;http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;licence GPL&lt;/a&gt;. Je suis payé pour faire le développement de ce plugin et tout le monde pourra bénéficier de ce plugin.&lt;/p&gt;
&lt;p&gt;Mais pourquoi choisir cette licence pour celui qui commande ? Cela peut sembler bizarre au premier abord. En effet, il paie pour un plugin et tout le monde pourra le télécharger sans payer, même ses concurrents ! Mais ce n'est pas si simple. En fait, tout le monde l'utilisera, et les utilisateurs pourront remonter des problèmes, ou des bugs (que je corrigerai bien entendu) ou des idées d'amélioration. Tout le monde y gagne.&lt;/p&gt;
&lt;p&gt;Et pour finir, contrairement à une idée répandue, on peut vendre un logiciel sous licence GPL. Le plugin est encore en phase de développement mais une fois livré, je le publierai.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Qu'est-ce qu'un logiciel libre ?</title>
    <link>http://www.nikrou.net/post/2011/03/05/Qu-est-ce-qu-un-logiciel-libre</link>
    <guid isPermaLink="false">urn:md5:f3f240df9857af03287cb1f1d84fe491</guid>
    <pubDate>Sat, 12 Feb 2011 22:33:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Général</category>
        <category>free</category><category>gpl</category><category>logiciel libre</category><category>php</category>    
    <description>&lt;p&gt;Pour reprendre la définition de &lt;a href=&quot;http://fr.wikipedia.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;wikipedia&lt;/a&gt;, un logiciel libre est un logiciel dont l'utilisation, la modification, la duplication (pour le diffuser) sont permises aussi bien légalement que techniquement. Sans rentrer dans les détails d'une licence ou d'une autre, les termes sont parfaitement clairs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ce n'est visiblement pas aussi clair pour tout le monde...&amp;nbsp;&lt;/p&gt;    &lt;p&gt;Par hasard, je suis tombé sur &lt;a href=&quot;http://fr.php-firewall.info/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;PHP Firewall&lt;/a&gt;, une application dont l'intérêt m'échappe mais ce n'est pas le propos. Par curisosité j'ai ouvert l'archive que j'ai téléchargée. J'ai été incapable de trouver quelle était la licence. Le fait de dire que c'est une logiciel libre ne suffit évidemment pas.&lt;/p&gt;
&lt;p&gt;Dans l'archive on ne trouve pas de fichier &lt;strong&gt;COPYING&lt;/strong&gt; ou &lt;strong&gt;LICENSE&lt;/strong&gt;. L'archive contient un fichier &lt;strong&gt;Lisez moi.txt&lt;/strong&gt;&amp;nbsp;qui pourrait contenir l'information. Pas de mention de licence D'autre part, &lt;a href=&quot;http://www.cyril-levert.info/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;M.Cyril Levert&lt;/a&gt; ne connait visiblement pas très bien le logiciel libre. Dans le fichier on trouve la phrase suivante que je trouve choquante :&lt;/p&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;&quot;Vous n'êtes en aucun cas autorisé à renommer ou à redistribuer sans autorisation écrite de ma part.&quot;
&lt;/pre&gt;
&lt;p&gt;Je serais curieux de connaître une telle licence libre qui n'autorise pas la redistribution. C'est justement une des libertés qui définit un logiciel comme libre. Le fait de pouvoir redistribuer un logiciel libre correspond à la liberté 2 d'un logiciel libre :&lt;/p&gt;
&lt;p&gt;Un logiciel est libre selon la Free Software Foundation s'il confère à son utilisateur quatre libertés (numérotées de 0 à 3) :&lt;/p&gt;
&lt;ol start=&quot;0&quot;&gt;
&lt;li&gt;la liberté d'exécuter le programme, pour tous les usages,&lt;/li&gt;
&lt;li&gt;la liberté d'étudier le fonctionnement du programme et de l'adapter à ses besoins,&lt;/li&gt;
&lt;li&gt;la liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies),&lt;/li&gt;
&lt;li&gt;la liberté d'améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L'accès au code source est une condition d'exercice des libertés 1 et 3.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Mettre à jour les traductions d'un module drupal</title>
    <link>http://www.nikrou.net/post/2011/02/10/Mettre-%C3%A0-jour-les-traductions-d-un-module-drupal</link>
    <guid isPermaLink="false">urn:md5:76321fce6cb11b28ce0a1e373c5e7ee5</guid>
    <pubDate>Thu, 10 Feb 2011 13:56:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>PHP</category>
        <category>drupal</category><category>php</category>    
    <description>&lt;p&gt;Lorsqu'on développe un module drupal, les traductions ajoutées au fur et à mesure ne sont pas prises en compte automatiquement. drupal ne prend en compte les traductions d'un module que lors de l'installation de celui-là. En cours de développement cela peut rapidement devenir pénible (pour rester poli !) de devoir installer/déinstaller le module à chaque mise à jour...&lt;/p&gt;    &lt;p&gt;Heureusement il y a une solution pour se faciliter la vie. En fait c'est d'une bêtise insondable : il suffit d'utiliser le &lt;a href=&quot;http://api.drupal.org/api/drupal/update.php/6&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;mécanisme de mise à jour d'un module&lt;/a&gt;. Pour ce faire, dans le fichier &lt;strong&gt;mon_module.install&lt;/strong&gt;, on déclare une fonction &lt;strong&gt;mon_module_update_N&lt;/strong&gt;, où N est incrémenté à chaque nouvelle mise à jour.&lt;/p&gt;
&lt;p&gt;Cette façon de faire est généralement utilisé pour mettre à jour le schéma de la base de données mais on peut aussi l'utiliser pour mettre à jour les traductions de la manière suivante :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-php&quot;&gt;
&lt;?php
function mon_module_update_N() {
   $ret = array();
   if (module_exists('locale')) {
      locale_system_update(array('mon_module'));
      $ret[] = array('success' =&gt; true, 'query' =&gt; 'New translations were imported.');
   }
   
   return $ret;
}
&lt;/code&gt;
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Version 0.6.0 du plugin relatedLinks</title>
    <link>http://www.nikrou.net/post/2010/12/16/Version-0.6.0-du-plugin-relatedLinks</link>
    <guid isPermaLink="false">urn:md5:43d7d559cea6a7089e3763001e84dcf0</guid>
    <pubDate>Thu, 16 Dec 2010 13:46:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>dotclear</category><category>développement</category><category>plugin</category>    
    <description>&lt;p&gt;Je viens de déposer sur &lt;a href=&quot;http://www.dotaddict.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;dotaddict&lt;/a&gt;&amp;nbsp;une nouvelle version (0.6.0) du plugin relatedLinks qui permet de faire des liens de manière automatique et simplifié qui viennent s'ajouter après le contenu d'un billet. Cette nouvelle version permet d'ajouter les liens dans un widget que l'on peut mettre dans la colonne de droite (enfin à droite pour mon thème).&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://static.nikrou.net/public/widget-related-links.png&quot; title=&quot;widget-related-links.png&quot;&gt;&lt;img src=&quot;http://static.nikrou.net/public/.widget-related-links_s.jpg&quot; alt=&quot;widget-related-links.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;La version précédent (&lt;a href=&quot;http://static.nikrou.net/public/plugins/plugin-relatedLinks-0.5.0.zip&quot;&gt;Version 0.5.0&lt;/a&gt;) simplifiait grandement l'ajout du bloc de liens. Avec cette version (&lt;a href=&quot;http://static.nikrou.net/public/plugins/plugin-relatedLinks-0.6.0.zip&quot;&gt;Version 0.6.0&lt;/a&gt;), il suffit d'aller sur la page &quot;Widgets de présentation et de faire glisser le widget à l'endroit voulu.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Une nouvelle version du plugin relatedLinks</title>
    <link>http://www.nikrou.net/post/2010/12/12/Une-nouvelle-version-du-plugin-relatedLinks</link>
    <guid isPermaLink="false">urn:md5:174be6ea514dcb2c835a2b66b681f5a1</guid>
    <pubDate>Sun, 12 Dec 2010 20:03:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>dotclear</category><category>développement</category><category>plugin</category>    
    <description>&lt;p&gt;Je viens juste de publier la version 0.5.0 du &lt;a href=&quot;http://www.nikrou.net/pages/relatedLinks&quot;&gt;plugin&amp;nbsp;relatedLinks&lt;/a&gt; corrige un bug et apporte de nombreuses nouveautés : ajout automatique, activation/désactivation du plugin par blog,...&lt;/p&gt;    &lt;p&gt;La version 0.5.0 du plugin relatedLinks sera bientôt disponible dans &lt;a href=&quot;http://plugins.dotaddict.org/dc2/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;votre crèmerie préférée&lt;/a&gt;. En effet, vous pouvez récupérer le plugin sur &lt;a href=&quot;http://plugins.dotaddict.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;dotaddict&lt;/a&gt;&amp;nbsp;mais si vous avez installé le plugin &lt;a href=&quot;http://plugins.dotaddict.org/dc2/details/daInstaller&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;daInstaller&lt;/a&gt;&amp;nbsp;vous pouvez installer ce plugin très facilement en cliquant tout simplement. D'autre part, si vous avez déjà installé le plugin relatedLinks, vous pourrez le mettre à jour tout aussi facilement.&lt;/p&gt;
&lt;p&gt;Au menu des modifications de cette nouvelle version il y a la correction du bug qui empêchait de supprimer les billets ajoutés dans la liste. La grosse évolution de cette version est la possibilité de mettre en place le contenu généré par le plugin sans modifier le template de son thème. L'astuce est que le plugin utilise le &lt;a href=&quot;http://fr.dotclear.org/documentation/2.0/resources/plugins/behaviors&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;comportement&lt;/a&gt; (behavior) &amp;nbsp;&lt;strong&gt;publicEntryAfterContent&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour rendre plus souple la manière de gérer son thème, le contenu par défaut généré par le plugin est dans un template (&lt;strong&gt;inc_related_links.html&lt;/strong&gt;) que vous pouvez trouvez dans le répertoire default-templates du plugin. L'idée est que si vous souhaitez faire des modifications mineures vous pouvez ne modifier que ce template en le surchargeant dans votre thème.&lt;/p&gt;
&lt;p&gt;Une autre manière de procéder avec le nouveau template fourni par le plugin est d'ajouter une inclusion dans votre template &lt;strong&gt;post.html&lt;/strong&gt;. Le comportement par défaut sera d'inclure le template &lt;strong&gt;inc_related_links.html&lt;/strong&gt; fourni par le plugin. Le code à ajouter dans votre template sera :&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;{{tpl:include src=&quot;http://www.nikrou.net/post/2010/12/12/inc_related_links.html&quot;}}
&lt;/pre&gt;
&lt;p&gt;Comme pour le cas précédent, vous pouvez aussi surchargé le sous-template &lt;strong&gt;inc_related_links.html&lt;/strong&gt; dans votre thème.&lt;/p&gt;
&lt;p&gt;Dans ma todo-list, j'ai noté cela :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;mettre les liens associés dans un widget au lieu de les mettre sous le billet&lt;/li&gt;
&lt;li&gt;pouvoir supprimer (par un bouton) tous les liens d'un billet&lt;/li&gt;
&lt;li&gt;pouvoir choisir le type de billets (post, page, autres)&lt;/li&gt;
&lt;li&gt;pouvoir attacher une liste particulière : par exemple les N derniers billets de la même catégorie, ou les M billets portant tel tag.&lt;/li&gt;
&lt;li&gt;ajouter des classes dans le template par défaut pour différencier les lignes paires ou impaires&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous avez d'autres idées, n'hésitez pas, les commentaires sont ouverts !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Comment faire baisser le taux de rebonds sur son blog ?</title>
    <link>http://www.nikrou.net/post/2010/12/09/Comment-faire-baisser-le-taux-de-rebonds-sur-son-blog</link>
    <guid isPermaLink="false">urn:md5:666f65f1f2df9f54fe75c5594cbecc77</guid>
    <pubDate>Thu, 09 Dec 2010 14:14:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>dotclear</category><category>développement</category><category>plugin</category><category>tags</category>    
    <description>&lt;p&gt;Quand on regarde les statistiques de &lt;a href=&quot;http://www.google.com/analytics/&quot; rel=&quot;external&quot;&gt;google analytics&lt;/a&gt;&amp;nbsp;le taux de rebond est un indicateur de l'intérêt des visiteurs pour le site. Plus il est élevé et moins les visiteurs ont trouvé d'intérêt à la dernière page vue (qui peut d'ailleurs être la première). Il y a de nombreuses façons d'améliorer et faire baisser ce taux...&lt;/p&gt;    &lt;p&gt;Si la page d'accueil de votre site a un fort taux de rebonds c'est certainement parce que les personnes qui arrivent sur votre site ne trouvent pas ce à quoi ils s'attendent. Les mots clés par lesquels ils sont arrivés sur votre site ne représente pas bien son contenu. Cela est valable pour n'importe quelle page.&lt;/p&gt;
&lt;p&gt;Un moyen de garder plus longtemps vos visiteurs et de les inciter à parcourir plus longtemps et plus attentivement votre site et de les aider dans leur démarche. S'ils ont aimé un article, plutôt que de les laisser chercher par eux même, une idée serait de leur donner des liens qui pourraient leur plaire. Les tags sont un bon moyen. Ils ont un double objectif :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;fournir des mots clés sur la page ce qui est utile aux moteurs d'indéxation.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;fournir des pages contenant ces mêmes mots clés&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;On peut aussi ajouter des liens pertinents pour prolonger une visite. Il existe un plugin pour dotclear qui ajoute automatiquement des liens vers les billets suivants et précédents mais ce n'est pas forcément le plus logique et le plus intéressant pour le lecteur. L'idéal serait de pouvoir choisir les billets relatifs au billet en cours de lecture. Ce plugin existe : &lt;a href=&quot;http://plugins.dotaddict.org/dc2/details/relatedLinks&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;relatedLinks&lt;/a&gt;. Vous pouvez aussi en trouver une description plus complète sur la &lt;a href=&quot;http://www.nikrou.net/pages/relatedLinks&quot; hreflang=&quot;fr&quot;&gt;page dédiée au plugin relatedLinks&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Vous avez aussi un exemple d'utilisation avec les trois liens ci-dessous.&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Compilation de PHP5 sur itaninium 64 bits</title>
    <link>http://www.nikrou.net/post/2010/12/08/Compilation-de-PHP5-sur-itaninium-64-bits</link>
    <guid isPermaLink="false">urn:md5:b02f8d3c117dd266d9d750b738a5ddb8</guid>
    <pubDate>Wed, 08 Dec 2010 21:51:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>apache</category><category>compilation</category><category>linux</category><category>php</category>    
    <description>&lt;p&gt;La compilation de &lt;a href=&quot;http://php.net/&quot; rel=&quot;external&quot;&gt;PHP5&lt;/a&gt; sur un serveur itanium 64 bits n'est pas une mince affaire. Pour corser le tout, le système d'exploitation est une &lt;a href=&quot;http://www.fr.redhat.com/rhel/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;RHEL 5&lt;/a&gt;. La compilation semble bien se passer. Je peux lancer le serveur (apache 2) et je vois même la page phpinfo qui semble correcte. Dans la foulée j'essaie d'installer une application et là c'est le drame ! Le moindre script provoque un &quot;Segmentation fault&quot; d'apache et la mort du processus. Et côté navigateur on a le droit à une erreur &quot;Document Contains No Data&quot;.&lt;/p&gt;    &lt;p&gt;On est bien avancé quand on a une erreur de ce genre ! Heureusement avec notre ami google on se sent moins seul et je m'aperçois que je ne suis pas seul à avoir ce soucis, notamment avec l&lt;a href=&quot;http://www.php.net/manual/fr/faq.installation.php#faq.installation.nodata&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;a documentation du problème sur php.net&lt;/a&gt;. J'ai aussi trouvé comment essayer de debugger le problème dans la &lt;a href=&quot;http://httpd.apache.org/dev/debugging.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;documentation d'apache&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais tout cela ne fait que confirmer le problème et ne le règle en rien. Au hasard de mes recherches, je suis tombé sur un site qui parle d'un bug dans gcc (j'ai la 3.4 sur le serveur) qui se résoud en lui passant des paramètres particulier&amp;nbsp;&lt;strong&gt;-fno-strict-aliasing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je ne suis qu'à moitié convaincu mais j'ai quand même essayer:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;pygments language-bash&quot;&gt;
# export CC=&quot;gcc -fno-strict-aliasing&quot;
# ./configure --avec-tous-paramètres-qui-vont-biens
# make
# make install
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Je ne suis pas complètement persuadé que ce soit la meilleure solution mais quoi qu'il en soit cela a résolu le problème pour ce qui me concerne.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Faire une commande pour un développement ?</title>
    <link>http://www.nikrou.net/post/2010/12/04/Faire-une-commande-pour-un-d%C3%A9veloppement</link>
    <guid isPermaLink="false">urn:md5:eb1b0e9e912c42073be259ace1c48350</guid>
    <pubDate>Sat, 04 Dec 2010 17:14:00 +0100</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Développement</category>
        <category>contact</category><category>dotclear</category><category>piwigo</category><category>plugin</category>    
    <description>&lt;p&gt;Vous utilisez de nombreux logiciels libres et ils correspondent pour la plupart à ce que vous en attendez. Mais ne vous êtes jamais dit : ce logiciel est bien sympathique mais il manque telle ou telle fonctionnalité. Vous essayez de contacter l'équipe, vous leur suggérer d'ajouter la fonctionnalité si chère à vos yeux mais vous êtes tout de même à la merci du bon vouloir de l'équipe de développement.&lt;a href=&quot;http://www.cyrille-borne.com/index.php?post/2010/12/03/Quelques-r%C3%A9flexions-sur-l-argent-et-le-logiciel-libre&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt; Et comme le suggère Cyrille, si vous passiez une commande ?&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Je développe à mes heures &quot;perdues&quot;. Je suis profondément attaché aux valeurs du logiciel libre mais le billet de &lt;a href=&quot;http://www.cyrille-borne.com/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;Cyrille&lt;/a&gt;&amp;nbsp;m'interpelle et si au lieu de simplement partager mes développements, je me faisais payer pour en faire d'autres. Tout le monde y gagnerait : la personne qui fait la commande et qui voit la fonctionnalité manquante arrivée dans son logiciel préféré et moi qui continue à coder pour le plaisir mais en mettant un peu de beurre dans les épinards.&lt;/p&gt;
&lt;p&gt;Je fais des plugins (extensions) pour &lt;a href=&quot;http://fr.piwigo.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;piwigo&lt;/a&gt;;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://piwigo.org/ext/extension_view.php?eid=307&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;akBookStyle&lt;/a&gt; : ce plugin permet une présentation alternative avec imagettes et image de taille web sur la même page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://piwigo.org/ext/extension_view.php?eid=263&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;pwgCumulus&lt;/a&gt; : ce plugin présente les tags sous la forme d'une animation flash en 3D.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://piwigo.org/ext/extension_view.php?eid=394&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;Database Migration&lt;/a&gt; : ce plugin permet d'utiliser une autre base de données que &lt;a href=&quot;http://www.mysql.fr/&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;MySQL&lt;/a&gt;, à savoir &lt;a href=&quot;http://www.postgresql.org/&quot; rel=&quot;external&quot; hreflang=&quot;en&quot;&gt;PostgreSQL&lt;/a&gt; ou &lt;a href=&quot;http://www.sqlite.org/&quot; rel=&quot;external&quot; hreflang=&quot;en&quot;&gt;SQLite&lt;/a&gt; et assure la migration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://piwigo.org/ext/extension_view.php?eid=370&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;photoWidget&lt;/a&gt; : ce plugin permet d'afficher les imagettes sous la forme d'une animation flash en 3D, de la même manière que les tags.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://piwigo.org/ext/extension_view.php?eid=441&quot; rel=&quot;external&quot; hreflang=&quot;fr&quot;&gt;User Tags&lt;/a&gt; : ce plugin permet aux visiteurs de votre galerie d'ajouter des tags aux images.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Je développe ou reprends le développement de plugin pour &lt;a href=&quot;http://fr.dotclear.org/&quot; hreflang=&quot;fr&quot; rel=&quot;external&quot;&gt;dotclear&lt;/a&gt; :&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.nikrou.net/pages/contactPage&quot; hreflang=&quot;fr&quot;&gt;contactPage&lt;/a&gt; : le plugin (non public) qui me permet d'avoir une page de contact.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nikrou.net/a-propos&quot; hreflang=&quot;fr&quot;&gt;aboutPage&lt;/a&gt; : une page à propos (non public)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nikrou.net/pages/externalLinks&quot; hreflang=&quot;fr&quot;&gt;externalLinks&lt;/a&gt; : ce plugin permet d'ouvrir les liens externes dans une nouvelle fenêtre&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;J'ai développé d'autres plugins pour piwigo ou dotclear mais ceux-ci ne sont pas publiques et ont fait l'objet d'un développement spécifique.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Si vous aussi avez un besoin d'un plugin (pour piwigo ou dotclear) ou d'un développement spécifique (en PHP, Perl,...) &amp;nbsp;et être prêt à le payer, &lt;a href=&quot;http://www.nikrou.net/contact&quot; hreflang=&quot;fr&quot;&gt;n'hésitez pas à me contacter&lt;/a&gt; avec un cahier des charges précis. J'évalue la charge et on se met alors d'accord sur un prix. Dans l'idéal, j'aimerais que la licence du plugin soit&amp;nbsp;&lt;a href=&quot;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;GNU GPL (version 2)&lt;/a&gt;. En clair, vous m'achetez le développement d'une fonctionnalité dont vous avez besoin mais j'en garde la propriété intellectuelle.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il y a plusieurs avantages à utiliser ce type de licence. Je ne vous prends pas en otage et vous pouvez modifier le plugin à votre guise ou faire une autre commande auprès de quelqu'un d'autre. Un autre avantage c'est que d'autres personnes peuvent être intéressées, peuvent utiliser le plugin et remonter des bugs ou des idées d'évolutions dont tout le monde bénéficiera y compris la personne ayant eu l'idée initiale.&lt;/p&gt;
&lt;p&gt;Si le plugin est sous licence GPL, je le mettrais en libre téléchargement ou pourrais le vendre à d'autres. Evidemment la personne qui me fera la commande pourra en faire de même. La seule et unique condition est que les &quot;copies&quot; vendues gardent la même licence.&lt;/p&gt;
&lt;p&gt;En clair, la commande vous permet de bénéficier de la fonctionnalité qui vous manquait et qui n'aurait peut-être jamais existée sans cela.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>