On dit qu'une image vaut mille mots. C'est vrai qu'il est souvent
bien plus facile d'expliquer avec un dessin qu'avec de la prose. Dans
le monde physique, je le fais souvent. Alors, lorsqu'on communique via
des ordinateurs ? Pourquoi n'y a t-il pas davantage de dessins sur ce
blog ? Une des raisons est que je dessine très mal à la souris, je
préfère utiliser un
On dit qu'une image vaut mille mots. C'est vrai qu'il est souvent
bien plus facile d'expliquer avec un dessin qu'avec de la prose. Dans
le monde physique, je le fais souvent. Alors, lorsqu'on communique via
des ordinateurs ? Pourquoi n'y a t-il pas plus de dessins sur ce
blog ? Une des raisons est que je dessine très mal à la souris, je
préférerai utiliser un
Prenons un exemple, pour un exposé que je dois faire sur les
vulnérabilités du
La solution qui semble venir immédiatement à l'esprit de beaucoup
de gens est de faire un dessin « à main levée » avec un logiciel de
Bon, si on n'aime pas Inkscape, le vénérable
Et, encore plus simple, il y a le traditionnel
| Serveur |
| | | faisant autorité |
+--------------+<------------+-----------------------+
^ 2001:DB8:42::deca:fbad
|
| 2001:db8:666:1
+--------------+
| Méchant |
| |
+--------------+
]]>
Grâce à ce mode, c'est bien plus rapide que Inkscape ou xfig même si
le résultat a un côté... un peu dinosaurien. Quelques petits trucs
sur
; The default is "\C-c." which I don't like
(setq picture-mode-hook '(lambda ()
(local-set-key "\C-cv" 'picture-movement-down)))
Bon, mais toutes ces méthodes ont le même défaut : au lieu de décrire le schéma dans un langage, on doit bouger ses doigts pour tout placer au millimètre, ce que je trouve désagréable. Ce que je préférerai, ce serait un langage où j'indique mes éléments et où un programme les place plus ou moins joliment.
Il existe de tels langages. Par exemple, avec
igraph resolution_dns {
// Machines
node [shape=box, fontsize=14];
Application;
Résolveur;
Serveur_faisant_autorité;
Méchant;
edge [fontsize=10];
Application -> Résolveur [label = "Adresse IP de www.example.org ?"];
Résolveur -> Serveur_faisant_autorité [label = "Adresse IP de www.example.org ?"];
Serveur_faisant_autorité -> Résolveur [label = "2001:DB8:42::deca:fbad"];
Méchant -> Résolveur [label="2001:db8:666:1"];
}
puis de le convertir dans un format graphique (ici,
% dot -Gcharset=latin1 -Tpng resolution-dns-graphviz.dot > \
resolution-dns-graphviz.png
et hop, j'ai un graphique dessiné automatiquement :
graphviz dispose de nombreux moyens d'influencer le résultat, si
le logiciel n'a pas produit le schéma parfait (par exemple, il est
composé de plusieurs programmes, comme
Ne critiquons pas trop : le placement automatique d'un
Néanmoins, Graphviz va dans la bonne direction. On décrit les
éléments, on ne dessine pas et on laisse le programme dessiner. C'est
ma solution favorite, même si je dois parfois repasser à un logiciel
Voici le
À noter que, avant le langage DOT de Graphviz, une solution présentant certaines ressemblances existait,
.PS
box "Début";
arrow;
box "Milieu";
arrow;
box "Fin";
.PE
et la commande suivante :
% groff -p -Tps test.pic > test.ps
produira un beau fichier
pic, plus ancien, est de bien plus bas niveau que
Graphviz. Notamment, il nécessite souvent de donner des instructions
de placement très détaillées, ce qui annule une bonne partie de
l'effet du langage. Voici l'
À noter que, sur son blog, David Monniaux avait posé un problème
similaire, LaTeX,
XFig, InkScape. Damien Wyart me fait remarquer que les
meilleurs sont Metapost et Asymptote (qui ne fait
pas le placement lui-même, il faut tout lui indiquer). Même chose pour PGF et TikZ
qui sont spécifiques à