Skip to main content

In the process of returning to the University of Reunion Island as a student,
I'm eager to learn more about computer science and logic programming in particular.

I've worked for small-to-medium enterprises
in the Greater Metropolitan Paris Area for about 10 years,
and today I offer consulting services as
a part-time freelance software developer to earn a living.





This is me trying to publish a status update from "home" i.e. over to Twitter programmatically. This POSSE ( mechanism has remained broken for so long that i feel kind of late to the party.


Depuis le milieu de la crise sanitaire (pour ceux qui sont en France), j'avais envie d'expérimenter avec la vidéo ou plutôt le son sans trop vraiment savoir par où commencer, ni bien comment m'y prendre non plus d'ailleurs et puis ce matin, j'ai eu une sorte de déclic 💡

En souhaitant régler un problème simple :

Jouer de la musique depuis un terminal avec un moyen de sélectionner les titres depuis un répertoire et me permettant d'effectuer une recherche approximative (*fuzzy-search*).

Voici une première tentative de solution exprimée sous forme d'un article court :
(moins de 3 min de texte à lire en Anglais 🇬🇧)

ainsi que d'une vidéo capturant des actions à l'écran et dans un terminal :
(moins de 5 min de vidéos à voir et à écouter en Anglais 🇬🇧)


How to building the community edition of IntelliJ with a mounted disk partition encrypted with eCryptf?

1 min read

I've spent several hours to figure that using eCryptf ( to access encrypted files belonging to a mounted partition where the IntelliJ IDEA project ( has been cloned, was compromising all my attempts to build the project. 

Fortunately, once again, stackoverflow came to the rescue :

I had only to move the newly cloned repository to another unencrypted partition in order to be able to build the project successfully. It seems that eCryptfs doesn't play well with long file names.


Learning about compilers

2 min read

In order to have a better understanding of context-free grammars, lexers and parsers,
I have developed a basic JSON editor with Vuejs ( by going through chapters and exercices of Compilers, Principles, Techniques, & Tools ( 


The  project ( has been of tremendous help to generate parsers from grammars ( This side project reminded me of times when David NowinskySophie Despeisse and I, had to edit many configuration files by hand, which was quite error-prone without adequate tooling.


In the past, I would not dare playing with a recursive descent parser. Thanks to reactivity in a browser brought by modern libraries, the fun is back.


Would anyone want me to write a short article on the topic, I would gladly describe how to implement the aforementioned editor from Backus-Naur form notation technique to the edition of tokens implemented as many Vue components.


I've published a prototype, along with its sources ( It is still at its early stage but I'm looking for some additional insights about how the job could have been done so comments about this project which main purpose is to learn are very welcome).



#Grub - How to boot a linux kernel from a Grub console?

2 min read

After upgrading my personal servers to Debian Stretch, one of them would not reboot.
I had to use KVM over IP (via iLO) to figure there was an issue with the bootloader configuration.

I've successively encountered the following error messages:

no loaded kernel
file not found

After rebooting the server in rescue mode, I recovered the configuration file generated by Grub and I run the following commands in Grub console :

grub > insmod gzio
grub > insmod part_msdos
grub > insmod ext2
grub > set root='hd0,msdos1'
grub > search --no-floppy --fs-uuid --set=root BXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
grub > linux /vmlinuz-4.9.0-3-amd64 root=UUID=RXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ro quiet
grub > initrd /initrd.img-4.9.0-3-amd64
grub > boot

The first UUID (BXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) matches with a boot partition (hd0,msdos1) of a disk drive and the second UUID (RXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) matches with a root partition of a disk drive.


After gaining access to a remote shell over ssh again, I've fixed Grub installation by running the following command:  

sudo grub-install /dev/sda

Eventually, I've ensured everything was OK by using greb-emu before rebooting again

sudo apt install grub-emu
grub-install --version # returns "grub-install (GRUB) 2.02~beta3-5"


#Shell - How to check the TLS certificate expiration date of a remote host?

1 min read

Inspired by articles read from ShellHacks, Mattias Geniar's blog and the answer to a question posted on stackoverflow, I've added a function and an alias to my shell start-up script to check the TLS certificate expiration date of a remote host


#PGP - How to leverage to encrypt, sign and decrypt messages?

1 min read

Install the GNU Privacy Guard implementation of the OpenPGP standard.

Install and configure a messaging client like Thunderbird 
for use with a plugin supporting OpenPGP.

Enigmail can be installed as a plugin for Thunderbird allowing to encrypt, sign and decrypt emails.

Sending emails which have been signed or encrypted will require 

  • the generation of a PGP key pair (a public key and a private key)
  • the exchange of public keys with recipients of messages
    (for example by organizing a physical meeting) 

Other initiatives allowing to encrypt, sign and decrypt messages from a browser :

Riseup has published a pretty list of OpenPGP best practices


I recommend watching the following discussion between Oxblood Ruffin (, Frank Rieger (, Gabriella Coleman ( and Stefania Milan ( about the history and practice of hacktivism :


I've just shared a solution for migrating Piwik from 1.12 to 2.15.0:

Hint: Always read the documentation ...
See also ^_^

P.S. Piwik is an open-source analytics platform,
which can be downloaded from


#Testing - About (not) using an alternative database for your functional tests

1 min read

Using an SQLite database for testing might come in handy.

Why should we use a database increasing the footprint of a test suite when executing very few queries? 

Even few queries are not prepared the same way depending on the database engine and as a result there is no guarantee of having the same records set returned by SQLite and another database used in production. 

For instance, I've encountered the following issues before: