Ce soir, je n’ai pas continué la création d’une nouvelle entité, mais j’ai fait la reconnaissance d’une entité tierce. C’est à dire que sur un ID et/ou une URL, on peut synchroniser une entité, récupérer son nom et la marquer comme connue. Bon, j’ai un petit bugg sur la recherche du nom, mais ce ne doit pas être bien grave…
Catégorie : Avancement
Avancement
Un gros travail a été fait sur la fonction de lecture des liens ainsi que sur celle qui assure le filtrage de ces liens. Le filtrage est nécessaire parce qu’il permet de retirer les liens marqués comme supprimés et donc de ne pas en tenir compte.
Une nouvelle fonction _l_fnd
est une autre fonction de lecture de liens avec filtrage mais plus dédié à l’extraction plus précise de certains liens. Elle permet d’accélérer, un peu, la récupération de certaines caractéristiques des objets.
La vue vue des liens lnk
dispose maintenant d’un filtrage de la vue plus avancé puisqu’il permet de sélectionner un type de lien et/ou de recherche un lien de/vers un objet spécifique (autre que l’objet en cours de visualisation). Ce filtrage des liens affichés sera complété plus tard avec en plus un mode de filtrage plus fin correspondant directement à la fonction _l_fnd
.
En attendant la mise en place de la possibilité de charger un nouvel objet, et plus seulement un texte, la partie affichage du mode ent
permet de créer une nouvelle entité. Mais, il n’y a que l’affichage qui marche, la création n’est pas encore fonctionnelle. Ce sera pour une prochaine fois. Il est déjà prévu notamment de pouvoir créer une entité esclave de son entité courante.
Un certain nombre de robots commencent à naviguer dans les différentes vues dont celles qui demande beaucoup de temps de calcul. Le serveur prend régulièrement une claque. Je songe à basculer par défaut l’affichage en mode non développement… ou d’interdire certains modes aux robots…
Avancement
Aujourd’hui, il y a ‘juste’ la possibilité de créer un nouvel objet à partir d’un texte que l’on transmet depuis le mode upl
. C’est une première étape avant de pouvoir ajouter des objets plus complexes comme les images…
Avancement
Ça continue pour les actions.
La suppression est effective et un lien de suppression est créé. La suppression de l’objet proprement dit qui tient compte de la présence de liens d’autres entités. C’est la réponse à la réflexion sur le blog de nebule sur la multi-entité et la suppression d’objet. On verra dans le temps si cette façon de faire est correcte.
La restauration d’un objet précédemment supprimé est fonctionnelle. L’objet est synchronisé si disponible ailleurs. Le lien de suppression est annulé.
Une nouvelle action permet de définir un objet comme étant à bannir. Cela ne le supprime pas, mais cela empêche sa synchronisation si supprimé. Son affichage est restreint en conséquence dans les mode aff
, nav
et lnk
. Lorsque banni, un lien permet d’annuler le bannissement si nécessaire. Le bannissement tient compte des liens générés par les entités puppetmaster et cerberus.
Une nouvelle action permet à l’entité propriétaire du serveur de forcer la suppression d’un objet. Là , la suppression de l’objet est effective. Cette suppression n’est possible que si l’entité en cours est l’entité propriétaire du serveur, si l’entité est connectée, si l’objet est marqué supprimé par un lien, et si l’objet est encore présent.
Les variables $sylabe_permitsynclink
et $sylabe_permitsyncobject
sont maintenant sous la coupe de nebule en tant que $nebule_permitsynclink
et $nebule_permitsyncobject
. Elles sont utilisées directement en vérification dans les fonctions _l_dl1
et _o_dl1
. Les anciennes variables ne sont plus utilisées.
Le menu de gauche sur les nœuds a été corrigé dans sa forme et sa cohérence.
Avancement
La version de sylabe posée hier soir introduit un certain nombre d’actions, même si non réellement fonctionnelles (non terminées).
Dans les actions, il y a maintenant la synchronisation des objets et des liens. Cela veut dire que, si c’est autorisé, l’entité peut synchroniser des objets dont elle n’a pas le contenu et des liens depuis des points de présence sur internet. L’entité doit être déverrouillée. Les deux variables qui contrôle les autorisations de synchronisation sont $sylabe_permitsynclink
et $sylabe_permitsyncobject
.
Chaque entité manipule des objets qui nous intéressent ou nous sont destinés. Chaque entité a ainsi de bonnes chances de détenir un objet manquant et de nouveaux liens. La synchronisation se fait donc vers toutes les entités que l’on connaît, indistinctement.
Le mode d’affichage syn
ne recevant que la synchronisation des liens et objets, il disparaît. La synchronisation apparaît maintenant dans la partie actions, en haut de la partie centrale de la page. De plus, ne se trouvant plus dans une page indépendante, c’est plus simple parce que l’on reste dans le mode qui a fait appel à la synchronisation.
La création/suppression de la définition d’un objet comme nÅ“ud est gérée comme une action et est fonctionnelle. C’est en fait un cas simple qui ne nécessite respectivement que l’ajout un lien de type f
ou x
vers l’objet nebule/objet/noeud
.
Les actions de commenter un objet, le protéger et le supprimer sont ajoutées mais sont non fonctionnelles.
Le mode d’affichage des entités ent
a été modifié. Il soufrait de gros problèmes de performances et de pertinence du contenu.
Il y a des problèmes de performances concernent le mode d’affichage des liens lnk
. Je regarde pour résoudre ça…
Avancement
Ce soir, j’ai corrigé un petit bugg de la fonction _l_lsx
. Les liens de type x
n’étaient pas correctement pris en compte. Pour résoudre ce bugg, j’ai ajouté la possibilité d’afficher en mode lnk
les liens avec ou non le tri/filtrage. Le filtrage est justement assuré sur les liens de type x
…
Maintenant, les liens de type x
sont parfaitement gérés.
Le mode d’affichage des liens lnk
propose aussi maintenant la possibilité de supprimer un lien (sauf un de type x
). C’est en fait la génération d’un lien de type x
correspondant au lien à supprimer.
Les boutons OK/NOK sont maintenant fonctionnels même si il se peut que ce système change un peu. Si OK avait été sélectionné pour un objet, le lien apparaît sur fond vert. Le sélectionner sur fond vert revient à le supprimer.
Un affichage un peu plus user-friendly des modes est en place sur activation de la variable sylabe_hidedevmods
. Cet affichage masque les modes plutôt techniques. Il n’est pas activé pour le moment, on est en pleine expérimentation…
Avancement
Il y a eu hier soir quelques petits arrangements cosmétiques mais aussi une grande avancée. Désormais, la librairie php de référence pour nebule sait écrire les liens qu’elle génère ou qui lui sont envoyés. Cela est conditionné par une nouvelle variable nebule_permitwrite
. C’est important parce que maintenant on peut écrire les liens que l’on génère et ainsi commencer à interagir via cette interface sur les liens et objets.
Voici un aperçu des modifications, avec une entité déverrouillée. On peut voir la création d’un lien nebule suite à l’utilisation du lien web nommé ‘OK‘ :
Un système d’actions est mis en place pour réaliser et traiter la création d’un lien qui nécessite un pré-traitement. Ce sera nécessaire aussi pour des actions qui nécessiteront la génération de plusieurs liens ou la modification d’objets, et donc la génération de nouveaux objets. On en est pas encore là .
A noter aussi l’apparition d’un mode d’affichage hlp
, pour de l’aide en ligne. Il n’est pas encore utilisé.
D’un autre côté, on réfléchit avec Diana sur une autre façon d’implémenter l’équivalent du like (OK/NOK ou d’accord/pas d’accord). Ce pourrait être simplement des émoticônes plus expressives et plus nombreuses renvoyant à des objets spécifiques de nebule. Ces objets ont bien sûr toutes les caractéristiques pour devenir des nÅ“uds.
Avancement
Le menu de gauche reprenant les entités connues a été corrigé. Il est maintenant synchronisé avec le mode d’affichage des entités. CF http://stephane.nebule.fr/?mod=ent.
La visualisation de ce mode est assez longue. La dernière catégorie d’entité est assez pénible à remplir. D’ailleurs, elle n’est peut-être pas très utile en pratique.
Deux nouveaux liens, non fonctionnels, pointent pour chaque objet vers un moyen rudimentaire de donner une importance à un objet. C’est un peu une sorte de like… et dislike.
Cela permettra la génération d’un lien de type f
depuis au choix :
– l’objet nebule/objet/jaime
– l’objet nebule/objet/jaimepas
Rien n’est vraiment figé pour le moment, c’est plus une idée qui est à approfondir.
Avancement
Aujourd’hui, j’ai passé pas mal de temps dans le code. Mais rien de bien révolutionnaire, j’ai fait beaucoup de ‘cosmétique’ et d’épuration de certaines parties du code, notamment dans l’affichage des liens (mode lnk
).
Cela a été aussi l’occasion de réfléchir sur certaines façons de faire des liens dans nebule. Voir 1 et 2.
Voila ce que à quoi ça ressemble : http://stephane.nebule.fr/?mod=nav&obj=3080591671e1ee1e080a48118b7329f8e3256b8dda83c57e820bbd4b5ceeec88
Avancement
La signature de lien marche chez moi avec la fonction openssl_sign
. Ça me permet d’avancer le temps de trouver à faire marcher convenablement la fonction openssl_private_encrypt
.
Il est maintenant possible de faire générer des liens par sylabe en interne, mais aussi via des liens. Ça permet de mettre en place des liens web qui activeront, si sélectionnés, la créations de liens nebule. Le tout en revenant directement à la même page. Cette création à distance est conditionnée par une variable de verrouillage $nebule_permitcreatelink
.
Ensuite, Diana m’a créé de nouvelles icônes pour l’affichage des liens dans sylabe. Les voici :
Merci :-)
Il ne me reste qu’Ã les refaire au propre…
Avancement
Finalement, les avancées sont satisfaisantes, je mets donc en ligne la nouvelle version de sylabe sur les deux entités disponibles aujourd’hui :
– stephane.nebule.fr
– zulu.nebule.fr
Par contre, il faut être un peu patient lors du chargement des pages, il va falloir faire quelques optimisations…
Avancement
Le code de sylabe à progressé sans cesse même pendant mes vacances, mais les versions intermédiaires ne sont pas encore assez stables pour être mise en ligne.
En changements récents, je mettais en place le Téléchargement et suivi de liens u et suite avec notamment un fichier .htaccess . Mais suite à la réflexion Echanges via http – suite, j’enlève tout ça pour revenir à une solution finalement plus simple…
Il faut attendre encore un peu pour une mise en ligne…
Avancement
Hier soir, j’ai appliqué les modifications d’arborescence proposées dans le précédent post Arborescence sur serveur web.
Tous les serveurs web qui héberge une copie de sylabe ont été modifiés en conséquence, c’est à dire :
Ces sites sont un peu lents dans le traitement de sylabe parce que la validité des liens est vérifiée systématiquement pendant le traitement, y compris la signature… On s’assure ainsi que les liens sur le serveur sont valides, mais c’est beaucoup plus lent. Ce comportement ne sera pas forcément celui par défaut plus tard.
Avancement
Le code n’est pas publié ce soir puisque cela n’a pas encore d’intérêt, mais la fonction _l_lsx
sait maintenant supprimer les liens qui ont un lien similaire mais en x
, ainsi que les liens x
aussi. Ainsi, a notion de suppression de lien devient fonctionnelle dans sylabe.
Par contre, seuls les liens x
générés par la même entité signataire sont pris en compte. Il faudra ajouter une sorte de pondération social pour accepter ou non la suppression d’un lien par une entité tierce. C’est à dire gérer les relations de confiances…
Par la suite, on va pouvoir gérer les liens de type u
. Et en particulier la mise à jour de code php. On doit pour cela savoir suivre les mises à jours de ces codes, mais aussi de tenir compte de suppressions de ces mises à jours, en cas de problème…
Avancement
Aujourd’hui, correction de quelques petits buggs sur le code de index.php
, pas d’évolution.
Dans la vue obj, les objets sont maintenant affichés dans l’ordre alphabétique. C’est un peu plus facile pour retrouver un objet… Mais vue la quantité d’objets, ce n’est certainement pas la vue la plus intéressante. Côté performance, la lecture des objets ainsi que leur réorganisation prend environ une seconde alors que leur affichage reste de l’ordre de la minute pour environ 9000 objets. Il faudra peut-être supprimer l’affichage du type et du nom de chaque objet pour revenir à des temps plus raisonnable… CF http://zulu.nebule.fr/sylabe.php?mod=obj
Avancement
Les images des logos nebule et sylabe qui apparaissent dans les interfaces web ont été encodées pour être intégrées directement dans la page html. Cette méthode évite de traîner la copie de ces images vers de nouveaux sites web. Tout est dans un seul fichier php, ou trois dans le cas de sylabe.
Cependant, ce n’est pas tout à fait neutre pour les performances. Ces images qui auparavant se retrouvaient tout de suite dans le cache du navigateur, et donc n’étaient plus téléchargées par la suite, sont maintenant systématiquement re-téléchargées avec la page html.
Il est prévu pour palier ce petit problème de nébuliser plus tard ces images et simplement d’y faire référence comme objet dans le code php. On résoudra ainsi à la fois le problème de téléchargement multiple et le problème des fichiers images annexes. Il en sera de même pour les différentes petites icônes que l’on trouve un peu partout dans sylabe…
Un autre changement a été mis en place. Un changement pas très visible mais assez important.
La page par défaut d’un site web nebule/sylabe référence en fait le fichier index.php . Au lieu de simplement afficher la page par défaut de nebule, cette page commence enfin à devenir une page de démarrage à par entière. Elle peut en effet créer tous les dossiers et fichiers nécessaires à nebule et donc aussi à sylabe. Une partie du code sait télécharger l’entité bachue qui va référencer les programmes de base. Ce n’est que le début, à terme il suffira de poser ce fichier index.php spécifique à nebule pour avoir instantanément la possibilité de mettre en place sylabe ou d’autres interfaces.
L’entité bachue est destinée à gérer la diffusion des différentes implémentations de référence.
La page index.php spécifique à nebule peut appeler par défaut une interface et rester invisible. Mais elle pourra bientôt vérifier aussi que l’interface appelée (un objet nebule) n’a pas été modifiée, dès que sylabe sera intégralement nébulisé.
Cela donne par exemple la page http://stephane.nebule.fr/?bootstrap :
Si on supprime l’option /?bootstrap
du lien, on arrive aujourd’hui directement sur sylabe. Cela pourra être personnalisé.
Avancement
Cette fois-ci, la vérification de la signature des liens marche enfin !
C’est une étape importante, la première en fait, puisque c’est ce qui permet de vérifier la validité des échanges, c’est à dire les liens.
Suite à ça, on peut maintenant espérer permettre la génération de nouveaux liens, mais aussi la réception de liens déjà signés. Cette réception marche d’ailleurs, pas la génération, mais si les liens existants sont bien vérifiés, il y a encore un petit bugg qui empêche la vérification d’un lien importé. Ça progresse…
Il y a aussi des variables permettant de désactiver la synchronisation d’objet ou de liens depuis le serveur, mais aussi le transfert d’objet ou de lien vers le serveur. CF upl sur zulu :
D’un autre côté, il y a des problèmes avec certaines fonctions dans php.
La fonction hex2bin n’est pas reconnu avant la v5.4.0 alors que la fonction inverse bin2hex était déjà présente dans la v4. Il faut à la place utiliser la fonction pack (v4).
La fonction openssl_verify est bien présente depuis la v4.0.4, mais sha256 n’est pas reconnu dans les fonctions de hashage supportées avant la v5.4.8 . Il faut à la place utiliser des fonctions plus basiques comme hash (v5.1.2) et openssl_public_decrypt (v4.0.6). Les anciennes versions stables de Debian et Ubuntu incluaient déjà php en v5.3, je pense que c’est maintenant suffisamment ancien pour ne pas risquer la perte de fonctionnalité.
Donc soit on est compatible uniquement avec des versions très récentes de php, et donc adieux les versions pré-packagées pour serveur (Debian ou Ubuntu par exemple). Bienvenue à la compilation à la demande et tous les problèmes de maintenances inhérents. Soit on utilise d’autres fonctions au prix peut-être de performances moindres, c’est donc le cas pour l’instant, et ça marche :
Avancement
Je suis toujours en train d’essayer de faire fonctionner la vérification des signatures des liens. Ça ne marche pas mais ça progresse… Je corrige des erreurs au fur et à mesure.
En partant d’un exemple de signature/vérification trouvé sur internet, j’ai pu vérifier que l’ensemble est capable de le faire. C’est ajouté dans le mode log. Cela permet de savoir si le serveur fonctionne correctement et sait signer et vérifier un lien :
Puisque ce petit bout de code fonctionne, il n’y a pas de raison qu’il ne fonctionne pas ailleurs…
Avancement
Pour cette fois, c’est la possibilité de synchronisation qui a été ajouté. Cela concerne deux choses en fait.
Pour tout objet, on a un lien web dans l’interface qui permet de synchroniser les liens de cet objet sur les entités connues. Ce lien web est présent en haut de la description de l’objet et ouvre un nouvel onglet du navigateur pour afficher l’avancement de la synchronisation. La vérification de la signature des liens n’étant pas encore au point, ces liens ne sont pas inclus localement aux reste des liens.
Pour tout objet dont on ne dispose pas localement d’une copie, on peut essayer de le télécharger chez les entités connues. Ce lien web est présent uniquement avec l’alerte signalant l’absence d’un objet et ouvre aussi un nouvel onglet du navigateur. Si trouvé et valide, le téléchargement de l’objet est effectif.
Voici ce que cela donne, en haut à gauche :
Et la page de synchronisation ressemble à ça :
Les liens web dans l’interface, mais surtout cette page, ne sont accessibles que si l’entité est déverrouillée. Cela permet en principe d’éviter le téléchargement d’objets non désirés (malveillant ou autres) sur un serveur.
Avancement
Je galère avec la vérification de la signature des liens. Ces liens sont valides puisqu’ils ont été générés et vérifiés via l’implémentation de référence de nebule en bash.
En fait, je n’ai pas encore trouvé comment transmettre les différentes données à la fonction openssl_verify
, si c’est bien celle qui doit être utilisée. Les différentes erreurs qui remontent ne sont pas assez explicites. Les exemples sur le web ne m’aident pas beaucoup, tout le monde copie-colle la documentation du site de php. Et l’exemple ne marche pas.
Il y a aussi un problème de gestion de sha2 par openssl dans php. La variable OPENSSL_ALGO_SHA256
n’est pas reconnu pour php en version inférieur à la 5.4.8
(cf lien). Par défaut, c’est sha1. Par exemple, sous Ubuntu Linux 12.04, la LTS donc, on est en 5.3.10
(cf lien). Il faut passer en 13.04 pour avoir une version suffisante… alors que cela fait maintenant quelques années que l’on préconise l’utilisation de sha2 au lieu de sha1 dans tout nouveau projet!
Pour Debian Linux, ce n’est pas mieux, il faut passer en unstable pour avoir une version suffisante (cf lien). La nouvelle Wheezy ne nous aidera pas.