Création d'une extension de génération de QRCode en SVG pour PostgreSQL
Avec l'aide de LLM (Claude et Llama3.1)
Un peu de contexte
Dans notre monde numérique, il est souvent nécessaire de créer des QRCodes, et c'est exactement ce à quoi nous venons d'être confronté chez Butterfly Therapeutics.
Il nous fallait une solution pour générer de manière sûr des codes uniques, et les encoder dans un QRCode au format SVG, pour de l'impression numérique...
Et qui dit assurance d'unicité et persistance, dit base de données.
Et j'avoue devenir de plus en plus fan de Postgresql, cette base de données est une vraie mine d'or, elle est open source, rapide, mutualisable, extensible... et c'est justement ca qui va nous intéressé pour la suite de l'article.
Génération de code unique
Bon pour la génération de code unique, pas vraiment de souci.
Je ne pouvais pas utiliser d'implémentation type UUIDv4 car le format (différent) est déjà défini et inchangeable.
J'ai donc fait une petite fonction qui génère le dit code tout en vérifiant son unicité dans une table...
Et le QRCode SVG ?
Il existe bien l'extension pgzint (qui m'a bien inspiré) mais elle ne génère que des QRCodes au format PNG, ce qui n'est pas toujours idéal pour les applications web ou les besoins en graphiques évolutifs...
Une collègue avait déjà bosser sur la génération de QRCode en utilisant la lib de Nayuki.
J'ai alors naturellement opté pour cet excellent [générateur de QR Code en C de Nayuki](https://github.com/nayuki/QR-Code-generator) comme base pour cette extension PostgreSQL.
Comme je le fais souvent maintenant, après quelques recherche sur le sujet pour avoir les bases, j'ai demander à mon LLM préféré (j'avoue c'est Claude en ce moment) de me faire la structure de base de l'extension.
Utilisation de l'IA pour la préparation initiale
Pour ce projet, je me suis essentiellement servie de Claude (et Llama3.1 en local lorsque je n'avais plus de crédit gratuit), pour m'aider à définir la structure du projet et à générer les fichiers de base nécessaires.
Voici comment l'IA m'a assisté :
- Définition de la structure du projet : J'ai demandé à Claude de me proposer une structure de répertoires typique pour une extension PostgreSQL.
- Génération des fichiers de base : Claude m'a créer les squelettes des fichiers clés tels que le Makefile, le fichier de contrôle, et le fichier source principal de l'extension. Cela m'a fourni un point de départ solide que j'ai pu ensuite compléter.
- Suggestions pour le contenu des fichiers : Une fois le projet terminé, je lui ai demandé de me rédiger le README.
Structure du projet
L'extension pgqrcode suit une structure standard d'extension PostgreSQL
Avec les fichiers qrcodegen.c
et qrcodegen.h
issue de la lib de Nayuki.
pgqrcode/
├── Makefile
├── pgqrcode.control
├── README.md
├── LICENSE
├── sql/
│ └── pgqrcode--1.0.0.sql
└── src/
├── pgqrcode.c
├── qrcodegen.c
└── qrcodegen.h
Pour le reste du code, je vous invite à aller sur le repo.
Code Source
Le code source complet du projet est disponible ici : https://github.com/btouchard/pgqrcode
Conclusion
Nous avons maintenant la capacité de générer nos code unique encodé dans un QRCode au format SVG.
Il reste maintenant à mettre un export en fichier pour l'imprimeur.
L'utilisation de l'IA m'a permis de travailler plus vite. J'ai pus avoir rapidement un exemple de structure d'extension, et les contenu de base (à améliorer il va sans dire).
pgqrcode est distribuer en licence MIT, à vos pull request 😀