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.

#metoo mais pas que : quand les filles doivent se justifier…

C’est la période. #metoo sur les réseaux sociaux face à ces harcèlements inadmissibles. Mais pas que… Il y a aussi le coté moral. Dans le domaine musical, je suis souvent surpris de voir que dès qu’une vidéo sur Youtube par exemple met en scène une djette ou une artiste effectuant quelques prouesses, il faut systématiquement décortiquer, vérifier, zoomer, traquer chacun de ses gestes pour voir s’il n’y a pas tricherie, fake. Les commentaires regorgent de questions existentielles sur le sujet. Si en sus elle est jolie, inutile de chercher ; la sentence tombe rapidement : il y a fake. Peu importe que l’on en ait la preuve ou pas. Curieusement, si c’est un homme, la question ne se pose pas.

Quand je lance ce sujet, on me renvoie souvent en référence la vidéo de Paris Hilton aux platines où l’on voit clairement un technicien à quatre pattes devant la console en train de faire les réglages, tandis que Paris réagit à contretemps. Certes… Mais c’est Paris Hilton et les fakes sont loin d’être l’apanage des demoiselles. Des djs ou groupes masculins en pleine tricherie, on peut en trouver à la pelle. Je me souviens d’un groupe un soir de fête de la musique qui maniait si bien la batterie électronique, les synthés et autres contrôleurs midi. De l’endroit où je me trouvais à l’intérieur du bar, je pouvais apercevoir la seule piste ouverte sur leur impressionnante table de mixage qui correspondait à … Quicktime ! C’était du playback pur et dur qui ne les empêchait pas de lever les bras régulièrement en signe de victoire et de faire d’impressionnants moulinets de mains sur les machines.

Ce soir, petit hommage à toutes celles qui m’ont marqué, me marquent ou que j’aime simplement écouter dans le monde de la musique plus ou moins (ou pas) électronique / contemporaine / expérimentale / noise / bizarre. En vrac mais sans pouvoir faire autrement que de commencer par Björk que l’on a souvent réduite au statut de « chanteuse certes aux capacités vocales impressionnantes, mais heureusement assistée de mâles compositeurs », alors qu’elle met énormément la main à la pâte. Certains albums sont quasi-entièrement de sa main, tout au moins pour la phase initiale, suite à laquelle elle invite ses amis à s’en emparer. Si tu me lis, pense à moi pour le prochain album ou les remixes… Merci. 😉

Artiste inclassable, d’une grande simplicité et que j’ai eu le grand plaisir de rencontrer peu de temps avant sa mort : Liza N’Eliaz.

Je l’ai découverte chanteuse du groupe Shane Cough et je suis toujours aussi fan de ses différents projets, Clytem Scanning.

Elle a bercé une partie de ma jeunesse teknoïde et brisé quelques barrières dans ce monde, Miss Djax.

Sans oublier sa comparse, Marusha, trop souvent réduite au statut de « pop-star ». C’était une formidable djette.

Je pensais cette période enterrée quand j’ai découvert Paula Vélez et toute la bande de djettes qui perpétuent une techno froide et hypnotique comme je les aime (Fernanda Martins <3, Sheefit, Nina Kraviz, Fatima Hajii, Marika Rossa, Ksenia Meow…).

Artiste disparue elle aussi malheureusement, qui constitue une de mes premières claques musicales, Ofra Haza.

Mention spéciale à Sally Ann de Paula Powered avec qui j’ai eu l’occasion de participer à un débat sur les licences libres lors des dernières RMLL.

Dans le domaine de la musique Chiptune, Toriena, qui me fait toujours sourire, tellement elle déborde d’énergie.

Plus proche géographiquement, la voix mystérieuse d’Alex de Drive with a dead girl.

J’ai rencontré sa voix par hasard sur un marché. Depuis, difficile de décrocher, Mae Karthauser.

Sa musique minimaliste m’a accompagné pendant des heures et des heures, Eliane Radigue.

Respect éternel envers celle qui a su dominer si bien le bruit, Nic Endo.

Enfin, mon coup de coeur actuel, une exploration plus que captivante des travaux de Shiva feshareki.

Je ne saurais finir sans avoir une petite pensée pour toutes les gamines que j’ai pu avoir en atelier, qui ont tâté de la boite à rythmes, du synthétiseur, du séquenceur, qui ont exploré leur école / collège micro à la main. Merci les filles ! Ne vous laissez pas impressionner !

C’est l’heure des brigades vertes !

Quand j’ai rencontré cette poubelle, elle était vide, totalement vide. Il ne m’a fallu qu’un quart d’heure pour la remplir avec tous ces joyeux reliquats humains qui jonchaient l’endroit où je me trouvais : un parc ouvert au public et servant d’abri à une faune et une flore conséquentes. Avec un bâton j’ai pu agripper nombre de déchets flottants. Malheureusement certains sont restés hors de ma portée. Bouteilles, emballages en plastique, crayons, restes de fauteuil pliant, bouchons, boîtes de conserves, capsules de cannettes, pailles… C’est fou ce que l’on peut retrouver, sachant que la poubelle la plus proche est à 10m de là. Une distance vraisemblablement énorme…

Cela me désole de voir ce genre de spectacle alors que le geste est si simple. Pire… Un certain nombre de déchets provenaient de pêcheurs (emballages d’appâts) qui profitent donc du lieu et de sa quiétude. Mais vraisemblablement pas en accord total avec ce dernier… Le panneau d’accueil du parc annonce que les bénévoles recueillent chaque année à peu près 400kgs de déchets. Un comble…

Je croisais récemment un groupe d’enfants sur Tourcoing : gilet fluo sur le dos, sac poubelle à la main et tous appliqués à ramasser consciencieusement. Peut-être un projet de classe qui peut être documenté, partagé par la suite et en inspirer d’autres. C’est l’heure des brigades vertes !