{"id":9554,"date":"2016-09-13T18:07:59","date_gmt":"2016-09-13T16:07:59","guid":{"rendered":"https:\/\/informatica.uniurb.it\/triennale\/?p=9554"},"modified":"2016-09-14T15:50:17","modified_gmt":"2016-09-14T13:50:17","slug":"una-caccia-al-tesoro-guidata-da-un-bot","status":"publish","type":"post","link":"https:\/\/informatica.uniurb.it\/triennale\/una-caccia-al-tesoro-guidata-da-un-bot\/","title":{"rendered":"Una caccia al tesoro guidata da un Bot"},"content":{"rendered":"<p>Il 26 agosto, in occasione della summer school \u201cCoding in your Classroom, Now!\u201d, si \u00e8 svolta una grande caccia al tesoro nel centro storico di Urbino: <strong>26<\/strong> gruppi, composti da <strong>139<\/strong> partecipanti complessivamente, si sono sfidati inseguendo indizi attraverso le strade strette e ripide della citt\u00e0, seguendo gli ordini di un\u2026\u00a0<strong>bot<\/strong>.<\/p>\n<p>Il gioco \u00e8 stato sviluppato durante la settimana precedente l\u2019evento e l\u2019intero team alle spalle della caccia al tesoro ha impiegato i concitati minuti appena prima dell\u2019inizio sistemando gli ultimi bug. (Beh, la maggior parte di essi.)<\/p>\n<p>La summer school, rivolta agli insegnanti di tutte le classi, ha avuto come obiettivo principale quello di portare il coding nelle scuole, cercando di coinvolgere sia gli insegnanti che i giovani studenti. Pertanto, era logico che la stessa caccia al tesoro, chiamata \u201c<a href=\"http:\/\/codemooc.org\/urbino-code-hunting\/\">Urbino Code Hunting<\/a>\u201d, si basasse su giochi di coding.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9540\" src=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-1024x398.jpg\" alt=\"Treasure hunt bot, registration\" width=\"1024\" height=\"398\" srcset=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-1024x398.jpg 1024w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-300x117.jpg 300w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-210x82.jpg 210w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-290x113.jpg 290w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration-450x175.jpg 450w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-registration.jpg 1927w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Ci\u00f2 che ha reso interessante la caccia al tesoro \u00e8 che l\u2019intero processo di registrazione, l\u2019effettiva caccia, la soluzione degli indovinelli e le altre meccaniche di gioco erano gestite direttamente da un <a href=\"https:\/\/telegram.me\/treasurehuntbot\">bot Telegram<\/a>. Chiunque avesse un account Telegram poteva facilmente registrarsi nei 4 giorni precedenti il gioco semplicemente iniziando una conversazione con lo stesso.<\/p>\n<h4><strong>Le registrazioni al gioco erano gestite da una comune conversazione con il bot.<\/strong><\/h4>\n<p>Il bot chiedeva agli utenti di risolvere un gioco \u201cpreliminare\u201d (per preparare i giocatori a ci\u00f2 che sarebbe venuto dopo e lavorare a un qualche tipo di <em>captcha<\/em>), da quanti altri partecipanti sarebbe stata composta la squadra oltre al capogruppo, e il nome del gruppo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9538\" src=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-1024x529.jpg\" alt=\"Urbino Code Hunting map\" width=\"1024\" height=\"529\" srcset=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-1024x529.jpg 1024w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-300x155.jpg 300w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-210x109.jpg 210w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-290x150.jpg 290w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map-450x233.jpg 450w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-map.jpg 1616w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Solitamente una caccia al tesoro chiede ai giocatori di trovare oggetti nascosti o raggiungere posti segreti basandosi su indizi, pi\u00f9 o meno vaghi. Nel nostro caso, il gioco effettivo era costruito attorno indovinelli di coding assegnati dal bot, ma non sul riconoscere i posti grazie agli indovinelli, sia perch\u00e9 il tema del gioco era il coding, sia perch\u00e9 molti dei partecipanti non conoscevano bene la citt\u00e0. Dunque le postazioni da raggiungere erano indicate\u00a0esplicitamente dal bot.<\/p>\n<p>Il gioco vero e proprio era cos\u00ec strutturato:<\/p>\n<ul>\n<li>1) Ogni gruppo ha una postazione casuale da raggiungere (un\u2019<a href=\"https:\/\/core.telegram.org\/bots\/api#sendlocation\">ubicazione geografica precisa<\/a> che corrisponde a un punto sulla mappa).<\/li>\n<li>2) Raggiunto il posto assegnato, il gruppo scatta un <em>selfie <\/em>e lo invia al bot.<\/li>\n<li>3) Il bot sceglie uno degli indovinelli di coding e aspetta la risposta della squadra. Il bot obbliga ad un\u2019attesa di 1 minuto tra un tentativo e l\u2019altro.<\/li>\n<li>4) Se la soluzione \u00e8 corretta, si ottiene dal bot un nuovo indizio per l\u2019<strong>enigma finale<\/strong>.<\/li>\n<li>5) Andare al punto 1.<\/li>\n<\/ul>\n<p>Abbiamo identificato <a href=\"https:\/\/saveriodelpriori.carto.com\/viz\/a259edfe-6ba0-11e6-86b1-0e233c30368f\/public_map\">30 postazioni ben distribuite nella citt\u00e0<\/a>, contrassegnate da una descrizione, una precisa posizione GPS, un ID numerico, e un codice segreto (16 caratteri alfanumerici casuali).<\/p>\n<h4><strong>Ogni posto aveva il suo codice segreto di 16 caratteri.<\/strong><\/h4>\n<p>Come faceva il bot ad accertarsi che il gruppo avesse raggiunto la propria destinazione? Semplice. Avevamo stampato 30 cartelli di carta (su fogli A4), uno per ogni postazione, con uno speciale QR Code collegato a un URL che seguiva questo schema:<\/p>\n<pre>https:\/\/telegram.me\/treasurehuntbot?start=0123456789ABCDEF<\/pre>\n<p>Questo link utilizza la <a href=\"https:\/\/core.telegram.org\/bots#deep-linking\">funzione Telegram di <em>deep linking<\/em><\/a>: dopo aver aperto l\u2019URL attraverso la scansione del QR Code, il telefono avvia automaticamente il client Telegram e invia la sequenza \u201c<code>\/start 0123456789ABCDEF<\/code>\u201d al nostro bot, senza mostrarla effettivamente all\u2019interno della conversazione. Dato che ogni QR Code conteneva il codice segreto di 16 caratteri della postazione all\u2019interno dell\u2019URL, il bot sapeva con certezza quale codice il gruppo aveva scansionato e dunque la postazione raggiunta.<\/p>\n<p>Il bot guidava ciascun gruppo lungo la propria strada attraverso una sequenza di 12 posizioni. Per assicurarsi che le squadre non si seguissero fra loro e che non si radunassero nella stessa area, tale sequenza \u00e8 stata scelta casualmente per ogni team.<\/p>\n<h4><strong>Al fine di assicurare il massimo della correttezza, le sequenze di postazioni sono state generate in anticipo con un limite alla lunghezza\u00a0massima (e minima).<\/strong><\/h4>\n<p>Gli enigmi, che erano erogati non appena un gruppo raggiungeva una postazione ed aveva inviato un <em>selfie<\/em> di conferma, erano basati sui <a href=\"http:\/\/codemooc.org\/codyquiz\/\">quiz CodyRoby<\/a>. Questi semplici giochi di logica utilizzano convenzioni condivise, come i blocchi colorati di pseudo-codice <em>Blockly <\/em>usati in Code.org e le <a href=\"http:\/\/codeweek.it\/lm09-codyroby\/\">carte coding CodyRoby<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-9541\" src=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-200x300.png\" alt=\"Sample CodyRoby quiz\" width=\"200\" height=\"300\" srcset=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-200x300.png 200w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-683x1024.png 683w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-210x315.png 210w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-290x435.png 290w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091-450x675.png 450w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game-telegram\/quiz0091.png 2000w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Esempio di domanda.<br \/>\n<\/em><\/p>\n<p>Tutti gli indovinelli richiedevano almeno un paio di minuti per essere risolti e la risposta poteva essere data con un semplice messaggio di testo, solitamente una singola lettera o un singolo numero. Le risposte venivano accettate in modo magnanimo, con spazi bianchi, in maiuscolo o minuscolo, e in varie formattazioni. Le risposte sbagliate obbligavano ad un\u2019attesa forzata di 60 secondi prima del tentativo successivo.<\/p>\n<p>Le risposte corrette, invece, non soltanto permettevano al gruppo di proseguire, ma lo premiavano anche con un importante indizio che sarebbe poi servito per risolvere l\u2019ultimo rebus: non appena una squadra raggiungeva l\u2019ultima posizione (che ci siamo assicurati fosse la stessa per tutti i gruppi), le veniva consegnata una mappa (una vera, tangibile, autentica mappa di carta) da usare per scovare il posto esatto in cui era nascosto l\u2019ambito premio.<\/p>\n<p>Il primo gruppo che lo avesse raggiunto, avrebbe vinto il premio e ricevuto un altro meraviglioso QR Code. (E comunque, chi \u00e8 che non ama i QR Code?) Quest\u2019ultimo codice segnalava la fine del gioco per tutti i partecipanti.<\/p>\n<h4><strong>Un canale Telegram era usato per trasmettere informazioni, condividere i <em>selfie<\/em>, e rendere il gioco pi\u00f9 coinvolgente.<\/strong><\/h4>\n<p>Il <a href=\"https:\/\/telegram.me\/urbinocodehunting\">canale Telegram Urbino Code Hunting<\/a> \u00e8 stato creato il giorno del gioco e tutti i partecipanti sono stati invitati ad aderirvi. I principali progressi dei gruppi erano trasmessi nel canale, insieme a tutti i <em>selfie<\/em> scattati dalle varie postazioni. Il canale permetteva ai partecipanti e a noi di monitorare lo stato del gioco, e dunque di renderlo pi\u00f9 coinvolgente mano a mano che i gruppi raggiungevano la loro destinazione finale.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9536\" src=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-1024x683.jpg\" alt=\"Urbino Code Hunting selfie collection\" width=\"1024\" height=\"683\" srcset=\"https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-1024x683.jpg 1024w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-300x200.jpg 300w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-210x140.jpg 210w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-290x193.jpg 290w, https:\/\/informatica.uniurb.it\/triennale\/wp-content\/uploads\/post\/implementing-a-bot-based-treasure-hunt-game\/treasurehuntbot-collage-450x300.jpg 450w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Una parte di tutti i selfie collezionati dal bot.<\/em><\/p>\n<p>Il bot \u00e8 stato gestito\u00a0da un programma PHP e da un database MySQL, assemblati in meno di una settimana. Il codice sorgente \u00e8 stato <a href=\"https:\/\/github.com\/CodeMOOC\/TreasureHuntBot\">pubblicato su Github<\/a> sotto licenza MIT, se volete dare un\u2019occhiata. Attualmente, installare il bot per una caccia al tesoro nel vostro giardino potrebbe non essere tra i compiti pi\u00f9 facili, ma stiamo gi\u00e0 lavorando per renderlo riutilizzabile per tutti.<br \/>\n<strong>(E abbiamo altri piani significativi\u2014e spaventosi?\u2014per il futuro\u2026)<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il 26 agosto, in occasione della summer school \u201cCoding in your Classroom, Now!\u201d, si \u00e8 svolta una grande caccia al tesoro nel centro storico di Urbino: 26 gruppi, composti da 139 partecipanti complessivamente, si sono sfidati inseguendo indizi attraverso le strade strette e ripide della citt\u00e0, seguendo gli ordini di un\u2026\u00a0bot. Il gioco \u00e8 stato&hellip;<\/p>\n","protected":false},"author":35,"featured_media":9537,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[150],"tags":[1593,1599],"post_series":[],"class_list":["post-9554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lablog","tag-bot","tag-telegram","entry","has-media"],"acf":[],"_links":{"self":[{"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/posts\/9554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/comments?post=9554"}],"version-history":[{"count":8,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/posts\/9554\/revisions"}],"predecessor-version":[{"id":9569,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/posts\/9554\/revisions\/9569"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/media\/9537"}],"wp:attachment":[{"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/media?parent=9554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/categories?post=9554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/tags?post=9554"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/informatica.uniurb.it\/triennale\/wp-json\/wp\/v2\/post_series?post=9554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}