PROJET AUTOBLOG


mathieui’s blog

Site original : mathieui’s blog

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Migration de service

dimanche 9 avril 2017 à 16:17

Il y a bientôt 3 ans de ça, j’avais cédé à une offre promotionelle d’online qui vendait des serveurs dédiés à 2€ HT/mois, ce qui est quand même un tarif assez exceptionnel. Le serveur ne m’a pas servi à grand chose, si ce n’est à héberger mon pix sur une bonne connexion à une époque où je n’avais pas encore 200Mbps en upload chez moi, ainsi qu’à des backups.

Il y a quelques jours, online a annoncé qu’ils allaient mettre hors service cette gamme de serveurs d’ici le 1er mai, et donc que je devais faire quelque chose, en me mettant à disposition une dedibox SC avec frais d’installation offerts. Cela dit, payer ensuite 12€/mois au lieu de 2€40 ne m’enchante pas (même si bien sûr, le processeur VIA U2250 et ses 2Go de ram/160Go de HDD font pâle figure face à la configuration de la SC bien que minimale). C’est pour ça que j’ai choisi plutôt de partir sur un serveur C1 chez scaleway (ARMv7 quad-core, 2Go de ram, SSD de 50 Go) à +-3€/mois.

J’y ai donc bougé mon pix, mais également un gitea et un miroir de mon blog pour tests. La nouveauté c’est qu’il sera sous archlinux et non centos, et donc bien plus agréable à administrer :). J’en ai profité pour commencer à écrire des roles ansible pour mes services, afin de ne pas me fatiguer la prochaine fois (disponibles sur le gitea susmentionné). À suivre : une conf monit pour monitorer le serveur, et faire marcher buildbot avec gitea/gogs si ce n’est pas déjà possible.

Service migration

dimanche 9 avril 2017 à 16:17

Almost three years ago, I fell for a discounted offer at online, which was selling dedicated servers for €2/month (plus tax), which is really cheap. I didn’t get much use from it, except hosting my pix on a good connection at a time where I didn’t have a 200Mb/s upload on my home connection, and doing small backups.

A few days ago, online announced that they were going to phase out those servers on the 1st of May, and that I should move from it ASAP, while giving me access to a free (until 1st May) dedibox SC. That said "free installation" when going from a €2.40 server to a €12 one doesn’t please me a lot (even if of course the performance and server quality doesn’t have much in common, I don’t even know where they found the VIA U2250 processors in the €2 box). That is why I chose to move instead to a C1 server at scaleway, which is technically still online (ARMv7 quad-core, 2GB of RAM, 50GB SSD) at around €3/month).

I have already moved my pix, but also a gitea, and a blog mirror for testing. Since I put archlinux instead of centos on it, it will be much more pleasant to use, so I will probably do more things with it. I also used the occasion to start writing ansible roles for my services, in order to have a painless migration next time (available on the formentioned gitea). Next up: a monit configuration for those same services, and managing to make buildbot work with gitea/gogs webhooks.

Pelican et internationalisation

dimanche 9 avril 2017 à 14:22

Depuis que ce blog utilise Pelican, je me suis mis à rédiger la plupart de mes articles (quand j’en ai le temps et la motivation) en anglais et en français. Pelican gère l’internationalisation par défaut, pour peu qu’on ait choisi un thème qui le prenne en charge (j’utilise pour ma part le thème SoMA2 dont c’est le cas). Mais par défaut il est impossible de générer un flux RSS par langue et par tag/catégorie ; j’avais également essayé de mettre des tags différents par langue, mais cela ne marche pas.

À la dernière (et première) rencontre XMPP à Paris, j’ai pu rencontrer Jean-Baptiste qui a une expérience certaine dans le domaine, et qui m’a fait remarquer que c’était possible via des subsites. Et m’a proposé plutôt qu’une bière en échange de la solution, que j’écrive un article pour décrire le processus. Après avoir eu la piste, ce n’est pas bien compliqué, mais chose promise, chose dûe.

1 - Ajout du plugin i18n_subsites

Le plus simple est de cloner le dépôt pelican_plugins qui contient tous les plugins possibles, afin de récupérer le plugin voulu. Le plus simple est de faire ça dans le dossier qui contient le blog.

git clone https://github.com/getpelican/pelican-plugins.git

Ensuite, il faut configurer le blog pour utiliser le plugin, donc éditer pelicanconf.py et y ajouter ces lignes :

PLUGIN_PATHS = ['pelican-plugins']
PLUGINS = ['i18n_subsites']

Puis il suffit de configurer les langues que vous voulez faire apparaître sur votre site (ici je mets ma configuration, très complexe) :

I18N_SUBSITES = {
    'en': {
        'SITENAME': 'mathieui’s blog',
    },
    'fr': {
        'SITENAME': 'mathieui’s blog',
    }
}

Et… Voilà, c’est tout, le blog est configuré, il va :

  • Générer un sous-dossier en/ et un fr/ dans le dossier de sortie de pelican
  • Mettre également à la racine la langue définie comme langue par défaut dans votre configuration
  • Générer des flux RSS spécifiques par langue dans les sous-dossiers correspondants

2 - Configuration nginx

Cette étape est bien sûr optionelle, mais comme tous mes articles étaient disponibles au même niveau en rajoutant -fr dessus, le fait de passer aux subsites a cassé tous les liens qui y menaient.

J’ai donc rajouté une simple directive nginx qui permet de faire comme si ils n’avaient pas bougé, sans avoir à retoucher à Pelican.

location ~ /(.+)-fr.html {
    try_files $uri /fr/$1.html;
}

Pelican and internationalization

dimanche 9 avril 2017 à 14:22

Since I started using Pelican for my blog, I tried to write most of my articles (when I’m motivated enough) in english and french at the same time. Pelican works with internationalization well enough by default, as long as the chosen theme can handle it (I am using the SoMA2 theme for which this is the case). However, it is impossible to generate a RSS feed by language and tag/category; I also tried to put different tags for each language, but that does not work.

In the latest (and first) french XMPP meetup, I met Jean-Baptiste who is quite experienced in that domain, and who explained to me it was possible using subsites (while I was complaining, as usual). Instead of offering a beer for the solution, he suggested I should write an article to describe the process. Once you know what to use it isn’t that complicated, but since I promised, here we go.

1 - Adding the i18n_subsites plugin

The easiest way to add the plugin is to clone the pelican_plugins repository which holds all the possible plugins, in order to get the one we want.

Doing it in the folder which contains the blog makes things simpler:

git clone https://github.com/getpelican/pelican-plugins.git

Next we have to configure the blog to use the plugin, so we must edit the pelicanconf.py file and add those lines:

PLUGIN_PATHS = ['pelican-plugins']
PLUGINS = ['i18n_subsites']

Then you only have to setup the languages you want to display on the website (I put here my very complex configuration):

I18N_SUBSITES = {
    'en': {
        'SITENAME': 'mathieui’s blog',
    },
    'fr': {
        'SITENAME': 'mathieui’s blog',
    }
}

That’s it, the blog is configured, it will:

  • Make en/ and fr/ subdirs in the pelican output folders
  • Duplicate the subdir for the configured default language and write the files to the root
  • Create specific RSS feeds for each tag and lang in the corresponding folders

2 - Nginx configuration

This step is optional, but since all my articles were available in the same directory by adding -fr to their name, going to the subsite layout broke all links to them.

Therefore, I added a simple nginx directive which acts as if the articles didn’t move, without tweaking pelican again.

location ~ /(.+)-fr.html {
    try_files $uri /fr/$1.html;
}

Poezio 0.10

dimanche 9 octobre 2016 à 18:32

Initialement, la version suivant la 0.9 aurait dû être la 1.0, mais je n’avais pas envie d’attribuer la version 1.0 à l’état actuel de poezio ; donc voici la 0.10 !

Poezio est un client XMPP qui fonctionne dans un terminal et qui veut donner la même impression que les clients IRC comme irssi ou weechat ; c’est d’ailleurs pourquoi les premières versions ne prenaient en charge que les salons de discussion.

Nouveautés

Performances

Link Mauve a passé pas mal de temps à rendre poezio plus rapide, ce qui le rend plus agréable et plus réactif sur des machines avec une puissance de calcul faible dans une situation avec beaucoup de contacts et de salons remplis.

Il a ainsi passé beaucoup de temps à profiler poezio pour déterminer les endroits critiques pour les performances, ainsi qu’à se plaindre de la lenteur de python pour des opérations des plus classiques ; ensuite est venu un nombre de micro(et pas si micro que ça)-optimisations. Son objectif à terme est de rendre tout compilable via cython, afin d’avoir des performances encore meilleures.

Stream Management (XEP-0198)

Allant de pair avec la réparation du plugin slixmpp pour la XEP-0198 est venue l’implémentation dans poezio. Il n’est néanmoins pas activé par défaut car il ajoute une quantité substantielle d’échanges avec le serveur, et n’est pas foncièrement utile dans les cas standard d’utilisation de poezio (i.e. des sessions longues laissées à tourner dans une fenêtre screen ou tmux). Il suffit de mettre l’option idoine à true pour le réactiver.

Cette extension (qui a besoin d’une prise en charge côté serveur) permet à un client de restaurer une session après une déconnection abrupte, tant qu’un certain délai n’est pas dépassé côté serveur. Elle permet également d’avoir une meilleure fiabilité dans le flux entre le client et le serveur en ayant des accusés de réception à intervalle régulier avec des numéros de séquence. Si les numéros de chaque côté ne correspondent pas, l’entité qui a envoyé les messages manquants les renvoie simplement à l’autre.

Activation de carbons

C’était un oubli, mais un oubli notable ; l’extension “Carbon Copies (XEP-0280)” est maintenant activée par défaut dans poezio 0.10. Cette extension permet une transition naturelle entre différents terminaux xmpp en dupliquant les messages reçus et envoyés sur chaque terminal. On peut donc continuer sur son ordinateur une conversion entamée sur son téléphone en voyant tous les messages.

Fichier de configuration commenté

Encore un oubli : comme les options du fichier de configuration étaient décommentées par défaut (et que ce fichier est copié au premier lancement de poezio), il n’y avait aucun moyen de savoir si une valeur était là parce que l’utilisateur le désirait, ou si c’était juste la valeur par défaut. Il n’y avait donc pas de possibilité de changer les valeurs par défaut dans les nouvelles versions pour les gens utilisant déjà poezio. En fait, il n’y en a toujours pas, mais dorénavant les options du fichier de configuration sont toutes commentées par défaut, donc les nouveaux utilisateurs n’auront pas ce problème.

P.S. : Il est possible d’utiliser poezio -c pour voir quelles options diffèrent de leur valeur défaut.

Script poezio_logs

Les fichiers de logs de poezio sont depuis un moment déjà dans un format proche de mcabber. Cependant, lire ces logs depuis poezio est au mieux compliqué, mais surtout impossible. Même si ce problème est connu et voué à être résolu un jour, c’est toujours appréciable de pouvoir lire ses logs sans avoir à se coltiner le format spécifique de stockage.

Cette release inclut donc un outil poezio_logs qui reçoit en paramètre le chemin d’un fichier de logs et sort le résultat nettoyé sur la sortie standard, avec quelques couleurs. Il peut également prendre quelques paramètres pour enlever la couleur, la date et heure, ou les messages d’information.

Vérification HTTP (XEP-0070)

L’invité surprise de cette release est l’arrivée d’un onglet de vérification de requêtes HTTP utilisant la XEP-0070 pour authentifier des requêtes HTTP en utilisant seulement votre JID.

http_verif

Un plugin mediawiki est en cours d’écriture afin de tirer parti de cette extension, et un plugin wordpress est déjà disponible depuis un bon moment. Comme les composants comme celui-là parlent en HTTP, aucune prise en charge d’XMPP n’est requise dans l’application qui fait la vérification ; il suffit d’entrer votre JID, puis de vérifier et accepter la requête dans votre client.

Changement de l’avertissement de certificat

La façon qu’avait poezio d’afficher un changement de certificat auparavant n’était vraiment pas pratique et, après avoir implémenté la XEP-0070, c’était naturel de réutiliser l’onglet créé pour l’occasion avec des couleurs différentes pour avoir une façon plus agréable de vérifier le nouveau certificat (particulièrement depuis le passage de SHA-1 vers SHA-512).

cert_warn

Détournement des corrections de messages

Cela s’apparente plus à de l’abus de protocole qu’autre chose, mais puisque nous avons déjà un nombre conséquent de plugin « rigolos », en voici deux nouveaux :

  • marquee, qui reproduit le comportement d’une balise html <marquee/> en déplaçant du texte de gauche à droite dans une boucle, tout ça dans un seul message en utilisant les corrections.
  • dice, pour faire « rouler » un certain nombre de dés durant une durée fixe, une fois de plus dans un seul message en utilisant les corrections.

Indication de l’état du client (CSI, XEP-0352)

CSI est une extension plutôt portée sur le mobile qui demande un support côté client et côté serveur, et qui permet au client de dire au serveur qu’il est "off" (par exemple, un client mobile avec l’écran éteint en étant dans une poche).

Étonamment, cette XEP s’applique plutôt bien à poezio, puisque le plugin screen_detach fait exactement ça, en ayant un état "off" et un état "on".

Régler l’état à actif ou inactif permet au serveur d’activer un certain nombre de filtres pour limiter les échanges entre le client et le serveur (et donc les réveils du téléphone en cas d’information inutile). Par exemple, quand l’écran est éteint, le client n’a que faire des informations de présence des contacts, qui seront donc filtrées, alors qu’il est encore intéressé par des nouveaux messages.

Les filtres activés sont à la discrétion de l’administrateur du serveur.

VCards

Prendre en charge VCard-Temp (XEP-0054) qui permet de récolter des informations sur son interlocuteur est toujours appréciable, et cette version ajoute un plugin pour visualiser les informations fournies par une entité distante. L’implémentation est encore un peu brute car elle n’implémente qu’une partie de la spécification et réutilise un onglet de poezio qui n’était pas fondamentalement prévu pour ça, mais cela s’améliorera.

Bien sûr, une fois que la prise en charge de vcard-temp sera finalisée, celle de Vcard4 (XEP-0292) viendra.

Bits of Binary

Bien que poezio ne dispose toujours pas de vraies capacités de partage de fichiers, nous avons désormais un plugin BoB (XEP-0231), qui permet d’envoyer des petits fichiers à travers la connexion XMPP. Comme la bande passante est souvant limitée à raison à quelques kilobits/octets par seconde, il doit être utilisé avec raison, mais est pratique pour envoyer de petits fichiers.

Et bien plus encore

Il y a bien sûr bien plus de commits que juste ceux-ci, par exemple l’intégralité du code a été refactorisé pour éviter un hack du chemin python durant l’import, plusieurs corrections d’interface ont été apportées, les thèmes sont mieux respectés (moins de valeurs en dur), les reconnexions dans certains conditions ne provoquent plus une boucle infinie sans pause, etc… Vous pouvez consulter le CHANGELOG ou l’ historique git pour plus de raisons de mettre à jour.

Informations d’empaquetage

Cette version comme la précédente dépend toujours de la bibliothèque slixmpp, qui elle-même requiert aiodns, et peut être optimisée avec cython (auquel cas libidn ainsi que ses headers seront requis durant la compilation).

Contributeurs

À part moi-même (mathieui), louiz’, and Link Mauve, je veux également ermercier les autres contributeurs, eijebong, Lasse Aagren, Frédéric Meynadier, Nicolas Braud-Santoni, Lancelot SIX, Luke Marlin, pour leur ajout de fonctionnalités ou corrections de bugs.

Je veux également remercier tous les utilisateurs et testeurs qui nous remontent des bugs et des suggestions d’améliorations, que ce soit via des remarques constructives dans le salon ou des rapports de bugs.

Bugs

Comme toujours, si vous rencontrez un bug inconnu qui n’est pas corrigé dans la version git de poezio, merci de nous en faire part, merci.