COMPONENTI ARCHIVIAZIONE (Storage Components)

Diversi sono i metodi di memorizzazione in un’app:
  • quando viene salvato un valore provvisoriamente (ad esempio la scelta di una ListPicker viene scritta nella proprietà testo di una Label);
  • creando una variabile e assegnandogli un valore.
Purtroppo questi due metodi non sono persistenti e al riavvio dell’app, i dati saranno spariti. A nostro soccorso arrivano i componenti di archivazione che salvano permanentemente nel dispositivo. NB: nel gergo informatico la sigla DB sta per DataBase, cioè base di dati.
In AI2 il componente FirebaseDB (nella palette Sperimentale) nel gennaio del 2021 non verrà più supportato dalla Google per AppInventor della MIT (ispiratrice e sovvenzionatrice del progetto APP INVENTOR). Leggi le differenze tra FirebaseDB e CloudDB.
Quindi, nel momento in cui scriviamo (Dicembre 2020 n.d.r.) solo tre componenti sono effettivamente disponibili: CloudDb, File e TinyDB. (Siccome TinyWeDB viene utilizzato su un server pubblico della MIT, è stato scartato da questo elenco perchè non soddisfa nessun metodo di sicurezza e viene utilizzato solo a scopo scolastico).
Differenze
Se KODU, oltre a File, TinyDB e TinyWeDB ha altri tre componenti Cloudinary, Foglio elettronico e SQLite, THUNX ne esce fuori come un campione assoluto, avendo la possibilità di collegamento con piattaforme del calibro di Firebase, Airtable, WEB API e Oasis.

Contenuti:

Contenuti KODU:

  • Cloudinary
  • File
  • Spreadsheet
  • SQLite

Contenuti THUNX:

  • Local Storage
  • Local DB
  • Realtime DB by Firebase
  • Airtable
  • Web API
  • Media DB by Cloudinary
  • Smart Contract by Oasis
  • Blockchain Wallet by Oasis
App Inventor 2 Kodular ThunkableX
Fig.: Le tre liste dei componenti

CloudDB

Il CloudDB è un componente non visibile che consente di archiviare i dati (di tipo Testo e Immagini .JPG e .PNG) su un server di database connesso a Internet (utilizzando il software Redis). Ciò consente agli utenti della tua app di condividere i dati tra loro. Per impostazione predefinita, i dati verranno archiviati in un server gestito dal MIT, tuttavia è possibile configurare ed eseguire il proprio server. Impostare la proprietà RedisServer e la proprietà RedisPort per accedere al proprio server. Se vuoi ospitare un DB Redis sul tuo server leggi qui.

Proprietà

ProjectID

text read-only Ottiene il ProjectID per questo progetto CloudDB.

RedisPort

number  read-only La porta del server Redis da usare. Il valore predefinito è 6381

RedisServer

text read-only Il server Redis da utilizzare per archiviare i dati. Un’impostazione di “DEFAULT” indica che verrà utilizzato il server MIT.

Gettone Token

text designer-only Questo campo contiene il token di autenticazione utilizzato per accedere al server Redis supportato. Per il server “DEFAULT”, non modificare questo valore, il sistema lo riempirà per te. Un amministratore di sistema può anche fornire un valore speciale all’utente che può essere utilizzato per condividere dati tra più progetti di più persone. Se si utilizza il proprio server Redis, impostare una password nella configurazione del server e inserirla qui.

UseSSL

boolean designer-only Impostare su true per utilizzare SSL per comunicare con il server CloudDB / Redis. Questo dovrebbe essere impostato su True per il server “DEFAULT”.

Eventi

CloudDBError ( text message)

Indica che si è verificato un errore durante la comunicazione con il server Redis CloudDB.

DataChanged ( text tag , any value)

Indica che i dati nel progetto CloudDB sono cambiati. Lancia un evento con quel tag che è stato aggiornato e value che ora ha.

FirstRemoved ( any value)

Evento attivato dalla Funzione RemoveFirstFromList. L’argomento value è l’oggetto che è stato il primo nell’elenco e che ora è stato rimosso.

GotValue ( text tag , any value)

Indica che una richiesta GetValue è riuscita.

TagList ( valore )

Evento attivato quando abbiamo ricevuto l’elenco di tag noti. Esegui in risposta a una chiamata alla funzione GetTagList.

Metodi

AppendValueToList ( text tag,any itemToAdd )

Aggiungi atomicamente un valore alla fine di un elenco. Se due dispositivi utilizzano questa funzione contemporaneamente, entrambi verranno aggiunti e non verranno persi dati.

ClearTag ( text tag )

Rimuovi il tag da CloudDB.

CloudConnected ()

Restituisce true se siamo in rete e probabilmente saremo in grado di connetterci al server CloudDB.

GetTagList ()

Chiede al CloudDB di recuperare tutti i tag appartenenti a questo progetto. L’elenco risultante viene restituito nell’evento TagList.

GetValue ( text tag, any value valueIfTagNotThere )

GetValue chiede al CloudDB di ottenere il valore memorizzato sotto il tag specificato. Passerà il risultato al dato GotValue.

RemoveFirstFromList ( text tag )

Ottieni il primo elemento di un elenco e rimuovilo atomicamente. Se due dispositivi utilizzano questa funzione contemporaneamente, uno otterrà il primo elemento e l’altro otterrà il secondo elemento, oppure un errore se non è disponibile alcun elemento. Quando l’elemento è disponibile, l’evento FirstRemoved verrà attivato.

StoreValue ( text tag , anyvalue valueToStore )

Chiede al CloudDB di conservare il dato value sotto il dato tag.

File

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo. Il comportamento predefinito è scrivere i file nella directory dei dati privati ​​associata all’app. Companion scrive i file in /sdcard/AppInventor/data per semplificare il debug. Se il percorso del file inizia con una barra ( /), il file viene creato in relazione a /sdcard. Ad esempio, scrivendo un file in /myFile.txt cui scriveremo il file /sdcard/myFile.txt.

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo.

La posizione esatta in cui vengono inseriti i file esterni è una funzione del valore della proprietà Scope, se l’app è in esecuzione nel Companion o è compilata e su quale versione di Android è in esecuzione l’app.

NB: Scope in italiano può essere tradotto come SCOPO ma anche, e questo è il caso, in AMBITO, PORTATA. In programmazione è molto conosciuta la proprietà scope of variables, si riferisce alla visibilità e alla durata delle variabili. In altre parole, quali parti del tuo programma possono vederlo o usarlo. Normalmente sono riconosciute come LOCALI o GLOBALI.

Poiché le versioni più recenti di Android richiedono che i file vengano archiviati in directory specifiche dell’app, DefaultScope è impostato su App. Se stai utilizzando una versione precedente di Android e hai bisogno di accedere all’archivio pubblico legacy, modifica la proprietà DefaultScope in Legacy. Puoi anche cambiare l’ambito usando i blocchi.

Di seguito descriviamo brevemente ciascun tipo di ambito:

  • App: i file verranno letti e scritti nella memoria specifica dell’app su Android 2.2 e versioni successive. Nelle versioni precedenti di Android, i file verranno scritti nell’archivio legacy.
  • Risorsa: i file verranno letti dalle risorse dell’app. È un errore tentare di scrivere sugli asset dell’app poiché sono contenuti nell’archiviazione di sola lettura.
  • Cache: i file verranno letti e scritti nella directory della cache dell’app. La cache è utile per i file temporanei che possono essere ricreati in quanto consente all’utente di cancellare i file temporanei per recuperare spazio di archiviazione.
  • Legacy: i file verranno letti e scritti nel file system utilizzando le regole di App Inventor prima del rilascio nb187. Cioè, i nomi di file che iniziano con un singolo / verranno letti e scritti nella radice della directory di archiviazione esterna, ad esempio /sdcard/. La funzionalità legacy non funzionerà su Android 11 o versioni successive.
  • Privato: i file verranno letti e scritti nella directory privata dell’app. Usa questo ambito per archiviare informazioni che non dovrebbero essere visibili ad altre applicazioni, come le app di gestione dei file.
  • Condiviso: i file verranno letti e scritti nelle directory multimediali condivise del dispositivo, ad esempio Immagini.

Nota 1: in modalità Legacy, i nomi dei file possono assumere una delle tre forme seguenti:

  • I file privati ​​non hanno iniziali / e vengono scritti nell’archivio privato dell’app (ad es. ‘file.txt’)
  • I file esterni hanno una singola / iniziale e vengono scritti nella memoria pubblica (ad es. ‘/file.txt’)
  • Le risorse dell’app in bundle hanno due // iniziali e possono essere solo lette (ad es. ‘//file.txt’)

Nota 2: in tutti gli ambiti, un nome di file che inizia con due barre (//) verrà interpretato come un nome di risorsa.

Proprietà

DefaultScope dictionary write-only, designer-only

Specifica l’ambito predefinito per i file a cui si accede utilizzando il componente File. L’ambito dell’app dovrebbe funzionare per la maggior parte delle app. La modalità legacy può essere utilizzata per le app che precedono i nuovi vincoli in Android sull’accesso ai file dell’app.

ReadPermissionboolean write-only, designer-only

Una proprietà solo per la finestra di progettazione che può essere usata per abilitare l’accesso in lettura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Scope scope blocks-only

Indica l’ambito corrente per operazioni come ReadFrom e SaveFile.

WritePermissionboolean write-only, designer-only

Una proprietà solo designer che può essere usata per abilitare l’accesso in scrittura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Eventi

AfterFileSaved ( text fileName )

Evento che indica che il contenuto del file è stato scritto.

GotText ( text text )

Evento che indica che i contenuti del file sono stati letti.

Metodi

AppendToFile ( text text , text fileName )

Aggiunge il testo alla fine di un file. Crea il file se non esiste già. Vedere il testo della guida sotto SaveFile per informazioni, su dove sono scritti i file. In caso di successo, l’evento AfterFileSaved si attuerà.

CopyFile(fromScope,fromFileName,toScope,toFileName)

Delete ( text fileName )

Elimina un file dalla memoria. Anteporre al filename una / per eliminare un file specifico nella scheda SD (ad esempio, /myFile.txt eliminerà il file /sdcard/myFile.txt). Se il filename non inizia con a /, il file che si trova nella memoria privata del programma verrà eliminato. Anteporre al  filename una // è un errore perché non è possibile eliminare i file delle risorse.

Exists(scope,path)

IsDirectory(scope,path)

ListDirectory(scope,directoryName)

MakeDirectory(scope,directoryName)

MakeFullPath(scope,path)

MoveFile(fromScope,fromFileName,toScope,toFileName)

ReadFrom ( text fileName )

Legge il testo da un file in memoria. Anteporre al filename una / per leggere da un file specifico sulla scheda SD (ad esempio, /myFile.txt leggerà il file /sdcard/myFile.txt). Per leggere le risorse impacchettate con un’applicazione (funziona anche per il Companion), iniziare il fileName con //(due barre). Se un filename non inizia con una barra, verrà letto dalla memoria privata dell’applicazione (per le app in pacchetto) e da /sdcard/AppInventor/data per il Companion.

RemoveDirectory(scope,directoryName,recursive)

SaveFile ( text text , text fileName )

Salva il testo in un file. Se filename inizia con una barra (/) il file viene scritto sulla sdcard (ad esempio, scrivendo su /myFile.txt scriverà il file /sdcard/myFile.txt). Se fileName non inizia con una barra, verrà scritto nella directory dei dati privati ​​del programma dove non sarà accessibile ad altri programmi sul telefono. Esiste un’eccezione speciale per AI Companion in cui questi file vengono scritti su /sdcard/AppInventor/data per facilitare il debug. Si noti che questo blocco sovrascriverà un file se esiste già. Se si desidera aggiungere contenuto a un file esistente, utilizzare il metodo AppendToFile

TinyDB

TinyDB è un componente non visibile che archivia dati di tipo testo e immagine. Le app create con App Inventor vengono inizializzate ogni volta che vengono eseguite. Ciò significa che se un’app imposta il valore di una variabile e l’utente quindi esce dall’app, il valore di quella variabile non verrà ricordato alla successiva esecuzione dell’app. Al contrario, TinyDB è un archivio di dati persistente. I dati memorizzati in a TinyDB saranno disponibili ogni volta che l’app viene eseguita. Un esempio potrebbe essere un gioco che salva il punteggio più alto e lo recupera ogni volta che si gioca. Gli elementi di dati sono costituiti da tag e valori. Per memorizzare un elemento dati, è necessario specificare il tag in cui deve essere archiviato. Il tag deve essere un blocco di testo, che dà un nome ai dati. Successivamente, è possibile recuperare i dati archiviati in un determinato tag. Non è possibile utilizzare il TinyDB per trasferire i dati tra due diverse app sul telefono, anche se è possibile utilizzare il TinyDB per condividere i dati tra le diverse schermate di un’app multi-schermo. Quando si sviluppano app utilizzando AI Companion, tutte le app che utilizzano tale Companion condivideranno le stesse TinyDB. Tale condivisione scompare una volta che le app sono state impacchettate e installate sul telefono. Durante lo sviluppo, dovresti fare attenzione a cancellare i dati dell’ app Companion ogni volta che inizi a lavorare su una nuova app.

Proprietà

Spazio dei nomi

text Spazio dei nomi per l’archiviazione dei dati.

Eventi

Nessuno

Metodi

Cancella tutto()

Cancella l’intero archivio dati.

ClearTag ( text tag )

Cancella la voce con il dato tag.

any GetTags ()

Restituisce un elenco di tutti i tag nell’archivio dati.

any GetValue (text tag ,any valueIfTagNotThere )

Recupera il valore memorizzato sotto il dato  tag. Se non è presente tale tag, quindi tornare valueIfTagNotThere.

StoreValue ( text tag , any valueToStore )

Archivia il dato valueToStore sotto il dato tag. La memoria persiste sul telefono al riavvio dell’app.

TinyWebDB

Fig: Come funziona la trasmissione coi componenti web
Il componente TinyWebDB comunica con un servizio Web per archiviare e recuperare informazioni di tipo testuale. Sebbene questo componente sia utilizzabile, è molto limitato e inteso principalmente come dimostrazione per le persone che desiderano creare i propri componenti che parlano al Web. Il servizio Web è disponibile all’indirizzo (http://tinywebdb.appinventor.mit.edu). Il componente ha metodi per archiviare un valore sotto un tag e per recuperare il valore associato al tag. L’interpretazione del significato di “archivio” e “recupero” dipende dal servizio Web. In questa implementazione, tutti i tag e i valori sono stringhe di testo. Questa restrizione potrebbe essere attenuata nelle versioni future.

Prorietà

ServiceURL

text Specifica l’URL del servizio Web. Il valore predefinito è il servizio demo in esecuzione su App Engine.

Eventi

GotValue ( text tagFromWebDB ,any valueFromWebDB )

Indica che una richiesta GetValue del server ha avuto esito positivo.

ValueStored ()

Evento che indica che una richiesta StoreValue del server è riuscita.

WebServiceError ( text messaggio )

Indica che la comunicazione con il servizio Web ha segnalato un errore.

Metodi

GetValue ( text tag)

GetValue chiede al servizio Web di ottenere il valore archiviato sotto il dato tag. Spetta al servizio Web cosa restituire se non esiste alcun valore memorizzato in tag. Questo componente accetta solo tutto ciò che viene restituito. L’evento GotValue verrà eseguito al completamento.

StoreValue ( text tag , any valueToStore )

Invia una richiesta al servizio Web per archiviare il dato valueToStore sotto il dato tag. L’evento ValueStored verrà eseguito al completamento.

Contenuti KODU:

Cloudinary https://cloudinary.com  è un sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.
File Componente non visibile per la memorizzazione e il recupero dei file. Usa questo componente per scrivere o leggere file sul tuo dispositivo. Il comportamento predefinito è scrivere file nella directory dei dati privati ​​associata alla tua app. Il Companion è un caso speciale per scrivere file in /sdcard/Makeroid/data per facilitare il debug. Se il percorso del file inizia con una barra (/), il file viene creato rispetto a /sdcard. Ad esempio, scrivere un file in /myFile.txt scriverà il file in /sdcard/myFile.txt.
Fusiontables Control Servizio interrotto nel 2019. Alternative altrettanto utili, tra cui BigQuery, Cloud SQL, Maps Platform e Data Studio“.
Spreadsheet Un componente non visibile che fornisce l’accesso alla memoria del foglio di calcolo Airtable. https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo  potete vedere tutte le caratteristiche e le fasi d’inserimento.
SQLite Un componente non visibile che accede al database SQLite dell’applicazione. Qui il link alla pagina italiana di wikipedia.

Contenuti THUNX:

Local Storage Come metodo di utilizzo e come blocchi , ricorda molto il TinyDB.

Local DB Molte app richiedono una semplice tabella di dati per eseguire una serie di attività essenziali. Un modo per aggiungere questi dati è tramite un DB locale (Local DB). È simile al TinyDB ma con un’interfaccia sicuramente più easy:

Realtime DB by Firebase Questa opzione di archiviazione è utile per qualsiasi cosa, dal salvataggio dei punteggi più alti del gioco al monitoraggio del credito di lavoro, fornito da Firebase. Bisogna crearsi un account Firebase e così si ha diritto a dello spazio privato sui server Google.

Airtable https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo  potete vedere tutte le caratteristiche e le fasi d’inserimento.

Media DB by Cloudinary https://cloudinary.com  un altro sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.

Web API Una quantità di dati sono una parte essenziale di molte app create oggi e il componente API Web consente alle app di recuperare i dati da qualsiasi servizio API (interfaccia di programmazione dell’applicazione) pubblico o privato sul Web. Per gli sviluppatori più avanzati che hanno accesso in scrittura a un’API privata, questo componente consente anche di caricare ed eliminare i dati. Per vedere quali API pubbliche sono disponibili, consigliamo questo elenco di Todd Motto .

Smart Contract by Oasis Blockchain Wallet by Oasis

Come è solito per i tecnici che aggiornano la documentazione, questi due componenti introdotti nel 2019 sono spariti dalla guida di THUNKABLEX. Ugualmente lascio i link esterni .

Oasis Labs www.oasislabs.com offre una piattaforma di cloud computing su blockchain costruita per privacy, sicurezza e prestazioni superiori. La Blockchain, viene intesa come database trasparente al quale tutti gli utenti possono partecipare a patto che, gli stessi, decidano di condividere con gli altri le proprie conoscenze e risorse informatiche (condivisione delle risorse hardware e dei dati), affinché la stessa catena possa funzionare in modo migliore, offrendo quindi dei vantaggi a tutti gli altri utenti e ottenendone come conseguenza dell’impegno messo a disposizione da parte dei membri che fanno parte della stessa catena.

Aggiornato al 31/08/2021
Aggiornato al 10/10/2021
Aggiornato al 10/10/2021

PDF Lista comparazione AI2 KODULAR THUNKABLEX 20210911

Vuoi avere più informazioni sul Codin visuale? Vai alla pagina dei Blocchi incorporati dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.