[Toulouse-pm] [ppm] YAPC::Europe::2003 (1) (fwd)

Michel Rodriguez mirod at xmltwig.com
Tue Jul 29 10:27:42 CDT 2003


Salut,

Je vous transmet quelques compte-rendus de YAPC, si vous avez des
problemes d'encodages dites le moi, ca se melange alegrement chez moi.


---------- Forwarded message ----------
Date: Mon, 28 Jul 2003 18:08:58 +0200
From: "[ISO-8859-1] Sébastien Aperghis-Tramoni" <maddingue at free.fr>
To: Paris.pm <paris-pm-list at pm.org>
Subject: [ppm] YAPC::Europe::2003 (1)

Mercredi 23 juillet

* Nicholas Clark - When Perl is not quite fast enought
     Nicholas Clark est un type très marrant : il arrive avec un sourire
     jusqu'au oreilles et un sombrero mexicain et ne départira pas
     ni de l'un ni de l'autre durant les trois jours de YAPC.

     Son talk est consacré aux techniques d'optimisations de Perl.
     Les premières méthodes sont évidemment d'utiliser XS et/ou Inline.
     Il conseille aussi de recompiler son Perl avec plus de flags
d'optimisation
     (genre -O2 ou -Os, ainsi que les flags d'archi -march=YOURCPU) et
     moins de flags de debug (-g et les defines de debug). Autre
possibilité,
     utiliser une autre version de Perl, plus ancienne ou plus récente
suivant
     les fonctionnalités dont on a besoin et la vitesse constatée.

     Il rappelle que l'ajout d'optimisations ne doit évidemment pas
casser
     le code existant ou introduire de nouveaux bugs, donc use Test, et
     mettre en place des tests de régression avancés.

     Il parle ensuite de techniques d'optimisations : comment trouver
*quoi*
     optimiser. Il conseille pour cela Devel::DProf et Devel::SmallProf
qui
     permettent respectivement de faire du profiling de manière globale
ou
     ligne par ligne. Il conseille de tricher avec Devell::DProf en
découpant
     une grosse fonction comportant plusieurs boucles imbriquées en
autant
     de sous-fonctions (en partant des boucles extérieures vers les
boucles
     intérieures).

     Il conseille ensuite d'utiliser Benchmark pour tester les
différentes versions
     d'un même code pour vérifier de manière expérimentale laquelle est
la
     plus rapide car l'intuition peut souvent s'avérer trompeuse (tr///
est souvent
     plus rapide qu'on ne le croit par exemple).

     Il montre ensuite comment on peut voir l'arbre des instructions
généré par
     Perl (-MO=Terse) et fait remarquer le coût des boucles. "Loops are
bad".
     Il montre sur un exemple comment remplacer une boucle basée sur un
     while et des regexp par pack().

     Quelques trucs en vrac :
      - il montre Devel::Size pour voir la taille mémoire des objets
      - il conseille d'utiliser des constructions comme /\G.../gc pour
les regexps
      - il rappelle l'emploi d'AutoLoader et d'AutoSplit

     Il parle maintenant de l'importation et rappelle que c'est un
mécanisme
     intrinsèquement lent puisque Exporter est écrit en Perl et utilise
eval "".
     Il conseille donc (côté module) de ne pas coder de grosses listes
@EXPORT
     et (côté utilisation d'un module) de n'importer que ce qu'on
utilise. Il donne un
     exemple avec POSIX.

     Conseil intéressant : il montre comment utiliser Memoize pour
stocker le
     résultat d'une fonction. Évidemment, c'est à réserver pour les
fonctions
     dont le calcul et non-trivial (et plutôt du type calculatoire; de
fait il donne un
     exemple avec une fonction de Fibonacci). Il indique que le cache
peut même
     être stockée sur disque.

     Quelques techniques générales d'optimisations :
      - éviter les constructions de chaînes de caractères
      - mettre le maximum de choses en dehors des boucles
      - écrire les petites fonctions en ligne
      - l'utilisation de sentinelles permet d'économiser certains tests
(grand classique)
      - trier moins de données; il donne un exemple où il transforme
grep /machin/ sort @list
        en sort grep /machin/ @list

     Sur l'utilisation des hashes, il conseille de vérifier la qualité
des clés de
     hashes, et éventuellement de les rendre plus courtes avec pack().

     Pour la transmission de données entre processus Perl il rappelle
qu'il est idiot
     de parser les données en Perl et conseille d'utiliser Data::Dumper
et eval ou
     Storable.

     Je crois qu'il y a eu une référence à Acme::Buffy pendant ce talk
:-)


* Mark-Jason Dominus - Tricks of the Wizards
     Je ne vais pas détailler son talk puisqu'il est disponible sur son
site web
         <http://perl.plover.com/class/YAPC-EU/>
     et que de plus il l'a écourté pour faire son talk Twelve Views,
qu'il avait fait
     à YAPC::Israel.


* Mark-Jason Dominus - Twelve Views
     Les slides de ce talk étaient aussi sur son site web mais je
n'arrive pas à
     retrouver où. Comme je les avais déjà lus je n'ai pas pris de notes.

     Dans ce talk, MJD nous parle de 12 points divers et variés sans
rapport
     particulier entre eux voire même sans rapport direct avec Perl.

     1. The coolest Perl project I ever did
         MJD nous explique comment pour un projet il a écrit un programme
         qui générait toutes les permutations possibles d'un objet
composé de
         triangles. Il avait obtenu 63 configurations différentes. Il
nous montre
         le résultat et nous met au défi de trouver lequel est en
double. Il explique
         ensuite comment il a conquis le coeur de sa bien-aimée grâce à
ça.

     2.  On forking and 'unnecessary' shell calls
         MJD décide maintenant de râler un peu contre les gens qui disent
         qu'utiliser system() ou les backtips c'est mal parce que ça
prendrait
         trop d'instructions. Il fait remarquer que certaines choses
sont plus
         compliquées à programmer en pur Perl qu'avec quelques commandes
         shell bien utilisées. Il rappelle que Perl est un langage de
glu et qu'un
         programme simple et lisible est préférable (et moins sujet à
erreur).

     3.  Should I release a new version every month?
         MJD décide maintenant de râler contre ceux qui lui écrivent en
lui
         demandant s'il a abandonné Text::Template parce qu'il n'y a pas
eu
         de version dans les N derniers mois. Il se demande pourquoi les
         gens ne semblent pas comprendre qu'il ne fait pas de nouvelle
         version parce que ce module est parfait. Il indique le coupable
de
         ce lamentable état d'esprit : Microsoft (le public est en
délire).

     4.  The failure of subclassing on CPAN
         Il s'interroge sur la raison qui expliquerait la répugnance des
         programmeurs à créer des sous-classes des modules disponibles
         sur le CPAN. Il prend là encore comme exemple Text::Template.
         Beaucoup de personnes lui demande de rajouter telle ou telle
         fonctionnalité et lui répond que ce serait tout aussi simple
pour
         eux de créer une sous-classe de T::T et d'ajouter la ou les
         fonctionnalités qu'ils veulent.
         Il suppose que cette répugnance provient d'une lacune dans la
         documentation : il faudrait que les auteurs de modules/classes
         indiquent une API qui devrait rester stable au fil des
versions, afin
         d'établir un genre de contrat moral avec les programmeurs.

     5.  Why I Hate strict
         MJD râle maintenant (il râle beaucoup dans ce talk ;-) contre
les
         gens qui disent aux newbies de mettre use strict sans leur
expliquer
         ce que cela signifie.

     6.  How not to ask for help from strangers
         Il explique comment il a reçu des mails curieux, comme un
étudiant
         allemand devant écrire un mémoire et lui envoyant un mail du
genre
         "pourriez-vous m'envoyer des informations sur votre système
légal aux
         USA. C'est très pressé car je dois terminer pour dans 2 moins.
Merci".
         Il se contient avec peine tellement c'est burlesque.

         Une note amusante : il se rend compte au milieu de sa
présentation
         qu'il a oublié de copier certains des fichiers et se prend des
404. Il
         cherche un peu, puis réclame un portable avec la connexion
réseau
         qui marche. Un type avec un portable sous Win se propose, mais
son
         réseau ne marche pas. MJD déclare forfait et passe au point
suivant.

     7.  How to progress
         Le conseil de MJD pour devenir meilleur (que les autres bien
sûr) : lire
         les livres que les autres ne lisent pas, et lire les sources.
ce dernier terme
         doit se prendre au sens général car ce conseil s'applique dans
tous les
         domaines, tant littéraire que philosophique, religieux, ou
éventuellement
         informatique. Dans ses slides je me souviens qu'il donnait
comme exemple
         qu'au lieu de lire les commentaires d'un type qui parle
d'Einstein, il vaut
         mieux lire Einstein directement.

     8.  Don't give up just because it's NP-complete
         MJD explique la théorie de la complexité. J'ai pas trop suivi
car j'ai déjà
         bouffé pas mal d'articles sur P/NP/coNP/RP/coRP et autres dans
le TGV.

     9.  On giving a man a fish
         Il explique en quoi il trouve que l'attitude des gens qui
répondent aux
         questions des newbies par un RTFM (ou par la version à peine
déguisée
         "perldoc perlfunc") est négative. Son conseil : donner la
réponse et
         indiquer où trouver des informations complémentaires.

     10.  Why Lisp will never win
         Heu, je confesse : je ne me souviens plus de ce qu'il a dit
contre Lisp.
         (Ou alors c'est qu'il avait sauté cette partie.)

     11.  A message for the Aliens
         MJD veut nous montrer un truc amusant qu'il a trouvé sur le web
: un
         type qui a réalisé plusieurs parodies du message envoyé en 1974
         vers l'amas globulaire M13 depuis le radio-téléscope d'Arecibo.
         (On peut trouver une version expliquée du message originel à
cette
         URL <http://amo.net/Contact/>, où il y a aussi une "réponse" ;-)
         Il montre plusieurs des dessins (qui sont très drôles) et
commence à
         discuter le plus sérieusement du monde des fautes d'orthographes
         et de représentation des dessins. Le public est mort de rire.

         Là encore lorsqu'il veut cliquer sur un des dessins MJD se rend
compte
         qu'il ne l'a lui non plus pas copié. Il réclame encore une fois
un portable.
         Quelqu'un lui donne un portable sous GNU/Linux. Ca marche !
Tonnerre
         d'applaudissements !
         MJD se connecte sur site et après avoir tapé un mot de passe
trouve enfin
         les fichiers qui lui faisaient défaut. Il affiche l'image qu'il
propose d'envoyer
         aux extraterrestres. Re-tonnerre d'applaudissements.

     12.  What are "strongly typed" languages?
         MJD se demande ce qu'est un langage "fortement typé". Il montre
les
         résultats de ses recherches sur le net qui donnent à peu près
ça :
           - "Ada est fortement typé, C ne l'est pas"
           - "C et Pascal sont fortement typés"
           - "les langages fortement typés comme C ..."
           - etc
         En bref, personne ne sait ce que c'est mais beaucoup de monde
croit dur
         comme fer à sa propre définition.


Sébastien Aperghis-Tramoni
  -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ]
-
Paris Perl Mongueu(r|se)s  => http://paris.mongueurs.net/mail.html





More information about the Toulouse-pm mailing list