my blog

vuntz.net

Entries feed

Sunday 4 June 2006

Mangez du spam avec vos commentaires

Depuis que je me suis attaqué au problème du spam sur mes rétroliens, je n'ai plus aucun spam de rétrolien qui arrive à passer sur ce journal. Mais des spams de commentaire commençaient à être pénibles. J'ai donc ajouté deux petites modifications violentes, sans trop réfléchir :

  • la première avait été trouvée sur ce billet et l'idée est assez simple. J'ai légèrement divergé, en modifiant le contenu du commentaire HTML et en ne modifiant pas le code de DotClear (voir ci-dessous).
  • la seconde modifiction est un captcha tout bête. Je n'ai même pas cherché à regarder s'il y avait un greffon qui implémentait cette fonctionnalité (ce qui est le cas).

À noter qu'on peut créer un fichier postcon.php dans le thème utilisé pour exécuter du code avant que le commentaire soit accepté par DotClear (ou traité par spamplemousse). La mini-astuce consiste à donner une valeur à la variable $_POST['preview'] lorsque le commentaire ne passe pas les épreuves (le captcha et le commentaire HTML). Cela permet de bloquer le commentaire temporairement (comme s'il s'agissait d'une prévisualisation) et évite d'avoir à modifier le code de DotClear. Concrètement, mon postcon.php contient :

if ($mode == 'post' && $post_id) {
	$news = $blog->getPostByID($post_id);
	if (!$news->isEmpty() && $news->openComment() && !empty($_POST['redir']) && empty($_POST['preview'])) {
		if ($_POST['c_anti'] != "antipasti") {
			$form_err = __('Please fill the <q>antipasti</q> entry.');
			$_POST['preview'] = "preview";
		}
		if (isset ($_POST['c_contre'])) {
			$form_err = __('The HTML parser of your browser is broken.');
			$_POST['preview'] = "preview";
		}
	}
	unset($news);
}

Et après cinq minutes pour modifier ce qu'il fallait, j'ai pu profiter d'un calme relatif. Je précise relatif car je dois toujours penser à modérer ma file spamplemousse de temps en temps...

Saturday 3 June 2006

Do you speak english?

Depuis un certain temps, certaines pages de mon site sont disponibles en anglais (bon, il faut que je traduise celles qui ne le sont pas quand j'aurais deux minutes). Il y avait tout de même deux points qui m'embêtaient.

Le premier est de permettre l'accès aux deux langues par un petit lien. Mais comment structure le site ? Est-ce mieux d'avoir http://www.vuntz.net/en/page/, http://www.vuntz.net/page/en/, http://www.vuntz.net/page/index.en.php, http://www.vuntz.net/page/index.php.en ? Le choix est important car il est préférable de toujours garder les mêmes adresses. J'aurais tendance à pencher vers http://www.vuntz.net/en/page/ mais cela ne colle pas trop avec la structure des fichiers. Et je traîne donc des pieds...

Le second point était que toutes les pages de mon journal étaient en français car la version actuelle de DotClear ne permet pas d'adapter la langue de la page à la personne qui la regarde. Après avoir eu droit à une ou deux petites remarques (but what does 'Merci d'écrire dans un Français correct et lisible' mean?), je me suis attelé à la tâche. Comme tout le monde devrait le savoir, la négociation de la langue utilisée a lieu par l'intermédiaire de HTTP_ACCEPT_LANGUAGE. Avec une fonction toute simple en PHP, on peut récupérer la valeur, et en fonction de celle-ci utiliser un fichier au lieu d'un autre.

Concrètement, mon fichier template.php contient :

<?php
require_once ("i18n.php");
$zen_lang = get_language ();
if ($zen_lang == "french") {
	include ("template.fr.php");
} else {
	include ("template.en.php");
}
?>

Il suffit de faire de même avec tous les autres fichiers. La fonction get_language() étant définie comme ceci :

// Taken from: http://www-128.ibm.com/developerworks/web/library/wa-apac.html

function get_language()
{
  global $HTTP_ACCEPT_LANGUAGE;
  $language_pages = array(
                      "en"=>"english",
                      "fr"=>"french"
                    );
  $language_default = "english";
  $language_nofound = "english";
  // get preferred languages in the "Accept-Language" header
  if($HTTP_ACCEPT_LANGUAGE == "")
  {
    // no preference set
    return $language_default;
  }
  // form an array of preferred languages
  $accept_language = str_replace(" ", "", $HTTP_ACCEPT_LANGUAGE);
  $languages = explode(",", $accept_language);
  // check for a recognised language
  for($i = 0; $i < sizeof($languages); $i++)
  {
    $pref = explode(";", $languages[$i]);
    if($language_pages[$pref[0]] != "")
    {
      // found a preferred language
      return $language_pages[$pref[0]];
    }
  }
  return $language_nofound;
}

Et voilà, le tour est joué. Il reste quelques petits problèmes (les dates sont en français, les greffons affichent aussi des chaînes en français, etc.), mais rien de grave.

Monday 3 October 2005

Petit à petit, l'oiseau fait son nid

Après avoir longuement hésité, je me suis dit que rester dans le non-choix n'était pas une option. J'ai donc choisi un hébergeur, en l'occurence Dreamhost, et je commence à le tester (depuis plusieurs jours, en fait).

L'argument qui m'a définitivement convaincu d'aller chez eux n'est pas tous les services qu'ils offrent (ce qui aurait déjà été suffisant, soit dit en passant), mais une lecture attentive du bandeau d'actualités sur leur page d'accueil. C'est un petit bandeau qui défile ligne par ligne. À l'avant-dernière ligne, on peut lire Smart People Like Us!. Ce qui est déjà bon signe ;-) Mais la dernière ligne est forte, très forte : Help! I'm trapped in a sales-tagline-writing factory!

J'ai pu tester leur support à quelques reprises (j'ai des besoins très spécifiques ;-)) et ils sont plutôt réactifs (si l'on tient compte du décalage horaire), ce qui est agréable. Et alors que je suis à peine arrivé chez eux, la limite pour le nombre de domaines hébergés est supprimée : alors que je ne pouvais héberger que trois domaines auparavant, maintenant la quantité n'a plus d'importante. Impressionnant !

J'atteins quand même quelques limites. La plus importante est que je souhaite garder le contrôle de la configuration DNS de vuntz.net pour le moment. Et ce n'est pas toujours facile car normalement, il faut les laisser contrôler le DNS. Mais avec un peu de ruse, on s'en sort plutôt bien...

J'ai commencé par migrer mon serveur Jabber chez eux, avec quelques difficultés car je voulais garder mes contacts et je n'avais pas encore compris toute la finesse de leur configuration DNS, mais finalement tout a été arrangé. Puis j'ai migré quelques sites que j'hébergeais, dont Planet Ensigogne, sans aucun problème. Et ce soir, je viens de migrer mon site web chez eux. C'est un grand pas pour moi. Si, si, je vous assure :-)

L'étape suivante sera de déterminer comment je vais migrer mes mails. J'hésite encore sur la bonne méthode pour cela... Et en plus, c'est quelque chose de sensible donc je fais très attention. Puis viendront les autres services que j'héberge (notamment des serveurs MX secondaires).

C'est ainsi que je continue mon petit bout de chemin vers la simplification : un jour, je n'aurai plus de serveur à maintenir chez moi.

Saturday 11 June 2005

Bidouilles de week-end

Histoire de faire autre chose que d'envoyer plein de mails, je me suis dit qu'aujourd'hui, j'allais tenter de faire des choses utiles.

Cela fait quelque temps que j'utilise rss2email pour lire tous les fils RSS qui m'intéressent, mais je n'étais pas totalement satisfait pour différentes petites raisons (notamment la gestion des images, inexistante). N'ayant pas Ruby et étant têtu, je n'ai pas essayé Feed2Imap (désolé Lucas), et je me suis tourné vers Newspipe. Cela a l'air d'être pas mal (pour l'instant). On va voir si je continue de l'utiliser...

Et puis je viens de mettre à jour DotClear vers la version 1.2.1. Rien de très excitant, mais il fallait le faire. Bon, j'exagère car en fait, j'aime bien la nouvelle macro qui permet de faire un lien vers un autre billet :-) Ah, j'oubliais qu'il y a un bout de javascript qui me demande tout le temps si je veux vraiment quitter la page du billet que je suis en train d'éditer lorsque je fais Visualiser, et même Enregistrer... Bah. Suis-je le seul à qui cela arrive ?

Thursday 10 March 2005

Ceci n'est pas une poubelle

Visiblement, mon billet sur les publicités d'Actimel a beaucoup de succès. Ça en arrive au point qu'il y a des commentaires pas terribles qui y sont postés. Je viens d'en mettre certains hors ligne. Je veux bien être gentil, mais il ne faut pas pousser. Les belles vulgarités ont une place sur Internet, mais pas sur mon site.

À ceux qui s'écriront « oh, censure ! », je rappelle qu'il est tout à fait possible de s'exprimer librement dans les commentaires du moment que c'est du Français correct et que cela n'attaque personne de manière violente. Sinon, tout le monde peut se créer un site sur Internet pour dire toutes les bêtises imaginables (et plus). C'est comme à la maison : il faut un minimum de tenue ici aussi.

- page 1 of 5

by Vincent