Archive

Archive for January, 2004

Comment surcharger un opérateur en Perl

January 23rd, 2004

Jusqu’à il y a 1 heure, je croyais qu’une telle alchimie n’était pas possible en Perl (seul C++ le faisait dans mon petit esprit de jeunot) mais il est bel et bien possible de surcharger un opérateur en Perl.

Le pire, et ça va vous surprendre, c’est que ça n’est même pas diffcile !

La déclaration de la surcharge se fait grâce à l’utilisation d’un use particulier : “use overload” (l. 21 dans l’exemple) qui permet d’assigner une fonction à un opérateur.

Il y a juste quelques conditions à respecter pour pouvoir faire ce petit tour de magie :

  • être en contexte d’objet, ainsi on surcharge l’opérateur appliqué à l’objet
  • la fonction qui est mappée sur l’opérateur surchargé doit retourner l’objet modifié

Voici un petit exemple pour illustrer ce propos. Nous allons surcharger l’opérateur + appliqué à notre objet.

 1 #!/usr/bin/perl
 2 use strict;
 3 package classe;
 4
 5 sub new
 6 {
 7         my ($class,$data) = (@_);
 8         my $self = {
 9                 valeur  =>      0
10         };
11         bless ($self,$class);
12         return $self;
13 }
14
15 sub valeur
16 {
17         my $self = shift;
18         return $self->{valeur};
19 }
20
21 use overload  (
22         '+'     => 'ma_fonction_qui_fait_plus'
23 );
24
25 sub ma_fonction_qui_fait_plus
26 {
27         my $self = shift;
28
29         my ($value) = @_;
30
31         print "vous faite un ajout de $value
";
32         $self->{valeur} += $value;
33         return $self;
34 }
35
36 # exemple d'utilisation
37 my $objet = new classe();
38 print "valeur : " . $objet->valeur() . "
";
39
40 $objet++;
41 print "valeur : " . $objet->valeur() . "
";
42 exit;

Ce qui nous donne l’exécution suivante :

$ perl /tmp/test.pl
valeur : 0
vous faite un ajout de 1
valeur : 1
$

General

Concours de poèmes en Perl

January 23rd, 2004

Un concours de poèmes est lancé par les gens d’ActiveState.
Le but du jeu du Perl Haiku Poetry Contest est d’écrire un poème en Perl.
La date limite d’envoi de votre poème est fixée au 8 février 2004. Les gagnants seront seléctionnés le 10.

use strict;

map {
    print " " x (rand(10));
    foreach
        my $c (split(//)) {
            print $c . " ";
        };
        print "
";
    }
    qw(Et le perl est une mer où l'amer n'est qu'un leure);

General

spamprobe 0.9g2 est sorti

January 20th, 2004

La dernière version de spamprobe présente un avantage non négligeable par rapport aux précédentes.

Les scores attribués aux mails ne sont plus des booléens (1.000 ou 0.000) mais bel est bien des probabilités comprises entre 0.0000 et 1.0000.

L’avantage qui en découle est que l’on peut désormais filtrer plus intelligemment les mails en trois catégories :

  1. les spams évidents : score >= 0.9997 taggué ‘SPAM’
  2. les spams probables : score >= 0.4 et < 0.5 taggué ‘GOOD’
  3. les spams a priori : score autre taggué ‘SPAM’

En procmail cela se dit comme suit :


:0 E:
* ^X-SpamProbe: SPAM 0.999[[789]]
spams/mustbe_spam

:0 E:
* ^X-SpamProbe: GOOD 0.[[45]]
spams/couldbe_spam

:0 E:
* ^X-SpamProbe: SPAM
spams/looks_spam

L’intérêt d’un tel filtrage est de pouvoir contrôller plus efficacement l’évolution des mailboxes de spams.
On ira voir fréquemment le contenu de ’spams/coulbe_spam’ qui a priori ne devrait pas grossir trop vite.

Cela devrait réduire considérablement les chances de rater des faux positifs.

General

Copyleft, le concept souligné par CourrierInternational

January 19th, 2004

Je vous coneille vivement d’acheter le numéro de cette semaine de courrier international. Le dossier est consacré à l’étude des concepts de droit d’auteur et de copyright. On y trouvera notamment un article où il est question de publication de livres sous “Copyleft”, licence, vous le savez tous ici, créée par Richard Stallman. Une lecture saine et intéressante pour ne pas rester coincé devant son écran en permanence !

General

Tu m’étonnes que personne ne poste !

January 15th, 2004

Merci Rached de m’avoir signalé ce satané bug qui empéchait tout bonnement les quelques visiteurs de ce site de poster des commentaires… C’est tellement important les commentaires !
Enfin, c’est désormais de l’histoire ancienne (très sensible le code de Poseidon tout de même).

General

colorize.pl, exellente idée !

January 13th, 2004

“Pourquoi n’y ais-je pas pensé plus tôt ?”

C’est la seule question qui m’est venue à l’idée quand j’ai vu ce petit script aux objectifs plus que nobles ;)

Je m’en vais essayer ça tout de suite !

General

Une alternative a SpamAssassin

January 13th, 2004

Je cherchais depuis quelques temps un programme unix qui puisse faire le travail de SpamAssassin (analyser les mails reçus et déterminer si oui ou non il s’agit de spam), sans pour autant monter la charge de la machine à des seuils peu fréquentables.

En farfouillant de ci de là, je tombe sur le fichier .muttrc de ce cher Tom Gilbert qui fait allusion à son .procmailrc lequel utilise un certain spamprobe

Après quelques analyses et autres tests sur mon [postfix + procmail + fetchmail|petit système] de mails, il s’avère que spamprobe est excellent.

La dernière version de spamprobe implémente même l’algorythme de Gary Robinson expliqué dans ce document.

Ce filtre implémente uniquement le concept de filtre baysien et ne consome donc pas une énormité de ressource lorsqu’il faut analyser un mail. Sa syntaxe reste simple pour qui est familier avec les outils unix :

dire qu’un mail est un spam :

cat mail | spamprobe spam

dire qu’un mail n’est pas un spam :

cat mail | spamprobe good

demander a spamprobe si le mail est un spam ou non :

cat mail | spamprobe receive

D’après les utilisateurs de spamprobe, on obtient des résultats satisfaisant lorsque l’on a nourri la bête avec une centaine de mails.

Il est possible, une fois spamprobe bien éduqué, de filtrer automatiquement chaque mail en fonction de son état grâce à procmail :


# on demande a spamprobe de regarder s'il s'agit de spam
:0
SCORE=| /usr/bin/spamprobe receive

:0 wf
| formail -I "X-SpamProbe: $SCORE"

# si c'est du spam on le met à la poubelle a spam
:0 a
* ^X-SpamProbe: SPAM
spam

General

Le Mur de l’info n’est pas loin !

January 13th, 2004

Un mail reçu aujourd’hui au taf, je fais passer … :

Vous avez tous entendu parler de la LEN, projet de loi débile au possible
qui veut faire faire la police par les hébergeurs, demander au FAI de
filtrer le net aux frontrières (oui, oui, comme en chine !), supprimer la
notion de correspondance privée pour les mails (pratique pour les
employeurs, les majors et les autres…)
La nouveauté du jour c’est que l’AFA (Association des Fournisseurs d’Accès
et de Services Internet) menace tout simplement de supprimer l’ensemble des
pages perso, salons, forums qu’elle gère
Donc, comme je suis sûr que vous avez tous un site perso ou au pire que vous
lisez tout plein d’infos de plein de gens qui acceptent de partager sur le
net, je vous invite à lire et participer à la pétition de l’AFA
http://www.afa-france.com/actions/petition.php

Beaucoup plus politique, mais néanmoins très riche, il y a aussi bien sûr la
ligue odebi.
Elle organise le boycothon (s’engager à n’acheter aucun produit des majors
tant que la loi ne change pas)
http://www.odebi.org/boycothon/

Voila, c’était la pause syndicale :-)

General

Photos de Mars

January 7th, 2004

Devinez quoi, le sol de Mars est rouge. En voilà un scoop !

J’aime partriculièrement cette photo qui laisse assez réveur, on imagine facilement un petit martien se mettant devant l’objectif et faisant un joli doigt à la camera .. ;)

Désolé, j’arrête…

alt="photo de mars"
/>

General

Tunneling SSH

January 7th, 2004

J’ai récemment converti mon vieux (tout vieux) portable en firewall. Cette petite révolution de mon chez moi, m’a confronté à un nouveau problème : c’est très pénible de devoir se connecter sur le firewall avant de pouvoir accèder aux machines qui sont derrière.

Je ne vous parle pas des transferts de fichiers qui doivent se faire en deux étapes : se connecter sur le firewall et copier les fichiers distant du réseau local sur le firewall, puis copier les fichiers du firewall vers notre point d’accès… très pénible à la longue.

Voici un dirty howto pour savoir “creuser” des tunnels SSH vers votre maison numérique.

General