Article publié dans Linux Magazine 116, mai 2009.
Copyright © 2009 - Erik Colson
Après le succès du Belgian Perl Workshop 2007 organisé par le groupe de mongueurs Bruxellois, l'évènement vient d'être renouvelé. Cette fois ce sont les mongueurs flamands qui l'ont organisé, mené par Dirk De Nijs et Chris Vertonghen. Les présentateurs sont venu des quatre coins d'Europe (Angleterre, Slovaquie, Russie, France, Luxembourg, Pays-Bas et Belgique) voire même d'Israël et d'Amérique ! Le workshop a eu lieu à Louvain, petite ville estudiantine à 20 km de Bruxelles, et a attiré près de 50 personnes. Étant donné le nombre d'orateurs, le workshop occupait deux locaux.
Comme pour le workshop 2007, les organisateurs ont choisi un samedi pour cet évènement. Dirk De Nijs a ouvert la conférence remerciant tout les participants et sponsors. Le workshop démarre sur les chapeaux de roues avec moins d'un quart d'heure de retard. Les intérêts du public sont suffisamment partagés, ce qui procure des salles remplies de façon équilibrée. Pour moi, le choix fut aisé et j'ai opté pour la salle dédiée à Catalyst, outil de développement web très abouti.
Le premier orateur est Yuval Kogman, venant d'Israël. Il est l'un des
développeurs de KiokuDB, un moteur de stockage d'objets. Le projet est
jeune (la première publication sur CPAN datant de décembre 2008) et
est très prometteur. La sauvegarde d'objet est une alternative à la
sauvegarde de données relationnelles comme le permet DBIx::Class
.
Les deux forment une couche entre votre programme et la base de
données. KiokuDB supporte actuellement Berkeley DB et DBI.
La différence principale entre les deux approches réside dans l'absence de schéma dans le cas de KiokuDB. Les objets sont définis par l'utilisation du framework Moose et KiokuDB sait dès lors exactement ce qui doit être sauvegardé. Il vous offre des méthodes pour chercher, lister, détruire, etc. les objets. Les relations entre objets sont également sauvegardées. Cela permet par exemple de retrouver le lien entre l'objet client et l'objet facture et de cette façon il est aisé de retrouver toutes les factures adressées à un certain client.
Étant moi-même adepte de wxPerl, je soutiens entièrement Eriam lorsqu'il proclame « wxPerl rocks! ». Les applications desktop ne sont pas mortes (d'ailleurs le navigateur web en est une). wxPerl apporte la compatibilité physique entre les différents systèmes d'exploitations. Le rendu de votre application semble natif sur Linux, Mac OS X et même Windows.
S'il existe une boucle d'évènement dans wxPerl, Eriam nous expose une
alternative : POE::Loop::Wx
. Ce module ouvre une multitude de
possibilité aux programmeurs wxPerl par l'ajout de composants POE. Le
nombre de ces composants sur CPAN est d'ailleurs impressionnant.
Si vous souhaitez faire du développement RAD, il existe l'outil wxGlade, écrit en Python. Comme d'autres programmeurs wxPerl, je n'utilise pas (plus) cet outil pour coder un interface. Cela me permet de maintenir plus facilement le code avec des outils tel que Git. wxGlade a néanmoins le grand avantage de vous permettre de comprendre le fonctionnement de wxPerl en étudiant le code généré par cet outil.
Pour être complet, Eriam mentionne également le module XRC qui permet de générer un interface utilisateur par fichier XML. Si ceci semble une approche intéressante, il est important de tenir compte du coût en consommation de ressources de celle-ci, ayant comme résultat une perte de rapidité lors du chargement de l'interface.
Coder en wxPerl peut ressembler à du code en C. En effet, wxPerl est
wrappé autour de wxWidgets qui est un framework écrit en C. Le module
wxPerl::Styles
(disponible sur CPAN) encapsule cela. Forcément, le
rajout de cette couche aura lui aussi une incidence sur la
consommation de ressources.
Superbe présentation pour ceux qui ne savaient pas que l'Unicode et
les expressions régulières font mauvais ménage. Cela dit, Abigail m'a
fait réaliser que mes connaissances en expressions régulières méritent
une remise à niveau : \h
, \v
, \p{isDigit}
, [[:upper:]]
,
l'importance de l'emplacement d'un tiret dans les plages n'en sont que
quelques exemples.
Pour ceux qui n'ont pu suivre le flux impressionnant d'exemples et pour les absents, un lien vers les slides de cette présentation devrait être publié sur le site de la conférence.
Après une courte démonstration des AWS (Amazon Web Services) par Simone Brunozzi, c'est Chris qui nous explique l'approche de ce service par Perl.
AWS est utilisé entre autre pour le stockage de données ainsi que pour
le streaming permettant de soulager votre serveur web. Il existe
multiples implémentations de l'API disponible sur CPAN. D'après Chris,
Net::Amazon::S3
est le module le plus abouti. Ce module est également
maintenu régulièrement. Ce module inclut des méthodes pour accéder à
une corbeille et d'y déposer, lire, détruire des fichiers.
Pour le streaming le module préconisé par Chris est
Amazon::SQS::Simple
.
Matt Trout est l'un des développeurs de Catalyst ainsi que de
DBIx::Class
. Il a animé l'après-midi en parlant du framework MVC
(Model View Controller) Catalyst.
D'emblée, Matt lance le ton en annonçant que le but d'avoir développé Catalyst est de pouvoir créer et gérer des sites complexes et que c'est pour cette raison qu'il est inutile de le comparer avec RoR. Son atout est d'ailleurs de permettre de garder un code structuré et clair. Le rythme du développement de Catalyst reste soutenu et Matt nous explique que la version 5.8 sera modulée autour de Moose et ce dans le but d'obtenir un code encore plus maintenable.
Malgré cette évolution, les développeurs souhaitent garder une compatibilité avec des anciennes versions. C'est d'ailleurs une des exigences primordiales. Lors d'une mise à jour, vous ne devriez recevoir aucune erreur. Si cela devait arriver, veuillez le rapporter car cela doit être corrigé. Matt ajoute qu'il serait tout de même audacieux d'appliquer une mise à jour sur un système en production sans garder la version qui fonctionnait préalablement dans un répertoire différent. C'est une approche qu'il déconseille vivement.
Écrire du code pour des sites internet importants ou complexes
nécessite l'écriture de tests. Les tests permettent non seulement
d'être certains que votre code fonctionne correctement mais également
que des comportements non-souhaités soient le résultat des
modifications apportées dans le futur. Pour le test de sites web il
recommande le module Test::WWW::Mechanize::Catalyst
disponible sur
CPAN.
Catalyst met des scripts à votre disposition pour créer de nouvelles fonctionnalités dans votre application. Ces scripts génèrent non seulement le squelette pour le type de fonctionnalité souhaité, mais également les fichiers de tests accompagnant cela. Tout cela dans le but d'obtenir toujours du code propre et maintenable.
La seule partie que Catalyst ne peut faire pour vous, est de documenter votre code. Cela est important. Grâce à une bonne documentation, vous saurez encore dans le futur ce que vous avez voulu obtenir dans votre code. Penser toujours que votre application « vit » et qu'elle grandira nécessairement !
Pour ce qui concerne Catalyst, l'utilisation de services AWS tel que SimpleDB et SQS ne sont que des model backends. Les modules pour y accéder sont disponibles sur CPAN. Matt n'a rien d'autre à ajouter à cela excepté que vous ne devriez jamais faire confiance au cloud.
Que se passerait-il si AWS mourait ? Qu'en est-il des backups ? Pouvez-vous tester les sauvegardes de AWS ? La réponse est non et d'ailleurs personne ne garantit que vos données seraient restaurables. Vous devez garder vos données vous-même ET vous devez tester la restauration de vos sauvegardes !
Qu'en est-il de la connectivité et de la performance ? Que se passerait-il si AWS avait un problème ? Cela est improbable mais cela peut arriver. Dans ce cas vous devez pouvoir servir vos données vous-même.
Pourquoi AWS peut-il être utile ?
AWS vous offre du CPU et du CACHE. Utilisez-les pour servir vos données en les synchronisant vers AWS. Vous garder les données chez vous et vous faites les sauvegardes. C'est cela qu'il vous faut. La redondance des données via AWS est en fait également une autre copie de vos données utilisable au cas où votre système devait périr.
Le Belgian Perl Workshop s'est clôturé par plusieurs présentations éclair et une vente d'objets. Les bénéfices éventuels du workshop seront reversés à YEF qui est également sponsor pour ce workshop. Merci à tout les organisateurs, orateurs et participants pour cet inoubliable journée !
Belgian Perl Workshop 2009 - http://conferences.mongueurs.net/bpw2009/
Vlaanderen.pm, le groupe organisateur de la conférence - http://vlaanderen.pm.org/
Catalyst - http://www.catalystframework.org/
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.