Le Journal de Nikrou - Mot-clé - perlCe journal n'est pas un blog!2024-01-09T15:52:56+01:00urn:md5:501048fab0be4d1978e39dded54e4f42DotclearEmmener son code en voyageurn:md5:77ca540bb55b590e0a1f1612d0ad62c62008-03-16T17:18:00+01:002008-03-16T18:30:55+01:00NicolasOutilsdebianlinuxperlsubversionsvkLorsque je développe sur un projet, j'utilise subversion et je fais souvent des "commit" pour éviter de garder dans mon répertoire de travail du code modifié et non propagé sur le serveur. Tout va bien lorsqu'on est connecté au serveur central mais si on est dans le train, à la campagne, dans un avion, ou dans les toilettes, cela devient plus problématique. <p>Le fait que subversion ne soit pas un gestionnaire de version distribué rend la connexion au serveur obligatoire pour faire des mises à jour. J'ai pris l'habitude faire des mises à jours régulières voire très régulières surtout sur des parties du code qui varient beaucoup. De ce fait, lorsque je ne suis pas connecté au serveur, je ne peux suivre cette politique de mise à jour. Mais heureusement <a href="http://svk.elixus.org/view/HomePage" hreflang="en">svk</a> est là. svk rend la gestion de subversion décentralisée. svk utilise le système de fichiers de subversion mais ajoute des foncitonnalités supplémentaires - surtout la gestion du mode déconnecté-.</p>
<p>Voici comment je l'utilise par exemple sur un projet que nous nommerons HelloWorld. Le dépôt se trouve sur http://svn.central-depot.com/svn/hello_world. Il faut bien évidemment commencer par installer svk, mais <a href="http://fr.wikipedia.org/wiki/Advanced_Packaging_Tool">apt</a> est mon ami et après le "apt-get install svk" qui va bien, le tour est joué!</p>
<p>Il faut ensuite initialiser le dépôt local:<br />
<code># svk depotmap --init</code></p>
<p>Faire un miroir du dépot central, en local:<br />
<code># svk mirror http://svn.central-depot.com/svn/hello_world //hello_world</code></p>
<p>Jusque là on n'a toujours aucun code en local! Il faut maintenant faire la synchronisation entre dépôt distant et dépôt local:<br />
<code># svk sync //hello_world</code></p>
<p>Désormais on peut travailler en mode déconnecté. On est à jour vis-à-vis du dépôt. On commence par se créer une branche locale:<br />
<code># svk cp //hello_world/trunk //local/hello_world</code></p>
<p>Le <em>//local</em> n'est qu'une convention. Vous pouvez évidemment nommer votre branche comme bon vous semble. Après on se crée une copie de travail tout comme on le ferait avec subversion sauf que les commandes sont du type "svk commande" au lieu de "svn commande" :<br />
<code># svk co //local/hello_world /path/to/my/work/hello_world</code></p>
<p>On peut ensuite faire des modifications. Pour finir un petit exemple de mise à jour vers le dépôt. Par exemple, pour faire une mise à jour (merge) entre mes modifications locales et le dépôt, je fais:<br />
<code>
# svk sync //hello_world (récupération éventuelle de modification)<br />
# svk merge -C -rREV1:REV2 //local/hello_world //hello_world/trunk (le <strong>-C</strong> correspond au dry-run)<br />
# svk merge -rREV1:REV2 //local/hello_world //hello_world/trunk
</code></p>
<p>Pour que tout soit parfait, il me manque un mode équivalent à <a href="http://www.xsteve.at/prg/emacs/psvn.el" hreflang="en">psvn</a> pour svk.</p>Faire des transformations xslt avec perlurn:md5:8088331f4f6d2c78b43d14f87d76e12b2008-02-19T11:51:00+01:002008-02-19T11:55:28+01:00NicolasPerlperlxmlxsl<p>Pour mettre en forme un document <acronym title="Extensible Markup Language">XML</acronym> et le présenter sur le web en tant que document html, le plus simple à mon sens est d'utiliser <acronym title="Extensible Stylesheet Language Transformations">XSLT</acronym>.</p>
<p>Il faut ensuite faire appel à un moteur XSL pour faire les transformations. Ma préférence va à la <a hreflang="en" href="http://xmlsoft.org/XSLT/">Libxslt</a> qui est une implémentation en <a href="http://fr.wikipedia.org/wiki/C_%28langage%29">C</a> de <acronym>XSLT</acronym> 1.0. J'utilise ensuite une interface en <a hreflang="en" href="http://www.perl.com/">perl</a> de la librairie Lixslt à travers le module <a hreflang="en" href="http://search.cpan.org/dist/XML-LibXSLT/LibXSLT.pm">XML::LibXSLT</a>.</p> <p>Imaginons le fichier <acronym>XML</acronym> suivant:</p>
<pre><?xml version="1.0" encoding="iso-8859-1"?><br /><articles><br /> <article><br /> <titre>Faire des transformations XSLT en perl.</titre><br /> <entete>perl est le couteau suisse du programmeur. On peut tout faire avec. Cet article va vous présenter le module XML::LibXSLT</entete><br /> <date>2007-12-26T17:56:17+00:00</date><br /> </article><br /> <article><br /> <titre>PHP6, c'est pour bientôt.</titre><br /> <entete>Alors que la version 5 de php n'est pas encore définitivement adopté par la communauté, la version 6 pointe le bout de son nez!</entete><br /> <date>2008-01-09T07:20:26+00:00</date><br /> </article><br /> <article><br /> <titre>Des exceptions en perl</titre><br /> <entete>Comment gérer les exceptions en perl ?</entete><br /> <date>2008-02-13T16:01:03+00:00</date><br /> </article><br /></articles></pre>
<p>En utilisant la feuille de style xslt suivante:</p>
<pre><?xml version="1.0" encoding="utf-8"?><br /><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><br /> <xsl:output method="html" version="1.0" indent="yes" encoding="utf-8" omit-xml-declaration="no"/><br /> <br /> <xsl:template match="/articles"><br /> <h1>Les derniers articles publiés</h1><br /> <xsl:apply-templates select="article"/><br /> </xsl:template><br /><br /> <xsl:template match="article"><br /> <div class="article"><br /> <h2><xsl:value-of select="titre"/></h2><br /> <span class="date"><xsl:value-of select="date"/></span><br /> <p><xsl:value-of select="entete"></xsl:value-of></p><br /> </div><br /> </xsl:template><br /></xsl:stylesheet></pre>
<p>On souhaite obtenir le résultat suivant:</p>
<pre><h1>Les derniers articles publiés</h1><br /><div class="article"><br /> <h2>Faire des transformations XSLT en perl.</h2><br /> <span class="date">2007-12-26T17:56:17+00:00</span><br /> <p>perl est le couteau suisse du programmeur. <br /> On peut tout faire avec. Cet article va vous présenter le module XML::LibXSLT</p><br /></div><br /><div class="article"><br /> <h2>PHP6, c'est pour bientôt.</h2><br /> <span class="date">2008-01-09T07:20:26+00:00</span><br /> <p>Alors que la version 5 de php n'est pas encore définitivement adoptée<br /> par la communauté, la version 6 pointe le bout de son nez!</p><br /></div><br /><div class="article"><br /> <h2>Des exceptions en perl</h2><br /> <span class="date">2008-02-13T16:01:03+00:00</span><br /> <p>Comment gérer les exceptions en perl ?</p><br /></div></pre>
<p>Le code qui permet de faire cela n'est pas bien complexe:</p>
<pre>#!/usr/bin/perl -w<br /><br />use warnings;<br />use strict;<br />use XML::LibXML;<br />use XML::LibXSLT;<br /><br />my $parser = XML::LibXML->new();<br />my $xslt = XML::LibXSLT->new();<br />$xslt->max_depth(2000);<br />my $source = $parser->parse_file('source.xml');<br />my $style_doc = $parser->parse_file('source.xsl');<br />my $stylesheet = $xslt->parse_stylesheet($style_doc);<br />my $result = $stylesheet->transform($source);<br />print $stylesheet->output_string($result);</pre>
<p>Rien de bien compliqué, en fait.</p>
<p>Note:<br />Si quelqu'un connait un moyen simple de colorer le code, je suis ouvert à toutes propositions. Merci d'avance.</p>