Article publié dans Linux Magazine 79, janvier 2006.
Copyright © 2005 - Sébastien Aperghis-Tramoni
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.
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 :-)
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.
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.
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.
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.
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.
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.
Trexy - http://trexy.com/
The Goo - http://theGoo.org/
As we may think, Vannevar Bush - http://www.ps.uni-sb.de/~duchier/pub/vbush/vbush.shtml
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.
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
.
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
:-)
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.
MighTyV - http://www.mightyv.com/
L'annonce du résultat du concours de la BBC - http://backstage.bbc.co.uk/news/archives/2005/10/backstage_compe.html
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. :-)
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.
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).
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.
London Perl Workshop - http://london.pm.org/lpw/
Les présentations - http://london.pm.org/lpw/talks.html
Adminspotting - http://www.adminspotting.org/
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.