[couverture de Linux Magazine 79]

London Perl Workshop 2005

Article publié dans Linux Magazine 79, janvier 2006.

Copyright © 2005 - Sébastien Aperghis-Tramoni

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

Chapeau

Après la première édition de leur conférence l'an passé, les londoniens désiraient bien évidemment y donner suite cette année. Malgré « d'héroïques efforts destinés à le saboter entièrement » (pour reprendre les termes de Simon Winstow, l'un des organisateurs), l'édition 2005 du London Perl Workshop a finalement bien eu lieu à l'endroit et à l'heure dite, le samedi 26 novembre 2005.

Une journée bien remplie

[logo de l'université]

Se déroulant à la City University de Londres, sur une seule journée, cette conférence est néanmoins bien remplie car elle propose deux sessions en parallèle. L'une est composée de présentations d'environ 20 minutes et nommée Learning Perl. L'autre, baptisée Advanced Perl, est composée de présentations d'environ 45 minutes, mais qui dureront en réalité presque une heure chacune du fait de l'annulation de la présentation Barely Legal XXX Perl de Jos Boumans, officiellement parce qu'il a attrapé froid.

Comme l'an passé, la conférence est entièrement gratuite pour tout le monde, grâce à la générosité des sponsors, dont Fotango, grand habitué du sponsoring des conférences Perl. L'éditeur O'Reilly était aussi présent avec un stand offrant à des prix légèrement réduits leurs dernières nouveautés. On pouvait aussi acheter des t-shirts NTK. J'en ai profité pour prendre le dernier t-shirt Adminspotting disponible :-)

[photo du stand O'Reilly]
Le stand O'Reilly : books, lots of books
© Alberto Simões

Tout le monde rentre dans l'amphithéâtre principal, où après une légère attente Simon Wistow montre un plan pour indiquer où se trouve l'autre amphithéâtre, ainsi qu'un plan du quartier, pour indiquer où se situe le pub The Peasant, prévu pour boire un coup après la conférence. De manière amusante, je remarque qu'il n'y a que très peu d'ordinateurs portables visibles, guère plus de cinq ou six alors qu'il y a plus d'une centaine de participants.

Regexp::Common - Abigail

Comme beaucoup de personnes viennent sur PerlMonks et demandent régulièrement des expressions régulières pour vérifier des nombres, des URLs, des codes postaux, des numéros de téléphones, etc. Damian Conway a écrit le module Regexp::Common, qu'Abigail a maintenant pris en charge. Il comporte actuellement plus de 150 regexps différentes, sans compter les variantes possibles par la configuration de ces expressions. Abigail montre quelques exemples. Ainsi, pour identifier un nombre, on utilise /^$RE{num}$/, et pour un nombre entier, c'est /^$RE{num}{int}$/. Encore plus fort, on peut passer des options comme la base, les séparateurs. Ainsi $RE{num}{int}{-base => 8} fournit l'expression pour un nombre entier en base 8.

Évidemment, le hash %RE est lié (tie()) et terriblement magique. Abigail montre que le module fournit aussi des interfaces objet et procédurale, mais elles présentent des limitations. Il indique aussi que Regexp::Common fonctionne de façon très modulaire et qu'il est en conséquence très simple d'ajouter ses propres motifs.

The Parrot VM - Jonathan Worthington

Sous la forme d'une suite de questions-réponses, Jonathan présente la machine virtuelle Parrot, et rappelle qu'il s'agit du futur cœur d'exécution de Perl 6, et possiblement d'autres langages interprétés comme Python ou Ruby.

Pourquoi Parrot et pas la JVM ou CLR (la VM de .NET) ? Parce que ces deux VM sont construites pour des langages statiques alors que Perl, Python et Ruby sont des langages très dynamiques. Elles offrent donc des sémantiques de haut niveau, là où Parrot a opté pour un assembleur efficace (qui offre tout de même des fonctionnalités assez avancées). De plus Parrot est une machine à registres, un modèle plus efficace que les machines à piles (JVM et CLR), car moins coûteux en instructions.

Par ailleurs, Parrot supportera toutes les plates-formes sur lesquelles Perl 5 est déjà disponible, alors que les deux autres ne sont supportées que sur une poignée de systèmes.

Jonathan décrit aussi les différents run cores de Parrot et son support JIT (Just In Time). L'intérêt de ces nombreuses manières d'exécuter le code Parrot est que l'on peut ainsi sélectionner le mécanisme le plus adapté à une plate-forme ou à une situation donnée.

Lexical Attributes - Abigail

Abigail revient pour parler d'un sujet à la mode en ce moment, les attributs lexicaux, un mécanisme destiné à parer aux limitations du modèle objet classique, utilisant des hashrefs, avec leurs clés pour stocker les attributs : le défaut est qu'il est impossible pour une classe dérivée d'avoir un attribut de même nom qu'une classe parente. Le principe des attributs lexicaux est de stocker ceux-ci dans la classe de définition. Abigail montre d'abord une première méthode, baptisée Fly Weight Patterns (modèles poids-mouche), et dérivée des Design Patterns, où les attributs sont stockés dans des hashrefs lexicaux. Toutefois, cela n'empêche pas les erreurs de syntaxe sur les noms d'attributs.

Pour cela, Abigail introduit la notion d'objets inversés (inside-out objects), où les attributs sont stockés comme des hachages, toujours lexicaux à leur classe de définition, avec les objets comme clés de ceux-ci. Maintenant, une erreur dans un nom d'attribut génère une exception. En bonus, on peut même facilement rester compatible avec le modèle objet traditionnel. Outre la lecture de l'Apocalypse 12, Abigail indique que Class::Std de Damian Conway et Spiffy de Brian Ingerson sont deux modules fournissant des modèles d'objets retournés. Il présente ensuite son module Lexical::Attributes qui fournit une syntaxe Perl 6, avec support des traits. Il offre beaucoup de fonctionnalités mais comme il s'agit d'un filtre de source il a comme inconvénient d'être lent. À Michel Rodriguez qui demande s'il ne peut pas mettre en cache certains résultats pour gagner en vitesse, Abigail indique qu'il compte creuser dans cette direction.

Sticking things together with "The Goo" - Nigel Hamilton

Nigel développe deux projets liés à la manière dont les idées ou ressources peuvent être associées entre elles de manière externe (dans les ordinateurs) ou de manière interne (dans notre cerveau). Il présente une photo que je reconnais. Il s'agit de la photo du docteur Vannevar Bush, qui a publié en 1945 un papier que l'on considère maintenant comme fondateur, et où il décrit un système, baptisé « memex », que l'ont peut considérer comme l'ancêtre du world wide web. Il montre ensuite une photo de Ted Nelson, qui avait imaginé Xanadu, une bibliothèque comprenant l'ensemble des connaissances du monde. Puis vient bien sûr une photo de Tim Berners-Lee, le concepteur du world wide web.

The Goo

Il présente rapidement Trexy, son premier projet. Le nom vient de TRails + memEX + sexY. Il s'agit a priori d'un genre de méta-moteur de recherche où les internautes sont appelés à contribuer.

Il passe ensuite à son second projet, The Goo, qui est une sorte d'environnement de travail en mode terminal fonctionnant par associations d'idées, en s'inspirant de la théorie du Dr. Bush.

Accessing Databases with Perl - Dave Cross

Dave Cross commence sa présentation en faisant remarquer que beaucoup de programmes doivent se connecter à des bases de données. Le module phare en la matière est DBI, qui offre un très bon niveau d'abstraction par rapport aux bases de données (meilleur m'a t-on dit que les équivalents comme ODBC ou JDBC). Il en rappelle le fonctionnement : on charge DBI avec une chaîne de connexion, et celui-ci charge le pilote DBD correspondant.

[schéma de l'architecture de DBI]
L'architecture de DBI

L'exécution d'une commande SQL se déroule en trois étapes, chacune accessible par une fonction éponyme : prepare() pour la compilation de la commande SQL, execute() pour son exécution proprement dite et fetch() pour la récupération des résultats. Il montre l'intérêt d'utiliser des paramètres liés dans les requêtes : on gagne en performance et en sécurité. Quand il y a beaucoup de paramètres, les paramètres nommés sont encore plus pratiques, mais seuls les DBD d'Oracle et de PostgreSQL les supportent, et encore, celui de PostgreSQL les déconseille.

Il demande ensuite qui déteste SQL. Beaucoup de monde lève la main (moi aussi). Dave montre que l'utilisation de DBI est très répétitive, très mécanique. Donc que cela peut s'abstraire, et introduit ainsi Class::DBI, le transducteur d'objets relationnels, avec des exemples amusants :

    $celine_dion->delete();
    Music::Artist->find(-genre => "rap")->delete();

Class::DBI offre beaucoup de fonctionnalités mais il faut quand même fournir le schéma de la base de données, alors qu'un module pourrait aller le chercher directement dans la base elle-même. C'est justement ce que permet Class::DBI::Loader, qui permet ainsi de simplifier encore l'écriture de code utilisant une base de données.

Dave indique aussi que d'autres modules du même genre existent : Tangram, DBIx::Class, Class::Persist, SPOPS, Alzabo.

Using Attributes :Effectively - Casey West

Casey présente un sujet assez complexe et souvent mal connu, les attributs, qui sont un mécanisme d'extension assez puissant et présent au coeur de plusieurs des poids lourds de la communauté que sont Template Toolkit, POE et le plus récent Catalyst. Casey montre beaucoup d'exemples pour essayer de faire passer la pilule mais cela ressemble quand même à de la magie noire (surtout que je n'ai pas vu le début).

Il passe ensuite au module Attribute::Handlers. « That Hurt. » montre un slide. C'est le cas de le dire... C'est d'ailleurs encore un module de Damian Conway, et qui fait même partie de la distribution Perl depuis la version 5.8. Il remontre les exemples précédents, mais réécrits pour utiliser Attribute::Handlers, et présente l'interface tie qui peut être mise en place de manière assez simple avec le paramètre autotie d'Attribute::Handlers.

Quelqu'un demande où se renseigner à ce sujet. Casey conseille de lire la documentation de la pragma attribute et du module Attribute::Handlers, ainsi que que perlfunc et le code source :-)

Il indique qu'un evil trick amusant consiste à surcharger UNIVERSAL pour en faire une classe dérivée d'Attribute::Handlers :-)

mighTyV - Léon Brocard, Leo Lapworth

Léon et Leo présentent en duo le site web qu'ils ont développé pour répondre à un concours public organisé par la BBC, le réseau d'information anglais. C'est suite à une extension de la date de remise au 3 octobre qu'ils ont décidé de commencer à coder... pendant qu'ils étaient à Braga (donc début septembre). Il s'agit d'un site offrant une interface simple, agréable et utile pour chercher et visualiser les informations sur les programmes de la BBC.

Le site en lui-même est une application Catalyst, augmentée de bien des modules du CPAN afin de fournir un maximum de fonctionnalités : flux RSS, informations provenant d'IMDB, programmes du jour et de la semaine, recherche avec auto-complétion, tag cloud, un peu d'AJAX pour faire bonne figure, des supports iCal et JSON, et beaucoup de personnalisation pour l'utilisateur.

Ils terminent leur présentation en faisant défiler à vive allure la liste des nombreux modules (tous du CPAN) utilisés pour réaliser le site.

Program Repair Shop / Red Flags - Mark Jason Dominus

[Mark Jason Dominus]
Mark Jason Dominus essaye de se souvenir où il en était...
© Alberto Simões

C'est un Mark Jason Dominus très diminué qui se présente à nous. En effet, il commence par nous raconter ses malheurs pour arriver jusqu'à la conférence, et il lui a visiblement manqué les heures de sommeil nécessaire pour qu'il soit lui-même.

Il réalise tant bien que mal sa présentation Red Flags, où il montre des suites d'exemples à ne pas suivre, et expose ses corrections. Il commence par les familles de variables associées, qui sont le premier drapeau rouge. Une suite de $X1, $X2, $X3 se récrira de plus avantageusement par $X[0], $X[1], $X[2], c'est-à-dire en remplaçant la série de variables par un tableau. De même avec $user_name, $user_address, $user_phone qui se transforme aisément en un hash. Cela permet en plus de réaliser certaines opérations impossibles avant, comme d'utiliser les opérateurs travaillant sur les listes (for, push, pop, etc). Il montre un exemple trouvé sur Perl Monks. Il précise d'ailleurs que « Perl Monks is a great source of rotten code » :-)

Il montre ensuite un programme qui doit prendre deux fichiers de deux répertoires différents pour les copier et les comparer. Le qualifiant de monstre à deux têtes, il illustre avec des photos de spermatozoïdes bicéphales. Il se permet une petite digression en remarquant que personne ne s'est plaint de cette illustration, y compris aux USA. :-)

[photo d'une image abusant nos sens]
Cette image est-elle symétrique ou pas ?
© Alberto Simões

Ce programme est l'occasion de montrer d'autres drapeaux rouges comme l'utilisation de la concaténation. Mark explique que l'interpolation est préférable car cela ressemble au résultat attendu. Il rappelle l'utilité de perl -MO=Deparse pour vérifier les détails de syntaxe qui peuvent poser problème.

Il explique aussi la différence entre code structurel et code fonctionnel, et utilise pour cela l'analogie de la tente. L'aspect fonctionnel de la tente est assuré par la toile, qui protège l'occupant des intempéries, mais pour assurer sa fonctionnalité, la toile a besoin des piquets. Ces derniers ne participent donc pas à l'aspect fonctionnel mais structurel. Si on pouvait faire une tente sans piquet, on s'en passerait.

[photo d'un exemple de code confus]
Encore un exemple de code pas propre qui conduit
à une confusion certaine...
© Alberto Simões

Un dernier drapeau rouge qu'il explique est la répétition de code. Cela peut conduire à des erreurs très subtiles car le cerveau humain est optimisé pour détecter très rapidement des symétries, même quand elle ne sont que partielles. La raison en est, par exemple pour la symétrie verticale, que celle-ci est caractéristique d'un visage vous faisant face. Il montre des exemples d'images et de codes capables de tromper les programmeurs aguerris (voir les photos).

Wrap up

Simon Winstow revient pour remercier les sponsors qui ont permis cette année encore d'offrir un London Perl Workshop gratuit pour tous, et annonce qu'il y a encore un cadeau : Fotango paie la tournée au pub ! Tout le monde se dirige donc vers The Peasant, situé près de l'université, pour y boire un coup.

Liens

Auteur

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

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