Cette dépêche présente Zaibu, une application web auto-hébergeable permettant de conserver un journal structuré de ses dégustations de bières et de vins. Développée avec SQLPage, elle met l’accent sur la simplicité, l’indépendance et le respect de la vie privée. Contrairement aux solutions centralisées comme Untappd ou Vivino, Zaibu ne collecte aucune donnée et reste entièrement sous le contrôle de l’utilisateur.
Note : n’ayant absolument aucune compétence ni aucun talent en graphisme, le logo a été créé avec Bing Image Creator et retravaillé et vectorisé par mes soins. Je sais, çaymal.
Sommaire
L’alcool est dangereux pour la santé, même en petite quantité. Le vin et la bière, comme les autres alcools, induisent une dépendance et tuent. Il est recommandé de ne pas consommer plus de 2 verres par jour, et de ne pas boire d’alcool au moins 2 jours par semaine. Si vous avez des doutes sur votre consommation, n’hésitez pas à contacter un professionnel de santé.
Pourquoi créer Zaibu ?
Zaibu répond avant tout à un besoin très concret : garder une trace de ses dégustations de boissons (uniquement bières et vins pour l’instant) sans dépendre d’applications trop encombrées ou propriétaires qui exploitent les données de leurs utilisateurs.
Ce projet est en fait l’évolution d’un simple fichier texte mis en forme selon une structure plus ou moins régulière. Il était à l’origine partagé via Nextcloud, un service de stockage et de synchronisation de fichiers, libre et auto-hébergeable. Pour passer de ce fichier brut à une véritable application, plusieurs outils ont été utilisés:
- Makefile : un fichier de configuration pour GNU Make, permettant d’automatiser diverses tâches (ici, la conversion du fichier texte).
- Gawk : une version libre de l’outil AWK, qui lit et transforme le contenu du fichier texte pour l’adapter au format voulu.
- textql : un utilitaire en ligne de commande qui interprète des fichiers texte (CSV, TSV…) comme des tables SQL, ce qui facilite le chargement des données dans une base SQLite.
Grâce à cette chaîne d’outils, le fichier texte initial a pu être converti en une base de données exploitable, pour ensuite alimenter l’application Zaibu.
Pour ceux qui collectionnent les bouteilles comme d’autres collectionnent les timbres, c’est un outil pratique et léger, conçu pour être maîtrisé de bout en bout : le code source est distribué sous licence libre (AGPLv3), l’application est facile à héberger sur son propre serveur, et consomme très peu de ressources.
Un objectif secondaire était de tester les capacités de l’outil SQLPage pour le développement rapide d’applications de gestion de données.
Un besoin personnel
Il peut être difficile de se souvenir d’une bonne bière artisanale goûtée l’année passée ou du vin qui vous a tant plu à un mariage. Un carnet de notes ou un tableau dans un logiciel de bureautique peuvent dépanner, mais on s’y perd vite, et ce n’est pas toujours très pratique à consulter sur son téléphone quand on est en pleine dégustation.
Zaibu propose un formulaire simple où vous pouvez renseigner le nom, le producteur, le style, l’amertume, le taux d’alcool, vos impressions… Une fois la dégustation terminée, vous conservez une trace précise, consultable à tout moment. En un coup d’œil, vous pouvez comparer vos différents coups de cœur ou vous rappeler pourquoi un vin particulier ne vous avait pas convaincu.
Une occasion de tester SQLPage
Zaibu a aussi été conçu comme une démonstration technique. Il a servi de terrain d’expérimentation pour un nouvel outil, SQLPage, qui permet de créer une application web de gestion et d’affichage de données complète sans s’encombrer de milliers de lignes de code. En partant de requêtes de bases de données très simples, on obtient un site fonctionnel rapidement.
Ici il s’agit d’une application de type CRUD dans sa plus simple expression, donc parfaitement adaptée à être écrite en pur SQL. Même si certains traitements nécessitent de se creuser un peu plus la tête quand rien d’autre n’est disponible, il existe généralement une manière d’arriver à ses fins (et on découvre parfois avec bonheur des subtilités du langage qu’on ignorait !).
C’est le framework parfait pour créer rapidement ses propres outils tout en gardant la maîtrise complète de sa donnée, en utilisant une base de données que l’on peut héberger soi-même facilement.
Une approche libre et auto-hébergeable
De nombreuses applications existent déjà, mais elles imposent souvent la création d’un compte, exploitent les données des utilisateurs et monétisent leur activité via la publicité ou des abonnements. Zaibu prend le contre-pied en offrant une solution entièrement libre, légère et indépendante.
L’application repose sur SQLite, un système de gestion de base de données qui se distingue des bases de données traditionnelles comme MySQL ou PostgreSQL. Contrairement à ces dernières, qui nécessitent un serveur dédié fonctionnant en arrière-plan pour gérer les requêtes et stocker les informations, SQLite est une base de données embarquée.
Cela signifie que toutes les données sont enregistrées directement dans un fichier unique sur l’ordinateur ou le serveur où l’application est installée. Il n’y a donc pas besoin d’installer et de configurer un logiciel supplémentaire pour gérer la base de données. Cette approche simplifie considérablement l’installation et l’utilisation de l’application, surtout pour des utilisateurs qui ne sont pas familiers avec l’administration de serveurs.
Et puis bien sûr, son code est ouvert. C’est comme une bière artisanale : vous savez exactement quels ingrédients sont utilisés, comment ils interagissent, et si l’envie vous prend, vous pouvez modifier la recette pour l’adapter à vos préférences. Vous pouvez la brasser tel quel, y ajouter une touche personnelle, ou même la partager améliorée avec d’autres passionnés. Ici, tout est transparent et modifiable.
Une interface simple et accessible
Pensée pour une utilisation mobile et desktop, l’interface de Zaibu permet d’ajouter rapidement une dégustation, sans fioritures. Sur smartphone, il devient facile de consulter ses notes en magasin ou chez un caviste pour retrouver une référence appréciée ou éviter une déception.
Et maintenant ?
Zaibu est encore jeune et perfectible. L’application pourrait évoluer avec des fonctionnalités comme le partage entre utilisateurs ou l’intégration d’une base collaborative… N’hésitez pas à faire vos retours dans les commentaires !
Et si le principe vous intéresse, vous pouvez aussi découvrir Mon petit potager du même auteur et construit sur le même framework, cette fois pour suivre les récoltes de son jardin et la pluviométrie.
Aller plus loin
- Code source de Zaibu (AGPLv3) (99 clics)
- SQLPage, l'outil libre de création de d'interfaces pour SQL (MIT) (41 clics)
- Tester Zaibu en ligne (148 clics)
- Tester SQLPage en ligne (27 clics)
# Sans intelligence et sans artifice
Posté par devnewton 🍺 (site web personnel) . Évalué à 10 (+7/-0).
Je t'ai fait un brouillon de logo (à vectoriser ou filtrer) : https://codeberg.org/nanawel/zaibu/issues/1
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Sans intelligence et sans artifice
Posté par BAud (site web personnel) . Évalué à 3 (+1/-0).
superbe pinte ! disponible dans quels troquets ? Je veux la même _o/
[^] # Re: Sans intelligence et sans artifice
Posté par aplc (site web personnel, Mastodon) . Évalué à 1 (+0/-0).
Ah, je suis tellement mora mora que j'ai mis 20mn à faire le lien entre j'ai bu et le zébu !
# Photo de l'étiquette
Posté par Gawan . Évalué à 3 (+2/-0).
Hello,
L'application semble sympathique et donne envie de s'intéresser à SQLPage.
Est-ce qu'il est prévu de pouvoir ajouter une photo de l'étiquette de la bouteille ? Ça peut être utile pour ceux qui ont une mémoire plus visuelle.
[^] # Re: Photo de l'étiquette
Posté par Nanawel (site web personnel, Mastodon) . Évalué à 2 (+1/-0).
C'était pas dans ma todo-list, mais pour la partie "upload" ça peut se faire très simplement avec un input file (voir Example 10 sur cette page de la doc).
Pour la partie "affichage" depuis la BDD, j'ai pas encore trop cherché.
Une piste @lovasoa ?
[^] # Re: Photo de l'étiquette
Posté par Benoît Sibaud (site web personnel) . Évalué à 6 (+3/-0).
Dans la catégorie idée : faire le lien avec OpenFoodFacts ?
[^] # Re: Photo de l'étiquette
Posté par lovasoa (site web personnel) . Évalué à 3 (+1/-0).
Oui, on peut stocker
read_file_as_data_url
),persist_uploaded_file
).[^] # Re: Photo de l'étiquette
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
ce serait pratique pour l'œnographilie ou la cervalobélophilie :-)
respectivement, pour ceux collectionnant les étiquettes de vin ou de bière (ou les sous-bocks)
[^] # Re: Photo de l'étiquette
Posté par Voltairine . Évalué à -3 (+0/-4).
Il faut un compte Google ou Microsoft pour accèder à l'essaie. C'est pas terrible…
Pour moi, en dehors du plaisir de coder un truc, ce type d'application n'a aucun avantage par rapport à un simple carnet de notes.
[^] # Re: Photo de l'étiquette
Posté par Cyprien (site web personnel) . Évalué à 2 (+0/-0).
Si tu veux l'essayer en ligne, oui, mais si tu veux, tu peux aussi l'installer en local et l'essayer chez toi…
[^] # Re: Photo de l'étiquette
Posté par lovasoa (site web personnel) . Évalué à 2 (+0/-0).
Oui, c'est un logiciel libre, tu peux télécharger les binaires directement depuis le site web, et même le compiler toi-même sur ta machine. Pas besoin de compte où que ce soit !
https://sql-page.com/your-first-sql-website/
https://github.com/sqlpage/SQLPage
# Reste foule
Posté par devnewton 🍺 (site web personnel) . Évalué à 5 (+2/-0).
Je vois dans le README:
Ça devrait une requête POST non?
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Reste foule
Posté par lovasoa (site web personnel) . Évalué à 2 (+2/-2).
Je pense que le but ici c'est de pouvoir tout faire simplement avec son navigateur, sans javascript, sans avoir à créer une API…
[^] # Re: Reste foule
Posté par Nanawel (site web personnel, Mastodon) . Évalué à 1 (+0/-0).
Oui c'est le seul moyen que j'ai trouvé, mais je n'ai pas poussé l'analyse très loin j'avoue.
Après quand j'ai commencé à coder sur SQLPage, le framework n'était pas aussi avancé qu'aujourd'hui, donc certaines parties mériteraient d'être remise au goût du jour. Il s'agit d'une preuve de concept au départ, il ne faut pas l'oublier.
@lovasoa Cela dit ça c'est ma question/requête la plus prioritaire : comment gérer la suppression de manière plus sécurisée qu'avec une simple requête GET sur une page ?
[^] # Re: Reste foule
Posté par lovasoa (site web personnel) . Évalué à 3 (+1/-0).
Honnêtement, pour ce genre d'applications, il n'y a pas de vrais problèmes avec le fonctionnement actuel.
Pour éviter de traiter des requêtes qui ne viendraient pas de la page qui contient le bouton de suppression, on peut générer un token csrf et l'inclure dans l'url de la page qui fait le
DELETE
. Mais je pense que pour ce genre d'application, c'est over-kill.[^] # Re: Reste foule
Posté par Nanawel (site web personnel, Mastodon) . Évalué à 2 (+1/-0).
Le problème en intégrant un token dans l'URL, c'est que les crawlers l'utiliseraient aussi bien que les humains.
Je sais très précisément de quoi je parle, j'ai dû bloquer l'accès à mes instances car des données "disparaissaient" inexplicablement de temps en temps, jusqu'à ce que je découvre dans les logs des accès de crawlers à des page
delete
avec des ID en paramètres…[^] # Re: Reste foule
Posté par Pol' uX (site web personnel) . Évalué à 2 (+0/-0).
Sans compter le combo destructeur facile à activer en cas de faille xss…
Adhérer à l'April, ça vous tente ?
[^] # Re: Reste foule
Posté par steph1978 . Évalué à 5 (+3/-0).
Non, ça devrait être DELETE.
[^] # Re: Reste foule
Posté par devnewton 🍺 (site web personnel) . Évalué à 3 (+0/-0).
Je préfère mes bières et mes verbes http avec du corps !
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
# j'adore
Posté par steph1978 . Évalué à 4 (+2/-0).
Tant le fonctionnel que le technique.
Quelques remarques à chaud:
- vin s/effervescent/pétillant, non ?
- cépages : ce serait bien d'avoir une liste à cocher au lieu d'un champ libre pour garder une donnée de qualité
[^] # Re: j'adore
Posté par Benoît Sibaud (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 19 février 2025 à 20:28.
https://fr.wikipedia.org/wiki/Vin_effervescent
visiblement effervescents = { perlants, pétillants, mousseux }
et sinon 210 cépages autorisés en France, dont 10 qui font 70% de la surface plantée, et des milliers de cépages dans le monde (donc une longue liste)
https://fr.wikipedia.org/wiki/Liste_des_c%C3%A9pages
[^] # Re: j'adore
Posté par steph1978 . Évalué à 4 (+2/-0). Dernière modification le 19 février 2025 à 20:47.
Bien vu
10 en case à cocher + saisie libre ?
[^] # Re: j'adore
Posté par Nanawel (site web personnel, Mastodon) . Évalué à 2 (+1/-0).
Non là c'est volontairement laissé en texte simple pour éviter la lourdeur et laisser la saisie libre.
Ça permet notamment de mettre
Mauzac (70%), Loin de l'oeil (30%)
si on le souhaite, ou tout autre format.Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.