Mind...

Aller au contenu | Aller au menu | Aller à la recherche

lundi 6 avril 2009

Yet another policy daemon for postfix

MadCoder announced it months ago, he has been working on the pfixtools. The second tool of the postfix-related toolsuite is named postlicyd.

postlicyd is a versatile policy daemon written in C. It does greylisting (far faster than postgrey), it performs R(H)BL access (both locally directly from rbldns zone files and remotely by using DNS), ... So, it can be used as a replacement for whitelister and postgrey with a significant improvement of the performances.

On the same server (with the same email trafic), postlicyd is more than 20 times faster than postgrey:

  • Process load: postgrey ~20% CPU, postlicyd less than 1% CPU
  • Data base cleanup for 1M entries: postgrey 20 minutes, postlicyd 40 seconds

Moreover, it is aware of the 'session' feature of the POLICY protocol. Thus, you can write complex configurations and define policies that do not depend on a single SMTP command (like RCPT) but on the whole SMTP transaction...

More informations: http://pfixtools.mymind.fr

jeudi 30 août 2007

Compter les fichiers

C'est un peu la suite de mon post "Outils pratiques" où je donnais deux scripts permettant de rendre les commandes SVN plus conviviales. Encore une fois, je réinvente sans doute la roue (des outils équivalents doivent déjà exister... sans doute en mieux), mais je pense que chercher ce genre d'outils sur internet m'aurait pris plus de temps que ce qu'il m'a fallu pour le développer.

En ce moment je manipule des fichiers, beaucoup de fichiers (et même, beaucoup de gros fichiers), que j'ouvre, rouvre, et ferme et puis referme. Et à force d'ouvrir, on oublie parfois de refermer, et là, c'est comme une fuite de mémoire, sauf que le nombre limite de fichiers ouverts est beaucoup plus rapidement atteinte que la limite de mémoire... dans la configuration de base sur un linux, un programme n'a le droit qu'à 1024 descripteurs de fichiers. D'où mon problème : comment traquer les "file-handle leaks" ?

Lire la suite...

jeudi 16 août 2007

Templates en C

En C++, il existe un mécanisme extrêmement pratique pour généré du code générique : les templates. Une fonction templatée est une fonction dont le code comporte un trou qui sera remplacé à la compilation par le nom d'un type, ou une valeur... Par exemple :

template <class T> 
T read(const char *buffer) 
{
    T val;
    memcpy(&val, buffer, sizeof(T));
    return val;
} 

Cette fonction lit un objet de type T sur un buffer. L'intérêt de cette fonction est très compréhensible : quel que soit le type qu'on fournit à la fonction, elle va fonctionner, en adaptant la taille à lire au type. C'est donc beaucoup plus rapide que d'écrire une fonction pour chaque type... et l'utilisation est également très simple :

read<int>(const char* buffer) // lit un entier sur le buffer
read<double>(const char* buffer) // lit un double sur le buffer
read<MaClass>(const char* buffer) // lit un objet de type "MaClass"

Mais cette syntaxe n'est qu'un sucre syntaxique, car en fait, on peut également faire des templates en C...

Lire la suite...

mercredi 15 août 2007

Comprendre du code

J'ai tenté cet après-midi une petite expérience sur IRC. J'ai posté 3 lignes de code en demandant "que font ces trois lignes". Après quelques minutes (sans doute trop peu), j'ai donné la solution car personne n'avait vraiment trouvé. En effet, même si on réussi facilement à lire le code et à reconstituer la suite d'opération qu'il génère, il est très difficile de vraiment comprendre ce qu'il fait, d'imaginer son application dans un contexte et d'en déduire son usage.

Juste pour continuer à m'amuser, et pour amuser ceux qui se perdraient ici, voici le code en question.

Lire la suite...

mardi 5 juin 2007

Khtml2png 2.6.5 est sorti

Après 3 mois d'un travail pas très intensif, une nouvelle version de khtml2png est disponible. Cette version est partie du fait que les versions précédentes du programme ont parfois du mal à gérer les grandes captures d'écran (en fait, des bugs peuvent apparaître dès que la taille de la zone à capturer est plus grande que la taille affichable).

Donc, rapidement après la sortie de la 2.6.0, j'avais envoyé un correctif (en fait une réécriture du moteur de rendu) au développeur de khtml2png. Malheureusement, ce correctif ne fonctionnait pas correctement chez lui. Donc, pendant 3 mois, j'ai fait du débuggage à distance : j'envoie une version modifiée (1 ou 2 lignes à chaque fois), j'attends 2 ou 3 semaine une réponse, etc... Du développement efficace !

Bon, toujours est-il que maintenant, la version 2.6.5 fonctionne à la fois chez moi (à la fois Debian + xvnc et sur MacOS X), et chez Hauke (sur Debian également, mais avec des réglages différents).

Le Changelog annonce :

fix: Now produces screenshots on my Debian Etch system under KDE 3.5.5 without glitches.
fix: Maybe better working on other systems too. Please test.

J'aimerais y rajouter quelques points :

  • meilleur moteur de rendu (qui ne scroll plus, mais déplace la fenêtre pour s'affranchir de certains bugs de KDE et/ou Qt)
  • meilleure détection de la taille de la capture à réaliser
  • possibilité de choisir le comportement de khtml2png face aux redirections, au javascript, au java, au flash... via la ligne de commande
  • la détection automatique de la dimension par un id devient compatible avec le format utilisé dans les version <= 2.5

Comme d'habitude, vous pouvez télécharger ma dernière version du programme.

samedi 2 juin 2007

Spaces

Comme un certain nombre de personnes le sait déjà, j'ai repris le développement de VirtueDesktops depuis quelques semaines. Dans un premier temps je n'avais pas regardé le fonctionnement bas niveau du programme, mais la semaine dernière j'ai commencé à rechercher dans les sources "Comment Virtue fait-il pour cacher les fenêtres, faire les transitions etc... ?".

Lire la suite...

samedi 26 mai 2007

Et si on oubliait les bases ?

MacOS X est un Unix... compatible POSIX. Voilà ce qu'un certain nombre de personnes semblent oublier assez fréquemment. C'est assez dommage quand ces personnes programment pour MacOS, on se retrouve parfois avec du code complexe pour réécrire des fonctions POSIX (en moins bien ?).

Lire la suite...

vendredi 18 mai 2007

VirtueDesktops revient...

Voici plus ou moins trois mois que j'ai découvert synergy, c'est vraiment très agréable de pouvoir contrôler les deux ordinateurs sans changer de clavier/souris continuellement. Seul problème, c'est que sur la machine qui héberge le serveur synergy, VirtueDesktops, un excellent gestionnaire de bureaux virtuels pour MacOS, n'arrête pas de crasher. J'avais donc posté un bugreport sur le trac de Virtue... malheureusement pour diverses raisons, Tony Arnold a décidé peu après de stopper le développement de Virtue.

Lire la suite...

samedi 21 avril 2007

Stats

Depuis le début, j'ai installé awstats pour avoir des statistiques sur l'utilisation de mon serveur web.

J'ai choisi awstats un peu par hasard :

  • on avait utilisé webalizer au BR et je n'étais pas spécialement convaincu par le résultat obtenu : beaucoup de chiffres, graphiquement peu attirant et d'ergonomie d'utilisation assez mauvaise.
  • à Polytechnique.org par contre, on utilise awstats, même si je n'ai pas fait le bilant complet des fonctionnalités, il a au moins l'avantage d'être lisible et agréable à l'oeil.

Donc je l'ai installé, personnalisé... en particuliers j'ai ajouté des browsers (principalement des syndicateurs) et robots, amélioré les spécifications de certains OS, et j'avais également ajouté à l'outil de configuration le support de MAMP. J'ai envoyé le patch au mainteneur du projet. Aujourd'hui je fais un cvs up sur mon installation du projet et je vois :

P docs/awstats_faq.html
RCS file: /cvsroot/awstats/awstats/tools/awstats_configure.pl,v
retrieving revision 1.6
retrieving revision 1.7
Merging differences between 1.6 and 1.7 into awstats_configure.pl
M tools/awstats_configure.pl
M wwwroot/cgi-bin/awstats.model.conf
RCS file: /cvsroot/awstats/awstats/wwwroot/cgi-bin/lib/browsers.pm,v
retrieving revision 1.54
retrieving revision 1.55
Merging differences between 1.54 and 1.55 into browsers.pm
M wwwroot/cgi-bin/lib/browsers.pm
RCS file: /cvsroot/awstats/awstats/wwwroot/cgi-bin/lib/operating_systems.pm,v
retrieving revision 1.20
retrieving revision 1.21
Merging differences between 1.20 and 1.21 into operating_systems.pm
M wwwroot/cgi-bin/lib/operating_systems.pm
RCS file: /cvsroot/awstats/awstats/wwwroot/cgi-bin/lib/robots.pm,v
retrieving revision 1.44
retrieving revision 1.45
Merging differences between 1.44 and 1.45 into robots.pm
M wwwroot/cgi-bin/lib/robots.pm

Bizarrement, tous les fichiers que j'ai modifié ont été modifié également sur la CVS... donc je suis allé faire un tour sur le webvc du projet, et sur les fichiers correspondants, il y a le commentaire Patch florent bruneau.

Voilà, une bonne surprise ! Je suis juste un peu déçu de l'avoir vu uniquement sur un update de cvs.

mercredi 4 avril 2007

Trous de mémoire

Quand j'utilise mon ordinateur, j'aime bien que son fonctionnement soit fluide. C'est à dire que lorsque je passe d'une application à l'autre (ce qui arrive régulièrement), je ne veux pas qu'il y ait 10 secondes de latence parce que ma machine "swap". Malheureusement, je ne connais aucun OS sur lequel ça ne swap pas. Par exemple, sur mon portable à l'instant même j'ai 2Go de swap (donc 700Mo utilisés) sachant qu'à côté j'ai 600Mo de RAM utilisés (et les quelques 400Mo de RAM qui restent servent de cache disque...).

Comment un ordinateur sur lequel tourne un navigateur web, un client IRC et un client mail peut avoir autant de RAM occupée ???

Lire la suite...

- page 1 de 2

Your local checkout of plat/al has been disabled for security reasons. It appears that several critical flaws known in the plat/al codebase have not been patched in your working copy. These flaws are listed below:
  • 2009-10-19 e10bc2ef Prevents auth-groupex from leaking data to third-party attackers.
  • 2008-12-21 a25cdc91 Fixes a SQL injection in geoloc.inc.php.
Please have a look at the SECURITY and core/SECURITY files in any recent plat/al checkout to get more details on which commits did fix those flaws.

Note: you can re-enable your working copy by typing make in the root directory of your checkout (usually in ~/dev/platal).