Archives octobre 2009

Am I connected?

| Aucun Commentaire | Aucun Trackback

La plupart des outils que je développe s'appuie sur LWP, et donc, j'ai besoin d'un accès au web pour les faire fonctionner (belle lapalissade !). Et parmi ces outils, certains sont prévus pour se lancer via cron, et donc se pose la question de savoir ce qui se passe pour le programme quand il se lance et que je ne suis pas connecté. Une des manières de traiter le problème consiste à modifier le programme de manière à ne lancer le traitement que lorsque l'accès au web est opérationnel. C'est ici que LWP::Online vient me rendre service. Il me permet d'importer une fonction, online(), qui va vérifier si un accès au web est bien présent. Si c'est le cas, la fonction retournera une valeur positive. LWP::Online vérifie l'accès au web en vérifiant la présence des copyrights sur certains sites comme Google et Yahoo!, cela rajoute donc une certaine latence dans votre programme, mais cela reste intéressant pour certains outils.

Un biscuit pour un autre

| Aucun Commentaire | Aucun Trackback

Dernièrement, je me suis trouvé confronté à un problème plutôt idiot, mais néanmoins gênant. J'utilise depuis quelques années maintenant les services offerts par un site. J'ai dû me connecter à ce site dernièrement, mais

  1. je ne me souvenais plus de mon mot de passe !
  2. la réinitialisation du mot de passe était difficiel car pas moyen de me souvenir de l'adresse de courrier électronique employée pour créer le compte !

Damned! Comment faire ?

Et bien, se féliciter d'être paresseux ! En effet, pour profiter des services de ce site, je m'étais écrit un petit robot en Perl avec LWP. Ce brave outil fonctionnait toujours puisqu'il s'appuyait sur un cookie. Ce cookie était dans le format propriétaire de HTTP::Cookies, je devais donc le convertir dans le format de Mozilla Firefox.

Aussitôt dit, aussitôt fait. Une petite recherche sur le web, et je trouve un article des mongueurs expliquant un cas de conversion de cookies, mais de Mozilla vers LWP. Après quelques tâtonnements, j'ai finalement adapté le programme. Le voici :

#!/usr/bin/env perl

use strict;
use warnings;

use HTTP::Cookies;
use HTTP::Cookies::Mozilla;
use Getopt::Long;

my $config = {};

GetOptions( $config, 'from=s', 'to=s' );

die _usage() unless _valid_config( $config );

my $input_jar = HTTP::Cookies->new( file => $config->{from} );
bless $input_jar, 'HTTP::Cookies::Mozilla';

$input_jar->save( $config->{to} );

sub _usage {
    return "Usage: $0 --from cookies.lwp --to cookies.mozilla\n";
}

sub _valid_config {
    my $config = shift;

    if (exists $config->{from} and exists $config->{to}) {
        return 1;   
    } else {
        return 0;
    }
}

Il m'a donc suffit d'appeler ce programme de la manière suivante : $./cookies_converter -f my_lwp_cookie.txt -t /path/to/mozilla/profile/cookies.sqlite

Ensuite, j'ai pu aller sur la page de mon compte pour changer mon mot de passe et mettre une adresse de courrier électronique plus récente.

Aidez-moi à remplir mon buffer

| Aucun Commentaire | Aucun Trackback

Au détour d'un tweet, j'ai découvert un petit outil venant compléter emacs. Il s'agit du projet perl-completion.el. Ce dernier permet d'avoir une auto-complétion intelligente, c'est-à-dire qui ne se limite pas aux contenus des buffers ouverts. Vous pouvez ainsi obtenir une aide pour le nom des modules, mais aussi des méthodes exportées par ces modules. Bref, un must !

Si vous voulez en voir plus, il y a un screencast qui vous permettra d'apprécier le travail fait. Il y a également un dépôt git en ligne.

Enjoy!

Donnez-moi vos feuilles !

| Aucun Commentaire | Aucun Trackback

Peu de temps pour programmer ces derniers temps, mais qu'importe, voici un petit outil programmé aujourd'hui. Il permet d'afficher les feuilles d'un document XML. En effet, j'ai eu entre les mains un fichier à convertir, il s'agissait d'un export XML provenant de BCDI. Or, je ne connaissais pas ce vocabulaire XML et je voulais illustrer une migration de données. j'avais donc besoin d'une liste des feuilles de cet arbre XML, où je pourrai tirer quelques éléments pour effectuer la pseudo migration. Aussitôt pensé, aussitôt fait.

Perl peut utiliser la libxml avec le module XML::LibXML et via cette dernière, je peux appliquer des expressions XPath sur mon fichier XML. L'expression XPath en question est **//*[count()=0]*. Le reste est vraiment simplissime.

Voici le code :

#!/usr/bin/env perl

use strict;
use warnings;

use XML::LibXML;
use Getopt::Long;

my $config = {};

GetOptions( $config, 'xml=s' );

_usage() if not _validated( $config );

my $parser = XML::LibXML->new();
my $catalog = $parser->parse_file( $config->{xml} );

my @nodes = $catalog->findnodes( '//*[count(*)=0]' );
my %leaf_nodes;
foreach my $node (@nodes) {
    my $path = $node->nodePath();
    $path =~ s/\[\d+\]//g;
    $leaf_nodes{$path}++;
}

print ($_, $/) foreach keys %leaf_nodes;

sub _usage {
    die "Usage: $0 --xml file.xml\n";
}

sub _validated {
    my $config = shift;
    
    if (exists $config->{xml}) {
        return 1;
    } else {
        return 0;
    }
}

L'outil est tellement simpliste qu'il ne me sera probablement plus utile demain, mais au moins, j'ai une base pour analyser un éventuel fichier XML en vue d'une migration. Les prochains billets traiteront d'ailleurs probablement de migration de catalogues de bibliothèques.

À propos de cette archive

Cette page est une archive des notes de octobre 2009 listées de la plus récente à la plus ancienne.

septembre 2009 est l'archive précédente.

novembre 2009 est l'archive suivante.

Retrouvez le contenu récent sur l'index principal ou allez dans les archives pour retrouver tout le contenu.

Pages

Powered by Movable Type 4.261