Poum - Mot-clé - PerlDe la qualité logicielle, méthodes agiles et outils logiciels libres ...2023-08-25T16:53:12+01:00Poumurn:md5:6b5c625a812aff31ffa1cd1f3648e14bDotclearInstaller le package DBIx::Class sur Centos 6urn:md5:8cbe94a71452d7488eea2d8922c9fd032017-05-14T16:26:00+02:002017-05-14T16:26:00+02:00PoumTrucs & astucesCentos 6dockerEPELPerlperl-DBIx-Class <p><img src="http://philippe.poumaroux.free.fr/public/perl-logo.gif" alt="Perl" title="Perl, fév. 2012" /> <img src="http://philippe.poumaroux.free.fr/public/centos.png" alt="Centos" title="Centos, sept. 2014" /></p>
<p>Afin de construire une image <a href="http://philippe.poumaroux.free.fr/index.php?tag/docker">docker</a> pour travailler sur une application <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a> devant s'exécuter sur une machine <a href="http://philippe.poumaroux.free.fr/index.php?tag/Centos%206">Centos 6</a>, j'ai été confronté à l'impossibilité d'installer le package <a href="http://philippe.poumaroux.free.fr/index.php?tag/perl-DBIx-Class">perl-DBIx-Class</a> du fait d'une dépendance manquante avec le paquet <code>perl-MooseX-Types-JSON</code>.</p>
<p>Certes, il eût été possible d'installer le paquet via cpan, mais une autre contrainte est que la machine Centos n'a pas accès à Internet, donc pas à CPAN. Du coup, j'aurais été obligé de télécharger la distribution à la main - tout à fait faisable - mais également toutes ses dépendances, directes et indirectes.... Et là, j'ai reculé.</p>
<p>Précisons que <code>perl-DBIx-Class</code> nécessite d'activer <a href="http://philippe.poumaroux.free.fr/index.php?tag/EPEL">EPEL</a>, mais que notre paquet fugueur, bien évidemment, n'y figure pas.</p>
<p>A grands coups de recherche sur Internet, j'ai fini par trouver le paquet <code>perl-MooseX-Types-JSON</code> sur http://choonrpms.mirror.choon.net.
D'où la résolution suivante:</p>
<ol>
<li>installer epel</li>
<li>installer les paquets <code>perl-DBI</code> et <code>perl-MooseX-Types</code> dont on sent bien qu'ils seront des dépendances nécessaires</li>
<li>installer le paquet <code>perl-JSON-XS</code> dont on s'aperçoit après une première tentative que <code>perl-MooseX-Types-JSON</code> en a besoin</li>
<li>télécharger le rpm <a href="http://choonrpms.mirror.choon.net/centos/6/choonrpms/x86_64/perl-MooseX-Types-JSON-0.02-3.choon.centos6.noarch.rpm" hreflang="en" title="Le rpm sur choon">ici</a></li>
<li>installer notre rpm</li>
<li>installer finalement <code>perl-DBIx-Class</code></li>
</ol>
<p>ce qui donne:</p>
<pre> yum install epel-release
yum install perl-DBI perl-MooseX-Types perl-JSON-XS
wget http://choonrpms.mirror.choon.net/centos/6/choonrpms/x86_64/perl-MooseX-Types-JSON-0.02-3.choon.centos6.noarch.rpm
rpm -i perl-MooseX-Types-JSON-0.02-3.choon.centos6.noarch.rpm
yum install perl-DBIx-Class</pre>
<p>Voilà, en espérant que ça vous évitera de perdre autant de temps que moi pour surmonter cet obstacle si tant est que vous ayez besoin de vous plier aux mêmes contraintes que moi.</p>Regroupement par mois de données avec DBIx::Classurn:md5:dad339afc352926aac4d0c4ac6e979932016-12-11T22:51:00+01:002017-03-05T12:48:35+01:00PoumDéveloppementDBIx::ClassPerlPostgresql<p><img src="http://philippe.poumaroux.free.fr/public/perl-logo.gif" alt="Perl" title="Perl, fév. 2012" /></p>
<p>Supposons que nous ayons une base de données <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgresql">Postgresql</a>, une table activite qui contient, entre autre:</p>
<ul>
<li>jour: une date au format jj/mm/aaaa</li>
<li>duree: une durée en heures</li>
<li>projet: l'identifiant d'un projet éventuellement nul</li>
<li>personne: l'identifiant d'une personne</li>
</ul>
<p>Cette table permettant de relever l'activité des personnes sur des projets doit être utilisée pour fournir un récapitulatif du total des heures par mois et par personnes depuis un script <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a> utilisant <a href="http://philippe.poumaroux.free.fr/index.php?tag/DBIx%3A%3AClass">DBIx::Class</a>.</p> <p>Il faut donc faire une requête des lignes ayant une référence projet, en transformant la date du jour au format mmaaaa et en les regroupant par date toujours au format mmaaaa, par personnel et par projet. Simple ! Donc voici:</p>
<pre>my @heures = $db->resultset('Activite')->search({
'-and' => [
jour => { '>=', $debut },
jour => { '<=', $fin },
],
'projet.id_ref' => { '!=', undef },
},{
select => [
'projet', { SUM => 'duree' }, \"to_char(jour, 'MMYYYY')",
'personne'
],
+as => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet duree mois personne/" title="qw/projet duree mois personne/">qw/projet duree mois personne/</a>,
group_by => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/mois personne projet/" title="qw/mois personne projet/">qw/mois personne projet/</a>,
order_by => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet jour personne/" title="qw/projet jour personne/">qw/projet jour personne/</a>,
join => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/'projet'" title="'projet'">'projet'</a>,
})->all();</pre>
<p>Précisons que <code>$debut</code> et <code>$fin</code> sont les dates entre lesquelles on veut effectuer la recherche.</p>
<p><ins>Explication</ins>: on recherche les lignes entre <code>$debut</code> et <code>$fin</code> ayant une référence projet et on récupère le projet, la somme des durées, la date transformée au format mmaaaa et la référence des personnes.
On appelle mois la date transformée au format mmaaaa et on fait un group by sur ce nouveau champ.</p>
<p>Je précise également que les projets et les personnes sont enregistrées dans des tables auxquelles les champs éponymes font référence.</p>
<p><strong>Mais ça ne fonctionne pas</strong> car avec DBIx::Class, le group by n'utilise pas la version transformée de mois mais celle du champ source jour.
On obtient donc une ligne par jour, par projet et par personne au lieu d'une ligne par mois, par projet et par personnel.</p>
<p>La solution consiste à reporter dans Group By la même expression de transformation que dans le Select. Voici une version qui fonctionne:</p>
<pre>my @heures = $db->resultset('Activite')->search({
'-and' => [
jour => { '>=', $debut },
jour => { '<=', $fin },
],
'projet.id_ref' => { '!=', undef },
},{
select => [
'projet', { SUM => 'duree' }, \"to_char(jour, 'MMYYYY')", 'personne'
],
+as => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet duree mois personne/" title="qw/projet duree mois personne/">qw/projet duree mois personne/</a>,
group_by => [
\"to_char(jour, 'MMYYYY')", 'personne', 'projet'
],
order_by => [
\"to_char(jour, 'MMYYYY')", 'projet', 'personne'
],
join => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/'projet'" title="'projet'">'projet'</a>,
})->all();</pre>Sortie de Subversion 1.7.5urn:md5:054568f973061bd38e6a1b5e92455ef12012-05-18T11:14:00+02:002012-10-19T18:46:54+02:00PoumNouvelles versionsEclipsePerlPythonRuby<p><a href="http://philippe.poumaroux.free.fr/index.php?tag/Subversion">Subversion</a> version 1.7.5 vient de sortir et est <a href="http://subversion.apache.org/download/#recommended-release" hreflang="en" title="Téléchargement de la dernière version de Subversion">à récupérer ici</a>. On y trouve essentiellement des corrections de bugs, des améliorations de performance ou la prise en compte de httpd 2.4. L'occasion également de se souvenir qu'il existe des bindings <a href="http://philippe.poumaroux.free.fr/index.php?tag/Ruby">Ruby</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/Python">Python</a> et <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a>. Pour les utilisateurs d'<a href="http://philippe.poumaroux.free.fr/index.php?tag/Eclipse">Eclipse</a>, voir <a href="http://subclipse.tigris.org" hreflang="en" title="subclipse">subclipse</a> pour une prise en charge de subversion.</p> <p>Voici la liste complète des modifications...</p>
<h2>Modifications visibles pour l'utilisateur:</h2>
<h3>Corrections côté client et serveur:</h3>
<ul>
<li>http: signale la révision supprimée lors d'une suppression pendant une mise à jour (r1327474)</li>
</ul>
<h3>Corrections côté client:</h3>
<ul>
<li>évite une faute de segmentation potentielle lors de la canonisation de propriétés (r1296369)</li>
<li>amélioration de la gestion de la mémoire et des fichiers avec les externes (bug 4130)</li>
<li>serf: converstion des assertions en erreur "MERGE failed" (r1302417)</li>
<li>correction d'un comportement indéfini lors de fusion inversée multi-segment (bug 4144)</li>
<li>correction de l'utilisation potentielle de mémoire déjà libérée lors d'une opération diff (r1311935)</li>
<li>amélioration des performance de l'analyse de la racine d'une copie de travail (r1306334)</li>
<li>cmdline: correction d'une faute de segmentation lors du traitement des paramètres de 'svn diff' (r1311702)</li>
<li>correction d'une régression de 1.6 lors de la mise à jour avec l'option --depth (issue #4136)</li>
<li>propset: évite un comportement non défini dans le chemin d'erreur (r1325361)</li>
<li>réinitialisation des instructions sqlite, partiellement pour compatibilité avec sqlite-3.7.11 (r1328846, et al)</li>
<li>correction d'une assertion lors de 'svn diff -r BASE:HEAD ^/trunk' (issue #4161)</li>
<li>notification sur 'update' supprime simplement les verrous sur les fichiers (r1329876)</li>
<li>neon: correction d'une utilisation potentielle de mémoire libérée lors des commits (r1329388)</li>
<li>'status --xml' n'affiche pas les suppressions de dépôt correctement (bug #4167)</li>
<li>correction d'une assertion sur svn:externals avec la lettre du volume sous Windows (bug #4073)</li>
<li>correction de 'svn update --depth=empty' sur des serveurs 1.4 (bug #4046)</li>
<li>gestion des svn:date manquant signalées gracieusement par svnserve (r1306111)</li>
<li>correction des fusions qui ajoutent d'abord un sous-arbre puis le supprime (bug #4166)</li>
<li>correction d'une régression lors de la récupération de fichiers externes (bug #4087)</li>
<li>n'ajoutent pas d'informations de fusion fallacieuses dans des cas limites de fusion (bug #4169)</li>
<li>amélioration des performances de l'état sur de grandes copies de travail (bug #4178)</li>
</ul>
<h3>Corrections de bugs côté serveur:</h3>
<ul>
<li>correction d'une corruption de FSFS non fatale lors de commits concurrents (issue #4129)</li>
<li>mod_dav_svn: lève une erreur lors d'un MERGE d'une ressource inexistante (r1298343)</li>
<li>mod_dav_svn: prise en charge de la compilation/de l'exécution sous httpd-2.4 (r1232267)</li>
<li>mod_dav_svn: interdiction des dépôts BDB avec les événements MPM de httpd (bug #4157)</li>
</ul>
<h3>Autres améliorations d'outils et corrections de bugs:</h3>
<ul>
<li>gestion d'emacs: mise à jour pour dsvn.el and vc-svn.el (r1200896, et al)</li>
</ul>
<h2>Modifications visibles pour le développeur:</h2>
<h3>Générales</h3>
<ul>
<li>exemples windows pour les scripts de distribution: inclusion de svnrdump (r1295007)</li>
<li>correction de l'exécution de la série de tests avec jsvn (r1335555)</li>
</ul>
<h3>Bindings:</h3>
<ul>
<li>tests swig-py tests: évite FAILs sur l'ordre de hachage APR (r1296137, r1292248)</li>
<li>tests swig-rb tests: évite FAILs sur l'ordre de hachage APR (r1310535, r1310594)</li>
<li>swig-pl: détection Perl améliorée dans gen-make.py (r1291797, r1291810)</li>
</ul>Selenium IDEurn:md5:2f9954bf78e176f4991bec1bf600d1d92012-01-27T10:34:00+01:002012-01-31T17:02:01+01:00PoumQualité logicielleHTMLJavaJUNitPerlPHPpluginsRubySeleniumSelenium CoreSelenium IDETestNGteststests fonctionnelsXPATH<p><img src="http://philippe.poumaroux.free.fr/public/selenium-ide-logo.png" alt="Selenium IDE" title="Selenium IDE, janv. 2012" /></p>
<p><a href="http://philippe.poumaroux.free.fr/index.php?tag/Selenium%20IDE">Selenium IDE</a> est en environnement de développement intégré pour les scripts <a href="http://philippe.poumaroux.free.fr/index.php?tag/Selenium">Selenium</a>. Il est implémenté comme une extension de Firefox et permet d'enregistrer, de modifier et de corriger des <a href="http://philippe.poumaroux.free.fr/index.php?tag/tests%20fonctionnels">tests fonctionnels</a>. Selenium IDE intègre tout <a href="http://philippe.poumaroux.free.fr/index.php?tag/Selenium%20Core">Selenium Core</a> ce qui permet d'enregistrer et de rejouer rapidement des <a href="http://philippe.poumaroux.free.fr/index.php?tag/tests">tests</a> dans un environnement réel.</p>
<p>Selenium IDE n'est pas qu'un outil d'enregistrement. Il est possible d'utiliser ses capacités d'enregistrement mais aussi de modifier à la main les scripts. Via l'autocomplétion et la capacité de déplacer rapidement les commandes, Selenium IDE est l'environnement idéal pour créer des tests Selenium, quel que soit le style choisi.</p> <p>Fonctionnalités:</p>
<ul>
<li>enregistrement et rejeu facile</li>
<li>sélection intelligente des champs en utilisant l'ID (id), le nom (name) ou <a href="http://philippe.poumaroux.free.fr/index.php?tag/XPATH">XPATH</a> selon les besoins</li>
<li>autocomplétion pour toutes les commandes Selenium</li>
<li>débogage et points d'arrêt</li>
<li>sauvegarde/export des tests en <a href="http://philippe.poumaroux.free.fr/index.php?tag/HTML">HTML</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/Ruby">Ruby</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/Java">Java</a> (<a href="http://philippe.poumaroux.free.fr/index.php?tag/JUNit">JUNit</a> 3 & 4, <a href="http://philippe.poumaroux.free.fr/index.php?tag/TestNG">TestNG</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/PHP">PHP</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a> ...)</li>
<li>modifiable via le fichier user-extensions.js</li>
<li>option pour vérifier automatiquement le titre de chaque page</li>
<li>personnalisation facile via des <a href="http://philippe.poumaroux.free.fr/index.php?tag/plugins">plugins</a>
<ul>
<li>ajout de nouvelles fonctions à l'API</li>
<li>modification des fonctionnalités existantes</li>
<li>capacité de formats personnalisés et d'export</li>
<li>gestion des fichiers de mise à jour du plugin update.rdf</li>
<li>ajout de nouvelles stratégie de localisation</li>
</ul></li>
</ul>
<p>Les tests réalisés peuvent ensuite être exportés en JUnit par exemple, puis appelés depuis maven ou Jenkins. Ils peuvent être exécutés en local ou sur une grille Selenium, permettant ainsi de tester en une fois plusieurs configurations différentes (OS, navigateurs)...</p>Bienvenue !urn:md5:b4e86dd02d935bef10e84344002dd6292012-01-15T11:22:00+00:002012-01-22T14:30:00+00:00PoumQualité logicielleApachedéveloppementfrançaisIntranetJavaJavascriptLDAPlicence libreoutilsPerlPHPPostgresproductivitéqualitéRESTSGBDSOAPweb <p>Ce blog est destiné à partager les connaissances que j'aurais pu acquérir dans le domaine du <a href="http://philippe.poumaroux.free.fr/index.php?tag/d%C3%A9veloppement">développement</a>, plus principalement dans la recherche de l'amélioration de la <a href="http://philippe.poumaroux.free.fr/index.php?tag/productivit%C3%A9">productivité</a> et donc, de la <a href="http://philippe.poumaroux.free.fr/index.php?tag/qualit%C3%A9">qualité</a> logicielle.... Une particularité: l'ajout de la contrainte de travailler en équipe sur un <a href="http://philippe.poumaroux.free.fr/index.php?tag/Intranet">Intranet</a> non connecté à l'Internet.</p>
<p>Les principaux langages évoqués seront <a href="http://philippe.poumaroux.free.fr/index.php?tag/Java">Java</a> et <a href="http://philippe.poumaroux.free.fr/index.php?tag/PHP">PHP</a> sans oublier <a href="http://philippe.poumaroux.free.fr/index.php?tag/Javascript">Javascript</a>, les développements étant principalement <a href="http://philippe.poumaroux.free.fr/index.php?tag/web">web</a>. Mais comme il faut bien se faire plaisir, il y aura aussi du <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a> !</p>
<p>Le choix des <a href="http://philippe.poumaroux.free.fr/index.php?tag/outils">outils</a> est réalisé selon les critères suivants:</p>
<ul><li><a href="http://philippe.poumaroux.free.fr/index.php?tag/licence%20libre">licence libre</a></li>
<li>projet actif</li>
<li>localisé en <a href="http://philippe.poumaroux.free.fr/index.php?tag/fran%C3%A7ais">français</a></li>
<li>authentification <a href="http://philippe.poumaroux.free.fr/index.php?tag/LDAP">LDAP</a> possible</li>
<li>api web <a href="http://philippe.poumaroux.free.fr/index.php?tag/SOAP">SOAP</a> ou <a href="http://philippe.poumaroux.free.fr/index.php?tag/REST">REST</a></li>
<li>intégrable avec les autres outils si nécessaire</li>
<li>cohérence technologique: outil si possible en Java ou PHP sur <a href="http://philippe.poumaroux.free.fr/index.php?tag/SGBD">SGBD</a> <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgres">Postgres</a> si nécessaire et via serveur <a href="http://philippe.poumaroux.free.fr/index.php?tag/Apache">Apache</a></li>
</ul>
<p>A bientôt !</p>