Table des matières

1. Introduction

Mocodo est un logiciel d'aide à l'enseignement et à la conception des bases de données relationnelles.

Ci-dessous, un exemple d'appel du programme (première ligne) sur un texte d'entrée (lignes suivantes), puis, en sortie, le MCD et le MLD correspondants:

L'appel ci-dessus a également construit le dictionnaire des données:

Ainsi que le diagramme relationnel, qui peut être visualisé par un nouvel appel:

La devise de Mocodo, « nickel, ni souris », en résume les principaux points forts:

Mocodo est libre, gratuit et multiplateforme. Si vous l'aimez, répandez la bonne nouvelle en incluant l'un de ses logos dans votre support: cela multipliera ses chances d'attirer des contributeurs qui le feront évoluer.

2. Installation du programme

2.1. Installation complète (recommandé)

Cette commande installera Mocodo, ainsi que l'extension IPython qui permettra de l'utiliser dans un document comme celui-ci (il s'agit d'un Jupyter notebook).

2.2. Vérification

Toujours sous un terminal, tapez:

mocodo

Si votre système se plaint que cette commande n'existe pas, localisez le fichier mocodo et ajoutez le chemin du répertoire contenant à votre PATH:

Pour mettre la « commande magique » mocodo à disposition d'un notebook donné, évaluez dans celui-ci la cellule suivante:

%reload_ext mocodo_magic

Techniquement, %load_ext mocodo_magic suffit, mais cette forme vous épargnera un message d'erreur si vous réévaluez ultérieurement la cellule. Pour tester, évaluez une cellule avec:

Pour charger automatiquement mocodo_magic à chaque ouverture d'un notebook (ce qui dispense d'évaluer %load_ext mocodo_magic) :

2.3. Installation minimale

Vous ne bénéficierez pas de Jupyter Notebook, mais vous pourrez utiliser Mocodo en ligne de commande.

3. Utilisation

Vous pouvez utiliser Mocodo:

3.1. Utiliser Mocodo online

Faites pointer votre navigateur sur http://mocodo.net: vous pouvez commencer à taper votre MCD. Appuyez à tout moment sur le bouton de génération pour visualiser le diagramme conceptuel et en déduire les relations. Une fois que le résultat vous convient, appuyez sur le bouton de téléchargement pour récupérer une archive ZIP contenant tous les fichiers d'entrée et de sortie désirés.

Mocodo online est conçu pour une utilisation occasionnelle et/ou interactive, et son interface vise avant tout à la simplicité. Vous n'avez donc accès qu'aux options essentielles du programme. Si vous en voulez davantage, tant en termes de paramétrage, que de calcul ou de fonctionnalités, vous pouvez installer Mocodo sur votre machine.

3.2. Utiliser Mocodo en ligne de commande

3.2.1. Au plus simple

Tout a été fait pour faciliter au maximum la prise en main. Ainsi, pour peu que vous sachiez lancer une console (cmd sous Windows, Terminal sous Mac OS X), il vous suffit d'y entrer:

mocodo

Invoqué sous cette forme, le script récupère le texte d'entrée du MCD dans le répertoire courant sous le nom de sandbox.mcd. Si ce fichier n'existe pas, il y sera automatiquement créé avec un MCD d'exemple. Par la suite, vous n'aurez qu'à le garder ouvert sous un éditeur de texte, afin de le modifier selon vos besoins avant de lancer la commande.

3.2.2. Liste des arguments

La commande mocodo admet de nombreux arguments optionnels. Voici la traduction en français de la liste affichée par l'argument --help. Destinée à servir de référence, elle peut être sautée sans inconvénient à la première lecture. Nous avons ajouté des liens vers des exemples d'utilisation dans ce document; notez cependant que les %% ou % qui préfixent la « commande magique » mocodo doivent être omis de la ligne de commande.

3.2.2.1. Options sur Mocodo lui-même

3.2.2.2. Entrée-sortie

3.2.2.3. Aspect de la sortie graphique

3.2.2.4. Sortie relationnelle

3.2.2.5. Modifications du texte d'entrée

3.2.2.6. Réarrangement par séparation et évaluation

Sous-options accessibles avec l'option --arrange=bb.

3.2.2.7. Réarrangement par algorithme génétique

Sous-options accessibles avec l'option --arrange=ga.

3.2.2.8. Réarrangement par résolution d'un programme linéaire

Sous-options accessibles avec l'option --arrange=lp.

3.2.2.9. Options spécifiques aux Notebooks

Ignorées lors de l'appel en ligne de commande.

3.2.3. Paramétrage à long terme

Pour éviter d'avoir à invoquer Mocodo répétitivement avec une longue kyrielle d'options, vous pouvez mettre celles-ci une fois pour toutes dans un fichier params.json situé dans le répertoire courant. La commande:

mocodo --restore

... le fait pour vous avec un fichier de paramètres vide, i.e. , un fichier-texte réduit aux deux caractères {} (attention, elle rétablit aussi le fichier sandbox.mcd à son contenu par défaut). Vous êtes encouragés à modifier ce fichier de paramètres selon vos goûts et vos besoins. De la sorte, le style de vos MCD pourra être maintenu à moindre frais à travers tous vos documents. En cas de besoin, vous pourrez toujours ponctuellement passer outre ces réglages en en précisant d'autres en ligne de commande. Plus précisément, chaque paramètre est déterminé:

  1. par sa valuation en ligne de commande;
  2. à défaut, par sa valuation dans le fichier de paramètres indiqué par --params_path;
  3. à défaut d'une telle indication, par sa valuation dans le fichier params.json du répertoire courant;
  4. à défaut, par une valeur défaut éventuellement dépendante de votre système.

Si vous lancez Mocodo avec l'option --print_params, la valeur courante de l'ensemble des paramètres sera affichée. Vous pouvez envoyer la sortie dans un fichier params.json et la modifier à votre gré pour une prise en compte lors du lancement suivant.

3.3. Utiliser Mocodo sous Jupyter Notebook

3.3.1. Invocation

Elle nécessite l'installation de l'extension notebook mocodo, laquelle doit en outre être rechargée à chaque ouverture (cf. première cellule de ce document). On a ainsi déclaré une « commande magique » mocodo qui sera invoquée en la préfixant:

À part ça, la syntaxe est généralement la même qu'en ligne de commande, ce qui devrait faciliter le passage de l'un à l'autre.

3.3.2. Principes de fonctionnement

Il peut être utile de comprendre ce qui se passe en coulisses lorsque l'on invoque la commande magique sur une cellule:

Tous les fichiers peuvent être lus dans le répertoire mocodo_notebook (commande magique %load, mise en commentaire dans ce notebook pour éviter de recharger le fichier à chaque exécution).

3.3.3. Exemples d'invocation

Les trois exemples de l'introduction illustrent plusieurs de ces techniques usuelles:

%%mocodo --mld --colors ocean --shapes copperplate --relations diagram markdown_data_dict

... invoque le programme en demandant l'affichage du diagramme conceptuel (implicitement), du schéma relationnel (avec --mld), des changements de style (avec --colors et --shapes) et la production d'un diagramme relationnel (--relations diagram) et d'un dictionnaire de données (markdown_data_dict). Le contenu de celui-ci est rechargé et visualisé à l'aide de la commande suivante:

%load mocodo_notebook/sandbox_data_dict.md

Tandis que le diagramme relationnel (MLD) est tracé en relançant Mocodo dessus:

%mocodo --input mocodo_notebook/sandbox.mld --colors desert

3.3.4. Modification in situ d'une cellule

Nouveauté de la version 2.0.20 (contribution de Thomas Giro). Avec les options --arrange, --flip et --obfuscate le résultat de l'évaluation de la cellule est un nouveau MCD, normalement affiché au-dessous. Ajoutez l'option --replace pour substituer ce MCD au contenu de la cellule. Réévaluez alors celle-ci pour tracer le MCD résultant, ou annulez la dernière opération pour revenir au contenu originel.

Par exemple, l'évaluation de la cellule suivante:

... remplacerait celle-ci par celle-là:

3.3.5. Paramétrage à long terme

Si vous voulez éviter de préciser à chaque fois les mêmes arguments (par exemple un changement de couleurs), vous pouvez placer un fichier params.json dans le répertoire mocodo_notebook. Mocodo peut même vous aider à le faire en exécutant la cellule suivante:

Son évaluation remplace son propre contenu par des lignes de code similaires à:

Modifiez la variable params à votre gré en respectant la syntaxe JSON (attention en particulier au dernier couple clef-valeur, qui n'est pas terminé par une virgule). Exécutez la cellule pour créer un fichier de nom et emplacement adéquats (notez que la valeur de --print_params a été passée à false pour vous éviter de le faire à la main).

4. Description d'un MCD

4.1. Besoins élémentaires

4.1.1. Entités, associations, attributs, identifiants, cardinalités

La syntaxe ne devrait pas poser problème:

À noter :

4.1.2. Dépendances fonctionnelles

Si on a plusieurs dépendances fonctionnelles à représenter, on devra suffixer le DF par un numéro (cf. cet exemple).

4.1.3. Associations réflexives

4.1.4. Placement sur plusieurs rangées

L'ordre et la séparation des lignes de la description permet de spécifier à coût zéro un plongement grossier, mais qui s'avère en général suffisant:

Les boîtes sont placées aux intersections d'une grille invisible assurant que leurs centres soient alignés aussi bien horizontalement que verticalement. C'est ce qui en général est le plus satisfaisant esthétiquement, mais d'autres retouches peuvent être opérées manuellement dans le fichier de sortie.

Le plongement fait l'objet d'une « compression » horizontale et verticale. Par exemple, ci-dessus, il y a un espace horizontal négatif entre le bord droit de l'entité de gauche et le bord gauche de l'entité de droite.

4.2. Besoins plus avancés

4.2.1. Identifiants multiples

Préfixer d'un caractère de soulignement (_) le(s) second, troisième, etc. attributs pour les ajouter à l'identifiant.

4.2.2. Entités faibles (identification relative)

Préfixer d'un caractère de soulignement (_) une cardinalité (1,1) pour indiquer que l'entité distinguée est faible. Dans le diagramme, les identifiants (ou discriminants) d'une telle entité seront soulignés en pointillés, tandis que le (1,1) sera souligné d'un trait plein.

Nouveauté de la version 2.1. Traditionnellement, l'identification relative est dénotée par des parenthèses autour des cardinalités. Cette notation (ou toute autre) peut maintenant être obtenue avec l'option --strenghten_card:

Une association ne peut renforcer plus d'une entité faible. Ainsi, une erreur se produit si l'on remplace le 1N par _11:

4.2.3. Flèches sur les pattes

Suffixer d'un chevron (< ou >) les cardinalités de la patte concernée. La direction indiquée se lit en partant de l'association et en allant vers l'entité.

La position de la flèche sur la patte peut être réglée individuellement dans la table d'association ratio du script Python généré (par défaut, sandbox_svg.py ou sandbox_nodebox.py) ou sous l'onglet Retouches de la version en ligne. La valeur correspondante peut varier de 0.0 (flèche cachée sous la boîte d'origine) à 1.0 (par défaut, pointe de la flèche au contact du bord de la boîte de destination, compte non tenu de l'arrondi s'il s'agit d'une association).

4.2.4. Styles

Plusieurs styles prédéfinis sont distribués avec l'application. Un style se définit comme la combinaison d'une palette de couleurs (répertoire colors) avec un dictionnaire de polices et de dimensions (répertoire shapes). Une changement d'échelle d'un facteur multiplicatif positif peut être précisé avec l'argument --scale.

Vous pouvez bien sûr créer vos propres styles en vous inspirant des fichiers fournis. Si vous êtes particulièrement content d'un style, soumettez-le pour inclusion dans une prochaine distribution.

4.2.5. Types de données

Chaque attribut peut être assorti d'annotations entre crochets. Ignorées au niveau du tracé du MCD, elles sont interprétées comme des types de données lors de la génération d'un code-source SQL.

4.2.6. Format des cardinalités

Par défaut, les cardinalités sont séparées par une virgule.

Nouveauté de la version 2.1. On peut maintenant opter pour un format quelconque:

4.2.7. Rectification automatique des cardinalités mal formées

Certaines fautes de frappe fréquentes (inversion des cardinalités minimale et maximale, lettre « O » au lieu du chiffre « 0 ») sont silencieusement rectifiées:

formes erronées forme rectifiée
O1, o1, 10, 1O, 1o 01
ON, oN, NO, No, N0 0N
On, on, no, nO, n0 0n
N1 1N
n1 1n

Les cardinalités (N,N), qui selon une certaine école dénotent une cardinalité minimale supérieure à 1, sont laissées telles quelles.

4.2.8. Symbole de dépendance fonctionnelle

Il est possible d'activer l'encerclement d'un autre sigle que DF. C'est ce sigle qui devra alors apparaître en entrée, par exemple:

Comme le cercle est alors un peu plus grand, on peut vouloir régler (a priori une fois pour toutes) le ratio défini dans le dictionnaire de shapes:

"df_text_height_ratio"             : 1.00,

4.2.9. Créer plusieurs entités ou associations de même nom

Normalement on doit choisir des noms différents pour toutes les boîtes (entités et associations) du MCD, à l'exception des associations de dépendance fonctionnelle figurées par un sigle. On a vu que dans ce cas, il suffisait d'ajouter à leur nom un suffixe numérique: celui-ci n'apparaîtra pas en sortie. Cette possibilité vaut pour n'importe quelle boîte.

Elle servira typiquement à « distribuer » une entité DATE réduite à son identifiant date, mais associée à de nombreuses entités qui n'ont rien à voir entre elles. Sachant qu'une telle entité est amenée à disparaître lors du passage au relationnel, il n'y a aucun inconvénient à en créer plusieurs, et cela peut avoir l'avantage de faciliter (ou même de rendre possible) l'obtention d'une bonne mise en page.

Par exemple, la mise en page du MCD suivant est indûment complexifiée par le haut degré de l'entité DATE.

Ajouter une autre entité DATE (sous le nom de DATE2) permettra à Mocodo de calculer une mise en page à la fois plus agréable à l'œil et plus compacte ($4\times3$ au lieu de $5\times4$). La sémantique est inchangée.

4.3. Besoins spécifiques à la pédagogie

Si vous n'êtes pas enseignant de bases de données, vous pouvez passer directement à la section suivante.

4.3.1. Créer une vue en extension

La technique de duplication que l'on vient de voir peut servir à produire une vue en extension d'un MCD. Voici par exemple le MCD que j'utilise en cours pour introduire la notion d'entité faible (à gauche, vue en compréhension, à droite vue en extension):

4.3.2. Afficher l'explication des cardinalités

Les débutants ont souvent des doutes sur la sémantique de telle ou telle cardinalité. Cette information peut désormais être incluse dans le texte-source, en annotant les pattes correspondantes, pour apparaître à la demande lors du rendu (utile pour créer des exercices à faire en TD ou en autonomie).

Survolez les cardinalités du MCD ci-dessous pour faire apparaître leur description.

Les annotations s'insèrent entre cardinalités et nom de l'entité. Elles sont délimitées par des crochets droits.

Avec l'option --disambiguation=annotations (par défaut), elles sont également exploitables lors du passage au relationnel pour préciser la sémantique d'une clef étrangère.

L'affichage est désactivé avec l'option --hide_annotations.

Limitations.

4.3.3. Créer un MCD à compléter

Les MCD à trous sont des exercices classiques d'introduction aux bases de données.

4.3.3.1. Supprimer le marquage d'un identifiant

Pour éviter le marquage automatique du premier attribut d'une entité comme identifiant, il suffit de le préfixer par un _ (ce caractère est donc un commutateur, qui souligne un attribut non souligné par défaut, et désouligne un attribut souligné par défaut).

4.3.3.2. Masquer un couple de cardinalités

Vous pouvez masquer n'importe quelles cardinalités en les remplaçant pas XX (ci-dessous à gauche) :

4.3.3.3. Masquer un attribut

Vous pouvez mettre deux virgules consécutives pour réserver la place d'un attribut manquant.

Les espaces insécables sont préservés, ce qui permet de réserver plus d'espace horizontal, cf. ci-dessous premier attribut vide de INCLURE.

4.3.3.4. Ne faire apparaître que le squelette du schéma conceptuel

Enfin, vous pouvez transformer en exercice à trous n'importe quel MCD en rendant complètement transparentes les couleurs des attributs, associations et cardinalités. Le style blank a été prédéfini à cet effet:

Attention, n'utilisez pas cette méthode si vous souhaitez diffuser l'exercice sous forme électronique: l'information textuelle est toujours présente, susceptible d'être sélectionnée et collée ailleurs pour être lue. Vous pouvez bien sûr empêcher cette possibilité en convertissant la figure dans un format bitmap (comme PNG ou GIF); mais le plus simple est de combiner les deux méthodes précédentes:

4.3.4. Obfuscation: remplacer tous les libellés par du faux-texte

L'obfuscation d'un MCD consiste à vider celui-ci de sa sémantique de surface, en substituant à tous les libellés des chaînes aléatoires. Le résultat sera par exemple utilisé pour montrer que les principales règles de passage du schéma conceptuel au schéma relationnel peuvent être appliquées « bêtement », c'est-à-dire sans comprendre le fonctionnement de l'organisme modélisé.

Ainsi, dans l'exemple ci-dessous, les libellés du MCD CLIENT-COMMANDE-PRODUIT sont remplacés par des mots tirés au hasard:

Nouveauté de la version 2.0.20. Pour remplacer le texte de la cellule par le résultat de son évaluation, ajoutez l'option --replace.

En argument, vous pouvez ajouter le chemin d'un fichier texte UTF-8 quelconque où puiser les mots de substitution. Par exemple, le texte même de cette documentation:

Mocodo essaie d'abord de trouver ce fichier à l'endroit indiqué. En cas d'échec, il le cherche (avec extension .txt facultative) parmi les textes distribués avec le logiciel, à savoir:

En cas de nouvel échec, il se rabat sur "lorem_ipsum.txt".

L'option obfuscation_max_length permet de limiter la longueur des libellés de substitution (par défaut, c'est la longueur du plus long mot du faux-texte).

Notez enfin que l'algorithme s'assure que la distance de Damerau-Levenshtein entre deux libellés de substitution quelconques est d'au moins 3 (valeur par défaut du paramètre obfuscation_min_distance). En clair, cela signifie que, si vous donnez en examen un exercice de conversion en relationnel basé sur un tel MCD, les erreurs de transcription d'un étudiant stressé, inattentif, illettré, dyslexique, roublard, ou tout cela à la fois, ne vous empêcheront pas de retrouver son intention première. Par exemple, au cours du processus d'obfuscation suivant:

L'algorithme a écarté les mots dish (confusion possible avec wash), folk (confusion possible avec milk), peer (confusion possible avec ever), hall (confusion possible avec haul), baby (confusion possible avec lady).

5. Tracé d'un MCD

5.1. Insertion manuelle d'espacements

Le tracé réalisé par Mocodo pour des MCD de plusieurs rangées laisse parfois à désirer :

On voit que, par défaut, Mocodo centre les rangées qui contiennent moins de boîtes que les autres. Cela donne un bon résultat pour la première rangée, mais pas pour la troisième.

L'utilisateur peut cependant spécifier les espacements qu'il désire en complétant les rangées les moins fournies, par des boîtes invisibles dont le seul rôle est de « pousser » les autres à l'emplacement voulu. Ainsi, il va préciser que l'association Curae doit commencer sur la troisième colonne en insérant des lignes réduites au caractère deux-points, et en profiter pour insérer un espace entre Lorem et Tellus :

Il est possible de « compresser » les suites de deux-points en supprimant les retours-chariots, autrement dit, de remplacer $n$ lignes réduites à deux-points par une ligne réduite à une séquence de $n$ deux-points. Ce raccourci est illustré dans le prochain exemple.

5.2. Ajustement automatique dans une grille minimale

Nouveauté de la version 2.2. On cherche en général à faire tenir le MCD dans la plus petite grille possible, tout en maintenant un rapport « équilibré » entre hauteur et largeur. Par exemple, un MCD de 13 boîtes (entités ou associations) peut tenir dans les grilles:

Les deux premières grilles étant non équilibrées, on retiendra la plus petite des suivantes, de dimensions $5\times3$.

La table ci-dessous énumère les dimensions des grilles minimales d'équilibre supérieur à 0,5 pour tous les MCD comportant moins de 100 boîtes:

1 2 3 4 5 6 7 8 9 10 11 12 13
1 1
2 2, 3, 4 5, 6
3 7, 8, 9 10, 11, 12 13, 14, 15
4 16 17, 18, 19, 20 21, 22, 23, 24 26, 27, 28
5 25 29, 30 31, 32, 33, 34, 35 37, 38, 39, 40 43, 44, 45
6 36 41, 42 46, 47, 48 50, 51, 52, 53, 54 57, 58, 59, 60 65, 66
7 49 55, 56 61, 62, 63 67, 68, 69, 70 73, 74, 75, 76, 77 82, 83, 84 91
8 64 71, 72 78, 79, 80 85, 86, 87, 88 92, 93, 94, 95, 96
9 81 89, 90 97, 98, 99

On peut y vérifier par exemple que le MCD de taille 13 se trouve effectivement aux coordonnées (5, 3).

Avec l'option --fit, Mocodo est maintenant capable de reformater automatiquement un MCD pour le faire entrer dans la grille minimale correspondante:

L'algorithme se contente de supprimer ou d'insérer des sauts de ligne dans le texte-source, sans modifier l'ordre des clauses. On devra donc encore en général opérer sur le résultat un réarrangement automatique (voir plus loin).

Si ce réarrangement échoue ou laisse à désirer, il est possible de spécifier chacune des ièmes grilles suivantes avec l'option --fit=i:

Remarques.

5.3. Basculement des cardinalités et inflexion des pattes rectilignes

Nouveauté de la version 2.1. Mocodo est capable de détecter certaines configurations de pattes dont les cardinalités présentent un risque élevé de collision. Il procède alors à deux types d'ajustements:

  1. Issue 25. Les cardinalités d'une patte verticale ou horizontale sont envoyées de l'autre côté de la patte. Par exemple, dans le MCD ci-dessus, la présence de la patte oblique CONGUE-IPSUM envoie les cardinalités de CONGUE-METUS et CONGUE-DF à l'opposé de leur position par défaut (à droite d'une patte verticale ou en bas d'une patte horizontale).
  2. Issue 27. Les pattes obliques sont infléchies de façon à ménager plus d'espace pour afficher deux couples de cardinalités. Ici, l'inflexion de la patte BLANDIT-VIVAMUS permet à ses cardinalités de coexister sans problème avec celles de l'association réflexive.

Ces ajustements automatiques résolvent les problèmes les plus courants. Toutefois, étant antérieurs au tracé proprement dit, ils peuvent seulement minimiser les risques de collision, et non les prévenir totalement. Ils peuvent même en produire d'autres. Ainsi, autour des entités particulièrement pattues, des collisions qui ne se seraient pas produites par défaut seront parfois observées. L'utilisateur a alors deux possibilités:

5.4. Retouches fines

5.4.1. Par modification du script intermédiaire

Mocodo, au lieu de générer directement un dessin statique, génère d'abord un script Python, qui lui-même générera le dessin attendu. Cela se fait de façon transparente, sans intervention de l'utilisateur. L'avantage de cette couche supplémentaire est que le script intermédiaire exprime la plupart des positions, non en absolu, mais en relation à d'autres positions, peu nombreuses et qui constituent de fait les véritables paramètres du dessin. Sa capacité à évaluer des formules le rend beaucoup plus souple et puissant que si les valeurs résultantes étaient stockées en dur.

Le script intermédiaire s'appelle par défaut:

Montrons comment retoucher le MCD suivant:

Si on ouvre le script intermédiaire avec un éditeur de texte, on verra que ses premières instructions exposent les principaux paramètres de position:

(width,height) = (384,233)
cx = {
    u"Velit"  :  192,
    u"Blandit":   47,
    u"Nonummy":  337,
    u"Vivamus":  192,
}
cy = {
    u"Velit"  :   35,
    u"Blandit":  112,
    u"Nonummy":  112,
    u"Vivamus":  189,
}
shift = {
    u"Velit,Blandit"  :    0,
    u"Velit,Nonummy"  :    0,
    u"Vivamus,Nonummy":    0,
    u"Vivamus,Blandit":    0,
}

Voici les modifications que nous décidons d'apporter au fichier (ignorez la première ligne):

Sous Nodebox, il suffit alors de choisir Run dans le menu Python.

Si vous travaillez avec des fichiers SVG, il faut exécuter le script ..._svg.py. Il regénère alors le fichier SVG qui contient le dessin. Il ne reste plus qu'à l'ouvrir, par exemple avec un navigateur.

Les lignes suivantes (qu'il est inutile de comprendre) permettent de faire la même chose à l'intérieur de cette documentation.

Selon le même principe, on peut faire glisser les flèches le long des arcs (dictionnaire ratio) ou modifier les couleurs (dictionnaire colors).

Cette technique inhabituelle nous semble une application naturelle du dynamisme du langage Python. Mais c'est à vous de décider si vous êtes plus efficace en ajustant des valeurs numériques, ou en faisant glisser des objets dans votre cliquodrome favori, comme décrit dans la section suivante.

5.4.2. Par édition de la sortie au format SVG

Un fichier SVG peut être visualisé dans tout navigateur moderne.

Pour aller au-delà de la simple visualisation, il faudra faire appel à un logiciel de dessin vectoriel dédié, comme Inkscape (libre) ou Adobe Illustrator, Freehand, CorelDRAW, etc. Les éléments du fichier SVG produit pourront alors être repositionnés à la souris. Certains sont associés, pour permettre leur déplacement en bloc. Dans la version actuelle, les liens ne suivent pas ces déplacements, ce qui peut obliger à des manipulations supplémentaires.

5.5. Réarrangement par symétrie

Mocodo permet de calculer facilement le symétrique d'un MCD, par exemple celui donné ci-dessous:

Nouveauté de la version 2.0.20. Pour remplacer le texte de la cellule par le résultat de son évaluation, ajoutez l'option --replace.

5.5.1. Symétrie selon l'axe vertical

5.5.2. Symétrie selon l'axe horizontal

5.5.3. Symétries selon les diagonales (transposition)

Pour une symétrie selon l'anti-diagonale, appliquer successivement les trois symétries précédentes dans n'importe quel ordre.

5.5.3.1. Astuce: édition rapide d'une ou plusieurs colonnes

La transposition peut être utilisée pour réaliser plus facilement certaines opérations d'édition en colonne, en particulier sous Mocodo online. Par exemple, supposons que l'on souhaite décaler vers le haut la dernière colonne du MCD ci-dessous:

On commence par transposer:

Il suffit alors d'insérer un deux-points au début de chacune des trois premières rangées, puis de retransposer dans l'autre sens:

On peut se convaincre en examinant le nouveau texte d'entrée que le résultat aurait été beaucoup plus pénible à obtenir en procédant directement.

5.6. Réarrangement automatique

Il est possible de demander à Mocodo de chercher tout seul une « bonne » permutation des boîtes, ce qui à la main deviendrait vite difficile.

Le critère que nous avons retenu pour évaluer la qualité d'une permutation est double:

  1. les liens ne doivent pas se couper;
  2. leur longueur cumulée doit être minimale.

Trois algorithmes sont fournis:

Nouveauté de la version 2.0.20. Pour remplacer le texte de la cellule par le résultat de son évaluation, ajoutez l'option --replace.

5.6.1. Méthode exacte spécialisée

5.6.1.1. À l'intérieur d'une grille prédéfinie

Voici à titre d'exemple un résultat trouvé par l'algorithme exact, suivi du MCD correspondant:

Le réarrangement automatique se fera toujours à l'intérieur d'une grille ayant autant de colonnes et de rangées que le texte de départ (ici, $4\times5$). On peut quelquefois essayer de réduire cette grille. Par exemple, le MCD ci-dessus comporte 13 boîtes. Elles pourraient donc théoriquement tenir dans une grille $5\times3=15$. Modifions le texte à la main pour avoir 3 blocs d'au plus 5 lignes, et vérifier qu'un tel réarrangement est possible:

5.6.1.2. Par croissance organique

Le réarrangement dit organique consiste à choisir une première boîte au hasard, puis à essayer d'agréger les autres sans se préoccuper de contenir le tout dans une grille prédéterminée.

Cela donne un autre plongement du MCD sur une grille $4\times5$, ce qui comme on l'a vu n'est pas optimal. En fait, le résultat d'une réorganisation organique peut souvent être trivialement amélioré, par exemple ici en faisant pivoter Augue et en décalant DF: