Lors de mon précédent billet j'avais présenté mon projet de réaliser moi même un wiki dédié aux tortues. Avec l'avancement du projet, les premiers tests qui montrent que je suis sur la bonne voix, les problèmes sur lesquels je bloque, etc. De nombreuses questions et idées germent, c'est l'occasion d'en parler.
A la recherche du diff parfait
Que serait un wiki sans diff ? Pas grand chose étant donné que comparer 2 versions d'un document deviendrait très vite laborieux, des petits malins en profiteraient pour y semer la pagaille. Cette difficulté m'a donc poussée à faire un choix :
- Coder mon propre diff : Si c'est quelque chose intéressant à coder, il n'est pas non plus nécessaire de réinventer la roue étant donné qu'il existe d'autres solutions. J'ai très vite abandonné cette idée.
- Utiliser le paquet PEAR Text_Diff : Disponible ici, il permet d'utiliser la fonction native diff de Linux. Cette voix me séduit particulièrement mais cela me pose le problème d'installer un paquet pour PHP5, chose que je ne sais pas encore faire. De plus il faut un serveur dédié mais ça ce n'est pas un problème rédhibitoire.
- Utiliser un script PHP existant : les scripts de wiki existants sur le marché ont tous un système diff intégré, il ne reste plus qu'à faire son choix. Très vite j'ai trouvé 2 scripts qui m'ont semblé être adapté à mon utilisation, celui de Mediawiki (utilisé par Wikipédia et Dokuwiki) mais qui est une usine à gaz. Et l'autre est celui de Wordpress car ce CMS est livré avec un système de diff pour comparer 2 versions différentes d'un billet. Entre les 2 mon coeur balance, celui de Wodpress étant favori.
Le choix du diff étant presque réglé, d'autres fonctionnalités apparaissent à l'horizon. Plus particulièrement les liens entre les différentes pages pour éviter les pages orphelines et voir comment les pages sont reliées entre elles. Le problème des pages orphelines est en parti corrigé par le fait que chaque page de wiki créé automatiquement un topic dans le forum (sauf pour certains types de pages mais j'y reviendrai plus tard). Et pour détecter les liens pointant vers d'autres pages, il n'y a rien de mieux que les Regex.
Le titre des pages : choix primordial
Tous les wikis reposent sur le même principe, Un titre correspond à une page et une seule, les doublons, abréviations, raccourcis, surnoms, noms non officiels, etc sont autant de page qui doivent exister mais qui doivent rediriger vers la page que l'on souhaite, d'où l'idée de créer des pages de redirection. Par exemple la page Tortue d'hermann redirigera automatiquement vers Testudo hermanni, bref faire en sorte que le débutant et l'expert retombent tous les 2 sur la même page. Cela permettra aussi lors du changement du nom de la page de mettre un lien pour rediriger les anciens liens.
Redistribuer le code : une idée naissante
C'est une idée à laquelle je n'ai pas encore trop réfléchi. Car si un code source lisible par tous offre bien des avantages, il y a aussi pa smal d'inconvénients qui sont à prendre en compte.
Les avantages : l'ouverture d'un code source permet de détecter plus facilement des bugs, de discuter sur les performances et les capacités, et d'améliorer plus rapidement le wiki. Cela permet aussi d'intéresser des développeurs susceptibles d'utiliser ce script et donc d'y ajouter des fonctionnalités, voire en faire un fork.
Les inconvénients : ils sont à mon goût assez nombreux. Tout d'abord il y a le problème de la sécurité, étant donné que le wiki sera mis en production et le code source dévoilé, un codeur mal intentionné est capable de trouver des failles permettant des actions "préjudiciables" pour le wiki. Il y a aussi le suivi du code, à chaque changement faire un log des modifications, assurer le suivi des bugs, etc. De plus il y en a toujours plusieurs qui viendront demander comment ça marche, comment on l'installe, bref du temps perdu pour moi. Et puis il y aura toujours l'inévitable chieur qui essayera de me démolir en critiquant méchamment mon code (c'est mal commenté, c'est mal indenté, moi j'aurais pas fait comme ça, etc).
Ne voulant pas m'embarquer dans de multiples projets, la publication du code n'est qu'une idée naissante, donc pas la peine d'attendre pour le moment. Si toutefois vous avez des retours d'expérience, des idées sur des avantages et des inconvénients d'un code open source je suis toute ouïe.
Le 23/04/09 à 10h31
Bonjour,
J'explore également les différentes pistes menant aux méthodes de comparaison de fichiers dans le but de développer un wiki.
Je suis parti de (commande diff native linux) :
<?php
$diff = array();
exec('diff old-file.html new-file.html --rcs', $diff);
foreach ($diff as $key => $value) {
$value = htmlentities($value);
echo '[' . $key . '] => ' . $value . '<br/>';
}
?>
.. pour en être aujourd'hui à me documenter sur xdiff ( http://www.php.net/manual/fr/book.x...), extension PECL.
Si cela t'intéresse, nous pourrions collaborer dans cette gageure, mettre en commun nos découvertes et partager nos retours d'expériences.
Tu as mon mail ;-)
PS: l'installation d'une extension PECL n'a rien de sorcier "$ pear -v install xdiff" (par exemple)