Programmation orientée objet

Le projet prend un peu de retard pour mieux progresser.

Un ami programmeur m’a fortement suggéré, et m’a convaincu, de basculer tout le code de nebule en programmation objet. Je suis donc en cours d’auto-formation sur la programmation orientée objet (POO) dans php

Le projet sylabe est en attente de la migration de la librairie nebule en POO php. Il y aura ensuite une phase de migration du code de sylabe vers la POO php avant de pouvoir reprendre l’implémentation de nouvelles fonctionnalités…

Anticipation

En ce jour de commémoration du débarquement, pas de nouveauté sur le front de sylabe.

Par contre, le parcours des différents contributeurs à Reset the net met en évidence une forte demande pour l’échange de messages voire de messages instantanés. Le tout doit permettre de préserver la confidentialité et l’anonymat des échanges.
Il doit être assez facile d’ajouter un mode de messagerie avec les objets et liens nebule. La confidentialité des échanges se fait en protégeant les objets correspondants aux messages. L’anonymat est plus difficile à obtenir puisqu’il faut mixer à la fois l’offuscation de liens et la génération d’entités esclaves le temps d’un échange. Mais confidentialité et anonymat ne sont pas forcément requis simultanément pour tout le monde.
Ce serait un nouveau mode dans l’interface. C’est peut-être aussi l’occasion d’introduire des modes sous forme de modules comme cela a été fait pour les langues.
A voir…

Avancement

Pour aujourd’hui, quelques ajustements dans le mode log. Il permet le verrouillage/déverrouillage de l’entité en cours. Il n’y a plus que le paramètre out disponible pour l’option log, par défaut, on affiche soit un déverrouillage, soit un verrouillage en fonction de l’état de connexion.

Et un nouveau test s’est ajouté dans le dock, on vérifie le bon fonctionnement de la vérification des signatures de liens. C’est fait simultanément sur un lien valide et un autre invalide.

 shot-2014-05-21_22-35-43

Avancement

La dernière version, celle d’aujourd’hui, est en cours de diffusion par bachue.

Cependant, il y a quelques problèmes de portabilité vers le serveur en FreeBSD…
Une des fonctions crypto ne fonctionne pas (pas installée), donc premier bouton d’erreur rouge. La fonction de chargement d’un fichier (include) ne fonctionne pas tout à fait pareil, ce qui a nécessité de modifier le code du bootstrap, donc deuxième bouton d’erreur rouge.

Il y a des problèmes lors de la lecture de certaines valeurs des entités, notamment visiblement lorsqu’une propriété est vide, sans valeur.

Enfin, sur les machines Linux, la synchro des composants ne marche pas… Il faut le faire à la main en attendant de trouver le problème…

Voici sur bachue les erreurs de portabilité :

shot-2014-05-19_22-22-55

Avancement

Voici de nouvelles icônes pour les modes, encore à compléter :

mchr ment mobjkey

La librairie php de nebule intègre maintenant les modifications pour la version 1.2 . 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.

La traduction est intégralement passée sous forme de tableau. Chaque langue est implémentée dans un objet dédié avec gestion des mises à jours. Chaque langue est reconnue dans sylabe comme un module externe optionnel. Seuls les modules de langues signés par bachue ou par l’entité courante sont pris en compte.

shot-2014-05-18_23-04-23

Avancement

Quelques petits ajustements cosmétiques avec notamment une icône pour la métrologie :

imetrolog

D’autres icônes sont encore en préparation.

La grosse partie qui a pris une bonne journée, c’est la transformation du système de traduction vers un nouveau à base de tableaux. Chaque langue sera stockée dans un objet avec une référence à un titre et une image. Contrairement à ce qui était prévu, il n’y aura pas de vérification de syntaxe à la volée des fichiers de langues, ils seront pris en compte que si signés par bachue ou l’entité locale. C’est en quelque sorte une forme d’extensions optionnelles à sylabe sous contrôle de bachue.

Avancement

Un gros morceau a été fait avec la transformation progressive de la traduction vers un tableau par langue. Chaque langue se voit attribué un drapeau et un commentaire dans la langue en question.

Le tableau pour le français est presque terminé.

Ces tableaux drapeaux seront exportés dans des objets sauf pour la langue par défaut : le français. Tout pourra être mis à jour via les liens de type u. De nouvelles langues pourront ainsi facilement être ajoutées.

Il faut quand même prévoir un mécanisme de vérification de l’objet chargé pour qu’il ne puisse contenir que des modifications de tableaux de langue…

Avancement

Quelques ajouts plutôt cosmétiques dans l’interface comme un fond plus foncé ou clair sous l’objet dans l’affichage.

L’aide progresse et peut maintenant afficher plus facilement des balises et images diverses. On peut notamment voir un cas extrême dans le mode des liens :

shot-2014-05-15_16-40-59

Le code de sylabe vérifie maintenant l’empreinte du bootstrap. En cas de problème ce n’est pas bloquant, mais on est avertit qu’il y a une mise à jour à faire faire par l’administrateur du serveur. La méthode n’est pas infaillible mais elle augment la difficulté pour corrompre une instance sylabe. Le petit panneau du bilan de santé dans le dock intègre l’indicateur correspondant :

shot-2014-05-15_16-45-26

Un système de gestion du thème est mis en place. Il permet de remplacer le thème CSS par défaut d’une page. Ce mécanisme est découpé en quatre parties, toutes avec possibilité de mise à jour :

  1. Une petite feuille de style commune et minimale. Elle est surtout dédiée à la gestion du fond d’écran.
  2. Une feuille de style dédiée à l’affichage de sylabe lorsque une entité est déverrouillée.
  3. Une feuille de style dédiée à l’affichage de sylabe lorsque aucune entité n’est déverrouillée.
  4. Une image utilisée avec le thème par défaut.

La possibilité de modifier le thème est contrôlé par les variables $sylabe_permitfollowcss et $sylabe_permitphpcss. La deuxième autorise la présence de balises qui peuvent servir à lancer du code pour adapter le thème en temps réel.

Voici l’image par défaut (licence CC BY-NC-SA) :

bg

Enfin, les liens générés sont maintenant en version 1.2, ce qui n’est que déclaratif actuellement.

Avancement

La génération d’entité est complètement fonctionnelle. On peut générer une entité esclave avec la génération automatique d’un mot de passe et la protection de celui-ci au profit unique de l’entité courante.

Mais la modification la plus visible concerne l’habillage de l’interface ce sylabe. L’ensemble à été entièrement revu !
Les barres en haut et en bas ont été remplacées par un dock unique. Celui-ci est découpé principalement en deux parties. La partie haute permet de manipuler l’entité en cours, de changer de mode et affiche un état de l’instance sylabe. La partie basse permet de manipuler l’objet et de changer de mode dans l’affichage de l’objet.

Voici à quoi ressemble une page lorsque aucune entité n’est déverrouillée :

shot-2014-05-10_00-37-49

Et voici à quoi cela ressemble lorsqu’une entité est déverrouillée :

shot-2014-05-10_00-37-17

L’image de fond n’est là que pour montrer que c’est de la vrai transparence. Cette image et même l’ensemble de l’habillage pourront être modifiés par la suite avec des objets dédiés.

L’affichage de l’état de l’instance est fait sur fond jaune ici parce que l’URL de connexion n’est pas sécurisée, pas TLS. Normalement, elle est transparente comme le reste de la barre.

Certaines icônes et certaines couleurs sont encore à modifier. Ce sera fait plus tard…

Avancement

Les carrés de couleurs se généralisent pour représenter les objets et entités.

La gestion des images couplée au mode de navigation permet de voir une image avec ses divers dérivés dont les miniatures. Ces images peuvent aussi être reconnues comme dérivé d’une entité, est donc que c’est en quelque sorte une photo d’identité.

Voici par exemple le mode de navigation :

shot-2014-05-04_08-26-13

Voici une entité vue dans le mode visualisation :

shot-2014-05-04_08-22-12

Tout ça n’est possible facilement que si une image à des miniatures. Ces miniatures sont soit calculées à la volée, comme nouvel objet, soit pré-calculées. Le pré-calcul est utilisé pour l’instant, il se fait lors du téléchargement d’une nouvelle image. On en profite pour récupérer les EXIF de l’image.
Voici ce à quoi ressemble un téléchargement :

shot-2014-05-04_08-25-58

Avancement

L’affichage de la page un peu changer. La barre du haut affiche maintenant la couleur des entités et des objets. Elle est un peu réorganisée.
Mais c’est visuellement la barre de gauche qui a subit le plus gros changement. Au lieu d’afficher des noms d’entités ou des contenus de nÅ“uds, elle affiche à la place leurs couleurs propres.
Cette couleur est générée à partir des 6 premiers chiffres en hexadécimal d’un identifiant. Elle n’est pas infalsifiable, ni unique mais elle est aléatoire. Mais elle va surtout permettre dans le flot des données affichées de savoir d’un coup d’œil qui a fait quoi. C’est plus rapide que de lire le nom d’une entité qui peut changer, ou une photo miniature qui peut changer aussi. En passant la souris sur un des carrés de couleur, on a une petite bulle qui indique à quelle entité ou quel objet on a à faire. L’interface qui jusque là se permettait peu de couleur devient par endroits une sorte de patchwork coloré aléatoire.
Pour les entités, il sera possible de choisir aussi une photo. Cette photo miniature s’affichera à côté de sa couleur et non en remplacement. Par défaut, c’est l’icône du lien de l’objet qui apparaît à la place.
Voici à quoi ressemble le mode ent qui affiche les entités (avec des tests) :

shot-2014-04-28_09-54-43

Le mode d’affichage permet de voir les fichiers audio. Il y a un petit problème qui empêche la bonne reconnaissance du type mime pour les fichiers multimédia. On peut donc maintenant dans l’affichage modifier le type mime d’un objet.
Voici à quoi ressemble la lecture d’une musique :

shot-2014-04-28_09-55-04

Et on peut aussi renommer une entité.
Évidemment, on ne renomme pas arbitrairement une entité tierce, on dit juste qu’on l’appelle soi-même autrement. Libre aux autres entités d’en tenir compte ou pas. Pour ce dernier point, la pondération jouera un grand rôle, mais elle n’est pas encore en place.
Ce sont les petites icône à côté du nom :

shot-2014-04-28_09-46-21

Résistance à la corruption de données

Plusieurs tests doivent déterminer la résistance à la corruption de données, volontaire ou non, dans les codes de sylabe.

Le code du bootstrap est capable de vérifier la chaîne de confiance du code à charger en suivant les liens de mise à jour. Il est capable aussi de vérifier la cohérence du contenu du code à charger avec son empreinte.

Les testes sont réalisés avec le mode log qui affiche l’empreinte des composants utilisés.

Le premier test consiste à modifier subtilement l’objet du code de sylabe, un simple retour chariot ici. Au rechargement de la page, c’est la version précédente du code qui a été rechargée. De plus, l’objet modifié a été supprimé du disque dur parce que invalide. Même une modification mineure entraîne une invalidation du code et force à revenir à une version précédente non corrompue.
Le même test réalisé sur l’objet du code de la librairie nebule donne le même résultat.
Si on corrompe successivement les objets de plusieurs versions du code, le bootstrap remonte aussi loin que nécessaire pour retrouver un objet valide. Tous les objets invalides ont été supprimés.

Prochain test, corrompre le tout premier objet du code, celui qui est mis à jour successivement. Il ne doit plus y avoir de code valide, le bootstrap doit s’arrêter sur une erreur ‘Default object invalid‘.

Un dernier test consistera à essayer d’injecter un objet de mise à jour du code mais par une entité tierce, puis avec un lien usurpé. Ce test doit permettre de déterminer la résistance du bootstrap face à des liens qu’il ne doit pas utiliser.

Anticipation

Maintenant que le mode navigation est fonctionnel, on va pouvoir reprendre d’autres chantiers.

La partie traduction du code est un gros pavé, logique. Mais sa forme est surtout assez infâme. Il faut le refaire en utilisant des tableaux qui pourront éventuellement un jour être exportés dans des objets dédiés.

La barre du haut est à revoir dans sa forme mais aussi dans son usage. Le haut reste l’identification de l’entité. Le bas doit concerner l’objet courant. La partie intermédiaire peut peut-être servir à héberger des indicateurs de bon fonctionnement, la crypto par exemple…

Il serait souhaitable de pouvoir intégrer la gestion des sous-entités directement dans sylabe même si nebule reste fondamentalement mono-entité. Ce peut être simplement en gérant une entité maître en parallèle de l’entité courante. L’entité maître peut disposer du mot de passe de chaque sous-entité et basculer vers une de celles-ci. La barre en haut devra refléter clairement quelle entité est en cours d’utilisation.
Le mot de passe est naturellement un objet chiffré et lié à l’entité contrôlée. Ainsi, ce mot de passe peut être partagé par plusieurs entités maîtres pour former une entité commune, et donc une forme de groupe actif. A définir…

Avancement

Le mode de navigation est maintenant assez stable pour être exploitable. Le résultat ressemble à ça :

shot-2014-04-22_20-44-57
CF : Blog nebule – Ajout d’émotions sur des objets – suite 4

Quelques essais grandeur nature avec des synchronisations sur l’Internet seront réalisés sur l’objet de test.

La machine hôte de l’entité bachue vient de recevoir la clé privée. Elle est maintenant fonctionnelle pour l’import et la signature. Le script d’export est en cours de finalisation.
La machine relai n’est pas encore tout à fait prête. C’est donc l’entité Stéphane qui diffuse aujourd’hui, en tant que simple relai, les liens signés par l’entité bachue.

Voici donc les objets des dernières versions des différents codes :
– bootstrap : 3abf80a35591bbdbe46fbab488db4012accb5dbf4d6c8fda6355f05327ded841
– sylabe : 9552e15d37b452366d9b2f99ebbdfbf57154807befc08ee2e981741a026ee5fe
– librairie nebule : 948f821c48111a32a891ae5716fc25d6da100415ec015507a33cbbae2b979c7c

Avancement

Les émotions ont été mis en place proprement pour les objets. Cela concerne le mode d’affichage des objets et le mode de navigation.

Le mode d’affichage :

shot-2014-04-16_22-06-10

Le mode de navigation :

shot-2014-04-16_22-06-58

On notera que les émotions sont aussi présentes dans la barre en haut de la page.

Pour le mode d’affichage des objets, pas de révolution, ce sont juste des icônes plus présentes et plus pratiques. Pas de changement pour les avis.

Pour le mode de navigation, chaque commentaire de l’objet, que ce soit un texte ou autre chose, peut recevoir une ou plusieurs émotions. Ces émotions sont marquées dans le contexte de l’objet, c’est à dire qu’elles lui sont indirectement liées. Une émotion avec un contexte apparaît dans le mode d’affichage du commentaire, mais pas dans le mode d’affichage de l’objet en cours de consultation.

On peut tout à fait dans le mode navigation mettre une émotion sur une autre émotion. Par exemple, mettre que l’on aime que d’autres aiment l’objet. Cependant, il ne faut pas oublier que ce n’est pas le lien que l’on aime, mais le marquage de l’émotion. Ainsi, si on marque que l’on aime une émotion sur un objet, son marquage va apparaître automatiquement sous toutes les entités qui ont exprimé l’émotion. On exprime une émotion sur une émotion en générale, pas sur l’émotion d’une entité en particulier.
Ce fonctionnement apparaît sur la capture d’écran du mode de navigation. J’avais émis hier un avis beau. Puis j’ai marqué aujourd’hui que j’approuve l’avis, ce qui est une émotion. Enfin, j’ai marqué que je trouve étonnant l’émotion j’approuve sur mon avis d’hier.

Les nouvelles icônes sont trop visibles par défaut, trop denses. Il faudra les refaire…