lundi 10 novembre 2008

Outil d'exploration du web

TouchGraph Google Browser : « The TouchGraph Google Browser reveals the network of connectivity between websites, as reported by Google's database of related sites. »

TouchGraph Google Browser est une version simplifiée et spécialisée de TouchGraph, un outil d'exploration du web. Il suit les liens des pages pour réaliser une cartographie de haut niveau.

Une utilisation concrète est de lancer une exploration sur le nom d'une personne pour découvrir les sites sur lesquels elle apparait, et quelles sont les liaisons entre les informations. On peut alors découvrir des sous-groupes de pages formant des centres d'intérêts et des thématiques globales.

mardi 14 octobre 2008

Outils collaboratifs à découvrir

Coccinella

Coccinella : « Coccinella is a free and open-source cross-platform communication tool with a built-in whiteboard for improved collaboration with other people. «

Pour faire simple, Coccinella peut être décrit comme étant une fusion d'IRC, de Paint et de Skype Voice, le tout sur XMPP. Si les outils sont basiques (on a vu bien mieux ailleurs, par exemple, en terme de tableau blanc), l'intérêt est l'interopérabilité. L'utilisation de XMPP (est supposé) permet(tre) de ne pas lier l'activité à un outil précis, et donc de laisser la liberté à chacun de travailler dans ses propres modalités. Ça, c'est la théorie car en pratique le couplage est loin d'être évident. Je suis particulièrement sensible à cet aspect de découplage de l'activité par rapport aux outils, car cela permet de résoudre beaucoup de problèmes d'utilisation.

DocSynch

DocSynch : « DocSynch is a collaborative editing system on top of IRC. By transforming single-user editors into multi-user editors, it allows to remotely edit text documents together. Implementations are targeted as extensions to many popular text editors and IDEs. A working version is available for jEdit. »

DocSynch a une approche assez louche pour faire circuler les informations : il s'appuie sur IRC. En pratique, chaque fichier est un canal de discussion sur lequel les éditeurs (agnostiques, car DocSynch est plus un framework qu'un outil) des utilisateurs vont faire circuler les données. Naturellement, à côté des canaux sont prévus pour les discussions entre humains. Le résultat est un système d'édition collaborative ouvert, mais qui demande du boulot pour être mis en place.

Gobby

Gobby : « Gobby is a free collaborative editor supporting multiple documents in one session and a multi-user chat. It runs on Microsoft Windows, Mac OS X, Linux and other Unix-like platforms. »

Il n'y a pas grand chose à dire sur Gobby : il s'agit d'un éditeur de texte collaboratif, avec un chat. Pas de possibilité d'interagir avec d'autres outils, de faire simplement des améliorations, etc. En contre-partie, il est directement utilisable.

dimanche 5 octobre 2008

Outil de tableau blanc en ligne

Dabbleboard est une application web de tableau blanc qui permet très simplement de travailler à plusieurs, avec des outils intéressants.

J'aime bien l'outil pour dessiner des formes, qui permet de « nettoyer » des tracés fait à main levée : par exemple, on fait 4 traits ressemblant vaguement à un carré, et l'outil va derrière reconnaître la forme et les transformer en un « vrai » objet de type carré.

Les fonctions de mises en forme sont basiques mais suffisent largement, avec une interface claire : pas besoin de se balader dans des menus pour choisir l'épaisseur du trait parmi 48 possibilités; juste quelques éléments existent. Cela fait une interface légère et agréable.

Je ne sais pas ce que ça vaut pour réaliser un « vrai travail » avec lui, mais ça donne envie.

lundi 22 septembre 2008

Progression du e-learning en entreprise

Un article sur le progrès du e-learning en entreprise.

On n'y apprend pas grand chose (eh, c'est Le Monde Informatique ;), mais ça rejoint la tendance que je perçois : montée du e-learning pour diminuer les coups de formation (un site web avec des doc et exercices coute moins cher que des formations avec des intervenants extérieurs), couplé avec des interventions ciblées.

Le Graal étant un plan de formation qui s'adapte précisément aux besoins et calendriers de l'entreprise.

lundi 8 septembre 2008

Manipuler les images disques de MacOS en ligne de commande

Avant-propos

Pour les utilisateurs venant du monde UNIX, il est indispensable de savoir manipuler en ligne de commande les images disques d'Apple. Il en existe de deux sortes : les traditionnelles (avec leur variations : chiffrées, compressées, etc) et les grossissantes.

Les images disques grossissantes sont des images disques ayant une taille maximale définie à la création. Toutefois, uniquement l'espace utilisé est écrit sur le disque, ce qui permet de limiter l'espace occupé.

Concrètement, une telle image se présente sous la forme d'un répertoire IMAGE.sparsebundle contenant une collection de bandes, un index des données et un fichier de métadonnées sur l'image. Il va de soit qu'il est extrêmement déconseillé d'aller trifouiller au petit bonheur la chance à l'intérieur de ces fichiers.

Il est important de se pencher sur la façon dont les volumes et disques sont attachés sous MacOS. Sans entrer dans les détails, on admettra que les disques physiques sont directement (c'est à dire, sans tampon ou couche tierce) accessibles par les nœuds /dev/rdisk*; ils ont leur contrepartie logique sous la forme /dev/disk*.

Une image disque, étant un volume logique, sera attachée sous la forme /dev/diskXsY, comme si elle était un disque dur. X est alors un identifiant du disque, et chaque partition est associée à un identifiant Y. Chaque partition du disque logique peut alors être montée; le point de montage par défaut étant /Volumes/. Il est bien sur possible d'attacher une image disque sans la monter, afin d'utiliser par exemple des outils travaillant sur les blocs.

Également, MacOS associe à chaque image disque une somme de contrôle permettant de tester son intégrité. Par défaut, des tests (parfois longs) sont effectués. À vous de décider si vous voulez les valider ou bien les ignorer.

La syntaxe des exemples suivants est valable pour MacOS Léopard, et peut-être des versions ultérieures (Jaguar, Panthère et Tigre ont connu des évolutions dans la gestion des images disques; sans parler de Puma et Guépard).

Attacher une image disque

Attache le disque en un nœud /dev/disk* et monte le volume dans /Volumes/. Il est possible d'attacher une image disque sans monter son volume en utilisant l'option -nomount. D'autres options comme -nobrowse ou -private marqueront le volume comme n'étant pas utilisable par les applications (ainsi, le Finder ne l'affichera pas) ou ne notifieront pas le système de l'ajout du disque (pas d'indexation SpotLight).

hdiutil attach IMAGE

Démonter une image disque

Démonte un système de fichiers d'une image disque sans libérer ce dernier. Le nœud /dev/disk* est toujours présent mais le système de fichiers n'est plus monté.

hdiutil umount /Volumes/IMAGE

Démonter et détacher une image disque

Démonter le système de fichiers; le nœud du disque logique est supprimé de /dev/disk*,

hdiutil detach /Volumes/IMAGE

Créer une image disque grossissante

Créer une image disque de taille maximale 500 Go, avec un système de fichier en HFS+ journalisé et sensible à la casse :

  • -size 500G : taille maximale de l'image
  • -fs HFSX : système de fichiers HFS+ sensible à la casse
  • -J : utilisation d'un journal pour le système de fichiers
  • -type SPARSEBUNDLE : le type d'image disque
  • -volname "Sauvegardes" : le nom du volume de l'image disque; il sera utilisé comme nom de point de montage par défaut dans /Volumes/
hdiutil create -size 500G -fs HFSX -fsargs -J -type SPARSEBUNDLE -volname "Sauvegardes" Sauvegardes.sparsebundle

Optimiser la taille de l'image disque

Pour une image disque grossissante, il est possible de demander la récupération de l'espace non-utilisé dans les bandes, pour faire ramener sa taille à celle du volume des données qu'elle contient.

hdiutil compact IMAGE

Formater un volume en HFS

Il est tout à fait possible de formater un volume d'une image disque existante. Il suffit d'attacher l'image disque, et de travailler sur les partitions. On peut utiliser les options suivantes :

  • -J : utilisation d'un journal pour le système de fichiers
  • -s : le système de fichier sera sensible à la casse
  • -v Données" : le nom du volume
newfs_hfs -J -s -v "Données" /dev/diskXXXXX

Connaître les opérations possibles sur les images disques

La commande hdiutil ne se limite pas aux simples opérations de montage et démontage de volumes. Elle permet également de convertir, graver, segmenter et d'une façon générale d'effectuer toutes les opérations possibles sur les images disques. La commande en elle-même intègre une documentation extensive, et son manuel contient des exemples concrets.

hdiutil help et plus précisément hdiutil help COMMAND.

Références

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.

Le vocabulaire du tableau blanc

En préparant la rédaction d'un article, j'ai découvert un problème : je ne sais pas décrire simplement l'activité que l'on réalise sur un tableau blanc; pire, je ne sais pas la nommer.

Il est courant que les noms des outils informatiques deviennent des verbes permettant de décrire ce que l'on fait avec : on « se skype » pour se parler, on « google » une question ou encore on « t'chat » (quel mot horrible !) avec ses amis.

Mais quel vocabulaire emploi-t'on avec le tableau blanc ?

Il existe des termes génériques comme « interagir » qui ne sont pas spécifique à cet outil, contrairement à d'autres (par exemple, « téléphoner » et non pas « téléparler »). Des termes plus scientifiques tels que « cotravailler » sont très laids, et de tout façon imprécis.

Si l'anglais permet de construire sans complexe des néologismes (avec tous les problèmes que cela comporte) comme «to whiteboard », une étude ad Gogulum montre que le terme ne prend pas. La forme française « tableaublancer » est là encore de toute façon très laide.

Un des raisons vient du fait que le tableau blanc est un outil qui permet de supporter une activé, et non pas une activité en elle-même. On utilise un tableau blanc pour partager, créer ensemble, montrer, organiser, etc. Utiliser un tableau blanc dans le simple but d'utiliser un tableau blanc n'a pas de sens. Donc on ne le fait pas, et comme on nomme rarement une non-action...

C'est pour cela qu'on voit fleurir des périphrases comme « pointer sur le tableau » ou bien « déposer sur l'espace partagé » pour désigner ce qui se fait dans l'activité. Mais quand il s'agit de travailler, on parle simplement de « modifier le carré » ou d'« ajouter du texte »; le support de l'activité s'effaçant pour ne laisser place qu'à l'activité elle-même.

Le tableau blanc, un outil innommable condamné au rang de faire-valoir ?

mercredi 3 septembre 2008

Problème d'encodage avec Java sous MacOS X Léopard

Sous Léopard, la machine virtuelle java (JVM) d'Apple se lance par défaut avec l'encodage MacRoman. Si choix est compréhensible au vu de l'histoire des technologies d'Apple, il est toutefois de nos jours rendu obsolète avec le passage à l'unicode. Pire, les développeurs et administrateurs systèmes s'attendent désormais à des outils fonctionnant en UTF-8, ce qui pose donc des problèmes d'intégration.

Pour les systèmes GNU/linux, les différentes JVM travaillent avec l'encodage du système qui est désormais l'UTF-8. Mais la JVM d'Apple se comporte différemment, avec un réglage défini en interne.

Faisons quelques essais avec ce jeu de test.

Commençons avec GNU/linux :

$ uname -a
Linux liristpq.Univ-Lyon1.fr 2.6.27-2-generic #1 SMP Thu Aug 28 17:18:43 UTC 2008 x86_64 GNU/linux

$ java GetEncoding 
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding 
Random bytes
encoding: ASCII

Comme on peut le constater, l'utilisation de l'encodage est dynamique, avec par défaut celui du système.

Regardons maintenant ce que cela donne sur Léopard. Nous commençons par lancer la même commande que pour GNU/Linux, et ensuite nous affinerons manuellement l'encodage UTF-8 avec l'option -Dfile.encoding=UTF-8 :

$ uname -a
Darwin arda.local 9.4.0 Darwin Kernel Version 9.4.0: Mon Jun  9 19:30:53 PDT 2008; root:xnu-1228.5.20~1/RELEASE_I386 i386 i386 iMac6,1 Darwin

$ java GetEncoding
Random bytes
encoding: MacRoman

$ java -Dfile.encoding=UTF-8 GetEncoding
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding
Random bytes
encoding: MacRoman

La différence est flagrante. La JVM d'Apple sous Léopard utilise par défaut l'encodage MacRoman et ne supporte pas la sélection par les locales, ce qui pose de réels problèmes d'interopérabilité.

Une solution simple est d'appeler systématiquement la JVM en spécifiant l'encodage UTF-8, mais elle n'est pas idéal.

mardi 12 septembre 2006

Participation au 2006 HCI Workshop on Computer Assisted Recording, Pre-Processing, and Analysis of User Interaction Data

Je viens de participer au 2006 HCI Workshop on Computer Assisted Recording, Pre-Processing, and Analysis of User Interaction Data, in co-operation with ACM. Voici ce que j'en retiens à chaud.

Informations

Theme

Although computer-assisted recording, pre-processing and analysis of user interaction behaviour has received continuing research attention over the years, its full potential as a data source to inform the design process seems still unrealised. With technologies such as broadband internet and distributed applications, it is possible to continuously and unobtrusively collect interaction data. This data can relate to keypresses, mouse movements, eye gaze, as well as high-level events such as completing a task. This workshop will explore a number of open questions in this area, including: What is the best way to record and collect interaction data? What kind of computer tools, i.e. algorithms, can we use to filter and separate relevant data from noise? Which types of analysis and measures give us design-relevant insight into the interaction, the users, their interaction problems, their needs, personality, and experience? Traditionally, psychologists, usability experts, ergonomists, etc. have been among the main consumers and users of this type of data and supporting tools. However, making the data and tools easy accessible to designers and software engineers might even more directly impact the quality of the application. Therefore, we shall also explore the implications of this wider applicability of usage data.

Objective

The main objective of the workshop is to establish a community of researchers with an interest in this area, allowing a lively exchange of ideas and a joint exploration of outstanding problems and potential solutions. Please note that web usage mining in relation to product sales strategies is not within the scope of this workshop.

Ce que nous présentions

Le travail que nous présentions, dans le cadre du projet de recherche européen AtGentive, portait sur la conceptualisation et la gestion de l’activité : comment identifier les différents types d’activités réalisées sur ordinateur par utilisateur, pour les regrouper automatiquement en thématiques et faciliter le basculement de contexte de travail via des outils intelligents.

Nous avons présenté nos deux prototypes actuellement à l’essai. Le premier s’appuyant sur l’utilisation simple d’un virtual desktop manager, et le second, plus poussé, mettait en œuvre nos outils d’analyse d’activité pour proposer des éléments de métacontrôle à l’utilisateur.

The 2006 HCI Workshop on Computer Assisted Recording, Pre-Processing, and Analysis of User Interaction Data, in co-operation with ACM

Voir aussi les documents en annexe de ce billet.

Opinion

Les sujets abordés dans cet ateliers étaient très variés, allant de la réalité augmentée pour la géolocalisation aux EIAH, en passant par la définition automatisée de profiles musicaux.

Cet atelier, bien qu'enrichissant pour connaître ce qui se fait ailleurs, était trop vaste pour pleinement travailler sur les problématiques qui nous intéressaient. Cependant, tous les retours que nous avons eu sur nos travaux étaient positifs et résonnaient particulièrement avec ce qui se fait en ce moment dans les EIAH.

samedi 12 février 2005

Tutoriel pour update-alternatives

On désire proposer de façon générique un éditeur via la commande éditeur. Cette commande aura pour but de choisir un éditeur parmi une liste définie, et de le lancer. Pour se faire, nous allons utiliser les alternatives. L'intérêt de cette méthode est de rendre transparent la sélection de clones pour un programme et de simplifier leur administration. Par exemple, on pourrait souhaiter de rassembler derrière la commande browser les logiciels mozilla, firefox, galeon, dillo, etc.

L'ensemble des commandes à gérer est rassemblé dans un groupe, que nous appellerons ici éditeur. De plus, on associe une priorité à chaque alternative du groupe. Lorsque le groupe est administré en mode auto, l'alternative employée est celle possédant la plus haute priorité.

Dans notre cas, nous avons les 3 éditeurs suivants que nous souhaiterions gérer derrière notre commande générique /bin/éditeur. Cette commande sera en fait un lien dynamique pointant vers l'un des 3 logiciels suivants :

  • /usr/bin/vi
  • /usr/bin/vim
  • /usr/bin/nvi

La première étape consiste à créer notre groupe éditeur.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9
$ update-alternatives --display éditeur 
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
Current `best' version is /usr/bin/vim.

D'ailleurs, il est facile de le vérifier.

$ /bin/éditeur --version
VIM - Vi IMproved 6.3 (2004 June 7, compiled Jan 19 2005 08:10:19)

Continuons, et rajoutons nvi à notre groupe. Nous lui mettrons la priorité 2.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Continuons encore, et rajoutons vi à notre groupe. Nous lui mettrons la priorité 1, c'est à dire la plus faible.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

Notre groupe est désormais prêt. La commande éditeur est opérationnelle.

Imaginons maintenant que suite à une mauvaise mise à jour, vim soit inutilisable. Notre commande générique éditeur devient donc inexploitable. Nous allons corriger la chose en la faisant pointer vers un autre clone de vi : nvi.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
*+    1        /usr/bin/vim
      2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Rentrons 2 pour choisir nvi.

Using `/usr/bin/nvi' to provide `éditeur'.
$ update-alternatives --display éditeur
éditeur - status is manual.
link currently points to /usr/bin/nvi
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

On découvre ici que vim est bien notre logiciel appelé, et que la gestion du groupe est passée en manual. Ce qui veut dire que l'on n'utilise pas nécessairement l'alternative ayant la plus haute priorité (qui reviendrait dans notre cas à utiliser vim, ce que nous refusons de faire car celui-ci étant indisponible).

Pour revenir à vim, on repasse par l'option --config.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
 +    1        /usr/bin/vim
*     2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Répondons 1 et constatons :

Using `/usr/bin/vim' to provide `éditeur'.

Il est temps de reconfier au système la gestion automatique des alternatives du groupe et de voir en quoi cela est une Bonne Idée.

$ update-alternatives --auto éditeur

Il est bien sur possible de retirer une redirection si un logiciel vient à être désinstallé. Examinons cette possibilité pour vi.

$ update-alternatives --remove éditeur /usr/bin/vi
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Notre commande éditeur fait toujours appel à vim, et vi ne fait plus partie du groupe. De la même façon, si nous retirons l'alternative active, le système prendra automatiquement (d'où l'intérêt du mode auto :) l'alternative restante ayant la plus grande priorité.

$ update-alternatives --remove éditeur /usr/bin/vim
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/nvi
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/nvi.

Finalement, comme nous sommes des gens très propres, nous allons supprimer le groupe, remettant tout en l'état.

$ update-alternatives --remove-all éditeur
$ update-alternatives --display éditeur
No alternatives for éditeur.

Durant toutes ces manipulations, il est possible de corriger une entrée précédente en l'écrasant par la nouvelle. Pratique pour changer le chemin d'accès d'un fichier déplacé. Bien entendu, si la mauvaise manipulation a été à l'origine de la création d'un nouveau groupe, la solution qui s'impose est de détruire complètement ce groupe.

La seule méthode actuelle permettant de connaître la liste des alternatives mises en place est de lister le répertoire les contenant. Notez au passage que c'est une très mauvaise idée que d'effectuer directement des modifications dans le contenu de ce répertoire.

$ ls /etc/alternatives/

Pour aller plus loin, il est possible de créer des sous-groupes au sein d'un groupe. Par exemple, pour lier des logiciels à leurs manuels. Ce qui reviendrait à fournir dynamiquement le bon manuel à l'utilisateur en cas d'appel.

Ainsi, nous aurions les couples suivants :

  • usr/bin/vim et /usr/share/man/man1/vim.1.gz
  • /usr/bin/nvi et /usr/share/man/man1/nvi.1.gz
  • /usr/bin/vi et /usr/share/man/man1/vi.1.gz

Pour se faire, on rajoutera l'option --slave lors de la définition de l'alternative. La syntaxe suit celle de l'option --install.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vim.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/nvi.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vi.1.gz

Le résultat correspond à notre attente. En changeant d'alternative, on modifie non seulement le logiciel appelé, mais également son manuel. Un vrai bonheur.

$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vi - priority 1
 slave éditeur.1.gz: /usr/share/man/man1/vi.1.gz
/usr/bin/nvi - priority 2
 slave éditeur.1.gz: /usr/share/man/man1/nvi.1.gz
/usr/bin/vim - priority 9
 slave éditeur.1.gz: /usr/share/man/man1/vim.1.gz
Current `best' version is /usr/bin/vim.

La commande update-alternatives fourni encore d'autres possibilités, mais cela dépasse le cadre de cette simple documentation. Voir donc le manuel pour de plus amples informations: update-alternatives(8)

Références

page 12 de 12 -