Lettre à une petite fille qui croit au père Noël

22 décembre 2017.

Hier je t’ai affirmé avec aplomb que le père Noël existe. Tu l’as vu. Il t’a apporté un cadeau et ton sourire, ta joie ne me permettaient pas de te raconter autre chose. J’ai même été jusqu’à solliciter la complicité d’une amie pour que tu reçoives un texto du père Noël t’expliquant pourquoi il ne restait pas plus longtemps. Je t’ai raconté pendant deux bonnes heures le père Noël, sa vie, son oeuvre, ses lutins, la Laponie, son traîneau, ses rennes et surtout ma rencontre avec lui plus tôt le matin à Roubaix alors qu’il cherchait le chemin de l’école.

En ce Noël 2037, 20 ans plus tard, tu dois penser que je te mentais, que je me moquais peut-être de toi lorsque j’argumentais avec aplomb face aux quelques enfants qui criaient que le père Noël n’existe pas et que ce n’était qu’un des animateurs qui s’était déguisé ainsi.

Les adultes en effet peuvent mentir et je pense que tu ne m’as pas attendu pour t’en rendre compte. Quant aux autres enfants, ils n’avaient certes pas tort mais pourtant tout faux.

Vingt ans plus tard, je n’ai pas changé d’avis et, malgré tes désormais 28 ans, si tu me posais la question, je te répondrais de la même manière. Le père Noël existe. En ce Noël 2017, nous n’étions pas nombreux à le voir car il fait partie de ces êtres qui n’existent que pour ceux qui y croient.

Le père Noël, ce n’est pas que le bonhomme avec sa barbe. Ce n’est pas que les cadeaux même si je voyais bien tes yeux briller face à eux. C’est bien plus que cela. C’est la générosité dans son ensemble, les sourires qui émaillaient le visage de chacun ce jour-là, toute l’énergie déployée par tes éducateurs et animateurs pour aboutir à ce moment exceptionnel. C’est le plaisir de se retrouver ensemble, de partager un peu de magie, celle que tu peux saupoudrer un peu partout dans la vie.

Le père Noël n’existe pas. Ok… Soyons purement matérialistes. Mais la magie, tu as pu la palper, la saisir et la ressentir au fond de toi. Ton éternel sourire en était la preuve.

Comme toutes ces machines que tu maîtrises aujourd’hui, ces langages presque abscons, ces schémas de métal que tu connais par coeur, ces réseaux sur lesquels tu navigues jour et nuit, ces data-centers que tu gouvernes du haut de ton terminal… C’est matérialiste. Mais tu n’as pas oublié la magie. Ce que tu en fais, ce que tu fais naître, ces petits bonheurs numériques, artistiques que tu apportes, que tu partages, c’est ta magie.

Je t’ai menti il y a vingt ans. J’en suis fier et je continuerai à te mentir. Je sais aussi que tu perpétueras la tradition de ce beau mensonge.

(Quoique… Tant que je n’aurais pas fouillé et retourné le dernier centimètre carré de neige de Laponie, je ne pourrai jamais être certain que les non-pèreNoëlistes ont raison.)

D’avance, un très joyeux Noël à tous !

Numérique : comment dépasser l’effet Wahou (jusque l’infini et au-delà) ?

Je n’étais pas très grand quand j’ai pu découvrir ce qu’était la visioconférence bien avant que l’on parle d’internet. Je me souviens de chapiteaux installés par France Telecom sur la place de Béthune, la ville où j’ai grandi et, du haut de mes 10 ans en 1986, je naviguais entre les différents prototypes présentés. Il devait y avoir le premier téléphone portable mais je ne m’en souviens plus. À la même époque, le maire de la ville, Jacques Mellick, faisait élever dans le quartier du Mont Liébaut l’IRCOM (Institut Régional de Communication). J’ai eu le privilège de le visiter et mes yeux ébahis ont pu découvrir des dizaines d’ordinateurs implantés un peu partout dans les salles, un espace bourré d’écrans et de « racks » qui devait préfigurer ce que serait un data center et, dans chaque salle, un décor digne d’un film de science-fiction. Inutile de vous décrire mon excitation. Elle était à son comble. Je n’ai malheureusement pas pu profiter du lieu, celui-ci ayant été ravagé par un incendie en 1989.

Ce fut mon effet « wahou », mon entrée dans le numérique. Par la suite, j’ai eu de la chance. Le fait de pouvoir aller régulièrement au théâtre m’avait poussé à plonger dans les bacs de musique classique, contemporaine et électronique de la médiathèque plutôt bien fournie. Mon père disposait dans ses bureaux d’ordinateurs que je squattais régulièrement, ayant dans mon cartable plutôt qu’un goûter un paquet de disquettes 5″1/4 acheté au centre commercial du coin. Enfin, mon collège possédait des ordinateurs un peu poussifs mais que j’appris rapidement à maîtriser grâce aux ouvrages de la médiathèque et à quelques magazines informatiques. Je me repens d’ailleurs en ces lignes (mais il y a prescription) d’avoir régulièrement « bidouillé » en cours de maths de 6éme lors des séances informatiques en modifiant le code source des programmes et leurs variables. De même, non, le « serveur » qui administrait la quinzaine de MO6 de la salle n’était pas capricieux ; j’en prenais simplement le contrôle. Par la suite, j’eus rapidement mon propre ordinateur (et même une imprimante, ce qui coûtait un bras à l’époque) et mes professeurs purent enfin goûter une accalmie bien méritée.

« Avoir de la chance » ne devrait pas être une condition. Je suis conscient d’avoir été privilégié et c’est loin d’être le cas de tout le monde. À l’époque, il n’était pas toujours si facile d’accéder au numérique malgré le déferlement des ordinateurs personnels (Amstrad, Amiga, Atari…) et des premières consoles (Atari 2600, NES, Master System…). Je rencontre parfois des personnes de ma génération qui ont tâté elles-aussi du BASIC, voire de l’Assembleur, non sans nostalgie. De mon temps, les jeunes… 😉

Le matériel informatique est aujourd’hui à profusion, ne serait-ce qu’au travers des téléphones portables dont on change comme de chemise (et c’est bien dommage) sans en avoir tiré un centième des possibilités. L’effet « wahou » se démocratise au travers de nombreuses initiatives et d’ateliers éphémères. Je suis moi-même amené à intervenir dans différents lieux pour quelques heures et la magie s’opère. Ensuite, est-ce que l’on a la chance ou pas de disposer du matériel nécessaire chez soi, d’être entouré de personnes pouvant nous aider, de vivre dans un environnement inspirant ou tout simplement d’avoir du temps de cerveau disponible pour cogiter non sur les soucis du quotidien mais sur de fantastiques projets ? La question ne devrait pas se poser. On ne peut pas agir à tous les paliers mais il est important de créer de prime abord des conditions qui permettent de faire perdurer cet effet « wahou ».

Que l’on s’entende bien cependant : je ne dénigre pas l’effet « wahou ». Il est nécessaire et primordial. Sans étincelle, pas de feu… Mais sans papier, petit bois et bûches, pas de feu non plus…

Comme d’habitude, pas de recette miracle mais quelques pistes de réflexion.

Primo, n’utiliser que des ressources disponibles facilement, voire gratuitement. En cela, les logiciels libres constituent une solution optimale. Je me souviens il y a plus de 10 ans avoir refusé d’animer un atelier consacré à la musique électronique. Motif : l’apprentissage d’une vingtaine d’heures allait bénéficier d’un matériel et de logiciels hauts de gamme dans un studio éphémère. Une fois l’atelier terminé, basta ! On laisse les jeunes sans ressources pour poursuivre. Rien ne me fait plus plaisir que de les entendre dire durant l’atelier « je vais continuer chez moi » et ce, quel que soit le milieu social. Bonjour Scratch, Code.org et l’extraordinaire catalogue de logiciels libres constitués par l’association Framasoft, Framalibre. Idem pour la documentation : ne pas partir sans laisser de pistes ou quelques liens.

Secundo, concrétiser. Attention ! J’ai bien écrit « concrétiser » et non pas « tangible » comme la mode le veut actuellement, n’en déplaise aux tenants des fameuses « interfaces tangibles » (une télécommande est une interface tangible pour info…) . Bien que les deux termes soient présentés comme synonymes, il n’en est rien dans l’esprit. Tangible, c’est pouvoir toucher, être face à un objet qui existe. Concret est un peu plus philosophique et, à mon sens, plus intéressant. L’utilisation du terme « tangible » semble plus réanimer un vieux débat inintéressant entre manuel et intellectuel, entre ceux qui fabriquent et ceux qui ont le nez dans l’ordinateur. C’est bien la question dont on se fiche. L’important est de concrétiser, c’est-à-dire de créer de l’intérêt pour l’apprenant, pour qu’il ait envie de poursuivre. Parlons par exemple de mathématiques et de géométrie. S’il utilise un théorème quelconque pour modéliser et imprimer une forme en 3D ou développer une animation en Processing ou, plus hardcore, coder un script bash pour vérifier la faisabilité d’un triangle en fonction de la longueur des trois côtés, l’important n’est pas le résultat mais bien l’intérêt qu’il y trouve. Je me souviens d’un collégien qui m’avait envoyé balader lors d’un atelier code tout au long de l’année scolaire. Je me suis cassé les dents plusieurs fois jusqu’à ce qu’il m’explique qu’il faisait du rap. Ok ! Nous avons codé les rythmes et il s’est raccroché au groupe.

Tertio, créer des espaces de créativité, des « hackerspaces ». Plus facile à écrire qu’à faire car tout dépend non pas de votre bonne volonté, mais de celle du commanditaire. Sans avoir l’air de jouer au commercial ou de donner des injonctions, j’essaie toujours de m’intéresser à leurs projets futurs. Que va devenir l’espace que nous avons utilisé ? Quels sont les ateliers proposés ? Y a-t-il un accès libre ? Si un projet plus large est possible, tant mieux. Aidez-le à grandir, à tendre vers le hackerspace, c’est-à-dire un espace de possible, de créativité, de partage de ressources, de connaissances, de matériel, de culture…

Enfin, est-il utile de l’écrire ? Certes, on peut avoir une tendance solitaire (mea culpa ou pas 😉 ) mais il est souvent difficile de faire bouger les choses seul. S’il est possible de créer de la communauté autour d’un projet, il y a de fortes chances que l’action se poursuive. Trois-quatre gamins qui se retrouvent régulièrement dans une médiathèque, c’est déjà une communauté que bien souvent vous retrouvez sur d’autres événements. Autant en profiter et les aider à grandir sans oublier d’impliquer les intervenants, animateurs, parents… qui les entourent.

Scratch : comment analyser une chaîne de caractères et la valider

Scratch n’offre pas de manière naturelle des commandes permettant de travailler avec des chaînes de caractères ni ce que l’on appelle des « regex » ou expressions régulières permettant de rechercher des motifs particuliers dans un texte. L’opération n’est cependant pas impossible. En effet, travaillant depuis peu à la création d’un interpréteur Logo sous Scratch, tout simplement un petit programme permettant de jouer et dessiner avec la tortue comme dans le bon vieux Logo ou des logiciels comme Géotortue, j’ai été confronté au problème de la gestion des erreurs de frappe. Faire un interpréteur est en soi assez simple. Gérer les possibles erreurs faites par l’utilisateur relève par contre un peu plus du parcours du combattant.

Ainsi, par exemple, j’ai créé une fonction nommée « tn » pour « turn » qui est suivie d’un nombre de degrés. Celle-ci fait tourner la tortue à gauche ou à droite en fonction du nombre de degrés entrés, le sens naturel choisi étant celui des aiguilles d’une montre.

Sont considérées comme correctes les syntaxes suivantes :

  • tn 9 -> tourne de 9 degrés ; de même que tn -9 (cette fois, dans le sens inverse des aiguilles d’une montre)
  • tn 25 -> tourne de 25 degrés ; de même que tn -25
  • tn 132 -> tourne de 132 degrés ; de même que tn -132

Il nous faut donc vérifier que les commandes entrées par l’utilisateur correspondent bien à ce schéma.

Première étape avant de vérifier le reste de la séquence, s’assurer que la commande entrée est bien « tn ». Pour cela, on analyse les deux premières lettres de la réponse.

Une fois « tn » validée, nous pouvons vérifier la longueur de la séquence. L’exemple « tn 9 » nous montre que la taille minimum est 4 caractères et avec l’exemple « tn -132 » le maximum 7 caractères. Imbriquons un nouveau test dans la commande « si … sinon … ». Je choisis de les imbriquer pour faire au plus simple. C’est un peu moche mais nous verrons par la suite une méthode permmetant de d’obtenir quelque chose de plus cohérent et simple à lire.

Rien cependant ne m’empêche de taper « tnhkdj » et de recevoir le message « OK ! ». Nous savons que le troisième caractère doit obligatoirement être un espace. Ajoutons donc un nouveau test en dessous du premier.

Une fois ces tests passés, nous savons que notre commande est valide. Reste à savoir si l’utilisateur n’a fait aucune erreur dans la saisie du paramètre. Nous allons vérifier caractère par caractère. Les caractères acceptés sont « 0123456789-« . En dehors, point de salut. La commande sera automatiquement rejetée. Pour ne pas trop alourdir le code, il vaut mieux créer une fonction à part et l’utiliser dans le code principal.

C’est là que cela se complique un peu. Il me faut d’abord créer 5 variables. Petit rappel sur les noms variables : une variable peut porter n’importe quel nom mais il convient de lui donner un nom explicite de manière à pouvoir se souvenir facilement de son rôle. Personnellement j’ai tendance à reprendre sans cesse les mêmes noms de projet en projet afin de ne pas me perdre. Voici mes variables pour analyser la réponse de l’utilisateur :

  • string : la chaîne de caractères à analyser, correspondant à tout ce que l’utilisateur va entrer après « tn « 
  • count1 : un premier compteur utilisable dans une boucle
  • count2 : un second compteur
  • chars : la liste des caractères acceptés, soit « 0123456789-« 
  • verify : un compteur permettant de comptabiliser le nombre de tests validés ; si le paramètre entré est par exemple « -123 », soit 4 caractères, et que « verify » est égal à 4, on sait que les 4 caractères ont été validés ; si « verify » est égal à 3, un caractère est faux et invalide complètement le paramètre tapé par l’utilisateur (par exemple « -12a »)

Première étape : éliminer « tn  » de la chaîne de caractères à analyser, soit ne s’intéresser qu’au reste de la chaîne à partir du caractère n°3.

Après utilisation de cette commande, ma variable « string » est bien égale à « -123 » si je tape « tn -123 ». Il s’agit maintenant de vérifier si chaque caractère de cette variable est bien compris dans l’ensemble « chars », soit « 0123456789-« .

On commence par réinitialiser le premier compteur. Le code suivant comporte deux boucles.

La première passe en argument les caractères un à un de la chaîne, soit dans le cas de « -123 » : « -« , « 1 », « 2 », « 3 ». La seconde compare chacun de ces caractères aux caractères contenus dans la variable « chars ». Si l’un des tests est ok, c’est-à-dire que le caractère examiné est trouvé dans la variable « chars », on augmente la variable verify de 1.

Comme vous l’avez compris, un test validé = 1 point. Pour que le test soit complet, il faut que le nombre de points corresponde à la longueur de la chaîne de caractères. On vérifie cela avec une nouvelle condition « si … alors … sinon … ».

Petit conseil au passage: il vaut mieux avant intégration du script dans le programme utiliser des messages d’erreur personnalisés, chaque erreur générant un message particulier. Cela facilite la vie au moment de débuguer. On évite aussi de masquer l’affichage des variables tant que le script n’est pas fini.

Avons-nous d’ailleurs terminé ? Presque. Il reste un détail à régler : corriger la variable en cas de mauvaise valeur. Par exemple, dans notre cas, tourner de 360 degrés ou plus serait stupide car cela revient à faire un tour complet et plus. Pour revenir à une valeur plus raisonnable, il suffit de faire une division par 360 ou -360 en cas de valeur négative et de conserver le reste.

Pour éviter d’imbriquer des « si … alors … sinon … » à répétition, il suffit de s’inspirer de la méthode utilisée avec la variable « verify ». Si l’on attribue un point à chaque test validé, le score obtenu à la fin permettra de déterminer si le texte entré apr l’utilisateur est valide (par exemple, 10 tests effectués et score = 10 -> texte valide ; 10 tests effectués et score = 7 -> texte non valide).

Lien pour télécharger le script.