[Toulouse-pm] YAPC::EU Jeudi

Michel Rodriguez mrodrigu at ieee.org
Thu Sep 16 10:34:44 CDT 2004


Jeudi
    Yipee! Je me suis réveillé à 9h 30, habillé à toute allure, pensé
    que j'allais rater les Lightning Talks... et finalement je suis là à
    l'heure, ça commence à 10h!

    Donc sans tarder:

  Lighning Talks
   Help! Code Overload
    *Nigel Hamilton*

    Il commence par une photo de la Tour de Pise, qui représente l'état
    de son code après quelques années à coder. Les représentants de
    Pisa.pm (Dakkar et moi) sont enthousiastes!

    Extrait: *Don't code in fear* (quand on lui a dit ça, sa première
    réaction a ét'e *shit! How do you know?*)

    Une citation de l'excellentissime Pragmatic Programer: *write code
    that writes code*.

    Donc il nous décrit un système qui documente son code, qui pour
    chaque module lui donne les modules dont il dépend, avec la
    possibilité d'éditer les commentaires.

    C'est la première

   Teaching computer with a Perl based emulator


    Quand il a répété son talk son chat s'est endormi au bout d'une
    minute, donc nous voilà prévenus.

    Extrait: *Computer Architecture is really fun!*

    Donc pour expliquer le fonctionnement d'un processor il a décidé de
    créer un processeur: NICE (Nice Is Charmingly Elegant). Plutot que
    de le faire réellement il a dévelppéun émulateur. La première
    version était en Fortran, pas très pratique, donc il l'a réecrit
    avec Perl/TK.

    Joli, l'émulateur montre l'assembleur en train de s'exécuter.

   Open VMS


    Une photo de sa cave, avec du bon vieux matériel qui tourne sous
    OpenVMS (coucou Tonton Th.): c'est du bon gros matos qui tâche,
    heureusement qu'il a une grande cave. C'est pas facile de porter
    Perl ou des modules sous ça. Donc si quelqu'un est interessé, il
    suffit de lui passer un mail et il peut mettre son équipement

   Buisiness::Worldpay::Junior


    Au début de son business il avait un problème: il avait un "crédit
    rating" horrible. Tous les services de paiement en ligne le
    refusaient. Le seul service qui l'a accepté était World Pay. Il nous
    montre son module qui interface avec World Pay.

    Extrait: *Anybody can download it for free from CPAN, or, if they
    are really stupid, come to my website and pay me $25 to download it*

    Autre extrait: *no one has ever aid me $25*

   Organizing YAPC::Europe
    *Norbert Gruner*

    Il commence par quelques citations d'organisateurs (genre BooK
    *"Plus JAMAIS!"* Il y en a pas mal de parisiens, ils pourront
    compléter, je ne tapes pas assez vite pour les retranscrire (aller,
    si, Eric: *Organiser YAPC c'est comme avoir un bébé...*

    BooK (encore!): *"You could be the next guy in PINK"*

   UTF8 and Perl in 5 minutes
    *Mark Fowler*

    Ca fait rire Dakkar qui cause de Perl et Unicode en 45 minutes
    demain!

    Il nous montre les differentes façons de mettre des caratères
    unicode dans un chaîne.

    Quand on lit depuis un fichier il ne faut pas oublier de le mettre
    en "binmode" (note de mirod: ou utiliser un parseur XML, bieng sûr)

    "Devel::Peek" est très utile pour savoir exactement ce qu'il y a
    dans une chaîne. <Test::utf8>, qu'il vient d'écrire est utile aussi.

   XML::LibXML


    Il a écrit des outils pour faciliter l'utilisation de XML::LibXML.
    Ca doit s'appeler XML::LibXML::Tools (le projecteur ne marche pas et
    je n'ai pas le temps de regarder sur CPAN). Pourquoi est-ce qu'il
    n'utilise pas tout simplement XML::Twig? La vie est pleine de
    mystêres!

   Enterprise Perl
    *Sebastien Aperghis-Tramoni*

    Perl n'est pas considéré comme un langage pour les gros projets.

    Voyons que faire.

    Par exemple quand Java crashe, il génére de vilaines "stack traces",
    il nous montre des exemples. Ca fait trèsprofessionel. Même les
    logiciels libres suivent cet exemple: un exemple, de Jakarta, 3
    pages de stack traces.

    D'où: "Acme::JavaTrace" qui essaye de résoudre ce problème en
    génerant d'énormes traces qui ressemble à du Java.

    Excellent!

   Starting your own company
    *jonasbn*

    Il nous explique la chose.

    Essayer d'avoir plus d'un client, réaliser que la plupart des
    propositions de projets n'aboutissent jamais, ne pas hésiter à payer
    pour des services (avocat, comptable...) être flexible (il fait pas
    mal de PHP ces jours-ci). Essayer de se faire payer à l'heure plutot
    qu'au projet. Avoir un processus pour traiter les affaires (histoire
    de ne pas oublier de se faire payer).

    Pasmal, réaliste.

   Making Perl development easier without using Perl
    *Scott Whriter *

    Il nos enjoint d'utiliser nos outils proprement.

    Par exemple le browser web: il utilise Firefox. Il se lance dans une
    explication de l'architecture de Mozilla.

    Extrait: *creating a plugin is easy!*

    Il nous montre le code... illisible à l'écran. C'est pour ajouter un
    moteur de recherche à boîte qui va bieng.

  How to test everything
    *Casey West*

    La clè c'est d'avoir la couverture de test: "Devel::Cover" Bon, je
    crois que j'ai dejà causé de ce module, excellent.

    Il nous montre comment le faire tourner, les jolis résultats, c'est
    vrai que les sorties sont vraiment complètes et pratiques.

    Des conseils généraux: tester des trucs vraiment stupides, des
    entrès débiles. Un truc rigolo il teste "sqrt": "sqrt(2) * sqrt(2)"
    affiche 2.00000000000001, mais le test "sqrt(2) * sqrt(2)==2" est
    vrai.

    Quelques modules utiles: "DBD::Mock" pour tester l'interface avec
    une BD et casser des choses.

  CPANTS


    CPANTS trace des indicateurs qualité rudimentaires sur les modules
    de CPAN: est-ce que la distribution est complète, est-ce qu'elle a
    des tests...

    On peut récupérer toutes les données, c'est une BD SQLite, d'où on
    peut extraire les chiffres qu'on veut.

    Rigolo: l'auteur avec la moyenne la plus élevée est Maurizio
    deMichelis, dont les modules contactaient le site web et charger du
    code a exécuter dans le "make install" (evil!). Apparement il a
    arrétéde faire ça.

    Futur plans: intégrer les CPAN ratings, les résultats des tests de
    CPAN testers, vérifier que l'auteur n'est pas R.U.Thor (le défaut),
    compter les hits de google sur la distribution, vérifier que le
    module a "use strict"...

    La principale limite est qu'il est impossible de faire tourner le
    code, vu qu'il peut dépendre de n'importe quoi.

  20 things you may not know about Perl
    *Joos Bousman*

    Bon, ça va aller vite, alors j'aurais pas beaucoup de temps pour
    commenter, mais vous pouvez voir des détails sur CPAN

    Inline::C
        ça marche

    YAML
        j'en ai déjà causé

    CLASS::ISA
    diagnostics
    celui là je l'ai raté, ça va trop vite pour moi...
    Benchmark
        La seule façon de savoir si un bout de code est plus rapide
        qu'un autre. Après tout qui (à part Rafael) sait ce que fait
        l'optimiseur?

    Devel::*
        très utile en dévelopement pour savoir ce qui se passe vraiment
        en coulisse (et ce que fait l'optimiseur ;--)

        "Devel::Size" par exemple vous donne la taille d'une structure
        en mémoire.

        "Devel::Peek" affiche comment une variable est stockée

        "Devel::Cover", encore une fois... la star de la conférence,
        dommage que Paul Johnson ne soit pas là

        "B::Deparse" essayez avec $owner='Jack'; print "this is
        $owners's house";

    Parse::RecDescent
        Pour tous vos parseurs

    only
        Pour spécifier la version d'un module à utiliser (et pas une
        plus récente), et pour manager les différentes versions pour
        pouvoir toutes les utiliser.

    memoize
        Ca je m'en sert, c'est super cool, pour cacher les résultats de
        fonctions

    File::Chdir
        Permet de faire des "chdir" avec une portée. Quand on sort du
        bloc où on a fait le "chdir" on retourne dans le répertoire de
        départ

    Config::Auto
        Pour pouvoir travailler avec différents formats de fichiers de
        config. Il lit indifférement du XML, .INI... de manière
        transparente.

    UNIVERSAL::*
        peut être abusé de manière créative. Genre
        UNIVERSAL::AUTOLOAD...

    Hook::Scope
        exécute du code à la sortie d'un block

    Hook::LexWrap
        même chose avec des fonctions

    Flags
        Il nous détaille les flags associés à une variable, je vous
        passe l'explication, il parle trop vite.

    CORE::GLOBAL::*
        permet de réécrire les fonctions de base de Perl.

    No::Die
        "die" ne marche plus!

    Acme::Code::Police
        j'en ai déjà causé l'an dernier il me semble (à l'occasion du
        même talk de Joos dont j'avais manqué le début).

        Si on utilise pas "use strict" ça détruit le fichier. Et bieng
        sûr "Acme::Code::FreedomFighter" détruit "Acme::Code::Police" si
        il essaye d'intervenir.

    le debugger
        Bon, je suis le seul à lever la main 2 fois quand il demande si
        on utilise des "print"s partout ou si on utilise le debugger.

        Un des problèmes est que quand on utlise le debugger,
        l'optimiseur n'est pas utilisé

    if  Un module qui

    Net::*
        Pour remplacer par example "open( "|/usr/bin/sendmail") " par
        Net::Sendmail (nom non garanti, ça va vite...)

    File::*
        File::Spec, File::Path pour être portable, File::Temp pour créer
        des fichiers temporaires de manière sûre

    Acme::Test
        Fait semblant de tester un module, avec des tests qui passent
        toujours.

    Il n'a plus de temps, c'est fini!

  The Good the Bad and the Ugly
    *Marty Pauley*

    Un des organisateurs, qui va râler. Sans slides, ça va être pratique
    pour moi (je peux râler aussi!)

    Donc le point de départ: on veut tous écrire du code plus propre.
    Mais qu'est-ce que ça veut dire écrire du code pplus propre. De la
    salle *you cannot describe it but you know it when you see it!*
    Marty: * thanks for summarizing my all talk, thank you all, good
    bye*.

    Donc il va essayer de nous donner quelques conseils. D'abord du code
    plus ropre ça veut pas dire du code plus rapide ou plus court (et il
    se moque d'un glofeur dans la salle).

    Donc en fait du code plus propre c'est du code plus maintenable.
    Note de Nick Clarke: si vous êtes le seul à comprendre votre code,
    tout va bien jusqu'a ce que posiez vos congés et que le chef les
    refuse...

    Pour savoir qu'est ce que du bon code, il faut voir du bon et du
    mauvais code. Et bien sûr, tout ça c'est sur CPAN! (et sûr Matt's
    Script Archive, au moins pour le mauvais code). Le problème est
    qu'en Perl il y a du bon code, du mauvais code et du vilain (ugly).
    Mais certain code vilain est en fait nécessaire (et certains pensent
    que tout code perl est vilain ;--)

    Si vous avez des problèmes de performances, surtout ne sacrifiez pas
    la maintenabilité. Changez les structures de données, ou les algos,
    ou la machine, ou le langage (à peu près dans cet ordre). Il cite
    MJD qui estime que Perl a quasiment toutes les fonctions de LISP, et
    que on devrait plutot essayer d'écrire du Perl à-la-LISP, pas à-la-C
    (coupable!).

    Et au pire, si Perl ne fait pas ce que vous voulez, parlez à Nick
    (Clarke). Nick conseille plutôt de parler à Larry et Damian pour
    qu'ils l'incluent dans Perl 6 (qui de l'avis de Marty aura plus de
    puissance que LISP).

    Extrait: *don't hesitate to steal things!*

  Essential CPAN modules
    Un panel sur des modules... j'ai raté la première partie, pendant
    les 2 présentations précédentes

    Tim Bunce commence, il prend des questions sur DBI.

    Q: pourquoi le synopsys est-il si long? A: parce des gens se
    plaignent qu'il est trop court ;--(

    Q:DBI asynchrone? A:un jour!

    Un idiot se lève pour râler contre XML::Parser et XML::DOM. Je peux
    pas vraiment vous raconter ce qu'il dit parce que je n'ecoute pas...
    vu que c'est moi qui cause.

    2 minutes et c'est fini.

    Puis Mark Fowler va parler de modules dont il a parlé dans le
    calendrier de l'avent de Perl.

    Il nous donne la liste et on peut choisir le sujet:

    Structures de données

        Tie::IxHash
            permet d'avoir des hash ordonnés (keys retourne les clés
            dans l'ordre d'insertion)

        Scalar::Util
            des fonctions utilies, comme "dualvar" ou "reftype" par
            exemple

        List::Util
            même chose sur des scalaires ("first" est ma préf'érée,
            "reduce" est difficile à expliquer, mais je me souviens
            l'avoir utilisée et elle est bien utile, voir la doc).

        Data::Structure::Util
            des fonctions comme "unbless"

    Attributs
        Il faut que je regarde ça pour un de mes modules (Params::Style)

        Attributes::Handler
            Ca va trop vite!!!!

        Exporter::Simple
            arghh!!!

        Attribute::Tie::Classes
            voir la doc

        Attribute::Overload
            Permet de dire qu'une méthode surcharge un opérateur:

              sub to_string: Overload("") { ... }

    Inline
        Il rapelle que Inline::* permet d'écrire du code dans un autre
        langage, il sera compilé la première fois qu'il sera utilisé, et
        la version compilée sera cachée (dans le répertoire "_Inline").

        "Inline::Files" est un peu différent, j'en ai déjà parlé, je n'y
        reviens pas, les nouveaux peuvent lire la doc, ça roxe!

    Bases de données

        DBD::SQLite
            Pareil, ça roxe! (je me rapelle de Matt demandant si par
            hasard ça serait utile, il était pas sûr!)

        Class::DBI
            Je vous en ait déjà causé dans mon CR de OSCON
            (http://xmltwig.com/report/oscon_2004.html): ça permet de
            mapper des objets dans des bases relationnelles.

        Pixie
            Stocke des objets arbitraires dans une BD. Astucieusement ça
            charge les objets de manière "lazy": les objets contenus
            dans d'autres objets ne sont chargés que quand ils sont
            vraiment utilisés

    Debugging
        Tiens, il parle des mêmes que Joos: "diagnostics",
        "Hook::LexWrap", "Devel::Peek" et autres.

    Date and Time

        DateTime
            Il recommende d'utiliser celui là

        DateParse
            prends une date en format naturel et retourne l'epoch

        Time::Duration
            secondes => format lisible (jj jours, hh heures...)

    Testing
        Quelques modules que je ne connaissais pas:

        Test::Exceptions
            verifie que le code meurt proprement.

        Test::DatabaseRow
            teste qu'une DB contient bien ce qu'on veut.

        Test::MockObject
            Permet de simuler un objet comme un veut

        Test::Inline
            inclue les tests dans la doc (j'aime pas trop,mais ça a
            l'air plus subtil que l'impression que j'en avais, faut que
            je regarde de plus près)

    Templating

        Template Toolkit
            Ca me rapelle qu'il faut que je lise le bouquin sur TT.

            Son avis: on peut utiliser ce qu'on veut, du moment qu'on
            utilise un systême

        Template::Extract
            utiliser des templates TT pour extraire des données! Kewl!

        Voir http://2shortplanks.com/talks



More information about the Toulouse-pm mailing list