OSCON 2006

Copyright © 2006 - Michel Rodriguez.

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

Chapeau

Salut les p'tits gars. Donc cette année encore, pas de YAPC::Europe pour moi, mais par contre un petit compte-rendu d'OSCON, au cas où quelques uns d'entre vous ne seraient pas là.

Dimanche soir

J'arrive donc dans l'après-midi, sous une chaleur accablante, bonne excuse pour goûter les bières locales, légèrement meilleures que les Nostro Azzuro ou Moretti auxquelles je suis condamné à la maison.

Je tombe sur quelques têtes connues, MJD avec sa fille, Iris, Nat Torkington qui porte un T-shirt Google et un sac MSN qui se battent (la femme de MJD éloigne sa fille pour qu'elle ne soit pas contaminée par le langage... fleuri de Nat).

Bon, si je commence comme ça, je crois que dans la version HTML du compte rendu je mettrais des div avec des classes (technique, people, news, non_perl, insultes_gratuites,...)

La soirée est assez calme, j'ai encore le double jet-lag (je ne suis arrivé que mardi sur la côte est). Donc une paire de bières avec Scott Matthews, que je n'avais pas vu depuis une éternité, quelques "ribs"... et au lit.

Lundi Matin

The 7 principles of better API design - Damian Conway

J'ai déjà vu des bouts de ce cours, mais franchement il n'y avait pas grand chose de plus excitant au programme.

Donc Damian explique que le but c'est de proposer des interfaces minimales.

Principe 1: "Do one thing really well"

L'API d'un module peut être très simple.

En exemple, il propose IO::All (http://search.cpan.org/dist/IO-All) ou Perl6::Say (http://search.cpan.org/dist/Perl6-Say).

Il détaille un peu Perl6::Say, qui exporte une fonction, say, un print avec un \n à la fin). Curieusement le code de la fonction est un peu plus compliqué que ce que j'aurais pensé (pas trop, juste un peu), ce qui montre bieng que perl cache bien des choses sous son capot. Au passage perl 5.10 aura la fonction say, et d'autres (switch!).

Sur CPAN, les modules Perl6::* sont souvent de ce type.

Pour lui, toute séquence d'instructions souvent répétée devrait se retrouver dans une fonction, elle-même stockée dans un module.

Il a écrit un module, Toolkit, qui permet de mettre un paquet de modules dans un répertoire, et use Toolkit les charge d'un coup (http://search.cpan.org/dist/Toolkit)

Principe 2: Design by Coding

Commencez par écrire le code qui va utiliser le module/fonction que vous devez développer, ça vous permet de détecter très tôt la meilleure manière d'écrire l'interface. Écrire des tests est une bonne façon de faire ça.

Exemple: Regexp::Common (http://search.cpan.org/dist/Regexp-Common): "Who do you want to write your regular expressions? Abigail!".

Il explique comment il est passé d'une interface où la regexp était renvoyée par une fonction, à un simple hash (qui masque une... certaine complexité, qu'il explique). C'est pas mal, ça complète bien la présentation d'Abigail que j'avais vu à Londres l'an dernier à la London Perl Workshop (c'est masculin ou féminin Workshop ?).

Au passage, une théorie de Larry Wall: certaines tâches ont une complexité intrinsèque, le code de toute façon sera compliqué. Par contre on peut distribuer cette complexité, et en l'occurence la cacher dans les couches basses de l'application. Du coup ça permet d'avoir des couches hautes simples, qui peuvent être écrites par des codeurs moins expérimentés.

Puis un conseil : quand on écrit une suite de if, TOUJOURS, avoir le else à la fin, même si le else ne doit jamais arriver. Dans ce cas, lui faire émettre un message adéquat car prendre cette habitude permet de détecter pas mal de bugs, quand le cas impossible se produit !

Puis il décrit l'interface de Contextual::Return (http://search.cpan.org/dist/Contextual-Return) (il note que wantarray en fait ne dit pas si l'appelant veut un tableau, juste s'il veut une une liste!).

Le code de Contextual::Return est assez chiadé par contre, un peu trop pour que je puisse l'expliquer ici (la marge de ma fenêtre n'est pas assez large).

À la pause je croise Mister Cholet, un couple de fervent Pythoniste et Nat qui devient "corporate" (il porte des tongues au lieu de se promener pieds-nu comme d'hab).

Evolve by substraction

En 2 mots, à partir de l'API initiale, identifier les endroits où l'utilisation est un peu bizarre, et réduire la bizarrerie. Souvent ça consiste à rajouter des options aux fonctions pour déplacer la complexité du code utilisateur vers la fonction de plus bas niveau.

pause...

À la reprise, c'est l'heure pour Damian de parler de IO::Prompt (http://search.cpan.org/dist/IO-Prompt), dont l'interface "Does The Right Thing". Comme Contextual::Return, il est base sur Want (http://search.cpan.org/dist/Want), qui est un super wantarray, mais donne beaucoup plus d'infos sur le contexte dans lequel une fonction est appelée.

IO::Prompt exporte une unique fonction, qui fait pleing de choses différentes, en fonction des options qui lui sont passées.

Declarative beats imperative

Éviter les interfaces où la première chose que l'utilisateur doit faire est d'initialiser un paquet de variables. D'abord ça force l'utilisateur à lire la doc. Et pis du coup le "vrai" code ne commence qu'assez bas dans le code.

Exemple: Exporter, avec ses EXPORT, EXPORT_OK et autres variables. Perl6::Export::Attrs (http://search.cpan.org/dist/Perl6-Export-Attrs) est plus naturel:

  sub toto :Export( :DEFAULT :ALL ) { ... }

On voit bien que c'est au niveau de la fonction, on déclare l'export, pas loin de là. en plus le module offre quelques fonctions que Exporter n'offre pas, comme des fonctions qui sont exportées quoique l'utilisateur dise (dans le use). Il semble que Damian lui même (qui a écrit le module) ne sait pas exactement à quel point le module est magique: aprês une question, il découvre dans le code du module que si on fait use :ALL toutes les fonctions sont exportées (sauf celles qui commencent par _ je suppose).

Un autre module qui montre l'intérêt des interfaces déclaratives: Getopt::Euclid (http://search.cpan.org/dist/Getopt-Euclid) (Euclid est un acronyme, mais il le dit tellement vite que je ne saisis pas tout. Dans le POD du code on rajoute la description de l'interface de l'outil, avec une syntaxe simple... et ça marche.

Preserve the metadata

Ne pas obliger l'utilisateur à répéter plusieurs fois les mêmes infos.

Exemple: Config::Std (http://search.cpan.org/dist/Config-Std), qui préserve les commentaires dans un fichier de configuration quand il est mis à jour. Ça n'est pas très compliqué (pour Damian!), ça suppose juste d'avoir un parser qui garde tout, commentaires et ordre des options dans le fichier, et de ruser un peu avant de sauver le fichier.

Oh, et quand on sauve le fichier, pas besoin de redonner le nom du fichier, par défault c'est le même. Ça évite souvent de devoir passer le nom du fichier partout dans le code où la config peut être mise-à-jour.

Si on fait ce genre de chose à la maison, le comportement exact dépend du type de fichier: on peut vouloir par exemple "comment out" (comment ça se dit en français?) les options qu'on a enlevé.

Leverage the familiar

Il s'excuse pour l'utilisation du terme "leverage"...

Exemple: Log::StdLog (http://search.cpan.org/dist/Log-StdLog). L'interface est la même que... print! Au niveau de log près. Comme ça l'utilisateur n'a pas trop de problème à savoir comment utiliser le module.

  if( $verbose) {
      local *STDOUT = *STDLOG;
      print debug => "coucou";
      print info  => "rmatique";
      print fatal => "Aaaarrrrrgghhh!";
  }

Bon, pour les explications techniques sur comment ça marche, j'écoute, donc pas de commentaires.

Il a regardé sur CPAN, les 30+ modules qui font du log. Son commentaire est que quand il n'y a qu'un ou 2 modules sur CPAN qui font un truc, en général c'est qu'il y a consensus sur la manière de résoudre le problème. Par contre Il admet que Log4Perl est pas mal, mais un peu compliqué. Pourquoi avoir un module OO pour du log? Commentaire de mon voisin dans la salle: Log4Perl a un "easy" mode qui évite de devoir se trimballer un objet partout dans le code. Damian recommande d'y jeter un œil.

Oops, son micro le lâche. Il va devoir crier, ce qui ne le dérange pas trop!

Citations: "This is maintenance by complaint" à quelqu'un qui demande une option supplémentaire, je ne saisis pas laquelle.

The best code is no code at all

Le simple fait de faire un use Module fait que "shit happens".

Exemple: Object::Dumper (http://search.cpan.org/dist/Object-Dumper)

    use Object::Dumper;
    my $object = MyClass->new(...);
    print $obj;

Et ça marche! Ca dumpe le contenu de l'objet, au lieu du classique HASH[0x12a8f2] Au passage ça fait aussi un die si on essaye de se servir de l'objet dans un contexte numérique, sauf bieng sûr si on overloade la numérification de la classe.

Conclusion

2 grandes forces de perl: Il fait déjà plein de chose pour nous, et il ne gène pas ("it doesn't get in the way"). On devrait essayer de faire la même chose avec notre propre code.

Un bon tutorial, intéressant parce qu'il allait de principes généraux de design d'interface, à des exemples de code assez pointus.

Lundi après-midi

Mastering vim - Damian Conway

Et oui, c'est la journée Conway. Je me sers à peu près bien de vim, mais comme dit Damian "je me sers de vim, il fait ce que je veux, mais je sais vaguement qu'il y a plein de trucs super cool qu'il peut faire mais que je ne connais pas". Donc tutorial. En plus je tape ce CR avec vim, donc ça devrait donner un super texte.

Son premier conseil: utiliser vim, pas vi. Jusque là j'ai tout bong.

Je vais pas vous répéter tout ce qu'il dit, juste vous donner les trucs sympas (et que je connaissais pas) qu'il donne.

Toutes les touches du clavier sont des commandes valides. Celles qu'on utilise le plus sont à moitié effacées (où complètement dans le cas de mon vieux Mac, ce qui me handicape pas mal vu que je connais pas bien le clavier).

Il n'arrête pas de dire "perl" à la place de vim, il menace d'unifier les 2 dans le futur.

Donc une longue liste de trucs que je ne connaissais pas:

Il avoue qu'il a couvert à peu près 10% de ce que peut faire vim.

Au final un tutorial très dense, avec pleins de trucs. Les notes sont très complètes. Ça va me prendre quelques temps pour digérer tout ça. Mais déjà j'ai utilisé pas mal de ses trucs en tapant ce CR, donc j'ai espoir.

Désolé pour le franglais dans la liste au dessus, mais ça va assez vite, et j'ai pas toujours le temps de traduire tout comme il faut ;--( En plus, du coup j'ai sauté presque tout ce que je connaissais déjà, ça m'a laissé le temps de respirer un peu. Ah! oui, en plus j'ai sauté tout ce qui causait C.

Bon, fini pour la partie sérieuse d'aujourd'hui, à demain !

Oh, et désolé pour le manque de g à la fin des mots, je crois que je suis en train de perdre mon assent :--(.

Mardi matin

Donc me revoila tout frais, après une soirée tranquille hier soir, en companie de quelques italiens, vu qu'il faut bien que je bosse un peu (mon italien) pendant cette conf. donc quelques bières, peu de chanve de convaincre 2 adeptes de Rails que Perl est bieng mieux, et au dodo.

Real World Web Services - Scott Davis

http://www.davisworld.org/presentations/handsOnWebServices.pdf est une partie de la présentation.

Et oui, c'est l'année du ouèbe tout poynt ziro, donc je m'intéresse aux technologies de l'an dernier... mais vous inquiétez pas, O'Reilly donne un livre gratuit aux participants, et j'ai choisi "Ajax Hacks".

Il commence par un peu de pub pour sa boite, dont je tairais le nom parce que je suis méchant et rancunier.

Au passage, pour taper les compte-rendus en français sur un clavier US, quelques imap en vi comme :imap e' é évitent de taper <CTRL-K> avant... bien pratique, et ça me donne l'impression de pas avoir perdu mon temps hier. Ca donne juste des trucs un peu bizzare avec le curseur, après une voyelle il se positionne _devant_ la lettre pendant 1 seconde, mais on s'y habitue. Remapper <CTRL-N> sur <TAB> est aussi excellent, ça auto-compléte les mots si je les ai déja utilisés dans le fichier (ça tombe bien, je me repète souvent et j'ai un vocabulaire limité). Je ne peux plus taper de tabs, mais de toute façon j'aime pas les tabs, et ça sert à rieng en POD.

Maintenant une longue liste d'acronymes... beurk!

Bonne idée, il donne les définitions des acronymes tirées de Wikipedia.

SOA

Il commence par SOA : au choix Service-Oriented Architecture, ou Sarbanes-Oxley act (si vous savez pas ce que c'est, vous avez bien de la chance, ou Soldiers of Allah)

http://en.wikipedia.org/wiki/Service-oriented_Architecture

Il parle beaucoup, vite, donc ça va être dur de tout retranscrire, je pense que je vais devoir me limiter à vous donner les liens vers les définitions.

WS

Maintenant on passe à Web Services (WS)

http://en.wikipedia.org/wiki/Web_service

Un truc : un web service n'est pas forcément en XML, le plus important c'est qu'il soit "remote", et "message-oriented". En plus il devrait être "platform-independant", "vendor-neutral" et "internet-based".

Pour l'instant c'est un peu du vent quand même, beaucoup de "c'est super" et pas beaucoup de détails technique.

Ajax

 L<http://en.wikipedia.org/wiki/Ajax_%28programming%29>.

Client/SOA : pour certains c'est l'étape après Ajax. Un gros problème cependant : XSS (cross-site scripting), les requêtes Ajax ne peuvent pas contacter un server dans un domaine différent pour limiter le risque. On pourrait avoir du javascript signé par le site web d'origine, mais ça ne marche pas cross-browser. Donc ça doit être le serveur d'origine qui appelle les autres sites web pour le client. Par exemple on peut avoir un proxy qui gère les appels à différents sites. Là ça commence à devenir intéressant.

http://en.wikipedia.org/wiki/Client/SOA

Web 2.0

Donc comme c'est une conférence O'Reilly, il doit maintenant nous causer de Web 2.0

Il demande à la salle : qui a déjà utilisé Mapquest? Toutes les mains se lèvent. Qui à déjà utilisé Google Maps? Pareil. Qui a utilisé Mapquest depuis que Google Maps existe? 3 mains! Web 2.0 - Web : 1 - 0

Mash-ups : pour ceux qui vivent dans une grotte, c'est la combinaison de données venues de plusieurs sources. Exemples http://www.chicagocrime.org/map/.

Au passage, en cherchant autre chose, je tombe sur un catchpa sympa: http://www.hotcaptcha.com/ (pas forcément un truc à voir au boulot)

SOAP

http://en.wikipedia.org/wiki/SOAP

Avant SOAP il y avait XML-RPC, qui une fois trituré par un commité est devenu SOAP (la trituration à été assez importante !).

WSDL

http://en.wikipedia.org/wiki/WSDL

SOAP est le format du message, WSDL décrit l'interface du WS.

Il y a plein d'outils pour générer au moins un squelette de code à partir du WSDL... en Java. En Perl je sais pas, les spécialistes peuvent nous dire.

UDDI

http://en.wikipedia.org/wiki/UDDI

Pas vraiment utilisé, au contraire des 2 précedentes technologies. Ca permet de faire des répertoires de WS, mais en pratique on récupère le WSDL directement, sans passer par une étape intermédiaire.

SOAP en action

SOAP avec l'API WS de Google (en béta depuis le dernier millénaire).

Il nous montre le format des messages, requêtes et réponses. Je tape pas assez vite pour retranscrire le tout ! En plus ça cause surtout Java, fait chier.

Il nous montre le résultat de WSDL2Java sur le WSDL de Google. Puis déclare que c'est pas trop joli, donc il préfère utliser l'API fournie par Google, plus pratique.

Je vous passe le code en Java, pour ne pas me faire virer de la liste.

Pause, il est content que tout le monde revienne après le café.

Une remarque du public: pourquoi c'est tot en Java. Il s'excuse et avoue que ses exemples en Perl sont trop horrible pour qu'il les montre en public.

Conclusion sur SOAP : c'est lourd, pas vraiment browser-friendly. Donc on va passer à :

REST

http://en.wikipedia.org/wiki/Representational_State_Transfer

Plus simple (mais il y a quand même une thèse par Roy Fielding dessus (http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)

Il y a 2 types d'applications REST : pur REST, qui suit les principes développés par Fielding, et "popular REST", en fait tout ce qui est WS mais pas SOAP.

Il explique l'origine du terme "cargo-cult" (http://en.wikipedia.org/wiki/Cargo_cult)

Le principe c'est de faire des requêtes simplement avec une URL et des paramêtres, et de récupérer le résultat en simple XML (ou en fait autre chose, genre JSON). Ce qui est cool c'est qu'en regardant la requête on la comprend. Par contre il faut lire la définition de l'API pour pouvoir l'utiliser, il n'y a pas l'équivalent de WSDL (encore qu'il semble qu'il y ait un projet pour ça).

Rest en action

Un service REST : Yahoo! Ca tombe bien, ça complète bien le service SOAP de Google. Effectivement, sur ce qu'il montre, c'est bien plus simple à utiliser que le WS de Google. Pas besoing de générer le squelette du client, c'est tellement simple qu'il n'y en a pas besoin!

Il demande : "comment rendre ça sûr?" Ben de la même façon qu'on rend un site web sûr: https!

C'est un des avantages de REST : ça réutilise l'infrastructure existante (ceci dit il me semble qu'on peut faire ça aussi avec SOAP).

REST toujours

Un exemple avec l'API REST d'Amazon (Amazon a aussi une API SOAP, mais vraiment c'est plus simple d'utiliser l'API REST).

http://awszone.com présente un peu toutes les possibiltés offertes par Amazon. Je peux pas trop tester le site, la connexion wireless est pas terrible ici (pour une raison à laquelle je n'aurais pas pensé : http://radar.oreilly.com/archives/2006/07/oscon_kicks_off.html#comments), mais le site a l'air assez impressionant : il présente aussi la version SOAP du service, génére du code si on veut... la totale ("really cool stuff" d'après le speaker).

Il fait une erreur en tapant le critère de tri dans une requête, récupère un message d'erreur : avec SOAP il aurait utilisé le WSDL et n'aurait pas eu ce problème (mais bon, s'il avait lu la doc du service REST non plus, et pis les tests devraient révéler l'erreur assez tôt dans le processus de développement).

Un peu de philosophie sur REST

En fait, pour lui, il n'y a pas vraiment de différence philosophique entre la version SOAP (Google) et la version Yahoo! (REST). L'implémentation est différente, mais le code suit exactement les même principes.

Il rentre dans une discussion sur la différence entre URI et URL. Les vrai RESTeurs (ou RESTafarians) affirment que seule les URIs devraient être utilisées, pas les URL. Il avoue ne pas vraiment être d'accord. J'avoue ne rieng comprendre au débat ! Donc j'en profite pour aller faire un tour sur le site de la Gazzeta dello Sport pour voir le résultat de l'appel des clubs punis... Zut, ça sera dans demi-heure, donc je retourne à mon compte-rendu, vous avez de la chance.

Je vois qu'il recommande de jeter un oeil à http://www.xml.com/pub/a/2004/12/01/restful-web.html (et aux autres articles du même auteur (http://xml.com/pub/at/34).

Une des forces du "popular REST" est qu'en utilisant GET, ça permet de bookmarker facilement le résultat d'une requête. Bien sûr ça limite aussi la taille des donnés passées entre le client et le serveur. Il n'y a pas de règles qui force à utiliser GET, mais c'est recommendé pour respecter l'esprit REST.

Encore quelques exemples de services REST

Un peu de Google maps (obligé non ?). Il nous montre le lien généré par le bouton "link to this page". Ca montre bien l'interêt de REST, qui permet de retrouver facilement les choses, en donnant une URL à tous les résultats renvoyés par un service.

Par exemple je suis là : http://maps.google.com/maps?f=q&hl=en&ie=UTF8&t=k&om=1&ll=45.529508,-122.663008&spn=0.001853,0.003573

Atom suit aussi les principes REST (et au passage, je trouve Atom bien mieux fait que RSS, c'est plus logique, ça permet de mettre à peu près tout ce que je veux dans le feed... recommandé !)

JSON

Le principal avantage de JSON, c'est que ça n'est pas XML ! ("we don't need no stinkin' XML") C'est dur de parser du XML en Javascript, tandis que JSON ça se charge hyper facilement en Javascript dans le client. Malgré mon (lourd !) passé XMLien, je dois dire que je suis complètement d'accord. Tiens, je savais pas que JSON est un sous-ensemble de YAML.

json.org pour plus d'info. En perl on a JSON et JSON::Syck (parce que "JSON is YAML")

ESB

Un dernier acronyme pour nous achever, mais je saisis pas ce que ça veut dire : le E est pour "Enterprise", donc mon cerveau se déconnecte automatiquement, désolé.

C'est fini, c'était pas mal en fait, des fois d'un peu trop haut niveau, et un peu marketing parfois, mais c'était un bon tour d'horizon quanf même.

Bon, je vais devoir aller manger sans savoir ce qui se passe en Italie... je pense que je survivrai quand même.

A plus.

Mardi Après-midi

Rolling your own Google Maps - Scott Davis

Il recommence avec sa pub au début du cours.

Il commence par expliquer en quoi Google maps est important : l'utilisation de Javascript et CSS pour une application complètement nouvelle, et impossible à faire sans ça. En plus il n'y a pas besoin de plug-in pour s'en servir.

En plus Google a publié une API pour Google maps.

Les limitations du service : c'est gratuit, mais pas libre. L'utilisateur DOIT utiliser l'API fournit par Google.

2 frameworks pour faire la même chose: MapBuilder (http://mapbuilder.sourceforge.net/) et OpenLayers (http://www.openlayers.org)

Donc attaquons la partie pratique : créons notre propre appli !

Le code est disponible pour les participants au cours, il sera disponible pour le public dès que le livre qu'il est en train d'écrire sera publié. Donc vous n'aurez pas le code aujourd'hui, juste la description de la démarche qu'il utilise.

Version 1 : d'abord on crée une image avec des "tiles", dans une table, 3 lignes, 4 colonnes.

Version 2 : il crée 2 divs autour de la table: une qui définit la table entière, et une qui définit la partie affichée de la table. Il utilise CSS pour que la partie affichée soit plus petite que la table entière.

Version 3-5 : Il commence à écrire le js qui fait bouger la table entière. Du coup la table affichèe montre une autre partie de la table. Il assigne ça au drag-n-drop de la souris (entre mouseDown et MouseUp il "dragge"). Il utilise prototype (librairie javascript).

Un truc qui me plaît : dans son script il écrit Event.observe( window, 'load', myscript, false); au lieu de mettre le script dans l'attribut onload du tag body. Je débute en js, et c'est le genre d'info que j'apprécie (je sais pas si c'est spécifique à prototype ou si ça marche de base en js, j'essaierai plus tard). Le false empêche l'évênement de "bubbler".

Version 6 : il ajoute un peu de code pour empêcher l'utilisateur de dragger trop loin, pour bloquer le déplacement de la table entière.

Version 7-8 : Il se débarasse de la table, et commence à faire des calculs (semi-)sophistiqués pour savoir quelles sont les lignes/colonnes affichées et ajuster le positionnement de la carte entière avec CSS, puis il télécharge les images (toujours de fausses images à lui.

Bon, en fait ce tutorial me fait quand même un peu chier. Ce genre d'exercice, pour moi, ça marche si c'est un TP. Mais suivre un mec qui explique son code au podium pendant 3 heures, ça commence à me fatiguer. Donc je suis pas sûr de rentrer aprés la pause...

Ma conclusion perso sur ces 2 cours est que Web Services ou Google maps ou Ajax bidule... au bout d'un moment, c'est plus la peine de lire des papiers ou d'aller à des cours, il faut se poser devant le clavier et JFDI ("Just Fucking Do It!").

Doc... ce soir il y a la soirée MySQL au bar d'un des hotels de la conf, puis le State of The Onion de Larry Wall, donc c'est l'heure d'aller faire la sieste et de prendre des forces.

Ciao

Lundi soir

Après la réception MySQL dans un hôtel pas loin, retour au centre de la conférence pour la session du soir. Je passe sur les remises de prix, vu qu'encore une fois j'en ai pas eu.

Le State of the Onion de Larry était centré sur la famille. Il décrit Perl comme son enfant. Comme Perl approche les 20 ans, c'est le moment de la dernière phase de croissance, et grâce à la grande famille qu'est la communauté Perl, il pense qu'elle (Perl) a été bien éduquée.

A la fin, Nat en conclut que maintenant il comprend tout : Perl couche ! ("Perl got laid!"), avec Haskell par exemple.

Ensuite un talk intéressant de Kathie Sierra, d'O'Reilly, sur "comment créer des utilisateurs passionnés". Quelques points dont je me rappelle : il faut s'adresser non seulement à l'intellect (mind) mais aussi au cerveau profond (brain) (je connais pas les termes exact, si on a un psychologue dans le coing il me corrigera), en jouant sur les émotions "primitives". Si je trouve la présentation sur le web je vous passerai l'url, parce qu'il y avait vraiment beaucoup de points qui m'ont semblés pertinents.

Finalement une pièce de Damian Conway "DaVinci Codebase", une histoire policière (avec l'obligatoire minette française) assez impossible à retranscrire, mais bien marrante, qui finit par un clip sur les MP3 libres.

Après retour à l'hôtel et dodo. Comme le Dr Nicholas Clark (dont j'espère que pour une fois je n'écorche pas le nom, Hi Nick!) remarquait, cette année il manque un point central pour rencontrer des gens. Le soir le centre de conf est désert, et les participants sont éparpillés dans pleins d'hôtels, pas tous tout près. En plus le lobby est tout petit, donc passer dans la chambre poser le sac et redescendre pour tomber sur des gens au hasard ne marche pas. Dommage.

Au passage je remercie Eric Cholet pour son soutien moral (il consulte son mail à côté de moi).

Mardi matin

Keynotes

Tim O'Reilly nous cause.

5 idées sur l'Open Source (en anglais parce que ça va vite, commentaire d'Eric: "blah blah blah"):

http://radar.oreilly.com/archives/2006/07/four_big_ideas_about_open_sour.html développe ces idées.

Puis un gars de greenplum, qui sponsorise la conférence, nous compare l'Open-Source et le Rock'n Roll.

C'est assez rigolo, un point qu'il développe : keep it real. Le but n'est pas forcément de récupérer pleing de pognon, et d'essayer d'être le projet le plus téléchargé au monde, mais de rester fidèle à nous-mêmes, à être dangereux, au sens de révolutionnaire.

Puis Anil Dash, de Six Apart (Movable Type), nous cause de "Making Web 2.0 Mean Something", également intitulé "Trying to Suck Less". C'est pas hyper-passionant, il nous montre les trucs OS que sa boîte fait. Ca rappelle le talk de Tim plus haut, au sens que ce sont des trucs que Six Apart a développé pour leur produit, puis Open-Sourcé un fois stable et working like crazy. On peut les récupérer chez Six Apart (un balanceur de charge, un serveur Jabber...).

Pour finir : interview du fondateur de Sleepycat (Berkeley DB), récemment acquis par Oracle. Il parle des relations entre Oracle et Sleepycat (et ses 25 employés). Il souligne que Oracle a une longue tradition d'aider des projets OS, quoique ça ne se sache pas trop (Linux, Perl...). Il reste très politiquement correct, dit que Oracle n'a pas de problème avec MySQL ou PostgreSQL. Il insiste sur le fait que one size doesn't fit all : différents SGBD sont adaptés a différents problèmes (sur O'Reilly Radar il y avait une série de posts de Tim O'Reilly sur le fait que pas mal de gros, en fait énormes, projets n'utilisent pas de SGBD, et pourquoi (http://radar.oreilly.com/archives/2006/04/web_20_and_databases_part_1_se.html).

Donc pour résumer, les keynotes c'est super énervant : la plupart du temps elles sont pas terrible, mais de temps en temp il y en a une géniale. En général le jour oû je n'y vais pas ;--(

Ensuite un petit tour a l'exposition. Je récupère un T-Shirt du labo Open-Source de Microsoft, portant l'inscription Reports of Snowballs Seen in Hell. Pour me rattraper j'achète un T-Shirt Firefox, et je renouvelle mon inscription à l'EFF. Je me sens moins sale.

Parsers, Perl 6 rules and the Parror Grammar Engine - Patrick Michaud

Le sujet a été bien couvert dans d'autres compte-rendus, donc juste les points saillants (surtout que j'ai raté le début pendant que gozer essayait de me convaincre d'utiliser komodo, qui effectivement semble pas mal comme debugger).

Une regexp est juste un autre type de fonction. C'est plus facile pour les autres langages où les regexps ne sont pas intégrées à la syntaxe de base.

Pour sortir des messages d'erreur :

  rule if_statement {
  if [ <expression> | <die: Expression expected> ]
     [ then         | <die: then expected>       ]
     [ <block>      | <die: Block expected>      ]
  }

Il montre la grammaire de bc. J'aime bien la définition de la précédence en utilisant is_looser( '<autre_opérateur')> (ou is_equiv): c'est facile et maintenable, et en fait c'est comme ça que notre cerveau fonctionne (on peut aussi utiliser un nombre qui donne le niveau de précédence).

On jète aussi un coup d'oeil aux grammaires de Perl6 et de APL (pour les plus vieux d'entre vous, il faut une fonte unicode pour pouvoir l'afficher bien sûr, créée à partir d'une photocopie d'un manuel APL de 1975). D'après lui il est très facile, et rapide d'écrire des parseurs avec PGE.

Pour lui Perl6 est vraiment facile à parser avec PGE, et Larry, Damian et les autres ont fait un boulot génial.

Mind Like Water, The Path to Perl Bliss - Peter Scott

Peter Scott est l'auteur de Perl Medic et Perl Debugged, 2 excellent livres, donc ça vaut le coup de voir ça (et pour une fois je suis même à l'heure, et ça laisse le temps à Damian de s'excuser pour la façon dont il a maltraité les français hier).

Il annonce qu'il ne va pas vraiment parler de sujets techniques, mais plutôt de sujets comme les relations avec d'autres développeurs, et des citations de développeurs célèbres.

Il commence par se demander pourquoi il a fallu tant de temps pour qu'on commence à écrire les tests avant le code. We are now smart enough to realize that we are not smart enough to write tests after the code.

Intégrer ses différentes personnalités

Il explique que nous avons tous différentes personnalités, suivant les moments, qui ont différentes forces, faiblesses, buts. Il nus faut apprendre à les écouter, à les connaître et à travailler avec elles.

Quelques exemples:

On a tous ces différents types en nous, arriver à les intégrer nous rend meilleurs programmeurs.

Arriver à les intégrer toutes permet de. Historiquement les programmeurs étaient plutôt de type "Glory Hunter" dominant. Maintenant l'aspect bon samaritain est plus mis en valeur. Ce qui au passage satisfait aussi souvent le Glory Hunter.

Comment arriver à être "in the zone"?

The Behavioral Cycle

Nos croyances (beliefs) commandent nos attitudes (je sais pas traduire), qui commandent nos comportements. Mais également nos comportement peuvent modifier nos croyances. Ca s'appelle la discipline. Apparement ça marche ;--) Imaginer le résultat d'un comportement qu'on veut adopter nous aide à l'adopter.

Même si on y croit pas au départ, des comportements comme être clair, précis, suivre les méthodologies appropriées (contrôle de version...) améliorent notre code.

Les secrets des maîtres

Il veut lancer un projet pour compiler des citations et idées de bon codeurs.

En vrac, sans attribution, pas le temps, et avec des trous :

Apprendre, être curieux, essayer avant de demander de l'aide sont des thêmes récurrents.

Au final une présentation intéressante, mais, comme promis, pas très technique.

Mardi Après-midi

Nothing but Ingi döt Net

Ingy, Hello, my name is Ingi döt Net, avec un très joli mohawk, commence la présentation (?) au son de Rock'nRoll, commence à se déshabiller. Chemise, tee shirt, pantalon... Le public lance des billets. Le caleçon descend.

Comme promis, Nothing but Ingi döt Net!

Il va se rhabiller... What the fuck was that?

Jemplate

Il rappelle la phrase de Nat hier : Perl finally got laid, et rapelle que ça a commencé en 2001, avec la série des Inline::* : Perl s'est tapé tous les langages.

Mais récemment Ingy a plutôt fait du Javascript (comme tout le monde ?).

Il adore JSON, et en Perl JSON::Syck (rapellons que JSON est un sous-ensemble de YAML).

L'intérêt c'est qu'il peut passer des données, quelques soient leur taille, de Perl a js d'une seule ligne de Perl et une de js.

Pour se faciliter la vie, il a écrit Jemplate : tout le Template::Toolkit (le core) porté en js. Donc maintenant on peut utiliser les mêmes templates en Perl et en js. Le fichier Jemplate.js fait un peu plus de 100 lignes (et bien sûr est caché par le browser).

Il nous montre un bout de code. Effectivement les templates se ressemblent beaucoup (ceux en js ont besoin de charger).

Quelqu'un dans le public proteste contre l'utilisation de innerHTML, disant que ça va être "deprecated". Ingy répond qu'il attendra de voir la fonction enlevée des js des browsers avant de la remplacer dans son code. Je veux rester poli, mais innerHTML est quand même bieng pratique, et fuck les intégristes qui veulent nous forcer à faire du DOM sans raison.

Module::Compile

Apparement tout le monde déteste la base de beaucoup de ses modules : Spiffy.

Alors, doit-il admettre sa défaite, ou pousser l'insanité plus loin et confondre ses détracteurs ?

Connaissant Ingy, il n'y a pas beaucoup de suspense sur la réponse.

D'où orz.pm, sur CPAN, (orz: http://www.boingboing.net/2005/02/07/all_about_orz.html).

Il se sert d'une vieille fonction de Perl, qui, quand il charge un module, cherche un fichier .pmc avant de chercher un .pm (un reste de vieilles expérimentations avec le compilateur Perl). Donc vous l'avez deviné, Ingy applique une transformation à un module, typiquement un filtre, et stocke le résultat dans un fichier .pmc. En fait, ça marche même avec perl -c <fichier>. Ah ah !

Ca permet des trucs sympa : on peut donc utiliser les modules perl v6 sans avoir pugs installé, vu qu'on se sert des versions compilées de ces modules.

Ca a l'air kewl. Dans XML::Twig, pour prendre un exemple au hasard, j'ai effectivement une phase de pré-compilation du module, pour laquelle je pourrais utiliser Module::Compile (si je ne voulais pas être toujours compatible avec perl 5.004).

Je me rends compte que je n'ai rien compris au rapport entre Module::Compile et orz, mais bon, faudra que je creuse.

Filter::Simple::Compile peut remplacer Filter::Compile et génère le .pmc (qu'on peut aller vérifier).

Donc Ingy a encore été occupé cette année.

Plagger - Tatsuhiko Miyagawa

Miyagawa est l'auteur de XML::Liberal, que je pense intégrer avec XML::Twig, donc ça m'intéresse de voir ce qu'il a à raconter.

Plagger est un aggregateur de RSS/Atom "pluggable".

Il n'arrête pas d'écrire des bouts de code qui triturent du rss (rss2ipod, rss2audiobook, bloglines2gmail). D'autres on écrit rss2atom, rss2pdf, rss2gmail, rss2imap, svn2rss, ebay2rss...

Il en a marre de réecrire sans arrêt le même genre de code, avec les inévitables copier-coller, les difficultés pour maintenir toutes ces versions. Donc il a décidé de créer une platform thingy : plagger, pour faire du <truc> 2 <machin> où truc ou machin est rss ou atom ou opml. Ça marche sur le principe des pipes unix, avec des modules pour lire, transformer et écrire différents formats, et on peut bien sûr enchaîner les plugins. On programme le système par un fichier de config en YAML.

Le tout est assez sophistiqué, avec découverte automatique des feeds, XML::Feed est utilisé pour lire les feeds, et supporte RSS (toutes versions) et Atom, il peut utiliser les cookies du browser (IE/Safari/Firefox), peut faire du screen-scrapping...

Plus de 100 plugins sont disponibles, divisés en plusieurs types (par phases du process de transformation), extraits :

Il nous montre comment il archive ses feeds sur son compte gmail : les mails pour chaque feed se retrouvent dans la même thread ils sont taggés (plagger) donc il peut les chercher très facilement, et en plus il a configuré pour les archiver dans un répertoire séparé.

Il a aussi un bot qui l'informe des feeds mis-à-jour sur IRC.

Plaggnet lui est sa réponse à planet (écrit en Python): il aggrège une série de feed et les filtre par mot-clefs. Vous pouvez le voir en action à http://oscon2006.plagger.org/ (et en plus il peut utiliser les fichiers de config de planet, donc switcher est très facile!).

Enfin, en 8 lignes de config, il crée un moteur de recherche de blogs, utilisant Subscription::PingServer, Aggregator::Xango et Search::Estraier.

Les configs qu'il nous montre sont effectivement très simple.

Bien cool!

Au rayon, pas si cool : la doc n'est pas super, Plagger dépends de 73 modules, pour l'installer il faut vraiment charger la version du repository de subversion (sinon, par CPAN, il ne crée pas tous les répertoires nécessaire).

Mais bon, c'est Open Source, donc tout le monde peut se mettre à l'améliorer. Dans le futur il veut ajouter des back-end DB, un meilleur support pour le contenu multimedia, support pour les calendriers...

Un excellent talk, je pense que je vais jouer avec ça quand je rentre à la maison.

Lightning Talks

Et oui, c'est l'heure de mon chemin de croix (quasi) annuel. L'heure et demi passée à tapoter fiévreusement pour essayer de suivre le rythme effréné des présentations.

D'abord MJD s'excuse pour le fait que les LT, qui auraient du être informels et sans pression, ont tournée à la grande foire. Donc cette année pas de gong, mais quand même avec des vedettes.

Audrey Tang - ppencode

La prochaine OSCON devrait être près d'une chute d'eau (waterfall, le modèle de développement), et sur Ruby on Snails. Bon, c'est presque tout des vannes, facile à transcrire ;--( Elle propose de convertir les codeurs Perl à Ruby en enlevant les touches $ et ; du clavier. Mais elle nous monter un bout de code écrit en perl juste avec des fonctions et des espaces, sans aucune ponctuation!

Puis un javascript qui convertit un texte en code perl sans ponctuation: ppencode !

Bien sur elle nous montre la réponse des ruby-ers, qui convertit un texte en code perl sans lettres !

Apparement les pythoniste n'ont pas encore fini leur version.

Un biologiste

Sans slides c'est dur pour moi de vraiment suivre. Il semble qu'il décrive un système qui émule un système sur un autre, pour que ses utilisateurs n'aient pas à s'adapter au nouveau système.

Je crois.

Il s'en servent pour distribuer des bouts de codes génétiques dans le domaine public pour éviter qu'ils ne soient brevétés.

Je crois.

Andy "Petdance" Lester - 4 sparks talk

Il avait envoyé pleins de propositions, et comme 2 seulement ont été retenues, il va nous parler de toutes celles qui ont été rejetées.

? - Perl Critic

Encore !

Perl::Critic est le premier module de son auteur. Il utilise PPI, qui parse le code Perl sans l'exécuter.

Quand on lance l'utilitaire pcritic, inclus dans la distribution, il... se plaint ! Beaucoup !

Il a un switch pour la sévérité des erreurs qu'il détecte (commencer à 5 et descendre ensuite vers 1).

Chaque règle du PBP est implémentée dans un module séparé. Dans le code on peut mettre des commentaires comme ## no critic pour éviter les plaintes abusives. On peut aussi utiliser un fichier .perlcriticrc Test::Perl::Critic peut aussi être utilisé.

Men Wang - stubmail

Un update sur un LT qu'il a donné l'an dernier.

Il pense que ça serait pas mal si au lieu de recevoir les mails sur notre serveur, on allait chercher les mails sur le serveur de l'expéditeur. A la RSS par exemple.

Donc en avril, il a organisé un hackaton avec quelques autres anti-spammeurs.

Questions : quand "poller" ? Il envoie une notification par UDP

Question : qui "poller" ? longue réponse, désolé.

C'est Email 2.0 !

http://stubmail.com

Stephan Tramm - xmlawk / xgawk

2 minutes pour arriver à taper l'URL de... sa home page.

Le micro est super fort il est content.

XML extension pour awk ! Méga Cool !

Pour moi ça ressemble à PYX (jetez un oeil à XML::PYX). En plus pour grepper du XML il y a xml_grep (distribué avec... XML::Twig) ou xml_grep2 (basé sur XML::LibXML et libxml2), disponible à http://xmltwig.com/tool/.

Ceci dit son projet a l'air assez complet.

Colin Meyer - Whitepages.com, a Perl success story

Sous-titré So you think that Perl isn't appropriate for the enterprise?

Whitepages.com est le moteur utilisé pour la recherche de personnes par msn.com, 411.com et d'autres. Ils ont 10 millions de recherches par jour, jusqu'à 2500 hits par seconde. C'est tout en Perl et un peu de XSLT. Il nous montre le schéma de leur application, assez complexe, qui servent une requête en 1/3s en moyenne. Ils utilisent juste 40 serveurs pour tout ça.

Chris "Pudge" Nandor -

Comme chacun sait il est fan de baseball (http://bumppo.net/lists/macperl/1999/07/msg00113.html). Donc il génère ses fiches de score en Perl (un truc imbitable, qui permet de retranscrire exactement ce qui s'est passé pendant une partie).

Bien sûr il nous montre la feuille du dernier match des World Series de 2004 (gagnée par les Red Sox).

Zut, j'ai raté le nom du module... je suis pas sûr que ça intéresse trop de monde de l'autre côté de l'océan.

Module::Install - une pièce en 5 actes

Unne bonne douzaine d'acteurs, pour illustrer le processus d'installation d'un module.

Bieng sur l'utilisatrice veut un module de templating, donc ça se bat un peu. Les tests ne passent pas, c'est le souk. Le développeur patche, make grogne, les tests volent sur la scène et chantent... Finalement le module s'installe... mais l'utilisatrice en fait en voulait un autre... et ça recommence au début.

Tim Bunce - DB interfaces for open source langages suck

Il nous prévient : pas de blagues dans son LT. Mais une (trés courte) vidéo de sa fille de 8 mois.

Les interfaces pour Java, C#, VB... suxent aussi, mais elles ont plus de fonctionnalités.

Les interfaces de Perl/Python/Tcl/Ruby... sont toutes légèrement differentes, les efforts sont dupliqués...

La solution : avoir un unique driver, une unique API, écrite pour Parrot. Quelle API choisir ? JDBC! Il dit bien l'API : elle est connue, stable. Les couches au-dessus pourront être différentes, mais la couche de base (correspondant à la couche DBD::*) sera JDBC. Il a déjà écrit JDBC.pm (avec Inline::Java). La v2 de l'API de DBI suivra, une fois que les problèmes d'"impedance mismatch" entre JDBC et DBI ne seront plus apparents.

Pas bête !

Andy "Petdance" Lester - Welcome to Triple Rock Baptist Church

Uh?

Ca commence par ne scène des Blues Brothers (celle où James Brown chante à l'église du titre).

Il proteste contre les catégorisations de langages de programmation.

Perl a tout, objets, closures, phase de compilation (comme java, juste plus rapide), tout quoi... frameworks, plus de frameworks

Ca finit en prêche (à la James Brown)

un membre du public qui n'a jamais fait de présentation ici - Log::Dispatch

Il n'utilise jamais print dans tous les programmes qu'il écrit (en général de l'admin système) mais plutôt Log::Dispatch. Après il peut envoyer les sorties où il veut, suivant les cas : moniteur, fichier, log, email...

Uri Gutman - A tiny templater

Encore un! Je crois que je vais vous passer les détails, si vous contactez Uri je suis sûr qu'il sera ravi de vous expliquer tout ça.

Pas encore un module (*DEITE* merci!)

Patrick Michaud - Parrot Target Practice

Il explique pourquoi tant de langages sont implémentés sur Parrot (au moins il y a des tentatives d'implémentations) et que c'est bien pour Parrot.

Mais le but de son LT est de nous montrer un peu d'APL, le dernier langage implémenté sur Parrot.

http://en.wikipedia.org/wiki/APL_programming_language vous fera peur si vous ne connaissez pas. C'est un langage ou le _code_ est en unicode, mais pas les données. Au passage ça les a fait progresser pas mal sur l'aspect unicode de Parrot.

George Wood - What I did for the Summer in Chicago

Un schéma qui décrit les différentes parties de Perl6/Parrot/Pugs/Ponie, les différentes possibiltés de compilations de Perl6 (sur Parrot Javascript Haskell et Perl5).

C'est pleing de diagrammes UML et tout, je crois qu'en voyant ça je comprends encore moins qu'avant! Il faudra que je regarde ça de plus près si je le trouve. Quelqu'un a l'url?

Bon, aprés ça je suis épuisé, je vous laisse,

Mercredi soir

Mercredi soir était la traditionelle soirée p5p dans la chambre (ou plutôt suite) de Nat. Traditionnellement, bien que n'étant pas sur p5p, j'assiste à la soirée.

C'est vraiment un des aspects d'OSCON que j'aime: je ne cause quasiment pas de Perl, mais j'ai droit à une description de zimbra et de leurs buts (virer Outlook), de openId, une comparaison de divers téléphones portables, je tire sur le hookah de Josh, je vois mon premier canadien en colère, c'est une canadienne, et j'admire Portland la nuit (si j'avais porté le chargeur de la batterie de mon appareil photo vous auriez une photo :--( heureusement, flickr à la rescousse: http://www.flickr.com/photos/80818705@N00/197831169/

Jeudi Matin

Keynotes

Je me lève un peu en retard, et je rate (comme d'hab apparement!) une bonne partie des keynotes.

J'arrive à la fin du talk de Robert "r0ml" Leibowitz, qui avait l'air bien rigolo, comparant Open Source au légumes, et combien de légumes est bon pour la santé (RMS est bien sûr un végétarien).

How SQL RDBMSes Work - D. Richard Hipp

Par le gars qui fait SQLite, mon SGBD favori (parce que mon sysadmin est nul, c'est moi!). Il devrait savoir de quoi il parle!

Pour lui ill faut penser à SQL comme à un langage de programmation, simplement il décrit ce que l'on veut, pas comment le récupérer. Chaque instruction SQL est une fonction.

Il montre un peu de pseudo-code, qui implémenterait une requête typique. Puis 3 autres versions, en ajoutant des index à lalgorithme. Juste pour nous montrer que même une simple requête peut être traduite de pas mal de façon.

Une requête un peu plus compliquée (waouh! l'auto-complétion de vi marche super bieng, c'est un vrai plaisir que de taper req<TAB>). Est-ce que ça serait facile d'écrire le code?

Son talk va surtotu porter sur cette phase, sur la compilation de la requête. Pas sur la machine virtuelle et le systême de stockage.

Différents moteurs génèrent différents formats: MySQL, PostgreSQL génèrent une structure de donnée (un arbre), SQLite génère du bytecode, d'autres génèrent même directement de l'assembleur. Ca n'est pas important, ce qui est important ce sont les principes utilisés.

Donc il nous montre la structure d'une table: chaque ligne a un id, des champs, et l'addresse oû le record est stocké. Puis la structure d'un index (valeur de l'index, qui peut être réparti sur plusierus colonnes, et addresse du record).

Pour l'instant c'est pas d'un très haut niveau. Les questions sont intéressantes néanmoins, Monty de MySQL et des gens de PostgreSQL sont dans le public et participent à la discussion.

Par exemple si on a une requête sur un champ qui est le second de l'index, PostgreSQL et Oracle (et dans le futur MySQL) peuvent quand même utiliser l'index. C'est surtout interessant si par example le premier champ de l'index n'a que peu de valeurs: le moteur doit faire autant de recherches que le nombre de valeurs dans ce champ, mais ça peut quand même être plus efficace que de balayer toute la table.

Si une requête ne doit retourner que des champs de l'index, le systême n'a même pas à lire la table, donc ça peut être intéressant d'avoir les champs les plus utilisés directement dans l'index. Sa recommendation: créer des index avec d'abord les termes du WHERE, puis ceux du ORDER BY, puis ceux qui sont retournés (pas en PostgreSQL qui va lire la table quoi qu'il arrive).

Il nous montre comment un OUTER JOIN marche. L'ordre des tables est vraiment significatif. Le SGBD optimise l'ordre bien sûr, mais avec beaucoup de tables le nombre de combinaisons explose. Alors comment le SGBD choisit-il? Il doit s'arrêter, plus de temps! ARRRRGGGHHHH!

Un bon talk au final, grâce au fait que Richard Hipp fait vraiment participer le public. La présentation sera bientôt en ligne.

What Would Good Programmers Do - Perrin Harkins

Il recommende d'utiliser perltidy sur le code. Ca évite de s'engueuler sur le format du code.

Code is always read more time that it is written : le public (target audience) du code n'est pas l'auteur 20 minute après l'avoir écrit. Son truc: il imagine toujours qu'il va devoir lire le code 1 an plus tard, à 2 heures du mat, aprés avoir été réveillé par un coup de fil de son boss qui hurle au bout du fil.

Ses principes de base:

Il n'utilise _jamais_ les formats, les variables de ponctuations, les fonctions import qui n'importent pas (genre use Catalyst qw/-Debug/;), la vieille syntaxe d'appel des méthodes (new Class), ajouter des méthodes à UNIVERSAL, re-blesser des objets existants, filtre source, use constant.

Il recommende aussi de s'en tenir aux objets basés sur des hash (curieux... tiens au passage je jette un oeil à Moose http://search.cpan.org/dist/Moose/ qui à l'air sympa).

Il essaye d'éviter: DESTROY, AUTOLOAD, wantarray (je suis etie`rement d'accord avec celui là, je suis pas assez fort pour toujours réaliser dans quel contexte j'appelle une fonction (si j'y pense).

Il évite de trop utiliser les closures, string eval, sub attributes, coderefs, fonctions exportées par un package (il préfère utiliser des classes), map/grep enchaînés, opérateur ternaire (? :) pour lui c'est juste un if/else plus court (Damian intervient pour dire que l'intérêt est que ça force à avoir un else).

Questions (de lui):

Est ce que ça rend la programmation chiante? Pour lui non, ça permet de se concentrer sur le niveau plus général, on peut s'amuser lors de la conception.

Mais AUTOLOAD est super-cool (awesome)! Ouaip, mais pas forcément dans un gros projet.

Pourquoi ne pas utiliser Java? Qui a laissé rentrer ce gars dans la salle?

A part le code: penser au contrôle de conf, utiliser les branches dans le systême de versionnement, écrire des tests.

Un talk un peu bizarre, qui me semble un peu "Perl Best Practices 2001". Il refuse pas mal des récents développements dans et autour du langage.

Jeudi Après-midi

Perl6: The Final Ascent - Damian Conway, Larry Wall

Et oui, c'est le talk annuel sur l'état de Perl6, pour la quoi, cinquième année consécutive.

A noter que pendant ce temps Eric et tous les contributeurs à mod_perl assistent au talk de Doug MacEachern, qui fait son grand retour aprés quelques années d'absence. Il semblent qu'ils ont préparé tout le marériel pour jouer les parfaits groupies. Si vous insistez un peu, et s'il a récupéré du repas de midi qui, scandaleusement, ne comprenait pas de confit de canard, Eric vous racontera peut-être tout ça.

Larry commence par nous faire un chameau (ok, un dromadaire) en ombres chinoises sur l'écran.

Damian pense que boulot sur la conception du coeur de Perl6 est quasiment finit. Il vont parler uniquement de cet aspect, pas de l'implémentation.

Au départ le design du langage etait annoyance-driven: répondre aux RFC, qui décrivaient pour la plupart les aspects de Perl5 qe les gens n'aimaient pas. Ensuite, vint la phase oû ils ont tenté de fondre tout ça dans un ensemble cohérent, d'extraire les concepts de base qui sous-tendraient Perl6. Maintenant le design est plus basé sur les implémentations. Ce sont plus des modifications mineures, sur des problèmes révélés par pugs par exemple.

Donc une liste de nouveautés dans le langage, principalement destinées a le rendre plus agréable à utiliser. Ca va vite, donc les titres vont pas forcément être traduits.

Exemples:

Conclusion: on y est presque!

When Interface Design Attack

Un bon talk sur le design des UI pour le web. Malheureusement c'était complet et j'étais en dehors de la salle.

La présentation devrait être a http://www.slash7.com

The Conway Channel

Il va présenter 2 modules: List::Maker (http://search.cpan.org/dist/List-Maker) et Contextual::Return (http://search.cpan.org/dist/Contextual-Return)

The Perl Foundation Auction

Uri (Guttman), officie à la vente aux enchères traditionelle de la Perl Foundation. C'est bien plus calme que celles de YAPC::Europe, des livres, pas de trucs stupides, c'est plié en 40 mn. =head1 Jeudi Soir

Ce soir petit repas dans un bar à vin, ou nous apprécions le magnifique slogan des tee-shirts de Best Practical (http://www.flickr.com/photos/mirod/200428767/), puis soirée Six Apart, ou j'utilise tout mon Japonais (en 20s), apprends qu'avec MySQL préparer les statements en fait diminue les performances dans beaucoup de cas (si on lit toujours les mêmes choses, le fait que la requête soit préparée invalide la mise en cache de résultats), que PostgreSQL est mieux que MySQL pour les données géographiques... entre autres.

On rigole bien de l'histoire d'un pauvre dévelopeur dont la boîte a été rachetée par une énorme boîte, qui veut leur imposer un langage différent de celui qu'ils utilisent habituellement et qui leur va trè bieng. On rigole parce que sa boite fait du Java, et qu'ils ont été rachetés par TicketMaster qui est à fond Perl. Ca change du schéma habituel. En plus le povre garçon ne reconnaît pas Nat, qui pourtant est sur scène tous les matins en tant que chair de la conf), ça fait bien rire les perleurs, nombreux à descendre les bières sixapartiennes.

Finalement vers 2 heures j'en ai marre qu'on se moque de ma françaiserie, en plus l'occupant de la suite nous mets dehors, donc au dodo.

Vendredi Matin

Keynotes

Je me lève tard (cf plus haut), mais j'arrive juste à temps pour voir Damian Conway présenter une invraisemblable parodie de businessman vendant du faux Web 2.0 (sm), une ligne de produits (non-existants) tels que iCxap (prononcer "I crap"), un aggrégateur de brevets, un OS (cxapix), un site communautaire (cxapr, prononcé "crapper")... du grand Damian, extrêmement amusant et extrêmement dur à retranscrire!

Hacking Real Stuff - Jonathan Oxer

C'est pas le vrai nom du talk, mais j'ai pas le programme sous les yeux. la salle est archi-comble.

Interfaces: le plus simple (quand on l'a encore): le port prallèle. Il est simple et demande peu d'infracstructure. Par contre il dit qu'il faut une librarie C pour y accéder, il nous code en direct live un petit programme qui fait ça. Bien sûr en Perl on a Device::ParallelPort (http://search.cpan.org/dist/Device-ParallelPort).

Il nous montre ensuite la grille de son jardin.

D'abord il nous montre la boîte au lettres: un contact l'informe quand le facteur dépose une lettre. Il invite quelqu'un à venir sur scène pour souder le circuit qui fait ça. Il a aussi divers senseurs pour lui dire si quelqu'un pousse la grille, comme ça il peut allumer la lumière si il fait sombre.

Il a aussi un radar RFID pour détecter les gens qui approchent la porte de la maison.

Il utilise un petit utilitaire, qui lit le port USB et le fait apparaître comme une socket sur le système. Là il peut utiliser PHP, Perl (il avoue ne pas trop connaître Perl, mais Larry est dans la salle (et dit qu'il y a sûrement un module sur CPAN pour faire ça)) ou Tcl (il nous montre les 3 bouts de code).

Il approche un transmetteur RFID (de la taille d'un grain de riz) du récepteur, qui l'identifie, yipee!

Dans la chambre de son fils il a un petit contrôleur qui lui permet d'ouvrir et fermer les rideaux avec une télécommande. Il a ajouté la télécommande lui même. Larry commente que pour ça il doit utiliser Ruby (on Rail... celui du rideau). Il nous montre comment faire, fer à souder en main.

Dans sa cuisine, un lecteur de code barre. Il suppose qu'il pourrait l'utiliser pour gérer ses courses.

Son système d'arrosage automatique est fait maison, pour 1/10 du prix d'un vrai.

Dans son bureau, un téléphone portable, relié à un ordinateur sur lequel il fait tourner un programme qui entre autre stocke les SMS dans une BD. Encore une fois il nous montre le code. Il envoie un sms a son portable, qui le notifie en faisant sonner un portable dans la salle! Yipee.

Sa conclusion: beaucoup hardware peut être détourné et utilisé de facon créative. Tous à vos fers à souder.

Un excellent talk pour le vendredi matin.

Conclusion

Je sèche le reste de la matinée, avec juste un passage par le talk de chromatic sur des "perl hacks that you did not know existed", mais je suis trop fatigué ce matin pour vraiment suivre quelque chose d'aussi avancé.

Au final une bonne conf, j'ai appris pas mal de chose, pas tant en Perl que sur des sujets annexes (le cours sur Vim est probablement le cours le plus utile que j'ai jamais pris). Web 2.0 et Ajax sont vraiment les 2 gros buzzwords du moment, ça tombe bien, j'aime bien javascript, a part le fait qu'il manque le foreach.

Le seul truc qui m'a un peu manqué c'est que comme la conf n'est pas dans un hotel, il n'y a pas d'endroit "naturel" ou rencontrer des gens le soir. Ca limite la possibilité de rencontrer des gens au hasard et d'aller manger ou boire un coup avec eux. A noter également que ça fait bientôt 10 ans que je participe à ces confs, et que je commence à voir les gens que je connais prendre de l'âge. C'est fini l'époque où on était tous des jeunes cons ;--( (faut dire aussi que je pense que les boites envoient moins de jeunes codeurs à Oscon, on est plus à l'âge d'or du Web 1.0).

Ciao

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