[couverture de Linux Magazine 61]

Perles de Mongueurs (3)

Article publié dans Linux Magazine 61, mai 2004.

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

Les perles de ce mois-ci ont été dénichées et rédigées par Philippe "BooK" Bruhat (book@mongueurs.net), de Paris.pm.

Mini-traducteur

Pour me dépanner pendant mon travail de traduction sur Amelia (Programming Perl, 3rd edition), non seulement j'avais mon Robert & Collins à portée de main, mais pour les mots courants, je disposais d'un terminal ouvert sur un petit script de traduction.

Le script s'appuyait sur WWW::Babelfish, de Dan Urist. En voici le code source :

    #!/usr/bin/perl -w
    use strict;
    use WWW::Babelfish;

    my $fish = new WWW::Babelfish( agent => 'Translate/0.1' );
    die ("Babelfish indisponible\n") unless defined($fish);
    my $prompt = "\n? ";
    print $prompt;

    while (<>) {
        print $fish->translate(
            source      => 'English',
            destination => 'French',
            text        => $_,
            #delimiter   => "\n\n",
          ),
          $prompt;
    }

Attention, la méthode translate() concatène les chaînes passées par le paramètre text jusqu'au séparateur défini par delimiter. Le séparateur par défaut pour WWW::Babelfish est \n\n. Il vous faudra donc appuyer deux fois sur Entrée pour que le texte tapé soit traduit. Ceci permet de copier/coller des paragraphes entiers sans se soucier des sauts de lignes.

Exemples :

    ? programming language
    langage de programmation
    ? the three virtues of a programmer are impatience, lazyness and hubris

    les trois vertus d'un programmeur sont impatience, lazyness et hubris
    ?

C'est Babelfish, il reste donc du travail pour les traducteurs humains ! ;-) À noter que module WWW::Babelfish s'appuie sur LWP et IO::String.

Retrouvez votre adresse IP

Pour vous connecter à Internet, vous utilisez un modem routeur ADSL qui vous donne une adresse IP privée dans la plage 192.168.1.0/24 (RFC 1918) et fait du masquerading ou de la PAT (Port Adress Translation). Comment faire pour retrouver votre adresse publique quand tout ce qui la concerne se passe hors de portée de vos scripts ?

La CNIL (Commission Nationale Informatique et Libertés) dispose sur son site web d'une rubrique « Découvrez comment vous êtes pistés sur Internet », qui vous donne pas mal d'informations sur votre configuration, à partir des données récupérées lors de la conversation entre votre navigateur et le serveur web.

Pour retrouver l'adresse IP publique qui a contacté le site web, utilisez :

    $ perl -MLWP::Simple -le 'print get("http://www.cnil.fr/traces/demonst/config.htm")=~/e est : ([^<]+)/'

Mise à jour août 2005 - Le site de la CNIL ayant changé, la ligne de commande à utiliser est désormais :

    $ perl -MLWP::Simple -le 'print get("http://www.cnil.fr/index.php?id=123")=~/<h2 class=.vert01.>([^<]+)/'

Il existe un autre site qui vous donne votre adresse IP ; celui-ci s'appelle tout simplement http://whatismyip.com/ :

    $ perl -MLWP::Simple -le 'print get("http://whatismyip.com/")=~/IP\s+is ([\d.]+)/i'

Notez qu'en entreprise, ce genre de script vous permettra de connaître l'adresse IP publique du proxy frontal Internet (dans le cas d'une chaîne de proxys) de votre société.

Si la valeur affichée ne vous semble pas plausible, c'est peut-être parce que votre fournisseur d'accès a installé un proxy transparent, qui intercepte toutes vos requêtes web pour les mettre en cache et ainsi augmenter les performances de son réseau (c'était le cas de Noos quand j'avais le câble).

Si ce proxy n'est pas anonyme, il y a de fortes chances qu'il envoie un en-tête X-Forwarded-For indiquant l'adresse IP source de la requête détournée. C'est certainement celle-ci votre adresse :

    $ perl -MLWP::Simple -le 'print get("http://www.cnil.fr/htbin/variables.cgi")=~/FOR[^1]+1">([^<]+)/'

Mise à jour août 2005 - Le site de la CNIL a changé et il semble que leur CGI ne renvoie plus l'information concernant l'en-tête X-Forwarded-For.

Dans le cas où cet en-tête n'est pas présent, ce programme renverra &nbsp;.

Attention si vous voulez utiliser ce code dans un script pour affecter l'IP à une variable. print() donne un contexte de liste au résultat de l'opérateur =~, qui renvoie alors les valeurs capturées par les parenthèses de l'expression rationnelle. Pour mettre à jour une variable dans un script, il vous faudra écrire :

    use LWP::Simple;
    my ($ip) = get("http://www.cnil.fr/traces/demonst/config.htm") =~ /e est : ([^<]+)/;

Merci à DomiX de m'avoir demandé sur le canal IRC des mongueurs (#perlfr sur irc.mongueurs.net) de l'aider à faire un script lui permettant de connaître son IP alors qu'il était derrière un routeur.

Le saviez-vous ?

Pumpking

Le mot pumpking est couramment employé sur p5p et dans la communauté Perl pour désigner le responsable de quelque chose.

Le mot vient de l'expression patch pumpkin (la citrouille de patch) utilisée d'abord par Chip Salzenberg. Il faisait référence à la technique de sémaphore utilisée par un de ses collègues : pour avoir le droit d'utiliser le lecteur de bandes réseau pour les sauvegardes, il fallait avoir en main une petite citrouille en peluche. Ainsi, on était sûr qu'il n'y avait qu'une personne à la fois qui utilisait le lecteur.

Ce backup pumpkin est devenu un patch pumpkin dans les discussions sur p5p (fin 1995-début 1996). Les possesseurs successifs du pumpkin furent appelés pumpkings. La liste des pumpkings est disponible dans perlhist(1).

Sources : perlhist(3), les archives de p5p.

Les journées Perl 2004

Les dimanche 6 et lundi 7 juin prochains, à la Cité des Sciences et de l'Industrie, à Paris sont organisées les premières Journées Perl Il s'agit d'une conférence en français entièrement consacrée à Perl, dans l'esprit des conférences YAPC et des Perl Workshops organisés par la communauté Perl dans le monde entier.

Le premier jour sera consacré principalement à des tutoriels et le second à des conférences sur divers aspects de Perl. Le prix d'entrée (pas encore fixé) sera de l'ordre d'une vingtaine d'euro. Le plus important est surtout que cette conférence sera l'occasion pour la communauté Perl française de se rencontrer : tous les utilisateurs et utilisatrices de Perl, quel que soit leur niveau, sont invités à venir faire un tour à la Cité des Sciences pendant ces deux jours.

Toutes les informations utiles sont sur le site officiel des Journées Perl : http://conferences.mongueurs.net/2004/

À vous !

Envoyez vos perles à perles@mongueurs.net, elles seront peut-être publiées dans un prochain numéro de Linux Magazine.

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]