From 93ea2c251dc835e8cab29dfa831af4dbff152c45 Mon Sep 17 00:00:00 2001 From: ache Date: Sat, 17 Aug 2024 05:56:51 +0200 Subject: Ajout de la première note sur les codes QR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/manipuler-des-codes-qr-en-cli.md | 455 +++++++++++++++++++++++++++++++++ 1 file changed, 455 insertions(+) create mode 100644 notes/manipuler-des-codes-qr-en-cli.md diff --git a/notes/manipuler-des-codes-qr-en-cli.md b/notes/manipuler-des-codes-qr-en-cli.md new file mode 100644 index 0000000..b566871 --- /dev/null +++ b/notes/manipuler-des-codes-qr-en-cli.md @@ -0,0 +1,455 @@ +--- +pubDate = 2024-08-16T13:08:38+02:00 +tags = ['multimedia', 'cli', 'programmation', 'linux', 'code QR'] +lang = "fr" +type = "note" + +[author] +name = "ache" +email = "ache@ache.one" +--- + +# La manipulation de codes QR via CLI + +L'usage des codes QR (traduction de QR Codes) s'étant démocratisé, j'ai eu besoin d'outils pour encoder et décoder des codes QR. +Je vous présente les outils que j'utilise pour manipuler les code QR ainsi que les quelques cas d'utilisation courante de code QR. + +## Les utilitaires qrtool et rxing-cli (🦀 💪) + +Les deux outils supportent l'encodage et le décodage et sont tous les deux écrit en Rust. +J'utilise l'un pour le décodage et l'autre pour l'encodage. + +### Décodage intelligent + +Au niveau du décodage, j'utilise [rxing-cli](https://crates.io/crates/rxing-cli) qui est capable de scanner une photo et de détecter les codes QR présents. +Généralement les décodeurs sont **très basiques** et n'ont pas la fonctionnalité d'analyse et de correction visuelle d'un code QR. +Avoir la fonctionnalité de scanner toute une image et de réaligner le code est assez rare en ligne de commande. + +```sh +$ rxing-cli qr-code_mermaid_file.jpg decode +Detection result: +(qrcode) https://www.youtube.com/watch?v=eV7z7iJ22Bo +``` + +:::note +rxing a l'avantage de supporter d'autres formats de code bar, 2D ou 3D. +Comme le [format Aztec](https://fr.wikipedia.org/wiki/Code_Aztec), notamment utilisé par la SNCF. + +Ces autres formats sont souvent moins faciles à décoder et il est important d'assister le logiciel dans le décodage en cadrant le code correctement. +::: + +### L'encodage pour tous les formats + +Au contraire, pour encoder un code QR, je préfère de loin utiliser [qrtool](https://crates.io/crates/qrtool). +Sa fonctionnalité de décodage est basique, mais celle d'encodage est très complète. +Ainsi, pleins de formats sont supportés (BMP, JPEG, PNG, QOI (!), SVG...). + +Au niveau de l'encodage, c'est simple et puissant. +Par défaut la commande produit un PNG qu'elle imprime sur la sortie standard, mais pleins de formats sont supportés. +En particulier `ansi256` pour afficher le code QR directement dans la console ou `unicode` qui essaye de rendre le code QR au format caractères (simple à copier/coller dans un champ texte). +Mon préféré reste `svg` pour obtenir une image vectoriel. + +```sh +$ echo -n 'https://ache.one' | qrtool enc -t unicode +█████████████████████████████████ +█████████████████████████████████ +████ ▄▄▄▄▄ █ ▀▄███▀ ▄█ ▄▄▄▄▄ ████ +████ █ █ █▀▀██▀▄▄▄██ █ █ ████ +████ █▄▄▄█ ██▀ ▀▄▀███ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ █ ▀▄▀ █ █▄▄▄▄▄▄▄████ +████ █ ▄▀▄▄▄▀▀█ ▄▄█ █▄▀█▄█ ▄████ +████▄▀██▄█▄▀▀▀▄▀ ▀ ▀█ ▀ ▄▀▀██████ +█████ ▄▀█▄▄▄ █▀ █▀█▀▀ ▀ █▄▄ ████ +████▀▄ █▄▀▄ ▀█ █ ▀▄█▀█ ▀ █▄▄▀████ +██████▄▄██▄▄▀▄▄▄▀▀█▄ ▄▄▄ ▄ ▄ ████ +████ ▄▄▄▄▄ █ ██▄ ██▀ █▄█ █▄ ▄████ +████ █ █ █▀ █▄ ▀▀ ▄ ▀▀▀████ +████ █▄▄▄█ █▄ ▄▄▄▄█▄▄ ▄█ █ ▄█████ +████▄▄▄▄▄▄▄█▄█▄█▄█▄▄█▄▄▄▄▄▄▄▄████ +█████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +## Format et données des codes QR + +Il n'y a pas de spécification standard du contenu des codes QR ! +C'est le gros problème de ce format. +Du coup, il en existe plusieurs ! 🤦 + +![[XKCD927](https://xkcd.com/927/): How standards proliferate](/notes/res/standards.png) + +> [XKCD927](https://xkcd.com/927/): How standards proliferate + +Mais un certain nombre de formats sont courants et supporter par tous les scanners. +Notamment les formats de la société NTT DoCoMo et ceux basés sur les schémas d'URI (standardisation du W3C). + +### Partage d'une URL + +Les URL sont généralement automatiquement reconnu et il n'y a pas besoin de format particulier. +Tout comme le texte d'ailleurs. + +:::note +N'utilisez pas le format non standard `URLTO:`. +Vous utiliserez alors un format moins reconnu que juste mettre une URL. +::: + +### Partage d'un e-mail + +Pour partager une adresse e-mail, il existe encore 2 méthodes. + +- Celle standardisée par le W3C : `mailto:ache@ache.one?subject=Test code QR&body=Thank you for your content` +- Et celle de NTT DoCoMo : `MATMSG:TO:ache@ache.one;SUB:Test code QR;BODY:Thank you for your content;;` + +:::note +Pour partager juste une adresse e-mail, on peut simplement encoder l'adresse e-mail par exemple 'ache@ache.one'. +Mais il existe un risque que le lecteur de code QR l'interprète comme un texte, c'est pour cela qu'on recommande d'utiliser une des deux méthodes précédentes. +::: + +Dans la pratique, lorsqu'on partage juste une adresse e-mail, il est courant d'utiliser le format W3C. + +```sh +$ echo -n 'MAILTO:ache@ache.one' | qrtool enc -t unicode +█████████████████████████████████ +█████████████████████████████████ +████ ▄▄▄▄▄ ██▄▀▀▄▀▀▄▀█ ▄▄▄▄▄ ████ +████ █ █ ██ █▄▀ ██ █ █ ████ +████ █▄▄▄█ █▀ ▄▀█▄▄▄▄█ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█▄█▄█▄█▄█ █▄▄▄▄▄▄▄████ +████▄█▀ █▄▄▀ █▄█▀▀ ▀▀ █ ▀█▀█▀████ +█████▄▄▄▄ ▄▄█▄██ █▀▄ ▄▀▄▄▄ ████ +█████▀▄ ▀▀▄█ ▀▄ █▀▄▀ ▄▄▄██▄ ▄████ +████▄▀█▄ █▄ █▄█ █▄▄▄ ▀▄█▄█▄ ▀████ +████▄▄▄███▄█ █▀█ ▀█ ▄▄▄ █ ▀████ +████ ▄▄▄▄▄ █▀█▀▄ █ █▄█ █ █▀████ +████ █ █ █▀▀▀▀██▀▀ ▄▄▄▀▄ ▄████ +████ █▄▄▄█ ███▄███▀▄█▀▄ ▄█▀█ ████ +████▄▄▄▄▄▄▄█▄█▄█▄███▄██▄▄▄▄█▄████ +█████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +:::note +[Le schéma d'URI `mailto`](https://fr.wikipedia.org/wiki/Mailto) propose beaucoup d'autres options. +Consulter la RFC 6068 pour une description complèete. +::: + +Par-contre, lorsqu'on propose un patron d'e-mail, le format MATMSG semble plus utilisé, même si paradoxalement, il est moins complet. + +```sh +$ echo -n 'MATMSG:TO:ache@ache.one;SUB:Test QR-Code;BODY:Thank you for your content;;' | qrtool enc -t unicode +█████████████████████████████████████████████ +█████████████████████████████████████████████ +████ ▄▄▄▄▄ ██ ▄█▀▄▄▄█▀▀█▀ ▄▀▀▄ █ ▄▄▄▄▄ ████ +████ █ █ █ ▄▀ ▄▄▀ ▄▄██▄█▀█▄█▄ █ █ █ ████ +████ █▄▄▄█ █ ████ ▀ █ █▄▀▀███▄█▀██ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ █ █ █ ▀ ▀ █ █ █▄▀▄█ █▄▄▄▄▄▄▄████ +████ █▄ ▄▄▄██ █▀ ▀ ▀▄█▀█▀ ▀▀██▄▄█ ▄ ▄▄▀▀████ +████▄█▄▄ █▄█▄▀▄█▄▀▀ ▄█▀ ▀█▀▄█▄▄▀▄▄▄▀▀▄▄▄▄████ +████ ▄▄▄▀▄▄ ▀ ██▀ █▄█▄▄▄▄▀█ ▀█ ▀▄▀ █▀▀█████ +████▄▀ ▀▄▄▄▀▄▄█ ▀ ▄▄█▄█ ▄▀██▀▀▄▀▀ ▄█▀▄ █████ +█████ ▄▄█ ▄███▀ █ ▀█▄██ ▀█ ▄▄ ▄▄██ ▀▄▄ ████ +████ █▄█▄ ▄▄ ▀▄▀▀▀ █▀ ▀█▀ ▄▀ █▀▄▄▄▄▀▄███████ +█████▀▀ ▀█▄█ ██▀ ▄ ▀█ █▄█ ▄▀▀▄▄ █▀▄▀█▄ ▀████ +█████ ▄▄▀█▄▀█▀█▀▄▀ ▄█ ▀▀█▄ ▀▀ ▀ ▀█▀▄▄▀████ +████ ▀▄▀▀▄▄▄▄▀█▄▄▀▀ ▄█▀▀▀▀▀█ ▄▀ █▀█▄ █ ▄████ +████ █ ▄█▀▄ ▀▀█▀▄▀▀ ▄▄▀▄▀▀▄▄ ▄▀▀▄▄ █▀▀▀ ████ +████▄█▄█▄█▄▄ ▀▀▀█▄▀▄▄█▀▄▀▄ ▄█ ▄ ▄▄▄ ▄ ▄████ +████ ▄▄▄▄▄ █▀ ▀██▄█▄█▄▀ ▄▀▀▄▀ ▄ █▄█ ▄ ▄ ████ +████ █ █ █ █▄ ▀█ ▀█▄▀▀ █▄█ ▄▄▄ ██ ████ +████ █▄▄▄█ █▄▀█▀▄▄ █▀▄▀▄█▀ ▄█ ▄██▀▄▄█▀▀█▄████ +████▄▄▄▄▄▄▄█▄███▄▄██▄███▄███▄▄▄█▄▄▄▄▄▄██▄████ +█████████████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +### SMS + +Pour partager un format d'SMS, on utilise [le schéma d'URI sms](https://datatracker.ietf.org/doc/html/rfc5724). + +```sh +$ echo -n 'sms:+33623456789?body=texte%20du%20sms' | qrtool enc -t unicode +█████████████████████████████████████ +█████████████████████████████████████ +████ ▄▄▄▄▄ █▀█▄▄▀▀▄██ ▄▄██ ▄▄▄▄▄ ████ +████ █ █ ██▀██▄▀█▄█ ▀ █ █ █ ████ +████ █▄▄▄█ █▄██▄▄▄▀▀▄▄▄▄██ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█▄█▄▀ █▄█ ▀▄█▄█▄▄▄▄▄▄▄████ +████▄█▄█ █▄▀▀▀▄ ▀▀██ ██ ▀▀▀▄▀▀▄▀████ +████▀ ▄█▀█▄▀█ ▄█▄▀ ▄▄ ▄ ▄ █▀ ▀██ ████ +████▄▀█▀ ▀▄██▀█▄▀█ ▀ █▄ ▄ ▀█▀▀█ ████ +██████▀▀ ▄▄▀ ▄▀▀▄█▄ ▀█▄▄ ▀ ▀ █▄▄████ +█████ ██▀▄ ██ ▄▀██ █▄▀ █▄█ ▄ ▀████ +████▄▀█ ▄ ▄▀ ███ ▀ ▄█▄█▄ ▄ █▀▄▄ ████ +████▄█████▄█ █ ▄▄█ █ ███ ▄▄▄ █▀█ ████ +████ ▄▄▄▄▄ ██▀█▄▀▄█▀ █▄▄ █▄█ ▄▄▄▄████ +████ █ █ █▄▀▀▀▀▀██ ▄█ ▄▄ ▄ ▄████ +████ █▄▄▄█ █▄ █▄█▀▀█▄ ▄▀█▄ ▀▀▀▄▀▄████ +████▄▄▄▄▄▄▄█▄█▄▄█▄█▄▄██▄█████▄█▄▄████ +█████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +Un autre format existe également où plutôt que de suivre exactement la RFC 5724, le contenu du SMS est directement inscrit à la suite du numéro (avec un deux-points pour les séparer). +Je déconseille fortement de l'utiliser. Il n'est pas standard. + +```sh +$ echo -n 'sms:+33623456789:texte%20du%20sms' | qrtool enc -t unicode +█████████████████████████████████████ +█████████████████████████████████████ +████ ▄▄▄▄▄ █ ▄ ▄▄▀ ▄▀ █ ▄▄▄▄▄ ████ +████ █ █ █▀█▄▀▄█▀▀▄ █▄██ █ █ ████ +████ █▄▄▄█ ██▄▄█ ▀▄▀ ▀█ ██ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ ▀▄▀▄█▄▀ ▀▄█▄█▄▄▄▄▄▄▄████ +████ ▀ ▄▀ ▄▄█▀▄█▀ ▀ █▀ ▀▀ █▀▄▀▄ ████ +█████▄▀█ ▀▄▀▀▄▄▀█▄██ ███▄██▄▀▀█▀█████ +████▄█▄███▄█▄▄▄▄▄█ ▄▀ █▄█▀▀▀██▄ ▀████ +████ ▄▀▀▄▀▄▀▀ ▀█▄▀▄ █ █ ▄▄▄█▄▄▄████ +████▄▄▄ ▄█▄▄▀▀▄ ▄█ ▄ █▄ ▄▄▀▄ ▄▄▄████ +████▄██▀██▄ ▄▀ ▄ ▄▄█▄▄▀▄▄ ██▀▀▀████ +█████▄▄███▄█ █▀▀▄▄▀ ▄ █ ▄▄▄ █ ████ +████ ▄▄▄▄▄ █ ▀ ▀ ▀ █▀▄▄ █▄█ ▄▄ ▀████ +████ █ █ █▀▀██▄█████▀▄ ▄▀██████ +████ █▄▄▄█ █▄▀▄▀ ▀▄█ ▀ ▀▀ █▄▄█▀▄████ +████▄▄▄▄▄▄▄█▄████▄▄███▄▄██▄▄▄▄█▄█████ +█████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +On peut aussi partager un SMS vide. +L'utilisateur est ainsi invité à le remplir. + +### Partage de contact + +Si vous souhaitez juste partager un numéro de téléphone, le plus simple est d'utiliser le format W3C. +C'est-à-dire le schéma d'URI `tel` (RFC 3966). + +Extrêmement simple : + +```sh +$ echo -n tel:0623456789 | qrtool enc -t unicode +█████████████████████████████ +█████████████████████████████ +████ ▄▄▄▄▄ █ ▄▀█▄█ ▄▄▄▄▄ ████ +████ █ █ █▄▄█ ██ █ █ ████ +████ █▄▄▄█ █▄▄█▀ █ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█▄█▄▀ █▄▄▄▄▄▄▄████ +████▄▀▀ ▄▄▄▄ █ █ ▀▀ ▀ ▄▄████ +████▄▄█ ▀▄▄ ▀▄ ▀█▀████ ▄▄████ +████▄▄████▄▄ ▀▄▀▀ █▀▀ ██▄████ +████ ▄▄▄▄▄ █ ▄▀▀ ▄ █ █▀████ +████ █ █ █ ▄▀ █▀▄▄▀█▄▄████ +████ █▄▄▄█ ██ ▄██▀ ▄▄▄▀ ████ +████▄▄▄▄▄▄▄█▄██▄█▄█▄▄▄▄██████ +█████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +Sinon, on peut partager une vCard directement, mais c'est beaucoup plus lourd. +Pour plus d'information, se référer à la [RFC6868](https://datatracker.ietf.org/doc/html/rfc6868). + +Exemple : + +```sh +$ cat ache.vcard +BEGIN:VCARD +VERSION:4.0 +N:ache;;;Ing; +FN:ache +NICKNAME:ache +LOGO;MEDIATYPE=image/png:https://ache.one/res/ache.png +EMAIL:ache@ache.one +KEY;MEDIATYPE=application/pgp-keys:https://ache.one/ache.pgp +URL:https://ache.one +SOURCE:https://ache.one/ache.vcard +END:VCARD +$ cat ache.vcard | qrtool enc -t unicode +█████████████████████████████████████████████████████████████████████████ +█████████████████████████████████████████████████████████████████████████ +████ ▄▄▄▄▄ █▄▄▄ █▄ █ █▄▀▀▀█▄ ▀▀ ▄▀▄▄▀█▀▀▀ █▀ ▀▀▀ ▄▄▀█ █▄▀█ ▄▄▄▄▄ ████ +████ █ █ █▀█▀███▀ █ █▀▀ ███▄█ ██▀▄█▀▄▄█▀██▀▀ █ ▀▄ ███▄▀▄ ▀▄█ █ █ ████ +████ █▄▄▄█ █ ▄██ ▄ █ ▀▄█▀▀▄█ ▄▄ ▄▄▄ ▄██▄▄█▀▄▀▀▄▀█ █ ██▀█▄█ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ █ ▀▄▀▄█▄▀ █▄█ █▄█▄█ ▀ █▄█ ▀▄█▄▀▄▀▄█▄▀▄▀ █▄▀ █▄▀▄█▄▄▄▄▄▄▄████ +████ █▀▀ █▄▄ █▄███▄ ▀█ ▀▀▀█▀▄▀█▀▄▄▄ ▄▄▀ ▀▄█ █▀ ▄▀█▄ ▀ ▄█▀█ ▄▄ ▄▄██ ████ +████▀▄▄▄█▀▄▄▄ ▀▄▀▄█▀ ██▀▀▀██▄ ▄▄█▀▀▀▀█ ▀ ▄ █ █▄▄ ▄▀▄▀▀▀██▄██ ▄█▀▄████ +████▀▄▀▀▄▀▄▀▀██▀▀ ▄▀ ▀▄ ▀▀▀▄ ▀▀▄ ▀█▄█▄▀▀ ▄ ▄ ▄ █▄▀▀▀▀▄▀ ▄▄▄ ▄ ▀ ▄▄▄████ +████▀▄▄███▄▀▀██▄▄ ▄ ▄▀█ ▀ ▄█ ███▄██▀ ▄▀ █▀▄▄█ ▀ ▄▀▀▄ ▄██▀▀ █▀ ████ +█████▀▄▄▄ ▄ █ █ █ ▀█▀▄▀█ ▀ ▀▀▄ ▀█ ▄▄▀█▀▀▄▀▄▄▄▄▀▄█▀ ▀ ██ ▄ ▀▀ ▀█▀██████ +████ █▀▄█ ▄▀ ▄▄▀▀█▄ █ █ █▄▄▄▄█▄ ▄▄▄ █▀█▀▀ ▄▄ ████▀ ▀█▀▄▀ ▀ ▀▀▀ █▀████ +█████▀▄▄ ▄▄██▀ ▄ ▀▀▄ ▀ ▄▄▄▀▀▀█ ▄▀█▄▄▄▀▀▀ ▀▄▄▄ █▀▄█▀▀ ▀▄█▄▀▄██ ▄▀▀▄▀████ +█████▀█▄▄ ▄▀▀▀▄ ▀██▄▀▀███▄▀▀ ▄ ▀▄▄▄ ▄██▀▀█▀██▄ █▀▄█▄█▀ ▀▄▄▀▄▀▄▄ ▄▄ ▀▀████ +████▄█▀▄ █▄▄ ██ █ ▄▄▀█▀▀▄ ▄▀▀ ▀▄ ██▄▀ █▀ ▄▀█▄▀▄█ ▄█▀ ▄█▄█▄▀█▄▀▀▀██ ████ +████▀▄▄▄▀▀▄█ █▀▀▄██ █▄ ▄▀█▀ ▄▄▀▀█▄▀ ▄█▀▀█▀ ▄█ ▀██▄▄ ▄▄▀█▄▀██ ▀▄████ +█████ ▄█ █▄ ▄▄█▀ ▀▄▀ ▄ █▄▀▀▀ ▄▀▀ █ ▀█ ▀██ ██▄█▀ ▀▀█▄█ ███ ██ ▄▀█▄█▄▀████ +████ ▀ ▄ ▄▄▄ ▄▀ ▀▀▀▀█▄█ ▀▀▄█▄▀ ▄█▀ ▄▄▄ ▄█▄▄▄ ██▄▄▀██▀▀▄ ██ ▄▄▄ █▀█ ████ +████ ▀▀▀ █▄█ ▀▄▀██▄▄ █▄██ █ ▄ ▄ █▄█ ▀ ▀ ▀██ ▀ ▄█ ▀█ ▀█▄ ▀ █▄█ ▀██▀████ +████ ▄ ▄ ▄▄ ▄▀▀█ ▄▀ ▀ ▀ ▀ ▀▄▄ ▀▄ ▄ ▄ ▄█▄█▄ ▄██▀▄▄ █▄▀▄▄▀▄▄▄▄ ▄ ▄▄████ +████▀ ▀█▀█▄▀█▀ ▄▀▄ ▄▀▀▀█ █▀▀▀ ▄ █▀▀▀▄ ▄ ▄▄█▄█▄▀█▄ ▀██ ▄▄▄▄▀▀▄▀█▀████ +████▄ █ ▄▄▄██ ▀ █ ▀▀▀▄██▄█▀▄▀ █ █▀▄▄ ▄ ▄▀▄ ▀ ███▀▀▀▀██ █▄█▀ ▄▄█ ▄▀ ████ +█████ ▄ ▄▀▄█▄▄▄█▄▀▀ ██▄▀█ █ ▀ ██▀█ ▄▀█ ▄ ██ █▀ ██ ▀ ▄██▄▄ ▄▀ ▄▄▄▄████ +████▀ ▀▀ ▄▄▀ ▄█▄ ▄███ ▀▀▄▀█ ▀██▄▄▀▀▄▄ ▀█ █▄▀█▄▀▄ ▄▀█▄█ █▀▀▀██▀ ▄████ +████▀█▀██▀▄█ ▀▀▀█▀ ▄▀▄▄ █ █▄▄ ▄█▀█▄▄▄▀█▄ ▄ ▄ ▄ ▀▀█▄ ▄█▄▄▄▄▀▀ ▄ ▀▄▄████ +████ ▀ ▀ ▀▄▀ ▀▄ █▄ █ ▀█▄ ▄█▄█▀▀ ▄▄█▄ ▀▀ █▄▄ ▀▀▄ ▄▄▀▀▄▀█▄▀▀▄▄ ▀████ +████ ▀ ▀ ▄▀▀█▄▀▀▀▀█▀▀▄█▄█▄ ▄ ▀▄▀█▄█▀ ▀▀▀▀▄▀█▄▄▄▀▀▀▀ ▀ ▀▄▄▄▀▄█ ▀▄█▀ ▄████ +████▄▄▀██▀▄▀ ▀▄ ▄▀ ▄▄ ▄▀ ▀█▄▀▄▀█▄▀ █ █▀ ▀ █▀█ ▄█▀█ ▀▀▄ ▀████ █▄▀████ +████ ▀██▀█▄▀▀▄▄█▄▄▀ █▄▄▀██ ▄ █▀██▄█ ▄▀█▀▀▄▄ ▄ ▄▄▀▀█ ▀ ▀▀▄█ ▄▀▀▀█▀▀█ ████ +████▀█▄ █▄▄█▀█▄█▄▄██ ▄█ █ ▀▀ ██ ▄▀ ▄▀▀▄█ ▄▄▄ ▀▄▄██ ▀██ ▄█▄█ ████▀█ ████ +█████▄▄█▄█▄▄ ▀▄ ▀▀▄▄ ▀ ██▄▄▄▄ ▄▄▄ ██▀▄▀██▀███▀▄ █▄▄▀ ▄▄ ▄▄▄ ▀█ ████ +████ ▄▄▄▄▄ █▄▄▀██▄▀█ █▄ █ ▄ ▄▄▀▀▀ █▄█ ▀█▀▀ █▄▀ ▀▄▀▀▄▀ █ █▄█ ▄█▀█████ +████ █ █ █▄ ▄█▄▄▀▀▄▀▀▄▄█ ▄▄▄█▄ ▄ ▄▀▀▀▄█▄█ ▄ █ ██ ▄█ ▄▄▄ ██▄█████ +████ █▄▄▄█ ██▄█▀ ▀ █▀▄▀▀ ▄▀ ▀ ▄▀█▄▀▄▀█▀▀ █▀▄█ ▄▀▄▀▄ ▄▀▄▀ ▀█▄▀ ▄████ +████▄▄▄▄▄▄▄█▄██▄▄▄██▄▄▄▄▄███▄███▄█▄██▄▄▄█▄█▄▄██▄▄██▄████▄█▄▄▄██▄█▄▄██████ +█████████████████████████████████████████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +Le problème est que comme on peut le voir, c'est assez lourd. +Le format vCard n'est pas prévu pour être succinct. + +Le format [MeCard]() est certainement plus adapté et au moins aussi répandu dans les codes QR. + +```sh +$ echo -n 'MECARD:N:ache;EMAIL:ache@ache.one;URL=https¥://ache.one;;' | qrtool enc -t unicode +█████████████████████████████████████████ +█████████████████████████████████████████ +████ ▄▄▄▄▄ █ █ ▄█ ██▀ ▀ █▀██ ▄▄▄▄▄ ████ +████ █ █ █▀▄▀▀█▄▄ ▄▀ ▄▀ ▄▄▄█ █ █ ████ +████ █▄▄▄█ ██▄ ▀▄█▀▀ ▄▄█▄█ ▄ █ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ █ █▄█▄▀ █ ▀ █▄▀▄█▄▄▄▄▄▄▄████ +████ ▀ ▄▀▄▄▄█ ▄█ ▀▀▄█▄█ ▄▄█▀▄█▄▀█ ▀ ▄████ +█████▄▀ █▀▄ █▀ ▄███▀ ███▄ █ ▄██ █▀▀████ +████▄▀ ▀█▀▄ ▄█▀█ ▄█ ▀ ▄▀▄ ▀██ █ █▀████ +████ ▀ ▄ ▄▄█▄██ █▄ ▀▄█ ▄▀▀▀▄ ▄ █▀▄██ ████ +█████▄█▄▀▀▄ ▀▄█ █▀▀▀ █▀▀████▀ ███ ▄▀████ +████▄▄█▀ ▄▄█▄ ▄▄ ██▄ ▀▀▀▀ ▄█▄▀▀ ▄▀█████ +████ ▄ ▀ ▄▀▀▄▄█▄█▄▀▄▄█▀▄█ ▀ ▀ ▄▄▄▀▀████ +█████▀▄▀▄█▄ ███▀█▄▀▄▄▀█ ██▀▄█▀ ▀ ▄ ▀█████ +████▄███▄▄▄▄ ██▄ ▀▄ ▄▀██ ▄ ▄▄▄ ▀█ █████ +████ ▄▄▄▄▄ █ █▀█▄ ▄ ▄ ▀▀▀▄▀▀ █▄█ ▄ ████ +████ █ █ █▀ ▄ ▀▀█ ▄▀▄█▄██ ▄ █ ▄████ +████ █▄▄▄█ █▄▀▀▄█▄ █ ▀▄▄▀▄ ▄ ██▄ ▄██████ +████▄▄▄▄▄▄▄█▄██▄█▄█▄█▄█▄▄█▄██▄▄▄██▄▄█████ +█████████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +Le code est effectivement beaucoup plus petit. + +:::attention +Le caractère `:` dans contact au format MeCard doit être échappé. Pour cela, il faut le précéder de `¥`, comme dans l'URL de l'exemple précédent. +::: + +### Configuration Wi-Fi rapide + +Avec le préfixe `WIFI`, proposé par la bibliothèque [zxing](https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11) et supporter par Android et iPhone. + +Je traduis ici la documentation de la bibliothèque zxing, la seule référence sur ce sujet : + +| Paramètre | Exemple | Description | +| --------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| T | `WPA` | Type d'authentification ; peut être `WEP` ou `WPA` ou `WPA2-EAP`, ou `nopass` pour aucun mot de passe. Ou, omettre pour aucun mot de passe. | +| S | `mynetwork` | SSID du réseau. Obligatoire. Encadrer avec des guillemets doubles si c'est un nom ASCII, mais pourrait être interprété comme hex (c'est-à-dire `"ABCD"`) | +| P | `mypass` | Mot de passe, ignoré si T est `nopass` (auquel cas il peut être omis). Encadrer avec des guillemets doubles si c'est un nom ASCII, mais pourrait être interprété comme hex (c'est-à-dire `"ABCD"`) | +| H | `true` | Optionnel. Vrai si le SSID du réseau est caché. Notez que cela a été utilisé par erreur pour spécifier la méthode de phase 2 dans les versions jusqu'à 4.7.8 / Scanner de code-barres 3.4.0. Si ce n'est pas un booléen, il sera interprété comme méthode de phase 2 (voir ci-dessous) pour la compatibilité ascendante | +| E | `TTLS` | (WPA2-EAP uniquement) Méthode EAP, comme `TTLS` ou `PWD` | +| A | `anon` | (WPA2-EAP uniquement) Identité anonyme | +| I | `myidentity` | (WPA2-EAP uniquement) Identité | +| PH2 | `MSCHAPV2` | (WPA2-EAP uniquement) Méthode de phase 2, comme `MSCHAPV2` | + +L'ordre des champs n'a pas d'importance. Les caractères spéciaux `\`, `;`, `,`, `"` et `:` doivent être échappés avec une barre oblique inverse (`\`) comme dans l'encodage MECARD. Par exemple, si un SSID était littéralement `"foo;bar\baz"` (avec les guillemets doubles faisant partie du nom du SSID lui-même), il serait encodé comme : `WIFI:S:\"foo\;bar\\baz\";;` + +Ainsi, grosso modo, il y a 3 champs obligatoires : + +- Le champ "S" pour le nom du réseau ; +- Le champ "P" pour le mot de passe ; +- Le champ "T" pour le type de sécurité en pratique toujours "WPA" pour les particuliers. + +Et l'ordre des champs n'a pas d'importance. + +Un exemple de configuration pourrait être : + +```sh +$ echo -n 'WIFI:S:MON_RESEAU;T:WPA;P:pass123;;' | qrtool enc -t unicode +█████████████████████████████████████ +█████████████████████████████████████ +████ ▄▄▄▄▄ █▄ ▄▀█▄▄ █▄ ▄ █ ▄▄▄▄▄ ████ +████ █ █ █▄▄▀▄█▄█▀█▀ ▄▄█ █ █ ████ +████ █▄▄▄█ █▀▀▄ ▀▀▀▄▄█ ▄▀█ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█▄▀ █▄▀▄█ █ █ █▄▄▄▄▄▄▄████ +████▄█ ▀▀▀▄ ▀█▄█▄▄█▀ ▄██▀▀█ ▀▀▄▀ ████ +████ ▄▀▀ ▄▄▄█▀▀▀ ▄ █ ▄▄█ █ ▄█▀▀████ +████ ▀█▀█▄▄█ ▀▀ ▄ ▀ ▀█▀ ▀▀ ▄▀▀▄▀████ +████▄ ▀▀▀ ▄▄█ ▄▄▀▀██ █▄█▄██▄▀▀▄████ +████▄ ▄▀█ ▄█▀ ▄▀▀▄██ ▄█▄▀▀ ▄▄▀▄█ ████ +████▄▄▀▀ ▄▄▀█▀▀█ ▄ █▄ ▄▀▄█▄█ ▄ ████ +████▄▄█▄▄▄▄▄▀█▄ █ █ ▄▄█ ▄▄▄ █████ +████ ▄▄▄▄▄ █▄ ▀▄█▀██ ▀▀ █▄█ ▀█▀▄████ +████ █ █ ██ ▀▀█ █▄ ██▄▄▄ ▄▄█▄████ +████ █▄▄▄█ █▄█▀█▀█▄█ ▀▄██▄▀█▄▄▄ ████ +████▄▄▄▄▄▄▄█▄▄██▄███▄▄██▄▄▄█▄█▄▄▄████ +█████████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +### Position GPS + +Encore une fois, on utilisera un schéma d'URI, [celui de `geo`](https://en.wikipedia.org/wiki/Geo_URI_scheme)^{(en)}. + +De manière simple, ce sont les coordonnées GPS (latitude puis longitude, dans cet ordre) format numérique avec le préfixe d'URI `geo:`. + +```sh +$ echo -n "geo:48.858296,2.294479" | qrtool enc -t unicode +█████████████████████████████████ +█████████████████████████████████ +████ ▄▄▄▄▄ █ █▄▄███▄█ ▄▄▄▄▄ ████ +████ █ █ █▀▀▀█ ██▀▄█ █ █ ████ +████ █▄▄▄█ ██ ▄▄▀ ██ █ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ ▀▄▀ ▀▄█▄█▄▄▄▄▄▄▄████ +████ █ █ ▄ ▀ ██ ▄█▀ ▀█▄▀▄▄████ +█████▄ █▄▀▄▄ ▀▄ ▀▄▀▄ ▀▄ ▀█████ +████▄█▀▀█▄▄▀ ▄▄ █▀▀█▀ ▄▄▀█ ████ +████▀▄ ▀▄ █ ▄█ ▀▄ ▄█▄▄█▀█ █████ +██████▄█▄█▄█ ▄█▄▀▀█▀ ▄▄▄ █▀████ +████ ▄▄▄▄▄ █ ▄▄▄ ███ █▄█ ▄█▄ ████ +████ █ █ █▀█ ▄ ▀ ▄▄ ▄ ▀▄▀████ +████ █▄▄▄█ █▄ ▀▄▄▄█▄ ██▀ █▀▄█████ +████▄▄▄▄▄▄▄█▄█▄█▄█▄▄██▄▄▄▄▄▄▄████ +█████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +Référez-vous à la RFC 5870 pour plus de fonctionnalités. +Dans les grandes lignes, chaque paramètre est un champ séparé par un point-virgule. +Il est ainsi possible de choisir un système de coordonnées différent de WGS 84 avec le paramètre "crs", mais cela à peu d'intérêt en France. +Surtout, il est possible de préciser que l'emplacement est approximatif avec le paramètre "u" qui donne l'écart approximatif en mètre. + +Google Map utilise un format étendu avec le paramètre `q` pour « query ». +Celui-ci n'est pas introduit par un point point-virgule, mais par un point d'interrogation. +Il est ainsi possible de faire une recherche autour d'un point particulier (ou si le point de référence est 0,0 autour de votre position courante) à partir d'un champ de texte. + +:::attention +Autre spécificité de Google Map, les coordonnées GPS ne sont pinnés que lorsqu'on passe par une requête. +Ainsi pour avoir un "pin" sur Google Map, il faudra référencer l'URI: + +```sh +$ echo -n "geo:0,0?q=48.858296,2.294479" | qrtool enc -t unicode +█████████████████████████████████ +█████████████████████████████████ +████ ▄▄▄▄▄ █ ▄ ▀█ ▄██ ▄▄▄▄▄ ████ +████ █ █ █▀█ ▄▄▄█▄▄█ █ █ ████ +████ █▄▄▄█ ██ ▀▄█ █ █ █▄▄▄█ ████ +████▄▄▄▄▄▄▄█ █▄█▄▀ ▀▄█▄▄▄▄▄▄▄████ +████▄▀▄▄█ ▄ ██▄▄ █▀ ▀▀▄██▄▀▄▄████ +████▀█▀▄▀▄▄ ▀█ ▀▀█▄▀ ▀▄ ▄▄ ▀█████ +████▄ ▄▄█▄ ██▀▀▄▀ █▄█ █ ████ +████▀▄█▄▀ ▄▄█▀█▀▄ █▀▄▄▀▀ ▀█ █████ +███████▄▄█▄▄▀███ ▄ ▀ ▄▄▄ ▄ █▀████ +████ ▄▄▄▄▄ █ ▄▀ ██▀▄ █▄█ ▄█▄▄████ +████ █ █ █▀▀▀▄ ▄▄▀ ▄ █▀▄ ████ +████ █▄▄▄█ █▄███▀▀▄▄▄█ ▀▄█▀▄█████ +████▄▄▄▄▄▄▄█▄█▄█▄▄▄▄██▄███▄▄▄████ +█████████████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +``` + +J'ai pensé qu'il est utile de préciser au-vue de la position dominante de Google Map dans l'univers cartographique. +::: -- cgit v1.2.3-70-g09d2