thylo.be

Séance 1

L'instruction littérale, et le premier pixel

Système de coordonnées, appel de fonction et arguments, ordre d'exécution, lecture d'un message d'erreur.

Human fax machine

Brogan Bunt et Lucas Ihlein présentent l'expérience en 2012 à la conférence CODE, à Melbourne. Un groupe se coupe en deux, de part et d'autre d'une cloison. D'un côté, ceux qui voient l'image et n'ont pour la transmettre qu'un objet sonore : un bocal de pièces, deux cuillères en bois. De l'autre, ceux qui la redessinent au marqueur sur du papier kraft, à l'oreille. Personne ne fournit de code, chaque groupe invente le sien avant de commencer, et deux groupes n'inventent pas le même.

Scan d'un formulaire de fax dactylographié. En tête, le mot « Fax » et un combiné téléphonique dessiné, puis la date du 22 novembre 2013 et un numéro de référence. Deux cases : destinataire, Scan: Journal of Media Arts Culture, à l'université Macquarie ; expéditeur, Brogan Bunt et Lucas Ihlein, à l'université de Wollongong. Objet : Human Fax Machine. Suit un titre souligné, « The Human Fax Machine - Instructions », et une liste de matériel : une salle de classe ordinaire, de quoi dresser deux ou trois cloisons visuelles, un bureau couché sur le flanc, une cloison verticale ou un drap suspendu au plafond, de grandes feuilles de papier de qualité indifférente, des marqueurs épais de couleurs variées, des objets sonores simples dont un bocal en verre contenant quelques pièces. Une main a ajouté au stylo : deux cuillères en bois. Une bavure noire traverse la page, laissée par la transmission. En bas à droite, « Page: 1 ».
Première page de la consigne, envoyée en fax le 22 novembre 2013 par l'université de Wollongong à SCAN Journal, qui publie l'expérience la même année. La ligne manuscrite ajoute deux cuillères en bois à la liste du matériel. Brogan Bunt et Lucas Ihlein
« Human Fax Machine », Jaap de Maat, 2018. Deux minutes. Un atelier de Central Saint Martins, d'après le dispositif de Brogan Bunt et Lucas Ihlein.

Groupes de quatre à six, un seul objet sonore par groupe, et une cloison par groupe.

Consigne. Inventer un code qui transmette un dessin par le son, et par rien d'autre. Vingt minutes pour l'écrire sur une feuille, avant la moindre transmission. Un son, une marque. Le code s'écrit en double, un exemplaire pour chaque camp.

Le groupe se coupe ensuite en deux, de part et d'autre de la cloison. Les émetteurs voient l'image, les récepteurs dessinent.

  1. L'essai. Un dessin simple passe une première fois. Le code se corrige à chaud, sur ce qu'il ne sait pas encore dire : une diagonale, une courbe, une taille.
  2. L'épreuve. Une image que le groupe n'a jamais vue. Les émetteurs la reçoivent, les récepteurs ne la voient à aucun moment. Personne ne parle, et rien ne passe par un autre canal que l'objet.
  3. La reprise. L'original et le dessin côte à côte, le code corrigé une dernière fois, une deuxième image.

Les feuilles de code sont affichées au mur à la fin, toutes ensemble.

La dictée de figures

Par binômes, sans machine. Chaque binôme reçoit une enveloppe contenant une figure imprimée, que les autres ne voient pas.

Consigne. Dix minutes pour écrire, sur une feuille, les instructions permettant de reproduire cette figure au tableau. Celui qui exécutera ne verra jamais l'original, ne pourra poser aucune question, et appliquera à la lettre. Ce qui n'est pas écrit n'existe pas.

Les feuilles circulent ensuite, pas les enveloppes. Chaque binôme exécute au tableau les instructions d'un autre, sans rien interpréter. Si l'instruction dit « trace un trait », le trait fait la longueur que veut l'exécutant.

Série A. Figures 1 à 3 en haut, 4 à 6 en bas, de gauche à droite.
Série B, dans le même ordre et à la même échelle.
Série C. Une même position, d'une série à l'autre, pose la même difficulté.

Les six figures vont de la plus simple à la plus longue à décrire. Aucune ne porte de nom qui la résume. Jusqu'à la cinquième, aucune n'a de symétrie qui laisse deviner la moitié manquante. Elles existent en trois séries, de sorte que deux binômes voisins ne décrivent jamais le même dessin.

Les dix-huit figures tiennent dans dictee-figures.pdf, une par page A4.

Le dépouillement des feuilles devrait faire apparaître quatre pannes.

PanneCe qui manqueExemple entendu
L'ambiguïtéUn mot qui a deux sens« un cercle au milieu » — au milieu de quoi ?
L'ordreDeux instructions justes, dans le mauvais ordrela couleur déclarée après le tracé
L'unitéUn nombre« grand », « à droite », « un peu plus bas »
L'impliciteCe que l'auteur sait et n'a pas écrit« évidemment, les traits se touchent »

Chaque figure vise d'abord l'une des quatre. Ce sont aussi les quatre causes des messages d'erreur, et l'on y renverra à chaque séance.

La quatrième figure, la grille à rayures, fait exception. Elle ne s'écrit pas sans répéter la même phrase case après case tant que la règle de remplissage n'est pas trouvée : elle est laissée de côté, et rouverte en séance 4.

La sixième figure est une fleur : le même pétale, répété autour du centre, tourné d'un cran à chaque fois. Six pétales à 60° d'écart en série A, cinq à 72° en série B, huit à 45° en série C. Décrit pétale par pétale, avec des formes inclinées à chaque fois, le texte remplit la feuille et se trompe d'angle en route.

La version courte décrit le pétale une fois, debout, en mesurant chaque forme depuis le centre de la fleur. Ce point de référence s'appelle le point d'ancrage : tourner le pétale revient à le faire pivoter autour de lui. Il reste à écrire « dessiner le pétale, tourner de 60°, six fois ». Donner un nom à une suite d'instructions pour l'appeler autant de fois qu'il faut, c'est une fonction, reprise en séance 5.

L'instruction est l'œuvre

Sol LeWitt conçoit Wall Drawing #118 en 1971. Le mur n'est pas peint par lui : il est décrit — cinquante points placés au hasard, tous reliés par des lignes droites — et exécuté par d'autres, à partir d'un certificat. Deux exécutions du même texte, dans deux musées, ne donnent pas le même mur. L'instruction est l'œuvre, l'exécution varie. Il en a écrit plus de mille : les Wall Drawings.

Trois d'entre eux, et ce que l'instruction laisse à celui qui l'exécute.

#118, 1971. Cinquante points au hasard, répartis uniformément sur le mur, tous reliés par des lignes droites. Le hasard est borné, le reste est mécanique : relier chaque point à tous les autres. C'est le programme des séances 3 et 4.

#46, 1970. Des lignes verticales, pas droites, qui ne se touchent pas, couvrant le mur régulièrement. Aucun nombre dans la phrase. « Pas droites » confie le tracé à la main, et deux exécutants ne rendent pas le même mur.

#797, 1995. Un premier dessinateur trace une ligne horizontale irrégulière en haut du mur. Le deuxième la recopie juste en dessous, sans la décalquer ; le troisième copie la deuxième, et ainsi de suite jusqu'en bas. Chacun a sa couleur. L'écart s'accumule à chaque copie, et le bas du mur ne ressemble plus au haut.

Trois exécutions faites pour cette page, à partir des instructions. De gauche à droite, #118, #46 et #797. Le premier mur compte ici trente points plutôt que cinquante, pour que la toile reste lisible dans la colonne.

Écrire du code, c'est écrire une partition. La suite est technique.

L'outil du cours est p5.js 2.x, une bibliothèque JavaScript pour dessiner dans le navigateur, utilisée depuis l'éditeur en ligne editor.p5js.org : un compte gratuit, aucune installation, un lien à partager pour chaque sketch. La Processing Foundation, qui la publie, en donne un aperçu de quatre minutes.

« Hello, p5.js! », Processing Foundation, janvier 2025. Quatre minutes.

La même chose existe en version interactive, où le code se modifie pendant la lecture, sur hello.p5js.org.

Le plan de l'écran

function setup() {
  createCanvas(800, 600);
}

Un rectangle gris apparaît. Deux nombres, une surface : la largeur, puis la hauteur.

function setup() {
  createCanvas(800, 600);
  background(20);
  circle(0, 0, 100);
}

Le cercle est coupé, en haut à gauche. L'origine du repère se trouve dans ce coin, et l'axe vertical descend. C'est contre-intuitif pour qui se souvient des mathématiques, familier pour qui a déplacé un calque dans un logiciel de montage.

Le centre du canvas est donc circle(400, 300, 100). Les trois arguments sont une position horizontale, une position verticale et un diamètre, dans cet ordre, et l'ordre n'est pas négociable. C'est la dictée de figures, en machine.

Le repère du canvas : l'origine dans le coin supérieur gauche, l'axe vertical qui descend, et 800 pixels sur 600 entre les deux coins marqués. Le point rouge marque l'ancrage du cercle, qui est son centre. Le troisième nombre de circle donne le diamètre, pas le rayon.

Les autres formes se donnent de la même façon : rect, square, ellipse, line, triangle. Le nombre d'arguments change d'une forme à l'autre, leur ordre est fixe.

Le point que désignent les deux premiers nombres change aussi. C'est le point d'ancrage de chaque forme : le centre pour circle et ellipse, le coin supérieur gauche pour rect et square. circle(200, 200, 100) et square(200, 200, 100) ne se superposent pas : le carré part du centre du cercle.

function setup() {
  createCanvas(800, 600);
  background(20);
  circle(400, 300, 100);
  fill(230, 60, 40);
}

Rien ne change, le cercle reste gris. Le fill remonté d'une ligne, au-dessus du circle, et le cercle devient rouge. C'est la panne de l'ordre, revenue en machine.

fill et noFill vont par paire, stroke et noStroke aussi : le premier de chaque paire allume, le second éteint. strokeWeight() donne l'épaisseur du contour.

width et height valent les dimensions du canvas. Elles évitent de réécrire les nombres à la main : circle(width / 2, height / 2, 100) reste au centre même si le canvas change de taille.

Atelier — la figure imposée

Kandinsky peint Einige Kreise en 1926, au Bauhaus de Dessau. Le tableau n'est fait que de disques posés sur un fond sombre, de tailles et de couleurs différentes. Il se reproduit avec background, fill, noStroke et circle, le même appel répété avec d'autres nombres.

Peinture. Sur un fond bleu très sombre et nuageux, une trentaine de cercles de tailles différentes. Au centre gauche, le plus grand : un disque noir cerné d'un large anneau bleu, lui-même entouré d'un halo blanc. Autour, des disques roses, jaunes, orange, rouges, verts, bleus et violets, dont beaucoup se chevauchent et laissent voir au travers une couleur nouvelle à l'endroit du croisement. À droite, un disque vert à centre noir et un grand disque mauve pâle qui porte de petits cercles. En bas à gauche, le monogramme du peintre.
Vassily Kandinsky, « Einige Kreise », 1926. Huile sur toile, Solomon R. Guggenheim Museum, New York. Tout y est fait de disques posés les uns sur les autres, ce que la séance vient d'apprendre à écrire. Domaine public, via Wikimedia Commons
Consigne. Reproduire la composition projetée. Quelques cercles suffisent, à condition qu'ils soient aux bonnes places. Ce qui compte, c'est que ça ressemble.

Les cercles du tableau se chevauchent en transparence. Voir fill() pour voir comment changer de couleur de remplissage.

Il est aussi possible d'utiliser blendMode(), qui décide comment une forme se mélange à ce qui est déjà dessiné. MULTIPLY assombrit, SCREEN éclaircit, et sur un fond presque noir les deux ne donnent pas le même tableau. À essayer une fois la composition debout.

Contraintes supplémentaires, une fois la composition finie :

  • (a) La même composition sans utiliser circle.
  • (b) La même composition en deux couleurs seulement.
  • (c) La même composition retournée — le haut en bas.

Quand ça casse

Trois erreurs couvrent presque tout ce qui risque d'arriver lors de cette première séance.

circle(400, 300);
`Expected at least 3 arguments, but received fewer in circle()` — il manque un nombre. La machine dit précisément ce qui manque, et c'est rare : en profiter.
Circle(400, 300, 100);
`Circle is not defined` — la majuscule. p5 ajoute une suggestion (« you may have accidentally written "Circle" instead of "circle" »), mais ne corrige rien : le sketch reste arrêté tant que le mot n'est pas réécrit.
circle(400, 300, 100
`SyntaxError: missing ) after argument list` — et le numéro de ligne indiqué est celui d'après. Le numéro dit où la machine a buté, pas où est la faute.

La méthode, quand rien ne s'affiche ou que le message n'aide pas, tient sur une page : protocole-de-panne.

Le mur

Les liens de tous les sketches sont affichés côte à côte sur la page partagée, à la fin de chaque séance. Deux sont ouverts au hasard, trente secondes chacun. Le mur ne note rien et ne relève pas ce qui manque.

La grille du rendu final est donnée dès cette séance, et pas plus tard : rendu-note.

Devoir — l'autoportrait

Un autoportrait, sur un canvas de 400 × 500 imposé à toute la classe. Les formes et les couleurs de la séance, rien d'autre : pas d'image importée, pas de texte.

Personne ne juge la ressemblance. Un détail suffit à reconnaître quelqu'un : des lunettes, une mèche.

Poster le lien vers le sketchbook sur la classroom.