lundi 28 septembre 2009

Étudiants en informatique, préparez votre entrée sur le marché du travail

Régulièrement, des étudiants me demandent comment va se passer pour eux l'insertion dans le monde professionnel, à la fin de leurs études. Ma réponse habituelle est « ça dépend », car de nombreux facteurs entrent en jeu : domaines de compétences, technologies actuelles, tendances stratégiques, secteurs ciblés, etc. Mais il est possible d'identifier des éléments universels.

Définir un positionnement

Je recommande vivement à mes élèves de disposer de deux axes forts avec quelques à-côtés. L'idée est de ne pas être un spécialiste poussé dans une seule technologie (qui sera obsolète en cinq ans), mais de se positionner comme un expert de son domaine, avec des compétences d'ouverture.

Le positionnement permet à un recruteur de cerner aisément le profil de l'informaticien, ce qui n'est pas rien quand il s'agit de décrypter des acronymes barbares. Ainsi, on peut songer aux domaines suivants :

  • développement : planification, cahier des charges, génie logiciel, programmation, déboguage
  • base de données : conception, utilisation, optimisation
  • modélisation : collecte d'informations, analyse, transfert vers l'applicatif, adaptation, validation
  • réseau & télécommunication : technologie, topologie, routage, conception, déploiement, liaison
  • humain & social : interaction homme-machine, ergonomie, enseignement, handicap
  • management : conception de projet, conduite de projet, comptabilité, gestion d'entreprise, veille

Maitriser la base

Quelque soit sa spécialité, un informaticien doit être capable de maitriser plusieurs fondamentaux qui sont requis partout :

  • un langage de programmation moderne : objective-c, java, ruby… Le but est d'être en mesure de développer du début à la fin une application graphique.
  • une technologie web actuelle : service web, AJAX, RIA. Le web est de nos jours une plate-forme incontournable.
  • administrer un système d'exploitation : et ce correctement ! Que ce soit un système UNIX ou Windows, vous devez être capable de gérer complètement votre machine principale.
  • connaitre les principaux algorithmes : tri, recherche, parcours, etc. Si ça fait parti de la grande littérature, vous devez avoir une idée de ce que c'est et de comment l'utiliser.

Être familier avec l'inévitable

Qu'on les apprécie ou non, certaines choses sont inévitables : les examens de fin d'année, la visite annuelle chez le dentiste, et :

  • la ligne de commande sur les systèmes UNIX : vous serez nécessairement amené un jour à travailler à distance sur un serveur. Que ce soit pour réparer un site web, déployer une application ou encore partager des fichiers, vous ne pouvez échapper à la ligne de commande des systèmes UNIX (MacOS, GNU/linux, *BSD, etc)
  • la conception de sites web simples, à la main et avec un framework (Drupal, SPIP, Dotclear, WordPress, etc) : mettre en place et maintenir un site web est une activité récurrente : informer ses clients, communiquer sur un évènement, ou encore soutenir un projet. Ne pas être capable de faire une page web, c'est comme ne pas savoir nager lors d'une sortie à la piscine : autant rester chez soi.
  • la recherche d'information : développez votre google-fu. Car ce qui compte n'est pas de disposer de l'information, mais de savoir se la procurer.

À faire absolument

  • créer son profile dans les réseaux sociaux du moment : LinkedIn, FaceBook, twitter
  • préparer, et maintenir à jour, plusieurs CV : orientés compétences, réalisations
  • déployer, et maintenir à jour, un site web personnel : le but est d'exister sur internet Informations standards, liens vers CV, publications, projets passés et actuels, profiles de plate-formes sociales…
  • participer à un projet de logiciel libre : permet de se faire de l'expérience, et démontre sa capacité à travailler en autonomie, en équipe et à distance

mercredi 23 septembre 2009

Interconnexion application flash ↔ KTBS

Bonne nouvelle, les interconnexions sont en train de se mettre en place entre le KTBS et différents prototypes. Par contre, il reste du boulot.

Enfin bon, ça commence à tourner, c'est le principal. Voici un extrait de code en ActionScript montrant comment faire un aller-retour entre une application Flash et le KTBS. Notez la création simple de la liaison pour le service web via le HTTPService(). En revanche, ne me demandez pas (encore) comment on fait si la connexion timeout, saute, se bouche ou autre. Il est également possible d'utiliser directement des sockets, ce qui est pratique pour affiner les choses à la main.

Sérieusement, ce langage est immonde. Ça a la lourdeur du javascript, et la grammaire a été conçue par un polonais shooté à la vodka : ça ressemble presque à un langage normal, sauf quand ils se sont amusé à permuter l'ordre des éléments sans aucune raison valable (genre variable:type ← franchement, faut être malade pour inventer ça...). C'est supposé être un langage de haut niveau, userfriendly et tout, mais on se tape les contraintes héritées des années 70 (marqueur de fin de ligne, typage fort, etc). Et surtout ils ont tout pété entre les versions 2 et 3 du langage. Sans compter que le compilateur (en java) a le dynamisme d'une vache salers explosée au Lexomil.

Dernier détail : sur le papier, l'eventListener fonctionne, mais en pratique il ne me donne rien; je soupçonne fortement un tripatouillage interne des données, genre « bouge pas, je vais te mettre ça en forme et nettoyer ce qui ne sert pas ». Ben tiens...

// l'objet décrivant le SGBT
private var _sgbt :HTTPService;


/*
 * constructeur de KTBS
 */
public function SGBT() :void {
// création d'un service web sur le KTBS de PA
	_sgbt = new HTTPService();
	_sgbt.url = "http://ip6-localhost:8001/";
	_sgbt.method = "GET";
	_sgbt.contentType = "application/rdf+xml";
// reniflage de la réponse du KTBS, avec appel à reponse() en lui passant les données retournées
	_sgbt.addEventListener(ResultEvent.RESULT, reponse);
	_sgbt.send();
}


/*
 * traite les données reçues du KTBS
 * retourne : rien
 * mesData est l'événement provenant du listener sur requête du KTBS
*/
public function reponse(mesData :ResultEvent) :void {
	_sgbt.removeEventListener(ResultEvent.RESULT, reponse);
// trace() est une primitive de déboguage écrivant sur la sortie standard
	trace(mesData.result.toString());
}

lundi 21 septembre 2009

Les 10 ans de Créalys

Créalys, l'incubateur d'entreprises issues de la recherche, fête ses 10 années d'existence. Et comme il se doit, cela se traduit par un buffet accompagné de discours.

Livre blanc de l'innovation

Étaient présentes une bonne centaine de personnes, principalement des chefs de (jeunes) entreprises (en tenue de ville), des banquiers/investisseurs/financiers (en costumes cravatés), des gens de la région/département/etc (aux cheveux poivre et sel) et des doctorants (avec des t-shirts variés). Bref, que du normal.

J'ai trouvé qu'il y avait un nombre important de doctorants, pour ce genre d'évènement : environ 10%, quasiment tous en fin de thèse ou en début de post-thèse. Un bon nombre était en train de porter un projet de conception d'entreprise, à partir de travaux auxquels ils avaient participé dans leurs équipes de recherche.

Niveau recherche, il y avait beaucoup de personnes du LIP (doctorants principalement), et l'INSERM était bien représenté. Les SHS étaient quasi absentes, et curieusement les sciences de la vie étaient en retrait. Le gros des troupes était orienté physique, chimie, et sciences de l'information (surtout réseau)

J'ai discuté avec plusieurs personnes sur les questions du financement initial, fait un lâché de cartes de visites, et globalement réseauté en attendant que le buffet ouvre. Malheureusement, il a fallu attendre que passe la série de discours et de petits films d'autopromo, pour ensuite être rejoint par Olivier et enfin attraper quelque chose à manger.

Bref, un évènement quelconque servant surtout à se faire voir et à prendre de la doc; mais ça valait le coup d'y aller en étant sur place.

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]*"
	]
.

mercredi 2 septembre 2009

Courrier des lecteurs : utilisation de TOR en France

Régulièrement, je reçois des courriers me demandant des précisions sur mes billets, ou des conseils en relation avec mes activités sur le net. Je prend toujours le temps d'y répondre en longueur, mais certains messages gagneraient à être plus largement diffusés, car les mêmes questions reviennent régulièrement.

Ainsi, les mails concernant la protection de la vie privée tournent souvent autour de deux thèmes : comment protéger sa vie privée dans telle ou telle activité, et est-ce légal de vouloir la protéger avec un outil précis. Voici le dernier message que j'ai reçu à ce sujet.

Je vous écrit suite au fait que vous soyez noté comme adresse de contact du noeud de sortie Tor "rebelZ".

Ce dernier est à priori hébergé en France sur une machine chez GANDI. Vu que je m'intéresse à la situation actuelle de Tor vis-à-vis de la législation autour des télécommunications qui a tendance à se durcir en France, je me demandais si vous aviez eu le moindre problème légal jusqu'ici.

Par ailleurs, quelles sont vos relations avec GANDI ? Leur avez-vous demandé avant de démarrer ce relai ? Vous ont-ils déjà transmis des plaintes concernant ce service ?

Merci d'avance si vous preniez le temps de répondre à mes quelques questions.

PS : Je vous joint ma clé GnuPG si vous désiriez me chiffrer votre réponse.

Je suis effectivement un client de Gandi, sans rien de particulier : je leur confie la gestion de plusieurs DNS, utilise leurs systèmes de blog, d'hébergement et de courrier. Bien que je trouve leurs prix élevés depuis quelques temps (principalement à cause de l'augmentation de la concurrence) je reste chez Gandi car la qualité de service est élevée : uptime correct, interfaces web efficaces, et une bonne assistance en cas de soucis.

Ainsi, lorsque j'ai besoin de déployer rapidement un petit serveur pour héberger un projet ou tester quelques outils, j'utilise l'hébergement mutualisé de Gandi. La machine rebelz (rebelz.Clauzel.nom.fr) est l'une d'entre elles. Elle n'a rien d'extraordinaire, si ce n'est le fait qu'elle n'accepte que des connexions chiffrées (https, ssh, svn+ssh, etc) et que ses volumes sont eux aussi chiffrés. En effet, elle sert actuellement de plate-forme communautaire à un petit groupe de chercheurs de mon laboratoire. Pour parler technique, il s'agit d'un serveur headless mutualisé Debian constitué d'une seule part (1/64e).

En ce qui concerne TOR (couplé à outils comme privoxy, socat et tsocks), je l'utilise depuis ses débuts, et j'ai pour habitude de mettre en place des relais là où je le puis afin de renforcer son usage. C'est donc tout naturellement que j'ai mis en place un nœud sur rebelz.

À ma connaissance, TOR n'a jamais été impliqué dans le cadre d'une enquête judiciaire en France, aussi bien en simple relais qu'en nœud de sortie. Mais le mieux serait d'interroger directement des juristes spécialisés. Néanmoins, comme il s'agit là d'assurer le rôle d'opérateur technique permettant l'interconnexion de systèmes informatiques, je ne vois pas la possibilité pour un juge de mettre en cause l'administrateur : en effet, rendre responsable l'administrateur de l'usage qui est fait du relais obligerait également à rendre responsable France Télécom des appels circulant par ses lignes. Inconcevable, quoi qu'en disent les ayatollahs de LOPPSI.

En ce qui concerne l'utilisation des machines virtuelles de Gandi, les conditions générales de l'hébergement (article 3) ne font aucune mention de la mise en place de relais de services. Les seules contraintes sont le respect de la législation française (droit d'auteur, diffamation, etc) et la gestion en « bon père de famille ».

En résumé : TOR, yabon.

À la recherche du positionnement perdu

Le problème

Pour savoir où l'on va, il est utile de déterminer où l'on est; cela se fait en observant ce qui nous entoure et en dressant des cartes. Avant d'entamer des métaphores, comparaisons et autres analogies géographiques bancales, passons tout de suite à la question essentielle : comment situer mes travaux dans l'existant ? Je touche en effet à beaucoup de domaines, et au final il y a toujours ce risque que je bascule d'un côté, alors que je dois rester en équilibre, quelque part dans tout cela.

J'ai donc sorti ma fidèle table périodique des visualisations, et je me suis mis au travail.

L'évolution des représentations

Trouver la méthode de représentation qui-va-bien n'est en soit pas très compliqué. Avec le temps, on prend ses habitudes, on réutilises ses patrons de schémas et zou; la subtilité réside alors dans l'arrangement esthétique. En effet, la complexité d'un schéma augmentant avec le nombre de ses éléments, le nombre de permutations possibles entre ses éléments croit de même, sinon plus (cette démonstration est laissée comme amusette à l'attention du lecteur :).

Représentation par un diagramme de Venn classique

Point bleu de Google Maps

Puisque j'avais à faire avec une carte montrant les recouvrements entre différents concepts, avec quelque part un point bleu nommé « mon travail est ici », ma première idée a été de faire dans la simplicité en invoquant Venn et son diagramme.

J'ai commencé par représenter les trois domaines initiaux que j'avais identifié dans mon travail de doctorat :

  • l'informatique
  • les sciences cognitives
  • les sciences de l'enseignement

Même si mon sujet de thèse a récemment évolué vers la visualisation interactive de traces d'interactions, les fondamentaux restent les mêmes : la couverture sera juste tirée un peu plus d'un côté au lieu d'un autre.

De ces domaines initiaux, j'en ai tiré des domaines secondaires. Secondaires non pas par l'importance, mais par le fait qu'ils existent grâce à la rencontre des domaines premiers. On pourrait couper les cheveux en quatre et se lancer des briques au visage pour décider si ma vision est bonne ou pas, mais à ce point je m'en moque un peu (la source des schémas est sur le dépôt SVN de l'équipe, vous pouvez les reprendre si vous le souhaitez :)

Finalement, dans tous ces domaines j'ai placé quelques concepts-clés pour préciser les spécificités concernées. Et je me suis placé au milieu.

Positionnement classique

Le résultat est moche (comprendre : pas sexy, banal, évident et à la limite de l'ennuyeux), il faut être honnête. Certes, on voit dans l'ensemble où je veux en venir et comment je surf sur une foultitude de domaines, mais la seule réaction que cela m'évoque (en dehors d'un « c'est moche » dubitatif) est que si le fond a du potentiel, la forme est à revoir.

Représentations par barres

Positionnement par barres

Mon deuxième essai a été d'envisager une approche similaire, mais plus propre. Puisque les patatoïdes de Venn rendaient mal à cause de leurs nombreuses intersections, je me suis dit qu'une approche plus carrée fournirait un résultat plus net. Hop, les traits se raidissent et les angles apparaissent. Malheureusement, je constate immédiatement que cela ne règlera pas le problème des intersections.

Ou alors, il faudrait ajouter une dimension spatiale et faire une schémas en 3D isométrique. On aurait alors une superposition sur l'axe des Y des différents domaines principaux : informatique, science cognitive, etc. Les domaines résultant de croisements (EIAH = informatique + enseignement) étant alors représentés par des volumes de coupe, occupant sur les axes X et Y des espaces de spécialisation.

Jolie idée, pouvant fonctionner. Mais elle implique de dégainer un outil de modelage 3D pour produire un tel schéma, car les outils de diagrammes habituels (comme dia et OmniGraffle (non, Visio®™© n'est pas un bon outil)) ne sont pas adaptés à ce genre de réalisation. Certes, on pourrait y arriver par des losanges et des effets de transparence, mais… non, vraiment non, en fait.

Essayons autre chose.

Représentation par blocs

Décidément, plus je gribouille des trucs sur le tableau et que je joue avec différentes méthodes de représentation, et plus je me dis que les diagrammes de Venn sont probablement l'approche la plus adaptée (je vous fais grâce des étapes intermédiaires, pour la faire courte); mais en laissant tomber quelques aspects formels, pour me simplifier la tâche. Au besoin je reprendrais alors le schémas pour le régulariser.

Positionnement par blocs

Et donc, mes patatoïdes initiaux discutent avec mes barres pour donner des blocs. La nature est parfois étrange, mais le résultat est très intéressant. J'obtiens quelque chose de propre, clair, et surtout immédiatement lisible. L'œil est flatté et le cerveau repus; j'approche de la solution, pas de doute !

Mais non en fait : il me reste un gros problème. Regardez là. Oui, là ! Mon bloc « trace modélisée » en haut à droite, il ne vous choque pas ? Non ? Regardez au centre, le bloc « visualisation interactive de traces d'interactions dans les activités collaboratives synchrones d'apprentissage »; et ouiiii, ils ne se recouvrent pas. Autrement dit, les deux domaines sont complètement disjoints. Et ça, ce n'est Pas Bon car la visualisation de traces est liée à la théorie de la trace. De la même façon, mon bloc « activité collective » est isolé alors qu'il est primordial.

Bon, clairement ça ne fonctionne pas. il faut que je reprenne mon approche.

Représentation par rosace

Voyons voir… Ce qui compte dans le schéma, c'est moi. En effet, ce que je veux représenter, c'est comment MOI je me situe par rapport aux domaines. La première étape consiste donc à me poser (ou plus exactement, mon sujet de thèse) au milieu d'un espace vide pour ensuite positionner le monde autour de moi. Une approche très narcissique, certes, qui a parfaitement fait ses preuves.

Et hop, ensuite je trace un premier patatoïde qui m'englobe. Hum, qui m'englobe partiellement ou complètement ? Partiellement, cela veut dire que je ne touche pas à l'ensemble du domaine; complètement, je couvre tout. Cela demanderait réflexion si le leitmotiv de Yannick ne me revenait pas en tête : « ton travail, c'est tout cela ». Paaaarfait, j'ai ma réponse sans avoir à réfléchir.

Positionnement par rosace

La suite de la conception est mécanique : je prend tous les domaines, premiers et secondaires, pour les mettre au même niveau et je les répartis autour de moi. Copier, coller, changer la rotation, changer la légende, changer la couleur. Hop, ça c'est fait. OoooOoOoooh, ça fait une rosace. Shiny.

J'ajoute un fond pour borner la figure (et du coup me rapprocher du formalisme de Venn en définissant l'univers), et je le dégrade pour faciliter la lecture des textes clairs (sérieusement, les développeurs d'Omnigraffle, il faudrait leur envoyer des fleurs : ce logiciel est tout simplement divin).

J'ajoute enfin quelques concepts-clés, pour donner matière à discussion (ruse : pendant que les gens pinaillent dessus, ils ne parlent pas du reste ;) et je n'oublie pas de bien mettre en avant l'aspect « trace modélisée » de la chose.

Je termine en rédigeant ce billet, et je pars manger.

Et maintenant ?

C'est, ma foi, une fort belle première étape (sisi). Non seulement elle donne un support visuel permettant de discuter, mais aussi de déjà illustrer mon travail. Mais on peut faire mieux, j'en suis sur. On pourrait, par exemple, réfléchir sur :

  • le recentrage d'éléments, ou en mettre certains en valeur. Ainsi, je ne suis pas cogniticien mais informaticien, donc est-ce qu'il ne faudrait pas faire la taille des pétales en fonction de l'importance du domaine dans mes travaux ?
  • la précision de concepts-clés : je peux en ajouter, ou alors en faire passer certains sous forme de pétales s'ils sont suffisamment important;
  • jouer à positionner des choses (travaux, idées, outils, etc) sur la rosace, pour voir si ça tient. Si j'arrive à tout caser dedans, est-ce que cela ne serait pas une forme de validation de ma représentation ?
  • la généricité et la spécialisation : comment réutiliser et décliner ce schéma ? Au vu des travaux que font les membres de l'équipe, comment pourrait-on envisager une harmonisation globale pour avoir des représentations simples des positionnements de SILEX sur des thématiques précises ?

dimanche 2 août 2009

Optimisation de référencement dans Google

Damien dans Google Street View

Par le plus grand des hasards, je suis visible dans Google Street View. Enfin, uniquement si on sait où j'habite, à quoi je ressemble avec mon aspirateur à la main, et ce qui se trouve sur mon balcon.

Néanmoins, je suis dans Google Street View :)

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.

dimanche 21 juin 2009

Vie quotidienne au CNRS : censure des opinions personnelles

Thibaud Hulin travaille avec moi au LIRIS, CNRS UMR5205, dans l'équipe SILEX. Thibaud Hulin et moi partageons le même statut, à savoir contractuel et non pas titulaire.

Dans le contexte de l’affaire Vincent Geisser, Thibaud relai les évènements en cours et les commente. Quelques jours plus tard, il reçoit un appel téléphonique (quand on connait l'état de l'annuaire du LIRIS, c'est déjà en soit une surprise :) du directeur de laboratoire lui demandant de supprimer son billet; la demande venant du service du Fonctionnaire de Sécurité Défense (FSD).

Au delà d'un soutien normal envers mon collègue de travail, je ne peux pas m'empêcher de m'interroger sur les prérogatives et droits de ce fameux FSD qui agit tant mais dont on ne sait rien.

Sur cette affaire, je ne prend pas position sur les travaux de Vincent Geisser, que je ne connais pas, mais sur le contrôle de la liberté de parole des personnes travaillant au CNRS.

En savoir plus :

vendredi 19 juin 2009

Outil de partage pour les supports visuels de présentation

SlideShare est un outil web de partage de support visuel de présentation (SVP).

Il permet simplement de mettre en ligne ses SVP afin de les diffuser. Mais il apporte en plus des fonctionnalités intéressantes, comme :

  • la notion de groupe, pour rassembler les membres d'une équipe
  • la définition d'une licence pour l'exploitation des contenus
  • des outils à la YouTube pour intégrer les SVP dans une page web
  • un système de commentaire pour obtenir des retours sur ses œuvres
  • des fonctionnalités d'exportation et de téléchargement
  • des fonctionnalités d'enrichissement possible par piste audio
  • le suivi de personnes et d'œuvres intéressantes
  • etc.

Bref, yabon. Fini de s'embêter avec le FTP, la construction (et maintenance !) de page d'index rassemblant le matériel... 3 clics et c'est fait.

En revanche, il ne faut pas oublier qu'un SVP n'est pas un document qui se suffit à lui-même. En effet, comme son nom l'indique c'est bien un support et non pas une ressource autoportée. J'en parle un peu ici.

Pour vous donner une idée de ce qu'il est possible de faire, voici une collection de mes SVP. Sexy, non ?

- page 9 de 12 -