<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://aurelien.bompard.org/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>Gauret - Mot-clé - libre</title>
  <link>http://aurelien.bompard.org/</link>
  <atom:link href="http://aurelien.bompard.org/feed/tag/libre/rss2" rel="self" type="application/rss+xml"/>
  <description>Le site perso du Gauret : blog, liens divers, grouikeries.</description>
  <language>fr</language>
  <pubDate>Thu, 29 Dec 2011 23:11:07 +0100</pubDate>
  <copyright>CC-BY-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Mais c'est quoi l'ESS ?</title>
    <link>http://aurelien.bompard.org/post/2011/09/09/Mais-c-est-quoi-l-ESS</link>
    <guid isPermaLink="false">urn:md5:ddc986d03dd3f7b9d50c0d644bb907a6</guid>
    <pubDate>Fri, 09 Sep 2011 14:50:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Écologie et société</category>
        <category>libre</category>    
    <description>    &lt;p&gt;On parle beaucoup d&amp;#8217;Économie Sociale et Solidaire, mais finalement savez-vous ce que c&amp;#8217;est&amp;#160;? La &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/%C3%89conomie_sociale_et_solidaire&quot;&gt;page Wikipedia&lt;/a&gt; donne une courte définition, mais le novice que je suis ne sait pas toujours où elle commence et où elle s&amp;#8217;arrête.&lt;/p&gt;
&lt;p&gt;Heureusement, une amie &lt;em&gt;geekette&lt;/em&gt; travaille dans ce domaine, et a publié &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.limine.fr/spip.php?article18&quot;&gt;un article très clair sur le sujet&lt;/a&gt;. Merci Antoinette&amp;#160;!&lt;/p&gt;
&lt;p&gt;J&amp;#8217;en profite pour lui faire un peu de pub, puisqu&amp;#8217;elle travaille en tant qu&amp;#8217;indépendante dans la sociologie des organisations&amp;#160;: c&amp;#8217;est quelqu&amp;#8217;un de tout à fait équilibré, suffisamment geek pour comprendre une conversation d&amp;#8217;informaticiens (et c&amp;#8217;est pas toujours facile avec nous ;-)), mais aussi suffisamment persévérante pour détricoter les problèmes relationnels qui freinent les entreprises et les associations. Voilà, la pub s&amp;#8217;arrête là, si vous êtes intéressés &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.limine.fr&quot;&gt;voici son site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour en revenir à l&amp;#8217;économie sociale et solidaire, son lien avec les logiciels libres en terme de valeurs partagées n&amp;#8217;est plus à démontrer. Là aussi de très bons articles ont été écrits sur le sujet, je vous recommande &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.framablog.org/index.php/post/2009/12/01/economie-sociale-logiciel-libre&quot;&gt;cet article de Framasoft&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.scil.coop/2011/07/16/de-leconomie-sociale-et-solidaire-et-du-logiciel-libre/&quot;&gt;un article de la SCIL&lt;/a&gt; qui détaillent bien le sujet. On voit aussi que les associations de ces deux mondes commencent à se rapprocher, notamment avec la création de l&amp;#8217;&lt;a hreflang=&quot;fr&quot; href=&quot;http://ai2l.org/&quot;&gt;AI2L&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il semble clair aujourd&amp;#8217;hui qu&amp;#8217;il y a là un vaste terrain d&amp;#8217;entente, et que nous avons beaucoup à apprendre les uns des autres pour faire avancer nos causes communes. Affaire à suivre, et de près.&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2011/09/09/Mais-c-est-quoi-l-ESS#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2011/09/09/Mais-c-est-quoi-l-ESS#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/135</wfw:commentRss>
      </item>
    
  <item>
    <title>XHTML2ODT sort en version 1.3</title>
    <link>http://aurelien.bompard.org/post/2011/07/16/XHTML2ODT-sort-en-version-1.3</link>
    <guid isPermaLink="false">urn:md5:1071aeba5b98b4453db22cd42d539f21</guid>
    <pubDate>Sat, 16 Jul 2011 15:11:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>libre</category><category>odf</category>    
    <description>    &lt;p&gt;Après environ 1 an de développements épisodiques, voici une nouvelle version de la bibliothèque &lt;a hreflang=&quot;fr&quot; href=&quot;http://xhtml2odt.org/wiki/WikiStart/fr&quot;&gt;XHTML 2 ODT&lt;/a&gt;, permettant de convertir du HTML bien formé en &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/OpenDocument&quot;&gt;ODT&lt;/a&gt;, le format standard de bureautique.&lt;/p&gt;
&lt;p&gt;Parmi les nouveautés, des améliorations de conversion de certaines balises (&lt;code&gt;dl&lt;/code&gt; et &lt;code&gt;span&lt;/code&gt; par exemple), des améliorations dans la gestion des images, l&amp;#8217;ajout de paquets RPM et Deb, et la gestion du HTML généré par &lt;a hreflang=&quot;en&quot; href=&quot;http://www.lyx.org/&quot;&gt;Lyx&lt;/a&gt; et &lt;a hreflang=&quot;en&quot; href=&quot;http://elyxer.nongnu.org/&quot;&gt;Elyxer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En ce qui concerne le packaging, des paquets RPM et Deb sont générés par le &lt;a hreflang=&quot;en&quot; href=&quot;https://build.opensuse.org/project/show?project=home:abompard:xhtml2odt&quot;&gt;OpenSuSE Build Service&lt;/a&gt;, qui est un outil vraiment très intéressant quand on cible plusieurs distributions. Pour cette version, j&amp;#8217;ai aussi créé un &lt;em&gt;feed&lt;/em&gt; &lt;a hreflang=&quot;en&quot; href=&quot;http://0install.net/&quot;&gt;Zero Install&lt;/a&gt;. Zero Install est une méthode d&amp;#8217;installation d&amp;#8217;applications qui vient en parallèle du système natif de la distribution (mais &lt;a hreflang=&quot;en&quot; href=&quot;http://0install.net/distribution-integration.html&quot;&gt;qui s&amp;#8217;intègre avec&lt;/a&gt;). C&amp;#8217;est très utile pour des applications qui sont mis à jour très fréquemment, comme Firefox par exemple, ou pour distribuer une application sous une forme indépendante de la distribution. Je vous laisse creuser le sujet si ça vous intéresse, mais c&amp;#8217;est un ensemble d&amp;#8217;outils qui mériteraient d&amp;#8217;être plus connus.&lt;/p&gt;
&lt;p&gt;Rendez-vous sur &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org/wiki/WikiStart/fr&quot;&gt;le site du projet xhtml2odt&lt;/a&gt; ou directement sur &lt;a href=&quot;http://xhtml2odt.org/dl/&quot;&gt;la page de téléchargement&lt;/a&gt; pour récupérer la dernière version de la bibliothèque.&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2011/07/16/XHTML2ODT-sort-en-version-1.3#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2011/07/16/XHTML2ODT-sort-en-version-1.3#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/134</wfw:commentRss>
      </item>
    
  <item>
    <title>Comment écrire du code testable</title>
    <link>http://aurelien.bompard.org/post/2011/04/03/Comment-%C3%A9crire-du-code-testable</link>
    <guid isPermaLink="false">urn:md5:9c54a4543e74429ee502e3123d91253b</guid>
    <pubDate>Sun, 03 Apr 2011 20:55:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>libre</category><category>long</category>    
    <description>&lt;p&gt;Je vous propose les diapositives d&amp;#8217;une présentation que j&amp;#8217;ai réalisée récemment, concernant les méthodes de développement permettant d&amp;#8217;écrire un code facilement testable.&lt;/p&gt;    &lt;p&gt;Il y a quelques semaines, j&amp;#8217;ai visionné &lt;a hreflang=&quot;en&quot; href=&quot;http://www.youtube.com/watch?v=XcT4yYu_TTs&quot;&gt;la présentation&lt;/a&gt; de &lt;a hreflang=&quot;en&quot; href=&quot;http://misko.hevery.com/&quot;&gt;Miško Hevery&lt;/a&gt; chez Google à ce sujet, et j&amp;#8217;ai tout de suite été conquis par sa clarté et son pragmatisme. Avec son accord, j&amp;#8217;ai entrepris de la traduire et de l&amp;#8217;adapter en français.&lt;/p&gt;
&lt;p&gt;Mon objectif était avant tout de garder une présentation généraliste (indépendante du langage de programmation, du framework ou du projet), et de pouvoir l&amp;#8217;utiliser dans le cadre de mon travail pour essayer de diffuser les bonnes habitudes de la testabilité auprès de mes collègues.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ai finalement eu l&amp;#8217;occasion de donner cette présentation sur mon lieu de travail, qui s&amp;#8217;est très bien passée, mais dont l&amp;#8217;enregistrement n&amp;#8217;est malheureusement pas diffusable. Quoi qu&amp;#8217;il en soit, j&amp;#8217;ai pu tester &amp;#8220;en conditions réelles&amp;#8221; la qualité des diapos et l&amp;#8217;importance des concepts présentés par &lt;a hreflang=&quot;en&quot; href=&quot;http://misko.hevery.com/&quot;&gt;Miško&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si le sujet vous intéresse, j&amp;#8217;attache à ce billet le fichier ODP&lt;sup&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2011/04/03/Comment-%C3%A9crire-du-code-testable#pnote-1&quot; id=&quot;rev-pnote-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;  de la présentation. Les points à aborder oralement sont dans la section &amp;#8220;notes&amp;#8221; de chaque diapo, pensez-donc à la lire. De plus, certaines diapos utilisent des animations, il est donc préférable de lire la présentation en mode &amp;#8220;diaporama&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Quand j&amp;#8217;ai demandé à Miško si je pouvais réutiliser ses diapos, &lt;a hreflang=&quot;en&quot; href=&quot;http://misko.hevery.com/presentations/#comment-6990&quot;&gt;il n&amp;#8217;a demandé&lt;/a&gt; qu&amp;#8217;une citation de son nom. Dans le même esprit, je place donc cette présentation sous licence &lt;a hreflang=&quot;fr&quot; href=&quot;http://creativecommons.org/licenses/by/2.0/fr/&quot;&gt;Creative Commons Attribution (BY)&lt;/a&gt;, c&amp;#8217;est à dire que vous pouvez la réutiliser comme bon vous semble à condition de citer le nom des auteurs (Miško et moi).&lt;/p&gt;
&lt;p&gt;Pour pouvoir comprendre et suivre cette présentation, il faut connaître au minimum les concepts suivants&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Programmation Orientée Objet&lt;/li&gt;
&lt;li&gt;Quelques &lt;em&gt;design patterns&lt;/em&gt; courants (&lt;em&gt;Factory&lt;/em&gt; et &lt;em&gt;Singleton&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Tests unitaires&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les sujets abordés au cours de la présentation sont&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le développement piloté par les tests (ou &lt;em&gt;Test-driven development&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;L&amp;#8217;injection de dépendances&lt;/li&gt;
&lt;li&gt;La loi de Déméter&lt;/li&gt;
&lt;li&gt;La théorie des bugs (par Miško)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les exemples de codes utilisés dans la présentation sont en Python, parce que c&amp;#8217;est le langage que je maîtrise le mieux et celui avec lequel je travaille au quotidien, mais les concepts sont applicables à n&amp;#8217;importe quel autre langage. De plus, un des principaux exemples de code est disponible aussi en Java, pour ceux qui préfèrent.&lt;/p&gt;
&lt;p&gt;La présentation dure environ une heure. Si vous décidez de réutiliser ces diapos, vous n&amp;#8217;êtes évidemment pas obligés de m&amp;#8217;en faire part, mais j&amp;#8217;aimerais bien si possible avoir des retours pour les améliorer et intégrer les meilleures remarques.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&amp;#8220;&lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/blog/public/testable/Ecrire_code_testable.odp&quot;&gt;Comment écrire du code testable&lt;/a&gt;&amp;#8221; au format ODP&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/blog/public/testable/Ecrire_code_testable.svg&quot; onclick=&quot;window.open(this.href); return false;&quot;&gt;Une version lisible dans le navigateur web&lt;/a&gt; (nouvelle fenêtre), grâce à un procédé qui fera l&amp;#8217;objet d&amp;#8217;un prochain billet&amp;#8230; &lt;img src=&quot;/blog/themes/gauret/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;#8217;espère que ces diapos pourront vous aider à diffuser la &amp;#8220;bonne parole&amp;#8221; de la testabilité aussi largement que possible&amp;#160;!&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&amp;#160;:&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2011/04/03/Comment-%C3%A9crire-du-code-testable#rev-pnote-1&quot; id=&quot;pnote-1&quot;&gt;1&lt;/a&gt;] S&amp;#8217;ouvre avec &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.libreoffice.org/&quot;&gt;LibreOffice&lt;/a&gt; ou &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.openoffice.org/&quot;&gt;OpenOffice&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2011/04/03/Comment-%C3%A9crire-du-code-testable#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2011/04/03/Comment-%C3%A9crire-du-code-testable#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/132</wfw:commentRss>
      </item>
    
  <item>
    <title>De l'action sur le front de la conversion ODT</title>
    <link>http://aurelien.bompard.org/post/2010/08/13/De-l-action-sur-le-front-de-la-conversion-ODT</link>
    <guid isPermaLink="false">urn:md5:83b0f26c2184d3f585afa58d1969d438</guid>
    <pubDate>Fri, 13 Aug 2010 21:34:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>dotclear</category><category>libre</category><category>long</category><category>odf</category>    
    <description>&lt;p&gt;L&amp;#8217;été s&amp;#8217;est révélé très fructueux pour mes différents projets logiciels autour du format ODT. Voici un petit tour d&amp;#8217;horizon des dernières nouveautés.&lt;/p&gt;    &lt;h3&gt;Dokuwiki&lt;/h3&gt;
&lt;p&gt;J&amp;#8217;ai publié une nouvelle version de &lt;a hreflang=&quot;en&quot; href=&quot;http://www.dokuwiki.org/plugin:odt&quot;&gt;mon plugin d&amp;#8217;export ODT pour Dokuwiki&lt;/a&gt;. Le changement principal est la prise en compte de la coloration syntaxique fournie par Dokuwiki. Vous pouvez voir un exemple de ce que ça donne sur &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/playground/syntaxhighlighting&quot;&gt;cette page de mon wiki&lt;/a&gt;. Les couleurs du wiki et celles du document ODT ne sont pas exactement les mêmes, c&amp;#8217;est normal&amp;#160;: &lt;/p&gt;
&lt;p&gt;C&amp;#8217;est une fonctionnalité qu&amp;#8217;on m&amp;#8217;avait déjà demandé par le passé, et il s&amp;#8217;est avéré que ce n&amp;#8217;était pas si compliqué que ça à réaliser, principalement grâce au fait que la syntaxe CSS et la syntaxe des styles dans ODT XML sont très similaires. Ça c&amp;#8217;est un format bien conçu, chapeau.&lt;/p&gt;
&lt;p&gt;La nouvelle version du plugin est disponible en téléchargement depuis &lt;a hreflang=&quot;en&quot; href=&quot;http://www.dokuwiki.org/plugin:odt&quot;&gt;la page officielle du plugin&lt;/a&gt; ou &lt;a hreflang=&quot;en&quot; href=&quot;http://aurelien.bompard.org/projects/files/dokuwiki-odt/&quot;&gt;directement chez moi&lt;/a&gt;. Vérifiez la signature GPG si vous le voulez/pouvez.&lt;/p&gt;
&lt;h3&gt;XHTML2ODT&lt;/h3&gt;
&lt;p&gt;Mon projet principal autour du format ODT est clairement &lt;a hreflang=&quot;fr&quot; href=&quot;http://xhtml2odt.org/wiki/WikiStart/fr&quot;&gt;XHTML2ODT&lt;/a&gt;, le convertisseur XHTML vers ODT (comme son nom l&amp;#8217;indique &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; ). Au début de la semaine, j&amp;#8217;ai publié la version 1.0, ce qui est toujours une étape importante dans un projet logiciel. Le code qui la constitue a servi de fondation à deux plugins d&amp;#8217;export depuis plusieurs mois maintenant, et est très largement couvert par plus d&amp;#8217;une centaine de tests unitaires.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ai profité des jours suivants dans la semaine pour avancer le développement du projet sur certaines fonctionnalités qui semblaient intéressantes. Dans la même veine que pour le plugin Dokuwiki, j&amp;#8217;ai ajouté la prise en compte de la coloration syntaxique fournie par deux moteurs&amp;#160;: &lt;a hreflang=&quot;en&quot; href=&quot;http://pygments.org/&quot;&gt;Pygments&lt;/a&gt; (en Python) et &lt;a hreflang=&quot;en&quot; href=&quot;http://qbnz.com/highlighter/&quot;&gt;GeSHi&lt;/a&gt; (en PHP). Tout n&amp;#8217;est pas encore parfaitement géré, mais le fonctionnement de la coloration syntaxique pour GeSHi ouvre peut-être la voie à une gestion plus large des styles CSS inclus directement dans le code HTML, par le biais de la balise &amp;lt;style&amp;gt; (c&amp;#8217;est ainsi que GeSHi procède).&lt;/p&gt;
&lt;p&gt;Enfin, GeSHi a aussi une fonctionnalité amusante&amp;#160;: il peut numéroter les lignes du code. Cette fonctionnalité est aussi prise en compte et conservée lors de la conversion en ODT.&lt;/p&gt;
&lt;p&gt;Tout ce nouveau code a été publié dans la version 1.1 de &lt;a hreflang=&quot;fr&quot; href=&quot;http://xhtml2odt.org/wiki/WikiStart/fr/&quot;&gt;XHTML2ODT&lt;/a&gt;, que vous pourrez trouver sur &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org/dl/&quot;&gt;la page de téléchargement&lt;/a&gt;. Au passage, j&amp;#8217;en ai profité pour corriger un petit bug dans la conversion des espaces en mode préformaté, et pour ajouter un petit script de conversion en bash. Le but n&amp;#8217;est pas de l&amp;#8217;amener au même niveau de fonctionnalités que ses cousins Python et PHP, mais de montrer simplement comment mettre en œuvre les feuilles XSL.&lt;/p&gt;
&lt;p&gt;Enfin, autre changement non technique mais non moins important&amp;#160;: la licence s&amp;#8217;est assouplie. J&amp;#8217;ai passé le code de GPL v2 ou plus à &lt;a hreflang=&quot;fr&quot; href=&quot;http://org.rodage.com/lgpl.fr.html&quot;&gt;LGPL v2 ou plus&lt;/a&gt;. Concrètement, cela signifie que si vous insérer le code dans une autre application, et que vous la distribuez, vous n&amp;#8217;avez plus besoin de mettre votre application sous GPL. La seule contrainte restante est de publier les changements que vous avez fait sur le code XHTML2ODT lui-même, si vous en avez fait. C&amp;#8217;est tout, rien d&amp;#8217;autre.&lt;/p&gt;
&lt;p&gt;Dernière petite nouvelle, j&amp;#8217;ai écrit un article de quatre pages pour le magazine (papier&amp;#160;!) &lt;a hreflang=&quot;fr&quot; href=&quot;http://programmez.com/&quot;&gt;Programmez!&lt;/a&gt; au sujet d&amp;#8217;XHTML2ODT, il devrait sortir à la rentrée. Je vous tiendrai au courant, ça va de soi &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Export ODT pour Trac&lt;/h3&gt;
&lt;p&gt;
J&amp;#8217;ai publié une nouvelle version du &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/OdtExportPlugin&quot;&gt;plugin d&amp;#8217;export Trac&lt;/a&gt;, pour profiter des évolutions de la bibliothèque principale en ce qui concerne la coloration syntaxique. Vous pouvez voir le résultat en vous rendant sur la page &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org/wiki/WikiProcessors&quot;&gt;WikiProcessing&lt;/a&gt; (fournie par défaut dans Trac) et en cliquant tout en bas sur le lien &amp;#8220;OpenDocument&amp;#8221;. Ou plus directement, en &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org/wiki/WikiProcessors?format=odt&quot;&gt;cliquant ici&lt;/a&gt;. Tada&amp;#160;! Le petit bout de code en C au milieu de la page est colorisé.&lt;/p&gt;
&lt;p&gt;Dans cette nouvelle version, j&amp;#8217;ai aussi tiré parti du système d&amp;#8217;ajout de styles proposé maintenant directement dans XHTML2ODT, ce qui simplifie grandement le plugin. Si vous voulez faire un plugin d&amp;#8217;export ODT pour une appli en Python, le plugin Trac peut être une bonne source d&amp;#8217;inspiration.&lt;/p&gt;
&lt;h3&gt;Export ODT pour Dotclear&lt;/h3&gt;
&lt;p&gt;Là aussi, j&amp;#8217;ai publié une nouvelle version du &lt;a hreflang=&quot;fr&quot; href=&quot;http://plugins.dotaddict.org/dc2/details/odt&quot;&gt;plugin d&amp;#8217;export Dotclear&lt;/a&gt; pour profiter des avancées de la bibliothèque. Dotclear ne fait pas de coloration syntaxique par défaut, mais il existe un plugin pour cela, qui s&amp;#8217;appelle &lt;a hreflang=&quot;fr&quot; href=&quot;http://plugins.dotaddict.org/dc2/details/syntaxehl&quot;&gt;syntaxehl&lt;/a&gt;, et qui utilise GeSHi en dessous. Le plugin peut fonctionner avec ou sans numérotation des lignes, les deux modes sont traduits en ODT.&lt;/p&gt;
&lt;p&gt;Pour que ce soit plus parlant, voici un exemple de ce qui est produit par le plugin SyntaxeHL&amp;#160;:&lt;/p&gt;

&lt;pre class=&quot;php php&quot; style=&quot;font-family:inherit&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Commentaire */&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; syntaxeHl
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   
&amp;nbsp;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; static &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; registerFunc&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$wiki2xhtml&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;

    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;__FILE__&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'/geshi/geshi/'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000088;&quot;&gt;$od&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;opendir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;

        &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;readdir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$od&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   
            &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;is_file&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'.php'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;

            &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   
                &lt;span style=&quot;color: #000088;&quot;&gt;$lang&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'.php'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
                &lt;span style=&quot;color: #000088;&quot;&gt;$wiki2xhtml&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;registerFunction&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'macro:['&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$lang&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;']'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxeHl'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'parse'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;

            &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; static &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; parse&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;

    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;global&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$core&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$core&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;blog&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;syntaxehl&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;

&amp;nbsp;
        &lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/^(\[(.*)\]$)/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;$2&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;

        &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; GeSHi&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxehl_enable_klink'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_keyword_links&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;

        &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxehl_enable_linenum'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_line_numbers&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;GESHI_NORMAL_LINE_NUMBERS&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//if($settings-&amp;gt;get('syntaxehl_enable_css_classes')) $geshi-&amp;gt;enable_classes();&lt;/span&gt;

        &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_classes&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;



&lt;p&gt;Et maintenant, avec la numérotation des lignes&amp;#160;:&lt;/p&gt;


&lt;pre class=&quot;php php&quot; style=&quot;font-family:inherit&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Commentaire */&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; syntaxeHl&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; static &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; registerFunc&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$wiki2xhtml&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;__FILE__&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'/geshi/geshi/'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$od&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;opendir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;readdir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$od&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;            &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;is_file&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$dir&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'.php'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;            &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;                &lt;span style=&quot;color: #000088;&quot;&gt;$lang&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'.php'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;                &lt;span style=&quot;color: #000088;&quot;&gt;$wiki2xhtml&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;registerFunction&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'macro:['&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$lang&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;']'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxeHl'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'parse'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;            &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; static &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; parse&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;   &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;global&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$core&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$core&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;blog&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;syntaxehl&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/^(\[(.*)\]$)/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;$2&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; GeSHi&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$text&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxehl_enable_klink'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_keyword_links&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$settings&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'syntaxehl_enable_linenum'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_line_numbers&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;GESHI_NORMAL_LINE_NUMBERS&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//if($settings-&amp;gt;get('syntaxehl_enable_css_classes')) $geshi-&amp;gt;enable_classes();&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$geshi&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;enable_classes&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;



&lt;p&gt;Pour voir ce que cela donne en ODT, il vous suffit d&amp;#8217;exporter ce billet de blog (le bouton est en haut à droite). Sympathique, non&amp;#160;?&lt;/p&gt;
&lt;p&gt;Enfin, comme pour le plugin Trac, j&amp;#8217;en ai profité pour déléguer l&amp;#8217;ajout des styles à XHTML2ODT lui-même, ce qui simplifie grandement le code. Si vous cherchez à faire un plugin d&amp;#8217;export ODT en PHP, le plugin d&amp;#8217;export Dotclear est un bon candidat pour chercher l&amp;#8217;inspiration.&lt;/p&gt;
&lt;p&gt;Vous pouvez télécharger et installer le plugin depuis &lt;a hreflang=&quot;fr&quot; href=&quot;http://plugins.dotaddict.org/dc2/details/odt&quot;&gt;sa page sur DotAddict&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Flattr&lt;/h3&gt;
&lt;p&gt;Ça fait plusieurs semaines que j&amp;#8217;entends parler de &lt;a hreflang=&quot;en&quot; href=&quot;http://flattr.com/&quot;&gt;Flattr&lt;/a&gt;, ce nouveau service qui veut révolutionner le micro-paiement. Tuxicoman y a même consacré &lt;a hreflang=&quot;fr&quot; href=&quot;http://tuxicoman.jesuislibre.net/2010/08/flattr-la-solution-au-micropaiement.html&quot;&gt;un article&lt;/a&gt; assez élogieux. En deux mots, la différence par rapport à PayPal, c&amp;#8217;est qu&amp;#8217;on affecte avant toute chose un &amp;#8220;budget&amp;#8221;, c&amp;#8217;est à dire une somme fixe d&amp;#8217;argent, qui sera distribuée entre les différentes choses pour lesquelles vous aurez cliqué sur le bouton &amp;#8220;Flattr&amp;#8221;. Son concernés bien évidemment les logiciels (libres ou pas), mais aussi la musique, les vidéos, les écrits, et autres.&lt;/p&gt;
&lt;p&gt;À la fin du mois, votre budget mensuel est donc réparti, et si vous n&amp;#8217;avez cliqué sur rien il est distribué à des organisation caritatives. Le budget minimum est de deux euros, c&amp;#8217;est donc pas la mort. Si vous ne remplissez plus votre compte, il est désactivé temporairement bien sûr.&lt;/p&gt;
&lt;p&gt;Le fait d&amp;#8217;affecter un budget mensuel fixe, qui partira de toute façon, est à mon avis ce qui fait toute la différence. J&amp;#8217;ai décider de &lt;a hreflang=&quot;en&quot; href=&quot;https://flattr.com/profile/abompard&quot;&gt;me créer un compte&lt;/a&gt; pour voir ce que ça donne à l&amp;#8217;usage, et pour soutenir les projets qui me plaisent. Bien sûr, j&amp;#8217;en ai profité pour enregistrer les projets dont je suis l&amp;#8217;auteur, mais que ce soit clair&amp;#160;: je ne m&amp;#8217;attends pas à rouler sur l&amp;#8217;or du jour au lendemain &lt;img src=&quot;/blog/themes/gauret/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt; Toutefois, si mes quelques bouts de code vous plaisent et que vous avez un compte sur Flattr, vous trouverez tous les liens &lt;a hreflang=&quot;en&quot; href=&quot;https://flattr.com/profile/abompard&quot;&gt;sur mon profil&lt;/a&gt;. Les projets de conversion ODT ci-dessus sont normalement tous enregistrés.&lt;/p&gt;
&lt;h3&gt;À vous les studios&lt;/h3&gt;
Voilà pour le flash nouveautés concernant mes projets de conversion ODT, j&amp;#8217;espère que ces nouvelles versions vous plairont. N&amp;#8217;hésitez pas à remonter les bugs sur les trackers associés, que vous pourrez trouve à partir de &lt;a hreflang=&quot;en&quot; href=&quot;http://aurelien.bompard.org/projects/&quot;&gt;ma page d&amp;#8217;index&lt;/a&gt;.&lt;br /&gt;
&lt;p&gt;Bon, OK, certaines personnes pourraient objecter qu&amp;#8217;il y aurait de meilleures façons de passer ses vacances.&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2010/08/13/De-l-action-sur-le-front-de-la-conversion-ODT#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2010/08/13/De-l-action-sur-le-front-de-la-conversion-ODT#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/128</wfw:commentRss>
      </item>
    
  <item>
    <title>Une plate-forme pour mes développements</title>
    <link>http://aurelien.bompard.org/post/2010/07/25/Une-plate-forme-pour-mes-d%C3%A9veloppements</link>
    <guid isPermaLink="false">urn:md5:53f2fbaf2fdf1bb680f9dc97d90205b9</guid>
    <pubDate>Sun, 25 Jul 2010 19:22:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>libre</category><category>long</category>    
    <description>&lt;p&gt;Un bon gros weekend de geek. Mais il fallait le faire, ça commençait à trop tarder, avec &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/dev/contribs/accueil&quot;&gt;les petits plugins&lt;/a&gt; que j&amp;#8217;éparpille un peu partout, et les &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/dev/projets/accueil&quot;&gt;quelques développements que je réalise&lt;/a&gt;, il était temps que je mette en place une plate-forme pour assurer la maintenance de tout cela. Mon choix s&amp;#8217;est porté sur &lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt;, voici pourquoi.&lt;/p&gt;    &lt;h3&gt;Mais pourquoi, au fait&amp;#160;?&lt;/h3&gt;
&lt;p&gt;J&amp;#8217;avais installé &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/&quot;&gt;un wiki&lt;/a&gt; sur mon site il y a quelques mois, pour noter tout ce qui n&amp;#8217;a pas la même durée de vie qu&amp;#8217;un article de blog. Et j&amp;#8217;ai pris aussi l&amp;#8217;habitude de développer avec &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Git&quot;&gt;Git&lt;/a&gt;, en hébergeant le code source &lt;a hreflang=&quot;en&quot; href=&quot;http://gitorious.org/%7Eabompard&quot;&gt;chez Gitorious&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Gitorious est un très bon hébergeur de code source, basé sur Git donc, avec une interface assez jolie et ergonomique. Il est &lt;a hreflang=&quot;en&quot; href=&quot;http://gitorious.org/gitorious&quot;&gt;sous licence AGPL&lt;/a&gt; contrairement à son concurrent le plus direct, GitHub, qui est propriétaire. Vu mon penchant pour le logiciel libre, je me suis naturellement orienté vers Gitorious. Il a toutefois un défaut important&amp;#160;: il n&amp;#8217;y a pas de gestionnaire de tickets. C&amp;#8217;est prévu, mais pour l&amp;#8217;instant ils en sont à la conception, puisqu&amp;#8217;ils voudraient mettre en place un système vraiment décentralisé et communiquant. On pourrait ainsi référencer et suivre les tickets ouverts sur d&amp;#8217;autres instances de Gitorious.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est bien beau, mais pour l&amp;#8217;instant ça veut dire que je dois trouver un autre moyen pour gérer les tickets des logiciels &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/dev/projets/accueil&quot;&gt;que je développe&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/dev/contribs/accueil&quot;&gt;auxquels je contribue&lt;/a&gt;. Ce n&amp;#8217;est pas bien grave, il y a de nombreuses options en logiciel libre, donc j&amp;#8217;ai cherché celle qui me conviendrait le mieux. Parmi mes contraintes, il y a&amp;#160;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;être en développement actif&lt;/li&gt;
&lt;li&gt;être relativement simple et facile à manipuler, je n&amp;#8217;ai pas envie de noyer des rapporteurs de bugs potentiels&lt;/li&gt;
&lt;li&gt;la possibilité d&amp;#8217;utiliser &lt;a hreflang=&quot;en&quot; href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt;. Je n&amp;#8217;ai pas envie de forcer les
rapporteurs de bugs à ouvrir un n&lt;sup&gt;ième&lt;/sup&gt; compte à usage unique. En plus,
grâce à OpenID, je déporte la problématique de gestion du spam sur le fournisseur OpenID, ce qui m&amp;#8217;arrange pas mal.&lt;/li&gt;
&lt;li&gt;la possibilité de personnaliser sommairement l&amp;#8217;interface, pour l&amp;#8217;adapter au thème du reste du site.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Voici le résultat des courses (à mettre bien entendu en regard de mon besoin, qui n&amp;#8217;est pas forcément celui de tout le monde).&lt;/p&gt;
&lt;h3&gt;La gestion de ticket en logiciel libre&lt;/h3&gt;
&lt;p&gt;Tout d&amp;#8217;abord, j&amp;#8217;ai cherché ce qui m&amp;#8217;imposerait un minimum de dépendances. Sachant que mon espace web fonctionne très majoritairement en PHP/PostgreSQL, j&amp;#8217;ai cherché des gestionnaires de tickets sur les mêmes technos.&lt;/p&gt;
&lt;h4&gt;Flyspray&lt;/h4&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.flyspray.org/&quot;&gt;Flyspray&lt;/a&gt; est un gestionnaire de tickets léger en PHP. Il a l&amp;#8217;air pas mal du tout, mais son activité de développement semble relativement faible, et &lt;a hreflang=&quot;en&quot; href=&quot;http://bugs.flyspray.org/task/1174?project=1&quot;&gt;il n&amp;#8217;a pas encore OpenID&lt;/a&gt;, donc j&amp;#8217;ai laissé tomber.&lt;/p&gt;
&lt;h4&gt;Mantis&lt;/h4&gt;
&lt;p&gt;Attention, gros poids lourd. &lt;a hreflang=&quot;en&quot; href=&quot;http://www.mantisbt.org/&quot;&gt;Mantis&lt;/a&gt; est un gestionnaire de tickets très puissant, mais qui échoue sans réserves au point n°2. Peut-être que ce sera un outils parfait pour quelqu&amp;#8217;un dont c&amp;#8217;est le métier, qui va rester toute la journée devant et apprendre à le maîtriser, mais pour moi et le quidam moyen qui ouvrira des tickets chez moi, c&amp;#8217;est trop compliqué.&lt;/p&gt;
&lt;h4&gt;InDefero&lt;/h4&gt;
&lt;p&gt;Ça c&amp;#8217;est très intéressant. &lt;a hreflang=&quot;en&quot; href=&quot;http://www.indefero.net/&quot;&gt;InDefero&lt;/a&gt; est un petit dernier qui se veut être un clone de Google Code en PHP. Il a l&amp;#8217;air vraiment très bien, mais pour l&amp;#8217;instant &lt;a hreflang=&quot;en&quot; href=&quot;http://projects.ceondo.com/p/indefero/issues/108/&quot;&gt;il ne gère pas OpenID&lt;/a&gt;. Dommage, tout le reste avait l&amp;#8217;air très bien.&lt;/p&gt;
&lt;p&gt;Bon, ne voyant rien sortir en PHP/PostgreSQL, j&amp;#8217;ai décidé de relâcher la contrainte PHP, et d&amp;#8217;aller regarder ce qui se fait dans les autres langages.&lt;/p&gt;
&lt;h4&gt;Bugzilla&lt;/h4&gt;
&lt;p&gt;
Je connais pas mal, vu que c&amp;#8217;est ce qui est installé chez Fedora. Trop
complexe à utiliser, trop complexe à installer, et trop gourmand en ressources.&lt;/p&gt;
&lt;h4&gt;Redmine&lt;/h4&gt;
&lt;p&gt;Là, on a du très lourd. &lt;a hreflang=&quot;en&quot; href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt; est un gestionnaire de projets écrit en Ruby, qui fait exactement tout ce que je veux, et même plus.&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.orgrim.net/&quot;&gt; Le mec cool qui m&amp;#8217;héberge&lt;/a&gt; a en plus déjà installé un Redmine sur le serveur, mais vu que mes réglages sont assez différents (accès à tout le monde), il faudra que je m&amp;#8217;installe une autre instance. A priori pas un problème.&lt;/p&gt;
&lt;h4&gt;Trac&lt;/h4&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt;, je connais déjà. C&amp;#8217;est un très bon gestionnaire de projets, simple et efficace, écrit en Python (donc un plus pour moi), et pour lequel j&amp;#8217;ai déjà écrit plusieurs plugins. Lui aussi, il fait tout ce que je veux.&lt;/p&gt;
&lt;h3&gt;Redmine ou Trac&lt;/h3&gt;
&lt;p&gt;Les deux finalistes sont donc Redmine et Trac. Je me suis dit que c&amp;#8217;était l&amp;#8217;occasion d&amp;#8217;essayer Redmine, donc j&amp;#8217;ai essayé de comprendre comment c&amp;#8217;était installé sur la machine. Et bien, je dois dire que je n&amp;#8217;ai pas compris. C&amp;#8217;est manifestement installé dans Apache avec Passenger, mais à part ça je n&amp;#8217;ai rien réussi à recoller. En plus j&amp;#8217;ai essayé de ne pas toucher aux fichiers pour éviter de casser quoi que ce soit, ce qui fait qu&amp;#8217;au bout d&amp;#8217;une demi-heure de farfouillages et de recherches sur le net, j&amp;#8217;ai perdu la motivation. Ça marche, mais je ne comprends pas pourquoi, et ça j&amp;#8217;aime pas tellement.&lt;/p&gt;
&lt;p&gt;Donc bon, je me suis rabattu sur le bon vieux Trac que je connais bien maintenant. Finalement, le fait qu&amp;#8217;il soit écrit en Python fait que je peux mieux le maîtriser, et écrire des plugins si nécessaire, plugins qui pourront peut-être servir à d&amp;#8217;autres.&lt;/p&gt;
&lt;p&gt;Comme j&amp;#8217;ai plusieurs projets indépendants, je vais faire gérer plusieurs &amp;#8220;environnements&amp;#8221; à la même instance de Trac, ce qui économisera la mémoire. Cela se fait assez facilement grâce à la fonctionnalité correspondante de Trac, c&amp;#8217;est à dire &lt;code&gt;--env-parent-dir&lt;/code&gt; pour &lt;code&gt;tracd&lt;/code&gt; ou la variable d&amp;#8217;environnement &lt;code&gt;TRAC_ENV_PARENT_DIR&lt;/code&gt; dans &lt;code&gt;mod_wsgi&lt;/code&gt; (que j&amp;#8217;utilise). Toutes les instructions sont &lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/wiki/TracModWSGI&quot;&gt;sur le site de Trac&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Adaptations&lt;/h3&gt;
&lt;p&gt;Alors, reprenons le besoin&amp;#160;: mon code est &lt;a hreflang=&quot;en&quot; href=&quot;http://gitorious.org/%7Eabompard&quot;&gt;hébergé chez Gitorious&lt;/a&gt;, il ne me faut donc qu&amp;#8217;un gestionnaire de tickets. Comme Trac fournit un wiki, je vais m&amp;#8217;en servir à la place de celui de Gitorious, pour pouvoir référencer les tickets d&amp;#8217;incidents, et profiter des possibilités d&amp;#8217;adaptation graphique de Trac. Par contre, Trac fournit aussi un gestionnaire de code source, et ça je n&amp;#8217;en ai pas besoin.&lt;/p&gt;
&lt;h4&gt;Le navigateur de sources&lt;/h4&gt;
&lt;p&gt;Et oui, si mon code est hébergé chez Gitorious, ça serait bizarre de se servir de l&amp;#8217;explorateur de code de Trac. J&amp;#8217;ai donc cherché plusieurs solutions pour remplacer le navigateur de Trac par un lien vers Gitorious, mais rien ne s&amp;#8217;est révélé très satisfaisant. En plus de ça, la syntaxe wiki de Trac permet de référencer un fichier dans l&amp;#8217;arborescence des sources, avec un lien du type &lt;code&gt;[source:monfichier.ext]&lt;/code&gt;. Dans le meilleur des mondes, ces liens arriveraient directement dans Gitorious, sur le bon fichier, et même à la bonne ligne.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;allais quand même pas rater une occasion d&amp;#8217;améliorer le monde, non&amp;#160;? &lt;img src=&quot;/blog/themes/gauret/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt; Donc j&amp;#8217;ai fait &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/GitoriousPlugin&quot;&gt;un plugin Gitorious pour Trac&lt;/a&gt; qui fait exactement ça&amp;#160;: il remplace le lien du navigateur de sources par un lien vers Gitorious (il faut configurer le nom du projet cible), et intercepte tous les liens vers les sources en les réécrivant pour pointer vers le navigateur de Gitorious. Si vous êtes dans le même cas que moi, n&amp;#8217;hésitez pas à vous servir de mon plugin.&lt;/p&gt;
&lt;p&gt;Il y a des fonctionnalités de Trac qui n&amp;#8217;existent pas chez Gitorious, je n&amp;#8217;ai donc pas tout remplacé, mais c&amp;#8217;est déjà assez sympa.&lt;/p&gt;
&lt;h4&gt;Autres plugins&lt;/h4&gt;
&lt;p&gt;Trac dispose d&amp;#8217;un &lt;a hreflang=&quot;en&quot; href=&quot;http://bitbucket.org/Dalius/authopenid-plugin/wiki/Home&quot;&gt;plugin pour l&amp;#8217;authentification par OpenID&lt;/a&gt;, donc y&amp;#8217;a qu&amp;#8217;à installer. Il me fallait aussi évidemment &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/GitPlugin&quot;&gt;le plugin Git&lt;/a&gt;, histoire que mes modifications apparaissent dans la timeline. Et j&amp;#8217;en ai bien sûr profité pour installer &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/OdtExportPlugin&quot;&gt;mon plugin d&amp;#8217;export ODT&lt;/a&gt;. Enfin, j&amp;#8217;ai installé &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/TranslatedPagesMacro&quot;&gt;le plugin TranslatedPages&lt;/a&gt; pour faciliter la traduction des pages du wiki.&lt;/p&gt;
&lt;p&gt;La &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/&quot;&gt;quantité de plugins&lt;/a&gt; disponible pour Trac est vraiment phénoménale, on trouve tout ce qu&amp;#8217;on veut&amp;#160;!&lt;/p&gt;
&lt;h4&gt;Graphisme&lt;/h4&gt;
&lt;p&gt;Je n&amp;#8217;allais pas quand même laisser les visiteurs et les rapporteurs de bugs avec une rétine intacte, c&amp;#8217;est pas le genre de la maison. J&amp;#8217;ai donc modifié le template de Trac par défaut pour que mon espace de développement soit aussi moche que le reste de mon site. La cohérence, c&amp;#8217;est important. Les &lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/wiki/TracInterfaceCustomization&quot;&gt;instructions&lt;/a&gt; se trouvent sur le site de Trac, avec quelques exemples pour les cas classiques (ajouter une CSS, etc.).&lt;/p&gt;
&lt;p&gt;Le langage de templates utilisé par Trac est &lt;a hreflang=&quot;en&quot; href=&quot;http://genshi.edgewall.org&quot;&gt;Genshi&lt;/a&gt;, c&amp;#8217;est très proche du XML/XSL, ça me rappelle le langage &lt;a hreflang=&quot;en&quot; href=&quot;http://wiki.zope.org/ZPT/TAL&quot;&gt;TAL&lt;/a&gt; de &lt;a hreflang=&quot;en&quot; href=&quot;http://www.zope.org/&quot;&gt;Zope&lt;/a&gt;, donc c&amp;#8217;est marrant. En plus je commence à bien le connaître puisque je l&amp;#8217;utilise au boulot.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ai aussi modifié la page qui sert d&amp;#8217;index aux projets. Là aussi, les &lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/wiki/TracInterfaceCustomization#ProjectList&quot;&gt;instructions&lt;/a&gt; sont déjà toutes prêtes sur le site de Trac. Je vous laisse &lt;del&gt;souffrir&lt;/del&gt; &lt;a hreflang=&quot;en&quot; href=&quot;http://aurelien.bompard.org/projects/&quot;&gt;admirer&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Téléchargements&lt;/h3&gt;
&lt;p&gt;Il existe plusieurs moyens de proposer un espace de téléchargement de fichiers dans Trac. On peut tout simplement faire un lien vers un répertoire d&amp;#8217;Apache. On peut &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/NavAddPlugin&quot;&gt;ajouter un lien&lt;/a&gt; dans la barre de navigation principale pour pointer vers ce répertoire. On peut aussi attacher les fichiers à une page du wiki, mais ce n&amp;#8217;est pas ce qu&amp;#8217;il y a de plus pratique. Et évidemment, il y a &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/DownloadsPlugin&quot;&gt;trois&lt;/a&gt; &lt;a hreflang=&quot;en&quot; href=&quot;http://trac-hacks.org/wiki/TracDownloaderPlugin&quot;&gt;plugins&lt;/a&gt; &lt;a href=&quot;http://trac-hacks.org/wiki/TracSecDlPlugin&quot;&gt;différents&lt;/a&gt; pour gérer un véritable espace de téléchargement (Trac&amp;#160;: &lt;em&gt;there&amp;#8217;s a plugin for it&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Mais moi je voulais quelque chose d&amp;#8217;un peu différent&amp;#160;: je voulais pouvoir générer automatiquement des archives de la branche de développement toutes les nuits, je voulais pouvoir signer les publications, etc. J&amp;#8217;ai donc opté pour un dossier dans Apache, qui est rempli par un script externe. Ce script tourne toutes les nuits et créée deux archives (tar.gz et zip) pour chaque tag de chaque projet, ainsi que deux archives de la branche de développement. Il en profite pour générer un bel index, et un flux Atom. C&amp;#8217;est pas très compliqué, il y a peut-être 50 lignes de shell, donc pour l&amp;#8217;instant je ne le publie pas sauf si quelqu&amp;#8217;un se déclare intéressé. La génération du flux Atom est laissée à &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/projects/scripts#files2feed.py&quot;&gt;un autre script&lt;/a&gt; que j&amp;#8217;ai écrit.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Je dispose maintenant d&amp;#8217;une &lt;a hreflang=&quot;en&quot; href=&quot;http://aurelien.bompard.org/projects&quot;&gt;bonne plateforme d&amp;#8217;hébergement de code&lt;/a&gt;, simple, bien intégrée avec Gitorious, extensible, automatisée, et surtout que je connaît bien.&lt;/p&gt;
&lt;p&gt;Si jamais je décide de pousser l&amp;#8217;auto-hébergement plus loin et de me passer de Gitorious, Trac est tout à fait à même de répondre au besoin. Je ne tire pas un trait sur Redmine pour autant, peut-être qu&amp;#8217;un jour j&amp;#8217;aurais l&amp;#8217;occasion de l&amp;#8217;utiliser activement. En attendant, le fait que je sois capable d&amp;#8217;écrire des plugins pour Trac est quand même un facteur de poids dans la balance.&lt;/p&gt;
&lt;p&gt;Si vous voulez plus de détails sur l&amp;#8217;implémentation de tout ça, n&amp;#8217;hésitez pas à &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/contact&quot;&gt;me contacter&lt;/a&gt; (mais c&amp;#8217;est pas très sorcier au final).&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2010/07/25/Une-plate-forme-pour-mes-d%C3%A9veloppements#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2010/07/25/Une-plate-forme-pour-mes-d%C3%A9veloppements#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/127</wfw:commentRss>
      </item>
    
  <item>
    <title>Des scripts divers et variés</title>
    <link>http://aurelien.bompard.org/post/2010/05/14/Des-scripts-divers-et-vari%C3%A9s</link>
    <guid isPermaLink="false">urn:md5:511a3faf1a8bf18101631be4ac53dca9</guid>
    <pubDate>Fri, 14 May 2010 11:20:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>libre</category><category>long</category>    
    <description>&lt;p&gt;J&amp;#8217;ai (enfin) fait une page pour décrire les quelques scripts que j&amp;#8217;ai fait et qui pourraient servir à d&amp;#8217;autres. Pour faciliter la lecture des utilisateurs de flux RSS et pour éviter un clic aux autres, je vais tout recopier dans ce billet, mais la page de référence est &lt;a hreflang=&quot;fr&quot; href=&quot;http://aurelien.bompard.org/wiki/dev/projets/accueil#scripts_divers_et_varies&quot;&gt;sur mon wiki&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;
J&amp;#8217;ai écrit un certain nombre de scripts pour me faciliter la vie de
tous les jours. Et oui, comme tout bon informaticien, je suis prêt à
passer 8 heures à peaufiner un script qui me fera gagner 30 secondes
tous les mois… Mais bon, là n&amp;#8217;est pas la question. &lt;/p&gt;
&lt;h3&gt;Mes scripts&lt;/h3&gt;
&lt;p&gt;Il se trouve que je pense que certains de ces scripts pourraient
être utiles à d&amp;#8217;autres, donc dans le plus pur esprit du Logiciel Libre,
je les met à disposition sur &lt;a href=&quot;http://gitorious.org/abompard-scripts/abompard-scripts/trees/master&quot; hreflang=&quot;en&quot;&gt;cet espace de développement&lt;/a&gt;. Tous ces scripts sont sous licence &lt;a href=&quot;http://www.rodage.org/gpl-3.0.fr.html&quot; hreflang=&quot;fr&quot;&gt;GPL v3&lt;/a&gt;. Voici une petite présentation.
&lt;/p&gt;
&lt;h4&gt;backup-delicious.py&lt;/h4&gt;
&lt;p&gt;
Un simple script pour sauvegarder ses signets stockés sur delicious.com dans un fichier XML, au cas où Delicious aurait un problème (site cassé, perte de données, politique commerciale à la con, revente de Yahoo, etc.).
&lt;/p&gt;
&lt;h4&gt;birthdaysfromvcard.py&lt;/h4&gt;
&lt;p&gt;
Le script créé un fichier iCalendar avec les anniversaires des gens trouvés dans un fichier vCard (vcf).
&lt;/p&gt;
&lt;p&gt;
Très pratique pour ne plus oublier les anniversaires des ses connaissances (voire de sa famille…) &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;h4&gt;files2feed.py&lt;/h4&gt;
&lt;p&gt;
Le script créé un ficher Atom XML (équivalent RSS) à partir des derniers fichiers modifiés ou ajoutés dans un répertoire et ses sous-répertoires.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cas d&amp;#8217;utilisation&lt;/em&gt;&amp;#160;: je partage mes fichiers par le web, et j&amp;#8217;aimerais bien proposer un flux RSS pour les mises à jour et les nouveaux fichiers partagés (ici c&amp;#8217;est un flux Atom, mais c&amp;#8217;est le même principe).
&lt;/p&gt;
&lt;h4&gt;make-songs-list.py&lt;/h4&gt;
&lt;p&gt;
Le script créé un PDF à partir des chansons disponibles pour &lt;a href=&quot;http://performous.org/&quot;&gt;Performous&lt;/a&gt;, un excellent jeu de karaoké.
&lt;/p&gt;
&lt;p&gt;
Il utilise la pochette de l&amp;#8217;album si elle est dispo, et essaye d&amp;#8217;en
mettre un maximum sur le minimum de pages, pour qu&amp;#8217;il n&amp;#8217;y ait plus qu&amp;#8217;à
imprimer et à distribuer aux joueurs.
&lt;/p&gt;
&lt;h4&gt;podcast-transcode.py&lt;/h4&gt;
&lt;p&gt;
&lt;em&gt;Cas d&amp;#8217;utilisation&lt;/em&gt;&amp;#160;: je dispose d&amp;#8217;un lecteur de vidéos
portable que j&amp;#8217;utilise dans les transports en commun, mais il n&amp;#8217;est pas
assez puissant pour décoder les vidéos d&amp;#8217;aujourd&amp;#8217;hui (résolutions assez
élevées, codecs gourmands, etc.) Il faut donc que je convertisse et que
je redimensionne les vidéos des podcasts auxquels je suis abonné.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Fonctionnement&lt;/em&gt;&amp;#160;: le script prend en entrée un flux RSS, et convertit toutes les vidéos incluses en attachement au format AVI/DivX/MP3,
en les redimensionnant à la taille demandée. Une fois la conversion
effectuée, la balise d&amp;#8217;attachement est mise à jour pour pointer sur
l&amp;#8217;adresse de la vidéo convertie.
&lt;/p&gt;
&lt;p&gt;
Pour les vidéos de &lt;a href=&quot;http://www.ted.com/&quot; hreflang=&quot;en&quot;&gt;TED&lt;/a&gt;, le script peut même ajouter les sous-titres s&amp;#8217;ils sont dispo, et si le script &lt;code&gt;tedtalksubs.py&lt;/code&gt; est installé (c&amp;#8217;est à dire dans le &lt;code&gt;PATH&lt;/code&gt;). C&amp;#8217;est un autre de mes scripts, téléchargeable au même endroit (enfin, dans ce cas-là, dire “de &lt;em&gt;mes&lt;/em&gt; scripts” est un peu fort, puisque j&amp;#8217;ai quasiment tout pompé sur un autre).
&lt;/p&gt;
&lt;p&gt;
Le script &lt;code&gt;tedtalksubs.py&lt;/code&gt; est indépendant, il permet de lister, télécharger et convertir au format SRT les sous-titres des vidéos de &lt;a href=&quot;http://www.ted.com/&quot; hreflang=&quot;en&quot;&gt;TED&lt;/a&gt;.
&lt;/p&gt;
&lt;h4&gt;rss-mirror.py&lt;/h4&gt;
&lt;p&gt;
&lt;em&gt;Cas d&amp;#8217;utilisation&lt;/em&gt;&amp;#160;: quand je tombe sur une page web intéressante mais que je n&amp;#8217;ai pas le temps de lire là tout de suite, je la sauvegarde dans &lt;a href=&quot;http://www.instapaper.com/&quot; hreflang=&quot;en&quot;&gt;Instapaper&lt;/a&gt;. Le service me fournit ensuite un flux RSS
des pages en attente de lecture. Pour utiliser au mieux le temps que je
passe dans les transports en commun, j&amp;#8217;aimerais y lire ces pages, mais
je n&amp;#8217;ai pas d&amp;#8217;abonnement internet mobile. Par contre, j&amp;#8217;ai un lecteur
portable qui dispose d&amp;#8217;un navigateur web.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Fonctionnement&lt;/em&gt;&amp;#160;: le script prend un ou plusieurs flux RSS en entrée, et fait un miroir local de toutes les entrées en utilisant &lt;code&gt;wget&lt;/code&gt; ou &lt;code&gt;httrack&lt;/code&gt;.
Le niveau de profondeur des liens récupérés est configurable, mais par
défaut il ne prend que la page indiquée, pas les liens trouvés sur
cette page. Il créé ensuite un index des pages téléchargées en
utilisant le fabuleux &lt;a href=&quot;http://code.google.com/p/iui/&quot; hreflang=&quot;en&quot;&gt;iUI&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Le répertoire de téléchargement peut ensuite être synchronisé sur un
lecteur portable, qui n&amp;#8217;a alors besoin que d&amp;#8217;un navigateur web. Dans
mon cas, je l&amp;#8217;utilise avec &lt;a href=&quot;http://www.instapaper.com/&quot; hreflang=&quot;en&quot;&gt;Instapaper&lt;/a&gt;, mais n&amp;#8217;importe quel flux RSS peut être utilisé. Par exemple, des signets sur Delicious, les favoris de &lt;a href=&quot;http://tt-rss.org/&quot; hreflang=&quot;en&quot;&gt;Tiny Tiny RSS&lt;/a&gt; ou Google Reader, etc.).
&lt;/p&gt;
&lt;p&gt;
C&amp;#8217;est en quelque sorte le lecteur de flux hors-ligne du pauvre &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; &lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Voilà, si vous avez des commentaires, des remarques, ou des propositions d&amp;#8217;amélioration à faire sur ces scripts, n&amp;#8217;hésitez pas. Une petite description est disponible en en-tête de chacun d&amp;#8217;eux, et vous pouvez les lancer avec &lt;code&gt;--help&lt;/code&gt; pour connaître les options disponibles. Ils nécessitent tous au moins python 2.5, les autres dépendances étant spécifiques à chacun des scripts.&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2010/05/14/Des-scripts-divers-et-vari%C3%A9s#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2010/05/14/Des-scripts-divers-et-vari%C3%A9s#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/124</wfw:commentRss>
      </item>
    
  <item>
    <title>XHTML2ODT est annoncé sur LinuxFR</title>
    <link>http://aurelien.bompard.org/post/2010/04/12/XHTML2ODT-est-annonc%C3%A9-sur-LinuxFR</link>
    <guid isPermaLink="false">urn:md5:e98074b6217048533287ce0ec7cff84f</guid>
    <pubDate>Mon, 12 Apr 2010 08:08:00 +0200</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>libre</category><category>odf</category>    
    <description>    &lt;p&gt;Pour essayer de faire connaître &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org&quot;&gt;XHTML2ODT&lt;/a&gt;, j&amp;#8217;ai écrit &lt;a hreflang=&quot;fr&quot; href=&quot;http://linuxfr.org/2010/04/12/26720.html&quot;&gt;un article sur LinuxFR&lt;/a&gt; qui en fait la promotion, ou du moins qui annonce à tout le monde que ça existe. Oui oui, écrire un article sur LinuxFR, c&amp;#8217;est parler au monde. Rien que ça &lt;img src=&quot;/blog/themes/gauret/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Je rappelle brièvement de quoi il s&amp;#8217;agit&amp;#160;: XHTML2ODT a pour objectif de convertir une page web (HTML) en document &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/OpenDocument&quot;&gt;ODT&lt;/a&gt;, éditable ensuite par tous les traitements de texte qui utilisent ce format, notamment &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.openoffice.org/&quot;&gt;OpenOffice&lt;/a&gt;. Pour ce faire, il s&amp;#8217;appuie sur un document OpenOffice &amp;#8220;modèle&amp;#8221;, dans lequel on peut définir les styles que l&amp;#8217;on veut.&lt;/p&gt;
&lt;p&gt;Comme il n&amp;#8217;y a pas de gestionnaire de bugs pour l&amp;#8217;instant, vous pouvez éventuellement utiliser les commentaires de cet article pour ça. Mais bon, il faudrait que j&amp;#8217;en installe un quand même, ce serait plus propre. Je pencherais bien pour un &lt;a hreflang=&quot;en&quot; href=&quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt;, mais maintenant faut voir si mon gentil hébergeur sera d&amp;#8217;accord&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt;&amp;#160;: Finalement j&amp;#8217;ai fait un site dédié pour &lt;a hreflang=&quot;en&quot; href=&quot;http://xhtml2odt.org&quot;&gt;XHTML2ODT&lt;/a&gt;, avec Trac. Le code reste hébergé par Gitorious pour l&amp;#8217;instant.&lt;/p&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2010/04/12/XHTML2ODT-est-annonc%C3%A9-sur-LinuxFR#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2010/04/12/XHTML2ODT-est-annonc%C3%A9-sur-LinuxFR#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/123</wfw:commentRss>
      </item>
    
  <item>
    <title>Nouveau plugin pour Dotclear : notes de bas de page</title>
    <link>http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page</link>
    <guid isPermaLink="false">urn:md5:f208f2b400c2bb5def4466991bd76a93</guid>
    <pubDate>Fri, 26 Feb 2010 22:14:00 +0100</pubDate>
    <dc:creator>Aurélien</dc:creator>
        <category>Développement</category>
        <category>dotclear</category><category>libre</category>    
    <description>    &lt;p&gt;Quand on écrit un billet avec Dotclear, on dispose de deux modes&amp;#160;: le mode &amp;#8220;&lt;em&gt;wiki&lt;/em&gt;&amp;#8221; ou le mode &amp;#8220;&lt;em&gt;xhtml&lt;/em&gt;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;En mode &lt;em&gt;wiki&lt;/em&gt;, on dispose d&amp;#8217;une syntaxe codifiée et simplifiée, mais il faut apprendre cette syntaxe, et ce qui est affiché à l&amp;#8217;écran est très différent de ce qui sera affiché sur le site ensuite. Il y a quelques temps, je préférais ce mode de rédaction (c&amp;#8217;est plus rigolo &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; ), mais c&amp;#8217;est moins facile d&amp;#8217;accès pour les débutants, et après tout, on ne fait pas des programmes que pour les informaticiens.&lt;/p&gt;
&lt;p&gt;Le second mode affiche le texte dans la zone d&amp;#8217;édition avec le formatage qu&amp;#8217;il aura à l&amp;#8217;affichage final, un peu comme votre traitement de texte préféré&lt;sup&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#pnote-1&quot; id=&quot;rev-pnote-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;. En plus, et c&amp;#8217;est important pour moi, il y a un onglet &amp;#8220;source&amp;#8221; qui permet de voir le XHTML généré, et éventuellement de faire des retouches, ou d&amp;#8217;ajouter des blocs de code.&lt;/p&gt;
&lt;p&gt;Mais voilà, le mode &lt;em&gt;wiki&lt;/em&gt; a beaucoup plus de fonctionnalités que ce qui est repris dans la barre de formatage du mode &lt;em&gt;xhtml&lt;/em&gt;. Notamment, il y en a une que j&amp;#8217;aime bien utiliser&amp;#160;: les notes de bas de page&lt;sup&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#pnote-2&quot; id=&quot;rev-pnote-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;. En mode wiki, on entoure la note par des symboles &amp;#8220;&lt;code&gt;$$&lt;/code&gt;&amp;#8221;, et Dotclear génère automatiquement l&amp;#8217;appel de note, la note de bas de page, et les liens entre les deux. C&amp;#8217;est très pratique, je voulais retrouver cette possibilité en mode &lt;em&gt;xhtml&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ai donc fait un plugin pour Dotclear qui ajoute un bouton à la barre de formatage, et qui génère les appels de note, la zone de notes de bas de page, les liens entre les notes, tout en s&amp;#8217;occupant d&amp;#8217;incrémenter le numéro de note à chaque fois. Le plugin s&amp;#8217;appelle &lt;a hreflang=&quot;en&quot; href=&quot;http://lab.dotclear.org/wiki/plugin/footnotesToolbar&quot;&gt;footnotesToolbar&lt;/a&gt;, et il est disponible &lt;a hreflang=&quot;en&quot; href=&quot;http://lab.dotclear.org/wiki/plugin/footnotesToolbar&quot;&gt;sur le lab Dotclear&lt;/a&gt;. Si vous pensez qu&amp;#8217;il peut vous être utile, n&amp;#8217;hésitez pas à le télécharger et à me donner votre avis&amp;#160;!&lt;/p&gt;
&lt;p&gt;Bonne rédaction &lt;img src=&quot;/blog/themes/gauret/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt;&amp;#160;: j&amp;#8217;ai aussi ajouté un bout de code pour lui faire afficher les notes de bas de page au survol de l&amp;#8217;appel de notes. C&amp;#8217;est une très bonne idée que j&amp;#8217;ai piquée à &lt;a hreflang=&quot;en&quot; href=&quot;http://www.dokuwiki.org/&quot;&gt;Dokuwiki&lt;/a&gt;, sur conseil d&amp;#8217;&lt;em&gt;antistress&lt;/em&gt; (voir commentaires ci-dessous).&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&amp;#160;:&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#rev-pnote-1&quot; id=&quot;pnote-1&quot;&gt;1&lt;/a&gt;] par exemple &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.openoffice.org/&quot;&gt;OpenOffice.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#rev-pnote-2&quot; id=&quot;pnote-2&quot;&gt;2&lt;/a&gt;] c&amp;#8217;est ça&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#comment-form</comments>
      <wfw:comment>http://aurelien.bompard.org/post/2010/02/25/Nouveau-plugin-pour-Dotclear-%3A-notes-de-bas-de-page#comment-form</wfw:comment>
      <wfw:commentRss>http://aurelien.bompard.org/feed/atom/comments/120</wfw:commentRss>
      </item>
    
</channel>
</rss>
