Les conséquences de traîner sur IRC

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

IRC

  • Une définition

      <jaban> IRC channels are like houses...
      <jaban> You can kick your friends out of your house for any reason 
              you want, even if you're being stupid and unreasonable. You 
              can even kick them out for no reason at all. It's YOUR house.
      <jaban> Now imagine if 3-year-olds owned all the houses.
      <jaban> That's IRC.

Traduction

  • L'IRC c'est :

    • un moyen pour discuter presque comme à l'oral

    • bien plus rapide que le mail

    • mais avec des raccourcis d'orthographe et de grammaire

    • "écriture SMS"

      • (sauf que ça existait bien avant le SMS)

    • en conséquence, souvent immature, infantile et stupide

Fait établi

  • On passe notre temps sur IRC

Fait établi

  • On passe peu de temps sur IRC

  • Optimisation proactive de l'utilisation de cet outil de collaboration partagée

  • </buzz>

Bots

  • Bot (robot) = programme connecté sur le chan

  • Fonctions utilitaires : seen, page, bookmark commun, interrogation de services web et flux RSS

  • Éventuellement ludiques

        <Maddingue> purl, be Raffarin
        <purl> Ouine ! Ze yesse, nide ze no tou ouine, agueune ze no !
  • Voire totalement stupides

        <Maddingue> purl, jerk it
        <purl> I'M STARTING TO GET HUNGRY ?!?!?! WHO'S UP FOR PRICKS

Purl

Bots

  • Nouveaux services

  • Source de Purl non accessible

  • Donc, création de nos propres bots

  • Facile grâce à Bot::BasicBot

Babel

  • Traduction par Babelfish

  • Bot::Babelfish

  • Donne souvent des résultats.. surprenants

Meta

  • Provient d'un délire de BooK

  • Voulait des listes de mots pour remplacer les foo, bar, baz

  • Acme::MetaSyntactic

  • Commande meta

        $ meta -w loremipsum 10
        magni deserunt ad beatae eu temporibus repellendus ipsam explicabo deleniti

Meta

  • Mais manquait encore quelque chose

  • ...

      #perlfr Sat Mar  5 01:15 CET 2005
        <Maddingue> BooK: bon, l'API de AMS, tu l'as changé alors ?
        <BooK> je sais pas
        <Maddingue> comment on fait pour invoquer ton merdier
        <BooK> ça se mélange dans ma tète
        <BooK> je peux te montrer des use case
        <Maddingue> je veux juste savoir si tu vas changer la commande meta
        <Maddingue> BooK: parce que j'ai fais la seule chose qui me semblait
                   logique de faire avec ton module
        <BooK> un robot irc
  • Bot::MetaSyntactic

Meta

  • Utilisation aisée, donc nouveaux utilisateurs

    • dont des Perl5 porters

  • Nouveaux utilisateurs, donc nouvelles idées de thèmes

  • buffy, donmartin, dilbert, planets, tour_de_france, magic8ball, dwarves, jabberwocky, norse_mythology

  • Et forcément, quelques délires collectifs

        $ meta -w pornstars 5
        Nikki_Charm Michelle_Barrett Kim_Eternity Pandora_Peaks Jay_Ashley

Assemble

  • Regexp::Assemble, par David Landgren

  • Commande assemble présente dans certaines versions

  • Interface IRC

  • Bot::BasicBot::Pluggable::Module::Assemble

CoreList

  • Interface à Module::CoreList

  • Avait existé, mais bot plus présent

  • D'où nouveau plugin

  • Bot::BasicBot::Pluggable::Module::CoreList

Chans techniques

  • Sur MAGnet (irc.perl.org)

    • #p5p - Perl5 Porters

    • perl-qa - Perl Quality & Assurance (& Kwalitee)

Chans techniques

  • Personnes très compétentes

  • Demandent aussi de l'aide pour des tests ou des conseils techniques

  • Donc on les aide

  • Résultat, ils vous apprécient

  • Et ça peut avoir des conséquences

Exemple

  • Mise à jour de la liste Phalanx 100

    • Andy Lester sur #perl-qa

    • Fichier log sur deux mois d'un miroir CPAN

    • Code pour trouver les modules les plus importants

    • Mauvaise idée : répondre

      • Moi: « Les logs web ne me semblent pas fiables. Par contre on connaît les dépendances de chaque module : on les inversant, on devrait pouvoir en déduire quels sont les modules les plus importants. »

      • Andy: « OK. Show me the code :-) »

Conséquence

  • Défi relevé

  • CPAN::Dependency

  • Fourniture d'une liste des modules par ordre d'importance

  • Mise à jour de la liste Phalanx 100

    • Avec plusieurs modules vraiment importants qu'il n'avait pas vu et qui ont été détectés par CPAN::Dependency

  • Défi gagné :-)

Exemple

  • Décembre 2005 : détection d'un double trou de sécurité dans Perl

    • syslog() laissait des données non vérifiées dans le format passé à snprintf()

    • snprintf() de Perl avait un bug le faisant planter, d'où déni de service

  • Remonté par un bug dans Webmin

    • Donc tout le monde déteste Webmin

    • (un peu plus)

Exemple

  • Zonais sur #p5p depuis un petit moment

  • Avais même fourni à Nicholas Clark accès à ma machine

  • Et pourtant...

      19:10 <@Steve_p> Can Sys::Syslog be easily split out as a stand-alone 
                       module?  I'm assuming yes.
      19:10 <@Nicholas> I assume yes
      19:11 <@rgs> probably
      19:12 <@Steve_p> Should we press-gang^W ask someone if they'd like to 
                       release it?  It would help get its fixes to other Perl 
                       versions than blead and maint.
      19:12 <@Nicholas> yes, why not
      19:12 <@Nicholas> seen maddingue
      19:12 <+purl> maddingue was last seen on #p5p 15 hours, 56 minutes and 
                    15 seconds ago, saying: laughs and goes to bed
      19:12 <@Nicholas> <ducks>
      19:12 <@Steve_p> heh

Nouveau défi

  • Simon Cozens et Mark Jason Dominus utilisaient Lingua::EN::Inflect

  • S'en servaient pour avoir le pluriel de mots français

  • Avec des résultats...

        $ perl -MLingua::EN::Inflect=PL -le'print PL("beau")'
        beaus
        
        $ perl -MLingua::EN::Inflect=PL -le'print PL("cheval")'
        chevals

Nouveau défi

  • Je leur indique les bonnes orthographes

  • Leur réponse :

    • Thanks

    • Can you write Lingua::FR::Inflect?

Spécifications

  • Fonctionnelle : fournir le pluriel d'un mot

    • (de différentes manières)

  • API : basée celle de Lingua::EN::Inflect

    • PL_N() - pluriel d'un nom ou pronom

    • PL_V() - pluriel d'un verbe

    • PL_ADJ() - pluriel d'un adjectif

    • Probablement des extensions spécifiques pour le français

  • Méthodologie : TDD

        is( PL("beau"), "beaux" );
        is( PL("cheval"), "chevaux" );

Développement

  • Damian Conway a écrit Lingua::EN::Inflect seul

    • Mais Damian est-il humain ?

Appel à contribution

  • Lingua::FR::Inflect

    • Nombre non négligeable de subtilités à prendre en compte de par le nombre d'exceptions en français

    • Nécessite certainement une bonne connaissance de la langue

    • Ouvert à un développement collaboratif

    • Projet et liste de diffusion seront probablement hébergés sur le serveur des Mongueurs

    • Ouverture sera annoncé sur la liste technique perl@mongueurs.net

    • Si intéressé, me contacter à saper@cpan.org

Merci