Monthly Archive for mars, 2009

blogit.vim

Cela faisait un moment que j'en avais marre de passer par mon navigateur pour écrire mes billets sur ce blog. Les raisons sont simples, tout d'abord j'utilise communément vim comme éditeur de texte, et il m'est assez insupportable d'écrire du texte dans les textarea Qt où je ne bénéficie pas des raccourcis et de ma configuration de vim. En outre, j'ai horreur du web, et je ne supporte pas de passer par l'interface d'administration de WordPress que je trouve lourde de javascript.

C'est pourquoi lorsque pankkake m'a appris l'existence d'un script vim pour publier des billets WordPress par XML-RPC, je fus enchanté.

Cependant, certaines choses de ce script ne me satisfaisaient pas. D'une part, je n'aimais pas la syntaxe des meta-data, je préférais afficher celles-ci dans le style mail, afin que cela me rapproche plus de l'écriture d'un e-mail avec mutt.
En outre, après édition du code source (qui, agréable surprise, est en Python), j'ai vu des horreurs du code, du style :

("".zfill(size-len(p["postid"])).replace("0", " ")+p["postid"])

Qui a en fait pour but de faire, en se compliquant la vie, ceci :

'%5d' % int(p["postid"])
# Ou pour être exact :
('%%%dd' % size) % int(p["postid"])

Il a également eu la bonne manie d'entourer chacune de ses fonctions par :

try:
    # ...
except:
    sys.stderr.write("An error occured")

Ce qui est très laid.

En bref, vu l'horreur que cela représente, j'ai décidé d'écrire un plugin de zéro afin de rendre ça un peu plus agréable à utiliser et le code un peu plus propre.

Ceci a abouti à ce super script blogit.vim, qui possède l'API suivante :

  • :Blogit ls — affiche la liste des articles (entrée sur un article l'édite)
  • :Blogit new — créer un nouvel article
  • :Blogit edit <id> — édite un article
  • :Blogit commit — enregistre l'article courant
  • :Blogit push — publie l'article courant
  • :Blogit unpush — retire la publication de l'article
  • :Blogit categories — liste les catégories
  • :Blogit rm <id> — supprime un article

blogit.vim est releasée en version 1.0.

Ce présent billet est d'ailleurs le premier écrit avec ce script, et j'espère que sa commodité d'utilisation m'incitera à écrire plus fréquemment :

screenshot
Billet écrit avec vim : coloration syntaxique, correction orthographique, fonction undo/redo, etc.

Où en est Peerfuse

Cela fait quelques temps que je n'ai pas donné de nouvelles de Peerfuse, je vais donc corriger ceci.

Un été actif

Ainsi que je l'avais raconté dans un billet précédent, il se trouve qu'une nouvelle version du protocole a été définie, plus sécurisée, utilisant moins de bande passante et ne nécessitant pas pour chaque pair à connaître tous ceux du réseau, ce qui permet d'avoir des réseaux de tailles non négligeables.

Le travail a débuté cet été avec l'aide de Eld et tito, le premier spécialiste des réseaux peer-to-peer, qui m'a aidé dans la réalisation du protocole, et le second contributeur plus connu pour avoir été président de l'association de jeux vidéos libres Nekeme Prod. (oui leur site est down), et qui a réalisé entre autres un serveur XML-RPC inclus dans Peerfuse, qui permettra à l'avenir de développer des frontends (graphiques ou non) avec une interaction plus user friendly avec Peerfuse.

Une charge de travail assez importante a été réalisée, et la DHT Chimera a été correctement importée. D'ailleurs, je pense que le mot « réécrite » corresponds davantage à ce qui a été effectué. En effet, tout d'abord la DHT était écrite en C, et j'ai adapté tout le code afin de correspondre au style C++ du projet.

En outre, j'ai séparé la partie réseau de la partie DHT, en réécrivant entièrement le moteur réseau de Peerfuse, beaucoup plus souple et extensible.
Ainsi, la DHT s'allège du code réseau de Chimera qui était, il faut bien l'avouer, complètement moisi (voir ici).

Peerfuse bénéficie d'ailleurs maintenant d'une meilleure architecture. Chaque partie de l'ancien common (la partie de code commune à peerfuse-net et peerfuse-lan) a été transformée en petites bibliothèques indépendantes. Ainsi nous trouvons maintenant :

  • util — Diverses classes génériques, pour gérer les threads, la config, les mutex, le logging, etc.
  • net — Contient la classe Network ainsi que diverses autres classes qui constituent la fondation du moteur réseau de Peerfuse.
  • dht — La fameuse DHT écrite à partir de Chimera, et qui est entièrement fonctionnelle.
  • ssl — Des classes faisant couche d'abstraction d'OpenSSL, afin d'assurer la sécurité des transmissions dans Peerfuse
  • scheduler — Un système de tâches planifiées qui a été amélioré afin de tourner sur plusieurs threads
  • files — Les classes qui gèrent les dossiers et les fichiers, ainsi que leurs contenus et diverses méthodes d'abstraction autour des transferts
  • fuse — Ce sont les handlers de la libfuse et qui appellent les fonctions Peerfuse

Un intérêt à la séparation des différentes petites libs, c'est que j'ai pu tester la DHT avec le moteur réseau et la libutil, de façon totalement indépendante dans un programme de test, et que ça marche.

Le desert

Malheureusement, à partir d'octobre, la dépression causée par divers évènements personnels ma conduit à m'intéresser moins au projet.

Le travail qui reste à faire est plus chiant qu'autre chose, c'est à dire réécrire une partie du code de Peerfuse pour supporter la nouvelle API réseau et protocolaire (DHT).

Le souci, c'est que Peerfuse en lui même ne compile pas du tout (contrairement aux mini libs), et que cela ne facilite pas le travail des quelques contributeurs intéressés par le projet, et qui du coup n'en foutent pas une.

Donc je pense qu'il me faudrait un bon coup de remotivation pour reprendre le travail que j'ai laissé inachevé en automne dernier. Ça va être dur, parce que j'avais trouvé un moyen pour me pousser à me remettre au travail, mais les quelques conquetes féminines n'ont pas suffit à me remotiver :)

Les six derniers mois

Ça fait longtemps que j'ai pas raconté ma vie ici, donc je vais en profiter, histoire de.

Tout d'abord, j'ai commencé un nouveau projet que je garde secret pour le moment, mais que certaines personnes connaissent sous le nom d'AuM. Ce projet est écrit en Python, utilise les libs mechanize et html5lib, je vous laisse imaginer quel genre d'utilité cela peut avoir.
Mais je reviendrai dessus dans un billet futur, quand sera venu le moment adéquat pour en parler. Je ferai peut-être une conférence dessus fin mai aux PyCon 2009.

En outre, j'ai remis en place Men Are Ants, à sa version 0.4, qui était plus abouti, et abandonne la réalisation de la version 3D isométrique, l'intérêt étant réduit, et n'ayant plus vraiment envie de m'investir dans ce projet. Je corrigerai sans doute néanmoins les quelques bugs que j'ai remarqué lors d'une partie récente avec pankkake.

J'ai finalement envoyé mes patches pour ncmpc upstream, le projet ayant été depuis repris par un des principaux développeurs de MPD. Il se trouve que la personne, Max Kellermann, a été très intéressé par mes patches, m'a demandé d'en faire d'autres, et m'a très gentilment proposé de devenir contributeur, chose que j'ai accepté avec enthousiasme. En effet, je prends plaisir à participer, pour une fois, à un projet d'envergure et que j'utilise tous les jours.

Je n'ai pas encore eu pour le moment l'occasion de faire grand chose, mais je suis intéressé par la réalisation d'un système de plugins chargés dynamiquement, qui permettrait d'étendre les possibilités offertes par MPD, et de rendre plus propre la gestion des modules de sortie audio.

Enfin, je me suis mis en tête de réaliser un agrégateur de flux RSS deux-tiers (comme disent les décideurs), avec un backend qui récupère les données, et un frontend en ncurses (il pourrait y en avoir d'autres) qui se synchronise et (très important) peut récupérer les articles en local, permettant de les lire même en étant offline.

Ceci résoudrait le problème que j'ai à ne pas pouvoir lire mes flux RSS au boulot, puisque j'utilise Akregator, qui est une application graphique KDE qui ne me permet pas de gérer la synchronisation avec mon PC du boulot.

Je n'ai pas encore commencé, mais avec un peu de motivation ça peut le faire.

Conclusion

J'ai donc pas mal de projets en attente, qui sont tous aussi intéressants les uns que les autres, et j'espère ne pas tomber dans le schéma lodesi, qui a beaucoup d'idées mais jamais le courage de les réaliser jusqu'au bout.




Bear