®om's blog { un blog libre }

Contributions

Une liste des quelques contributions que j’ai effectuées sur des projets libres, avec une description succincte.

Mes mini-projets

gnirehtet

J’ai développé un outil qui permet aux devices Android d’utiliser la connexion du PC sur lequel ils sont branchés (reverse tethering), sans accès root.
gnirehtet | article fr | article en | LinuxFR | reddit | Hacker News

Je l’ai ensuite réécrit en Rust.
article fr | article en | annonce | LinuxFR | reddit | Hacker News

Rust/mio

mio est une library d’I/O asynchrone pour Rust.

J’ai supprimé l’interdiction d’enregistrer un handle avec un ensemble d’intérêts vide, étant donné que les backends le supportent. Cette modification était nécessaire au bon fonctionnement de Gnirehtet :

Quelques opérateurs manquaient sur mio::Ready :

J’ai aussi ouvert quelques rapports de bugs :

libusb

libusb est une bibliothèque C pour communiquer sur USB.

J’ai corrigé un bug qui pouvait provoquer l’arrêt de l’event thread udev lors d’un signal. En particulier, il s’arrêtait à chaque fois qu’une FileDialog Qt/QML était ouverte :

F-Droid

F-Droid est un store d’applications libres pour Android. Cet article LinuxFR fournit un bon résumé.

J’ai corrigé quelques bugs qui m’agaçaient lors de l’utilisation de l’application.

L’état de l’application n’était pas mis à jour immédiatement lors d’une installation ou désinstallation d’une application (l’écran affichait donc une information erronée) :

L’application plantait lors de la désinstallation d’applications :

L’application pouvait également planter pour une autre raison si l’activité avait été détruite par le système pendant l’installation ou la désinstallation d’une application :

Android Universal Image Loader

Android-Universal-Image-Loader est une bibliothèque facilitant le chargement d’images dans les applications Android.

J’ai corrigé un bug aspect-ratio sur les images circulaires :

VLC

J’ai corrigé un problème de deadlock pouvant survenir lors de l’arrêt d’un flux UDP sur le lecteur vidéo VLC :

Mon patch ne corrige pas la cause profonde du problème. Le deadlock se produit lorsque les appels rapprochés à deux fonctions surviennent dans un certain ordre. Mon patch empêchait le deadlock dans ce cas. Un développeur de VLC considère plutôt que la cause du problème est que ces deux fonctions ne devraient jamais être appelées dans cet ordre.

Android Open Source Project

J’ai rapporté un bug constaté sur l’utilisation loaders lors de la rotation d’écran, pour lequel j’ai ensuite proposé un patch :

J’ai également supprimé une petite erreur dans la documentation de SharedPreferences :

GoogleCast

J’ai corrigé une fuite mémoire sur la CastCompanionLibrary (la bibliothèque de Google pour communiquer avec un chromecast) :

Serval/Batphone

Le projet Serval, en particulier son application Batphone pour Android, a pour but de faire communiquer les téléphones sur un réseau maillé (sans infrastructure). Voir par exemple les articles du Monde, de Next Inpact ou de Korben.

Protocole MDP

J’ai effectué deux modifications concernant le protocole MDP (l’équivalent de l’UDP sur réseau Mesh).

La première rend l’utilisation du MDP similaire à l’API socket standard C, et rend possible l’utilisation de plusieurs services simultanés :

La seconde implémente les “bindings Java” permettant d’utiliser les sockets MDP en Java, de manière similaire à l’API socket Java.

Talkie-walkie mesh

J’ai ensuite développé, en utilisant le protocole MDP ainsi modifié, un mode talkie-walkie (communication n-to-n) sur réseau mesh :

non destiné à être mergé en l’état

Support du Galaxy Nexus et de la Nexus 7 avec ROM modifiée

Thinktube a modifié Android pour y ajouter le support du mode ad-hoc. En particulier, ils ont codé le pilote pour le faire fonctionner sur Galaxy Nexus. Cependant, tel quel, Serval ne pouvait pas piloter le wifi sur ce téléphone. J’ai donc ajouté la “colle” manquante. J’ai ensuite fait de même pour la Nexus 7 :

Parallélisation de Rhizome

Tous les traitements de Serval sont effectués dans un seul thread, ce qui pose problème avec Rhizome, qui exécute des actions longues, bloquant tous traitements liés au routage et au transfert de données.

J’ai proposé une implémentation de parallélisation de Rhizome basée sur les threads POSIX :

Réflexions sur Rhizome

Ce n’est pas du code, mais des réflexions sur le fonctionnement de Rhizome :

Rhizome over Git

J’ai aussi implémenté un PoC pour explorer le principe d’implémenter la partie stockage de Rhizome par-dessus git :

Autres contributions

AndroidAnnotations

AndroidAnnotations est un framework qui aide au développement d’applications Android en générant du code à partir d’annotations lors de la compilation.

Annotation @Background

J’ai ajouté la possibilité de sérialiser, à la demande, l’exécution de tâches en arrière-plan. Concrètement, cela permet d’écrire @Background(serial="some_id") pour garantir que toutes les actions ayant le même identifiant soient séquentielles :

J’ai ensuite ajouté la possibilité d’annuler des tâches exécutées en arrière-plan :

Une régression a été introduite plus tard, que j’ai également corrigée :

Intégration plus simple avec Ant

Le wiki propose une intégration d’AndroidAnnotations avec Ant trop compliquée et intrusive. J’en propose une autre, plus simple et plus naturelle :

K9mail

K9mail est un client mail Android.

J’ai effectué une minuscule modification d’optimisation des performances :

MyFreeTV

Un petit logiciel pour regarder la TV avec la Freebox que j’ai commis en 2005. myfreetv.sourceforge.net maintenant obsolète