Parcours restreint de graph de mise à jour

Dans sylabe, la mise en place de la traduction sous forme de modules a apporté son lot de problèmes de sécurité. Les modules peuvent contenir tout un tas de code qui ne sont pas en rapport avec la traduction. Il faut interdire par tous les moyens l’ajout de code malveillant inconnu. Il est très difficile de filtrer finement ces codes pour ne garder au mieux que ce qui concerne les traduction ou au pire rejeter l’objet qui le contient. La solution retenu est de ne reconnaître que les modules signés soit par bachue, soit par l’entité locale.

Les fonctions _l_grx et _l_gr1 de la librairie en php prennent maintenant en compte un paramètre pour restreindre la recherche des liens de mise à jours (résolution du graphe des mises à jours) aux deux entités citées ci-dessus.

Mais, si fonctionnellement c’est suffisant, on va maintenant plus loin. Au lieu de ne reconnaître que deux entités, il est maintenant possible d’en ajouter plus de façon statique. On crée en quelque sorte une liste d’autorités locales. Cette liste n’est valable que sur un serveur et pour une seule instance de sylabe ou tout autre programme similaire.

Ainsi, la variable $nebule_local_authority contient une liste des entités faisant office d’autorité locale. Elle est pré-remplie par défaut avec l’entité bachue. Elle peut être complétée.

Une autre variable $nebule_curentnotauthority permet d’interdire à l’entité courante d’être elle aussi autorité locale. A false par défaut, l’entité locale peut ajouter des modules. C’est notamment pratique pour le développement puisque l’on peut faire soi-même des évolutions de ces modules. A true, l’entité locale ne peut qu’utiliser les modules par défaut présents localement.

Il est bien sûr possible de positionner ces deux variables dans les fichiers de configuration env_nebule.php et env_sylabe.php. Cependant, leur comportement est un tout petit peu différent dans le bootstrap et dans la librairie (via une application comme sylabe).

Quelques explications s’imposent pour comprendre les différences. Schéma de fonctionnement global d’une instance :

1 – Appel du bootstrap (index.php) par le serveur web.
V
2 – Exécution du script php.
3 – Lecture du fichier de configuration env_nebule.php.
4 – Recherche de la librairie nebule valide à charger.
5 – Chargement de la librairie nebule (fonctions et variables).
6 – Recherche de l’application par défaut et valide.
(actuellement, c’est sylabe)
7 – Le bootstrap charge l’application et passe la main.
V
8 – Exécution du script php de l’application.
9 – Lecture du fichier de configuration env_sylabe.php.
10 – Déroulement du script de l’application…

Lors de l’exécution du bootstrap, celui-ci n’utilise pas la session utilisateur gérée par php. Il va cherche si le fichier e existe et si c’est une entité. Il prend cette entité comme étant l’entité propriétaire de l’instance. Si avec la variable $nebule_curentnotauthority on empêche de reconnaître cette entité comme autorité, seule bachue sera autorité et donc seuls ses mises à jours seront prises en compte. Ainsi, il n’est pas possible pour l’entité locale de modifier la librairie ou le programme (sylabe) sauf si ils sont signés par bachue. Une mise à jour régulière est possible.

Lors de l’exécution de l’application, ici sylabe, l’entité locale n’est pas forcément l’entité courante. Et l’entité courante n’est donc pas forcément propriétaire de l’instance mais juste utilisatrice. Si avec la variable $nebule_curentnotauthority on empêche de reconnaître cette entité comme autorité, seule bachue sera autorité et donc seuls ses modules seront pris en compte. Ainsi, il n’est pas possible pour l’entité courante de modifier les modules. Une mise à jour régulière est possible.

En clair, l’entité locale choisit la librairie nebule et le programme à charger, l’entité courante dans le programme choisit les modules. Si cela ne leur est pas interdit.

Pour ajouter d’autres autorités, il suffit de les ajouter à la variable $nebule_local_authority dans les fichiers de configuration :
$nebule_local_authority[]='88848d09edc416e443ce1491753c75d75d7d8790c1253becf9a2191ac369f4ea';

shot-2014-05-19_12-24-40

Modification de la librairie php vers la version 1.2 des liens

La librairie en php intègre maintenant les spécificités de la version 1.2 lors de l’écriture des liens par la fonction _l_wr.

L’écriture des liens se fait aussi sur l’entité signataire avec la prise en compte de la spécificité du lien de type c lors de l’écriture. Lorsque c’est un lien de type c, seule l’objet de l’entité signataire du lien reçoit le lien. Ce fonctionnement risque encore de changer en fonction des réflexions autour de ce type de lien.

Mise en cache de validité de liens

Il faut faire attention à la mise en cache du résultat de certaines opérations. Il est très peu probable qu’un lien ou un objet soit modifié au cours du chargement d’une page. Mais la sûreté de fonctionnement de ce mécanisme de cache ne repose que sur ce principe.

Actuellement, dans la librairie en php, la fonction de vérification des liens _l_vr n’intègre pas de cache. C’est à dire que à chaque lecture de liens, ils sont revérifiés.
Si un cache devait être implémenté sur cette fonction, pour un lien définit il devrait prendre en cache l’intégralité du lien et non juste le premier champs de registre. Éventuellement, il pourrait n’intégrer que tous les champs de registre à l’exception de la signature puisqu’elle aura déjà été vérifiée.

La mise en cache de la vérification des objets utilisés _o_vr vient d’être implémentée. Le cache n’est gardé que le temps du chargement d’une page. Il ne vérifie que les objets directement intégrés à la page mais pas les objets externes comme les images. Les objets externes sont vérifiés lors de leur consultation, ce qui correspond en quelque sorte à une nouvelle page.

Mise en place de la nouvelle version dans la librairie php

Le code de la librairie en php génère maintenant les entêtes de liens en version 1.2.

Cela n’a pas d’autre influence aujourd’hui. C’est déclaratif.

Le code sera adapté rapidement pour ajouter les liens au suivi des entités. Puis plus tard l’offuscation des liens sera implémentée.

Cela n’a pas d’impact sur le comportement de sylabe notamment.

Nouvelle version nebule v1.2 – lien de type c

Comme nouveauté de la version 1.2, il y a la possibilité d’offusquer les liens afin de renforcer l’anonymisation des entités.

Pour cela, un nouveau type de lien vient d’être ajouté à la documentation : Action c – Chiffrement de lien
Autrement dit, c’est un lien de type c.

Il n’est pas encore pris en compte dans le code. Sa forme exacte n’est pas encore figée.

Nouvelle version nebule v1.2

Ça faisait quelques temps que ça mijotait. Voici donc venir la nouvelle version de nebule. Nous passons à la version 1.2 .

Une nouvelle page technique sur le wiki vient d’être créée : Documentation – nebule v1.2

Les ajout prévus pour cette nouvelle version :

  1. Modifier le comportement dans le tri des liens par rapport aux objets concernés. Désormais un objet aura aussi en liens attachés ceux qui contiennent le champs signataire=objet. En pratique, cela ne concerne que les entités. Le gain attendu est de faciliter la diffusion des actions des entités.
  2. Permettre l’offuscation de liens par la mise en place d’un nouveau type d’action. Le gain attendu est de renforcer l’anonymisation.

Tous les codes vont progressivement être modifiés pour intégrer cette version.

Supprimer un grand nombre d’objets anciens

La fonction d’oubli, bien qu’indispensable, n’est pas encore en place. Elle nécessite la mise en place préalable de la pondération sur les objets. Cette pondération est elle-même un dérivé des avis et émotions.

En attendant, il peut être nécessaire de supprimer un grand nombre d’objets anciens et qui perdent vite de la valeur avec le temps. Typiquement cela concerne les sauvegardes d’un serveur. Les sauvegardes ont une forte utilité mais seule la dernière en date a vraiment de l’importance. Tout au plus peut-on garder des sauvegardes plus anciennes pour pouvoir remonter dans le temps, au cas où. Mais si on fait une sauvegarde journalière, la plupart des sauvegardes n’ont plus d’intérêt après quelques jours, voir le lendemain.

Voici comment supprimer des objets par lot dans nebule, et surtout en bash.

1 Lister

Première étape, lister tous les objets que l’on souhaite ‘oublier’. Ici, les objets sont ceux qui font plus de 10Mo et qui sont anciens de plus de 90 jours.
Lancer :
find pub/o/ -mtime +90 -size +10M | cut -d '/' -f 3 > aSupprimer.txt

Le fichier aSupprimer.txt contient la liste des objets qui répondent aux critères. Il serait tentant de supprimer directement les fichiers, mais ceux-ci pourraient réapparaître suite à une synchronisation. Il est préférable de les marquer supprimés.

2 Supprimer

Deuxième étape, faire supprimer et marquer comme supprimés les objets précédemment listés.
Lancer :
. lib_nebule.sh
. env.sh
export nebule_publ_entite=$(cat pub/e)
export nebule_priv_entite=$(cat priv/e)
read -s -p "Mot de passe : " nebule_pass_entite
nebCheckKeyPass
cat aSupprimer.txt | while read O ; do echo $O ; _l_wr $(_l_gen 0 d $O 0 0) ; rm pub/o/$O ; done

Et voila, les objets sont supprimés et marqués comme supprimés. Le fichier aSupprimer.txt peut être lui aussi supprimé…

Ajout d’émotions sur des objets – suite 4

L’ajout des émotions sur les objets n’en finit pas d’arriver… Le code est un peu délicat à manipuler. Certaines choses doivent s’afficher dans certaines conditions et à certains endroits en fonction de l’objet que l’on regarde. C’est la suite de l’article Ajout d’émotions sur des objets – suite 3.

Les émotions supportées sont encore sujet à discussion, mais leur fonctionnement est maintenant stable.
Les émotions doivent être considérées comme des groupes, donc les objets que l’on marque avec ces émotions appartiennent en quelque sorte aux groupes d’émotions en question.
On parle ici des émotions, mais la mécanique est exactement la même pour les avis. Seul l’affichage peut varier un peu.

Quelques règles de fonctionnement :

  1. Une émotion est représentée sur un objet par un lien de type ‘f‘ de l’émotion vers l’objet, méta à ‘0‘.
  2. Une émotion sur un objet dérivé lié à l’objet en cours est un lien de type ‘f‘ de l’émotion vers l’objet dérivé avec comme méta l’objet en cours.
  3. Une émotion sur un objet dérivé, donc avec un contexte, n’apparaît pas dans le mode affichage de l’objet, même si on est sur l’objet dérivé en question.

Cela donne par exemple ce genre de vue en mode navigation :

shot-2014-04-22_20-44-57

On remarque que toutes les lignes qui disent que l’objet est de type image/jpeg ont l’émotion ‘J'approuve‘. C’est fait en une seule fois. C’est le même lien derrière qui dit que l’on approuve que l’objet soit de ce type, indépendamment de qui le dit.

Si on se place sur l’objet du milieu dans la petite conversation en cascade, on peut observer ça :

shot-2014-04-22_20-50-34

On voit que les autres commentaires sont fait dans le contexte d’un objet spécifique, un autre objet surtout. On voit aussi qu’une émotion est placée sur l’un des commentaire, cette émotion est cependant dans le contexte de l’objet en cours, ce commentaire, et non dans le contexte de l’objet dans lequel à lieu la discussion. Si on regarde l’affichage précédent, cette émotion n’apparaît pas.

Affichage des liens invalides

La librairie nebule en php permet maintenant la remontée, pour affichage uniquement, des liens invalides. C’est contrôlé par la variable $nebule_listinvalidlinks. Cette fonctionnalité ne sera pas activée par défaut parce que l’utilisateur pourrait confondre un lien compromis avec un problème de synchronisation sans gravité. Quoi qu’il arrive, la synchronisation élimine par défaut les liens invalides.

Voila à quoi cela peut ressembler :

shot-2014-04-12_15-34-58

CF : http://blog.sylabe.org/?p=481

Ajout d’émotions sur des objets – suite 3

Toujours pas de modification dans les émotions de base assumées. On reste sur la roue de Plutchik.

Par contre, la mise en place de la gestion des émotions et avis dans sylabe montre que l’utilisation des liens ‘l‘ n’est pas optimale et qu’il vaudrait mieux utiliser des liens ‘f‘ à la place. Si on change de type de liens, cela rendra caduc les objets ‘nebule/objet/emotion‘ et ‘nebule/objet/avis‘. A la place pourra être utilisé un objet méta comme une sorte de contexte du lien.
CF avancement du 11/04/2014.

Ajout d’émotions sur des objets – suite 2

Voici la suite des articles Ajout d’émotions sur des objets et suite, ainsi que de Liens d’émotions.

La liste d’émotions étant trop grande et malgré tout incomplète, il a été nécessaire de revoir l’ensemble pour le scinder. Plutôt que de réinventer la roue, un petit tour du côté de Wikipédia a permit de prendre un bon départ. La version anglaise de la page émotion est plus complète et plus intéressante.

Il y a plusieurs repères possibles pour traiter et cataloguer les émotions. On va s’arrêter sur les travaux de Robert Plutchik . Le résultat, c’est la roue de Plutchik :

Plutchik-wheel_fr.svg

Continuer la lecture de Ajout d’émotions sur des objets – suite 2

Liens d’émotions

La mise en place des émotions sur les objets appelle plusieurs questions.

Catégories

Vu le nombre d’émotions gérées, il va devenir nécessaire de les segmenter en catégories. On peut maintenir la catégorie ‘émotions‘ qui regroupe tout ressentit humain, plutôt subjectif. On peut ajouter une nouvelle catégorie ‘avis‘ pour tout ce qui est plus objectif.

Pondération

Une réflexion qui commence à dater un peu sera la mise en place d’une pondération aux objets. Cette réflexion concerne avant tout la possibilité d’oublier progressivement dans le temps les objets avec le moins d’importance. L’oublie peut être réalisé automatiquement à partir d’un certain seuil. Le seuil peut progressivement augmenter dans le temps jusqu’à un seuil maximum au dessus duquel les objets concernés seront conservés, sauf suppression volontaire.

Cette pondération peut être bien sûr utilisable en permanence pour trier l’affichage des objets.

La mise en place des émotions est le bon moment pour introduire la mise en place de la pondération. Il ne reste plus qu’à en définir les modalités.

Chiffrement

Une autre réflexion qui date un peu mais prend progressivement de l’importance, c’est la possibilité de chiffrer les liens. Le but est d’offusquer que l’on ne souhaite pas rendre publics tout en permettant leur bonne transmission aux destinataires légitimes.
Il y a plusieurs manières d’offusquer les liens :

  1. La première est de créer un objet de liens, objets que l’on chiffre ensuite vers son destinataire. Cette méthode, si elle est assez bonne en terme de performance de déchiffrement, nécessite cependant que tous les liens offusqués soient consultés en même temps que tout les liens normaux d’un quelconque objet, pour savoir si un lien secret ne le concerne pas spécifiquement. On obtient de fait un ou plusieurs objets de liens chiffrés attachés à son entité. L’inconvénient, c’est qu’il est impossible de transmettre un lien particulier à une autre entité sans devoir recréer un nouvel objet de liens chiffré.
  2. La seconde méthode est de faire du chiffrement de lien à la volée. C’est à dire qu’un lien a offusquer est chiffré et reste présent individuellement au milieu des autres liens. Cependant, ce lien va contenir un partie chiffrée, partie qui ne correspond donc pas à un objet réel, ce qui est en contradiction avec la forme actuelle des liens. L’avantage, les liens chiffrés voyagent naturellement avec les autres liens. L’inconvénient, le lien chiffré ne peut être rattaché qu’à un seul objet et à une entité. Le lien avant chiffrement fait référence à trois objets, on perd donc avec le lien chiffré la référence aux deux autres objets. Cela veut dire que le lien chiffré est valable si on consulte l’objet source, mais n’est plus reconnu si on consulte l’objet destination. Cet inconvénient risque de perturber la résolution inverse d’un arbre de mise à jour par exemple.
  3. La troisième méthode est d’exporter la partie chiffrée dans un objet en tant que tel. Cette méthode a l’avantage de profiter du mécanisme de chiffrement déjà implémenté pour les objets. Liens et objets sont transmis naturellement vers un destinataire du lien. Et on retrouve l’inconvénient de la deuxième méthode. En plus, on complexifie l’analyse des liens d’un objet puisqu’il faut aller consulter d’autres objets pendant le processus de lecture des liens, et donc d’autres liens…

La mise en place du chiffrement des liens va créer de fait une nouvelle version de nebule, la v1.2.

Ajout d’émotions sur des objets – suite

La suite de l’article : Ajout de sentiments sur des objets.

Nouvelle liste :

Contenu de l’objet ID objet Traduction
‘nebule/emotion/jaime’ eab748b4860d0046295503983e62dd0e228f3019c109a1b92fa08ff4f8e043e8 j’aime
‘nebule/emotion/jaimepas’ c8e99ab10169cca804e55601d7d36a142258516f98f66f050d6e6a48064b42f1 j’aime pas
‘nebule/emotion/daccord’ cd4ea3d3d8f5a883a183c70c6220f4e940aec30dc141c3bd9d6fd4bef71e48ad d’accord
‘nebule/emotion/pasdaccord’ 8a802c8da6a1d2bca6e5be6322db836e1eeab6373018b63c2f5363a33c0dc6b1 pas d’accord
‘nebule/emotion/content’ 4b0a16021e81fecb6d0826fcae528887366b13bfa3827ea5f516666e76255dab content
‘nebule/emotion/mecontent’ 6fc3cdf3045a102e4a3673bd275aa0d0c6755286fc7837bbb4b8014d47911c42 mécontent
‘nebule/emotion/ange’ 711e9834572990f90047119d60b99face50244c821503e8f3144afc45e4cd878 ange
‘nebule/emotion/demon’ eaea6bee6100be666b33c20f1ed0b27db45ccaac1f9e5a68ace68699a0eca9c5 démon
‘nebule/emotion/fache’ 3fb8db4d9e2c34f8b8ce7ab6189e17699d5a5348537847cbbdc91b13c2795ea5 fâché
‘nebule/emotion/joyeux’ 8fa02c09df434482d8e03cf640f9e38cc9192112b55254952f7ad5f332189c65 joyeux
‘nebule/emotion/cool’ 851aa3262613f15ab8529d5bd0c5ae9731e6f3c13977bf2b3e4bdb3881e8c4fc cool
‘nebule/emotion/malade’ 53715f876e7b1b99f3fd30fc2844fbbf0095c330517f85768c34a26d66eccdca malade
‘nebule/emotion/triste’ e8067acdc2bff25f753e16a47c21389445cad3116720eca7d96c0a94a127af75 triste
‘nebule/emotion/pleur’ 1d012502a87bff5319df1144fd34c4b7fbe5419e3661473c438654bec5aa923e pleur
‘nebule/emotion/embarrasse’ 1067be04d13efe1bce40b048d07cecedadce3cb93f9381a6dd6518561879ffa4 embarrassé
‘nebule/emotion/mortderire’ f4743808f03680cdbe93a0833747dedcc752b05bc345f6d40a7cfa770ad1515c mort de rire
‘nebule/emotion/sourire’ 3ac0bc7722ecd3577ea4f0900da73394dcd6ed89026ecc060238ffed20b692c0 sourire
‘nebule/emotion/indifferent’ fdd5af2d8cc900cfe4bdac1abc933923702dea8979ad129d6e5c91d0692fba08 indifférent
‘nebule/emotion/compatissant’ d07d249218d792894c6a29db2855ec74f3fa683c00e69f18f54c6e1f9f4f4f7c compatissant
‘nebule/emotion/surpris’ 7a082524fa239b988a6c08965cacc9744f0abdb47abed7fc05a9dccc29fec546 surpris
‘nebule/emotion/fatigue’ fc92036c0ba4fcb08e17c8feb169bfd85894651fa159bbba7a7e64caacc17ffa fatigué
‘nebule/emotion/clindoeil’ fb873b7364936f83e030f9014b3da16b8ebf3200a2041bd6f4aad5d3f93c63f9 clin d’Å“il
‘nebule/emotion/neutre’ b3943ed3e25a53bde4878908b2561c8714934a06124ce353ff053a6d55b971dd neutre
‘nebule/emotion/interesse’ 37bb4b6e73bade8ab63a9789c2e55fcd339c22324b0fdb73dbfe769f85067c30 intéressé
‘nebule/emotion/inquiet’ d70ee42f7297111aea7e0e92208d1a412534686b09126bd23553c4063026b733 inquiet
‘nebule/emotion/serein’ 3c01125b5301086b96a10268e0f8b6bbb1f61cc945a92af27071da0ef38812e2 serein
‘nebule/emotion/bon’ 4cc7d070932882316f41c2ff58718d78774d645615adc66f58f935726ed3d409 bon
‘nebule/emotion/mauvais’ a71eb2608c0fc1db599b0dd1966292fd7e875b9c066cbc475c1053abc7ac53b7 mauvais
‘nebule/emotion/beau’ e23e9897df93819b956dfc07e9af5e9969ff61ddcd342a6f9f6ba2b3de0783b1 beau
‘nebule/emotion/moche’ 63a9951625e6fd14f5e292b298b0d67876436837957a32e598f84851010fac0b moche
‘nebule/emotion/genial’ cdde23dc18a991125b18123842cff9931031595f03ed5d7c1c1bf4b93298b0fd génial
‘nebule/emotion/moyen’ bdc7d8160007fbca505c8cfa55822a9add89e595d9b999c37d205af618bb3fa1 moyen
‘nebule/emotion/nul’ 1c36d371280ae42fa065578f669bb74a22c000d1305717f115b2a87de49b41ec nul
‘nebule/emotion/heureux’ 87de40c16dff7c52192cfb98c2f7106eeb4efdb335665186775cae670df2358e heureux
‘nebule/emotion/inutile’ 802095dac6cdb18afe5269d481c357713d3fc1aaff907ee6d92de43bc44fb68f inutile
‘nebule/emotion/ambigue’ 117668a5eec9ef7b7a99ae1cddf22517cc8ca4cfb7d51c3db65a2ba5c22f1f10 ambiguë
‘nebule/emotion/clair’ 219a6c19d80e37c79b03a6e54ce479439b9415cdc33aa55a11672f86d6bf3b8f clair
‘nebule/emotion/vrai’ 44330b908390c34345301483a3f43917e85f2f62de8e409c9e5828621a10f719 vrai
‘nebule/emotion/faux’ f3ae0599a4a369171c0994421b2c353f23cb18c26235688d90e20f15c1821973 faux
‘nebule/emotion/complet’ 1b479bc5638c27c63e4016312df686689d5fec6ecdbbd4a6778118d4b6dfbaf0 complet
‘nebule/emotion/incomplet’ 7a926b54998f4fa06974045052bcdce906ce7d87df425f2ebd92a3bc1e511872 incomplet
‘nebule/emotion/incomprehensible’ 8d394acebf91abd1bafa8dec2aa9b411ab0fbe844cdc2cec1428c3fcab1d1c67 incompréhensible
‘nebule/emotion/important’ 793423a90c4b116aa01fbba3d5a214d00d1df3c8171aa0d927f2f9111f245b66 important
‘nebule/emotion/perime’ 8626a44d629629c787eab9833505503a0b20309574e0b0c1a0c15a1b3d3f8b80 périmé

Le code de sylabe est à jour.

Ajout de sentiments sur des objets

Les derniers développements de sylabe on permit de réactualiser l’ajout de marques tel que j’aime, j’aime pas et bien plus encore.
CF : Blog sylabe – Avancement
Ces marques sont regroupées sous le terme de sentiments. Ils sont matérialisés par des liens de type l de l’objet vers le sentiment (un autre objet) et le méta ‘nebule/objet/sentiment‘.

Ces sentiments ont une signification purement humaine. Le code de nebule ne l’interprète pas et n’en tient pas compte. Mais ces sentiments ont chacun des objets dédiés qui eux ont tout intérêt à être communs à toutes les applications. Ils doivent être propagés quoi qu’il arrive comme tout liens. C’est la raison pour laquelle ils seront définis au niveau de nebule.

Leur affichage sera spécifiquement traduit pour être plus lisible et tenir compte de la langue d’affichage. Continuer la lecture de Ajout de sentiments sur des objets

Marque de temps

Le marquage du temps tel que réalisé aujourd’hui ne me convient que moyennement. Ce marquage est fait pour chaque lien et permet de leur donner un sens temporel.

La marque de temps est basée sur une norme reconnue : ISO 8601:2004. Elle est forcément absolue. Éventuellement, ce peut être un simple compteur incrémental.
Mais cette norme est loin d’être universelle. Elle se base exclusivement sur un calendrier grégorien. Donc sa référence de temps est biblique, ce qui a une connotation religieuse pour un sujet technique. Passe encore. De par sa référence et sa gestion du temps le plus grand, l’ordre de grandeur du temps géré est de quelques milliers d’années. En gros, on peut indiquer une date entre -9999 et 9999 années.
Certes, cela laisse de la marge dans nos sociétés modernes où on se préoccupe plus de la nano-seconde que du siècle. Mais les Mayas avaient à leur époque, il y quelques temps déjà, un calendrier pour gérer le temps profond. Leur calendrier était à même de donner une date à la création de la terre (si cela a un sens), et sans référence religieuse. Ils ne pouvaient pas par contre gérer finement le temps à petite échelle, en dessous de la journée…

Lorsque l’on aborde le sujet de la gestion du temps avec de multiples références, il faut penser au moyens de synchronisation de ces horodatages. Il faudra pour ça réactiver l’entité kronos

Il n’y a pas 36 solutions pour améliorer le marquage du temps.
On peut ne plus reconnaître de format de temps standardisé… et tenter de déterminer par la forme de la marque de temps la date indiquée dans sa propre référence de temps. Ce travail, fastidieux, peut être facilité par un lien de définition de la marque de temps utilisée par une entité.
On peut reconnaître par défaut le format ISO 8601 et accepter d’autres formats sous la forme d’un compteur. Ce compteur, dans ce cas doit avoir une forme progressive dans le temps pour pouvoir être interprétée au moins comme compteur à défaut de pouvoir en extraire une date fiable.
On peut reconnaître par défaut le format ISO 8601, accepter le compteur et accepter un indice de formatage spécifique pour des marques de temps autres. Le compteur doit toujours être progressif.
Enfin, on peut ne reconnaître que le compteur et une marque de temps préfixée de sont type. Cette dernière solution intègre à peu près les marques de temps actuellement utilisées dans nebule au format ISO 8601 comme de simples compteurs.

Marqueur de groupe multidimensionnel

Les objets sont aujourd’hui identifiés par une valeur unique qui, de part ses propriétés, n’est pas pré-calculable ou prévisible. Ce comportement est indispensable pour distinguer parfaitement et de façon univoque les objets, et donc leur contenu. Il résulte de ces propriétés que toute modification d’un objet, quelle qu’elle soit et aussi infime qu’elle soit, entraîne un changement complet et quasi-aléatoire de son empreinte, et donc de l’identifiant correspondant.

Mais il peut être aussi intéressant de disposer d’une autre valeur plus prévisible. On va essayer de définir ici ce que l’on appellera un marqueur.
On peut imaginer par exemple que deux images très proches puissent avoir un marqueur de valeur identique ou proche. Pour de la musique, le marqueur peut être un dérivé atemporel du spectre de fréquences. Ce marqueur doit avoir une structure en accord avec la structure de l’objet. On doit pouvoir comparer les marqueurs de deux objets différents et déterminer rapidement si ils ont une structure proche, donc si ils sont ressemblants. La structure doit être multidimensionnelle et de profondeur variable. L’ajustement de la profondeur de comparaison des marqueurs doit permettre de retrouver les objets très proches ou au contraire vaguement ressemblants.

Une notion de groupe apparaît. On fait un regroupement à géométrie variable des objets par rapport à leur contenu.

Le côté multidimensionnel du marqueur doit refléter les caractéristiques multidimensionnelles d’un objet. Voici quelques exemples :

  1. Un texte simple contient des données qui s’expriment en deux dimensions : la position spatial et pour chaque position une valeur (caractère).
  2. Un texte enrichit contient des données qui s’expriment en trois dimensions : la position spatial et pour chaque position deux valeurs (caractère et encodage).
  3. Un son mono contient des données en deux dimensions : la position temporelle et pour chaque position une valeur (amplitude).
  4. Un son stéréo contient des données en trois dimensions : la position temporelle et pour chaque position deux valeurs (amplitude).
  5. Une image en noir et blanc contient des données en trois dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a une valeur (amplitude).
  6. Une image en couleur (RVB) contient des données en cinq dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a trois valeurs (amplitude).
  7. Un film en couleur muet contient des données en six dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a trois valeurs (amplitude).
  8. Un film en couleur avec son stéréo contient des données en huit dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a cinq valeurs (amplitude).

Ce marqueur n’est pas destiné à remplacé l’identifiant !
L’identifiant reste le seul moyen de
discerner sans ambiguïté tous les objets, y compris les plus ressemblants.

Ne reste plus qu’à formaliser précisément ce marqueur.

Auto déploiement répliqué d’un code

La librairie nebule de référence en php gère maintenant les liens de mise à jour d’objets conformément à la méthode décrite dans l’article sur la Résolution d’un graphe de relations de mise à jour.

Cette fonctionnalité qui paraît au premier abord peu utile tous les jours est en fait primordiale pour diffuser de façon sécurisée les mises à jours de logiciels. Le premier programme à en bénéficier est sylabe. La diffusion du code sous forme d’objet a déjà commencé : Gestion des versions de sylabe – mise en ligne

Ainsi, le code de sylabe va pouvoir être très facilement tenu à jour avec la toute dernière version. Mais cela va aussi grandement simplifier l’installation puisque le code de bootstrap va être capable d’aller automatiquement récupérer immédiatement la dernière version de sylabe avant de permettre son utilisation.

Nous arrivons dans le projet nebule à un point de singularité. Alors que jusque là, les fichiers mais aussi les entités (les utilisateurs) avaient été intégrés à nebule sous forme d’objets, le code de nebule restait lui en dehors des objets. Maintenant, le code de gestion des liens et objets devient lui aussi un objet géré par des liens comme tout objet.

Le code sera initialement signé et diffusé par l’entité bachue. Tout entité à jour deviendra à son tour point de redistribution du code.

Détournement de liens de mise à jour

La mise en place dans sylabe du code nécessaire à la résolution du graphe des mises à jours d’un objet montre que l’on peut créer une sorte de raccourci d’objet.

Ce détournement ne pose à priori pas de problème puisqu’il sera impossible de créer un objet avec cette empreinte réduite et que toute tentative se traduira par un rejet de l’objet lors de la vérification d’intégrité.

Résolution d’un graphe de relations de mise à jour

L’utilisation des liens de mise à jour d’objets est utilisé dans des cas biens spécifiques mais revêt une grande importance par exemple dans la mise à jour de programmes. Cela a notamment des implications sur la sécurité des programmes gérés sous forme d’objets.

Les liens de mise à jour n’ont pas de contraintes et peuvent donc créer des graphes de liens entre objets de forme quelconque. Cependant, l’usage de ces liens dans nebule nécessite que pour un objet donné on obtienne un unique autre objet. Cet objet doit être disponible puisque l’on est dans le cas d’un usage, c’est à dire de son utilisation immédiate.

La résolution d’un graphe de liens permet d’obtenir l’identifiant un objet dérivé unique et disponible pour un objet de départ en tenant compte de la validité des liens. Cette résolution est spécifique à nebule et se fait sous forme arborescente en ne tenant compte de des liens descendants et non bouclés.

Table des matières :

  1. Lien de mise à jour
  2. Remplacement de lien de mise à jour
  3. Mise à jour arborescente
  4. Gestion des objets manquants
  5. Résolution des boucles

Cette méthode de résolution va maintenant être expérimentée grandeur nature dans sylabe pour la gestion des versions des programmes. Continuer la lecture de Résolution d’un graphe de relations de mise à jour