<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://xbright.codingteam.net/dotclear/index.php/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/">
<channel>
  <title>xbright’s world - php</title>
  <link>http://xbright.codingteam.net/dotclear/index.php/</link>
  <description>Un blog bien mijoté avec des oignons autour. Miam miam.</description>
  <language>fr</language>
  <pubDate>Thu, 04 Sep 2008 14:31:24 +0400</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Statistiques des projets dans CodingTeam, où quand SVG remplace Flash</title>
    <link>http://xbright.codingteam.net/dotclear/index.php/post/2008/07/01/codingteam-dev-scoop</link>
    <guid isPermaLink="false">urn:md5:2cc5b303b68d7b5739233d87fc2f8ac9</guid>
    <pubDate>Fri, 11 Jul 2008 04:27:00 +0400</pubDate>
    <dc:creator>xbright</dc:creator>
        <category>Projets</category>
        <category>codingteam</category><category>php</category>    
    <description>    Ce billet a pour but de vous présenter une des nombreuses &lt;em&gt;killer feature&lt;/em&gt; que contiendra CodingTeam (qui devrait d'ailleurs sortir dans plus très longtemps) et donc de &lt;strong&gt;vous intéresser au développement du projet à l'insu de votre plein gré&lt;/strong&gt;. En effet, avec ce genre de billet, mon but inavoué est de vous intéresser à CodingTeam via des petits entrebâillements de porte laissant entrevoir des choses chouettes et sexy. Grâce à ça, donc, je pourrai faire naitre chez vous une genre de fièvre, une attente insoutenable et une impatience de voir la sortie de &lt;strong&gt;CodingTeam 0.9&lt;/strong&gt;, alors qu'au départ, vous n'en aviez pas réellement grand chose à faire.&lt;br /&gt;&lt;br /&gt;Et cette méthode marche ! Voilà quelques jours que je parle de ce futur scoop sur les salons Jabber et voici une réaction (je suis gentil, j'ai mis des majuscules à ses smileys histoire qu'il soit présentable) :&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;[03:57:47] louiz': t'es chiant, t'arrives à me faire avoir hâte d'un truc qui a pourtant pas tant d'importance pour moi :D&lt;br /&gt;[03:57:49] louiz': magne toi :P&lt;/p&gt;
&lt;/blockquote&gt;Et cette petite lueur qui ravive en vous la flamme du fan de CodingTeam, c'est l'intégration de graphiques en &lt;acronym title=&quot;Scalable Vector Graphics&quot;&gt;SVG&lt;/acronym&gt; pour les projets, dans la forge ! Un truc que personne n'attendait, qui n'avait jamais été prévu ni même évoqué, mais qui arrive, pourtant.&lt;br /&gt;&lt;br /&gt;Voici une capture de la bête dans son élément naturel prise il y a quelques heures.&lt;br /&gt;&lt;a href=&quot;http://xbright.codingteam.net/dotclear/public/debiensbellesimages/ct_stats_apercu.png&quot;&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://xbright.codingteam.net/dotclear/public/debiensbellesimages/.ct_stats_apercu_s.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;C'est bien sûr un aperçu et peut-être que beaucoup de choses changeront encore (ou pas), mais c'est déjà un premier jet qui fonctionne pas trop mal. Là, il s'agit donc de comparer, par versions publiées, le nombre de bugs rapportés au nombre de bugs encore ouverts. Mais, vous vous doutez bien que sur une forge, il y a bien d'autres chiffres disponibles. Donc, si il s'avère que tout ça tourne bien, il y aura bien les statistiques en SVG dans la prochaine version de CodingTeam, et ça touchera plusieurs points important de la conception d'un logiciel.&lt;br /&gt;&lt;br /&gt;Et les traditionnelles informations pour en savoir plus et/ou pour participer (et, avec de la chance, peupler le salon des utilisateurs désespérément pas-très-fréquenté) :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Salon Jabber des utilisateurs : &lt;a href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2008/07/01/xmpp:codingteam@conference.codingteam.net?join&quot;&gt;codingteam@conference.codingteam.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Salon Jabber dédié au développement (notez qu'on y kick les squatteurs qui n'envoient pas de patchs) : &lt;a href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2008/07/01/xmpp:codingteam-dev@conference.codingteam.net?join&quot;&gt;codingteam-dev@conference.codingteam.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
On y parle français et anglais, donc, n'hésitez pas, &lt;em&gt;viendez !&lt;/em&gt;&lt;br /&gt;De même, pour l'accès au dépôt Subversion : &lt;strong&gt;svn co http://svn.codingteam.net/code/codingteam/trunk codingteam&lt;/strong&gt;&lt;br /&gt;Les lecteurs sérieux auront d'ailleurs remarqué que j'ai renommé le projet &lt;em&gt;source&lt;/em&gt; sur la forge, en &lt;a hreflang=&quot;fr&quot; href=&quot;http://codingteam.codingteam.net&quot;&gt;&lt;em&gt;codingteam&lt;/em&gt;&lt;/a&gt;, ce qui est quand même bien plus logique, même si ça va poser des problèmes de flux à certain, voilà, ils sont au courant, mettez vous à jour (mais par contre, le dépôt reste accessible via source ou codingteam, histoire de pas avoir d'embêtements).&lt;br /&gt;&lt;br /&gt;Et tout ça nous amène donc à nous poser cette petite question : pourquoi les gens utilisent Flash pour afficher ce genre de choses ?&lt;br /&gt;Google Analytics et tout un tas d'autres applications génèrent leurs graphiques via Flash. Alors que Flash, &lt;a hreflang=&quot;fr&quot; href=&quot;http://flash.saimal.fr/&quot;&gt;saimal&lt;/a&gt; parce que c'est pas ouvert, le client officiel n'est pas libre et c'est bien lourd au point de souvent causer le plantage de mon navigateur. Là au moins, avec SVG, on a quelque chose de logique (un fichier XML avec tout plein de coordonnées à calculer - miam, ou pas - et une feuille de style), c'est « simple » et c'est beau. Quand on regarde un graphique généré par SVG et un autre généré par Flash, on a du mal à voir la différence, puisqu'il y a les mêmes artifices (&lt;em&gt;rollover&lt;/em&gt;, infobulles...). Alors autant choisir SVG, parce que, si une chose est incontestable, c'est que &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.google.com/search?q=why+XML+is+a+good+thing&quot;&gt;XML sailebien&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SVG roulaise, CodingTeam roulaise !&lt;/strong&gt;&lt;br /&gt;Et on remercie tous chaleureusement &lt;strong&gt;MsieurHappy&lt;/strong&gt; qui, après avoir fait &lt;acronym title=&quot;Attention à Tchernobyl !&quot;&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://msieurhappy.is-a-geek.net/svg.xhtml&quot;&gt;tout un tas de tests en rapport avec la génération de graphes en SVG&lt;/a&gt;&lt;/acronym&gt;, m'a soumis l'idée, une preuve de concept (avant tout le monde, &lt;em&gt;yeah !&lt;/em&gt;) et plein de conseils pour réaliser quelque chose de bien.&lt;br /&gt;</description>
    
    
    
          <comments>http://xbright.codingteam.net/dotclear/index.php/post/2008/07/01/codingteam-dev-scoop#comment-form</comments>
      <wfw:comment>http://xbright.codingteam.net/dotclear/index.php/post/2008/07/01/codingteam-dev-scoop#comment-form</wfw:comment>
      <wfw:commentRss>http://xbright.codingteam.net/dotclear/index.php/feed/rss2/comments/102</wfw:commentRss>
      </item>
    
  <item>
    <title>Internationaliser votre application PHP avec gettext</title>
    <link>http://xbright.codingteam.net/dotclear/index.php/post/2008/06/08/Internationaliser-votre-application-PHP-avec-gettext</link>
    <guid isPermaLink="false">urn:md5:642f5adad0981b1db2642cb9e755c81b</guid>
    <pubDate>Sun, 08 Jun 2008 22:54:00 +0400</pubDate>
    <dc:creator>xbright</dc:creator>
        <category>Programmation et bidouillages</category>
        <category>php</category><category>Planet</category>    
    <description>    &lt;p&gt;Développer une application, c'est bien. La distribuer où l'utiliser, c'est mieux. Cependant, tout le monde ne parle pas votre langue, d'où l'intérêt de l'internationaliser (et paf, une introduction toute pourrie \o/). Dans ce billet, je vous présenterai donc comment j'utilise gettext dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://source.codingteam.net&quot;&gt;CodingTeam&lt;/a&gt;, afin de traduire l'application.&lt;/p&gt;
Traduire une application se fait généralement à l'aide d'outils dédiés comme &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.gnu.org/software/gettext/&quot;&gt;gettext&lt;/a&gt;. Vous écrivez votre code en mettant tous vos textes traduisibles d'une certaine manière et il va aller les chercher pour en faire un fichier modèle (pot), qui servira ensuite à générer des fichiers de langue (po).&lt;br /&gt;En PHP et comme dans beaucoup d'autres langages, il y a déjà &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.php.net/gettext&quot;&gt;quelque chose de tout préparé&lt;/a&gt;, ce qui permet de l'utiliser directement, sans rien installer d'autre.&lt;br /&gt;&lt;br /&gt;Ma façon d'utiliser gettext est inspirée de la lecture de bon nombre d'articles sur le net. En gros, j'utilise ce code pour charger gettext :&lt;br /&gt;&lt;code&gt;setlocale(LC_ALL, $lang.'.UTF-8');&lt;br /&gt;&lt;br /&gt;bindtextdomain('nomdedomaine', 'i18n');&lt;br /&gt;textdomain('nomdedomaine');&lt;br /&gt;bind_textdomain_codeset('nomdedomaine', 'UTF-8');&lt;/code&gt;&lt;br /&gt;Dans cet exemple, &lt;strong&gt;$lang&lt;/strong&gt; doit valoir quelque chose comme en_GB ou fr_FR et &lt;em&gt;nomdedomaine&lt;/em&gt; devrait être le nom de votre application.&lt;br /&gt;Dans le répertoire i18n, il devrait se trouver un dossier fr_FR contenant un autre dossier LC_MESSAGES qui accueillera le binaire produit par gettext (mo).&lt;br /&gt;&lt;br /&gt;De même, on peut faire en sorte que la langue soit enregistrée par l'utilisateur, donnée dans l'URL, lue depuis l'en-tête adéquate... Voilà une manière assez rapide^Wmoche et ne respectant pas les spécifications, de se baser sur la langue du navigateur :&lt;br /&gt;&lt;code&gt;$langlist = array('fr' =&amp;gt; 'fr_FR', 'en' =&amp;gt; 'en_GB');&lt;br /&gt;$accept_language = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);&lt;br /&gt;&lt;br /&gt;foreach ($accept_language as $value) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $choice = mb_substr($value, 0, 2); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (array_key_exists($choice, $langlist))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $lang = $langlist[$choice];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (empty($lang))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $lang = 'en_GB';&lt;/code&gt;&lt;br /&gt;À noter qu'il n'y a pas besoin de générer de .po/.mo pour la langue dans laquelle vous écrivez vos textes au sein de votre application vu qu'ils sont chargés par défaut si gettext n'arrive pas à trouver les traductions qui vont bien.&lt;br /&gt;&lt;br /&gt;Pour créer le modèle, j'utilise &lt;a hreflang=&quot;fr&quot; href=&quot;http://svn.codingteam.net/code/source/trunk/scripts/i18n/create_pot&quot;&gt;ce script&lt;/a&gt;, qui est bien sûr adaptable. Dès que j'ai créé le .pot, je peux lancer &lt;a hreflang=&quot;fr&quot; href=&quot;http://svn.codingteam.net/code/source/trunk/scripts/i18n/create_po&quot;&gt;cet autre script&lt;/a&gt; qui va me créer le fichier de traduction pour la langue que je désire. Une fois que j'ai traduit toutes les chaines, il me reste à lancer &lt;a hreflang=&quot;fr&quot; href=&quot;http://svn.codingteam.net/code/source/trunk/scripts/i18n/create_mo&quot;&gt;ce dernier script&lt;/a&gt; pour générer le binaire !&lt;br /&gt;&lt;br /&gt;C'est là qu'on arrive au point relativement intéressant de ce billet (l'avant-ici a des airs de déjà-vu). J'ai toujours utilisé la fonction &lt;strong&gt;_()&lt;/strong&gt; ou &lt;strong&gt;gettext()&lt;/strong&gt; couplée à &lt;strong&gt;sprintf()&lt;/strong&gt; afin de remplacer des éléments par d'autres. Exemple, si je veux traduire « Toto a mangé 4 bananes », j'écris : &lt;strong&gt;sprintf(_('Toto a mangé %d bananes'), 4);&lt;/strong&gt; jusqu'au jour où je me suis rendu compte que si je voulais insérer plusieurs éléments dans la chaine tout en les nommant (afin de pouvoir changer leur ordre), j'allais au devant d'une syntaxe affreuse, repoussante,&lt;del&gt; typiquement-php,&lt;/del&gt; à jeter par la fenêtre : &lt;strong&gt;sprintf(_('Le %2$s achète %1$d bananes.'), 42, 'monsieur');&lt;/strong&gt; ! &lt;br /&gt;&lt;strong&gt;&lt;em&gt;%2$s, %1$s&lt;/em&gt;&lt;/strong&gt; ! Mais qui est allé pondre cette horreur ?&lt;br /&gt;&lt;br /&gt;Nostalgique de la façon bien plus propre de remplacer des occurrences dans des chaines en Python, j'ai donc écrit cette fonction, que je vous partage. Et j'espère qu'elle vous sera utile. En tout cas, c'est bien plus facile de ne pas se tromper, le traducteur a en face de lui quelque chose qui a une signification et ça ne fait pas tâche.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;/**&lt;br /&gt; * Translate a string and add arguments&lt;br /&gt; *&lt;br /&gt; * Gets the translated string from gettext and add arguments in it with&lt;br /&gt; * the Python way instead of the *ugly* PHP way (sprintf).&lt;br /&gt; *&lt;br /&gt; * @param $str&lt;br /&gt; *   The string to be translated.&lt;br /&gt; * @param $args&lt;br /&gt; *   All arguments to be added.&lt;br /&gt; * @return&lt;br /&gt; *   The translated and formatted string.&lt;br /&gt; */&lt;br /&gt;function i18n($str, $args=array())&lt;br /&gt;{&lt;br /&gt;    // Get the translated string&lt;br /&gt;    $str = gettext($str);&lt;br /&gt;&lt;br /&gt;    // Add arguments to the string if exist&lt;br /&gt;    if (count($args) &amp;gt; 0)&lt;br /&gt;        // Fetching all arguments&lt;br /&gt;        foreach ($args as $key =&amp;gt; $value)&lt;br /&gt;        {&lt;br /&gt;            // Decimal value&lt;br /&gt;            if (is_numeric($value))&lt;br /&gt;                $type = 'd';&lt;br /&gt;            // String value&lt;br /&gt;            elseif (is_string($value))&lt;br /&gt;                $type = 's';&lt;br /&gt;&lt;br /&gt;            // Replace&lt;br /&gt;            $str = str_replace('%('.$key.')'.$type, $value, $str);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    // Return the translated string with arguments&lt;br /&gt;    return $str;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;</description>
    
    
    
          <comments>http://xbright.codingteam.net/dotclear/index.php/post/2008/06/08/Internationaliser-votre-application-PHP-avec-gettext#comment-form</comments>
      <wfw:comment>http://xbright.codingteam.net/dotclear/index.php/post/2008/06/08/Internationaliser-votre-application-PHP-avec-gettext#comment-form</wfw:comment>
      <wfw:commentRss>http://xbright.codingteam.net/dotclear/index.php/feed/rss2/comments/94</wfw:commentRss>
      </item>
    
  <item>
    <title>Des nouvelles de la version de développement de CodingTeam.</title>
    <link>http://xbright.codingteam.net/dotclear/index.php/post/2008/03/01/Des-nouvelles-de-la-version-de-developpement-de-CodingTeam</link>
    <guid isPermaLink="false">urn:md5:44dfe656e612d6436276a3d3501db8d0</guid>
    <pubDate>Sat, 01 Mar 2008 16:41:00 +0400</pubDate>
    <dc:creator>xbright</dc:creator>
        <category>Projets</category>
        <category>codingteam</category><category>forge</category><category>logiciel libre</category><category>php</category><category>Planet</category>    
    <description>    &lt;p&gt;M'étant résigné à ne pas publier les quelques billets que j'hésitais à publier (ceux qui auraient pu peut être me faire passer - bien malgré moi - pour l'alcoolo de service ou pour le type qui trolle à plein régime sur la communauté d'un projet qui commence par « Ubun » et qui finit par « tu ») et ayant remarqué que je n'avais pas publié un billet ici depuis un bon paquet de temps, j'ai enfin réussi à trouver un sujet sympa à aborder \o/&lt;/p&gt;
&lt;p&gt;Je vais donc dresser un état des lieux de ce qui est fait et de ce qu'il reste à faire avant de pouvoir espérer une possible sortie du premier opus de la branche 0.9 de CodingTeam (un truc chiadé et hyper-stable que nous envient les américains, ou pas). En tout cas, il n'y a toujours aucune date prévue pour la sortie (vu qu'il reste quand même pas mal de travail, même si il est déjà bien avancé).&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne seraient pas au fait de ce qu'est &lt;a hreflang=&quot;fr&quot; href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2007/06/21/CodingTeam-042&quot;&gt;CodingTeam&lt;/a&gt; (les nuls :-O), &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.codingteam.net/source-doc-Roadmap_fr.html&quot;&gt;il s'agissait&lt;/a&gt; après la sortie de la première version stable (la 0.42), de reprendre le code de zéro afin de produire un logiciel beaucoup plus intéressant (mieux codé, objet, modulable, et tout pleins de bonnes choses) et bien sûr, d'ajouter pas mal de fonctionnalités assez chouettes.&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;En exclusivité prime-time, voici une jolie copie d'écran de ce que donnera CodingTeam 0.9 :&lt;/div&gt;
&lt;a href=&quot;http://xbright.codingteam.net/dotclear/public/debiensbellesimages/cttrunk.png&quot;&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://xbright.codingteam.net/dotclear/public/debiensbellesimages/.cttrunk_m.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Ainsi, le travail de réécriture entière du code source a été commencé. Certains points initalement prévus pour la 0.1 ont aussi été ajoutés ou prévus, il s'agit de l'intégration de Subversion, la donation sur les projets, la mise en cache des pages, l'avatar jabber, les notifications jabber...). Aussi, notons que l'écriture du bloc notes a été terminée (il s'agissait de créer un genre de pastebin, mais complètement intégré à CodingTeam), que des nouvelles fonctions d'administration de la forge ont été ajoutées un peu partout comme par exemple la possibilité de devoir valider les nouveaux projets, pas mal de nouvelles options de classement et d'exploration des projets, un joli nuage de tags, et pleins de bonnes choses du genre :-)).&lt;br /&gt;Il n'y a pas de moyen, pour le moment, de tester le trunk CodingTeam sans l'installer chez vous, et ce n'est pas bien compliqué, le fichier INSTALL est plutôt complet (mais écrit avec sûrement de grosses fôtes /o\).&lt;br /&gt;&lt;br /&gt;Et concernant la bonne majorité des idées des utilisateurs (sur la page Roadmap liée un peu plus haut, vous pouvez vous aussi y inscrire vos idées), elles seront implémentées.&lt;br /&gt;&lt;br /&gt;Pour vous rendre compte de l'avancement du projet, il suffit de récupérer la copie de travail sur &lt;a hreflang=&quot;fr&quot; href=&quot;http://svn.codingteam.net/code/source/trunk&quot;&gt;http://svn.codingteam.net/code/source/trunk&lt;/a&gt; !&lt;br /&gt;Et si vous voulez en discuter, le salon Jabber dédié à CodingTeam : &lt;a hreflang=&quot;fr&quot; href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2008/03/01/xmpp:codingteam@conference.codingteam.net?join&quot;&gt;codingteam@conference.codingteam.net&lt;/a&gt;&lt;br /&gt;Et le salon Jabber dédié au développement de CodingTeam : &lt;a hreflang=&quot;fr&quot; href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2008/03/01/xmpp:codingteam-dev@conference.codingteam.net?join&quot;&gt;codingteam-dev@conference.codingteam.net&lt;/a&gt;&lt;br /&gt;Concernant l'équipe de développement, je suis globalement seul, mais certains envoient leurs contributions (ne serait ce qu'en participant aux discussions sur le salon de développement ou en m'envoyant du code) :-)&lt;br /&gt;</description>
    
    
    
          <comments>http://xbright.codingteam.net/dotclear/index.php/post/2008/03/01/Des-nouvelles-de-la-version-de-developpement-de-CodingTeam#comment-form</comments>
      <wfw:comment>http://xbright.codingteam.net/dotclear/index.php/post/2008/03/01/Des-nouvelles-de-la-version-de-developpement-de-CodingTeam#comment-form</wfw:comment>
      <wfw:commentRss>http://xbright.codingteam.net/dotclear/index.php/feed/rss2/comments/79</wfw:commentRss>
      </item>
    
  <item>
    <title>Mon petit compte rendu de ce premier Code Bar.</title>
    <link>http://xbright.codingteam.net/dotclear/index.php/post/2007/06/03/Mon-petit-compte-rendu-de-ce-premier-Code-Bar</link>
    <guid isPermaLink="false">urn:md5:6d672c4d4c958847be7b6638b1ac83c6</guid>
    <pubDate>Sun, 03 Jun 2007 07:39:00 +0400</pubDate>
    <dc:creator>xbright</dc:creator>
        <category>Programmation et bidouillages</category>
        <category>codingteam</category><category>Jabber</category><category>php</category><category>Planet</category><category>Python</category>    
    <description>    &lt;p&gt;Depuis hier après midi jusqu'à aujourd'hui, se tenait la première édition du Code Bar sur Jabber !&lt;/p&gt;
&lt;p&gt;Tout comme l'avait &lt;a hreflang=&quot;fr&quot; href=&quot;http://news.jabberfr.org/?p=26&quot;&gt;préparé les organisateurs &lt;strong&gt;Omega&lt;/strong&gt; et &lt;strong&gt;Elghinn&lt;/strong&gt;&lt;/a&gt; sur le salon &lt;a hreflang=&quot;fr&quot; href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2007/06/03/xmpp:programmation@chat.jabberfr.org&quot;&gt;programmation@chat.jabberfr.org&lt;/a&gt;. Cette soirée (nuit ?) s'est donc déroulée dans la bonne humeur et a été productive.&lt;/p&gt;
&lt;br /&gt;&lt;p&gt;Voilà &lt;a hreflang=&quot;fr&quot; href=&quot;http://trac.last-exile.org/code_bar/log/&quot;&gt;un log de tous les commit&lt;/a&gt; effectués sur le SVN de l'occasion (deux projets étaient proposés pour cette première édition : &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.gajim.org&quot;&gt;Gajim&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.codingteam.net&quot;&gt;CodingTeam&lt;/a&gt;). Il y en a eu plus d'une cinquantaine, pour - au mieux de la soirée - une vingtaine de connectés au salon, dont seulement 7 avaient un accès en écriture au dépôt SVN.&lt;/p&gt;
&lt;br /&gt;Concernant Gajim, les principaux développements ont été &lt;a hreflang=&quot;fr&quot; href=&quot;http://trac.last-exile.org/code_bar/log/gajim/branches/pep/&quot;&gt;l'amélioration du support de PEP&lt;/a&gt;, des travaux divers &lt;a hreflang=&quot;fr&quot; href=&quot;http://trac.last-exile.org/code_bar/log/gajim/trunk/&quot;&gt;sur le trunk&lt;/a&gt; où encore - j'y ai un peu participé - sur une branche à part nommée &lt;a hreflang=&quot;fr&quot; href=&quot;http://trac.last-exile.org/code_bar/log/gajim/branches/chat2muc/&quot;&gt;chat2muc&lt;/a&gt; : pour transformer un chat normal en salon de discussion, &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.xmpp.org/extensions/xep-0045.html#continue&quot;&gt;XEP-0045&lt;/a&gt;). Bien entendu, nous n'avons pas terminé cette intégration, et nous la continuons sur le salon &lt;a hreflang=&quot;fr&quot; href=&quot;http://xbright.codingteam.net/dotclear/index.php/post/2007/06/03/xmpp:gajim-chat2muc@conference.codingteam.net&quot;&gt;gajim-chat2muc@conference.codingteam.net&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;CodingTeam a bénéficié de l'aide de quelques uns aussi via le dépôt mis en place pour l'occasion sur le serveur de &lt;a hreflang=&quot;fr&quot; href=&quot;http://last-exile.org&quot;&gt;Elghinn&lt;/a&gt;.&lt;br /&gt;Ainsi, l'intégration Jabber dans la forge &lt;a hreflang=&quot;fr&quot; href=&quot;http://trac.last-exile.org/code_bar/log/codingteam/&quot;&gt;a été travaillée&lt;/a&gt; et j'ai synchronisé le travail effectué avec &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.codingteam.net/websvn/listing.php?repname=source&amp;amp;path=%2F&amp;amp;rev=44&amp;amp;sc=1&quot;&gt;le trunk officiel&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;Historiques des salons :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://chat.jabberfr.org/logs/programmation@chat.jabberfr.org/&quot;&gt;programmation@chat.jabberfr.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.codingteam.net/jabber.php?action=gajim-chat2muc@conference.codingteam.net&quot;&gt;gajim-chat2muc@conference.codingteam.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;Merci donc à tous les participants pour le coup de pouce aux projets ;-)&lt;br /&gt;</description>
    
    
    
          <comments>http://xbright.codingteam.net/dotclear/index.php/post/2007/06/03/Mon-petit-compte-rendu-de-ce-premier-Code-Bar#comment-form</comments>
      <wfw:comment>http://xbright.codingteam.net/dotclear/index.php/post/2007/06/03/Mon-petit-compte-rendu-de-ce-premier-Code-Bar#comment-form</wfw:comment>
      <wfw:commentRss>http://xbright.codingteam.net/dotclear/index.php/feed/rss2/comments/41</wfw:commentRss>
      </item>
    
  <item>
    <title>Créer des fils RSS avec mise en cache</title>
    <link>http://xbright.codingteam.net/dotclear/index.php/post/2007/03/12/Creer-des-fils-RSS-avec-mise-en-cache</link>
    <guid isPermaLink="false">urn:md5:647e4548b09cf047620959acf0c42e07</guid>
    <pubDate>Fri, 06 Apr 2007 14:19:00 +0400</pubDate>
    <dc:creator>xbright</dc:creator>
        <category>Programmation et bidouillages</category>
        <category>php</category><category>Planet</category><category>rss</category><category>web 2.0</category>    
    <description>&lt;p&gt;Voilà un petit script que j'ai codé pour CodingTeam et qui peut être utile; c'est pourquoi je le met à disposition.&lt;/p&gt;    Les fils RSS sont à la mode en ce moment et permettent, depuis un aggrégateur, d'obtenir les dernières actualités d'autant de sites que l'on désire.&lt;br /&gt;En plus, c'est très simple de générer un fil de ce type en PHP (là ou ça se corse un peu c'est pour convertir une date &lt;em&gt;d/m/Y&lt;/em&gt; et une heure &lt;em&gt;H:i:s&lt;/em&gt; en &lt;em&gt;RFC822&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;Commencez par mettre ce code entre les &lt;em&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/em&gt; de la page proposant l'abonnement :&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;&lt;span class=&quot;start-tag&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt; rel&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;alternate&quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;application/rss+xml&quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;title&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;RSS 2.0&quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;href&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;rss.php&quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
Dans le répertoire où se trouve ce script, vous devez aussi avoir un dossier /cache en chmod 777 afin que l'application puisse y écrire.&lt;br /&gt;Pour renouveller le cache, il suffit d'ajouter dans votre code (par exemple, lorsqu'un nouvel article est posté) :&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlink(&quot;cache/cache-rss.php&quot;);&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;/pre&gt;Le script de base du cache a été trouvé sur WebRankInfo et je l'ai adapté à la situation : &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.webrankinfo.com/forums/viewtopic_28614.htm&quot;&gt;Mise en cache des pages PHP&lt;/a&gt; !&lt;br /&gt;&lt;p&gt;Le voici dans sa version originale :&lt;/p&gt;
&lt;pre&gt;&lt;BEGIN GeSHi&gt;&lt;code class=&quot;php&quot;&gt;&amp;lt;?php&lt;br /&gt;$urldemandee=$_SERVER['REQUEST_URI'];&lt;br /&gt;$urldemandee=ereg_replace('/','-',$urldemandee);&lt;br /&gt;$fichierCache=&quot;cache/cache&quot;.$urldemandee;&lt;br /&gt;if (@filemtime($fichierCache)&amp;lt;time()-(3600*24*360)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; ob_start(); &lt;br /&gt;&lt;br /&gt;header(&quot;Content-Type: text/xml;charset=utf-8&quot;);&lt;br /&gt;require_once(&quot;../include/config.inc.php&quot;);&lt;br /&gt;require_once(&quot;../include/bbcode.inc.php&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;echo '&amp;lt;rss version=&quot;2.0&quot;&amp;gt;&lt;br /&gt;&amp;lt;channel&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;CodingTeam - Forum&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;link&amp;gt;http://www.codingteam.net&amp;lt;/link&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;Les derniers messages postés dans le forum.&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;language&amp;gt;fr-FR&amp;lt;/language&amp;gt;&lt;br /&gt;';&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $sql = mysql_query(&quot;SELECT * FROM forum_sujet ORDER BY id DESC LIMIT 5&quot;) or die (mysql_error());&lt;br /&gt;&amp;nbsp; while ($row = mysql_fetch_array($sql))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;$dd = explode('/',$row['date']);&lt;br /&gt;$dc = explode(':',$row['heure']);&lt;br /&gt;&lt;br /&gt;echo '&lt;br /&gt;&amp;lt;item&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;'.utf8_encode($row['titre']).'&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;link&amp;gt;'.$racine.'/forumvoir,'.$row['cat'].','.$row['id'].'.html&amp;lt;/link&amp;gt;&lt;br /&gt;&amp;lt;pubDate&amp;gt;'.date(DATE_RFC822, mktime($dc[0], $dc[1], $dc[2], $dd[1], $dd[0], $dd[2])).'&amp;lt;/pubDate&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;'.htmlentities(bb_parse($row['message'])).'&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;author&amp;gt;'.$row['auteur'].'&amp;lt;/author&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;echo '&lt;br /&gt;&amp;lt;/channel&amp;gt;&lt;br /&gt;&amp;lt;/rss&amp;gt;';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; $contenuCache = ob_get_contents();&lt;br /&gt;&amp;nbsp;&amp;nbsp; ob_end_flush();&lt;br /&gt;&amp;nbsp;&amp;nbsp; $fd = fopen($fichierCache, &quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if ($fd) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite($fd,$contenuCache);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose($fd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp; include ($fichierCache);&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;END GeSHi&gt;&lt;/pre&gt;</description>
    
    
    
          <comments>http://xbright.codingteam.net/dotclear/index.php/post/2007/03/12/Creer-des-fils-RSS-avec-mise-en-cache#comment-form</comments>
      <wfw:comment>http://xbright.codingteam.net/dotclear/index.php/post/2007/03/12/Creer-des-fils-RSS-avec-mise-en-cache#comment-form</wfw:comment>
      <wfw:commentRss>http://xbright.codingteam.net/dotclear/index.php/feed/rss2/comments/10</wfw:commentRss>
      </item>
    
</channel>
</rss>