[Toulouse-pm] Oscon 2006, Mercredi
Michel Rodriguez
mrodrigu at ieee.org
Fri Jul 28 08:51:06 PDT 2006
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:
Pourquoi faire compliqué quand on peut faire simple
Ne pas utiliser la magie quand on peut utiliser quelque chose
d'implicite ("tie"d variables...)
Ne pas rendre le code plus compliqué juste pour avoir une certaine
syntaxe (ex: prototypes)
Suivre les conventions quand on peut
Il a un exemple ou il dit que "s/foo/far/" est mieux que
"s{foo}{bar}" (je ne suis absolument pas d'accord, j'utilise
_toujours_ la deuxième syntaxe)
Ne pas utiliser des fonctionnalités obscures de perl (plus risqué, moins
testées..)
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:
commentaires en ligne #{ commentaire } ou même sur plusieur lignes (on
peut utiliser d'autres crochets)
whitespace comments: \ et des espaces fait disparaitre le tout: var\
.methode
pipe operators: maintenant il s'appellent *feed* (pour éviter de
confondre avec |)
une parenthèse fermante à la fin de la ligne terme l'instruction
my $sub= sub { return "foo"; } # pas besoin de mettre un ; à la fin de la ligne
*A tribute to python*
repeat
repeat { ... } while condition();
repeat while condition() { ... }
*A tribute to Pascal*
le metaopérateur de négation
!< ou !> ou !~~ ...
paires: beaucoup utilisées en perl6
key => $value
peut aussi être écrit
:key($value)
avec pleins de ruses: on a pas besoin de virgules ":key" est
équivalent à key(1), ":!key" est ":key(0), " key<Damian" "> est
"key("Damian")" "key<<Damian is $old>>" est "key( "Damian is
$old")", et ":$age" est "age($age)" (marche aussi avec tableaux et
hash.
captures
Une liste d'arguments, sans fonction: "\($obj: $pos, $pos2, :opt2)",
qui est un vrai objet
ranges
my @range= $ok ..^ $trop_grand; # ^ marche avant, aprés ou avant et aprés le ..
my at range = $min..$max :by(2);
for ^4 { ... } # parcourt la boucle 4 fois
nombres non-décimals
my $i=03; # n'est plus un nombre octal
my $i= 0o05; # octal
my $i= 2<101001>; # toute base est autorisée
On peut aussi mettre des fractions
type *whatever*
Le sigil est *
my @endlessly_true = "true" xx *
@positives = 1 .. *; # 1 .. infini
@numbers= *..*;
my( *, $file, *, $name)= func( $arg); # * au lieu de undef
multi-dimensional qrray and hashes
indices séparés par des ;
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>)
List::Maker
Quelques exemples où l'utilisation des tableaux (ou listes) en Perl,
n'est pas complètement naturelle. Bien sûr Perl 6 a des solutions
pour tous ces cas.
Mais en attendant... List::Maker
En surchargeant la notation pour les file globing (< ... >) il offre
la syntaxe de Perl 6 pour des listes... en Perl 5.
Plus quelques extras:"@list= <4d6>;" jette 4 d6 et retourne la liste
(en contexte scalaire ça retourne le total des 4 jets). On peut
étendre la syntaxe pour ajouter ses propre délires. La seule
limitation est que les 2 crochets doivent être sur la même ligne.
Le module est sur CPAN, mais ne semble pas faire tout ça encore, il
promet de poster une version complète dans les jours qui viennent.
Curieusement, Ingy et Audrey on aussi surchargé < ... > pour
XML::Literal (<http://search.cpan.org/dist/XML-Literal>), qui semble
aussi diabolique.
Contextual::Return
J'en ai déjà parle à l'occasion du tutorial sur les API, donc je
vais pas trop insister.
Je suis pas sûr que ça soit vraiment utile en fait. C'est un peu
trop rusé pour moi. Ca revient à avoir plusieurs fonctions
différentes... mais avec le même nom. Donc ça veut dire qu'il faut
se rappeler de ce que fait la fonction dans chaque contexte, sans
que le nom ne soit une aide.
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.
--
Michel Rodriguez
IEEE Standards - Electronic Services
More information about the Toulouse-pm
mailing list