Zaibu, une alternative libre pour les amateurs de dégustation

Posté par  (site web personnel) . Édité par Nanawel, BAud et Ysabeau 🧶. Modéré par Benoît Sibaud. Licence CC By‑SA.
36
19
fév.
2025
Base de données

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.

Logo de Zaibu

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.

capture d'écran du menu principal de l'interface mobile

capture d'écran du formulaire de saisie de dégustation de bière de l'interface desktop

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

  • # Sans intelligence et sans artifice

    Posté par  (site web personnel) . Évalué à 10.

    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.

  • # Photo de l'étiquette

    Posté par  . Évalué à 3.

    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.

  • # Reste foule

    Posté par  (site web personnel) . Évalué à 6.

    Je vois dans le README:

    le simple accès à une page *.delete.sql permet de suppprimer un élément via une simple requête GET si celle-ci contient un paramètre id

    Ç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  (site web personnel) . Évalué à 3.

      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  (site web personnel, Mastodon) . Évalué à 1.

        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  (site web personnel) . Évalué à 4.

          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  (site web personnel, Mastodon) . Évalué à 2.

            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  . Évalué à 5.

      Non, ça devrait être DELETE.

      • [^] # Re: Reste foule

        Posté par  (site web personnel) . Évalué à 3.

        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.

      • [^] # Re: Reste foule

        Posté par  . Évalué à 1.

        La méthode DELETE n'est pas supportée par les formulaires HTML…
        Il faut choisir entre "sémantique HTTP pure" ou "pas de javascript" mais aujourd'hui, ce n'est pas possible d'avoir les deux malheureusement !

  • # j'adore

    Posté par  . Évalué à 4.

    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  (site web personnel) . Évalué à 3. 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  . Évalué à 4. Dernière modification le 19 février 2025 à 20:47.

        Bien vu

        10 en case à cocher + saisie libre ?

        • [^] # Re: j'adore

          Posté par  (site web personnel, Mastodon) . Évalué à 2.

          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.

        • [^] # Re: j'adore

          Posté par  . Évalué à 2.

          De l'auto-complétion avec proposition ?
          Quand je vois la vitesse avec laquelle Google Maps complète les adresses, dès les premières lettres saisies, et avec justesse quasiment à chaque fois (même quand on fait des fautes de frappe !), alors qu'il y a des millions de lieux dans le monde, c'est sidérant, on doit pouvoir le faire avec quelques milliers de cépages, non ?

          • [^] # Re: j'adore

            Posté par  (site web personnel, Mastodon) . Évalué à 1.

            Le fonctionnement de SQLPage actuellement fait qu'il n'est pas simple d'ajouter de l'interactivité aux pages. On reste sur du GET/POST simple avec rendu côté serveur.

            Je ne dis pas que cela serait impossible, mais ce n'est pas si simple et cela viendrait à l'encontre de la simplicité que je cherche à conserver.

  • # Quantité d'alcool ingéré ?

    Posté par  . Évalué à 1.

    Très chouette appli, avec des bonnes bases. J'avais aussi commencé à tenir en note mes bières préférées, mais comme tu dis, ça devient vite illisible, une note Google Keep.
    Est-ce que c'est possible, ou envisageable, d'ajouter une ligne "Quantité bue / Grammage d'alcool ingéré" ?

    • [^] # Re: Quantité d'alcool ingéré ?

      Posté par  (site web personnel, Mastodon) . Évalué à 1.

      Merci 🙂

      Est-ce que c'est possible, ou envisageable, d'ajouter une ligne "Quantité bue / Grammage d'alcool ingéré" ?

      Ce n'est pas prévu, mais tu peux très facilement forker l'appli pour ajouter les champs que tu souhaites (et découvrir SQLPage au passage !).

  • # Le problème

    Posté par  (site web personnel) . Évalué à 3.

    C’est que quand Zaibu, z’ai plus zoif. Du coup, ce logiciel ne sert à rien.

    ——>[]

    « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.