Mot-clé - trace modélisée

Fil des billets - Fil des commentaires

dimanche 24 avril 2011

TraceFS, grep, et plus si affinités

Concept

L'idée est de présenter une trace modélisée sous forme d'arborescence de fichiers, via FUSE. Les accès se font par une combinaison d'utilisateur, de modèle, de trace, et d'observé. On peut alors avoir des choses comme /utilisateur/utilisateur4/modèles/modèle5/trace/trace3/observé/observé6.

L'intérêt est ensuite d'extraire les données avec des outils standards POSIX, pour consulter et éventuellement modifier les traces. Le format des fichiers peut être de différente sorte, selon l'option de montage du système de fichier (flat, json, n3, etc)

Exemple

Pour l'utilisateur « Damien », dans la trace « Exercice2 » de « WeeChat », savoir combien d'observés sont de type frappeClavier. On constate que la trace accédée directement par son nom via le sujet de la trace : le modèle est passé sous silence car ces informations suffisent à discriminer la trace dans la base de traces.

$ grep -irc "type=frappeClavier" /utilisateur/Damien/trace/Exercice2/ | wc -l
3151

[1]

L'avantage est de pouvoir directement interroger le SGBT avec des outils standards. Pour l'utilisateur, cela signifie :

  • une grande simplicité : pas besoin de concevoir de scripts python, d'apprendre des API ou de déployer du code sur le SGBT. Toutes les opérations se font avec des outils standards UNIX, voir POSIX, ce qui signifie une prise en main immédiate.
  • un important gain de temps : accéder au contenu d'un observé est immédiat, et ne nécessite que la lecture d'un fichier

Durant la phase de travail sur la conception d'un modèle de trace, ou l'instrumentation d'un outil, je vois un intérêt à ce genre d'approche.

Note

[1] les geeks auront repéré la blague dans la commande :)

vendredi 9 avril 2010

Première version du prototype de l'OGVIT

J'ai l'immense plaisir, l'honneur et la joie de vous annoncer qu'une première version de développement de l'OGVIT (Outil générique de Visualisation Interactive de Traces) tourne.

Oh, certes, c'est du brut de décoffrage et il manque encore plusieurs choses, mais la tuyauterie est en place (malgré un problème clairement identifié et contourné), et il est possible de charger une trace produite pour la consulter, et même la tripoter un petit peu.

On peut découvrir sur la capture d'écran :

  • en haut à gauche : le debug du KTBS; on voit les requêtes entrantes et sortantes
  • à droite du KTBS : le collecteur de traces faisant le lien entre weechat et le KTBS; on voit les données internes et le traitement
  • à droite du collecteur de traces : weechat-traces, le client IRC instrumenté pour produire des traces; on voir l'activité dans le chat
  • en bas à droite : le debug de l'OGVIT; on y voit sa détection de l'affichage d'éléments partiellement ou complètement superposés
  • en travers de tout : l'OGVIT qui affiche la trace de weechat; on voit l'axe du temps, les observés codés par couleur (bleu : frappe clavier; rouge moche : connexion)

Première démonstration de l'OGVIT

mercredi 16 décembre 2009

Avancement sur les outils de la trace

Hier est un jour à marquer d'un parpaing blanc : j'ai mis en place la première interconnexion de 3 outils différents qui manipulent des éléments de trace : le client IRC weechat, le préparateur de traces de weechat, et le ktbs. Plus précisément, la séquence réalisée est WeeChat → préparateur de trace → ktbs.

  • WeeChat : il s'agit du client IRC que j'ai instrumenté pour sortir des proto-observés représentant l'activité de l'utilisateur dans celui-ci.
  • préparateur de trace : un agent logiciel spécifique à WeeChat, développé par moi, en charge de :
    • construire des observés à partir des proto-observés
    • assurer l'interconnexion avec le SGBT
    • initialiser le SGBT pour permettre son utilisation (définition de l'utilisateur, du modèle, de la trace, etc)
  • ktbs : l'implémentation du SGBT réalisée par Pierre-Antoine

Ça n'a l'air de rien comme cela, mais tous ceux qui se sont concrètement frottés à la conception complète de modèles, à la création technique de traces, et au KTBS vous diront que c'est limite un exploit :)

Bon, maintenant pour être honnête, je dois dire aussi qu'il y a des warnings dans tous les sens, que ça crash aléatoirement et que c'est vraiment pas évident de tout faire tenir ensemble. Mais le résultat est qu'au final il est possible de demander au KTBS de recracher une trace qu'il a précédemment reçu.

Dans tous les cas, c'est encore loin d'être utilisable, même pour faire des petits essais. Le travail d'ingénierie à réaliser est LOURD, et le code pas réutilisable car spécifique à un outil. mais ça marche \o/

mardi 13 octobre 2009

Jouer avec un SGBT, c'est possible !

Il m'aura fallu un peu de temps, mais voici enfin deux scripts simples qui permettent de tester le KTBS de PA :

  • lancer_le_ktbs : démarre le KTBS en local
  • initialiser_le_ktbs : alimente le KTBS avec :
    • 1 utilisateur : alice
    • 1 modèle de trace : weechat
    • 1 trace : t01
    • 4 observés :
      1. joindre un canal
      2. envoyer un message
      3. recevoir un message
      4. quitter le canal

Avec ces scripts, il est possible de faire tourner un SGBT contenant des données afin d'interagir avec lui : demande d'observé, transformation, etc

Comment utiliser les scripts ? Facile.

-1) mettez en place un support IPv6 sur votre machine. Une adresse en fe80:* suffit

0) faites un checkout du KTBS : $ svn co https://svn.liris.cnrs.fr/sbt-dev/ktbs-rest-impl/trunk

1) ouvrez un terminal, et lancez le script lancer_le_ktbs avec comme argument le chemin vers bin/ktbs que vous venez de récupérer

Par exemple :

$ ./lancer_le_ktbs ../bin/ktbs 
=== Using IPV6
KTBS example at http://ip6-localhost:8001/

2) ouvrez un terminal, et lancez le script initialiser_le_ktbs. Admirez la sortie standard qui vous donne les valeurs de retour du KTBS (sauf celle de l'étape 2 qui est filtrée). Admirez également la sortie standard du KTBS qui vous indique les données reçues.

ip6-localhost - - [13/Oct/2009 16:26:51] "POST / HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:51] "POST /alice/ HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:52] "PUT /alice/weechat/ HTTP/1.1" 200 386
ip6-localhost - - [13/Oct/2009 16:26:52] "POST /alice/ HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:52] "POST /alice/t01/ HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:52] "POST /alice/t01/ HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:52] "POST /alice/t01/ HTTP/1.1" 201 0
ip6-localhost - - [13/Oct/2009 16:26:52] "POST /alice/t01/ HTTP/1.1" 201 0

Pointez maintenant votre navigateur préféré sur l'interface web du KTBS (http://ip6-localhost:8001/alice/t01/@obsels) et admirez votre trace (ou plus exactement celle d'Alice) de WeeChat conforme au modèle spécifié.



Vous pouvez maintenant travailler avec le KTBS.

lundi 7 septembre 2009

Génération automatique du modèle de trace d'une application instrumentée

Le problème

Maintenir la conception du modèle de trace d'une application de la conception de l'application n'a pour moi pas de sens : on perd du temps à passer de l'un à l'autre, on s'embrouille et c'est une approche préhistorique (ou du moins datant du COBOL :)

On pourrait se dire que disposer d'un modèle de l'application ne présente pas nécessairement un intérêt quand on cherche à obtenir une trace des interactions d'un utilisateur, mais pour moi c'est sauter une étape.

En effet, depuis de nombreux mois plusieurs personnes de l'équipe SILEX travaillent sur des modèles d'interactions. Au delà des problèmes concrets lié à l'expression de modèles conformes au métamodèle, il se pourrait qu'une des choses qui nous freine soit de vouloir réaliser tout de suite un grand pas : on ne sait pas décrire le comportement d'une application, alors qu'on veut décrire le comportement de l'utilisateur dans cette application.

La solution (possible ?)

Plus j'y pense, et plus je me dis que la solution passe peut-être par une génération automatique des modèles de l'application. Le principe serait alors de générer le(s) modèle(s) de l'application à la compilation, sur le même principe que la documentation des API tel javadoc ou doxygen.

On peut songer à quelque chose de similaire au javadoc : avec des marqueurs bien placés dans le code, on génère à la compilation des modèles correspondant à des éléments d'interface.

Du coup, on permet au développeur de structurer les modèles de l'application, tout en permettant à l'utilisateur de concevoir des modèles supplémentaire.

Conceptuellement

idée clé : les API sont un modèle de l'application orienté développeur; le modèle de trace d'interactions est un modèle de l'application orienté utilisateur.

Cette approche serait utilisée, a priori, uniquement pour les applications instrumentées directement dans le code. Éventuellement, peut-être aussi pour les enrichissements d'application à base de plugins, mais il faudrait que j'y réfléchisse.

En pratique

Pour réaliser la génération de modèle d'application, ces questions pratiques se posent : sur quelles fonctions placer les marqueurs de génération d'observés ? Callback/méthode associés aux widgets ? D'une façon générale, très probablement sur les fonctions les plus proches de l'utilisateur, donc au niveau des E/S. L'idée est de ne pas ajouter de code, juste des commentaires contenant les marqueurs.

On commence par définir globalement les propriété communes : références au métamodèle, à l'extension temporelle, etc. On peut songer par exemple à un mécanisme de macro ou de variables (je l'appellerais ici « en-tête 1 »

=define "en-tête 1"
@prefix : <http://liris.cnrs.fr/silex/ns/ktbs/>.
@prefix mod: <>.
@prefix xsd: <TODO> .

<> a :TraceModel ;
	:hasTemporalDomain :seconds .

Puis, dans le code de l'application on insère les marqueurs pour la génération du modèle

/*
 * =include "en-tête 1"
 * =type presseTouche
 * =description "décrit la frappe d'une touche dans la zone de saisie"
 * =string "versionDeWeeChat"
 * =string "monPseudo"
 * =string "nomDuCanal"
 */ 
LaFonctionGérantLesFrappesClavierDeLutilisateur(...) {
	...
}

Et là, c'est le drame car il faut exprimer des choses comme comme le fragment ci-dessous.

>:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;%%%
	xsd:pattern "(#|&)[a-zA-Z0-9]{,63}"
]

Mais l'idée reste la même : pour moi, les informations permettant la génération du modèle doivent être notées sous forme réduite, juste à côté du code, et sans gêner les développeurs.

Le modèle généré :

@prefix : <http://liris.cnrs.fr/silex/ns/ktbs/>.
@prefix mod: <>.
@prefix xsd: <TODO> .

<> a :TraceModel ;
	:hasTemporalDomain :seconds .


mod:presseTouche a :ObserType .


mod:versionDeWeeChat a :Attribute ;
	:aDomain mod:presseTouche ;
	:aRange xsd:string ;
.

mod:monPseudo a :Attribute ;
	:aDomain mod:presseTouche ;
	:aRange xsd:string ;
.

mod:nomDuCanal a :Attribute ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
		owl:onDatatype xsd:string ;
		xsd:pattern "(#|&)[a-zA-Z0-9]{,63}"
	] 
.

mod:nomDuServeur a :Attribute ;
	rdfs:label "Nom du Serveur"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern "(IPv4|IPv6|hostname)"
	]
.

mod:typeDeTampon a :Attribute ;
	rdfs:label "Type de tampon"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern "[0-2]"
	]
.

mod:caractère a :Attribute ;
	rdfs:label "Caractère frappé"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern "(\*?|STRING)"
	]
.

mod:zoneDeSaisieAvantCaractère a :Attribute ;
	rdfs:label "Contenu de la zonne de saisie avant la frappe clavier"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern ".*"
	]
.

mod:zoneDeSaisieAprèsCaractère a :Attribute ;
	rdfs:label "Contenu de la zonne de saisie après la frappe clavier"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern ".*"
	]
.

mod:drapeauAway a :Attribute ;
	rdfs:label "Status de présence"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern "(0|1)"
	] ## ?? vérifier dans la spec de OWL 2
.

mod:contenuDeLaZoneDeSaisie a :Attribute ;
	rdfs:label "Contenu de la zone de saisie"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern ".*"
	]
.

mod:contenuDuMasqueDeCouleurDeLaZoneDeSaisie a :Attribute ;
	rdfs:label "Masque de la zone de saisie"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern ".*"
	]
.

mod:positionDuCurseurDansLaZoneDeSaisie a :Attribute ;
	rdfs:label "Position du curseur dans la zone de saisie"@fr ;
	:aDomain mod:presseTouche ;
	:aRange [ a owl:DatatypeRestriction ;
	owl:onDatatype xsd:string ;
		xsd:pattern "[0-9]*"
	]
.

jeudi 30 juillet 2009

Pourquoi je ne crois pas (encore) en la trace modélisée

Non, non, ne hurlez pas; je vous vois venir avec vos mais qu'est-ce qu'il va encore nous inventer cette fois-ci ? :)

Lisez, vous allez voir, ça va vous intéresser.

Avant-propos

Je travaille depuis maintenant un bon moment à mettre en place une partie de nos idées sur les traces, concernant la visualisation d'activité (individuelle ou collaborative, a/synchrone, ici on s'en fout). Architecture, conception de modèles, instrumentation d'application, couche réseau, formats de données, parsers, etc; vous l'avez compris, tout passe entre mes mains excepté le SGBT qui est pour moi une boîte noire. Si vous pouvez imaginer quelque chose relatif aux traces (RàPC excepté), alors je me suis certainement penché dessus à un moment durant ces six derniers mois.

Je vous présente ici un retour sur l'expérience que j'ai développé, à base de réflexions personnelles. Le constat est plutôt mitigé, je vous préviens d'avance. Rien de dramatique, mais il faudra en tenir compte pour la suite de nos travaux car ça a des conséquences importantes. Je vais essayer de faire un découpage propre, mais vous allez voir que tout est lié.

Ma réflexion est orientée sur le transfert vers l'entreprise (non, ce n'est pas un gros mot) de nos travaux de recherche. C'est à dire : « qu'est-ce qu'il faut prendre en compte lorsqu'on va essayer de vendre la trace modélisée à un industriel ».

La conception de modèle

La première étape de l'enrichissement d'une situation informatique par les traces (sous-entendu, après tout le blabla d'analyse) est la conception d'un modèle de traces de logiciel(s). Cela :

Demande des compétences très spécialisées

Soyons réalistes, comprendre la théorie de la trace modélisée et être capable d'expliciter des interactions dans son formalisme n'est pas à la portée de tout le monde. Non pas que cela soit particulièrement complexe, mais cela exige un certain nombre de connaissances et de compétences qui ne se trouvent pas partout.

Que ce soit par une méthode ascendante ou descendante, concevoir des modèles de trace d'applications ne peut être fait que par un petit nombre de personnes. Or, ce qui est rare est cher. Il va donc falloir convaincre l'entreprise de réaliser cet investissement. Cela peut passer par une mission d'un expert extérieur, la formation d'une personne déjà en place, un partenariat avec une structure compétente, etc. Plusieurs possibilités existent, mais toutes ont un coût qui n'est pas négligeable.

Nécessite beaucoup de temps

Un logiciel, même très simple, est riche en possibilités d'interactions. On peut retenir l'utilisation de menus, de boutons, de paramètres, de zones de saisie, de fonctions, etc, ainsi que des opérations plus globales impliquant les périphériques d'entrée et de sortie.

Au final, on se retrouve à manipuler un très grand nombre d'observés et de relations, ce qui nécessite plusieurs jours semaines de travail. La richesse en observés étant exponentielle par rapport à la complexité d'un logiciel, essayez de visualiser ce à quoi pourrait ressembler le modèle de trace d'OpenOffice. Oui, c'est plus que gros : c'est énorme. Et on ne peut pas se permettre de laisser de côté certaines parties du modèle car cela impliquerait de ne pas être capable de représenter correctement les interactions de l'utilisateur sur ce logiciel.

L'entreprise ayant besoin de tracer une activité, un environnement ou que sais-je encore, va devoir y passer du temps (qui est aussi de l'argent, comme nous le rappel le célèbre adage). Ce temps sera pris au dépend d'autres activités, peut-être plus facilement et rapidement rentables.

Comprend aussi la conception des règles de transformations usuelles

Tout comme sans maîtrise, la puissance n'est rien, des traces qu'on ne peut pas manipuler sont tout de suite moins intéressantes. La conception de jeux de règles de transformations adaptées aux modèles de traces est un des à-côté du travail conceptuel de la trace.

En effet, on ne peut pas simplement donner un modèle de trace à une entreprise en lui disant « voilà, tu as ton modèle, à toi de te débrouiller pour faire ce que tu veux avec ». Il faut donc en parallèle du modèle construire les règles de transformations qui vont les utiliser, afin d'obtenir un résultat final qui corresponde aux attentes de l'entreprise. L'entreprise pourra certes produire en interne de nouvelles règles de transformations (par une tactique de copie/adaptation), mais il faudra lui préparer le terrain. Et qui est-ce qui va se taper le travail ? Gagné, c'est l'expert qui s'occupe déjà du modèle. Cela augmente sensiblement sa charge de travail, et donc le coût pour l'entreprise.

Instrumentation des logiciels

Selon le logiciel à instrumenter, le travail technique pour réaliser la collecte d'observés varie grandement. J'ai identifié 3 catégories d'instrumentation :

  • édition en profondeur du code source : méthode qui nécessite d'avoir accès au code source du logiciel, et d'être en mesure d'y apporter des modifications;
  • création de greffons présentant des interfaces pour interroger le contenu de variables d'état : ici, on ajoute des fonctionnalités à l'application en s'appuyant sur ses API. On est limité par ce que propose l'application en terme d'accès aux ressources internes.
  • création de préparateurs de traces qui récupèrent des données exportées par l'application pour produire des observés : cette approche consiste à récupérer des informations sorties de l'application via ses méthodes standard (par exemple, flux RSS ou AppleEvent). Cette méthode apporte le découpage le plus fort dans le tandem application/traçage, et est limitée par l'application elle-même.

Selon les applications à instrumenter et les méthodes utilisées, le coût de l'adaptation logicielle varie énormément. Malheureusement, il n'est pas possible d'identifier un petit nombre de critères précis permettant de quantifier simplement ce coût. C'est uniquement en prenant en compte une combinaison de nombreux facteurs qu'on peut le déterminer. À titre d'idée, on peut citer sans s'y restreindre :

  • la complexité du travail;
  • la durée du travail;
  • le langage de programmation (allez trouver quelqu'un qui fait encore du COBOL, tiens :)
  • la documentation disponibles (humain, référentiel de développement, etc);
  • l'urgence;
  • etc.

Il y a également les coûts liés; par exemple, les structurels : achat d'un serveur pour le SGBT, mise à jour des matériels, adaptation de l'architecture réseau...

Les cycles de vie logiciel dans environnements tracés

Un logiciel peut être vu comme quelque chose de « vivant », évoluant au fur et à mesure des versions. Ces évolutions sont nécessaires pour de nombreuses raisons : changement dans l'environnement d'accueil (le système d'exploitation), sécurité, nouvelles fonctionnalités, etc.

Tout naturellement, il faut que les éléments du traçage accompagnent ces évolutions. Tout s'enchaînent très rapidement de façon implacable :

  1. modifier le logiciel tracé (peut) oblige(r) à modifier la collecte
  2. modifier le logiciel tracé oblige (pas moyen d'y échapper, là) à modifier le modèle de traces
  3. modifier le modèle de traces oblige à modifier les transformations de traces (et oui...)
  4. modifier les transformations de traces impacte sur la visualisation des traces (j'y reviendrais plus tard)

On se rend compte alors que la mise à jour est coûteuse car il faut de nouveau faire appel à notre expert. Vous souvenez de lui, celui de la 1e étape, qui avait conçu les modèles ? Et bien il va falloir retourner le voir pour lui demander de se pencher sur les modifications. Ceci dit, ça tombe bien car il pourra tout traiter d'un seul coup : l'évolution des modèles et celle des transformations. Et si en plus derrière il peut assurer la formation ça ne sera pas perdu.

Le plus problématique est qu'il faut répéter ce cycle à chaque nouvelle version du logiciel. C'est réellement un surcoût, car la rentabilité n'est pas évidente à dégager (comptablement parlant).

Mentalement, insérez ici un joli schéma de traces complet d'une application, montrant côte à côte les modèles de traces pour la version N et la version N+1. Imaginez de gros, gros (mais alors gros), graphes avec des nœuds et des arcs dans tous les sens, qui seraient différents de seulement quelques détails : observés en plus ou en moins, déplacement de relations, changement d'attributs, etc.

Je mettrais les schémas quand je les aurais fini, le but est ici de vous faire prendre conscience du volume de travail que ça représente.

Pratiques des utilisateurs liées aux traces

En ce qui concerne l'utilisateur final, c'est plus simple pour lui. Une évolution de son environnement tracé se traduit non seulement par une modification de sa pratique métier, mais également de sa pratique réflexive via les traces. Ben oui, vous ne croyez quand même pas qu'au final rien ne change ? Et comme nous le savons, tout ce qui change les habitudes de l'utilisateur le fait râler (sauf si c'est Génial, mais ça seul Apple arrive à le faire :)

De petites modifications dans un logiciel peuvent avoir de grandes répercutions sur le modèle de trace, et donc sur la visualisation interactive de la trace par l'utilisateur. Il va donc lui falloir un temps d'adaptation (ce qui influera sur sa productivité), voir même une formation.

Également, les changements dans les traces et modèles pourront se propager à d'autres environnements, tracés ou non. C'est le cas lors de la documentarisation de traces en vue de générer des productions (textes, hypermédia, etc.) Même si ces outils ne sont pas tracés, ils sont impactés par les changements sur les données d'entré.

Que retenir au final ?

On peut dire qu'instrumenter un environnement pour lui faire générer des traces est long, pas toujours simple, et n'est pas nécessairement faisable de façon clairement rentable.

Les problèmes apparaissent à tous les niveaux : conceptuel (modèles), technique (instrumentation) et humain (usage). Les principaux étant le coût (je crois l'avoir suffisamment répété :) de la mise en œuvre de la trace dans un système existant, et les compétences spécialisées requises dans chacune des étapes de la réalisation.

Convaincre un industriel d'investir dans la trace est alors réellement un problème, car les gains à dégager sont difficilement calculables, et la mise initiale est élevée.

Au final, pour moi la théorie de la trace est attirante sur le papier, mais les difficultés liées à la réalisation sont vraiment rebutantes.

Pistes envisageables

Tout n'est pas perdu ! Maintenant que nous avons regardé le problème droit dans les yeux, on peut louvoyer en évitant ce qui justement nous embête.

Ainsi, on peut songer à cibler en priorité les systèmes figés, qui n'évoluent pas ou très peu :

  • machine-outil : une chaîne de production change rarement, car son utilisation est planifiée en amont. Du coup, pas besoin non plus de faire évoluer les trucs-de-la-traces \o/
  • systèmes critiques : les outils comme ceux du contrôle aérien n'ont pas le même cycle de vie que les logiciels grand public; on ne passe pas son temps à les mettre à jour. Il sont conçus pour durer, et c'est au contraire les autres systèmes qui s'adaptent pour interagir avec eux. En gros, une fois le traçage dedans, il n'en bouge plus.
  • logiciels arrivés à maturité; ils peuvent être complexes (Lotus Notes) ou très simples (calepin de Windows). De par leur nature, rôle ou histoire, certains logiciels sont intouchables; on se contente au plus de les recompiler, mais en veillant à ne rien changer afin de ne pas provoquer d'effets de bord (comme par exemple un changement de modèle de trace).

Une autre approche est de se poser la question de savoir qui a suffisamment d'argent à dépenser pour se lancer dans un projet pareil, sans que le responsable risque de se faire virer après la réception de la facture par le service compta :

  • les grands comptes : la Poste, EDF (eh, ça tombe bien :), etc;
  • la fonction publique : quand l'administration investie, elle ne le fait pas à moitié; souvenons-nous du « Plan informatique pour tous »;
  • les Décideurs Pressés qui imposent contre l'avis de leurs DSI des solutions qu'ils jugent intéressantes. Avec un joli PowerPoint®™©, on arrive à vendre des glaçons au Pôle Nord.

Vous l'avez compris, j'exclus tout ce qui est grand public dans les cibles potentielles. Il y a éventuellement le monde du Libre qui pourrait mettre en place et maintenir des utilisations de traces modélisées, mais il faudrait vraiment que ça soit pertinent.

mercredi 10 juin 2009

Appel à commentaires sur les modèles de trace

Avant propos

Il y a deux abréviations à connaitre.

i18n (internationalization) internationalisation

Les adaptations à faire sur les formats de données, selon les pays. Par exemple, comment on exprime une date (JJ/MM/AA, MM/DD/AA, etc), une monnaie ($123, 123€), un nombre (123.456 ou 123,456), etc. C'est un travail technique qui demande à faire abstraction du contenu pour en décrire sa structure.

CF l18n

l10n (localization) régionalisation

Il s'agit de la traduction à proprement parler.

WP :

La régionalisation de logiciel concerne le processus de traduction de l'interface utilisateur d'un logiciel d'une langue vers une autre et en l'adaptant à la culture locale. On utilise parfois le terme localisation, qui est une transposition du mot anglais localization (faux ami). On écrit parfois l10n car le mot localization est composé de dix lettres encadrées par un l et un n.

Avant qu'un logiciel ne soit régionalisé, il faut au préalable qu'il ait été internationalisé, c’est-à-dire qu'il ait été écrit pour pouvoir être traduit dans différentes langues et cultures.

CF l10n

Discussion sur les modèles

Pour construire l'interface de l'outil générique de visualisation interactive de trace (OGVIT), il faut que chaque attribut ait un nom compréhensible pour l'utilisateur. Ce qui veut dire qu'au couple attribut+valeur (par exemple, ktbs:hasTime et 1244638257), il faut ajouter un 3e élément qui est le « nom humain » (mercredi 10 juin 2009, 14:50:57)

De plus , ce nom humain doit pouvoir être internationalisé (et localisé), car tout le monde n'utilise pas la même langue. Ce qui veut dire qu'un observé, au final, doit autant être compréhensible par la machine que par l'humain. Si l'humain sait vaguement s'adapter, la machine elle a besoin d'un formalisme explicite.

Il existe plusieurs endroits où ajouter ces élément de i18n et de l10n :

Dans l'observé lui-même

  • avantage : l'information est immédiatement présente, on peut la traiter directement
  • inconvénients :
    • ça prend de la place, on répète l'information autant de fois qu'on a d'observés.
    • pour gérer plusieurs langues, il faudra ajouter autant d'éléments de traduction; c'est du gaspillage.

Dans le modèle de trace

  • avantage : c'est définit une fois pour toute; on économise de la place et du temps
  • inconvénients :
    • on se retrouve à trimbaler dans le modèles des informations dont on n'a pas besoin. Par exemple, moi je n'ai pas besoin de pouvoir exprimer mes dates en japonais.
    • ajouter une langue revient à reprendre le modèle, ce qui n'est pas toujours évident à faire car celui-ci n'est pas forcément modifiable. Par exemple, il peut être intégré dans une application dont on n'a pas les sources.

Dans un document à côté du modèle

  • avantages :
    • on peut modifier et compléter les traductions et formats sans toucher au modèle.
    • le modèle ne contient que la définition de la trace, le reste étant dans un document associé.
  • inconvénients :
    • quand on veut manipuler un modèle, il faut alors manipuler deux fichiers pour avoir les littéraux. Pas pratique.
    • ça complique le schmilblick.

Reste à décider. Vos avis sur la question ?

Exemple concret

Je souhaite visualiser la trace de ma (« Damien_traces ») frappe clavier dans weechat, mon client IRC tracé. La trace correspondant à l'envoi du message « bonjour » sur le canal #LIRIS de Freenode est la suivante :

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ktbs: <http://liris.cnrs.fr/~ithaca/ns/ktbs/0.1/> .
@prefix : <http://example.com/trace-model/> .

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*b";
:zoneDeSaisieAvantCaractère "";
:zoneDeSaisieAprèsCaractère "b";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "b";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie " ";
:positionDuCurseurDansLaZoneDeSaisie "1";
ktbs:hasBegin "1244635383";
ktbs:hasEnd "1244635383";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*o";
:zoneDeSaisieAvantCaractère "b";
:zoneDeSaisieAprèsCaractère "bo";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bo";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "  ";
:positionDuCurseurDansLaZoneDeSaisie "2";
ktbs:hasBegin "1244635383";
ktbs:hasEnd "1244635383";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*n";
:zoneDeSaisieAvantCaractère "bo";
:zoneDeSaisieAprèsCaractère "bon";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bon";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "   ";
:positionDuCurseurDansLaZoneDeSaisie "3";
ktbs:hasBegin "1244635383";
ktbs:hasEnd "1244635383";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*j";
:zoneDeSaisieAvantCaractère "bon";
:zoneDeSaisieAprèsCaractère "bonj";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bonj";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "    ";
:positionDuCurseurDansLaZoneDeSaisie "4";
ktbs:hasBegin "1244635384";
ktbs:hasEnd "1244635384";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*o";
:zoneDeSaisieAvantCaractère "bonj";
:zoneDeSaisieAprèsCaractère "bonjo";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bonjo";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "     ";
:positionDuCurseurDansLaZoneDeSaisie "5";
ktbs:hasBegin "1244635384";
ktbs:hasEnd "1244635384";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*u";
:zoneDeSaisieAvantCaractère "bonjo";
:zoneDeSaisieAprèsCaractère "bonjou";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bonjou";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "      ";
:positionDuCurseurDansLaZoneDeSaisie "6";
ktbs:hasBegin "1244635385";
ktbs:hasEnd "1244635385";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "*r";
:zoneDeSaisieAvantCaractère "bonjou";
:zoneDeSaisieAprèsCaractère "bonjour";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "bonjour";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "       ";
:positionDuCurseurDansLaZoneDeSaisie "7";
ktbs:hasBegin "1244635385";
ktbs:hasEnd "1244635385";
ktbs:hasTrace <> ;
].

[ a :presseTouche;
:versionDeWeechat "0.2.6.1";
:monPseudo "Damien_traces";
:nomDuCanal "#LIRIS";
:nomDuServeur "freenode";
:typeDeTampon (0=standard, 1=DCC, 2=données IRC brutes) "0";
:caractère "return";
:zoneDeSaisieAvantCaractère "bonjour";
:zoneDeSaisieAprèsCaractère "";
:drapeauAway "0";
:contenuDeLaZoneDeSaisie "";
:contenuDuMasqueDeCouleurDeLaZoneDeSaisie "";
:positionDuCurseurDansLaZoneDeSaisie "0";
ktbs:hasBegin "1244635386";
ktbs:hasEnd "1244635386";
ktbs:hasTrace <> ;
].

L'OGVIT est supposé construire automatiquement, à partir du modèle de la trace, la visualisation suivante.

Interface pour la visualisation de la trace des frappes clavier de weechat

On constate plusieurs choses :

  • c'est vide : ben oui, car je n'ai pas le modèle de cette trace, et d'une façon plus générale le format d'un modèle
  • il manque des informations pour construire la représentation de la trace : les noms (humains) des colonnes doivent provenir du modèle, ou du fichier de l10n associé.

Comme quoi, c'est vraiment là un problème technique et non pas scientifique. Il faut qu'on se force à prendre des décisions pour avancer.

jeudi 4 juin 2009

Veille sur la trace modélisée dans les recoins du web

C'est bien connu, Google fait tout sauf le café.

En combinant les outils de recherche et de traduction, il devient possible d'aller regarder ce qui se fait sur le web (pour le reste du net, il faudra trouver une autre solution. Je pense surtout à USENET et aux archives publiques de ML) en matière de traces modélisées.

L'idée est de trouver ce qui se fait en russe, japonais et chinois sur le suivi de l'activité. Pour se faire, j'ai décliné la recherche « trace modélisée activité collective » dans différentes langues. Des résultats intéressants sont sortis, ça faudrait le coup d'y passer un peu de temps pour faire le tri.

mardi 26 mai 2009

Traces et vie privée

Annonce de débat : Les grands débats du CNRS : Sécurité ou vie privée, a-t-on le choix ? :

Les téléphones portables, les cartes de paiement ou de déplacement, les technologies numériques de la reconnaissance et de la localisation (biométrie, puces RFID) envahissent notre quotidien. Ces techniques sont censées nous faciliter la vie et assurer notre sécurité. Peuvent-elles porter atteinte à notre vie privée ? Sommes-nous constamment sous surveillance ?

Au niveau de SILEX, nous discutons depuis longtemps sur le caractère privé des traces : censure d'observés, partage sélectif de traces, stockage, etc.

Mais je ne crois pas qu'il existe un document dans lequel nous avons mis cela par écrit. Ça pourrait être l'occasion de s'y mettre, en commençant par les grandes lignes.

Un utilisateur doit pouvoir :

  • connaître toutes les traces qu'il possède
  • consulter de façon compréhensible ses traces et leur contenu
  • supprimer une trace
  • supprimer un observé dans une trace
  • ...

Pour ce faire, la page Traces et vie privée du wiki a été mise en place avec les éléments existant.

jeudi 4 septembre 2008

La métaphore du porteur de miroir pour les traces modélisées

Une application à base de traces modélisées peut être imaginée telle un compagnon prenant la forme d'un porteur de miroir. Pour observer la trace de son activité, l'utilisateur regarde alors son reflet dans ce miroir. Le porteur obéit aux instructions de l'utilisateur pour modifier le miroir.

  • Ainsi, le porteur peut agrandir ou rétrécir le miroir pour changer la quantité d'éléments reflétés : on fait varier la quantité d'observés collectés par le système à base de traces (SBT).
  • Il est possible de placer des filtres devant le miroir pour ne voir qu'une partie du reflet : on sélectionne des observés précis par des règles de filtrage.
  • On peut ajouter un prisme pour envoyer (une partie de) son reflet à d'autres personnes, et recevoir des reflets provenant d'ailleurs : on réalise un partage de trace, et on construit des traces croisées et conjointes.
  • L'utilisant de lentilles permet de concentrer ou d'élargir des reflets : on ré-écrit la trace en une trace de plus haut niveau, et on crée des observés calculés.