XML, the Perl Way


OSCON 2004

Salut,

Le premier compte-rendu de OSCON 2004, où je suis arrivé hier, ai eu le temps de faire un tour en ville, trouver un marche ou jouait un clone d'Elvis (mais chauve!), puis d'aller voir La Vie de Brian, ou j'ai failli m'endormir. Heureusement c'était le genre de cinéma où on peut emmener sa bière et sa pizza dans la salle, donc j'ai pu tenir.

Mais d'abord le lien du jour: PPM est de retour: http://use.perl.org/~cwest/journal/20025

Best Practice Perl

Damian Conway

Damian est toujours fun, donc me voilà en train de grincer des dents devant ses suggestions sur l'indentation des programmes... horrible! Mais bon, j'ai mon style et je m'y tiens... sauf quand je trouve autre chose qui a l'air plus joli ;--) Tiens, il vient de dire que mon style préféré est horrible. Je m'en vais! Bon, d'accord, j'ai un compte-rendu à faire, je reste.

Oh, une suggestion cool: au lieu de faire return 1 pour retourner une valeur vraie, on peut faire return rand(), qui marche la plupart du temps! Bon, OK, c'est pour rire.

Autre citation: ``si tu appelles cette fonction dans un contexte non-vide c'est que tu as un problème (elle ne retourne rien d'utile), donc le plus utile c'est de te tuer (d'un croak bien placé).

Un truc que je ne savais pas (et je ne sais pas comment ça ne m'a pas causé des problèmes!): quand on fait foreach my $var (@list) en fait $var est un alias sur les éléments de la liste, donc si on le modifie, ça modifie l'élément dans la liste. De même avec values sur un hash:

  perl  -e'%h=(a => 1, b => 2); foreach my $val (values %h) { $val++}; print %h'

donne: a2b3

Un truc que j'aime bieng: utiliser le ``ternary operator'' en cascade, pour eviter des if/else imbriqués:

  my $var=   cond        ? "val"
           : autre_cond  ? "autre_val"
           : cond3       ? "encore une autre val"
           :               "defaut";

C'est vrai que c'est joli.

Par contre je suis pas d'accord avec sa suggestion d'utiliser systématiquement les modifiers x (celui là encore pourquoi pas), m et s pour les regexps. En fait pour moi c'est clair que sans m ^ veut dire ``début de la chaîne'' et pas ``début de la ligne''. Et j'ai essayé, comme il préconise, d'utiliser \A et \Z à la place de ^ et $, mais j'aime pas, ça ressort pas autant.

Quelques modules utiles:

-
List::Util qui a notamment l'ultra pratique first, qui fait comme un grep sauf qu'il s'arrête (et retourne) le premier élément de la liste qui satisfait la condition.
-
<Lexical::Alias> permet de creer des alias: alias $hash{$key} => $alias, ensite modifier $alias modifie directement le champ du hash.
-
Readonly qui permet de déclarer des variables comme... read-only, donc constantes. Ca fait comme use constant sauf que ça crée de vrai variables, donc plus facile à interpoler qu'avec use constant:
  perl -e'use constant TOTO => "foo"; my %h=( TOTO =>"");print %h'

donne TOTO (la => met des guillemets autour de TOTO et donc le change en une chaîne normale.

En plus Readonly a l'avantage de déclarer des variables syntaxiques, donc avec une portée bien définie.

-
IO::Promtp, pas encore sur CPAN, qui permet d'avoir des prompts en mode interactif, mais pas en mode batch.
-
Perl6::Export qui remplace Exporter, et qui à l'avantage de permettre de déclarer le type d'export à l'endroit où on déclare la fonction, pas en tête du module.

Damian Conway

Ben ouais, c'est la journée Damian. Mon principe de base pour ces conférences c'est d'aller voir de bons speakers, et Damian est un des 2 meilleurs speakers dans le monde Perl (avec MJD, mais ca c'est pour demaing). Et en plus il parle de comment donner une présentation, un sujet que je sais qu'il connait bien.

Comme un gland je rate le début, ou d'après ce que j'ai compris Nat (Torkington) présente Larry (Wall), qui lui même présente Damian, en tenue d'Aikido (Larry), avant que les 2 (Larry et Damian, je sais, ma prose est parfois difficile à suivre, surtout quand je tape mes notes à 2h du mat', mais c'est une autre histoire qui n'apparaîtra pas dans ce compte-rendu... oops!) donc avant que les 2 ne se battent.

La présentation est dense, comme d'habitude, la salle est pleine et je suis assis par terre, donc juste quelques infos à retenir, sans les multiples examples et anecdotes qui en font toute la saveur:

Révélation: sa présentation sur Quantum::Superposition (cf mon compte-rendu de YAPC 2002) contenait de nombreuses... inexactitudes: il n'y a jamais eu de conférence à Copenhague, ou au moins les participants n'étaient pas ronds comme des queues de pelle, ou en tous cas pas Einstein et Bohr (pour illustrer le point qu'on peut raconter des histoires dans une présentation et qu'elles n'ont pas forcément besoin d'être vraies du moment que le message est vrai.

En fait tout le cours est illustré d'exemples de ses anciennes présentation, y compris comme exemples à ne pas suivre.

Pour créer une présentation il commence par taper écrire les notes d'abords. Sous Word ou dans un 'editeur, il commence par lister pleins d'idées, il les regroupe par thèmes, structure les thèmes en une ``histoire'', coupe ce qui dépasse (il jette beaucoup), puis enfin les slides. Simple non? Il mentionne juste le fait qu'en général il faut compter au moins 10h de préparation par heure de présentation, que pour lui c'est plutôt 20 et que pour les 3 heures qu'il nous présente aujourd'hui il a passé 80h.

En général il recommande une économie de moyens: peu de fontes différentes, d'images, de vidéos... pas trop de fonds rouge sang (sauf quand il fait sa présentation sur les maths en klingons!) Par contre il a des centaines de slides. Si il lui faut 50 slides pour illustrer un point en 5 minutes, pas de problème. Pour en revenir aux couleurs, il utilise un petit outil (dont je n'ai pas saisi le nom) sous Mac pour trouver des couleurs complémentaires pour ses slides.

Quelques conseils en vrac: toujours utiliser le micro, avec Powerpoint ne jamais utiliser les thèmes de Microsoft (ils craignent, il le prouve en nous en passant rapidement une série au hasard, et tout le monde les a dejà vu), de même la fonte Papyrus est jolie mais trop utilisée. Il déteste les graphiques détaillés dans les slides: le plus sovent ils donnent trop de détails pour être lus pendant la présentation, leur place est dans les notes. Au moment des qestions il vaut mieux répondre ``je ne sais pas'' que raconter des salades.

Enfin, pour réussir une présentation, il faut être soit-même, ne pas se forcer, s'habiller comme d'habitude, être Zen (dans le sens de se laisser porter par l'interêt qu'on a pour le sujet).

Voilà, 3 heures instructives et amusantes où effectivement il montre qu'il aime faire des présentations, utiliser des voix rigolotes, se moquer de lui-même et de en général faire le clown.

Welcome to my bin

MJD

Quelques petits bouts pour commencer: fork && exit; pour mettre le process en background. exec $command; die "could not run $command"; exec retourne uniquement si la commande ne marche pas.

Il présente les outils de son ~/bin, sur le même principe que Damian l'an dernier a YAPC. J'aime bien ce genre de talk parce que ça me donne des idées, et surtout ça m'incite à être plus fénéant, vraiment fénéant, cad écrire mes propres outils.

Il nous prévient d'abord que le code qu'il va présenter est tel quel, brut de sa machine, y compris les fautes de frappe, le traitement des options non-standard, et surtout le thème qui lui est apparu en préparant le cours: ``over-engineering'', ses outils sont souvent un peu trop compliqués, surtout avec des options dont il ne se sert jamais.

Il nous présente d'abord un programme qui replace slocate. Il construit juste une liste des fichiers sur sa machine (avec find!) et ensuite utilise une couche au-dessus de grep. Je pense que je vais réutiliser ça, j'en ai marre de ne pas pouvoir utiliser d'expressions régulieres avec slocate. Du coup je tape slocate toto | grep 'toto$' trop souvent.

Maintenant pgrep qui remplace grep. Il lui permet de remplacer par example find . -type f | xargs grep /foo/. Tiens, il utilise printf( "%2$s",...), ou le %2$s sort le deuxième argument du printf (le printf a toujours la même liste d'arguments et il construit le format en fonction des options). Je peux faire le barbot et montrer que je connais les options de grep mieux que lui parce qu'il a écrit pgrep il y a 2 ans alors que j'ai écrit xml_grep l'an dernier ;--)

Maintenant ticker: ``it is an incredibly useless program that takes up an enormous amount of cycles and I use it all the time'': il fait comme tail -f sauf qu'il affiche la taille du fichier. Pour quand on veut savoir si le (ou plusieurs) fichier grossit, sans être interessé par son contenu. Le code sommence par use FileHandle;... qui n'est jamais utilisé. Au cas ou certains ne connaitraient pas, comment utiliser un module si il est installé, sans mourrir s'il ne l'est pas:

  if( eval( 'require Time::Hires') ) { import Time::Hires; }

Un autre truc que je savais pas: print "\r"; revient au début de la ligne sans changer de ligne (sous unix).

Il a quelques options rigolotes, qu'il n'a jamais utilisées: le nombre de pages (lignes/66) du fichier, le taux de grossissement...

Bon, on passe a ftail. Il utilise supervise pour les services genre mail. supervise se charge de la rotation des logs, ce qui fait que tail -f n'affiche plus le bon fichier (mais le vieux log qui ne grossit plus). Donc ftail suit le fichier par nom. En fait maintenant tail --follow=name fait ça.

Puis f, qui remplace awk '{print $7}' (remplacé par f 7). Le code fait 4 lignes (juste décrementer l'argument, un split et voili!). En plus il peut faire f -1 pour avoir la dernière colonne. Wouah, je me rappelais plus de l'option -a qui met Perl en mode awk (la ligne est split-ée et @F reçoit le résultat).

On passe a psgrep, qui fait juste l'équivalent de ps -ef | grep, sauf que en plus ça laisse l'en-tête qui donne le nom des colonnes. 5 lignes, tout bête mais ça fait gagner du temps.

sw lance un process dans une petite fenêtre (sw veut dire small window). Au lieu de lancer les process en background il les lance avec sw le plus souvent. Il découvre, à sa grande surrise que le code est... ! ligne de shell!!

  exec rxvt -fn 6x10 -e "$@" &

Tiens, il trouve un bug dans attach, qui lui permet de créer depuis la ligne de commande des mails avec des attachements.

Sa conclusion: ses programmes sont souvent assez mal codés, mais en fait comme ils sont courts ça n'est pas très grave, ils marchent assez bien et il s'en sert s'en arrêt.

Hands-on Hacking

David Allen

Comme je suis mon propre sysadmin, il faut bien que je me renseigne un peu sur la sécurité...

Rien de très nouveau pour l'instant, je crois que je vais sécher. C'est vraiment pas de très haut niveau.

Interlude

Je sors et me retrouve à discuter avec 2 couples de nouveaux mariés: Skyler et Jo Walsh, qui font dans le géo-wanking pour ceux qui se rapellent de YAPC::EU, et Alex et Anna Martelli, qui habitent à Bologne, mais qui malheureusement font du Python ;--(

Waouh! The Perl Review est sortie, toute fraîche, avec mon article Extending XML::XPath dedans, yipee!

Ensuite ce sont les ``Open Source Awards'', un nouveau trucs dont je saisis pas trop l'utilité, sauf que c'est Larry qui reçoit le premier. C'est remis par Eric Raymond qui n'aime décidément pas Perl puisqu'il explique que c'est surtout à cause de... patch que Larry est récompensé! Bien sûr Eric... Mitchell Baker reçoit une autre prix, pour la license Netscape. A mon humble avis si on doit récompenser quelqu'un pour une license ça devrait quand même être plutôt Stallman, mais bon...

State of the Onion

Larry Wall

Le thême de cette année: les screen savers! Larry illustre tout son speech de screen savers! Il explique que les ennuis de santé qui ont commencés l'an dernier à cette époque ci ont étés quand même assez sérieux: une opération pour enlever une tumeur, bénigne, de la taille d'un poing dans lestomac, des complications, une autre opération pour lui enlever un gros bout d'estomac, d'autres complications... 2 mois d'hôpital en tout. Il arrive à raconter tout ça avec humour.

White Camel awards

Jon Orwan (qui a crèè The Perl Journal, Dave Cross, le leader de tous les mongers et brian d foy recoivent ensuite un ``White Camel'', qui récompense des membres de la communauté Perl pour leur contributions

Mercredi: Keynotes

2 keynotes:

Tim O'Reilly, philosophise sur ce qui lui semble intéressant aujourd'hui. Au passage, dans le sac qu'on reçoit quand on s'inscrit, on a un petit livre ``Tim O'Reilly in a Nutshell'' qui recueille ses discours. Ca fait beaucoup rire, on organise des sessions de lectures où on étudie religieusement sa bonne parole ;--)

Puis un speech rigolo de Robert Leftkowitz intitulé The Semasiology of Open Source, où il conclut que le source n'est pas forcément le plus important, que souvent ce sont les documents de spec qui le sont. Particulièrement intéressant: la partie où il explique l'effet des pratiques comptables (et comment elles ont changées) sur la création de software.

Perl6

Damian Conway

Après ce talk, promis, j'essaye d'aller voir d'autres speakers que Damian!

Donc les nouvelles de Perl 6 en vrac, au moins les trucs que je savais pas.

slurp va être dans le core (pour lire tout le contenu d'un fichier d'un coup). Il décrit briêvement les formats (ça sera un module). Le nouveau sort acceptera non seulement une routine pour trier, mais aussi un bloc qu donne simplement la façon de calculer la clé de tri.

Une description simplifiée (par rapport à l'apocalypse!) du system objet de Perl 6, qui reste perlien dans le sens que beaucoup de chose sont créées par défaut,mais on peut les changer si nécessaire. Donc au départ on peut écrire du code très simple et compact, mais on peut détailler si on veut, pour avoir des attributs ou méthodes privés par exemple.

J'aime bien que . puisse être utlisé comme mutateur: $obj .= method(), qui fait la même chose que $obj = $obj.method(). Il explique les rôles, mais comme je tape bien plus lentement que Damian ne parle il faudra que vous alliez sur http://dev.org.

Enterprise Perl

James Duncan

James bosse pour Fotango, et décrit comment gérer Perl dans le contexte de gros projets. Il a dejà fait cette présentation l'an dernier et elle a eu beaucoup de succès, donc je suis là en session de rattrapage.

Damned, c'est pas le même talk que l'an dernier, ça va être à un niveau plus pratique. Bon, ça me va quand même.

Il commence par dire qu'il déteste le mot ``Enterprise''. Mais bon, pour lui ça veut dire que c'est un outil pour la boite, pas un produit qu'elle va vendre. Autrement dit ``les gens se mettent en colère si ça ne marche pas''.

Dans ce contexte, ses recommendations:

-
utiliser la programation objet
-
ne jamais répéter du code (si on doit corriger un bug c'est quand même plus facile de le faire à un seul endroit)
-
Il prefère des méthodes simples et courtes, qui implémentent 1 seul concept. Oops, je suis plutôt du genre à avoir des fonctions super longues. Le contenu d'une boucle devrait quasi toujours être un appel à une méthode.

Ne pas assigner une variable plus d'une fois dans la même méthode.

-
Les constantes doivent être crées 1 fois seulement. Notament les constantes qui ont une portée de plus d'un module doivent être regroupées. Ceci dit il déteste les fichiers de config (à quoi je réponds que tant qu'ils sont en XML, tout va bieng).
-
tracer à un niveau approprié (pas trop, mais assez)

Il nous montre un exemple, réel

Il admet que tout ça prête legèrement à controverse.

Maintenant il passe à la partie vraiment controversiale (?) du talk!

-
utiliser les exceptions (il explique comment mais je suivait pas)
-
penser au donne;es de manière plus large que simplement leur type de données. Surtout penser en termes de messages et de comportmenent. Au lieu de baser le développement juste sur l'analyse des données, penser en terme de ``qui doit communiceravec qui''. Ne pas non plus penser en terme d'etat (state), cela conduit à des systèmes a forte dépendance entre les composants. Mais bon, les ``stateless systems'' ont le mêmes problèmes! Le secret est de trouver un bon compromis.
-
son conseil: ne pas avoir les noms des classes en dur, c'est plus difficile de changer si on change une autre partie du système.
-
ne JAMAIS mettre d'arguments dans les constructeurs, appeler des méthodes après la création pour initialiser l'objet. Et tester dans les méthodes qui utilisent l'objet qu'il est dans un état valide (initialisé) On peut faire ça en surchargeant la booleanisation de l'objet.
-
retourner quasi-systématiquement l'objet lui-même (sauf quand la méthode doit retourner un attribut évidement!). Ca permet de chaîner les appels de méthodes (ca j'aime!) Class::Accessor::Chained fait ça
-
au lieu d'utiliser les structures de bases de Perl, souvent il a une classe de base (Array ou Hash) qu'il sous-classe pour pouvoir ajouter des comportements differents, au lieu d'utiliser arrays ou hashes.
-
de plus en plus osé: il n'aime pas les if, ca rend le code confus! Il explique comment faire pour éviter beaucoup de conditions en utilisant 2 classes, True et False... et ça va trop vite pour que je tape, désolé, Léon devra compléter pour moi.
-
utiliser les singletons (mais perl ne fait pas ça très bien).

En conclusion, programmer c'est le plus souvent parler à d'autres programmeurs, pas à une machine. Ne pas se répéter est le plus important. =head2 Why Data Stinks

Joe Celko

Arnaque! En fait, sur les slides le talk est intitulé Data Quality in SQL!

Ca va donc causer de pourquoi les données qui atterrissent dans les BD est souvent de si mauvaise qualité

Il nous décrit quelques vieux cas où le système n'était pas prévu pour des cas qui évidement sont arrivés de suite. Genre les codes ISBN qui peuvent être ambigus (ils ont des champs variables mais non délimités).

Il nous donne pas mal d'anecdotes et de trucs, c'est rigolo. Interessant: utiliser ISO-11179, un dictionnaire de noms de données (data élément names). Quelques conseils de base: un seul nom pour la même information dans différentes tables. POur ça utiliser CREATE DOMAIN, une instruction que je connais pas en SQL. Ne PAS tester sur la vraie BD (apparement la sécu américaine avait l'habitude de faire ça). Il conseille aussi, si vous êtes responsable de la BD, de ne JAMAIS faire confiance aux données envoyées par le ``front-end''. Après tout les codeurs du front-end ne sont pas vraiment responsables de la BD. Donc il conseille d'avoir le front-end qui vérifie ET la BD qui fait des CHECK.

Donc un talk assez sympa, rigolo, mais pas si relevant que ça pour moi.

Lightning Talks

Bon, je suis prêt, laptop en position, il me reste un peu de charge dans la batterie, voilà l'épreuve annuelle, celle qui sépare les compte-rendeurs efficace des amateurs du clavier qui commnence...

Code Generation, Merijn Broeden
Il parle de l'API SOAP qu'il a écrite pour Morgan Stanley. C'est une API très simple, plus rapide que SOAP::Lite. Les dévelopeurs des autres langages sont jaloux de sa simplicité, elle cache complètement le XML (veinards ;--) Par contre il utilise XSLT à un point. Ca ressemble aussi à du Java, ce dont il s'excuse.
Class::Prototype Un gars de l'université de Buffalo et Randal Schwartz
Je suis pas sûr du nom, c'est écrit nulle part. Une architecture pour des applications CGI, ça sera sur CPAN bientôt. Ca permet d'avoir simplement la ``boucle externe'' pour le CGI, et on peut simplement ajouter des méthodes pour chaque page. Ca utilise Class::DBI, TT2...
Perl is too slow Matt Sergeant
alors que ``Java is Fast'' (et facile à debugger, il montre un dump de stack java).

mod_perl résoud le problème pour les appli webs, mais pour le reste? Matt a écrit Pperl qui fait ça pperl est 10x plus rapide que perl. Il utilise notamment un nouvel algorithme pour le pattern matching. Text::QSearch devrait être sur CPAN bientôt.

Cool!

Aegis Schwern
Premier mot: ``shit'', 2eme: ``grrr''

Il n'aime pas CVS, et il déteste recevoir des patchs. Mais il écrit baucoup de modules. Donc il utilise Aegis, qui permet à tout le monde d'intégrer ses patches, mais c'est lui qui contrô;e quand (et si) la modif est vraiment intégrée. Il a mis Test::More dessus. Par contre il faut avoir accès à la machine, Aegis ne marche pas trop en réseau.

Thomas
Pour répandre les logiciels Open Source dans les pays en voie de dévelopement, qui souvent n'ont pas accès à internet il a crée... une boîte en carton dans laquelle il met des CD, sélectionnés.
The Package Factory, Daron E. CLay
Il bosse a Boeing, où ils utilise énormément Perl, et un peu Python. Il crée des outils pour installer des packages sur différentes plateformes chez Boeing. Il liste la taille du projet, montre des écrans... bof (mais je suis peut être un peu biaisé, je bossais chez Airbus avant ;--) C'est écrit en PHP, ca tourne sur RedHat avec PostgreSQL sur VMWare.
Start using prove, Andy Lester
C'est comme make test, mais c'est mieux, c'est intégré dans Test::Harness et maintenant dans le core. Ca donne une sortie plus propre que make test. prove n'utilise pas make. On peut faire prove test/ et il eéxécute tous les tests (.t) dans test/. Brèfle, faite prove -man avec un perl récent.
David Turner
Il bosse pour Richard Stallman. Il commence par lire un poeme. Il s'occupe de license. Perl est dans un état épouvantable ;--( Personne ne sait ce que la license artistique veut dire. Il existe maintenant une ``clarified artistic license''. Il est rigolo, sait de quoi il parle et ressemble à un geek. Applaudissements bien mérités.

Ouah! Ma batterie à tenu! Il me reste 9%, la vie est belle.

Jeudi: Keynotes

Le compte-rendu va être facile: j'ai séché! La soirée d'hier a été assez longue.

Amanda

Fabrizio Fan

Je continue dans la série sysadmin. Pour l'instant mon système de backup est basé sur rsync, donc je garde juste une image de mon systême, en cas de crash, mais pas l'historique.

Il nous raconte pourquoi il a décidé à utiliser amanda, en décrivant la situation quand il a commencé à bosser a la fac: pas de systême centralisé de backup, il fallait qu'il mette à jour le cron tous les mois... le souk.

Ceci dit ça m'inquiète un peu: il donne les résultats d'un sondage des utilisateurs ou le plus gros volume sauvé est de 700GB par jour (c'est le volume du dump incrémental, pas le volume total). J'ai assez souvent plus que ça quand je re-génère certains trucs.

Amanda contrôle le niveau de dump qu'il fait.On peut lui dire de faire au moins un dump complet par semaine par exemple, mais ensuite il décide lui-même si c'est mieux de faire un dump de niveau 0, 1 ou 2.

Restaurer: amrecover pour un fichier, ou amrestore pour tout un disque. Si le disque ou est installé amanda on peut quand même restaurer avec juste les outils unix classique. En fait il suffit d'avoir la bande, et le premier fichier donne les commandes pour restaurer avec dd, il suffit de copier/coller.

En cas de problème amanda essaye de faire au mieux. amcheck vérifie tout, il suffit de le faire tourner une fois par jour, ou quand on change un fichier de config.

Installer le serveur est plutôt compliqué. Il conseille d'utiliser 2 cycles: 1 automatique, en cron, et 1 manuel qu'on peut faire tourner à la demande.

Il nous montre les fichiers de config, qui semblent assez clair.

Quelues outils cool: amplot, affiche un graphe de l'activité d'amanda, amstatus qui filtre les logs d'amanda... plus de 20 sont disponibles avec amanda.

Une bonne introduction, pas trop technique mais qui donne envie d'utiliser le soft. Elle est en ligne à http://www.cis.uab.edu/fran/

Class::DBI

Casey West

Waouh! La salle est archi-comble! Je suis assis par terre au fond avec le laptop enéquilibre précaire sur mes genoux.

Il nous montre un bout de code typique avec DBI. Puis ce que font les gens typiquement, construire une sur-couche maison. NON! C'est une voie dangereuse, c'est comme ça qu'on arrive à des trucs hyper-complexe et difficile à maintenir.

Il passe à un exemple de modélisation. Il explique que les DB suxent comme outils de modélisation. En gros, si je comprend, on se fiche des tables, en général on modélise plutôt des objets.

Le module semble intéressant, il masque le SQL en général mais permet quand même d'en écrire si on a besoin.

IO::All and other Spiffy modules

Ingy

Holly Molly! La salle est pleine, les gens sont assis par terre, ça déborde dehors, dans le couloir... dont moi.

IO::All est toujours bien,

Building a book with SafariU

Allen Norren

Ben ouais, de temps en temps je vais voir des présentations dans mon domaine d'activité.

SafariU est une exension de Safari qui permet à des profs de créer des cours à partir de chapitres de bouquins de Safari, d'articles de O'Reilly Networks et de matériel à eux. On peut ensuite commander le bouquin à O'Reilly qui l'imprime. On peut avoir accès aux bouquins créés par d'autres, les modifier... Les bouquins sont vendus 16cts la page, ce qui est bien moins cher que les bouquins habituels. Les étudiants peuvent aussi prendre un abonnement à Safari juste pour les bouquins du cours.

C'est rigolo parce les bouquins ainsi créés ont un ISBN.

C'est un nouveau service, qui sera lancé en août.

What does book sales tell us about technologie

Tim O'Reilly

Tim nous montre des chiffres des ventes de livres techniques, et quelques outils qu'ils ont fait pour les visualiser. C'est pas trop palpitant en fait, ils en sont juste au début du projet et n'ont pas encore trop d'idées sur comment exploiter et corréler ces données.

Python Lightning Talks

Non, je vous rassure, je ne suis as passé du côté obscur... mais le premier talk est la fin du pari de l'an dernier où Dan Sugalski, qui bosse (beaucoup!) sur Parrot, a pariéque Pyhton sur Parrot irait plus vite que le Python de base. Il a perdu :--( En fait Guido a fourni 7 bench apparement bien tordus, et Dan n'a réussi à en faire tourner que 4 (3 2 x plus vite que Python et 1 un peu plus lent). D'après les termes du pari Dan a perdu, et Guido peut lui lancer une tarte à la crême à la figure. Dan est donc habillé bien crade, une bâche en plastique est déployée au fond de la salle, où on compte plus de Perleurs que de Pythonistes.. hélas Guido est petit et réfère manger la tarte, sous les huées des perleurs qui veulent voir la tarte voler... puis quittent la salle en masse. Mais l'histoire ne s'arr^te pas là...

La vente de bienfaisance

aka ``The Auction''

Astucieusement l'auction est dans une salle à côté du bar où Novell paye à boire (``free beer''). I n'y a pas trop de monde mais on recolte quand même un peu plus de $3000.

Je sort plus léger de qulques sous mais avec un exemplaire de Perl Debugged, un bon bouquin épuisé, signé de l'auteur, un abonnement a Safari (j'ai oublié que j'en avait gagné un la semaine dernière) et surtout une photo de Schwern en train d'enlever sa chemise sur les genoux de TorgoX qui grimace de dégout.

A la fin des enchères tout le monde se cotise, et pour $500 nous emportons le droit de... lancer une tarte à la crême sur Dan! Yipee! C'est Schwern, en tant que plus gros donneur, qui sera chargé de l'exécution, vendredi, dans la plus grande salle.

Sufficiently Advanced Magic

Damian Conway

Il commence par une longue, et très rigolote, intro basée sur Harry Potter, à grand renfort de photoshop.

Exemple de magie: utiliser use strict;: d'un coup le programme qui marchait ne marche plus du tout. Et si en plus on fait use diagnostic;, non seulement on va en enfer pour nos péchés, mais en plus on a droit à un long sermon les expliquant.

Il revient sur IO::All, expliquant sa magie. Mais ça n'est pas assez pour Damian, bieng sûr! Donc il a écrit IO::All::Pulp::Fiction, où il peut écrire $line=<~/example/toto.txt> avec juste le nom du fichier. Kewl!

Autre example: Perl6::Say, qui fait ajoute un \n à chaque print. Il conseille d'aller voir dans Perl6::, c'est plein de trucs comme ça.

Il nous encourage à faire ce genre de choses: trouver des aspects du language qui nous ennuie, et créer un module qui les simplife. IO::Promptest un autre example, je crois que j'en ai déjà parlè.

Puis il passe à Smart::Comments, qui permet de mettre de simples commentaires qui tracent le programme et montrent des ``progress bars'' si on veut. Très cool. En plus ça permet de mettre des assertions dans le programme.

Il montre ensuite son vieux Lingua::EN::Inflect, et dit qu'il va essayer de simplifier l'interface, pour qu'on puisse juste ecrire une phrase au singulier, avec une variable, et ça change les mots pourles mettre à la bonne forme. Oh,tiens, il nous montre que ça marche, Lingua::EN::AutoInflect juste met au pluriel une phrase si necessaire. Magique!

The Joy of Index

Josh Berkus

Le sujet est les indexs avec PostgreSQL: qu'est-ce que c'est un index, comment indexer, quoi indexer, quoi ne pas indexer, et comment se sentir après avoir indexé ;--)

Donc on commence au début: les indexs sont des aides, pour avoir plus de perfos, donc il faut commencer ar concevoir la DB, et seulement après, penser aux indexs.

Penser à une BD en terme de livre, avec des pages et un index à la fin, aide à comprendre.

Comment indexer: il faut bien comprendre son application, il n'y a pas vraiment de stratégie qui marche à tous les coups. 2 stratégies générales:

-
indexer presque tout, puis enlever des indexs quand on voit qu'ils ne servent pas. Marche mieux avec de petites DB.
-
indexer le moins possible, et rajouter des index uniquement si on a des problèmes de perfos

4 raisons d'indexer: clefs et joins, en fonction des clauses WHERE, en fonction de l'ordre et en fonction de GROUP BY. clefs: en général la DB indexe es clefs primaires, mais pas forcément les champs utilisés comme FOREIGN KEY. Pour les index en fonction de l'ordre, il faut souvent des indexs sur plusieurs colonnes. Toutes les DB ne peuvent pas utiliser les indexs pour accélérer les aggrégations (GROUB BY), PostgreSQL par exemple ne les utilise que dans les versions les plus récentes.

Ne pas indexer: ne pas indexer les petites tables (moins de 100 lignes), ne pas indexer les tables qui sont mises à jour ``très souvent'' (le très souvent dépend des produits). Ne pas indexer les colonnes qui ont peu de valeurs différentes.

Il faut faire très attention aux indexs sur plusieurs colonnes, souvent ils deviennent très gros et peuvent ne pas être utilisés si la (les) premières colonnes ne sont pas utilisées dans les requêtes.

Indexer seulement une partie de la table marche très bien (ça réduit la taille de l'index et les requêtes sont beaucoup plus rapides).

Il nous montre différents examples.

Les Keynotes de fin

Les résultats du concours de photo: justin Leston and Kim ??? On voit la photo de Justin... sur l'écran de son téléphone! Pour une salle de plus de 500 personnes.

La TARTE!!!!!

YEAHHH!!! Schwern est sur scène, mais finalement Guido, puis Nicholas Clark (othographe corrigèe et approuvèe) balancent chacun une tarte! Très jolis effets de crême qui vole, on peut apprécier les 2 techniques: Guido lance de face, ce qui donne un bon taux de couverture du visage, Nick attaque de côté, ce qui est plus joli à voir, mais bien sûr ne blanchit qu'un côté du visage. Je suis sûr que des photos de la scène seront bientôt partout sur internet.

Puis Milton Nam, qui a parlé en 2002 et 2003 de Lord of the Rings, revient pour nous parler... des longues vacances qu'il a prises après le film! Non, il nous repasse la bande annonce du film. 500 personnes ont bossé dans sa boîte sur le dernier film (ils étaient 20 au départ!). Depuis ils ont bossés sur d'autres films, et il ont trouvé ça super facile ;--)

Ils ont un problème: les écrans LCD ne sont pas assez bons pour eux, et ils ne trouvent plus d'écrans cathodiques.

Puis il nous montre comment ils ont filmés certaines scènes, y compris certaines où on pourrait penser que tout est généré mais en fait seuls quelques détails le sont. Les combats avec l'araignée géante dont j'ai oubliéle nom sont rigolos,en vrai l'acteur se bat avec un genre de balai. Il y a vraiment pleins de détails qu'on voit à peine à l'écran qui sont générés. Les scènes avec du feu ont été les plus dure à faire. Les shoots originaux, avec les acteurs devant un écran bleu, sont parfois vraiment marrants, comparés au résultat final. Il nous montre une longue séquence où on voit les oiseaux/dragons/ptérodactyles en vol et autour de... Ysengaard je crois, qui leur a pris 9 mois à crèer. La tour est faite de 6 millions de pièces!

Leur prochain projet est King Kong, il pense qu'animer la fourrure du singe va être assez dur (``hairy''en anglais ;--), aussi par Peter Jackson. Ca devrait être plus gros que ``Return of the King'' pour eux. Plus bien sûr la version longue de LOTR en DVD.

Par contre il n'est pas vraiment content du changement de license par RedHat. Cela a fragmenté le marché, et comme ils ont énormément de machines ils ne peuvent pas se permettre de payer suivant ce modèle. Du coup ils tournent toujours sur RedHat 7.3 Surtout ils ne gagnent pas trop sur les gros films, c'est surtout la pub qui paye. Ils regardent donc Suse et Mandrake, et même si ils peuvent créer leur propre distro.

Il remercie apache, mod_perl, perl, linux (``2.6 kicks ass!''). Autre bonne ligne: ``sometimes I whished I had an army of developpers working for me, but then I realize I do!''

Conclusion

Encore une excellente conférence, les sessions étaient bien, j'ai pu voir tous mes potes, mon chef, des tartes. Il manquait juste quelques français, Eric et Robin en tête.

Bon, je ne repart que dimanche, mais le reste de mon séjour est couvert par le secret (self-) défense, donc fin du compte-rendu!

A ciao!