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.

mardi 23 décembre 2008

Présentation de ce blog

Un projet se termine, un blog se crée.

Pour la création de ce blog, j'aimerai avant tout fermer le projet AnalyseSI. Pour faire simple, le projet est en friche depuis de longs mois et cela ne sert à rien de se mentir : je n'ai pas le temps de développer une nouvelle version, vous trouverez toutes les informations sur ce billet.

Pour ceux qui ne me connaissent pas, je m'appelle Loïc Dreux, je suis ingénieur d'étude dans une grande SSII sur Lille, je suis (ou plutôt j'étais) le développeur d'AnalyseSI et je fais partie de plusieurs communautés du Web tel Geekzone sous le pseudonyme ZGoblin ou Ubuntu-fr sous le pseudonyme Loyl. Je suis un fan des logiciels libres et particulièrement Ubuntu. Je développe en Java et en Perl.

Je crée ce blog pour vous faire partager mes connaissances en développement libre car il n'y a pas beaucoup de blogs francophones traitant du sujet, le seul que me vient à l'esprit est Biologeek (merci à David Larlet de m'avoir fait connaitre le principe des frameworks web et l'architechture REST). Ca va évidemment parler Ubuntu, parler Perl et Java. Voici la liste des sujets que j'aimerai traiter dans mes prochains posts :
  • La bibliothèque Perl Menthe : une bibliothèque que j'ai écrite dans un projet d'entreprise qui réimplémente quelques objets de base Java (io.File, util.Hashmap, util.ArrayList) en Perl.
  • Le framework web Perl Catalyst
  • Le framework web Java Play!
PS: Vu que nous sommes le 24 décembre, je souhaite un joyeux noël à tous.