=== Imparando.net ===

TinyWebDB

Nel provare a utilizzare App Inventor , lo strumento di sviluppo visuale per Android realizzato dal MIT, è sorta l'esigenza di poter recuperare dati dalla rete attraverso un servizio, quindi di dover costruire una REST API. Esiste più di un modo per poter far questo lato client con App Inventor, adesso si esplorerà una modalità nativa che offre degli strumenti preimpostati, ma che mi è sembrata interessante perchè usa un po' di tecnologie e permette di lavorare nel cloud attraverso un web service. App Inventor tra i suoi componenti ne ha uno chiamato TinyDB, che come suggerisce il nome serve a memorizzare dati in un DB in stile NoSQL che poi rimangono sul telefono. Se si vuole ottenere lo stesso effetto ma salvare i dati nella rete si può usare il componente TinyWebDB, solo che bisogna avere un servizio con cui parlare per poter salvare i dati e recuperarli.
Vediamo come mettere in piedi un servizio del genere utilizzando un "template" già presente sul sito del MIT e l'App Engine di Google, inoltre verrà usato Cloud9 come server per ospitare l'App Engine, che quindi non verrà usato nel cloud di Google.

  1. Come prima cosa bisogna scaricare l'App Engine SDK sulla propria macchina virtuale in Cloud9
    wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.32.zip
    e estrarlo
    unzip google_appengine_1.9.32.zip
    In questo modo si creerà la cartella google_appengine sul proprio server virtuale.
  2. Bisogna poi fare la stessa cosa con l'applicazione preconfezionata di App Inventor
    wget http://appinventor.mit.edu/explore/sites/all/files/tinywebdb/customtinywebdb.zip
    e anche in questo caso va estratta nella propria root
    unzip customtinywebdb.zip
    Questa cartella contiene una piccola applicazione Django che permetterà di gestire il database che si trova sul proprio server virtuale tramite chiamate remoto dal proprio dispositivo.
  3. A questo punto far partire il server è come bere un bicchier d'acqua: dopo essersi posizionati nella cartella dove è contenuto l'App Engine è sufficiente scrivere questo comando
    ./dev_appserver.py --host=0.0.0.0 --port=8080 ../appinventordb/
    e il servizio verrà lanciato in esecuzione all'indirizzo del server, che nel mio caso sarà
    https://biz-alessandro-bugatti.c9users.io/
Qui però è sorto un problema che mi ha fatto tribulare parecchio, perchè nonostante il servizio funzionasse da browser e permettesse di fare lo store e il get dei valori, la stessa cosa non funzionava per il componente TinyWebDB, mostrando vari tipi di messaggi, o per problemi di protocollo o per connessione in time out.
Dopo aver fatto un numero infinito di prove ho provato spostare l'applicazione nel cloud di Google, cosa che non avevo fatto all'inizio perchè non mi era chiaro (e ancora non lo è) se ci fosse una tariffazione o se fosse a pagamento.
Per farlo è sufficiente andare nella Dashboard di Google e creare un nuovo progetto, con un ID unico.
Fatto questo da Cloud9 si può fare il deployment con la seguente riga di comando
./appcfg.py -A bizcard-1228 --noauth_local_webserver update ../appinventordb/
L'opzione --noauth_local_webserver è necessaria poichè App Engine si trova su Cloud9 e quindi non può aprire un browser sulla propria macchina. Questa opzione crea un link da copiare e incollare nel proprio browser per ottenere un codice di autenticazione che poi a sua volta deve essere incollato alla richiesta dello script di deployment. Fatto questo l'applicazione sarà attiva su proprio_ID_progetto.appspot.com e a questo punto sarà possibile usare il TinyWebDB usando come ServiceURL quell'indirizzo.