[couverture de Linux Magazine 66]

YAPC::Europe 2004 à Belfast

Article publié dans Linux Magazine 66, novembre 2004.

Copyright © 2004 - Sébastien Aperghis-Tramoni.

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

Chapeau

Organisée l'année passée à Paris, la conférence internationale YAPC::Europe s'est déroulée cette année à Belfast, en Irlande du Nord.

Une conférence... sans transparence

Le gros reproche qui peut être fait aux organisateurs de cette édition est leur échec total en matière de communication. Leur site web en particulier faisait trop pauvre, car ils se sont trop appuyés sur le wiki, qui est un système sympathique mais avec ses défauts : aussi bien le wiki a été utile pour les participants pour essayer d'organiser leur séjour, aussi bien les organisateurs auraient dû plus utiliser le site pour publier les informations officielles.

Mardi 14 septembre

Belfast n'étant pas une destination très pratique, seuls quelques Français se sont déplacés : David Landgren (Grinder), Philippe Bruhat (BooK), Jean Forget, Eric Cassagnard (glb), Paul-Christophe Varoutas ainsi que moi-même (Maddingue). Est aussi présent Michel Rodriguez (Mirod), maintenant expatrié en Italie. Arnaud Desmons fera un passage éclair pour faire sa présentation. Quant à David Elbaz (D@vid), il ne nous rejoindra que jeudi soir.

Ce mardi est la soirée des Early Birds, une rencontre sociale entre les participants avant la conférence proprement dite. Cela se déroule principalement au Crown, un pub au décor très chargé, et à l'atmosphère très enfumée. Les Français que nous sommes avons même fait l'affront d'être sur place avant les membres de London.pm, qui n'arriveront que plus tard dans la soirée.

Mercredi 15 septembre

Keynote

De manière un peu surprenante, on fait rentrer tout le monde dans la grande salle avant même qu'on se soit enregistré. Marty Pauley, l'organisateur principal de la conférence, ouvre la conférence en présentant les lieux, le Spires Conference and Exhibition Centre, un grand presbytère à l'architecture magnifique. Les salles sont comme d'habitude nommées en fonction des sponsors : Kasei pour la grande salle, Movable Type et Fotango pour les deux autres.

Il laisse ensuite la parole à Allison Randal qui enchaîne avec le State of the Carrot. L'astuce est que carrot = camel + parrot. Après une rapide histoire de la carotte, elle passe à un autre légume orange, la citrouille, et en vient naturellement aux pumpkings, qu'elle présente avec les versions de Perl correspondantes. Elle parle ensuite de la communauté Perl, du CPAN, des YAPC, des Workshops, entrecoupant certains slides de blagues idiotes. Elle remercie enfin les sponsors, les organisateurs et les participants.

Marty reprend la parole pour apporter quelques précisions, puis c'est l'inscription. Chacun reçoit un sac plastique qui contient un plan de Belfast, un dépliant d'ActiveState, une carte postale O'Reilly et les proceedings (sponsorisés par les Mongueurs de Perl, c'est-à-dire nous). Le t-shirt de la conférence est très classieux, mauve sombre, avec le logo de la conférence discrètement imprimé en blanc en haut à gauche. Les conférenciers ont un t-shirt de couleur... orange !

Philippe Bruhat - All Your Pages Are Belong To HTTP::Proxy

Après bien des problèmes de configuration des bornes wifi, Philippe peut enfin commencer sa présentation sur HTTP::Proxy. Il présente le principe de fonctionnement : on peut empiler des filtres qui agissent sur tout ou partie de chaque donnée, un peu comme les filtres dans un tube sous Unix.

Il présente ensuite une démonstration live en triturant le site du W3C avec des filtres drôlatiques qui changent à chaque rechargement de la page : UTF-8 vers iso-latin-1 (on ne voit pas la différence), transformation en 31337, modification All Your Base Are Belong To Us, affichage des titres seulement, cumul des filtres AYB et titres, transformation en Swedish Chef, transformation arc-en-ciel, attaque de l'opérateur de l'espace. Il présente aussi un filtre d'en-têtes pour les BOFH : il renvoie une erreur 403 avec une probabilité de 30%.

Il continue avec une démonstration de partie sur Dragon Go Serveur. Jean Forget et moi-même nous gaussons de la double lecture du paramètre goreload que Philippe passe à son filtre. Il présente enfin HTTP::Recorder, un module développé par Linda Julien qui utilise HTTP::Proxy pour enregistrer une session web.

Alan Burlison - Perl In The Development Of Solaris

Alan présente tout un ensemble d'outils en Perl qui sont utilisés chez Sun pour le développement de Solaris. Il s'agit principalement d'outils qui génèrent de la documentation unifiée à partir des sources (les outils vont piocher dans SCCS), de fichiers textes, de bases LDAP, des bases de gestion des bugs et autres bases de données.

Quelqu'un du public demande si le module permettant de lire les fichiers SCCS est disponible sur le CPAN. Alan répond que non, mais qu'il peut le publier si cela intéresse. « Yes, please »

Benjamin Holzman - Inlink::C - Linking To An External Library With Inline::C

Benjamin présente Inlink::C, une extension de Inline::C destinée à faciliter la liaison entre une bibliothèque Perl et un programme Perl. Sa présentation consiste surtout à montrer différents exemples.

C'est assez impressionnant de voir qu'il suffit de quelques lignes de code Perl pour lui permettre l'accès aux fonctions de la bibliothèque C, y compris avec le passage de paramètres entre les deux côtés.

John McNamara - Perl and Excel - Using Perl To Deal With Microsoft Excel Files

John présente les différents aspects d'Excel. Il explique que le format XML disponible depuis la version 2003 est horrible et ne supporte pas toutes les fonctionnalités du logiciel. Il montre ensuite qu'Excel est un puissant moteur d'automation qui peut se piloter au travers d'une API dont le nom change en fonction des buzzwords à la mode (OLE, COM, VBA, .NET). Il révèle ensuite (pour ceux qui l'ignoraient encore) qu'Excel renferme un simulateur de vol ! En volant dans une certaine direction, on trouve même les noms des développeurs qui défilent dans un coin.

Il montre ensuite comment lire et écrire des fichiers Excel, dans différents formats : CSV, texte, HTML, XML, ODBC (via OLE), binaire. Il présente les modules Perl Spreadsheet::WriteExcel, Spreadsheet::ParseExcel, Spreadsheet::WriteExcelXML, avec un intérêt particulier pour le premier qui est celui qu'il maintient.

John nous fait maintenant un mini-tutoriel sur pack() et commence par les grands classiques : un hello world et un JAPH (Just Another Pack Hacker).

Durant les questions Philippe demande s'il peut générer du VBA afin d'écrire et de propager des macro-virus. « Hmm.. No. To do »

Soirée Fluxx

En soirée, nous (BooK, Grinder, Jean, Éric et moi-même) nous préparions à aller au Crown quand nous sommes tombés sur Geoffrey Avery, Barbie et quelques autres en train de jouer à un jeu démoniaque, Fluxx. C'est un simple jeu de cartes où les règles changent en permanence en fonction des cartes présentes sur la table. Ce jeu sera suffisamment prenant pour qu'on joue jusqu'à plus d'une heure du matin.

Jeudi 16 septembre

Welcome; announcements

Marty explique la signification de BOF, les Birds of a Feather, en français « les oiseaux du même plumage ». (L'expression vient du proverbe anglais Birds of a feather flock together.) Ce sont des sessions de travail informelles autour d'un thème. On attend 10h00 pour la première session de lightning talks, qui est présidée par Geoffrey Avery. Les règles sont rappelées : un coup de sonnette au bout de quatre minutes, un coup de gong au bout de cinq.

Lightning Talks - Session 1

Nigel Hamilton - Coding to help code

Nigel explique qu'il a une grande quantité de scripts en Perl (plus de 2 500). Cela représente plus de 100 000 lignes de code Perl ! Il explique que la solution pour s'en sortir et maintenir autant de code et de refactoriser le code et d'écrire du code qui écrit du code.

Bernd Ulmann - Teaching computer architecture with a Perl based emulator

Pour son travail (Bernd est professeur assistant), il avait besoin d'un assembleur et d'un processeur qui soient sains (donc pas d'Intel). Il a donc décidé de créer son propre CPU, nommé NICE (pour NICE Is Charmingly Elegant), qui est proche dans son design des processeurs RISC d'ARM.

Comme il a encore du temps il termine en montrant une photo de la salles des serveurs OpenVMS qu'il administre (et dont il est très fier). Il annonce qu'il propose des comptes pour les personnes qui veulent faire des tests de portabilité. Voir http://www.vaxman.de/

Jason Clifford - Online card processing with Perl

Jason montre comment utiliser le module Business::WorldPay::Junior pour gérer des paiements en ligne.

Norbert Gruener - Hosting a YAPC::Europe conference

Norbert est le président de YAPC Europe, la fondation qui finance et structure les conférences YAPC en Europe. Pour illustrer la facilité d'organiser cette conférence, il présente des photos sélectionnées des précédents organisateurs accompagnées de leurs commentaires :

Puis il replace ces commentaires dans leur contexte et montre que loin d'en avoir assez, ils en redemandent !

Mark Fowler - The four minutes guide to UTF-8 and Perl

Mark présente rapidement différents jeux de caractères : ASCII, ISO-8859-1, Unicode. Il montre quelques exemples en Perl en utilisant le module Encode. Il explique que Perl stocke les données en interne en UTF-8 mais avec un flag spécial, ce qui fait que même des données UTF-8 ne peuvent pas être lues n'importe comment. Il présente enfin le module Test::utf8 qui permet de vérifier la validité des chaînes de caractères.

Hartog de Mik - XML::LibXML::Tools

Hartog veut présenter son module XML::LibXML::Tools mais manque de chance son iBook n'est pas reconnu par le vidéo-projecteur. Il présente donc sans ses slides.

Sébastien Aperghis-Tramoni - Enterprise Perl

Quand vient mon tour, j'ai le même problème que Hartog (alors que j'ai un PC). Geoffrey vient vérifier et demande à Mark de rendre la pin qui s'était coincée dans son connecteur VGA... Je peux alors faire ma présentation éclair (la même qu'aux Journées Perl 2004, mais en anglais et avec plus de buzzwords).

Jonas B. Nielsen - Putting the profit in Perl

Jonas, qui a créé sa boîte récemment, donne des conseils pour gagner de l'argent : facturer à l'heure plutôt qu'au forfait, ne pas trop facturer « à prix d'amis », rester raisonnable et conservateur sans se perdre dans les nombres.

Scott McWhirter - Making Perl development easier, without using Perl

Scott adore Firefox, et en particulier son système d'extensions. Il présente Komodo, l'environnement de développement d'ActiveState basé sur le Mozilla Application Framework. Il présente un peu cette bestiole et cite tous les buzzwords appropriés (XUL, CSS, XPCOM, XPConnect), puis présente un petit truc qu'il a réalisé : un add-on à Mozilla pour chercher sur search.cpan.org. Son code est disponible à http://kungfuftr.com/code/mozilla/

Mark Fowler - From module to distribution

Mark commence par expliquer l'intérêt de créer une bonne distribution : c'est plus propre et ça permet de faciliter l'installation et le test des modules. Il montre d'abord ce qui se passe lorsque s'exécute la traditionnelle séquence de commandes :

  $ perl Makefile.PL && make && make test && sudo make install

Il conseille de bien spécifier les dépendances, et indique pour cela d'utiliser Module::CoreList pour vérifier les modules présents dans les distributions de Perl. Il recommande ensuite de mettre $VERSION en tant que chaîne de caractères pour éviter certaines mauvaises surprises. Il montre ensuite comment construire la distribution et présente les fichiers MANIFEST et MANIFEST.SKIP.

Il rappelle que Perl ayant évolué, la syntaxe a changé et qu'il faut penser suivant les cas à rester compatible. Il recommande aussi de faire en sorte de rester portable et renvoie à la présentation d'Ivor Williams, Portable Perl.

Comme il a encore du temps il présente les alternatives à ExtUtils::MakeMaker et renvoie à la présentation de Michael Schwern, MakeMaker Is DOOMED! [4], pour une apologie de Module::Build de Ken Williams. Il passe ensuite à Module::Install, d'Autrijus Tang, qui permet de gérer à la fois ExtUtils::MakeMaker et Module::Build.

Puis c'est au tour des outils de création de distribution. Mark démolit h2xs, comme il se doit, et indique d'utiliser plutôt ExtUtils::ModuleMaker ou Module::Starter.

Il rappelle enfin que les versions récentes de Test::Harness comprennent une commande prove qui permet d'exécuter les scripts de tests unitaires séparément.

Casey West - How to test it all or how to try

Casey commence fort en expliquant qu'il faut tout tester : le code, la sémantique et même l'impossible. Pour le code, il s'agit par exemple de tester si les fonctions et méthodes sont toutes bien présentes. Il insiste aussi sur la couverture de code avec Devel::Cover, de Paul Johnson.

Tester la sémantique signifie tester si l'API du module fonctionne comme attendue, si les types en entrée sont validés et si les valeurs de résultats sont cohérentes. Il montre un exemple avec la fonction sqrt() : il vérifie qu'elle existe avec eval() puis essaye de lui passer des données variées, dont une chaîne et un hashref (ce qui provoque bien sûr une erreur).

Enfin, pour tester l'impossible, il recommande de simuler tout ce qui ne peut pas être contrôlé. Il donne un exemple avec DBD::Mock qui permet de simuler la présence d'une base de données.

Thomas Klausner - CPANTS: The CPAN Testing Service

Thomas commence par projeter une vidéo où on voit Michael Schwern faire un strip-tease. Le nom CPANTS a été retenu par Schwern pour sa présentation du même nom lors de YAPC::Europe 2001 (voir [6]), où il introduisait la notion de « kwalitee ». Comme la qualité d'une distribution ou d'un module est difficile à évaluer, il préfère parler de quelque chose qui ressemble à de la qualité mais qui n'en est pas vraiment, la kwalitee.

La kwalitee est une note qui est déterminée par l'évaluation de métriques simples sur chaque distribution : si elle s'extrait correctement, si elle contient les fichiers MANIFEST, README et un outil de construction, etc. Il y a aussi une métrique is_a_prereq qui n'est vraie que si le module est le prérequis d'au moins trois autres modules. En réponse de quoi Henrik Tougaard a sorti le module Acme::Raise_my_kwalitee... :-)

Thomas donne l'URL pour télécharger[7] les bases de données de CPANTS, ainsi qu'un site web[8] qui est une interface Maypole à ces bases.

Le futur de CPANTS est d'essayer de relier ces bases de données avec celles des CPAN Testers et des CPAN Ratings, ainsi qu'ajouter de nouvelles métriques.

Pendant les questions, je demande si un développeur peut installer ce fourbi chez lui pour calculer sa kwalitee. Thomas me répond que c'est pas encore possible. Quelqu'un (probablement Bernd Ulmann) demande si c'est portable sur VMS... :-)

Simon Cozens - One hundred not out

Le titre de la présentation de Simon fait référence au fait qu'il a à son actif plus d'une centaine de modules sur le CPAN. En fait, son centième module n'en est pas un vrai mais un article qu'il a écrit pour l'occasion (c'est le premier et pour le moment le seul auteur à avoir atteint ce seuil), Acme::OneHundredNotOut. Depuis, il a encore publié quelques nouveaux modules, portant le total à 109.

Simon montre un camembert avec la répartition de ses modules par espace de noms. Il conseille de distribuer tout module créé, car il pourrait être utile à quelqu'un. Puis il présente quelques uns de ses modules.

Le projet Email:: est né de son ras-le-bol des modules Mail:: qu'il trouvait trop lourds et trop complexes (y compris les siens). Les modules *::Auto tentent d'appliquer les principes de Perl, en particulier DWIM (Do What I Mean, fais ce que je veux dire).

Simon termine en expliquant qu'il a été un Perl monger depuis maintenant cinq ans, et qu'il était en quelque sorte un « missionnaire de Perl » (en français dans le texte), et qu'il a décidé de devenir un « missionnaire » pour enseigner la foi chrétienne au Japon.

Marty Pauley - The Good, the Bad and the Ugly

Marty a décidé de faire sa présentation sans slide. Le sujet est comment écrire du code Perl de meilleure qualité. Il fait remarquer qu'un code meilleur n'est pas un code plus rapide : si vous voulez du code vraiment rapide, utilisez du C. Nicholas Clark, présent dans le public, confirme cette affirmation.

Un code Perl de bonne qualité est un code Perl qui peut être facilement maintenu. Marty cite l'exemple d'un programmeur qui maintenait de gros programmes Perl sans comprendre ce qu'ils faisaient réellement.

Il admet que dans certains cas du code sale et horrible est nécessaire, mais qu'il faut essayer de le limiter en le refactorisant en un meilleur code afin de le rendre plus maintenable. Même dans le cas de code vraiment sale, il conseille de ne jamais sacrifier la maintenabilité et de vérifier s'il n'y a pas un problème dans les structures de données.

Marty fait remarquer que des gens très intelligents ont écrits des choses remarquables dans d'autres langages, en particulier en Lisp. Or Perl5 a emprunté la plupart des fonctionnalités de Lisp que Perl6 complétera, tout en piquant aussi des trucs à d'autres langages fonctionnels comme OCaml et Haskell.

Karen Pauley - The hidden costs of release

Le travail de Karen chez Kasei n'est pas de programmer, mais de superviser des programmeurs Perl. Elle va nous raconter tous les problèmes qu'ils ont rencontrés pour programmer Twingle, leur produit de recherche d'information dans les mails, pour lequel ils avaient embauché Simon Cozens pour travailler dessus. Comme ils avaient le désir à la fois de faire un produit commercial et dans le même temps de le distribuer librement, ils se sont trouvés confrontés à plusieurs problématiques.

La documentation, par exemple, avait été écrite par des développeurs très familiers du code, et était donc très incomplète. De même, les commentaires présents dans le code ont été vérifiés pour éviter d'exposer certains types de commentaires de manière publique. Plus embêtant, les scripts de tests utilisaient de vraies données avec noms, adresses mail et numéros de téléphone. Ils sont donc été modifiés pour utiliser de fausses données.

Comme c'est un gros projet, il dépend d'une grande quantité de modules du CPAN. Mais avec les années, ces modules ont évolué, leur API a pu changer. Résultat, le déploiement d'une nouvelle version peut tout casser. Il a donc fallu mettre à jour beaucoup de code.

Puis est venu le problème de la vérification des licences, mais ils ont constaté que bien des auteurs ne mettent ni information ni texte de licence dans les modules qu'ils distribuent sur le CPAN. Elle donne un exemple avec Michael Schwern, à qui ils ont envoyé plusieurs mails pour lui demander de préciser sa licence. Sans réponse. À force d'insister, Michael lui répondit laconiquement : « Oh, I didn't know it was that important. » Pour éviter ce genre de problèmes, elle conseille donc d'établir une base de données des logiciels utilisés avec leur version et leur licence.

Elle conseille aussi de séparer ce genre de gros projet en composants. Ainsi, certains peuvent être partagés avec la communauté tandis que d'autres peuvent être gardés secrets. Elle recommande aussi de rester avec ce qu'on connaît déjà : c'est parce qu'ils n'arrivaient pas à maîtriser Lucene (écrit en Java) et à le connecter correctement avec leurs programmes Perl qu'ils ont décidé d'écrire Plucene.

H. Merijn Brand - DBD::Singleton

Merijn explique que dans son travail, il doit gérer beaucoup de petits scripts Perl qui ne diffèrent souvent que par leur paramètres de connexion. Il a donc écrit le module DBD::Singleton pour masquer la complexité de DBI et de connect(). « Sorry, Tim! » dit-il en s'adressant à Tim Bunce (l'auteur de DBI), présent dans la salle.

Comme Merijn n'aime pas utiliser des objets dans ce contexte, il utilise une interface procédurale. Pour se connecter, le script appelle DBLogon(). Pour préparer une requête, c'est la fonction prepar(), qui ressemble à la méthode prepare() de DBI mais qui permet de mélanger le texte de la requête avec les variables référencées, un peu comme dans un format. Puis l'exécution se déroule avec prepex().

Pour savoir comment se connecter, DBLogon() regarde les variables d'environnement, et se connecte à la première base de données pour laquelle il dispose des paramètres. Évidemment, cela ne permet qu'une seule connexion par script (d'où le nom), mais ce n'est pas un problème pour Merijn car il utilise principalement des bases Unifix dont le pilote natif est suffisamment mal conçu pour ne permettre qu'une seule connexion à la fois.

Il râle ensuite contre un bug de PostgreSQL et MySQL : bind_columns() ne marche pas comme prévu. Tim promet de corriger ça. Puis Merijn râle contre l'autodescription des bases de données : la plupart ne renvoient que les champs NAME et TYPE, les autres étant soit vides soit inutilisables. Il montre enfin qu'avec son module, il peut charger un fichier en base même avec Oracle, où cela n'est normalement pas supporté.

Pendant les questions, quelqu'un demande pourquoi il utilise Unifix, ce à quoi Merijn répond que c'est ce que ses clients utilisent, parce que c'est simple à administrer. Tim fait remarquer que beaucoup de personnes veulent un DBI::Simple. Il admet le besoin, mais préfère laisser à d'autres le soin de l'écrire.

Marty Pauley - Closing

Marty explique où passer du bon temps... en dehors des pubs ! Il propose de faire une sortie avec la majeure partie des participants pour aller à l'Odyssey Pavilion, un centre de loisirs avec cinémas, restaurants et salles de jeux. Puis il présente les BOF qui vont avoir lieu.

Arnaud Desmons - IDEALX Management Console

Arnaud a souffert d'un manque de chance : sa présentation a été incorrectement placée mercredi matin alors qu'il avait précisé qu'il ne serait là que jeudi. Il fait donc sa présentation pendant les BOF, devant un public évidemment très réduit (quatre personnes dont Jean et moi-même).

Il s'agit de la présentation de la console de gestion d'IDEALX[10], la même que David Barth avait réalisée pendant les Journées Perl 2004. Pour rappel, il s'agit d'un genre de super-Webmin, mais écrit en Perl5. IMC se base sur une approche de type J2EE mais en Perl, en utilisant mod_perl, Template::Toolkit, Struts4P, Log4P et d'autres modules du CPAN (dont plusieurs sont des contributions d'IDEALX).

BOF

Après la présentation d'Arnaud, qui a été très rapide, Jean et moi rejoignons le BOF Japanese input methods. Se trouvent autour de la table Simon Cozens et Marty Pauley (tous deux parlent japonais couramment) ainsi que Michel Rodriguez et une autre personne. Marty et Simon montrent comment utiliser les méthodes de saisie des caractères japonais dans un terminal Gnome. Puis Simon présente une autre méthode de saisie très différente, Dasher[11]. Je lui demande plus de précision sur cette technique et il me montre que c'est disponible pour plusieurs langues et que cela a été conçu pour favoriser la saisie pour des personnes handicapées (par suivi du regard) ou pour les cas où l'on ne dispose que d'un dispositif de saisie réduit.

Dans la salle voisine, Norbert Gruener, les membres de la Fondation YAPC Europe créée cette année et les organisateurs des divers Perl Workshops et futurs YAPC::Europe se sont réunis pour parler de l'organisation des conférences Perl à venir et de l'aide que pouvait apporter la fondation aux organisateurs de conférences. Il en ressort qu'il serait intéressant de collecter des informations sur les budgets des années précédentes, de coordonner les dates des différentes conférences et workshops. La proposition de fournir un outil de gestion de conférence (inscription, vente en ligne, emploi du temps) basé sur Act (A Conference Toolkit, utilisé pour les Journées Perl 2004) intéresse un certain nombre d'organisateurs.

Soirée Odyssey

Les BOF terminés, on retourne au Days Hotel pour poser nos affaires, où on rencontre David Elbaz, qui est enfin arrivé. Puis tout le monde descend et suit Marty pour aller à l'Odyssey Pavilion. C'est à quelques kilomètres mais comme on est nombreux (entre 50 et 70 personnes), on y va à pied, ce qui nous permet de découvrir des coins de Belfast plus sympathiques que les alentours du Days et du Spires.

Une fois sur place, on se disperse en plusieurs petits groupes qui réfléchissent de longues minutes pour savoir dans quel restaurant manger. On est un petit groupe à se décider pour aller dans un restaurant typiquement local, un Pizza Hut ! :-)

Se trouvent autour de la table Thomas Klausner, Norbert Gruener, David Elbaz, Philippe Bruhat, Leopold Tötsch, Eric Cassagnard, Paul-Christophe Varoutas et moi. Les quatre premiers discutent principalement de la fondation YAPC Europe pendant que nous profitons de la présence de Leopold pour discuter avec lui de Parrot. Je lui apprends à l'occasion que Christian Aperghis-Tramoni va utiliser Parrot pour enseigner l'assembleur à ses étudiants.

Vendredi 17 septembre

Lightning Talks - Session 2

Simon Cozens - Where Was

Simon présente un programme qu'il a écrit pour stocker et chercher de l'information, qu'il a nommé Where Was. Comme Simon avoue être incapable d'utiliser les bookmarks, il a préféré utiliser HTTP::Proxy et Plucene pour stocker l'information sur les sites qu'il a visité, puis invoque la commande ww pour chercher les sites correspondant à un mot-clé, par exemple ww pie pour chercher les pages web où l'on parle de tarte.

Sur ce, comme il l'a annoncé la veille, il quitte la conférence et le monde Perl pour quelques années.

Thomas Klausner - Powered by Perl

Thomas propose de mettre en place un site web qui permette aux utilisateurs de Perl d'enregistrer leur success story facilement, ou même simplement pour indiquer les projets Perl qu'ils sont créés.

Leon Brocard - Perl Development

Leon parle de différentes choses qui l'intéressent. Il remarque que le développement de Perl (la branche 5.9) est à l'arrêt complet depuis plusieurs mois, d'où sa phrase assassine « Perl development is dead ». Il parle aussi du CPAN drinking game, un jeu de poivrots où il faut citer les noms de modules du CPAN, chaque joueur devant donner un nom qui commence par la dernière lettre du nom précédent. Il raconte aussi que depuis qu'il a commencé à construire l'imprimante 3D en chocolat avec Nicholas Clark, il n'arrive plus à aimer le chocolat autant qu'avant.

Claes Jacobsson - Java annoyance for a Perl programmer

Claes présente CPANXR, le CPAN Cross Referencer, un logiciel qui permet de calculer les références croisées entre les modules du CPAN. Le résultat est présenté de manière graphique avec GraphViz, qui offre aussi une sortie SVG. Ça marche bien mais l'indexation est très longue, et Claes aimerait bien que les auteurs fournissent les informations de références croisées dans la distribution de leurs modules, par exemple dans un fichier XREF.yml. Un bénéfice immédiat serait que search.cpan.org pourrait être ainsi amélioré en permettant de rechercher les fonctions des modules.

Ivor Williams - PAR to the rescue

Ivor présente PAR, le Perl Archiver écrit par Autrijus Tang qui permet de transformer un programme Perl en un exécutable indépendant. Il fait une démonstration en live avec un exemple classique :

    > pp -e "print q{hello world}" -o hw.exe

(Ivor est sous Windows, d'où la syntaxe de la ligne de commandes). On attend un moment que la compilation se termine... Il exécute le programme obtenu, ça marche !

Jon Mitchell - Perl Spectrum Emulator

Jon commence par demander qui a un Spectrum. Peu de monde visiblement. Il rappelle brièvement l'histoire de cet ordinateur mythique et explique qu'il a écrit un émulateur de Spectrum en Perl parce qu'il en existait déjà dans tous les langages, y compris Java et VB. Il en fallait donc un en Perl.

Ce n'est pas si compliqué en fait : la mémoire est simulée par un tableau de taille fixe, et la ROM est disponible gratuitement grâce à Amstrad. Le CPU, un Z80, est un peu plus complexe à émuler car c'était un clone de l'Intel 8088 avec lui aussi des registres 8 bits pouvant se regrouper pour faire 16 bits. Il y a un peu plus de 700 instructions à simuler. Pour l'affichage, il utilise Gtk2-Perl.

Il fait une démonstration : c'est très le-e-e-ent, mais ça marche.

Tim Bunce - DBI v2.0, v3.0 and v4.0 - No kidding

Tim présente la route pour les futures versions de DBI, le module phare des bases de données en Perl. La compatibilité arrière est bien sûr le maître mot, et il compte donc effectuer les changements par étapes. Par exemple, AutoCommit va utiliser un rollback au lieu d'un commit, et disconnect() va de même exécuter un rollback. D'autres points importants en interne sont une meilleure gestion des données teintées et de l'UTF-8. En dehors du module en lui-même, il espère proposer un framework pour l'écriture de tests pour les pilotes DBD::. Et plus généralement, il compte mettre l'accent sur l'extensibilité, la haute disponibilité et la répartition de charge.

Il explique ensuite ce que seront les futures versions de DBI : DBI v1 continuera d'être supportée ; DBI v2 sera la première version pour Perl5 au-dessus de Parrot ; DBI v3 sera une première version pour Perl6 mais avec la même API que DBI v1 ; DBI v4 sera la version pour Perl6 avec une nouvelle API utilisant les sémantiques de Perl6.

H. Merijn Brand - Revivivication of FILES.last28days

Merijn montre que le site FTP du GNU avait des fichiers FILES.last28days qui indiquaient quels étaient les fichiers qui avaient été mis à jour. Mais GNU a cessé de mettre à jour ces fichiers courant 2003, alors qu'il les trouvait bien utiles. Alors Merijn a décidé d'écrire un programme qui recrée ces fichiers. Il montre comment fonctionne le programme, ainsi que sa configuration pour sélectionner quels répertoires il veut examiner.

Puis Merijn approche le micro près de son portable et on peut entendre « On the radio, oh ohoohhooh.. » (la chanson de Duran Duran) pour faire la transition avec sa présentation suivante.

H. Merijn Brand - How to script your mood

Merijn explique maintenant qu'il écoute beaucoup de radios MP3, en particulier Radio Paradise. Mais il y a des chansons qu'il aime et d'autres qu'il n'aime pas. En conséquence, il a écrit un petit programme qui monte et descend le volume de XMMS en fonction du nom de la chanson ou du groupe qui passe. Ce script s'appelle auto-mute et est disponible sur le CPAN.

Brian McCauley - History of a FAQ

Brian explique comment il a écrit la FAQ de comp.lang.perl.* et illustre avec une question courante sur s///.

David Landgren - The Lewis Carroll vs. Julie Andrews schools of thought

David râle contre le mauvais usage des termes start et end qui sont fréquemment utilisés dans des fonctions qui vont de pair alors que ce n'est pas le cas de ces termes. Il faut utiliser begin/end ou start/stop. Il cite quelques coupables : CGI, HTML::Parser, beaucoup de modules XML dont XML::Handler::XMLWriter, HTTP::Proxy.

Ivor Williams - Portable Perl

Ivor commence par rappeler qu'un programme n'est pas portable simplement parce qu'il est écrit en Perl et qu'il n'utilise pas de XS : il y a d'autres aspects à considérer. Il demande ainsi qui dans le public utilise Unix (plus de la moitié), Windows (un peu moins), Macintosh (4 ou 5), VMS (un seul), MVS (un seul).

Il fait remarquer que POSIX correspond à des sémantiques Unix, qui ne sont pas toujours portables telles quelles sur les autres systèmes. Systèmes qui peuvent avoir leurs propres sémantiques qui ne sont pas disponibles dans POSIX. Il conseille d'utiliser File::Spec et Cwd qui ont été conçus pour une gestion portable des chemins.

Évidemment, il déconseille très fortement tout appel de commandes shell. Pour certaines interactions comme demander un mot de passe, il existe des solutions portables en utilisant Term::ReadKey ou Term::ReadLine. Il rappelle aussi que suivant les systèmes, la terminaison des lignes n'est pas codée de la même manière. Merijn Brand ajoute qu'Unicode a définit en plus un nouveau caractère de terminaison. Ivor conseille donc d'utiliser chomp() qui fait les choses bien, et rappelle que binmode() est nécessaire dans certains cas.

Il aborde ensuite le problème du code XS, qui consiste à écrire du code C portable, et examine les différentes solutions pour chaque système. Il conseille enfin de rapporter les problèmes de portabilité des modules du core à p5p en utilisant perlbug, et pour les modules des autres via RT (http://rt.cpan.org/).

José Alves de Castro - Perl Black Magic

La magie noire de José sont les techniques de golf et d'assombrissement, ce qui a évidemment attiré beaucoup de monde. Il commence par montrer quelques assombrissements :

    $:?do{exit&&exit}:print"Just Another Perl Hacker,"

    s//Just Another Perl Hacker./;print

Il rappelle qu'on peut modifier les caractères de séparation des opérateurs s/// et y/// ce qui, couplé avec des caractères inutiles, permet d'écrire des choses comme {};s{}[], ;y;;;; et sssss. Et en mélangeant avec d'autres opérateurs : 1?s::::0 ou même {y/}/{/}. Il rappelle les techniques classiques : utiliser l'octal ou l'hexadécimal, et utiliser les variables spéciales de Perl ($;, $:, $_, etc).

Il présente enfin la construction d'un assombrissement. Il part de :

    print "Just another Perl hacker"

puis, étape après étape, arrive à :

    (+$,=+$").push@,,$_ for reverse"hacker","Perl","another","Just";
    s{};"\160\162\151\156\164 \x6a\x6f\x69\x6e".'$,,@,';eee

Il recommande toutefois de ne jamais exécuter du code assombri dont on ne connaît pas la provenance. Il l'illustre avec cet exemple :

    $??s:;s:s;;$?::s;;-]=>%-{<-|}<&|`{;
    ; y; -/=-@[-`{-};`-{/" -;;s;;$_;see

On ne le voit pas tout de suite, mais $_ contient system"rm -rf /". Philippe Bruhat commente : « Never accept candy from stranger ».

Puis José présente l'opérateur secret du « salut eskimo » : }{, très utile lorsqu'on le combine avec l'option -n de perl.

    $ perl -ne '}{print$.'

Puis il montre un exemple qui affiche les membres d'un groupe Unix, qu'il assombrit au fur et à mesure. Il termine en conseillant la lecture de The Art of Obfuscation par Thomas Klausner, et How to write unmaintainable code par Roedy Green. Il demande à Philippe s'il n'a pas lui aussi écrit sur l'obfuscation. Réponse : « I don't give my tricks away. »

Leopold Tötsch - Parrot

Leo explique l'avancement de Parrot avec force exemples. Il alterne entre ses slides en mode texte et des démonstrations. Il montre différentes nouveautés, comme les continuations, qu'il présente avec un programme en Scheme, la Native Call Interface, qui permet d'invoquer des fonctions de bibliothèques externes. Il voulait faire une démonstration avec SDL mais le portable sous Linux qui devait la faire tourner n'a plus de batterie. Il montre aussi le fonctionnement des objets, des exceptions, de eval. Il présente l'interface de sérialisation (freeze/thaw). Puis il s'amuse en montrant qu'il peut lui aussi faire des assombrissements et exécute un JAPH, Just another Parrot hacker.

Comme Nicholas, qui passe juste après, n'est pas encore prêt, Leo en profite pour parler du Pie-thon. Il fait déjà remarquer que commencer à se soucier de ce problème seulement un mois et demi avant OSCON était un peu léger. Malgré tout il a commencé à écrire le compilateur Python, sans avoir jamais écrit de Python ! Il présente le code Python que Guido van Rossum leur avait fourni, puis montre les étapes pour le compiler et l'exécuter.

Pendant les questions, Merijn Brand demande pourquoi il a vu du C++ dans le code de Parrot. La raison vient du fait qu'ils utilisent ICU comme bibliothèque de gestion d'Unicode.

Nicholas Clark - Perl 5.8.5 was boring (and why you should be excited by this)

Nicholas explique l'histoire de la gestion de Perl 5.8, dont il est le principal pumpking. Le développement de Perl est réparti sur différentes branches : la branche principale, le tronc (trunk), nommée bleadperl, et les branches stables dans maintperl. Car il y a plusieurs branches stables (5.8.x, 5.6.x, 5.005_xx). Depuis 5.6.x, les versions stables ont des numéros de version pairs.

Les versions majeures servent à indiquer la compatibilité : auparavant, la compatibilité était maintenue avec la version majeure précédente (la 5.005 avec la 5.004) mais c'est devenu trop dur et les versions actuelles doivent juste rester binairement compatible au sein de leur branche. Les incompatibilités proviennent de fonctionnalités expérimentales qui apparaissent et disparaissent, de changement de syntaxe ou d'API.

Il en vient à la version 5.8.0 qui a apporté un nombre conséquent de changements, en particulier un vrai support d'Unicode et des threads. Mais la version 5.8.1 a été trop longue à sortir, d'où des rapports de bugs en multiples exemplaires et une course à l'inclusion de patches. Résultat, 5.8.1 a été insuffisamment testée et une modification de l'API des threads a brisé la compatibilité binaire. Nicholas a donc décidé de changer la manière de sortir les versions en adoptant un calendrier régulier. Le mot d'ordre est de ne jamais introduire de nouveaux bugs et de gérer intelligemment l'inclusion des patches pour que la branche maintperl soit toujours stable.

Conséquence : 5.8.2 a corrigé les problèmes de 5.8.1, et depuis il n'y a pratiquement pas eu de nouvelles fonctionnalités, juste des correctifs. Voilà pourquoi 5.8.5 était ennuyeuse et pourquoi c'est une bonne chose.

Pendant les questions, Nicholas explique qu'ils espèrent mettre en place un système pour construire automatiquement les modules du CPAN avec chaque nouvelle version de Perl, pour vérifier que cela ne casse rien. Merijn Brand fait remarquer que Bernd Ulmann devrait leur fournir un compte sur l'un de ses serveurs VMS pour mettre en place un VMS smoke. Sur la date de sortie de Perl 5.10, Nicholas reste vague : « Oh, I don't have a good answer, although it's a good question. »

Announcements

Marty remercie les sponsors de la conférences : O'Reilly, Mannings, Fotango, Movable Type, Kasei (la société de Marty), UK Free Software Network (qui leur a fourni la connectivité), les Mongueurs de Perl (qui ont financé les proceedings avec les bénéfices de la conférence à Paris en 2003). Il explique pour ceux qui n'était pas présents lors de sa présentation que Simon Cozens va devenir missionnaire et qu'il va donc travailler pour des oeuvres de charité.

Puis Allison Randal et Norbert Gruener prennent la parole pour remercier les organisateurs et offrent un vase à Karen, une bouteille d'alcool portugais à Marty, et une autre pour les autres organisateurs. Norbert annonce ensuite très officiellement que YAPC::Europe 2005 aura lieu à Braga, au Portugal. José Alves de Castro et Alberto Simões, les organisateurs de cette future édition, montent sur l'estrade pour présenter Braga, une petite ville universitaire située sur la troisième planète du système solaire, au nord du Portugal. Les questions portent sur les choses essentielles : le coût de la bière et son goût :-)

Auction - La vente aux enchères

Marty reprend le micro pour démarrer l'auction. Il annonce que les euros seront acceptés et rappelle que l'argent récolté est pour la communauté. Cela commence par des livres O'Reilly et Mannings qui partent à des prix raisonnables (entre £12 et £25). Philippe Bruhat achète la sacoche du Italian Perl Workshop pour £12. Puis viennent les t-shirts. Au début cela reste bon enfant mais j'ouvre les hostilités en achentant £20 un t-shirt ActiveState. Puis le t-shirt de Copenhague.pm spécial Belfast part pour £55 et Michel Rodriguez m'aide à avoir le t-shirt de l'Italian Perl Workshop pour £53. Maintenant c'est Philippe qui veut les magnets de Perl Poetry et les obtient pour £50. Puis Karen Pauley et Tim Bunce se bagarrent pour... un bloc-note. Karen s'excuse auprès de son mari mais l'emporte pour £50.

Marty essaye ensuite de vendre un stylo soit-disant super compliqué (en fait un quatre couleurs), qui part quand même à £21. Michel acquiert un tapis de souris Perl avec le logo de l'oignon pour £25. Suivent plusieurs articles signés par des personnalités : impressions de l'assombrissement Camel, un mug Perl (£40), une casquette (£10), un t-shirt (£10). Vient alors un livre Perl 6 & Parrot signé par Larry Wall, Damian Conway, Leopold Tötsch et Allison Randal. Cela devient très rapidement une guerre entre Nicholas Clark et Mock. Nick essaye d'énerver Mock en surenchérissant systématiquement l'offre de Mock de £5. À ce petit jeu, ça augmente très vite : on passe la barre des £100, puis des £200. Mock hésite mais continue. Mais Nicholas n'abandonne pas et au final, il l'emporte pour £330 !

Vient ensuite the London.pm experience, une journée organisée par London.pm pour le gagnant. C'est José, l'un des organisateurs de YAPC::Europe 2005 qui l'emporte pour £70. Comme il manquait à cette auction un délire collectif, est lancée la vente de la couleur du t-shirt des organisateurs de YAPC::Europe 2005. Philippe commence en proposant le rose, quelqu'un parle de vert forêt, les anglais répliquent avec l'orange. Puis Philippe lance la première idée saugrenue qui lui passe par la tête : un t-shirt résille ! Jos Boumans, juste devant lui, surenchérit avec un t-shirt résille orange. Pour dissiper les doutes, quelqu'un trouve un exemple de t-shirt résille sur le net et le projette sur l'écran géant (voir la photo). L'horreur et la stupéfaction se saisissent d'une partie du public qui décide de défendre « le bon goût » avec le t-shirt orange. José fait remarquer qu'il risque de n'y avoir plus d'organisateur du tout pour l'an prochain.

Comme la situation devient confuse, Marty fait se lever les deux camps qui se regroupent de part et d'autre de l'estrade. Les comptes se font de chaque côté mais ça dure. La barre des £300 est franchie, mais on ne sait pas exactement de combien. Marty s'impatiente et déclare une enchère fermée : chaque camp fait son tas d'argent de son côté, puis on compare les totaux. À la fin, l'équipe gagnante emporte l'enchère et perd son argent, l'équipe perdante perd l'enchère et son argent. Il faut maintenant faire les comptes et il s'avère qu'il y a des livres sterling, des euros et des dollars : il faut regarder les cours actuels. Après un long moment de calculs et de vérifications, Marty annonce le résultat : de par les cours actuels de l'euro et du dollar, le camp du t-shirt résille gagne par £548 contre £429 !

Après ces enchères qui ont pris un tour si inattendu, Marty remercie tout le monde, s'excuse auprès des organisateurs de l'an prochain et met fin à l'édition 2004 de YAPC::Europe.

Références

  1. YAPC::Europe 2004 in Belfast - http://belfast.yapc.org/

  2. YAPC Europe - http://www.yapceurope.org/

  3. Fluxx, un jeu de cartes prenant qui occupa nos soirées - http://wunderland.com/LooneyLabs/Fluxx/Default.html

  4. Michael Schwern, MakeMaker is DOOMED! - http://magnonel.guild.net/~schwern/talks/MakeMaker_Is_DOOMED/slides/

  5. Casey West, How to test it all or how to try - http://www.caseywest.com/code/test-everything.pdf

  6. Michael Schwern, CPAN Testing Service - http://magnonel.guild.net/~schwern/talks/CPANTS/full_slides/

  7. CPANTS, les bases de données résultats - http://cpants.dev.zsi.at/

  8. CPANTS, interface Maypole - http://cpants.szabgab.com/

  9. Thomas Klausner, CPAN Testing Service - http://domm.zsi.at/talks/cpants/

  10. IDEALX Management Console - http://www.idealx.org/prj/imc/

  11. The Dasher Project - http://www.inference.phy.cam.ac.uk/dasher/

  12. John McNamara, Perl and Excel - Using Perl To Deal With Microsoft Excel Files - http://homepage.eircom.net/~jmcnamara/yapc/html/perl_and_excel_0000.htm

  13. Sébastien Aperghis-Tramoni, Discovering your network neighbourhood - http://maddingue.org/conferences/yapc-eu-2004/network-neighbourhood/

  14. Jose Alves Castro, Perl White magic, Perl Black Magic - http://natura.di.uminho.pt/~jac/talks/yapceu2004/

  15. Thomas Klausner, The Art of Obfuscation - http://domm.zsi.at/talks/obfu_yapc2002/obfu_yapc.html

  16. Roedy Green, How to write unmaintainable code - http://mindprod.com/unmain.html

  17. Nicholas Clark, Perl 5.8.5 was boring (and why you should be excited by this) - http://opensource.fotango.com/~nclark/585WasBoring.pdf

  18. Philippe Bruhat, All Your Pages Are Belong To HTTP::Proxy - http://http-proxy.mongueurs.net/talks/ye2004/.

  19. Les slides des présentations éclairs - http://belfast.yapc.org/wiki/?LightningTalks

  20. YAPC::Europe 2005 in Braga - http://perl-hackers.net/

Auteur

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

Bricoleur de Perl depuis 1994, Sébastien est actuellement administrateur système à Marseille, où il essaye de devenir un véritable BOFH.

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