Bonjour tout le monde,

J’ai l’honneur de vous présenter une nouvelle bibliothèque Java (en fait compatible avec n’importe quel langage qui utilise la machine virtuelle Java, normalement) : confusable-homoglyphs. « Nouvelle » dans sa version Java, car c’est en réalité un portage d’une bibliothèque Python. Notez qu’il en existe aussi une version PHP.

C’est un outil sous licence Apache 2.0 qui permet de gérer directement au sein d’une application les caractères Unicode qui se ressemblent, et donc qui sont source de confusion.

Quel est donc le but de cette bibliothèque ?

Les humains utilisent divers systèmes d’écriture, et ce qui devait arriver, arriva : il y a des caractères qui se ressemblent (voire qui sont graphiquement identiques, selon la police d’écriture), mais qui sont différents. Or, de telles confusions peuvent avoir des conséquences fâcheuses, par exemple :

  • l’utilisateur « ΑlaskaJazz » (le premier Α est un alpha majuscule grec) peut se faire passer pour l’utilisateur « AlaskaJazz » (uniquement des lettres latines) ;
  • on peut vous inciter à vous connecter sur www.microsоft.com ou www.faϲebook.com au lieu de www.microsoft.com ou www.facebook.com ;
  • etc., on pourrait multiplier les exemples désagréables à l’infini.

Si Unicode fournit des listes des caractères qui peuvent prêter à confusion, elles sont difficiles à utiliser en l’état : ce sont des fichiers textes avec un formatage particulier, qui plus est hébergés sur des serveurs instables et fréquemment hors ligne.

confusable-homoglyphs permet de gérer ces confusions en détectant et donnant des informations sur les caractères potentiellement problématiques.

D’accord, mais comment ça s’utilise ?

La bibliothèque est disponible sur Maven Central et donc s’importe comme n’importe quelle autre bibliothèque Java, ici avec Maven ou Gradle :

<dependency>
    <groupId>fr.spacefox</groupId>
    <artifactId>confusable-homoglyphs</artifactId>
    <version>1.0.1</version>
</dependency>
compile group: 'fr.spacefox', name: 'confusable-homoglyphs', version: '1.0.1'

Puis on initialise l’une des deux classes utilitaires, selon ce qu’on veut faire :

Categories categories = Categories.fromInternal();
Confusables confusables = Confusables.fromInternal();
// ou si on préfère fournir un jeu de données spécifique :
Categories categories = Categories.fromJson("/full/path/to/categories.json");
Confusables confusables = fromJsons("/full/path/to/categories.json", "/full/path/to/confusables.json");
// (Confusables utilise Categories en interne).

Et on utilise les objets créés. Il y a un résumé de l’API publique ici. La création est relativement longue par rapport à l’utilisation, il vaut mieux garder ces objets vivants entre deux appels.

Les intentions et contraintes du projet

En réalité, je n’ai pas besoin de cette bibliothèque, au‐delà du fait que je trouve qu’elle manque à Java. Je voulais aussi et surtout :

  • connaître la difficulté à porter une bibliothèque de Python à Java ;
  • voir ce que c’est de créer un projet, seul, de A à Z et complet (avec documentation et tout) ;
  • essayer de déployer quelque chose sur Maven (en tant que fournisseur).

Les contraintes que je me suis choisies pour ce projet étaient donc :

  • licence libre (Apache 2.0) ;
  • Java 8, pour garder une bonne compatibilité avec les projets actuels et les différents langages qui utilisent la machine virtuelle Java ;
  • une API aussi proche de possible que l’originale (il y aura une version 2 avec des modifications dans cette API, un jour) ;
  • disponible sur Maven Central, pour être utilisable comme n’importe quelle bibliothèque Java ;
  • avec une doc complète ;
  • avec une couverture de tests correcte ;
  • avec de l’intégration continue via GitHub (j’ai toujours utilisé GitLab et GitLab CI pour mes autres projets Java).

Et comme j’aime bien partager mon expérience, j’ai écrit un billet sur ce que j’ai tiré de celle‐ci.

Je n’ai jamais eu l’occasion de vérifier que tout fonctionne bien sous Android. Si quelqu’un s’en sert dans cet environnement, que cette personne n’hésite pas à me faire signe. J’espère que ce petit utilitaire – ou les versions Python ou PHP – pourront vous servir un jour ! N’hésitez pas à créer tickets et demandes d’intégration (pull requests) si le cœur vous en dit !


Cette dépêche est publiée sous licence CC BY 4.0.

Commentaires : voir le flux atom ouvrir dans le navigateur

------------------------------------------------------------------------------------ - Source: Read on Source Website...

Source Site: LinuxFr.org : les dépêches

Link: https://linuxfr.org/news

Original-URL: https://linuxfr.org/news/confusable-homoglyphs-une-bibliotheque-pour-gerer-les-caracteres-qui-se-ressemblent