Ğexplore - explorateur d'historique de TdC en 3D

C’est un projet d’explorateur d’historique de toile de confiance en 3D. Il permettra de représenter la TdC, de la monitorer pour comprendre des dynamiques et traquer des phénomènes suspects (et de faire de jolies images, j’espère).

This project is a web of trust history 3D explorer. It will allow to represent the WoT, monitor, understand dynamics and track down suspect phenomena (and eventually produce pretty images, I hope).

Démo en vidéo

C’est encore une TdC de test aléatoire. This is still a random WoT for testing.

Ça utilise Bevy, un moteur de jeux en Rust.

Si vous avez des idées de nom qui valent mieux que cet énième ğeu de mots qu’il a fallu trouver pour nommer le dépôt…
If you have any idea for a name other than this n-th ğplay on words that I had to find in order to name the repo…

8 Likes

Je pencherai plutôt pour un nom anglais, puisqu’il n’est pas destiné à mme michu mais aux devs/techs/mainteneurs et l’anglais permet de fédérer de l’aide de tous pays.

Il sera un complément de test et de maintenance indispensable à Duniter V2.

Je suggère :

Wot Brother (jeu de mots entre Big Brother et Wot Browser).

3 Likes

Ce serait plus pour les gens qui gèrent un groupe local que pour les devs. Un outil de plus, avec WotWizard, Wotmap, G1Monit, etc. (peut-être même pour les remplacer tous)

Bonne idée Wot Brother…

Avancées :

  • Chargement de la blockchain G1 (lecture complète en quelques secondes)
  • Prise en charge des nouvelles identités et certifications (pas encore leur disparition)
  • On peut avancer et reculer dans la blockchain (application et annulation des blocs)
  • Interface générique permettant différents lecteurs de blockchain (actuellement un aléatoire et un pour l’archive JSON de Duniter)
  • Choix des couleurs

À faire :

  • Déplacements de la caméra (orbiter autour de l’identité ou du groupe d’identités sélectionné, se déplacer à la souris et avoir une fonction « vue d’ensemble » automatique)
  • Parallélisation de la spatialisation (pour fluidifier le tout) (je ne sais pas encore comment !)
  • Optimisation de la spatialisation (recalculer moins souvent les points qui bougent moins vite)
  • Meilleur rendu (avec transparence) des certifications
  • Affichage des infos des blocs et des identités
  • Implémentation plus complète de la TdC
  • Recherche d’identités, filtres
  • Coloration sur critères (degré, centralité, âge, activité, communauté…)
  • Enregistrement de l’état

Je pense que je vais d’abord me concentrer sur la TdC, pour ensuite ajouter des outils sur les transactions et Cesium+.

J’utilise egui pour l’interface graphique en widgets (les sous-fenêtres à gauche de la capture d’écran). C’est peu flexible mais très simple d’utilisation.

5 Likes

Avancées :

  • Mouvement de la caméra, sélection d’une identité et orbite autour
  • Affichage de la clé publique et du pseudo de l’identité sélectionnée
  • Optimisation (vitesse presque ×2) du layout

Prochainement : coloration des identités et certifications en fonction de critères au choix.

Quand le layout aura reçu les optimisations nécessaires pour pouvoir tourner correctement sans SIMD, une version web sera envisageable.

4 Likes

Est-ce que tu pourrais insérer dans ta scène 3D une source lumineuse qui pourrait générer des ombres afin de mieux appréhender les volumes lorsque la caméra tourne ?

Oui, je pourrais essayer une source directionnelle (comme un Soleil lointain). Mais il faudrait qu’on puisse la bouger aussi.

Sinon il existe un simulateur d’atmosphère, qui rend un ciel réaliste, avec les mouvements du Soleil, les dégradés à l’horizon, etc. basé sur des calculs physiques. Ça peut être amusant.

1 Like

Je viens d’essayer ton outil, il est très chouette !

Il faut que je me remette au Rust pour pouvoir contribuer, ça fait une éternité que je n’en ai pas fait.

Pour ceux qui veulent récupérer l’archive de la blockchain sans nœud Duniter, je rappelle l’existence de ce script qui utilise les données publiées par DataJune (ça m’a été utile pour tester).

J’ai ouvert deux tickets. S’il y a des impatients, la dépendance forceatlas2 est là : https://framagit.org/ZettaScript/forceatlas2-rs/ et vous devrez modifier le chemin vers les données, pour l’instant codé « en dur » dans le code.

1 Like

Super !

Je vais faire des tickets dans la semaine pour la roadmap.

Mais j’ai des devoirs et les exams bientôt donc pas de promesse avant un mois…

2 Likes

J’ai essayé avec toute la blockchain et parfois ça plante (tout disparaît sans erreur affichée), parfois le FPS diminue, et à la fin, on dépasse les 8000 identités (je suppose que c’est le total) et ça encombre la RAM à tel point que j’ai dû force quit sans arriver à prendre de screenshot.

Il y a un problème de NaN (probablement une division par zéro ou un mauvais accès mémoire) dans le code de forceatlas2 SIMD parallèle… Le genre de bug aléatoire qui semble disparaître quand on ajoute du debug. :grimacing:

Pour la RAM c’est embêtant, ça prend combien au total ? Je suppose que c’est les lignes des certifications qui prennent de la place, tout le reste (les identités et les données de la blockchain) ne prend pas tant de place.

1 Like

Ça remplit 16 GB de ram avant de s’attaquer au swap.

Dommage pour le bug. Ça peut aussi être un problème de conditionnement. En fonction du step que tu choisis, l’algo peut diverger et on ne s’en aperçoit que quand l’exposant arrive en bout de course.
C’est un des trucs que je reproche à forceatlas2 et que j’essaye de creuser dans jucube. J’aimerais bien trouver un moyen de voir si les variables qu’on laisse fixer par l’utilisateur sont dans la zone de convergence de l’algo ou pas.

Je viens de tester, au dernier bloc avec le layout désactivé ça prend 5% de mes 16Go, mais en activant le layout ça augmente sans arrêt. Ce n’est pas normal, faire tourner le layout n’alloue quasiment rien (quelques octets pendant l’itération) et il n’y a pas de récursion. Il faut que j’investigue… :face_with_monocle:

Edit: Ce n’est pas forceatlas2 qui remplit la RAM, mais Bevy, quand on met à jour les positions des nœuds. Reste à voir si c’est une fuite mémoire quand on dépasse un certain nombre d’éléments ou juste que ses structures de données sont volumineuses.

1 Like

Puisque la migration approche j’aimerais migrer la worldwotmap, et si possible en évitant de refaire une horreur en Python + une horreur (pire) en JS. Donc autant reprendre ce projet et refaire la worldwotmap dedans.

Il y aura trois vues différentes : géographique (comme worldwotmap), graphe 2D (comme wotmap), graphe 3D.

Je ne sais pas encore comment gérer l’interface web :

  • ne pas le gérer et faire seulement une version GTK (peut-être suffisant si la wotmap et la carte du site monnaie-libre sont migrées)
  • une version GTK et une version web avec moins de contrôles (fait plus de boulot pour maintenir deux versions de l’UI)
  • une seule version portable (mais je ne connais aucun framework GUI web+natif qui satisfasse mes critères de légèreté et d’accessibilité)
2 Likes