Développement de wotmap

wotmap
graph
sigmajs

#76

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:


#77

Je me doute :wink: c’est surtout pour ceux qui nous liront ^^
Par contre, pour la taille des nœuds, y’a peut-être qqe chose de plus pertinent ? Comme les fameuses centralités. Je trouvais que le nbre de voisins directs (ça me paraît plus clair que uniques :stuck_out_tongue: ) était pertinent mais je ne suis pas un spécialiste des graphes. J’apprends au fur et à mesure.

PS : je viens de rajouter, en partant du boulot, une fonctionnalité pour afficher, dans un pop-up, les détails concernant le nœud sélectionné par le visiteur (y’a encore un peu de mise en forme à faire et/ou des infos à ajouter) .


#85

Suite au premier ticket que j’ai reçu sur le gitlab, je viens de mettre à jour la wotmap pour afficher en transparence les noeuds non reliés au noeud sélectionné. Dites-moi ce que vous en pensez : https://duniter.normandie-libre.fr/wotmap/

PS : pour le moment, ça ne fonctionne pas lorsque les avatars sont activés.
PPS : ce travail de mise à jour a nécessité 5h de développement et de recherches


#89

J’ai monté une seconde instance automatisé avec la CI/CD de gitlab.

Mais il semblerait que tu n’ai pas poussé tes derniers modif sur git.duniter.org.
Un merge en perspective :wink:


#93

Je confirme, dans l’historique de commit il y a bien le merge :wink:

Et si tu veux voir ce que j’ai fait, essentiellement c’est :

et quelques modif dans le script d’update en php


#94

Mon serveur est à nouveau en ligne. j’ai mis à jour le script PHP avec tes modifs puis je l’ai lancé. Donc les données de la wotmap (en tous cas sur mon serveur) sont à jour. Merci @1000i100

Du coup, vous en pensez quoi de cette mise à jour ? Bien ? Pas bien ? ça reste lisible pour vous ?


#95

Je suis partagé : esthétiquement je trouve ça bien et lisible, mais on y perd en fluidité vu que du coup, tout est affiché.

L’idée qui me viens :
Calculer la répartition/position des noeuds sur l’ensemble, mais afficher les voisin directe en opaque et les voisins des voisins en transparence comme actuellement, et le reste masqué, mais qui occupe quand même la place d’un point de vu placement.

Je ne sais pas ce que ça donnerais coté fluidité, mais il y a des chances que ce soit mieux, et que ça réponde au besoin de lisibilité/esthétique.


#96

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.

#98

Aujourd’hui, je remarque que le script qui interroge mon nœud duniter et le nœud Elastic Search g1.data.le-sou.org a un problème :

PHP Warning:  copy(): SSL: Handshake timed out in ./wotmap/script/update-data-sigmajs.php on line 59

ou encore :

PHP Warning:  copy(): SSL: Handshake timed out in ./wotmap/script/update-data-sigmajs.php on line 56
PHP Warning:  copy(): Failed to enable crypto in ./wotmap/script/update-data-sigmajs.php on line 56

Après quelques recherches sur Internet, j’ai modifié un paramètre de mon php.ini :

default_socket_timeout = 360

L’erreur apparaît moins souvent mais apparaît quand même.

Quelqu’un aurait une idée du pourquoi du comment ?

EDIT : après avoir remplacé https par http dans l’URL du nœud Elasic Search, ça a l’air de mieux fonctionner.


#99

Pour ceux qui ne le sauraient pas, suite aux RML12 et à la demande de @cuckooland, j’ai ajouté la possibilité d’utiliser l’historique de son navigateur pour remonter le parcours de la wot que l’on vient d’effectuer.

Sinon, aujourd’hui j’ai tenté d’améliorer le fonctionnement de la wotmap (allez voir) mais y’a encore un truk que je n’arrive pas à faire : lancer le calcul des communautés avec un worker, au chargement du site…L’idée est que ce calcul se fasse “en arrière-plan”, dans un thread à part puis mette à jour l’IHM concernant les communautés, à la fin du calcul.

J’y ai passé un bon moment cet a-m à comprendre comment ça marche et à faire des essais mais les workers javascript ne peuvent pas, si j’ai bien compris, accepter en paramètre un objet JS avec des méthodes alors que l’algo que j’ai trouvé prend ça en paramètre…Je suis donc coincé, à moins éventuellement de modifier directement le code de l’algo de Louvain.

Je sais que mon code n’est pas forcément très bien organisé car je n’ai jamais été vraiment formé à la programmation javascript mais il est bien commenté. Donc si qqu’un avait au moins une idée de la manière dont je pourrais faire ça, ça serait cool. Une dernière solution : implémenter l’algo en PHP dans mon script mais je m’en sens complètement incapable :confused:


#100

Finalement, j’ai repris le code original de l’algo de Louvain en javascript car, de cette manière, j’ai pu utiliser un worker pour le calcul de la détection de communautés. J’avais récupéré ou adapté cet algo pour qu’il soit reconnu comme plugin pour SigmaJS, mais du coup c’est ça ce qui me posait problème pour l’utilisation des workers. Vous pouvez tester cette mise à jour et me remonter les éventuels bugs/améliorations.


#102

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.


#103

A vrai dire, je pensais que la détection des communautés se ferait en arrière plan pendant qu’on navigue dans la WoT :slight_smile:


#105

Oui c’est ce que j’expliquais un peu plus haut mais, finalement, je trouvais ça pas mal que la wot commence à se stabiliser pendant le calcul. Comme ça, au moment où le popup disparaît, la wot est presque stabilisée. J’ai fait un essai pour voir si je peux faire apparaître la wot avant la fin du calcul, tout en gardant une utilisation user-friendly.

Le résultat est pas trop mal mais, du coup, les options de filtrage des communautés ne sont pas apparentes au lancement de l’application. Elles apparaissent uniquement lorsque le calcul est terminé. Je pourrais prévenir l’utilisateur que le calcul est fini via un popup éventuellement…

Vous préféreriez quoi ?


#106

Je préfèrerais une autre option : que le calcul avec popup ne démarre que lorsque l’on clique la première fois sur “Afficher les communautés” :slight_smile:


#108

Oui, je trouve que c’est mieux comme ça.
Mais tant que je ne fais pas pause mon CPU tourne à fond ?

Sinon j’ai pris le code de Louvain pour la WorldWotMap, ça marche bien, c’est cool et c’est rapide.


#109

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:


#110

Très intéressant, tuxmain !

En regardant sur la région parisienne, tout le monde n’est pas dans la même communauté. Par exemple, un certain Sauvajaune s’est localisé sur Boulogne-Billancourt, mais ne fait pas partie de la même communauté que la grande majorité des franciliens. Au vue de ses certifications, il fait partie des Lodèvois, communauté qui, si je me souviens bien, était en bord de toile à un moment. Du coup, je me dis qu’il pourrait “facilement” contribuer à rapprocher les Lodèvois du centre de la toile.


#111

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.


#112

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.