Article publié dans Linux Magazine 95, juin 2007.
Copyright © 2007 - Sébastien Aperghis-Tramoni
Cette année encore, le Nordic Perl Workshop a convaincu nombre de personnes venant d'une douzaine de pays différents de se déplacer, cette fois-ci à Copenhague, Danemark, pour se retrouver et discuter autour de Perl.
Respectant la coutume, les participants arrivés la veille se sont
rassemblés dans un pub pour trinquer avant le début de la conférence.
Après quelques bières au Globe Irish pub, la cuisine de celui-ci étant
déjà fermée, la vingtaine de mongers est allé dans un restaurant japonais
situé juste en face pour déguster des sushis ; ce n'est certes pas très
local, mais c'était quand même bon ;-)
.
Le lieu de la conférence est un bâtiment au sein du parc scientifique Symbion, situé dans le nord de Copenhague. Deux salles sont disponibles pour les présentations, et le grand hall permet de discuter durant les pauses qui séparent les présentations.
Je suis le premier à passer dans la seconde salle, où je présente comme au French Perl Workshop 2006 des techniques pour écrire du code Perl moderne qui reste compatible avec les vieux Perl.
Fred donne des conseils sur la gestion des balls of mud (littéralement
"boules de boue"), c'est-à-dire des programmes qui ont évolué organiquement,
développés par des personnes différentes sur une assez longue période,
avecla structure d'un gros plat de spaghetti. Il conseille d'utiliser
Perl::Tidy
et Perl::Critic
pour établir des revues de code
automatisées, et Smolder pour la centralisation de résultats de smoke
testers et la génération de rapports.
Léon présente les nouveautés de la prochaine version stable de Perl,
la 5.10. Entre autres, say()
(comme println()
), l'opérateur
defined-or qui permettra de remplacer $a || $b
par le plus correct
$a // $b
, state
qui permet de définir des variables d'état, le
moteur d'expressions régulières qui a été radicalement optimisé
(dérécursion, trie, Aho-Corasick), le support de pragmas lexicales
définies par l'utilisateur, un meilleur support de Win32.
À la fatidique question de savoir quand cette version sera disponible, Léon donne la réponse officielle : after lunch, before Christmas.
Innovation très sympathique, le déjeuner a lieu dans le hall, où un copieux buffet a été mis en place. C'est très appréciable étant donné que le parc Symbion n'est pas vraiment dans une zone où il y a des restaurants. Le traiteur ne s'est pas moqué des organisateurs, les plats étant vraiment bons. De même pour les pauses où des fruits, des gâteaux de couleur étrange (mais aussi très bons), et des carottes dont proposés.
Curtis décortique le protocole TAP, utilisé par les modules de test en
Perl et maintenant aussi dans d'autres langages comme Ruby, Python, PHP,
Java, C. Il montre ensuite TAP::Parser
, le futur remplaçant de
Test::Harness
, beaucoup plus modulaire, plus souple et plus extensible.
Quelques exemples suivent montrant dans une même suite des tests en Perl,
en Ruby et web.
Josh présente Perl::Critic
, un module d'analyse syntaxique du code
Perl qui permet de réaliser une revue de code et d'en établir des critiques
en fonction de politiques, en partie tirées du livre Perl Best Practices
de Damian Conway. Ces politiques sont elles-mêmes groupées en thèmes
qui peuvent être combinés afin de sélectionner facilement celles que
l'on veut appliquer à son code. Par exemple :
perlcritic -theme '(pbp || (bugs && security)) && !cosmetic' ...
Bien sûr les réglages peuvent être stockés dans un fichier de configuration,
ce qui permet de les partager et de les réutiliser par exemple depuis
Test::Perl::Critic
, qui permet d'intégrer Perl::Critic
à sa suite
de tests.
Erwan explique qu'il travaille pour une organisation qui maintient une très grosse application Perl, de plusieurs milliers de lignes de codes et comment ils ont montés un serveur d'intégration continu : à chaque commit dans le VCS, ce serveur récupère les sources et lance un smoke tester.
Leur principal problème était au niveau de la base de données, trop
complexe pour être simulée et trop grosse pour être regénérée à chaque
exécution. La solution adoptée a été de n'utiliser qu'un extrait de
cette base, le mettre dans une archive tar
et d'ajouter ce fichier
au VCS.
Abigail commence avec sa présentation sur l'avertissement
"%s (...) interpreted as function"
qui l'irrite parce qu'il se
produit de manière incohérente. Je le suis avec mes règles d'utilisation
de Sys::Syslog
, inspirées de celles de Fight Club. Anton Berezin
continue avec une démonstration de la méthode pour plier les t-shirts
en 2 secondes, suivie d'une explication détaillée avec schémas et
décomposition du geste.
brian d foy
vient avec une version courte de
pourquoi il ne faut pas utiliser Benchmark.pm
: There are lies,
damned lies, and benchmarks. Dmitry Karasik présente son module
Array::Slice
qui offre un itérateur de tableau pour le parcourir
par tranche (très utile). Josh McAdams termine en déballant tout le
matériel qu'il utilise ou a utilisé pour réaliser ses enregistrements
pour son podcast Perlcast. Quand on lui demande pourquoi il utilise
Skype pour les entretiens, il répond simplement qu'il n'a pas de
téléphone fixe.
Le soir, les participants se sont retrouvés dans un café sur l'île Brygge
pour boire un coup ensemble et discuter. Personnellement, je n'y suis allé
qu'après avoir fait un tour avec Salve J. Nilsen (l'organisateur de
NPW 2006 à Oslo, Norvège) et Claes Jakobsson (l'organisateur de NPW 2005
à Stockholm, Suède) au parc d'attractions Tivoli où pour faire des montagnes
russes et des auto-tamponeuses :-)
brian
explique comment créer un meilleur code de validation de données.
Déçu de Data::FormValidator
, il a décidé de créer Brick
, axé sur
un modèle avec une séparation entre la saisie et la validation, en le
concevant comme autant de petites briques (ce n'est qu'a posteriori qu'il
a réalisé que le Danemark était la patrie du LEGO).
Le fond du problème est que d'un côté seuls les programmeurs savent écrire du code, et que de l'autre seuls les hommes d'affaires connaissent les bonnes règles de validation. Il faut donc faire dialoguer les deux côtés pour arriver au meilleur résultat.
Nelson commence par montrer comment il transforme un say "hello world"
en code Java équivalent. Puis montre comment il génère du code Perl, SQL
et d'autres fichiers (JavaScript, CSS, TT2) à partir d'une tripotée de
fichiers XML décrivant les structures de données et le code.
Josh rappelle brièvement les bases de Perl::Critic
et que la distribution
est livrée avec 98 politiques, groupées en 16 catégories. Des politiques
supplémentaires sont disponibles sur le CPAN comme Perl::Critic::Bang
par Andy lester et Perl::Critic::More
par Chris Dolan qui va profiter
d'un financement de la Fondation Perl pour porter 20 politiques supplémentaires
de Perl Best Practices.
Josh explique ensuite comment créer sa propre politique et rappelle l'esprit
derrière celles déjà existante : innocent until proven guilty.
Il conseille l'utilisation de Perl::Critic::Utils
qui fournit plus d'une
trentaine de fonctions pour faciliter l'analyse des documents avec PPI,
qui n'est sinon pas très simple à maîtriser.
Richard montre les différentes manière d'invoquer le débugger Perl et en
détaille les principales commandes. Il fait remarquer qu'on peut utiliser
DDD et ActivePerl comme interfaces graphiques, plus agréables que l'interface
en ligne de commande. Il fait remarquer qu'on peut aussi débugger les
programmes mod_perl avec Apache::DB
et cite les autres outils de
débuggage comme Devel::Command
, Devel::Trace,
Devel::DProf
,
Devel::ebug
, ptkdb
.
brian
conseille de ne pas suivre les leaders (y compris lui-même) et
en conséquence recommande d'utiliser les vieux outils éprouvés au lieu des
nouveaux outils récents, tels Module::Build
auquel il trouve de nombreux
problèmes. Il introduit ensuite Module::Release
, son module qui effectue
une suite de vérifications sur une distribution avant dépôt sur le CPAN,
SourceForge, etc. Il fait remarquer que plusieurs CPAN Testers ayant des
systèmes totalement en vrac, si un module marche chez tous les CPAN Testers,
il marchera probablement n'importe où.
Jos fait à nouveau sa présentation sur les dessous de la syntaxe de Perl,
ce langage diabolique car trop dynamique et faiblement typé, ce qu'on appelle
des "fonctionnalités" ;-)
Only perl can parse Perl. Pour illustrer les bizarreries de la syntaxe
Perl, Adam Kennedy a écrit Acme::BadExample
, un module qui ne peut pas
être exécuté, et a mis au défi quiconque serait capable d'écrire un module
Anti::Code
capable de l'exécuter. Jos a relevé le défi et explique les
techniques utilisées :
ajout d'un coderef dans @INC
pour intercepter les appels à use
et require
surcharge de die()
par *CORE::GLOBAL::die = sub { warn @_ }
création d'une fonction sub FOO { last }
pour contrer un
print FOO "..."
qui est dans une longue boucle
création d'une surcharge sur les chaînes pour contrer l'utilisation d'une chaîne vide à la fin du module et renvoyer vrai malgré tout
Au final, Jos a réussi à "exécuter" Acme::BadExample
, et à réclamer
à Adam les bières qu'il promettait :-)
Erwan Lemonnier montre comment retarder le chargement de modules avec
use later
(mais il ne le conseille pas vraiment pour du code de
production). Abigail revient râler, cette fois-ci sur File::Copy
qui il est vrai a plusieurs défauts (mauvaise API, perte des attributs
du fichier copié). Je le suis avec ma présentation sur Acme::JavaTrace
histoire d'amuser un peu le public. Anton Berezin présente le Sub::PatMat
qui permet d'invoquer différentes versions d'une fonction suivant les
arguments qui lui sont passés (je crois que c'est un genre de MMD).
brian d foy
vient expliquer dans Fear and loathing in Perl les
longues heures que la communauté Perl lui prennent chaque soir. Enfin
Josh McAdams présente une méthodologie de développement agile utilisée
dans son entreprise, nommée Scrum (cf. Wikipédia pour une description
très complète).
Jonas B. Nielsen reprend la parole pour remercier les Mongueurs de Perl, qui ont fournit la plate-forme de conférence Act, leurs sponsors, les nombreuses personnes de l'équipe qui ont assurés le bon déroulement de la conférence, les conférenciers (34 présentations) et bien sûr tous les participants. Il annonce que le prochain Nordic Perl Workshop retournera à Stockholm, en Suède. Il convie enfin ceux qui ne partent que le lendemain à se retrouver dans un pub pour une dernière volée de bières.
Le Nordic Perl Workshop confirme encore à nouveau son côté à la fois très international et très convivial, par un emploi du temps moins serré que le YAPC Europe qui permet plus facilement aux participants de discuter entre eux. Cela a aussi permit à Josh McAdams de réaliser plusieurs interviews (dont une avec votre serviteur) dans de bonnes conditions (bien meilleures qu'à OSCON selon lui). On ne peut qu'inviter les hackers Perl français à faire le déplacement l'an prochain à Stockholm pour découvrir la chaleureuse ambiance des pays du Nord.
Nordic Perl Workshop 2007 - http://conferences.yapceurope.org/npw2007/
Les présentations plus des enregistrements audio - http://conferences.yapceurope.org/npw2007/wiki?node=Talks
Les photos de la conférence sur Flickr - http://www.flickr.com/photos/tags/npw2007/
Sébastien Aperghis-Tramoni, {Marseille,Sophia}.pm, <sebastien@aperghis.net>
Merci à Jonas B. Nielsen et Lars Thegler pour leurs photos.
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.