Forum général.général Robert, un logiciel de stockage en RAM

Posté par  . Licence CC By‑SA.
8
19
avr.
2020

Bonjour à tous,

J'ai le plaisir pour ce premier message sur le forum, afin de vous annoncer un nouveau projet de stockage clé/valeur en RAM :
https://github.com/JGarderon/Robert

"Encore un" vous dire-vous ? certes. Voyons si j'arrive à vous convaincre.

(*) Présentation de 'Robert', votre nouvel ami

Le projet se nomme ainsi pour plusieurs raisons :
- c'est un projet entièrement francophone (j'y reviendrai),
- son fonctionnement s'apparente à celui d'un "Redis-like" (stockage de valeurs, mécanique de souscription et publication, exportation / importation vers des fichiers, scripting sur la base),
- il est écrit en Rust, ce qui lui garantit une qualité minimale (sans être exempt de bugs).

Le (pré)nom "Robert" me semblait donc tout indiqué…

Je suis à l'origine de ce projet, à la suite d'une thèse pro sur le modèle RDF appliqué aux organisations et à l'information en décembre dernier.

Robert se veut être un logiciel utilisable par le plus grand nombre (du moins via telnet), de qualité, fiable et léger mais surtout maintenable facilement, même avec peu de connaissances (je ne suis pas développeur pro et j'ai toujours appris le développement seul).

Les professionnels ou personnes averties qui parcourront le code, trouveront probablement des imperfections (ouvert à tous les tickets / propositions).

J'invite à la clémence, c'est ma contribution à la communauté… :)

(*) Documentation et informations techniques

Le dépôt contient la documentation produite à partir du code source, que j'ai laissé sur GitHub.

Une fois le dépôt cloné, vous trouverez les informations dans "./target/doc/projet_robert/index.html". Il peut être mis à jour depuis la commande "cargo doc" à la racine.

Le projet ne dépend d'aucune "caisse" (module) externe. C'est voulue, afin d'éviter le serpent des dépendances, qui rend complexe la maintenance (car une dépendance peut en entraîner une autre…). Robert veut en faire moins, mais essayer de faire bien ce qu'il tente de faire ! A terme, il me semble tout de même difficile de faire sans les expressions régulières, notamment pour la gestion du texte (mais ce serait là une rare exception confirmant la règle).

(*) Développement et licence

Ce projet est entièrement écrit en Rust (Version 1.39.0), depuis Cargo. Lorsque vous avez cloné localement le dépôt, une simple commande "cargo run --release" à la racine compilera et lancera le programme (testé sous Windows 10 et Linux/Ubuntu). Celui-ci est accessible par défaut sur le port 8080 en local.

La licence est naturellement ouverte et permissive (Apache 2). L'usage de Robert est donc gratuit (et je n'ai pas de structure pour le support actuellement).

(*) Intérêts et fonctionnement

Les clients peuvent se connecter via un socket TCP et envoyer des commandes. Chaque commande se termine par un saut de ligne (\n) et est composée d'une fonction à appeler, puis de zéro, un ou n arguments. Chaque argument est séparé par un espace. Si votre argument contient un espace, il doit être entre guillemets (").

Les fonctions sont découpées en modules (voir la documentation). Toutes les commandes, les messages renvoyés comme l'ensemble de la documentation et du développement sont en français.

La base se constitue de "canaux", qui autorisent à émettre et à souscrire aux messages émis. Dès le lancement, il y a toujours un canal, nommé "défaut", qui ne peut être supprimé et reccueille les clients nouvellement arrivés. Les autres canaux peuvent être créés, édités et supprimés librement. Chaque client ne peut être connecté qu'à un canal à la fois, mais peut changer de canal au cours de la connexion.

Certaines opérations sont restreintes aux clients identifiés (il existe une fonction d'authentification, basée sur un fichier CSV ; par défaut "test" / "test").

Dans chaque canal, il existe une arborescence identique : à l'origine de chaque canal, vous pouvez définir des paires clé/valeur. Une valeur peut être un texte ; un entier positif ou négatif ; un flottant ; un booléen ou un objet qui lui même est un dictionnaire de paires clé/valeur. Il est donc possible de faire des "chemins" amenant à une valeur particulière dans l'arbre du canal (appelé la "liste").

Concernant la diffusion de messages entre clients connectés à un même canal, il s'agit d'une suite binaire quelconque. Il est possible de "capturer" un canal pour soi-même (avec aucune possibilité pour les autres d'y accéder) afin d'avoir son propre espace de stockage de valeurs, comme de restreindre un canal existant aux clients qui y sont (déréférencement).

Exemple de commande (à exécuter dans l'ordre, avec "entrée" à chaque ligne) :

définir mavar 1
obtenir mavar
altérer mavar relatif
obtenir mavar
numérique:incrémenter mavar 2
obtenir mavar
définir obj ~ objet
définir obj/mavar 5 flottant
obtenir obj/mavar
(il y a quelques dizaines de commandes de disponible au total, couvrant le spectre essentiel des opérations)

Les lignes en retour commencent toujours ainsi :
- [+] : commande terminée et positive ;
- [-] : commande terminée et négative ;
- [@] : commande toujours en cours, message à destination du client ;
- [!] : commande toujours en cours, une erreur est survenue.

Facile à parser donc.

(*) Travaux en cours

Le programme est opérationnel, fonctionnel, sauf pour la partie script (mais cela n'interfère pas avec le reste).

J'ai commencé voilà plusieurs mois ce travail, et puis quelques semaines le développement actif. Actuellement j’intègre un outil de script qui ressemble beaucoup aux commandes fournies par les clients : Cerise (et l'implémentation s'appelle Tomate, parce que "tomate-cerise"… #honte).

C'est un DSL que je dirais "hybride", moitié API, moitié DSL classique. En somme il y a un arbre à résoudre, mais ce dernier est TRÈS restreint (volontairement). Le but est de rapprocher l'outil de script dans l'esprit des filtres d'IndexedDB dans Firefox : un même script, rapide et qui n'échoue pas, qui sera exécuté pour chaque valeur dans une partie de l'arbre du canal.

Chaque ligne du script commence par un opérateur "+" (positif), "-" (négatif), "ø" (inconditionnel). Cet opérateur permet au moteur de se baser sur un état pour savoir si la ligne sera exécutée ou non. Cet état est à l'origine à "vrai" et si une ligne échoue ou modifie l'état, la suivante se basera sur celui-ci pour sa propre exécution.

Il est possiblement de "diverger" un bloc d'instructions avec une condition d'état, puis de faire "converger" de manière conditionnelle ce bloc vers son parent immédiat qui continue alors son exécution.

A terme, il sera possible d'avoir des scripts qui seront appelés durant l'exécution, ce qui permettrait des boucles ainsi que de la définition de fonctions.

Rappel : un script dans ce contexte, ne gère que la valeur de la base qui lui est soumis, et ses enfants s'il y en a.

Cela ressemble à ça :

    + type:texte 
    ø état:sauvegarder
    ø afficher 
    ø état:recharger
    + afficher "c'est bien un texte" 
    - afficher "c'est autre chose" 
    - ràz
    ø diverger 
        + afficher "je ne sais à rien" 
        ø converger
    ø afficher "stop" 

Sur la filiation de ce DSL, je dirais qu'il se situe entre plusieurs choses que j'aime bien: le café du matin, les bouquins sur (Common) LISP, le lambda-calcul, ma douche… et TCL.

Les experts classeront mieux que moi :)

(*) Super, ravi(e) mais à quoi ça sert vraiment ?

Redis sert pour du stockage (très) rapide car sur la RAM (VoltDB est son équivalent en SQL). Robert s'en inspire : stockage de sessions pour un site Web, de calculs provisoires… peu importe. L'outil ne fait pas le métier (mais l'inverse si).

Ma finalité personnelle était de supporter la récursivité (pour avoir un classement pointu) et surtout l'aspect facile de l'interrogation, afin d'avoir constamment sous la main un petit outil pour injecter un peu de tout, qui communique avec d'autres personnes ou des applicatifs, et ne prenne ni place, ni ressources excessive.

La partie francophone me tient à cœur car beaucoup d'utilisateurs ne sont pas à l'aise avec la langue anglaise. C'est un frein à l'usage d'un outil et à l'informatique de manière générale. Ce n'est pas être particulièrement chauvin (même si je peux l'être parfois), mais apporter une petite pierre à la communauté du libre qui m'a gâté jusque là (Firefox, Ubuntu, LibreOffice et tant d'autres qui sont mon lot quotidien).


Pour ceux qui ont tenu jusque là : félicitations ! J'espère qu'il vous servira. Si vous y trouverez votre intérêt, forkez, partagez, commentez, utilisez… !

Julien.

  • # Après weBOOB voici ROBERT !

    Posté par  . Évalué à 3. Dernière modification le 19 avril 2020 à 20:31.

    L'auteur à mis une majuscule et utilisé le singulier pour faire croire que c'est le prénom Robert. Je ne suis pas dupe, ce nom est forcément issu de l'esprit d'un homme blanc hétéro cis-genre patriarcal qui banalise le viol et la soumission des femmes.

    Je pense qu'il est de mèche avec un sordide éditeur de dictionnaire.

    • [^] # Re: Après weBOOB voici ROBERT !

      Posté par  . Évalué à 4.

      Je… Je…

      Vous avez raison. Mea maxima culpa !

      • [^] # Re: Après weBOOB voici ROBERT !

        Posté par  (site web personnel) . Évalué à 9. Dernière modification le 19 avril 2020 à 21:23.

        Remarquable, merci pour cette présentation de ton projet !!
        perso je le verrai bien en journal, voir carrément en dépêche de première page !

      • [^] # Re: Après weBOOB voici ROBERT !

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

        La dépêche est prête :
        https://linuxfr.org/redaction/news/robert-un-logiciel-de-stockage-en-ram

        Peux tu, s'il te plait, faire une mini modif dessus (correction / ajout / ou simplement retirer et remettre un point par exemple) : ceci afin que tu apparaisses comme rédacteur, et qu'on puisse du coup d'attribuer la dépêche en tant qu'auteur ?

        Merci encore,
        Librement

        • [^] # Re: Après weBOOB voici ROBERT !

          Posté par  . Évalué à 3. Dernière modification le 20 avril 2020 à 09:21.

          C'est fait ! (quelques corrections mineures de style et l'ajout d'un lien).

          Merci beaucoup d'avoir pris le temps de la lecture et de la transformation en dépêche.

          Bonne journée à toi.

          • [^] # Re: Après weBOOB voici ROBERT !

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

            Pourrais-tu aussi décrire ce qu'est ce logiciel et à quoi il sert, pour les béotiens (dont je fais partie) ? Parce que je n'ai pas vraiment compris son intérêt. Merci.

            « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

Suivre le flux des commentaires

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