Tout est parti de ce message sur la mailing-list de Freenet (réponse de Toad) :
Fascinating… What we really need in this area IMHO is a web-based blogging interface:
- It must be as easy to use for a newbie as the centralised blogging sites, for writing blogs.
- It must support basic blog features – sort by date, tags, etc.
- It must have a web interface so it can integrate into fred as a plugin, and add itself to the Browse menu. IMHO this is important, and http://freenet.uservoice.com/ seems to agree.
- It should have at least two themes, and the default should look reasonable.
- It must support embedding pictures, linking to other freesites, and linking to arbitrary files. Eventually we will have embedded video, but that will require more work on other parts of fred.
- *Eventually* it will need integration with Freetalk, for posting comments, for announcing it in the first place, and maybe for the whole blog to be just showing somebody’s top level posts… But p0s has a lot of work to do on Freetalk/WoT, and IMHO the earlier we have an easy to use blog tool integrated into the UI the better.
[...]
When you’re not busy with writing fred themes, would you be interested?
Bien évidemment, j’étais intéressé. L’occasion de contribuer à un projet que je soutiens de façon significative. J’ai donc crée un répo Git pour faire quelques expérimentations… Je n’avais aucune idée de comment créer un plugin pour Fred.
Après m’être rendu compte que les plugins étaient en fait codés à l’arrache en recréant la roue à chaque fois même pour les trucs les plus simples (localisation de l’interface, stockage de données de façon sécurisée sans avoir à refaire des milliers de lignes de code de crypto), j’ai réalisé la quantité de travail qu’il fallait faire si je voulais faire un truc propre. J’ai donc factorisé toute l’interface de localisation du noeud afin d’utiliser exactement le même code pour les plugins. Sur le coup, ça a été beaucoup de changements pour pas grand chose, mais maintenant on en profite bien : en changeant quelques lignes de code seulement, il est possible de traduire les plugins en utilisant la même interface que pour le noeud ; et WoT et Freetalk utilisent aussi ce nouveau système depuis peu.
Après avoir fixé ce problème de localisation, je bute sur un autre problème : comment stocker des données de façon sécurisée sans se farcir plein de code de crypto ? (Je déteste la crypto, c’est compliqué et une toute petite erreur peut tout ruiner ; d’autant plus que le noeud a déjà ce code là.) J’ai pensé à pas mal de méthodes : utiliser des fichiers XML, utiliser une base de données db4o dans un fichier à part, utiliser node.db4o, … C’est finalement cette dernière solution que j’ai choisie. Avec l’aide de Toad, j’ai crée une classe simple PluginStore permettant aux plugins de stocker des données dans node.db4o sans se soucier des problèmes de chiffrement, … Le seul problème est en cas de corruption de ce fichier ; c’est pourquoi j’ai également crée des méthodes pour exporter et importer des PluginStore sous forme de fichiers. C’est donc aux utilisateurs de faire attention et de sauvegarder leur données cruciales dans un endroit sûr ; un auteur de Flog peut très bien publier du contenu qui serait susceptible de le mettre en prison ou de lui attirer de gros ennuis dans son pays, il faut donc faire attention.
Finalement, quelques mois plus tard arrive la première version fonctionnelle de FlogHelper, manquant encore cruellement de fonctionnalités intéressantes et remplie de bugs.
Après avoir fignolé l’interface et ajouté les fonctionnalités telle que la recherche intégrée (ce qui implique de générer un index XML, peu simple vu comment c’est documenté), les tags, les pièces jointes, … Le plugin est passé semi-officiel, ce qui veut dire que la source est vérifiée par Toad et que les Jars sont hébergés sur les miroirs, mais il n’est pas encore promu en tant que plugin officiel sur la page des plugins.
Le plugin sera officiel dès que WoT sera lui-même officiel, espérons que ça sera pour bientôt.
Liens
- plugin-FlogHelper-staging (-CURRENT, accessible à tous les dévelopeurs)
- plugin-FlogHelper-official (-RELEASE, source revue et vérifiée par un développeur officiel de confiance)
- FlogHelper-official sur les miroirs
- WoT-official sur les miroirs