Développement libre sous Ubuntu

mercredi 24 décembre 2008

La bibliothèque Perl Menthe

Mon premier sujet technique parlera de la bibliothèque Perl Menthe. J'ai développé cette bibliothèque dans le cadre d'un projet pour une grande société du bricolage afin de simplifier mes développements. Il s'agit d'une réécriture en Perl natif de certaines classes Java comme java.util.ArrayList ou java.io.File afin de faire du développement objet en Perl.

Récupérer les sources

Le projet est hébergé sur Launchpad, pour récupérer les sources vous devez tout d'abord installer bazaar, le système de gestion de version créé par Canonical :

sudo apt-get install bzr

Bazaar est assez simple à utiliser, dans un terminal, lancez la commande suivante :

bzr branch lp:menthe

Un nouveau répertoire menthe est créé contenant le projet.

Pour l'installation :

perl Makefile.pl
make
sudo make install

Installer le paquet pour Ubuntu Intrepid

Avant de continuer, je préfère faire un petit rappel :

Ajouter un dépôt externe peut nuire à la sécurité et à la stabilité de votre système.
Vous voilà prévenu, le dépôt que j'ai créé est un dépôt de développement, si vous l'ajoutez c'est à vos risques et périls.
Si vous souhaitez quand même tester le paquet libmenthe-perl pour Ubuntu Intrepid, il faut tout d'abord ajouter mon dépôt personnel :

deb http://ppa.launchpad.net/loic.dreux/ubuntu intrepid main

puis lancer la commande suivante :

sudo apt-get install libmenthe-perl

La Documentation

Toutes les bibliothèques Perl proposent une documentation au format POD, cependant, pour moi qui vient du monde Java, je trouve ce système peu pratique pour le développement orienté objet et j'ai décidé d'utiliser un autre générateur de documentation : Doxygen. Il faudra bien un jour que j'écris une documentation au format POD dans la langue de Shakespeare si je souhaite ajouter ma bibliothèque au CPAN.

Pour l'installation des outils qui permettent de générer la documentation :

sudo apt-get install doxygen libdoxygenfilter-perl

libdoxygenfilter-perl est une outil Perl qui permet de transformer du code Perl en pseudo langage compréhensible par doxygen.

La génération de la documentation est simple, dans le répertoire menthe, lancer la commande :

bob@tethys:~/Temp/menthe$ mkdir dist
bob@tethys:~/Temp/menthe$ doxygen

Vous obtenez un répertoire html contenant la documentation, il vous suffit d'ouvrir le fichier index.html.

Entrée/Sortie : menthe.io

Passons maintenant au vif du sujet, un présentation des différents paquets et pour commencer, le paquet menthe.io (l'équivalent du java.io du langage Java). Ce paquet contient les classes nécessaires à la lecture et à l'écriture des fichiers en incluant un système d'exception.

Un exemple vaut mieux qu'un long discours, voici comment on écrit un fichier avec la bibliothèque Menthe :

my $fp;
my $file = new Menthe::IO::File('/fichier');
try {
$fp = new Menthe::IO::FilePrinter($file);
...
$fp->println("bla");
} catch Menthe::IO::IOException with {
} finally {
$fp->close() if defined($fp);
};

C'est beaucoup plus verbeux qu'avec du code Perl classique, mais cet exemple à l'avantage de gérer les erreurs avec une propagation propre et souple à la fois.

Les listes, les maps et les devises : menthe.util

Comme vous l'aurez certainement compris le paquet menthe.util est l'équivalent de java.util, il contient des outils pour gérer des listes, des maps ou des conversions de devises.

Voici un exemple d'utilisation :

# Liste
my $list = new Menthe::Util::ArrayList();
$list->add("bak");
$list->get(1);
# Map
my $hash = new Menthe::Util::HashMap({ 5 => 2, "bak" => "bidule", new IO::File() => new IO::File(), {} => []});
$hash->put(5, 3);
$hash->get(5);
# Currency
my $curEur = Menthe::Util::Currency->getInstance('EUR');
my $curUsd = Menthe::Util::Currency->getInstance('USD');
# CurrencyConverter
my $currencyConverter = new Menthe::Util::CurrencyConverter($myCurrencyExchangeRateProvider);
my $mnt = $currencyConverter->convert(72, $curEur, $curUsdo, DateTime->now(), 2);

Conclusion

J'ai présenté brièvement l'utilité de cette bibliothèque : proposer des objets de base pour le langage Perl avec un système d'exception pour gérer simplement les erreurs. Je vous conseille de regarder la documentation Doxygen pour vous rendre compte des possibilités de cette bibliothèque.

Les prochaines améliorations me semble évidentes : nettoyer le code, créer une documentation POD en anglais afin d'inclure cette bibliothèque dans le CPAN et améliorer le paquet pour Ubuntu.

Aucun commentaire:

Enregistrer un commentaire