Article publié dans Linux Magazine 119, septembre 2009.
Copyright © 2009 - Sébastien Aperghis-Tramoni
Retour à Paris pour cette sixième édition des Journées Perl, organisées à la Cité des Sciences et de l'Industrie les 12 et 13 juin 2009, où plus d'une centaine de participants se sont déplacés pour venir écouter quelques unes de la trentaine de présentations proposées.
Après les retrouvailles, ou les découvertes des nouvelles têtes, et un petit déjeuner avec force croissants et café pour bien démarrer, Sébastien Deseille ouvre la conférence en présentant l'association et en indiquant le programme. Il laisse ensuite la parole aux sociétés sponsors pour qu'elles se présentent. Avec un remerciement particulier à Ubicast, qui s'est chargé de la captation vidéo.
Cette présentation semble appréciée, aussi bien des débutants que des développeurs confirmés, car elle constitue un petit guide des modules du CPAN, classés par domaine, le tout mâtiné de petites anecdotes de la communauté.
Ces développeurs de la société RTGI sont partis du constat que le CPAN offre un grand nombre d'outils pour le développeur, mais pas de notion de relation entre personnes, entre auteurs de modules, comme on en dispose sur les sites de réseaux sociaux. Ils ont donc décidés de partir des informations disponibles sur le CPAN pour construire des graphes pondérés et ont mis le tout en forme à l'aide de Gephi pour obtenir de belles cartes qu'ils ont imprimées en format A0.
La première carte s'appuie sur les dépendances des modules entre eux,
et permet de voir émerger des distributions critiques comme libwww-perl
et URI
au centre, un îlot isolé centré autour de Tk dans un coin,
et l'apparition d'une zone Modern Perl dans un autre avec Moose,
Catalyst et DBIx::Class.
La seconde carte s'appuie aussi sur les dépendances des modules, mais
fournit cette fois une vision par auteur. Sans surprise, on retrouve
les regroupements précédents avec Gisle Aas (mainteneur entre autres
de libwww-perl
, URI
, HTML::Parser
), Dave Rolsky (DateTime,
Moose), Slaven Rezic (Tk) et les auteurs de Perl moderne (Jesse
Vincent, Yuval Kogman) de l'autre.
La troisème carte est construite à partir d'un crawl partant des sites web des auteurs. Les sites ainsi trouvés ont été classés en cinq catégories : les sites de la communauté Perl, les blogs des développeurs Perl, les sites personnels, le monde open-source non-Perl et les sociétés commerciales. Très esthétique, cette carte permet de voir la structure de la communauté Perl et son intégration dans le web, qui montre qu'elle est bien plus ouverte sur le monde extérieur que ce qu'on pense généralement.
Sans surprise, ces cartes ont créé l'attraction et chacun de chercher son identifiant PAUSE ou son site web sur la carte correspondante. Elle sont aussi disponibles en ligne sur http://cpan-explorer.org sous licence CC-BY-NC.
Il rappelle tous les services mis à disposition des auteurs de modules Perl : accès aux dernières versions, documentation formatée en HTML, navigation dans les distributions, gestion des bugs avec RT, rapport des CPAN Testers, indication des dépendances, et bien d'autres encore.
La mention des CPAN Testers fait réagir des auteurs dans la salle, d'une part à propos de la difficulté de tester des modules qui interfacent une biblioth!que externe (mais c'est au Makefile.PL ou Build.PL de détecter sa présence ou non), et d'autre part à propos des environnements de tests non totalement "propres" et qui peuvent biaiser les résultats (ce à quoi on objecte que les CPAN Testers qui proposent des environnements parfaitement propres comme la taïwanaise Imacat sont tout autant sujets de critiques).
Après cet intermède, Olivier reprend et définit ce qu'il entend par environnement hostile : vieux Perl, plateforme exotique, droits restreints.
Olivier définit Perl 5.6 comme « très hostile » (ce qui peut
faire sourire quand certains auteurs comme votre serviteur maintiennent
encore du code compatible avec Perl 5.4). Ceci en raison des vieilles
versions de CPAN.pm
et de ExtUtils::MakeMaker
, l'absence de
Module::Build
, et donc l'impossibilité d'utiliser les fonctionnalités
ajoutées depuis et qui simplifient la configuration et l'installation
des extensions.
Une plateforme exotique, trop peu répdanue, signifie de manière logique
peu ou prou de support de la commauté ou des CPAN Testers. L'absence
d'un compilateur C est un grave handicap pour installer certaines extensions
importantes, même s'il en existe souvent des versions pur Perl. L'absence
de certains outils comme wget
ou tar
est aussi assez pénalisante.
On peut noter que malgré les apparences, Windows n'entre plus dans cette
catégorie grâce à Strawberry Perl qui intègre tous les outils nécessaires.
La restrictions des droits concerne en premier lieu le fait de n'avoir
pas d'accès adinistrateur, imposant ainsi d'installer les extensions dans
un répertoire local. Mais il peut aussi s'agir d'un accès réseau limité
depuis les machines cibles. Suivant les cas, on peut contourner cela
avec un proxy, un tunnel SSH vers le proxy ou avec un mini CPAN.
S'il faut passer par un proxy avec une authentification complexe, Olivier
recommande d'écrire une commande équivalente à wget
ou curl
en Perl ;
ainsi, pour passer les proxies utilisant NTLM, il a écrit curlie
, codé
en JavaScript et qui utilise donc les paramètres de connexion d'Internet
Explorer.
Laurent présente rapidement le processus des tribunaux genevois et explique qu'un grand nombre de compétences actuellement gérées au niveau du canton vont être transféré au niveau fédéral en 2010, d'où un gros chantier de transition.
La migration va se réaliser progressivement, par lots fonctionnels successifs, la nouvelle application (web) cohabitant avec l'ancienne (en mode terminal). Une soin particulier a été accordé à la navigation au clavier (grâce à DHTML/Ajax) pour éviter de forcer les utilisateurs à utiliser leur souris, et leur offrir ainsi une expérience d'interface proche de l'ancienne (mais en mieux). L'application s'architecture autour d'un moteur assez générique qui se paramètre par un arbre YAML pour répondre aux besoins des 37 différentes juridictions.
Laurent explique que Perl a été retenu pour son historique positif sur des productions moins critiques, sa forte productivité grâce au CPAN, et l'aspect dynamique du langage qui le rend plus souple et permet de créer à la volée classes, méthodes et composants divers.
Il montre les modules utilisés et écrits, dont certains ont été publiés sur le CPAN, et conclue en notant que s'il n'y a aucun problème du point de vue technologique, il y a par contre un problème de recrutement, car il est difficile de trouver des développeurs Perl. Il note aussi quelques soucis sous Win32, et l'absence d'un pilote pour DBI de la base de données BASIS+ (assez exotique) contournée grâce à JDBC et un proxy DBI.
Quelqu'un dans le public, qui travaille dans un hôpital où est aussi utilisé un moteur applicatif en COBOL, demande s'ils ont fait appel à des ergonomes pour l'interface. Laurent répond que non, mais qu'ils ont par contre fait tester par des utilisateurs chevronnés.
Patrick explique que Net::DRI
veut être au DNS ce que DBI est aux
bases de données. Il explique en effet qu'avec l'ouverture totale des
TLD, on attend plus de 6000 nouveaux domaines à partir de 2010. Avec
l'augmentation mécanique du nombre de registrars que cela va provoquer,
le besoin se fait plus pressant de disposer d'API unifiées pour
interroger et acheter des domaines, ce qui est loin d'être le cas
actuellement : Gandi propose du XML-RPC, OVH du SOAP/WSDL. De même,
il existe plusieurs protocoles d'interrogation (Whois, DAC/DAS, IRIS
DCHK).
Net::DRI
(DRI pour Domain Registration Interface) est une boîte
à outils supportant ces différentes API et offrant une interface unifiée,
ainsi qu'un shell permettant une utilisation rapide. Patrick montre
comment réaliser des opérations dans le shell et par des appels de
fonctions.
Rafaël (mainteneur officiel de la version de développement de Perl),
explique comment et pourquoi l'opérateur smart match (~~
) a été
changé en Perl 5.10.1 par rapport à 5.10.0. Voir l'article consacré
à Perl 5.10 dans GLMF n°104 pour plus de détails.
En premier lieu, l'opérateur est maintenant non commutatif, ce qui
le rend véritablement prédictif, la règle qui s'applique étant
déterminée par l'opérande droite. Les objets ne sont maintenant
autorisés que si leur classe fournit une méthode pour surcharger
~~
.
Quelques fonctionnalités ont de plus été ajoutées, notamment le
support des intervalles (4.5 ~~ 3..5
) et la distribution du
test quand l'opérande droite est un tableau et l'opérande gauche
une valeur scalaire.
Marc explique que depuis qu'il a découvert Zsh, il a depuis abandonné
Bash, ainsi que Perl pour beaucoup de ses besoins. Il montre plusieurs
exemples d'utilisation de Zsh qui seraient assez complexes à traduire
en Bash, en utilisant des fonctionnalités de Zsh comme la gestion des
arguments comme de vrais tableaux, le support de motifs de fichiers
récursifs (**
), ou des mécanismes d'interpolation avancés qui vont
jusqu'au produit cartésien.
Comme Laurent l'a expliqué dans sa précédente présentation, les applications web développées pour les tribunaux genevois sont assez complexes et se traduisent fondamentalement par des structures d'arbres. Laurent et ses collègues ont donc développé, et publié sur le CPAN, plusieurs modules permettant la manipulation de tels arbres de données.
DBIx::DataModel
, un ORM orientée UML ;
Data::Domain
, qui s'appuie sur une description déclarative des
données pour les valider ;
GvaScript, une bibliothèque JavaScript avec une syntaxe déclarative WebForms, pour la gestion d'événements et la génération de formulaires et de composants DHTLM avancés.
Serge présente l'architecture de VMware et explique qu'il va nous montrer comment utiliser le VI Perl Toolkit. Il rappelle que Perl a toujours été apprécié chez VMware, et avait même été le premier langage permettant de piloter les machines virtuelles, avec la Perl VMware API, maintenant surclassée par le VI SDK qui supporte plusieurs langages avec une API homogène grâce à des appels internes réalisés en SOAP.
Serge indique que VMware fournit une appliance virtuelle sous Linux avec tous les kits déjà installés et un accès complet aux machines virtuelles. Il montre quelques exemples de code pour avoir l'état des machines virtuelles d'un parc, les démarrer, les éteindre, etc. Il termine en notant que WBEM est le futur de SNMP.
Philippe présente un module qu'il a récemment développé, Test::Database
,
dont l'objectif est d'offrir aux auteurs de tests un moyen simple pour
indiquer que leurs tests ont besoin d'une base de données, avec des
critères sur le moteur ou la version souhaité. Symétriquement, le
module permet à la personne qui exécute les tests de dire précisément
les bases de données disponibles qui peuvent être utilisés comme bacs
à sable, au moyen d'un fichier de configuration.
Après cette présentation est organisée une AGE (Assemblée Générale Extraordinaire) de l'association des Mongueurs de Perl, pour régler certaines affaires importantes.
La soirée se prolonge pour la plupart des participants dans un restaurant non loin de la Cité, sauf pour votre serviteur, parti écouter la chanteuse japonaise Kokia.
Philippe explique brièvement le fonctionnement interne d'un dépôt Git, un graphe orienté acyclique où tout objet est représenté par un fichier. Son problème est qu'il est maniaque, et aime bien qu'un historique soit le plus exact et le plus petit possible, y compris quand celui-ci est le résultat de la fusion de plusieurs dépôts. Pour ce faire, il fusionne donc aussi les historiques et construit un unique arbre d'historique en réordonnant chronologiquement les commits. Ainsi, un de ses collègues qui avait 17 dépôts SCCS convertis en Git a maintenant un unique historique sur lequel travailler.
Philippe reconnaît par contre que le mécanisme fast export
utilisé par ce module n'est pas le plus optimale, mais que ce
dernier et sa commande git-stitch-repo
a l'avantage de rendre
les manipulations simples même pour qui ne connaît pas Git
intimement.
Damien avait déjà présenté son programme rt-console
en 2007,
un client RT en mode console. Il n'était déjà pas satisfait des
outils existants sur le CPAN pour utiliser Curses en Perl, et
comme la situation n'allait pas magiquement se corriger, il a
décidé d'écrire Curses::Toolkit
, en suivant une approche
similaire de celles des toolkits graphiques comme Gtk et Qt,
avec widgets dynamiques, boucle d'évènements puissante, support
de thèmes.
Il présente les différents composants : fenêtre racine, fenêtres, widgets, packers. Les fenêtres ont des coordonnées absolues, les widgets des relatives. Damien montre avec des démos ce qui est déjà fonctionnel.
Le point fort de Curses::Toolkit
est sa boucle d'évènements.
Contrairement aux modules existants, il a séparé cette boucle
de la phase de rendu par une couche d'abstraction, Mainloop,
ce qui autorise l'utilisation de plusieurs moteurs de boucle
(POE, AnyEvent, etc). Préférant lui-même POE, il a écrit
POE::Component::Curses
. Tous les évènements sont ensuite
envoyés à Curses::Toolkit
, qui les envoie aux widgets avec
un EventListener qui correspond.
Il y a une gestion du focus pour déterminer le point de propagation des évènements, les widgets pouvant ou non se déclarer focusable. Ainsi, une bordure ou un label ne seront pas focusables alors qu'un bouton peut décider de l'être. Damien montre une démo où il crée des boutons à la volée, qui sont eux-mêmes focusables (il peut les sélectionner avec la touche tabulation) et les activer pour créer de nouveaux boutons.
Le futur du module consiste à corriger quelques bugs, le terminer pour le publier sur le CPAN, ajouter de nouveaux widgets, et probablement passer à Møøse pour bénéficier de son support des rôles.
Stéphane brosse un rapide historique de Perl, et rappelle la remarque amusée de Larry Wall comme quoi c'est la partie la plus cryptique du langage, à savoir les expressions régulières, qui a été la plus copiée, en particulier avec PCRE.
Il rappelle que si les expressions régulières ont la délicieuse
apparence d'un marteau capable de tout, il y a de nombreux cas
d'utilisation pour lesquelles elles ne sont pas adaptées et pour
lesquels il existent des analyseurs spécialisés (HTML, XML).
Elles ne sont par contre pas adaptées pour l'analyse syntaxique,
où il vaut mieux utiliser des modules conçus pour (Parse::Yapp
,
Parse::RecDescent
).
Perl 6 intègre la syntaxe et la sémantique des expressions régulières
(maintenant appelés règles) au sein même du langage, offrant ainsi
un cadre complet pour la définition de grammaires. Celles-ci sont
des classes, et les règles des méthodes. Les règles sont introduites
par des mots-clés qui spécifient leur comportement : regex
pour
les règles générales, token
pour définir des lexèmes, rule
pour
définir des règles d'analyse syntaxique s'appuyant sur les lemmes.
Markdown est un langage à balises léger, avec une syntaxe de type wiki, dont le but est d'enrichir un texte simple pour produire du HTML. Originellement écrit en Perl, il a depuis été porté dans d'autres langages, et une syntaxe officielle a été définie, avec sa suite de tests, pour valider les différentes implémentations.
Beaucoup fonctionnent par une série de substitutions pour produire le HTML. Le problème évident de cette technique est qu'ajouter de nouvelles fonctionnalités devient de plus en plus difficile, et que la production d'un format différent (RTF, PDF) impose de repartir de zéro.
François a donc décidé d'adopter une approche formelle, en écrivant un véritable analyseur, basé sur une grammaire, qui génère un AST. Il n'y a plus qu'à utiliser un visiteur pour produire le format désiré. Il s'est pour cela appuyé sur PCT (Parrot Compiler Tools). Malgré l'apparente simplicité du format, il est en fait assez complexe à implémenter de cette manière, mais cela apporte des bonus comme pouvoir invoquer le compilateur Markdown depuis Rakudo :
say eval($markdown, :lang<markdown>);
François remarque toutefois que la grammaire qu'il a écrite ne lui permet pour le moment de supporter que les fonctionnalités basiques de Markdown.
Kai Carver présente des choses qu'il ne sait pas faire en Perl, mais il y en a beaucoup trop pour que cela tienne en seulement 5 minutes ! Votre serviteur vient ensuite parler de 5 modules qu'il a publiés sur le CPAN durant l'année écoulée (à retrouver prochainement dans ce magazine). Vient François Perrad qui montre un programme écrit par Ricardo Signes pour transformer un ensemble d'archives qui sont sur le CPAN et le BackPAN en un dépôt Git, avec publication sur Git Hub et Gitorious.
Suit Charles Minc qui présente une analyse qu'il a faite sur des
corrélations qui n'en sont pas vraiment. Christian Aperghis-Tramoni
enchaîne en présentant un programme qu'il a écrit en PIR pour calculer
la racine n-ième d'un nombre. Laurent Boivin présente la future
conférence OSDC.fr, co-organisée par les associations Perl, Python
et Ruby. Enfin Laurent Dami présente un module qu'il a écrit pour
générer des documents Word en utilisant leur format "HTML en fichier
unique" (un fichier MIME multipart avec des extensions Microsoft),
MsOffice::Word::HTML::Writer
.
Philippe remercie les sponsors, les organisateurs, les conférienciers et tous les participants, puis commence la traditionnelle vente de charité, où sont distribués les t-shirts et sacs des précédentes éditions des Journées Perl. le clou de la vente étant bien sûr les cartes de la communauté CPAN produites par RTGI.
Encore une fois une conférence réussie, avec ses surprises et ses bons moments, les présentations permettant à tout un chacun de découvrir de nouvelles pépites, de nouveaux modules au sein de cet incroyable trésor qu'est le CPAN. Perl 5 est plus que jamais présent dans l'opérationnel de nombreuses sociétés, et Perl 6 devient de plus en plus proche et concret par la progression rapide de Parrot et Rakudo. Les prochaines années sont donc particulièrement prometteuses.
Les Journées Perl 2009 - http://journeesperl.fr/
Les vidéos des présentations - http://fpw2009.ubicast.eu/
OSDC.fr, les 2 et 3 octobre 2009 - http://osdc.fr/
CPAN Explorer, pour parcourir les cartes du CPAN réalisées par RTGI - http://cpan-explorer.org/
Gephi, le logiciel utilisé pour créer les cartes du CPAN - http://gephi.org/
curlie, curl en JavaScript - http://code.google.com/p/curlie/
Les nouveautés de Perl 5.10 - première partie, in Linux Magazine France n°104, avril 2008 - http://articles.mongueurs.net/magazines/linuxmag104.html#h3.4
Curses::Toolkit
- http://github.com/dams/curses-toolkit/
Markdown on parrot - http://github.com/fperrad/markdown/
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.