Les Journées Perl 2009

Article publié dans Linux Magazine 119, septembre 2009.

Copyright © 2009 - Sébastien Aperghis-Tramoni

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

Chapeau

[logo de la conférence]

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.

Premier jour, vendredi 12 juin

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.

Sébastien Aperghis-Tramoni - Le meilleur du CPAN

[carte des auteurs du CPAN]
La carte des auteurs du CPAN.

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é.

Frank Cuny, Camille Maussang - Cartographie du CPAN et de sa 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.

[carte de la communauté web autour du CPAN]
La carte de la communauté web autour du CPAN.

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.

Olivier Mengué - CPAN en environnement hostile

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 Dami - Gestion des tribunaux génevois, de COBOL à Perl

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 Mevzek - Gérer ses noms de domaines avec Net::DRI

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.

[photo de Rafaël Garcia-Suarez]
Rafaël Garcia-Suarez.

Rafaël Garcia-Suarez - Les évolutions du smart martch en 5.10.1

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 Chantreux - Zsh pour les mongueurs

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.

Laurent Dami - Une boîte à outils pour traiter des arbres de données

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.

Serge Hoffman - Perl et VMware

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 Bruhat - Test::Database ou comment tester son code sur n'importe quelle base de données

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.

AGE et soirée

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.

[photo de Philippe Bruhat]
Philippe Bruhat
photo par Rafaël Garcia-Suarez.

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.

Second jour, samedi 13 juin

Philippe Bruhat - Fusionner plusieurs dépôts Git avec Git::FastExport

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 Krotkine - Curses::Toolkit, un toolkit en mode console

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.

[photo de Serge Hoffman]
Serge Hoffman présente
l'infrastructure VMware

Stéphane Payrard - Analyse syntaxique de Perl 6

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.

François Perrad - Markdown on Parrot

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.

Présentations éclairs

[photo de Kai Carver]
Kai Carver explique ce qu'il ne
sait pas faire en Perl !

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.

Vente de charité

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.

Conclusion

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.

Liens

Auteur

Sébastien Aperghis-Tramoni, Sophia.pm, <sebastien@aperghis.net>

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]