mercredi 28 novembre 2007

Facebook sur la voie de l'internationalisation ?

Pour l'instant, ce n'est pas encore facebook lui même, mais l'application FunWall (slide.com).

On voit apparaitre ça et la quelques mots en français, comme 'choose an image in mes fichiers'.

Je ne sais pas ce que vous en pensez, mais facebook en langue locale, personnellement ça va me faire bizarre. Comment fera-t-on pour comprendre les blagues de nos amis d'autres pays ? Tiens, je vais créer un groupe 'keep facebook english' !!


Powered by ScribeFire.

Quick and dirty encryptage et decryptage

Une fois n'est pas coutume, un peu de code pour encrypter/decrypter des chaines simples rapidement.

  1. sub simplecrypt{
  2. my ($string , $key ) = @_ ;
  3. my $mask = substr($key x length($string), 0 , length($string)) ;
  4. my $crypt = $string ^ $mask ;
  5. return unpack("H*" , $string ^ $mask );
  6. }
  7. sub simpledecrypt{
  8. my ($string , $key ) = @_ ;
  9. my $crypted = pack("H*", $string );
  10. my $mask = substr($key x length($crypted) , 0 , length($crypted));
  11. return $crypted ^ $mask ;
  12. }
Avantage: vraiment simple (base sur un XOR) et surtout independant de tout module supplementaire.

Inconvenient: vraiment trop simple. Le codage XOR n'est pas vraiment connu pour sa securite, impossible d'encrypter des chaines unicode.

Conclusion: A utiliser pour des cryptages de base d'identifiants non confidentiels. Par exemple, si vous faite des urls comme celle ci:

  1. http://www.myserver/article/77.html
et que vous ne voulez pas que vos visiteurs puissent essayer 76, 75 ...

Vous pouvez encrypter le numero avec cette methode.


mercredi 7 novembre 2007

On demande un développeur mason sur paris

C'est assez rare pour le signaler: la société apartia cherche un développeur mason pour bosser sur un gros projet déjà installé chez un client.

Une petite citation de l'annonce parue:

==============================================
I know this is not a jobs list but after seeing the "UK Developers" it
seemed not entirely out of place to say: I am looking for a Mason
developer in Paris (France) to work on a large modular application
already in production at a client's. Pay is good (ie: comensurate with
the rarity of Mason devs). Please contact me at ldm@apartia.fr

Cheers and hail HTML::Mason
=============================================

Si vous êtes dans le coin et que mason n'a plus de secrets pour vous, profitez en !



Powered by ScribeFire.

lundi 15 octobre 2007

Du nouveau chez addthis

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 !

Servir du contenu binaire

Voici comment servir du contenu binaire avec mason (en mode download):

  1. %# file.html
  2. <%init>
  3. use Apache2::Const qw(OK);
  4. my $content = ... ; # Votre contenu binaire
  5. my $mimeType = 'application/pdf' ; # par exemple
  6. my $fileName = 'rapport.pdf' ;
  7. $m->clear_buffer; # On vide le buffer de tout contenu precedant
  8. $r->content_type($mimeType) ; # Reglage du type mime
  9. $r->headers_out->add('Content-Disposition' => "attachment; filename=$fileName");
  10. # Nom du fichier
  11. binmode STDOUT ; #Sortie purement binaire
  12. print STDOUT $content; # Les donnee
  13. $m->abort(OK); # C'est fini
  14. </%init>
Pour afficher le contenu binaire en ligne (par exemple dans le cas d'une image, ou pour provoquer l'affichage d'un pdf par le plugin du navigateur), il suffit de supprimer la ligne 9. Si ca perturbe vos visiteurs d'avoir une ressource en .html qui sert un pdf, vous pouvez toujours appeller votre fichier file.pdf , et ajouter la chose suivante dans la conf d'apache :
  1. <LocationMatch "/file.pdf$">
  2. SetHandler perl-script
  3. PerlHandler HTML::Mason::ApacheHandler
  4. </LocationMatch>
On spécifie ainsi a apache qu'il doit laisser mason s'occuper de la ressource. C'est tout pour aujourd'hui ! Voir la liste des types mime.

vendredi 12 octobre 2007

Faire un widget pour blogger

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 !

mardi 2 octobre 2007

Composition de page par heritage

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:

  1. INCLUDE header
  2. Contenu utile
  3. INCLUDE footer
Avec les fichiers (ou les scripts) header et footer écrits de façon séparée. Cette approche est possible en mason, mais elle n'est pas optimale. En mason, on fait un composant "de base" contenant le layout global de toutes les pages:
  1. %# layout.mas
  2. <html>
  3. <head>
  4. ...
  5. </head>
  6. <body>
  7. ...
  8. % $m->call_next()
  9. ...
  10. </body>
  11. </html>
A la ligne 8, le $m->call_next() permet à mason de continuer dans la chaine d'héritage. Lorsqu'on fait une nouvelle page, il suffit de préciser qu'elle hérite de layout.mas pour que son rendu inclue automatiquement le layout:
  1. %# page.html
  2. <flags>
  3. inherit => '/layout.mas'
  4. </flags>
  5. <p>
  6. Contenu
  7. </p>
Lorsqu'on interroge l'url http://yourserver/page.html , mason va automatiquement inclure le contenu de page.html dans le layout de layout.mas. En ligne 3, on spécifie de quel composant hérite la page. Par défaut, mason assume que toutes les pages héritent d'un composant particulier: autohandler . C'est donc plutôt dans un composant nommé autohandler qu'on va définir le layout global de la page plutôt que dans un layout.mas. De cette façon, on n'a pas besoin de spécifier de quel composant héritent nos pages:
  1. %# autohandler
  2. <html>
  3. <head>
  4. ...
  5. </head>
  6. <body>
  7. ...
  8. % $m->call_next()
  9. ...
  10. </body>
  11. </html>
Ensuite, plus besoin de spéficier l'héritage:
  1. %# page.html
  2. <p>
  3. Contenu
  4. </p>
On voit que de cette manière, ajouter une page qui hérite du layout global est facile. Il suffit de faire une page avec le contenu utile, et elle héritera automatiquement du composant autohandler. La prochaine fois, je vous parlerai des méthodes et de leur comportement dans la chaîne d'héritage. Référence : l'héritage dans le mason book.