Imiter les conversations de café avec Jami

Bonjour,

Telegram a introduit la fonctionnalité de “salon” dans les groupes de discussion il y a quelques années…

Cependant, comme tout le monde ne peut pas parler en même temps, ces salons peuvent ressembler à des émissions de radio ou de télévision.

En outre, l’ergonomie est médiocre, puisqu’il faut d’abord trouver un groupe qui propose ce genre de salons, qui ne sont pas activés par défaut, puis naviguer dans les sous-menus pour trouver la fonctionnalité.

Le résultat est que les gens préfèrent souvent utiliser le chat textuel plutôt que le salon vocal, parce que le salon est caché dans les sous-menus et qu’ils n’arrivent pas à le trouver.

Une solution serait de prendre le contre-pied des salons Telegram, et de proposer de toutes petites conférences, mais très nombreuses, ce qui est d’ailleurs mieux adapté à une architecture P2P.

Chaque conférence ressemblerait à une table de café rassemblant 2 à 4 personnes.

Lorsqu’un utilisateur entre dans le café jami, le logiciel lui propose automatiquement une liste d’une dizaine de tables qui ne sont pas encore pleines, dont il peut écouter les conversations sans y participer.

Si une des conversations lui plaît, il peut s’assoir à la table et participer à la conversation.

La table n’est plus accessible en écriture lorsqu’elle atteint 4 personnes, mais elle est toujours accessible en lecture si d’autres personnes veulent écouter sans participer.

Bien que les tables puissent d’abord être présentées à l’utilisateur de manière aléatoire, un besoin de classement se fera sentir rapidement.

D’abord, on aura besoin de classer les tables par langue, puisque la conversation se déroulera en principe dans une langue déterminée.

La langue devrait pouvoir néanmoins être changée par les participants en cours de route.

De même, si la fonctionnalité “café” devenait populaire, il faudrait introduire plus de classement, afin de trouver une table sur un sujet qui nous intéresse.

Par exemple le classement “Faceted Application of Subject Terminology” (FAST).

Le classement et d’autres métadonnées devraient pouvoir être changés en cours de route par les utilisateurs.

En en résumé, chercher à faire des salons de plus en plus grand n’est peut-être pas la solution, en particulier avec une architecture P2P où chaque paire n’est pas très puissant.

Au contraire, une architecture P2P peut exceller avec un très grand nombre de mini-conférences, pas supérieures à 4 personnes, et cela peut satisfaire des besoins de sociabilité à échelle humaine.

Le cas échéant, on peut même laisser de côté la visioconférence, et se concentrer sur l’audio, pour s’assurer que même un terminal très peu puissant sera quand même capable d’héberger une conférence de 4 personnes.

En fait, si Jami est déjà capable de gérer de petites conférences de 4 personnes, il serait peut-être plus intéressant de se concentrer sur l’accessibilité de ces micro-conférences dans le logiciel, comme des tables dans un café, et non pas d’essayer de supporter un très grand nombre de participants.

Qu’en pensez-vous?

Ne serait-ce pas une évolution du logiciel intéressante?

2 Likes

A première vue, l’idée semble sympathique “sur le papier”, mais peut être extrêmement complexe à mettre en place pour les développeurs et contraignant sous différents aspects pour les utilisateurs ? …

Nous avons ouvert “une table de café jami”(essaim,swarm) appelée Jami Entraide Utilisateurs (JEU pour les intimes)

dans un “café jami” (essaim, swarm) dont le “bistrotier” (administrateur) est cafeine
Capture d’écran du 2024-08-15 09-51-03

Si vous souhaitez nous retrouver autour de cette table, vous êtes “jamicalement” invité à vous joindre à nous.
L’objet de cet essaim Francophone ouvert depuis 3 ans est de tester jami en l’utilisant et faire nos retours aux développeurs via le gitlab.

Tous les membres de cet essaim peuvent inviter des personnes, si vous souhaitez rejoindre cet essaim envoyez une demande à orevlucanje a93cc53e35092bdb3cc731fc3ec8ca72c187187c notre ID jami.

2 Likes

Questions techniques :

  1. Est-ce que le lien entre l’ID de l’essaim et son nom est sauvegardé sur les “Serveurs de nom Jami” ?
  2. Est-ce qu’on pourrait envisager d’ajouter d’autres informations en plus du nom (thème de l’essaim / confidentialité (public / privé), langue) ? ou alors à un autre niveau du système ?

Dans cas, ça serait faisable de faire ce genre d’évolution non (même si ce n’est pas la priorité du moment) ?

3 Likes
  1. Pas encore mais c’était prévu pour pouvoir simplifier la découverte de conversations publiques.
  2. si il est privé il sera pas enregistré, mais c,est possible d’ajouter des informations au serveur de nom. Ajouter un mail/tel optionel pourrait permettre d’offrir une possibilité de récupération de noms par exemple
3 Likes

Ok super, merci !! :slight_smile:

1 Like

C’est exact!

Mais réfléchissons-y tout de même!

Avant-propos

Je ne suis pas un expert SPARQL, donc soyez indulgents…

Requête SPARQL locale

Supposons que vous ayez une base de données RDF légère sur votre ordinateur, par exemple tracker3.

Ajoutez votre propre table de café à votre base:

PREFIX schema: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

## Suppression de la précédente version de la table, si elle existe

DELETE DATA 
{
    GRAPH <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/rdf-source>
    {
        <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/public/meeting/2024-08-15T14:00:00Z> ?p ?o .
    }
}

## Création d'une nouvelle version de la table

INSERT DATA 
{
    GRAPH <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/rdf-source>
    {
        <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/public/meeting/2024-08-15T14:00:00Z> 
            schema:name <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/public/profile/name.txt> ;
            schema:image <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/public/profile/img.jpg> ;
            schema:inLanguage <jami://916fea7fe3b6111464e2a961a46742406a3ae2b8/public/profile/default-language.txt> ;
            schema:maximumVirtualAttendeeCapacity 4 ;
            schema:remainingAttendeeCapacity 3 ;
            schema:dateReceived "2024-08-15T14:00:00Z"^^xsd:dateTime ;
            schema:endDate "2024-08-15T16:00:00Z"^^xsd:dateTime .
    }
}

Requête SPARQL sur un swarm publique

Maintenant, comment déclarer votre table sur le réseau?

Supposons un swarm assez grand, réunissant par exemple tous les francophones du réseau.

Postez la requête SPARQL sur ce swarm.

Évidemment, les destinataires ne peuvent pas exécuter la requête SPARQL directement, car plusieurs informations doivent être modifiées ou vérifiées, et cela poserait des problèmes de sécurité.

Premièrement, la source rdf indiquée par l’instruction GRAPH ne peut pas être celle de l’expéditeur.

En effet, un destinataire va modifier sa source rdf locale dans sa propre base de données, et non celle de l’expéditeur.

Donc dans l’instruction GRAPH, il va modifier l’id de l’expéditeur par sa propre id.

Deuxièmement, il doit vérifier si l’expéditeur a bien le droit de modifier les propriétés de cette table de café.

Pour déterminer ce droit, la règle la plus simple est que l’expéditeur ne peut modifier que sa propre table.

Par conséquent, le destinataire vérifie que les ID des autorités correspondent bien à l’ID de l’expéditeur.

Après avoir effectué toutes ces modifications et vérifications, le destinataire, pourrait, en principe, exécuter la requête pour enregistrer la table de l’expéditeur dans sa base de données.

Mais cela doit être absolument proscrit, puisque la requête SPARQL pourrait contenir des requêtes malicieuses.

Modèles de requête SPARQL pré-enregistrés localement et exécutés localement

Toutes les requêtes SPARQL utilisées pour enregistrer des tables de café ont à peu près la même structure.

Des modèles de ces requêtes peuvent donc être pré-enregistrés localement et identifiés sur le réseau par un code.

L’expéditeur peut donc envoyer uniquement le code d’identification de sa requête, et non la requête elle-même, à charge pour le destinataire de construire la requête SPARQL correcte à partir de l’id de l’expéditeur, de sa propre id, des paramètres du swarm et de ses propres paramètres locaux.

Un modèle de requête SPARQL pourrait ressembler à ça:

PREFIX schema: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

DELETE DATA 
{
    GRAPH <jami://$RECIPIENT-ID/rdf-source>
    {
        <jami://$SENDER-ID/public/meeting/2024-08-15T14:00:00Z> ?p ?o .
    }
}

INSERT DATA 
{
    GRAPH <jami://$RECIPIENT-ID/rdf-source>
    {
        <jami://$SENDER-ID/public/meeting/2024-08-15T14:00:00Z> 
            schema:name <jami://$SENDER-ID/public/profile/name.txt> ;
            schema:image <jami://$SENDER-ID/public/profile/img.jpg> ;
            schema:inLanguage <jami://$SWARM-ID/public/profile/default-language.txt> ;
            schema:maximumVirtualAttendeeCapacity 4 ;
            schema:remainingAttendeeCapacity $CODE ;
            schema:dateReceived "$RECEPIENT-DATERECEIVED"^^xsd:dateTime ;
            schema:endDate "$RECEPIENT-DATERECEIVED+1H"^^xsd:dateTime .
    }
}

où:

  • $RECIPIENT-ID est l’id du destinataire,
  • $SENDER-ID est l’id de l’expéditeur,
  • $SWARM-ID est l’id du swarm public,
  • $CODE est le code de l’expéditeur,
  • $RECEPIENT-DATERECEIVED est la date de réception du message,
  • $RECEPIENT-DATERECEIVED+1H est la date réception du message plus 1h.

Les codes par défaut pourraient être:

  • “3” : une table de 4 places dont 3 sont disponibles,
  • “2” : une table de 4 places dont 2 sont disponibles,
  • “1” : une table de 4 places dont 1 sont disponibles,
  • “0” : une table de 4 places dont 0 sont disponibles, ce qui signifie aussi “effacer la table de la base de données” puisqu’il est a priori inutile de conserver dans la base des tables pleines ou des tables vides (personne à qui parler).

D’autres codes pourraient être utilisés, mais certaines propriétés des tables devraient plutôt être déterminées par les propriétés des cafés (swarm), et non exprimées par des codes complexes.

Un seul octet suffit à encoder 256 types de table, ce qui est déjà considérable.

La propriété la plus important d’un swarm café est sans doute la langue.

Ainsi, en envoyant un code de table sur le swarm café d’une langue, la langue par défaut de la table est automatiquement déterminée.

Si les cafés deviennent populaires et trop grands, rien n’empêche de créer de nouveaux cafés, qui ne sont rien d’autres que des swarms dans lesquels on s’échange des codes de table, et d’ajouter d’autres propriétés, comme des noms propres aux cafés, ou des sujets de prédilection (propriété: foaf:topic).

La table de l’hôte: un swarm privé

La vie classique d’une table de café est:

  • création d’une requête SPARQL et enregistrement de la table de l’hôte dans sa propre base de données,
  • envoi d’un code de table sur le swarm café approprié (notamment la langue),
  • réception et conversion par les destinataires du code de table en requête SPARQL sur la base des modèles pré-enregistrés, et enregistrement de la table dans la base de donnée du destinataire (nota: plusieurs tables peuvent être enregistrées à travers une même requête),
  • affichage des cafés et des tables dans l’interface Jami des hôtes et des destinataires,
  • connexion de destinataires à un café puis à une table,
  • des codes de mise à jour de la table sont envoyés automatiquement par l’hôte au café, afin de renseigner au swarm café le nombre de places disponibles à sa table,
  • si la table n’est pas mise à jour dans le café au bout d’une heure ou si l’hôte envoie le code “0” au café, la table est supprimée, c’est-à-dire que les pairs du swarm ont une routine qui nettoie automatiquement les tables vides ou pleines du café.

Bases de données RDF pour reconnexion des paires après déconnexion de l’hôte

Les Bases de données RDF, dites triplestores, sont très utiles pour stocker et partager des métadonnées.

Une métadonnée très utile à partager à une table serait la liste ordonnée des id des hôtes secondaires (sous forme d’IRIs), ce qui permet aux participants de se reconnecter immédiatement en cas de déconnexion de l’hôte principal.

Sécurité

Les swarm cafés ont une politique de sécurité un peu différente des swarms traditionnels.

Ils n’échangent que des codes de tables.

Ces codes ne sont pas destinés à des êtres humains, mais à des programmes.

Par ailleurs, les pairs peuvent être connectés à des toiles de confiance, afin d’accepter ou de rejeter les connexions et les codes dans les swarm cafés.

Les toiles de confiance permettraient de signaler aux autres les pairs qui flood le swarm café, envoient des codes faux ou erronés ou qui ont un comportement non-humain aux tables (connexions extrêmement courtes, connexions simultanées ou successives à un très grand nombre de tables par unité de temps, connexion audio sans envoi de son, etc.)

Ainsi, les cafés pourraient s’autoréguler sans besoin d’un point de contrôle central.

Il peut exister des swarm cafés publiques (ouverts et sans administrateur) semi-publiques (ouverts et avec un administrateur) ou privés (fermés).

Bonjour @Sylvain1 :slight_smile: Bon début de réflexion :wink: mais c’est là que vous nous (@verojean) perdez :wink::slight_smile:

Nous ne connaissons rien à l’informatique … Par contre si vous souhaitez porter votre contribution à la connaissance des développeurs de gnu jami, à notre avis le mieux c’est de le faire ici : savoirfairelinux · GitLab

Si vous n’obtenez pas de réponses ou retours concrets sur votre proposition sur ce forum.

1 Like