Développement de wotmap

Plusieurs choses :

  • j’ai maintenant une image docker qui fonctionne pour lancer une noeud Cesium+. Attends quand même que @1000i100 (ou un autre dev) regarde si ca marche bien. Les lignes de commande docker sont en entête de fichier.
  • Si tu veux taper sur les noeuds existants, tu peux prendre par exemple celui du Sou (moins sollicité que celui de duniter.fr) : https://g1.data.le-sou.org/user/profile/PUBKEY/_image/avatar.png (exemple ici)
4 Likes

Espérons car pour le moment la toile est encore petite mais quand on sera 10.000 se sera pas la même :stuck_out_tongue:

Ce serait bien si on pouvait fournir dans les paramètres GET de l’url des paramètres permettant d’avoir besoin de moins de puissance, comme n’afficher que les référents, m’enfin je ne sais pas si ca demanderai effectivement moins de calcul derrière, qu’en pense tu ?

Actuellement, tout se fait côté client (à part la génération du fichier JSON). C’est le navigateur qui fait tout le travail. Je ne sais pas trop si ce serait possible de faire ça avec sigmaJS mais c’est une bonne idée. Faudra y réfléchir en effet.

1 Like

C’est aussi et surtout que le calcul des forces ne s’arrête jamais même lorsque la toile s’est stabilisée et que tout les nœuds ne bougent plus, donc si on veut garder l’onglet wotmap ouvert pour le consulter juste de temps en temps on doit garder un cœur à 100% tout le temps ça n’a pas de sens.
Du coup maintenant je met en pause une fois le calcul des forces terminé, afin de pouvoir garder l’onglet wotmap ouvert tout en faisant d’autres choses.
Idéalement se serait top que le calcul des forces s’arrete automatiquement lorsque les variations de positions des noeuds passent sous un certain seuil :slight_smile:

Faudrait que l’api Cesium+ puisse te fournir le hash de l’avatar et que tu le compare au hash que tu a en cache, mais en attendant il est préférable que tu flush entièrement ton cache d’avatars de temps a autre (par exemple une fois par semaine) car a la longue les changement d’avatar pas pris en compte ça va devenir gênant .

1 Like

@Paidge j’ai une autre suggestion : J’ai remarquer que tu attribue la couleur d’un lien en fonction de la couleur de la cible, il me semblerait plus pertinent de te baser sur la couleur de la source.

En effet en tant que membre de la communauté verte, ma certif vers toi est en bleu clair parce que tu est membre de la communauté bleu clair. Mais ce n’est pas logique, c’est moi qui est émis et signé cette certif, donc elle devrait être en vert.

J’ai lu des choses à ce sujet et apparemment rien ne permet de déterminer si le graphe est “stabilisé”. De mémoire, l’idée avait été émise de calculer le delta de la position des noeuds…Mais trop gourmand évidemment.

Justement, je me suis posé la question. Mais à la réflexion je pense que tu as raison :wink: Comme pour le flush des avatars.

Je me demandais aussi si, une fois les communautés détectées, ce serait intéressant de pouvoir filtrer communauté par communauté (mmmh, je viens d’avoir une idée : avec des checkbox, une pour chaque communauté).

2 Likes

@Paidge comment est calculée la taille des cercles ?

je croyais que c’était le degré mais je vois que Yann a un plus grand cercle que JeanF alors que leurs degrés sont identiques (102).

les détails m’intéresse, si tu peut me dire quel algo calcule cette taille et comment, merci :slight_smile:

@Paidge tiens l’export SVG n’affiche pas les avatars et ne donne que des liens droits. Ça serait cool d’avoir les liens courbés et fléchés sur l’export SVG, tu crois que c’est possible ?

Dans mon script PHP, je compte le nombre de voisins UNIQUES. C’est cette valeur que j’enregistre dans l’attribut “size” des nodes du fichier JSON. Apparemment Yann a 82 voisins directs alors que Jean n’en a que 66.

Par contre, le filtre avec le curseur utilise la méthode mygraph.degree(node.id) qui est une fonction de la librairie SigmaJS et qui retourne le degree, càd le nbre de liens (ou certifications) total qui partent et qui arrivent au nœud. Avec cette métode, on peux aussi récupérer le in-degree ou le out-degree (je pense que je n’ai pas besoin de préciser pour le coup).

Pas sûr du tout. J’avais testé une autre méthode pour afficher des images ds les noeuds et, cette fois, l’export SVG affichait les images, mais de forme carrée…Quand j’ai vu que le nouveau procédé que j’utilise n’affichait pas les images, je me disais que c’était pas bien grave. J’essaierai de voir ce qu’il est possible de faire mais ce sera tout en bas de la roadmap à mon avis.

Je ne comprend pas ta définition de voisins uniques alors. Parce que en théorie des graphes, les voisins d’un noeud sont les nœuds reliés par un arc a ce noeud, (dans un seul sens pour les graphes orientés).
Or les nombres que tu donne ne correspondent ni a leur degré intérieur ni a leur degré extérieur.

Quel est le nom de l’algo que tu utilise ? Peut etre que cet algo considère comme “voisin unique”, les nœuds reliés par 2 arcs dans les 2 sens ? Ou alors il y a une notion de centralité ?
En tout les cas ce n’est pas clair et c’est bien dommage, car je vais utiliser des screen de wotmap pour ma conf du 1er juillet, et pour l’instant je suis bien incapable de répondre a la question : que représente la taille des cercles ? :confused:

Ok pas de souci c’est déjà génial tout ce que tu a fait :slight_smile:
Ce qui importe le plus c’est qu’on sache comment est calculé ce qui est représenté !

Je pensais que le fait de mettre en gras le mot UNIQUE te permettrait de comprendre. Apparemment ce n’est pas le cas, alors je m’explique :
Si tu me certifies et que c’est ma seule certification, alors j’ai 1 seul voisin UNIQUE et mon degree est égal à 1. Si je te certifie en retour, j’ai toujours un seul voisin UNIQUE mais mon degree passe à 2.

En fait, le degree, c’est le nbre total de certifications entrantes ET sortantes. Alors que le nombre de voisins uniques, c’est le nombre de voisins uniques (y’a pte une autre expression ou alors le mot unique est peut-être en trop)

C’est plus clair comme ça ? :stuck_out_tongue:

Oui merci :slight_smile:
il suffisait de préciser que c’est la somme des demi-degrés moins leur intersection, là j’aurais compris. le mot unique est flou.

Et je sais depuis longtemps ce qu’est le degré ce n’était pas ma question :wink:

Ce que j’aime beaucoup avec cet effet de transparence, c’est que couplé avec la détection de communauté, on voit en un clin d’œil :

  • par qui on a contact avec une communauté ;
  • les communautés avec lesquelles on n’a aucun contact.
4 Likes

Oui, pendant le travail du worker, je laisse apparaître ce message avec le loader.gif qui doit tourner pour bien montrer que l’appli n’est pas figée. Une fois le calcul terminé, ce popup devrait disparaître et la wot devrait s’afficher correctement. Cela permet aux nœuds de la wot de commencer à trouver leur position finale pendant ce calcul, avant qu’elle ne s’affiche.

Si vous trouvez ce comportement “bizarre” (le popup qui s’affiche pendant le calcul de la détection de communauté), dites-moi comment vous verriez la chose :wink:

En effet, je remarque que pendant cette phase, les nœuds de la wot peuvent apparaître au survol de la souris. Je corrigerai ça dans le prochain commit.

Oui, car SigmaJS recalcule la position de tous les nœuds à chaque instant et il n’y a aucun moyen de déterminer si le graphe est à l’équilibre. D’où la mise en place du bouton pause.

Je t’avouerais que j’ai mis le lien en pensant à toi :wink:

1 Like

Dans d3.js il y a un mécanisme pour ça, je ne vois pas pourquoi il ne serait pas transposable dans sigma :wink:
le principe : il y a un coefficient d’agitation et un coefficient de friction. Le coefficient de friction fait baisser l’agitation progressivement et stabilise la visualisation jusqu’à arriver à une agitation de 0. à 0, d3 js arrête de recalculer les postions sans cesse. si ensuite on interagie avec le graphe, on remet un coup d’agitation pour que ça mette à jour les positions.

4 Likes

Merci Millicent, je n’avais pas remarqué que D3JS calculait ces coefficients. Je regarderai dans la doc de SigmaJS si y’a qqe chose d’équivalent.

Finalement, le plugin de calcul des forces n’implémente pas ce genre de choses. Par contre, un autre plugin qui uitlise le même algo de calcul des forces propose qqe chose qui s’en rapproche. Du coup, plus besoin du bouton “Pause” :slight_smile: L’inconvénient c’est qu’il faut trouver un compromis entre temps de calcul et équilibre final. Avec les valeurs par défaut, c’est pas trop mal (j’ai fait plein d’essais)
Vous en pensez quoi ? : https://duniter.normandie-libre.fr/wotmap

1 Like

En fait, il n’y a pas vraiment moyen de prédire à l’avance la fin de l’algorithme. Je ne peux donc pas afficher une barre de progression. J’ai deux paramètres :

  • Le nombre maximum d’itérations (en l’occurrence, j’ai laissé par défaut : 1000)
  • La distance moyenne de déplacement des nœuds en dessous de laquelle l’algorithme s’arrête.

Page de description du plugin ForceLink Layout

Tu peux pas afficher une barre de progression dont la valeur correspond au rapport “distance moyenne actuelle parcourue par les noeuds / distance moyenne maximum” ?

1 Like