Faire transporter un message
Faites transporter un message par vos lutins
Vous savez que saisir une URL permet d’accéder à une ressource sur le Web. Avant de vous expliquer plus en détail comment cette ressource arrive, depuis son point de départ (sa source) jusqu’à vous (sa destination), je vous propose une petite activité sur Scratch qui va permettre de simuler le trajet de la ressource.
Mettez votre réseau en place
Votre objectif, ici, c’est de satisfaire votre cliente : elle fait une requête auprès de vous, et en tant qu’admirable serveur, vous devez accéder à sa demande.
Bobby est un bon serveur Ada Lovelace est tellement satisfaite qu’elle demande qu’on lui livre des petits pains d’épices au miel.
Problème : le sens de l’orientation de Bobby n'est pas trés bon. Heureusement pour lui, son ami Bretzel dispose de toute une armée de petits bretzels prêts à aider. Ces petits bretzels, que nous nommerons A, B, C, D, E, F et G , sont placés à des endroits stratégiques dans le manoir :
La cuisine étant le lieu de stockage des gourmandises, c’est de là que tout partira. Pour éviter à Bobby d’avoir à se déplacer - et donc lui éviter de se perdre - les routeurs-bretzels ont été installés. Ils vont permettre d’acheminer les paquets de pâtisseries, chacun des bretzels passant le paquet à l’un de ses voisins.
Cliquer sur l'image Scratch pour charger le programme ( au besoin créer votre compte avec le mail de l'IFS)
ou en cliquant sur ce lien https://scratch.mit.edu/projects/724494197
ATTENTION : Cliquer sur REMIX pour que vos modifications soit faite sur votre compte
Déterminez une liste de voisins
Dans notre exemple, le bretzel A est le premier qui reçoit le paquet. Pour le faire parvenir à Ada Lovelace, il peut soit l’envoyer au bretzel B, soit au bretzel E. S’il l’envoie à B, alors B devra l’envoyer à C, qui lui-même l’enverra à D : le paquet est alors arrivé à destination. Mais si A l’envoie à E, E l’enverra alors à F, qui lui-même l’enverra à G, qui l’enverra à C, qui l’enverra à D : le paquet arrive à destination.
Évidemment, de notre point de vue, si A envoyait le paquet à B directement, il arriverait à destination plus rapidement. Quoique… N’entrons pas dans les détails, mais considérons simplement, à ce stade, que A ne connaît pas le plus court chemin : il a ses deux voisins B et E, et donne aléatoirement le paquet à l’un ou l’autre. Nous allons donc devoir dire à A qui sont ses voisins, en créant une liste spécifique pour A.
Pour cela, dans la catégorie Données, je clique sur “Créer une liste” :
Une fenêtre apparaît, je sélectionne “Pour ce lutin uniquement” :
Puis je nomme ma liste “voisins” :
Et je valide en cliquant sur “Ok”. Ma liste apparaît alors, mais uniquement pour le lutin A :
J’écris donc le script qui va me permettre d’ajouter, dans cette liste, les voisins de A, en l’occurrence B et E :
Déterminer, dans des listes propres à chacun de vos lutins-routeurs, chacun de leurs voisins.
Envoyez le paquet !
Bien… votre réseau est en place, mais il reste l’essentiel à faire : acheminer le paquet de la source vers la destination.
Dans notre exemple, ça donne ça :
Quand on clique sur Bobby, il envoie le paquet à A. A peut alors soit l’acheminer via B, soit via E.
Faire en sorte que votre paquet parte bien de la source pour arriver à la destination.
La première étape, c’est d’indiquer vers quel voisin le paquet doit aller. Pour cela, j’ai créé une variable pour tous les lutins, que j’ai appelée “destination”. Cette variable va me permettre de savoir, à tous moments, vers quel routeur doit aller le paquet. La destination finale est bien sûr le client (représenté ici par le bretzel D).
Dans l’exemple, j’ai choisi de déclencher l’action d’envoi en cliquant sur Bobby. La première destination étant nécessairement le bretzel A, j’initialise ma variable, et j’envoie un signal à tous les lutins pour indiquer que Bobby a été cliqué (ou autrement dit, que la requête a été faite).
Lorsque le lutin-paquet reçoit ce signal, il va créer une copie de lui-même, ou un clone, que vous retrouverez dans la catégorie Contrôle :
C’est cette copie qui se déplacera. Où ira-t-elle ? Vers les coordonnées du lutin-routeur inscrit dans la variable “destination”. Pour indiquer ces coordonnées variables, vous trouverez les blocs adéquats dans la catégorie Contrôle et mouvement :
À cette étape, votre variable “destination” est initialisée au premier routeur, ici A. La copie du lutin-paquet se déplace donc jusqu’au routeur A. Bien sûr, nous ne pouvons pas nous arrêter là : il faut changer la destination maintenant que le premier routeur a été atteint.
Le lutin A doit donc déjà détecter qu’il a bien reçu le paquet. Et si c’est le cas, il va rediriger la destination du paquet vers l’un de ses voisins (voisins que vous avez déterminés à l’étape précédente), comme ceci :
Si vous testez votre programme à ce stade, vous verrez que rien ne change : votre paquet va vers votre premier routeur, puis s’arrête. Pourtant, la variable “destination” change bien ! Mais souvenez-vous, votre lutin-paquet ne bouge qu’une seule fois : vers A. Il va donc falloir lui dire de répéter cette action :
Je vous laisse donc coder tous vos routeurs (ça devrait prendre 3 minutes à peine !) et re-tester votre programme.
Si vous cliquez plusieurs fois sur votre lutin-serveur (ici Bobby), vous vous apercevrez peut-être d’un bug curieux : tous les clones arrivés à destination se déplacent à nouveau. Et c’est normal, puisque c’est ce que vous avez codé…
Pour parer à cela, vous pouvez supprimer vos clones une fois qu’ils sont arrivés à destination, comme ceci :
-
Les routeurs permettent d’acheminer un paquet vers la destination.
-
Plusieurs chemins sont possibles pour aller vers une même destination.
-
Dans Scratch, les listes permettent de stocker des variables.
-
Dans Scratch, un clone est une copie du lutin qui peut avoir son existence propre et être utilisée temporairement.
Merci à Claude Terosier Fondatrice de Magic Makers,Magic Lily Conception pédagogique, Isabelle Chrisment Professeure des Universités à TELECOM Nancy, Université de Lorraine.
Catégorie : -
Page lue 26 fois