Copyright © 2002 - Michel Rodriguez.
Michel Rodriguez, fondateur de Toulouse.pm (http://toulouse.pm.org/) était présent à The Perl Conference 6 (TPC 6), dans le cadre d'OSCON (Open Source CONference) 2002 organisée par O'Reilly à San Diego..
Cet article, mis en forme par Philippe "BooK" Bruhat, reprend ses comptes-rendus, rédigés en direct depuis la conférence et envoyés par mail à la liste de Toulouse.pm.
Michel a également pris des photos : http://www.xmltwig.com/mirod/pict/geek_stuff/tpc_6/.
Date: Mon, 22 Jul 2002 11:54:20 -0400 (EDT)
Salut!
Bon, ben me v'la en direct de San Diego, à la Conférence Perl, sixième du nom, TPC6 quoi.
Je suis arrivé hier soir, j'ai déja mal à la tête (comme à chaque fois que je croise London.pm...), j'ai croisé quelques français (Eric Cholet, Antoine Quint)...
Ce matin au programme : Perl pour l'administration système, ça peut me servir, vous savez que je suis le pire sysadmin que la terre ait jamais porté. Cet après-midi je vais probablement embêter Kip Hampton qui fait Perl & XML.
Bon, le premier tutorial commence, à plus.
Oh, et je suppose qu'il y aura des commentaires sur #perl
sur
rhizomatic.net
.
Au rayon teeshirts, pour l'instant le score s'établit à 3 : le O'Reilly habituel, plus 2 de London.pm, un rouge Sunnidale.pm et un noir Ank-Morpork.pm.
Date: Mon, 22 Jul 2002 16:25:41 -0400 (EDT)
Bon, y a que des vrais sysadmins ici, je me sens pas bien. À part ca l'instructeur est rigolo, c'est David Blank-Edelman, l'auteur du bouquin de O'Reilly sur le sujet.
Première partie : quand utiliser un hack et quand éviter, comment s'en débarasser. De l'importance d'avoir des outils prêts en cas de crise. Où recuperer du code utilisable (le Cookbook, son bouquin, perlmonks).
Bien sur le plus utile c'est CPAN.
Damned, je savais pas que taper r
dans le shell de CPAN donne
la liste des modules installes sur la machine, cool. J'ai 316 modules
installés sans numéro de version !
Sur PC Windows ppm
est l'équivalent de CPAN. Un truc qui peut
être utile si vous avez cassé le fichier de config (XML) de ppm
:
ppm gen_config > perl/ppm.xml
.
D'autres outils utiles :
perl -d -e0
pour démarrer le debugger perl "à vide" et pouvoir
tester des bouts de codes
inetd
peut faire tourner des scripts perl
lsof
liste les fichiers ouverts (ça je savais, na !)
procmail
rsync
unison
(comme rsync
mais permet de synchroniser
différentes machines, la home page a l'air morte mais
Mandrake a un package et LinuxWorld a un article
(http://www.linuxworld.com/site-stories/2002/0111.unison.html).
Infos variées :
l0pht-watch surveille un répertoire et donne les noms de fichiers écrits et détruits, y compris les fichiers temporaires (lien depuis http://www.shmoo.com/prog.shtml)
lockfile
un programme qui est installé avec procmail
permet de... locker (je sais pas traduire) un fichier. C'est dur de faire
ça proprement (http://perlmonks.org/index.pl?node_id=14139
décrit une facon propre de le faire en Perl), mais c'est plus simple de juste
utiliser lockfile
Une recette pour éviter le "symlink shuffle" (un méchant symlinke un fichier entre le moment où un fichier est ouvert et celui où le programme écrit). J'ai le code, demandez le moi quand je rentre si ça vous intéresse.
Un slide intéressant comparant les file systems sur différents OS, un
autre qui détaille les valeurs retournées par stat
sur differents OS.
File::Spec
aide à écrire du code portable. C'est chmod 0666, $file
, PAS
chmod 666, $file
, Stat::lsMode
peut aider.
MD5: know it, use it, love it! Il montre comment s'en servir non seulement pour des fichiers mais aussi pour les résultats de services (une zone DNS par example).
Source Control System : je le fait pas pour mes fichiers systèmes et
j'ai honte maintenant ;--(
Il conseille RCS plutôt que CVS pour les
fichiers systèmes (rcs
n'autorise pas des accès concurrents, et
cvs
ne remet pas les fichiers au bon endroit quand on commet
une modif), il y a un module RCS qui permet de s'interfacer depuis Perl.
Ouf ! C'est la pause ! Pile a l'heure, le talk de MJD Conference Presentation Judo (http://perl.plover.com/yak/judo/presentation/, lien depuis un de mes messages de YAPC) a l'air d'avoir été lu par tout le monde !
Chic, un cartoon ! Une compile de vieux jeux videos, avec un personnage qui se promene dans pacman, frogger, pong, etc, y a au moins 20 jeux differents, il devrait nous passer l'URL plus tard.
Se promener dans les répertoires : utiliser File::Find
.
Au passage je DÉTESTE File::Find
, l'interface est nulle. J'ai un
post sur perlmonks (http://perlmonks.org/index.pl?node_id=109068
c'est mon post le plus populaire, je dois pas être
le seul à avoir des problemes avec File::Find
) qui explique comment
utiliser des closures pour passer des arguments au callback.
Il n'a pas l'air de l'aimer non plus, aucun de ses exemples ne l'utilise.
Un example intéressant d'un script qu'il a utilisé pour trouver les
fichiers corrompus sur le disque d'un laptop qui était tombé par terre.
Une partie sur les comportements anti-sociaux des utilisateurs (j'ai ça à
la maison mais comme le seul utilisateur c'est moi je peux pas trop sévir
;--)
)
Proc::ProcessTable
permet de récuperer des infos sur l'état du système,
pour par exemple killer tout process qui consomme trop de mémoire ou de
CPU. Comment détecter les utilisateurs qui font tourner des binaires
"suspects" (non autorisés, genre des bots IRC ou nmap
) mais qui
finement changent le nom de l'exécutable : lsof
peut aider (en
détectant les ports utilisés par un process par exemple).
Détecter les intrusions ; quelques trucs intéressants :
regarder les process qui tournent avec "./"
qui se loggent de plusieurs
domaines différents (surtout si c'est à 5 minutes d'intervalle depuis
Boston et la Norvège)
De nombreux exemples de courts scripts pour établir des démons utiles, ou simuler un client ou un serveur.
Quelques anecdotes rigolotes... et c'est fini.
Infos diverses :
La nouvelle version du moteur de recherche de CPAN est à http://search-beta.cpan.org/ et a l'air cool.
Ah oui, j'ai récupéré la version 2 de Mastering Regular Expressions, plus le bouquin sur OpenSSL.
Et j'ai un draft de la review de Perl & LWP à http://www.xmltwig.com/review/perl_lwp_review.html.
Date: mardi 23 juillet 2002 15:19 -0400
Salut,
Bon, ben j'ai pas trop de compte-rendu pour l'après-midi de lundi, vu que
plutôt que d'aller voir Perl & XML (très bien d'après mon chef) j'ai
préféré rester à la terrasse de l'hôtel à descendre des bières avec les
français du coing, Eric Cholet, qui bosse sur mod_perl
, Antoine Quint,
qui faisait du SVG et du DOM dans son coin, Robin Berjon qui fait dans
le SAX et quelques XML-ers comme Matt Sergeant (54 modules sur CPAN la
derniere fois qu'il a compte).
Ce matin c'est Advanced DBI (je sais bien que je fais même pas de Basic DBI, mais si vous croyez que ça va m'arrêter!).
C'est surtout sur "comment optimiser votre code pour qu'il aille le plus vite possible". C'est Tim Bunce, l'auteur de DBI qui presente.
En vrac :
analyser les requêtes avex EXPLAIN (ça dépend de la DB)
utiliser des placeholders même avec do
fetchrow_arrayref
est la méthode la plus rapide pour
récupérer les résultats...
sauf que bind_columns
est encore plus rapide!
fetchall_arrayref
a été amélioré et est assez rapide
maintenant
connect_cached
peut être utile pour cacher un DB handle
(si on garde la connexion toujours ouverte on peut avoir des problèmes
si la DB est redémarrée), sauf si on utilise des transactions.
Profiling. DBI::Profile
permet de profiler du code DBI.
Error Handling. les erreurs ça arrive, c'est de ne pas prévoir qu'elles peuvent arriver qui les transforme en catastrophes.
Le plus rapide (et simple) pour traiter les erreurs d'après lui :
Avoir RaiseError
à 1
(qui fait un die
si une
erreur arrive), et mettre le code qui utilise la db (plusieurs
instructions donc) dans un eval
. Tester $@
après le bloc,
en cas d'erreur analyser le message et utiliser les méthodes DBI pour
avoir plus d'info (il y a une nouvelle façon de récuperer l'instruction
qui a planté mais j'ai pas eu le temps de la lire :--(
.
Une autre facon de faire c'est d'utiliser HandleError
:
$h->{Handle::Error} = sub toto
(le handler peut même faire un
reset de l'erreur si on veut l'ignorer).
Transactions. Un petit coup sur MySQL qui jusqu'à il
n'y a pas longtemps prétendait qu'il n'y a pas besoin de transactions,
jusqu'a qu'ils les ajoutent à la DB ;--)
Monty ne répond pas.
Comment faire des transactions avec DBI : $dbh->begin_work
commence une transaction ($dbh->commit
pour la terminer).
Après la pause :
Un aperçu de l'architecture de DBI. Tim conseille d'utiliser les fonctions
de trace ($h->{TraceLevel} = $level
;
ou la variable d'environnement DBI_TRACE
dans laquelle on peut
mettre un nom de fichier qui recevra la trace) pour résoudre les problèmes.
Je vous passe le detail des différents niveaux de trace, la doc est là pour
ça (perldoc DBI
et chercher DEBUGGING
).
DBI pour le web. D'abord les conseils classiques : utilise mod_perl
et Apache::DBI
qui accèlere le code de manière transparente.
Un conseil pratique : comme le handler reste en vie entre les
transactions, ne pas le modifier (du genre jouer avec autocommit
).
Si vous avez énormément d'accès à la DB, utiliser un proxy sur les scripts qui accèdent a la DB, sur une machine dédiée par exemple.
Problèmes dus au fait que le Web ne garde pas l'état (il est stateless
quoi) : utiliser des hidden fields (facile mais pas sûr),
Apache::Session
peut aider aussi.
Browser une DB page par page. refaire la query et jeter les records
inutiles, facile à faire, surtout que MySQL par exemple supporte ça assez bien.
Un inconvénient est que les insert/delete ne sont pas bien traités. Une autre
solution est de stocker les résultats de la query la première fois et de
ne renvoyer que les résultats voulus. C'est mieux de ne stocker que les
ID (tous) et d'aller chercher les records voulus (rapidement à l'aide de
la key). Beaucoup de DB ont un pseudo champ ROWID
, avec MySQL
_ROWID
retourne la primary key d'un record quel qu'il soit.
Sécurité. UTILISER -T
(taint mode). Si vous écrivez quoi
que ce soit pour le web (ou accessible par des utilisateurs auxquels
vous ne faites pas confiance) et que vous ne connaissez pas -T
,
RENSEIGNEZ-VOUS! perldoc perlsec
est un bon début.
Traitement des BLOBs. DBI se debrouille bien, il manque juste des
fonctions pour découper les BLOBs et les traiter morceau par morceau.
Si vous en avez besoin vous pouvez emailer Tim pour faire monter la
pression ;--)
.
Portabilité. SQL a plein de dialectes, dans le langage, dans les types de champs et dans les fonctionalites des drivers (DBD). Il manque une test suite unique pour tester les fonctionalites des drivers (volontaires bienvenus !).
On peut utiliser la méthode type_info pour recuperer le type exact d'un champ dans une DB et choisir le meilleur type équivalent dans une autre.
Curieusement une des fonctions qui varie le plus entre DBs est la
concatenation de chaines de caracteres (CONCAT
, avec différentes
syntaxes, '.'
, '-'
...). Il y aura bientôt une méthode dans DBI qui
fera ça de maniere portable. Bien sûr les drivers devront être mis à jour
aussi remarque Monty (réponse de Tim : "ça arrivera naturellement").
Citation du jour : "DBI has taken over the World". Tim explique qu'il n'y a vraiment aucune raison d'utiliser OBDC, DBI est plus rapide et couvre toutes les fonctionalites d'OBDC.
Proxying. DBD::Proxy
et DBI::ProxyServer
permettent de contacter à distance des DBs qui ne supportent pas les
connexions à distance. C'est complètement transparent, il suffit de
changer une variable d'environnement (dont j'ai raté le nom, darn! Eric ?
(Cholet, assis 3 rangées devant moi, qui doit suivre au lieu de taper le CR
en direct)) Le proxy supporte aussi l'encryptage des données, la compression,
et faire du controle d'acces. Kewl!
DBI::PurePerl
peut être utile sur des plateformes sans compilateur.
Il faut bien sûr avoir des DBDs (et autres modules en pur Perl) :
AnyData
(excellent DBD pour des fichiers textes et autres), LDAP,
mysqlPP je crois etc...
La variable d'environement DBI_PUREPERL
(je fais attention
maintenant) permet d'activer ce mode (c'est juste 2x plus lent que la
version C, ce qui reste rapide).
Nouvelles méthodes selectrow_hashref
, fetchall_arrayref
,
select_all_hasref
, fetchall_hasref
,
$h-
{FetchHashReuse} = 1>>
améliore la vitesse de fetchrow_hasref
(non encore implementé),
voir la doc...
Prévu dans un futur proche : nouvelle FAQ, vitesse,
swap_internal_handle
fait une "greffe de cerveau a un DB handle",
me demandez pas de détails ! Renommer finish()
en
close()
, scroll
permet de se déplacer dans les résultats,
sans les lire forcément dans l'ordre).
execute_array
: une méthode qui permet de faire des
operations par lots, execute
est exécuté pour les valeurs dans
le tableau (de références à des tableaux).
Plus de compte-rendus sur use Perl (regarder les 'journals', notament celui de gnat (Nat Torkington, il organise la conférence donc il devrait être au courant), et à http://www.oreillynet.com/weblogs/author/945. Photos par Leon à http://www.astray.com/photos/?search=tpc6 (les miennes arrivent ce soir).
Date: mercredi 24 juillet 2002 12:00 -0400
Et oui ! C'est l'après-midi buzzword !
Ça commence comme d'habitude avec une photo de bébé, MJD soit maudit ! Par Ian Kallen, qui bosse pour Covalent si j'ai bieng suivi. Il a bossé pour Salon.com avant, excellent site web au passage.
Puis pub pour Teach Yourself Apache 2 in 24 hours (http://www.apacheworld.org/ty24/, il y aura un tirage au sort pour en gagner un exemplaire à la fin de la session. Un conseil quand même : ne pas lire le livre en 24 heures consecutives. Pratique !
Apparement le tutorial utilise Java et Perl. Damn! Java! Horreur malheur !
SOAP : Simple Object Access Protocol. C'est un des protocoles pour faire des Web Services. Le protocole de transport peut être HTTP (en général) mais aussi SMTP, Jabber... (SOAP::Lite en Perl a probablement le plus de protocoles différents)
WSDL est le protocole qui décrit les services offerts et UDDI "publie" le service (Ian le décrit comme le DNS des Web Services).
Il décrit RSS comme un proto-protocole dans le genre (je suis assez content du mot proto-protocole).
Mythes (faux) à propos de SOAP :
c'est simple (il faut se taper XML, les W3C Schemas plus SOAP pour implementer SOAP),
c'est à propos d'objets (nope, c'est juste des données),
il y a un web dans web service (ça utilise souvent HTTP, mais ça n'a pas de lien direct avec le web),
ça s'intègre facilement avec .NET (pas vraiment le cas d'après lui),
il faut connaître XML pour l'utiliser (nope, le bas niveau est du XML, mais l'utilisateur ne le voit pas),
le standard est mature (non, il y a beaucoup d'outils, souvent chers, mais rien de vraiment solide et qui communique sans problème avec d'autres outils),
ça fait tout et le café ("Don't believe the hype!", faire un proto d'abord)
Mais ce qui est vrai :
c'est ouvert, on peut implémenter son truc dans le langage qu'on veut,
ça peut utiliser différent protocoles de transport
c'est indépendant des vendeurs (ça veut pas dire que les outils marchent bien ensemble, juste que personne ne domine complètement le standard)
chaque langage a sa propre manière d'implémenter les objets
il peut faire coopérer des systèmes "loosely coupled"
les applications n'ont pas forcément besoin de connaître SOAP
c'est un standard au lieu de protocoles propriétaires (ça sonne bien aussi)
ça peut traverser les firewall (NdM (Note de Mirod) : pas bon à
mon humble avis, mais bon, j'ai iptables
actif sur la moitié de
mes machines à l'interieur de mon firewall...)
Le format d'une requête (non, je vais pas le taper, Google devrait avoir ça !)
WSDL definit les types de données et generalement les interfaces d'un service. Et généralement c'est des gros pavés!
Si on utilise directement les messages SOAP on doit se taper le processing
du XML qui contient les données. Si on utilise SOAP-RPC le message est un
appel de procédure. Les outils se debrouillent d'après ce que je comprends
(NdM : OK, d'après ce que je sais SOAP::Lite
est complètement
Magique (TM)).
À la base les types de données sont les mêmes que dans XML W3C Schema (on crée des types complexes avec W3C Schema (NdM : bonjour le mal à la tête, mais bon, je suis pas trop impartial, je déteste tous les standards XML à part XML lui-même, XPath et des bouts de SAX).
En cas d'erreur le message contient uniquement une erreur.
Bon, après tout ça on rentre dans le domaine des outils qui masquent tout
ça : JWS pour Java ; côté serveur c'est simple, on doit juste
renommer le .java
en .jws
(NdM : ah les joies des
extensions !) et on le met dans le répertoire qui va bieng.
C'est un peu plus compliqué côté client. Diable !
Il faut écrire du code ! Les classes ne peuvent pas être compilées,
le serveur doit avoir accès au source.
Côté Perl le client est juste une liste d'appels de méthodes chainées. Le
serveur ne change pas. Regardez la doc de SOAP::Lite
,
c'est beau ! Sans rire, si on vous demande de faire du SOAP
précipitez vous sur SOAP::Lite
(récent, il y avait un gigantesque
problème de sécurité il y a pas longtemps).
Vous ridiculiserez vos collègues Java (surtout que l'outil Java génère
des messages qui plantent avec les outils Microsoft).
Pour installer un serveur SOAP avec mod_perl, il suffit d'ajouter une
directive Location
dans la config Apache. Le code du server
ne change pas par rapport à du code local (les return des fonctions
dans le package sont SOAP-és).
Le gars a son serveur web en ligne pour la demo depuis 30 minutes et il a déjà des tentatives d'intrusion de virus IIS !
Un truc pas joli avec SOAP::Lite
c'est que le XML transmis (il nous le
montre avec un sniffeur) est tout sur une ligne. Mais bon, c'est légal.
SOAP::Lite
se débrouille généralement bien avec les conversions de types.
Juste des fois si une chaine de caratères ressemble à un nombre il envoie
un nombre. C'est pas grave si en face c'est aussi du Perl, qui convertira
gentiment en string si il faut, mais ça posera des problèmes à des langages
plus fortement typés comme Java.
Il donne quelques moyens de simplifier l'installation avec Java, je l'ignore.
Pour publier un web service en Perl : ajouter une ligne à la liste d'appels de méthodes.
Fait chier, je crois que je suis malade, ma femme a ça aussi, j'ai froid
et je suis crevé. Ceci dit j'ai pas dormi beaucoup la nuit dernière, alors
ça ira peut etre mieux demain. Demain c'est loin ceci dit, alors vous
étonnez pas si je finis pas le cours. :--(
Pause, café, il fait chaud dehors (la clim doit être réglée à -15 ici !), ça va mieux.
Un vrai example, genre e-business.
D'abord avec Java, c'est l'heure de lire /.
sur Mandrake 9.0 beta (NdM :
cette phrase était dédiée aux trolls du CULTe). Il patauge un peu avec la
démo, l'écran est trop petit... ah bon, c'est fini, ouf !
Il montre un client Perl pour le serveur qu'il a écrit en Java. Il faut ajouter une ligne plutôt coton pour désérialiser proprement les données émises par le serveur. Ah maintenant il montre la vrai façon de faire, avec WSDL. Ça marche sans verrue horrible. Et maintenant il utilise la magie de SOAP::Lite pour autogénérer des accesseurs.
Il liste des implémentations dans d'autres langages.
On arrive a la fin, il complimente SOAP::Lite
(moi aussi), il répète
que le standard n'est pas mature et qu'il a des trous qui conduisent à
des problèmes de compatibilité. L'en-tête HTTP Host
est souvent mal
traité, ce qui cause des problèmes avec les outils MS qui sont très
strict sur ça.
UDDI progresse lentement, mais pour l'instant pas vraiment d'implémentation intéressante.
La sécurité n'est pas traitée à ce niveau (HTTPS bonjour, mais à mon avis ça va créer des problèmes ou les niveaux vont se mélanger). Comme il dit c'est Microsoft qui pousse ces standards, donc faut pas s'attendre à un truc trop sur à la base.
Désolé de taper sur Java et MS autant, mais bon, déjà je les aime pas trop c'est vrai et en plus l'instructeur tape sur MS et me montre du code Java 10x plus long que la même chose en Perl.
Avec SOAP::Lite
et mod_perl
, Apache::Session
peut aider à gérer
une session raisonablement sûre (me demandez pas comment, c'est un exercice
pour le lecteur).
C'est fini, au bout du compte c'était plutôt ennuyeux, mais bon, j'aurais dû m'y attendre, SOAP c'est pas vraiment un domaine où on rigole tous les jours !
Apres ça je me sens vraiment pas en forme et je vais me coucher !
Leçon après seulement 2 jours de conférence : n'emmenez pas votre époux(se) ou "significant other" comme y disent ici a une conférence si elle n'est pas extremêment tolérante et qu'elle ne peut pas supporter 4 heures de descendage de bière en causant de Perl, XML et de gens qu'elle ne connaît pas. Le taux de crises conjugales est déjà impressionant !
Leon Brocard a l'air de bosser sur un nouveau film, genre le film de YAPC mais sans les jurons (bouh !). Ingy récolte des photos rigolotes pour son Lightning talk (j'en ai une où Elaine lui met des raisins dans la bouche, à la romaine, je la posterai demain, je peut charger la photo sur mon portable dans ma chambre mais y a pas de connection rapide à cet étage !@##$%%^&*).
Date: mercredi 24 juillet 2002 13:26 -0400
Merde ! Je réalise que du coup j'ai rate le State of the Onion de Larry et le Quizz Show, quel idiot !
Une description de l'histoire du copyright depuis 1740.
Walt Disney, quand il a crée Mickey, en fait s'est inspiré de Buster Keaton et l'a "Ripped, Mixed and Burned".
Il montre comment le copyright a été étendu depuis 1950 : "Nul ne peut faire a Disney Inc. ce que Disney a fait aux frères Grimm".
Il montre une série de "permissions" pour des ebooks, genre "copier 10 textes dans le clipboard tous les 10 jours"... débile. Le mieux c'est que le bouquin avec la license la plus restrictive est... le sien !
Évidemment il prèche des convaincus, mais c'est bien quand même, c'est bien pensé.
Il nous engueule pour ne pas avoir fait plus pour nous défendre, et nous demande de donner plus a l'EFF (je vous y encourage aussi, ça a l'air lointain tout ça, mais si on fait rien on va tous l'avoir dans l'os, c'est ce qu'il explique d'ailleurs, c'est un problème americain, mais si on le résout pas aux US il va infecter le reste du monde).
C'est la première fois que je le vois parler.
Il commence par "je ne suis pas un développeur Open-Source", rires. Il fait même des blagues ! ("GNU c'était pour rire, les gens devraient avoir le droit de rire") Il demande a O'Reilly de publier tous ses manuels en Open-Source. Ah, il cause de GNU/Linux, ce qui me fait toujours rire. 10 minutes sur le sujet. Il souligne les differences entre Free et Open-Source. Rontudjeu, quel est l'intérêt de se battre entre nous et pas pour écrire du code propre ?
Là c'est plus intéressant : "You have to learn to say no to what business want" au moins il parle des différences qui comptent, Open-Source/Closed-Source et (comme Lawrence Lessig) il nous demande de nous mobiliser politiquement.
Il défend Napster.
Il finit sur un truc rigolo : il s'habille en saint et déclare qu'il est un saint de l'église EMACS : "There is no system but GNU and Linux is one of its kernel". "Emacs started as a text editor but became a way of life and a church".
Larry Wall pose une question : Il est d'accord avec la plupart de ce que RMS a dit mais il conteste le fait que les developpeurs Open-Source ne défendent pas la liberté. Il défend la liberté plutôt en faisant de l'Aikido que de la boxe. RMS tente de le recruter dans la FSF. Si l'Aikido marche c'est bien, mais il ne pense pas que ça puisse marcher.
Au final il a causé plutôt bieng, assez rigolo, mais il sonne plus comme un politicien que comme un geek.
Une voix dans la foule : l'an prochain on appelle la convention "Open Source et Free Software Convention".
Ça finit sur une standing ovation.
Date: mercredi 24 juillet 2002 15:22 -0400
Qu'est-ce qui est déjà fait: structures de controles, regexps, fonctions...
Architecture : voir Dan (Sugalski) et son talk sur Parrot vendredi.
Ce qui change :
->
devient .
(j'espère que tout le monde est au courant) mais
la plupart du temps on peut s'en passer complètement $ref->(@args)
devient en fait $ref(@args)
(le déréferencement se fait automagiquement).
$@%
sont invariants : $toto[$index]
devient @toto[$index]
(de toute façon le système de perl5 est compliqué avec des données
complexes @hash{@keys}=@values
par exemple). D'après Damian,
"as soon as ou move to Perl 6, all your buggy code is fixed".
_
pour la concatenation ("You don't have to like it",
"Yes we tried everything else")
attributs (appelés properties
en Perl 6) : ce sont
des "post-it" notes attachées à une variable (ou une fonction).
On peut même retourner "0 but true"
. Si vous n'avez pas regardé ces
trucs faites-le, c'est vraiment très cool. C'est disponible avec Perl 5,
c'est même dans le core de 5.8.0 : attributes.pm.
if( 1 < $x < 10) { ... }
va marcher (y compris avec plus
de 3 termes)
=~
teste l'egalite "au mieux", numérique s'il le faut, string,
objet, en fait il y a 35 cas
//
(prononcer eur), j'ai déjà dû en parler, équivalent à
||
mais faux si le terme de gauche est undef
, la version
équivalente à or
et and
est err
.
Parameter lists: sub( $value, $from, $to, @except)
marche.
Attention, ici @except
doit être un tableau ou une référence à
un tableau, pas une liste, mais sub( $value, $from, $to, *@except )
marche avec une liste.
:=
volé à Pascal (au moins la syntaxe) crée un alias :
$toto := @arr[7];
maintenant modifier $toto
modifie @arr[7]
.
(@a, @b):=(@b, @a);
marche et échange les tableaux (en fait
les noms des tableaux, donc c'est très rapide).
Tout bloc est une sub/closure. Normalement le bloc est juste exécuté.
Entre autre ça permet de passer des blocs en paramètres (pour écrire
des fonctions avec la même syntaxe que sort
, map
et grep
).
Hyperopérateurs : ^<operateur>
fait marcher
l'opérateur sur une liste : @result= @x ^- @y
.
Currying : on peut appeler toute fonction avec moins d'arguments que déclarés et on récupère une fonction qu'on peut appeler avec le reste des arguments. Damian plaisante que personne n'y comprend rieng mais que c'est cool quand même.
Switch :
given $val { when 1 { print "number 1" } when [1..10, 42] { print "number in list" and continue} when @array { print "number in list" and break} do_something_here(); when &sub { print "argument to subroutine" } }
ça utilise le même "smart equal" que =~
Il n'y a plus besoin d'avoir des parenthèses autour des tests.
Topics : une boucle for
(il n'y a plus de foreach
)
crée un "topic", en gros l'équivalent de $_
. Une fonction crée
un topic : son premier argument (ça permet d'écrire de l'objet plus
naturellement) La syntaxe de for
est maintenant
for LIST BLOCK
. Plus de paramètres, Chip Salzenberg proteste
;--)
. Mais comme le block est une fonction il peut prendre des
paramètres.
Du coup il existe un autre syntaxe pour déclarer les paramètres:
for @data -> $next { print $next }
(le block n'a pas de nom mais
il a un paramètre quand même !). Du coup on peut rajouter des
paramètres et boucler plusieurs éléments à la fois :
for @data -> $x, $y { ... }
.
On peut même boucler sur plusieurs tableaux en parallèle :
for @arr1; @arr2 -> $v1; $v2 { ... }
.
Exceptions
try { block }
remplace eval { block }
On peut mettre CATCH
dans le block (pour avoir accès aux
variables du bloc) pour choper les exceptions. Je vous passe les détails
sur les types d'exceptions. Y a même pas besoin de mettre try
en fait.
Bon, je dois changer la batterie de mon portable, je vais donc sauter le passage sur les regexps, mais de toute facon ça doit etre dans le CR de YAPC.
Je suis de retour pour les questions.
Dates ? On va prendre notre temps, on veut que ça soit "Right, not Right Now".
Un idiot demande si les nouvelles regexps (qui utilisent < et >) vont l'obliger à backslasher tous ses < et >. Ça se résout en donnant un nom à une regexp. (NdM : ou en utilisant un parser XML, créting !).
Une question sur la lisibilite de Perl 6 : Damian dit que en fait Perl 6 est plus lisible, voir son talk de cet après-midi (qu'il avait fait à YAPC) sur des programmes Perl 5 portés sous Perl 6.
Une question sur "les livres sur Perl 6" : il y en aura plein,
OO Perl 6 sera plus court ;--)
Une question sur les modules : Perl 6 ne devrait inclure que très peu de modules dans le core.
En général le but du design de Perl 6 est de trouver des principes simples qui permettent d'avoir un langage plus puissant.
C'est fini!
Date: Thu, 25 Jul 2002 22:05:00 -0400 (EDT)
Ewan Birney décrit le projet Génome Humain, base sur des softs OpenSource, beaucoup de Perl et lui même ouvert (tous les résultats sont publics).
Les plus de Perl : au premier rang la facilité d'apprentissage, regexes, hashes... Les moins : plus de 10 façons de faire, exception, objets. Au final ils utilisent Perl comme du Java. Il voudrait pouvoir mélanger Perl, Python et Java (au niveau source, pas bytecode, ça il s'en tape). Il paiera une bière a qui le fait !
Question de l'auditoire : comment faire pour que des scientifiques (non-programmeurs à la base) arrivent à produire du code potable. Il s'inspire de XP et mélange codeurs (qui connaissent rieng à la biologie et font des erreurs énormes à cause de ça) et biologistes.
Il décrit le génome humain comme une énorme pile de code mal programmé (tout est global, infecté par des virus, prend 18 ans à compiler, et de toute façon pas designé). Plus tard Larry commente que tout n'est pas vraiment global, que des bouts du DNA dynamiquement activent certaines parties du génome.
Il décrit les mécanismes de l'évolution, le DNA, je vous passe les détails vu que je suis occupé à essayer de suivre et que c'est dur de traduire et taper ça à la volée. Un point intéressant : comment on passe d'un gène à une cellule est à peu près connu, mais comment on passe de cellules à des organismes est plus mystérieux.
Leçons pour les programmeurs : importance des tests.
Par Robin Berjon, qui corrigera mon compte-rendu si je dis des conneries.
En plus je viens de m'inscrire pour faire un Lightning Talk sur XML et les regexps donc je risque de pas faire trop attention, il faut que je prépare les slides.
Qu'est-ce que c'est qu'un Content Management System (CMS)?
Ça manage (surtout) des documents, souvent pour le Web mais pas forcément.
Après avoir écrit son système de template, puis sa surcouche a DBI (NdM : et son module XML) il semblerait que la nouvelle mode soit d'écrire un CMS. Donc du coup il y en a plein partout.
Il va en décrire 3 principaux : Slash, Bricolage, XIMS
Slash :
facile à utiliser, workflow simple, pas embêtant. Peut ne pas être suffisant.
souvent au debut on pense qu'il n'y a pas besoin de workflow, et puis on s'apercoit que c'est indispensable.
performant (y a qu'à voir Slashdot !)
bien supporté, ya même un excellent bouquin chez O'Reilly
Bricolage :
complet et pro
utilisable, peu de problèmes
très orienté desktop
Manage des stories, media et templates
Sécurité prise en compte, peut publier sous divers formats, et a une interface SOAP (bzzzz)
Bon workflow (mais qui peut être trop complexe pour certains)
XIMS :
concu pour l'université d'Innsbruck
a besoin d'ORACLE, mais d'ici 2 mois devrait être séparé
plus un framework qu'une application à part entière comme les autres
utilise XML (il est plus heureux si il s'occupe de fichiers XML, mais il peut travailler avec d'autres formats), les fichiers de config sont tous en XML
bonne sécurité
utilise XSLT pour publier
Stats Bekman
Disponible à http://stason.org/talks/.
Stas a été sponsorisé cette année par ticketmaster.com et il les remercie.
Ça va super vite, je vais pas avoir le temps de tout noter.
mod_perl
a été ré-écrit pour Apache 2.0 et il tire parti de toutes ses
possibilites. Pourquoi utiliser Apache avec POP3 et SMTP ?
Pour avoir une seule admin et pouvoir utiliser les filtres d'Apache (SSL,
authentication...)
Dans Apache 2.0 les données sont passées dans des "bucket brigades", rigolo.
En gros mod_perl
2.0 utilise toutes les améliorations de Apache 2.0 et de
Perl 5.6 et maintenant 5.8.
Tout le système de threads a été amélioré.
L'install est très simple (NdM : qu'il dit !), il faut faire
use Apache 2.0
pour utiliser les modules (ils ont le même nom que sous
mod_perl
1.xx mais sont différents)
On peut désactiver mod_perl pour différent virtual hosts, et même configurer plus finement. De nouvelles phases ont été ajoutées à Apache.
Il y a une doc pour la migration, qui demande de changer certaines directives (heureusement)
Ron Bourret (qui maintient un excellent site sur les BD et XML, http://www.rpbourret.com/)
Un outil domaine public pour faire communiquer XML et BD relationnelles.
Traite du XML "orienté données". C'est du Java :--(
On définit un mapping XML -> objet (pas le DOM, un mapping spécifique à une classe de documents). Les objets sont utilisés pour remplir la BD.
Les éléments peuvent être simples (texte uniquement, équivalent a des scalars) ou complexes (contiennent d'autres éléments, du mixed-content et/ou des attributs). On mappe les éléments simples vers des colonnes et les éléments complexes vers des classes. Le système génère les tables qui vont bien, y compris les tables de liens primary key/foreign key. L'ordre des éléments peut etre sauvegarde (par type d'element, pas pour des éléments de même type).
Il est possible de "mettre à plat" des éléments (genre une addresse ou les différents champs sont groupes dans l'élément addresse mais juste des colonnes de l'élément englobant dans la BD), les namespaces sont supportés.
Les fichiers de config sont en... XML bieng sur!
Si le document et la BD sont trop différents on peut utiliser XSLT (dans le futur XQuery)
L'outil a une interface ligne-de-commande et 2 API (une de haut niveau et une de bas niveau)
La map file peut être générée automatiquement soit à partir de la DTD soit à partir du schéma relationel. En général il faut la finir a la main.
Dans le futur l'utilisation des W3C Schema (NdM: que je deteste) pourrait simplifier la génération de la map file.
Rigolo aussi : il semble que pendant que RealNetworks faisait son annonce Stallman a commencé à gueuler... et se soit fait virer de la tente ou on mange (merci à Eric Cholet pour l'info).
Tous les films de TPC (sauf celui, censuré, de Nat) : http://www.perl.org/tpc/2002/movies/tpf/
Date: vendredi 26 juillet 2002 16:19 -0400
Bon, ils vont couper le réseau à 2h, donc je poste le dernier CR d'ici, et je le complèterai dimanche ou lundi, une fois rentré.
Dur réveil... la soiree d'hier fut plutôt dure (quoique pas autant qu'une réunion de Toulouse.pm !). Au final, après un bon nombre de bières (merci à Randal Schwartz qui payait pour tout le monde), j'ai fini par utiliser mon espagnol de cuisine pour tchatcher avec le député péruvien qui a écrit la lettre a Microsoft... épuisant !
Paul Pangaro et Elaine Coleman de Sun qui sont charges d'étudier le comportement des développeurs chez Sun et d'étudier comment intégrer les dévelopeurs dans la strategie de l'entreprise.
Intro : leur thèse : les boîtes de haute technologie doivent intégrer les développeurs plus à leur stratégie. Il faut que les développeurs soient associés plus étroitement au design des produits... boring...
Elaine est plutôt rigolote : "I love technology but it does not love me", c'est une spécialiste en "cognitive science". Elle a étudié des codeurs Java. Elle leur a posé des questions sur leur boulot, ce qu'ils font, tout ça...
Video d'interviews, conclusion : "vous êtes tous différents !" Sans rire !
Les interviews sont plutôt rigolotes, mais ce qu'ils racontent est assez
chiant. Une bonne question de l'auditoire : "pourquoi la Perl Poetry,
l'obfus, le Perl golf, etc... ?" (il doit s'inquieter pour BooK
;--)
Pas de vraie réponse (les Java Monkeys doivent pas faire ça).
Nat présente le prochain speaker, qui vient de la même école (de "sheep-shaggers") que lui, en NZ : Milton Ngan, qui a bossé sur les effets spéciaux de Lord of the Rings.
Au moins ses fonds d'écrans sont spectaculaires.
Et pis on a droit à une version longue de la bande-annonce du film, yeah !
Quelques chiffres, images rigolotes "behind the scene"...
12Mb/image, ça fait 300Mb/s de données. Ils ont 12 TB de données stockées (75Tb en ligne) sur le premier film, 300 machines sous linux qui tournent 6j/semaine à faire du rendering. Ils visionnent sur Mac.
Ils nous montre comment ils ont réalisé certains effets spéciaux. Le plus gourmand c'est d'appliquer les textures.
Dans certaines scènes les acteurs sont doublés par des doubles digitaux : quand la compagnie traverse le pont, dans les mines de Moria, à la fin du film, en fait c'est tout digital.
Peter Jackson a utilisé le fait que les scènes étaient modélisées en 3D pour pouvoir répéter et mettre au point les mouvements de la caméra avant de filmer la "vraie" scène.
Rigolo : même quand ils augmentent la vitesse de calcul les temps de rendering restent les mêmes : les artistes demandent plus de résolution ! Une scène de bataille (juste en fil-de-fer), où on voit l'AI en action : un perso se retrouve tout seul, s'éloigne, l'AI réalise et il se met à courir vers la bataille !
L'outil qu'ils utilisent le plus : Perl ! Applaudissements. MySQL.
Apple avec OSX essaye de rentrer sur ce marché.
Il finit par un bout de poésie Perl ! Yeah !
Question de l'auditoire sur le MPAA et les lois sur le copyright. En résumé sa reponse c'est qu'il est juste un technicien, il ne peut pas grand chose face aux studios.
par Michael Schwern
Test::More
et Test::Builder
ont l'air vraiment cool, mais il faut
que je prépare mes slides pour le lighning talk, donc je suis pas trop...
voir CPAN.
A la fin quelqu'un commente que Test::Unit
est horrible. Commentaire
de Schwern : c'est un port d'une librairie Java, ça n'est pas vraiment
du Perl.
Bruce Sterling (oui, LE Bruce Sterling)
Un long rant contre Microsoft, la passivité des américains, le capitalisme...
Hilarant !
Il a un problème avec Microsoft comparé à une cathédrale (le bazaar ça lui
va !). Il rapelle que Jésus était contre les marchands du temple.
C'est très rigolo. Pour lui OS/Propriétaire, c'est plutôt artisans/usines.
OS c'est "hanging out with the Cool Guys (tm)", plutôt genre artistes.
En plus les enfants et les femmes qui meurent de faim vous remercient.
Et pis quand on en a marre on peut arrêter et personne a le droit de se
plaindre, ils peuvent mourir de faim ;--)
Il tape un peu sur
Bill Gates qui se transforme en Nazgul ou un truc comme ça.
Il répand FUH (Fear Uncertainty and Hate).
Where do you go today? La vrai réponse est « je veux aller pirater des MP3 ».
Palladium: an OS that Hates and Mistrust You.
Il tchatche sur la sécurité dans les aéroports, compare les OS du futur à ça.
Trop de monde, on change de salle (en bêlant comme des moutons). Larry et la moitié de sa famille sont assis par terre.
Bruce reprend et nous reproche de ne pas être créatifs.
"Do you want to make Jack Valenti the king of your box and Mickey Mouse his Komisaar?"
Les virus : avec les virus on infecte non seulement sa copine, mais aussi sa maman !
Il délire sur OSX, l'open-source... tout le monde se marre.
Open Source c'est comme la vie dans un camps de refugié : on bosse dur pour pas un rond, et il faut pas que ça ait l'air trop joli sinon Médecin sans Frontière vient pas (NdM : me demandez pas d'expliquer).
Il devient un peu sérieux : pourquoi l'information n'est pas libre. L'industrie informatique est maintenant aussi chiante que l'industrie du livre.
Les 6 facons pour un vendeur de lier le client : le contrat, offrir des formations spécifiques sur un produit, augmenter le coût de la recherche d'alternatives, un langage spécifique, des gros investissement, des programmes de fidélisation.
Il décrit la relation d'un client avec un vendeur comme une relation sexuelle. Linux est une hippie qui aime le Free Love, Free Beer, Free Speech, Free everything. Elle enlève ses fringues super facile, elle enleve même ses côtes! En plus même si elle couche avec tout le monde elle chope pas de virus. Et pis elle a des enfants : Apache, procmail, Perl... certains meurent jeunes, d'autres sont attardes mentaux (NdM : Python ?)... elle génère une explosion démographique à elle seule.
Notre destinée de geeks : bientôt nous passerons de l'état de geeks a l'état de dissidents.
Standing Ovation, excellent !
Date: vendredi 26 juillet 2002 18:57 -0400
Yipee, le réseau est encore là.
Le titre résume le talk : Macromedia est le Mal, ils mentent,
ils trichent, SVG est ultra-cool (y a un mec de Macromedia dans la salle,
il confirme qu'il est Evil mais pas qu'il suxe ;--)
.
Je suis plutôt d'accord avec lui, surtout le fait qu'une fois que c'est
dans Flash ça peut que difficilement être indexe.
Je posterai les slides (6) plus tard
Pour lui pratique, dans le vaste monde, c'est "ça peut causer à des bases relationelles". C'est pas con en fait. Le problème c'est que XML est pas très bon pour faire des liens.
Il ajoute un attribut dans un template HTML, genre id="replace1"
,
après il ecrit du XSLT qui prend en entrée le template et le document
qui contient le contenu et voili ! Le contenu se retrouve dans le
template. La feuille de style XSLT est plutôt simple, ça a l'air assez
élegant.
Flash est supérieur à SVG parce qu'il y a un éditeur.
Un rant (habituel pour ceux qui suivent xml-dev) sur l'état de XML qui va de mal en pire. Toutes les specs qui sortent du W3C suxent grave. "If you think Macromedia is Evil, they are not, W3C is Evil". Les specs sont de plus en plus épaisses et ils se foutent de la simplicite d'implémentation. Il prévoit un futur où XML est remplacé par quelque chose de plus simple (pas XML lui-même, mais les autres specs).
Voir son site http://monasticxml.org/.
Il reçoit des données (télémétrie satellite) de diverses sources et il doit mixer le tout. Il utilise XML pour décrire le format de chaque source.
Good: SVG XSLT XPath, Relax, Perl & XML, XMLForms
Bad: Web service, W3C Schema
Ugly: XML in Java, XML in Flash, Web Services Hype
C'est court, il menace d'en faire un autre, on l'emmène, c'est la fing.
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.