Un petit script bien utile pour compiler vos composants:
!/usr/bin/perl -w
use strict;
use HTML::Mason;
my $interp = HTML::Mason::Interp->new();
my $file = shift;
eval {
$interp->make_component(comp_file=>$file);
};
die $@ if $@;
Principalement mason. Le reste a l'occasion
!/usr/bin/perl -w
use strict;
use HTML::Mason;
my $interp = HTML::Mason::Interp->new();
my $file = shift;
eval {
$interp->make_component(comp_file=>$file);
};
die $@ if $@;
Posted by jeteve 0 comments
Posted by jeteve 0 comments
Oyez Oyez, en meme temps que l'anniversaire des 20 ans de perl (le bel age), sort la version 5.10 . Cette version a un an de retard, mais la liste des nouveautes vaut le coup d'oeil.
Posted by jeteve 0 comments
Posted by jeteve 1 comments
Powered by ScribeFire.
Posted by jeteve 0 comments
Posted by jeteve 0 comments
Powered by ScribeFire.
Posted by jeteve 0 comments
Après 2 ou 3 semaines d'interruption de service, l'interface de addthis est de nouveau fonctionnelle avec son lot de nouveautés. Parmi celles-ci, l'ajout facile du widget de bookmarking au bas de chaque post. Bon social bookmarking !
Posted by jeteve 0 comments
Voici comment servir du contenu binaire avec mason (en mode download):
Posted by jeteve 2 comments
Sur l'aide de blogger, on trouve une documentation très bien conçue qui explique ça très bien. On peut mettre ce qu'on veut dans le code du widget. De l'html bien sur, et surtout du javascript pour rendre un contenu dynamiquement. C'est le cas des widgets offres d'emploi de ce blog ! (en bas de page). Pour avoir les vôtres, c'est par ici !
Posted by jeteve 1 comments
La dernière fois, nous avons abordé la composition de page par aggrégation de composants. Ce type de composition est particulierement bien adapté aux composants fonctionnels. Par exemple, une page d'accueil peut être composée des composants "Dernieres news", "Utilisateurs en lignes", "Bloc de publicite", "Edito", "Boite de connexion". Chacun de ces composants apporte une fonctionnalité a la page. Aujourd'hui, je vous propose d'aborder la mise en place d'un layout de page cohérent pour toutes les pages de votre site. Le problème: pouvoir ajouter facilement une page a votre site en gardant le layout general. La solution: utiliser la notion d'heritage de mason pour factoriser le layout global de votre site. L'héritage en mason. Mason permet de définir une chaine d'héritage entre composants. Le composant terminal de cette chaîne d'héritage doit être une page. En fait, la notion d'héritage en mason est un peu éloignée de la notion d'héritage classique que l'on connait dans les langages objets. Pour faire simple, il faudrait plutôt parler d'auto inclusion inversée automatique. Pour être plus clair, prenons un exemple basique: traditionnellement, une page est composée d'un layout global (incluant le header et le footer) et d'un contenu utile. Dans un système à base d'inclusion, on écrierait une page comme ceci:
Posted by jeteve 0 comments
Aujourd'hui c'est le week end et j'oublie un peu le code. J'ai donc choisi de vous parler de l'internationalisation et de la saine gestion des caractères exotiques. Ceci afin de pouvoir créer des sites qui acceptent et qui affichent n'importe quel caractère. Vous permettrez ainsi à vos visiteurs suédois, polonais, irakiens, tchèques ou japonais de sentir que votre site à été conçu aussi pour eux. Pour vos tests, vous pouvez vous référer à cette page. Pour clarifier les choses, commençons par quelques définitions.
Unicode définit de manière globale ce qu'est un caractère. Unicode définit un numéro, appellé codepoint pour chaque caractère possible sur la planète terre. Vous pouvez voir la liste de ces caractères ici. Par exemple le caractère 'k' est au codepoint 'U+006B' . Le caractère khmer 'dap roc' est situé au codepoint 'U+19FA' . Unicode est donc une manière globale de traiter les caractères de manière abstraite. Depuis perl 5.8, perl est compatible avec unicode. Ainsi pour faire faire une chaine composée des deux caractères cités en exemple, on peut utiliser la notation suivante:
UTF-8 est un encodage. C'est donc un moyen de représenter un caractère sous une forme binaire pour le stockage dans un fichier, la transmission à travers un réseau ou le stockage dans une base de données. Contrairement à l'encodage ISO-8859-1 (plus connu sous le nom latin 1), UTF-8 est capable d'encoder tout les caractères unicodes. Sans rentrer dans les détails, utf-8 encode chaque caractère sur 1 ou plusieurs octets. Beaucoup de problèmes d'encodage proviennent de la confusion entre la notion de chaine unicode et de chaine binaire d'octets encodant ces chaines unicodes. Pour reprendre notre exemple, le caractère 'k' est représenté en UTF-8 par l'octet '6B' et le caractère khmer est représenté par les 3 octets 'xE1xA7xBA' .
Beaucoup de confusions proviennent aussi du fait que pour les caractères purement ascii (comme dans le bon vieux temps), le codepoint unicode, l'encodage UTF-8 et l'encodage latin1 sont identiques. C'est pourquoi on ne se rend compte de ce genre de problème que lorsqu'il commence à y avoir des accents dans le système.
Cas pratique.Après ces quelques clarifications, construire un système compatible avec les caractères internationaux est beaucoup plus facile. Il suffit de cloisonner les responsabilités et d'assurer que la communication entre les composants du système se fait dans le bon encodage. Pour un exemple concret, nous allons prendre 3 composants: le navigateur web, perl (sous apache) et mysql. Pour chacun de ces composants, on va définir (et assurer) trois choses: l'encodage de sortie, l'encodage d'entrée et la représentation interne.
Grace à ces quelques techniques, vous êtes maintenant en mesure de construire un site compatible avec tout les caractères de la planète. Dans notre cas pratique, on voit que les choses sont nettes concernant le navigateur et perl. MySQL doit certainement être encore amélioré sur ce point. Pour d'autres bases de données, les choses sont plus claires. Par exemple en Postgresql, si on déclare une colonne comme UTF-8, la communication avec perl à travers le driver se fait de manière transparente.
Posted by jeteve 0 comments
Posted by jeteve 2 comments
En mason, il n'existe pas de difference entre la notion de page et de composant. Une page est simplement un composant qu'on utilise en bout de chaine de traitement mason pour le rendu du code html. Structurellement, un composant est compose d'html, de directives mason, de divers blocs de code perl et eventuellement de methodes et de sous composants. On nomme generalement les composants qui ne sont pas de pages en .mas. Par exemple, voici un composant qui rend la date courante:
Posted by jeteve 0 comments
Si vous utilisez Text::Scan pour scanner des documents contre un dictionnaire et que votre document provient d'un fichier, il faut faire un chomp de $document. En effet Text::Scan considère que la fin de chaîne est l'octet x00 et non pas l'octet x0A qui est la fin de fichier texte.
Posted by jeteve 0 comments
En general, on utilise la balise <% $expression %> pour afficher une valeur provenant d'une entrée utilisateur, ou bien d'une base de donnée. Si la valeur de $expression contient du code html, cela peut casser votre mise en page ou pire introduire une faille de sécurité XSS. Pour éviter cela, on peut utiliser le module perl HTML::Entities (fonction encode) pour toute les expressions affichées dans la page. Mason offre un mécanisme plus simple pour éviter cette situation. Si vous réglez la variable suivante dans votre config d'apache:
Posted by jeteve 0 comments
Une astuce pour afficher du code dans blogger sans (trop) se faire mal au cerveau.
Posted by jeteve 1 comments
Une fois apache2 installé, ainsi que mod_perl2 et apreq2 installes, vous devriez avoir dans vos fichiers de conf apache les éléments suivants:
Posted by jeteve 0 comments
Je commence ce blog pour pallier au manque d'informations sur mason sur le web français, comme en témoigne cette recherche google. Mason est a la base un moteur de template écrit en perl qui n'a en théorie rien a voir avec le web. On peut d'ailleurs l'utiliser en dehors d'un environnement web pour produire des mails ou encore vos fiches de cuisines préférées en postscript - si on est un vrai geek . On peut donc l'utiliser en environnement perl, apache+cgi , ou encore apache+mod_perl . Au niveau maturite et stabilite, mason n'as rien a envier aux technologies concurrentes; il est utilise pour les pages de amazon et pour de nombreux autre sites a fort trafic. Sur ce blog je vais donc parler principalement de mason dans un environnement web. Le tout sur un mode didactique.
Posted by jeteve 1 comments