interscatchnet - WordPress.com

Transcript

interscatchnet - WordPress.com
INTERSCATCHNET Scopo Interessare i ninja di 12­13­14 anni che hanno gia’ visto i giochini con Scratch Che cos’è InterScartchNet ​
è una estensione di Scratch, cioè l’aggiunta di nuovi blocchi che fanno delle cose. Per l’esattezza è un insieme di blocchi che consentono di scambiarsi con un altro Scatch con la stessa estensione variaboili stringa e variabili numero, liberamente prese (per esempio la posizione (X e Y di uno sprite un punteggio, etc.) Inizialmente avevo pensato a una interfaccia peer2peer ma poi ho virato verso l’intermediazione di un server centrale che fa da “dispatcher” dei messaggi perche’ cosi’, volendo, il server centrale si puo’ mettere sulla rete e i ninja possono giocare anche a casa. Stato dello sviluppo analisi completa, sviluppo al 0% perchè … non sono capace. Ma che ci fai con sta roba? Questo serve per insegnare ai ninja i principi della rete e per dimostrarlo ho pensato a farvi vedere una demo statica, e ho pensato a una CHAT. Vediamo innanzitutto i blocchi : Come si vede ci sono 5 stringhe (frase1­frase5) e 5 numeri (numero1­numero5) che arrivano in input e una serie di comandi (output) E adesso passiamo all’idea del gioco: Il gatto “sono io” cio’e è lo sprite che rappresenta me che parlo e a ragazzina che dice a uno a uno i messaggi nella lista. ATTENZIONE: l’altro Chattante avrà gli sprite speculari,cioè uno che parla e uno che riferisce i messaggi che arrivano da me. Vediamo il codice del gatto: E adesso, infine, il codice del ricevente (la ragazzina) Come si vede in pochi blocchi di codice sono venuti fuori un sacco di concetti difficilotti ma molto molto affascinanti, almeno secondo me. (Flavia mi ha guardato maluccio adesso che glielo ho raccontato). Mi vengono in menti innumerevoli giochi da fare, come duelli, battaglia navale, etc. Riassumendo i vantaggi ●
●
I risultati sono ​
interessanti ​
per un ragazzino grande Consente di ​
insegnare ​
la comunicazione in rete e in generale molti concetti interessanti; ● Consente di rimanere dentro ​
scratch e ​
quindi non dover spiegare un linguaggio astruso nel quale bisogna capire un sacco di cose solo per scrivere “hello world” Come si fa i blocchi ci sono già,​
ma questo è il meno​
, basta scrivere un file .json, che riproduco sotto: { "extensionName": "InterScratchNet", "extensionPort": 80, "blockSpecs": [ ["r", "nome del server", "servername"], ["r", "frase1", "string1"], ["r", "frase2", "string2"], ["r", "frase3", "string3"], ["r", "frase4", "string4"], ["r", "frase5", "string5"], ["r", "numero1", "number1"], ["r", "numero2", "number2"], ["r", "numero3", "number3"], ["r", "numero4", "number4"], ["r", "numero5", "number5"], [" ","Il server e %s", "server"], [" ","Io sono %s", "user"], [" ","Comunica e ascolta da %s", "dest"], [" ","Spedisci sul numero %s il valore %n", "numericvalue"], [" ","Spedisci sulla frase %s il valore %s", "stringvalue"], ], } Questo file si importa in in scratch con una voce di menu “nascosta”, documentata nel seguente documento: ​
http://wiki.scratch.mit.edu/w/images/ExtensionsDoc.HTTP­9­11.pdf A questo punto, come spiegato nel documento (e come scoperto da Michele per primo) Scratch che fa? Fa una chiamata GET ​
http://localhost:<extensionport>/poll​
e si aspetta una roba del genere frase1 ciao sono caterina frase2 .etc. etc. Cioè una coppia nomevariabile valore per ogni variabile in input E per l’uscita, ogni comando quadrato fa sempre una GET http://localhost/nomevariabile/valore Quindi per far funzionare la baracca bisogna che qualcuno risponda (bene) a questi URL. Pensa e ripensa penso che il modo migliore sia quello descritto nel seguente disegno. (DA AGGIORNARE … nella versione attuale e’ diverso! a​
questo punto riassumiamo cosa si deve sviluppare: ● Un Local Http Server​
che ○ risponde a poll svuotando una coda persistente ○ Se invece riceve /getcommands svuota la coda di output e risponde con le triplette persona ­ nome ­valore ○ Se riceve pushvariables/… prende le variabili pushate e le mette nella coda di input ○
Quando riceve una chiamata diversa, riempie la coda di output con le triplette destinatario/nomeVariabile/valore. ● Un demone asincrono locale (​
AsyncExchanger​
) che: ○ Svuota la coda di Output e Posta i valori letti al server centrale ○ Fa GET al server Locale (/getcommands) e prende tutti i comandi da spedire ○ Fa una get (o POST) al server locale (/pushvariables…) e gli spedisce le variabili con cui riempire la coda di input ○ Fa una Get dal server centrale delle variabili destinate a quel client (sa come si chiama perchè tra i blocchi dell’estensione c’e’ c’è il comando <Io sono |valore|> ● Una pagina che sta su un server centrale (apache va benissimo) che processa i comandi postati e li dispaccia nelle code di ogni utente connesso in quel momento (le code sono dinamiche, si crea una nuova coda quando arriva un giocatore nuovo) ● Una pagina che sta sempre sullo stesso server che risponde al AsyncExchanger servendogli tutte le variabili destinate a lui, sapendo chi è perchè sta sui parametri del URL. Idee a caso per lo sviluppo ●
●
●
●
●
●
Una proposta potrebbe essere dividersi in 4 gruppi, e ognuno sviluppa una parte dei processi sopra descritti. ci vorrebbe un repository comune, ad es. GITHUB ma non so usarlo PHP, è il linguaggio che conosco meglio (non vuol dire bene, vuol dire meglio), con gli altri sono veramente nel marasma, non saprei da dove cominciare, inoltre usando Xampp si installa facilmente sui PC dei ninja (testato next next next e via …. ). Ho trovato sulla rete un Http Server fatto IN PHP che si può utilizzare e modificare per realizzare il LocalHttpServer, sembra funzionare Ho trovato una classe php che implementa la gestione delle code in maniera semplicissima Facendo come sopra descritto posso mantentere code in memoria sul Local Http Server in quanto quel processo non muore mai. Non sapendo come fare a fare delle code condivise in memoria sul server centrale pensavo di utilizzare ​
SQLLite ​
s embra molto facile da usare ed è piu’ facile maneggiare con SQL