Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli

Tecnologie Cloud e Mobile: Mappa Concettuale, Sintesi del corso di Programmazione e Tecnologie Web

Una mappa concettuale riguardante le tecnologie Cloud e Mobile. Vengono descritte le macchine virtuali, il Cloud Computing e le tipologie di provider. Inoltre, viene introdotto il linguaggio JavaScript, con una descrizione delle variabili, degli operatori, degli array e delle stringhe. Infine, viene presentato il formato XML, con una descrizione degli elementi, degli attributi e dei parser. Il documento può essere utile come appunti per un corso di informatica o come sintesi del corso.

Tipologia: Sintesi del corso

2021/2022

In vendita dal 27/11/2022

GDaidone
GDaidone 🇮🇹

4.5

(4)

14 documenti

Anteprima parziale del testo

Scarica Tecnologie Cloud e Mobile: Mappa Concettuale e più Sintesi del corso in PDF di Programmazione e Tecnologie Web solo su Docsity! TECNOLOGIE CLOUD E MOBILE MAPPA CONCETTUALE GIUSEPPE DAIDONE CAP. 01 – INTRODUZIONE MACCHINE VIRTUALI ED EVOLUZIONE IN CLOUD • Creazione, sulla stessa macchina fisica, di più sistemi di elaborazione virtuali. • Tradizionalmente: ripartizione delle risorse fissa (numero di processori, tempo di CPU, storage, …). • Cloud: ripartizione delle risorse che si adatta dinamicamente in base alle necessità, si paga per quanta potenza si usa (Pay per Use), le risorse vengono distribuite su più macchine virtuali di diverse macchine fisiche (Cloud Computing). STACK DEL SOFTWARE APPLICATIONS DATA RUNTIME MIDDLEWARE OS VIRTUALIZATION SERVERS STORAGE NETWORKING IaaS (Infrastructure as a Service): sistema di elaborazione virtualizzato. PaaS (Platform as a Service): piattaforma di sviluppo con stumenti di testing, deploy e integrazione. SaaS (Software as a Service): software applicativo usato dagli utenti finali. TIPOLOGIE DI PROVIDER • On Premise: il cliente gestisce da solo tutto lo stack del software, nessun Provider. • IaaS: il cliente non gestisce più l’infrastruttura che è un servizio fornito dal Provider (Architetti di Rete). • PaaS: il cliente non gestisce né l’infrastruttura né la piattaforma di sviluppo e di esecuzione che sono dei servizi forniti dal Provider (Sviluppatori). • SaaS: il cliente non gestisce né l’infrastruttura, né la piattaforma di sviluppo né il software che sono dei servizi forniti dal Provider (Utenti Finali). JAVASCRIPT • Si tratta di un client-side script, ovvero programma annegato all’interno di una pagina HTML che vengono interpretati all’interno del browser. • Il JS fa valutazione dinamica delle istruzioni e dei tipi di variabili, ha un approccio particolare agli oggetti. • Si può programmare in modo veloce e flessibile se la complessità è ridotta. • C’è una difficoltà di debugging elevata. • Si racchiude il codice js con: <script> ... </script> VARIABILI • Numero intero: var v = 1 • Stringa: var s = ″Pippo″ • Costante: const d = 1 • var d = 1; { let d = 2; } • var contestualizza la variabile localmente (nella funzione o nell’oggetto di contesto), la variabile const invece non è modificabile (costante), let infine contestualizza la variabile nel blocco di codice che contiene la definizione (ad esempio tra le graffe) OPERATORI • Assegnamento: a=b • Aritmetici: a+b a-b a*b a/b • Incrementali: a+=b a-=b a*=b a/=b a++ a-- ++a --a • Confronto: a>b a>=b a<b a<=b a==b a!=b • Logici: a&&b a||b !a ARRAY • L’array è un oggetto: var a = new Array(10) • Gli elementi non sono tipizzati: a[0] = ″Giuseppe″; a[1] = 2; • Campi: • Metodi: length Numero degli elementi nell’array shift() Restituisce il primo valore e lo rimuove unshift(v) Inserisce in testa il valore v push(v) Inserisce in coda il valore v pop() Restituisce l’ultimo valore e lo rimuove indexOf(v) Restituisce la posizione di v (-1 se non è presente) STRINGHE • Oggetto di tipo String, le costanti di stringa vengono automaticamente convertite nell’oggetto: var s = ″Pippo″ • Campi: • Metodi: length Numero di caratteri della stringa anchor(n) Genera la stringa con <a name=″n″> big() Inserisce la stringa in <big> blink() Inserisce la stringa in <blink> bold() Inserisce la stringa in <b> fixed() Inserisce la stringa in <tt> fontcolor(c) Inserisce la stringa in <font color=″c″> fontsize(s) Inserisce la stringa in <font size=″s″> italics() Inserisce la stringa in <i> link(url) Inserisce la stringa in <a href=″url″> small() Inserisce la stringa in <small> strike() Inserisce la stringa in <strike> sub() Inserisce la stringa in <sub> sup() Inserisce la stringa in <sup> toLowerCase() Ritorna la stringa con i caratteri minuscoli toUpperCase() Ritorna la stringa con i caratteri maiuscoli charAt(p) Restituisce il carattere in posizione CAP. 03 – XML DTD ELEMENT • <!ELEMENT el_name cont_struct> • el_name: nome dell’elemento XML • cont_struct : struttura del contenuto dell’elemento cont_struct (…)+ Ripetizione non vuota (…)* Ripetizione anche vuota (…)? Opzionale E1, E2 Sequenza di elementi (E1 | E2 | …) Alternativa fra elementi (…) (#PCDATA) Solo testo (#PCDATA | E1 | E2 | …)* Contenuto misto () Contenuto vuoto DTD ATTLIST • <!ATTLIST el_name attr_name attr_type obbl_opz> • el_name: elemento per il quale si definiscono gli attributi • attr_name: nome dell’attributo • attr_type: tipo dell’attributo • obbl_opz: opzione di obbligatorietà attr_type CDATA Stringa generica ID Identifica l’elemento IDREF Riferimento all’id di un altro elemento obbl_opz #REQUIRED Attributo obbligatorio #IMPLIED Attributo opzionale default_value Valore da assumere quando non specificato XML PARSER • Processore XML: programma che ha il compito di processare un file XML. • Parser XML: strumento che effettua l’analisi sintattica di un file XML prima di processarlo (tipologia SAX/DOM). • Parser di tipo SAX: modalità ad eventi che, grazie ad un oggetto chiamato ContentHandler, viene fornito un metodo per ogni elemento del linguaggio. • Parser di tipo DOM: viene costruita una rappresentazione del documento in memoria (albero dei nodi, ovvero gli elementi) chiamato formato DOM. • Un parser è non validante se verifica solo che il documento sia ben formato, validante se verifica la correttezza del documento rispetto al DTD. ECCEZIONI • Blocco di istruzioni che gestisce gli errori: • Proprietà dell’eccezione: • Tipi di eccezione, verificabile nel catch con if(e instanceof TypeError): try { ... /* Codice monitorato */ } catch(e) { ... /* Gestione dell’errore */ } finally(e) { ... /* Codice sempre eseguito */ } name Nome dell’eccezione message Messaggio dell’eccezione EvalError Comando scorretto RangeError Numero eccede il limite ReferenceError Riferimento sbagliato SyntaxError Errore di sintassi TypeError Errore di type checking URIError URI scorretto OGGETTO WINDOW • L’oggetto Window è l’oggetto di più alto livello e contiene tutti gli altri. • Campi: • Metodi: document Contenuto del documento frames[] Array dei frame history Storia della navigazione name Nome della finestra self Riferimento a sé stesso window Sinonimo di self alert(msg) Mostra un messaggio con OK blur() Toglie il focus dalla finestra close() Chiude la finestra focus() Mette il focus alla finestra confirm(msg) Mostra un msg con OK e Cancel print() Stampa il contenuto della finestra prompt(msg) Mostra un dialog box open(URL) Apre una nuova finestra OGGETTO DOCUMENT • L’oggetto document rappresenta la pagina HTML in formato DOM. • Vi sono numerosi campi e metodi che permettono di modificare gli elementi HTML (non riportati). • Quando il DOM viene modificato, il browser rigenera la visualizzazione della pagina. JS controlla ciò che è visualizzato. • La funzione eval() consente di eseguire una stringa di codice JS, anche proveniente dall’esterno (rischio di JS Injection quindi non bisogna usarla). AJAX • AJAX permette ad un codice JS una comunicazione trasparente con il server: • Asynchronous: il client invia una richiesta al server ma la risposta arriva in modo asincrono, mentre il client attende la risposta può continuare a lavorare. • JavaScript: permette a del codice JS di creare applicazioni client-server tramite estensioni dell’oggetto Window. • And • XML: i messaggi inviati dal server sono file XML, quindi non pagine web, e il client JS deve mostrarli nella pagina HTML. XMLHTTPREQUEST • XmlHttpRequest: oggetto built-in dell’interprete in grado di gestire la comunicazione con il server, fare il parsing del documento XML ricevuto dal server e costruire la struttura dati DOM. • Schema di comunicazione: 1. Lo script invia una richiesta al server tramite l’oggetto XmlHttpRequest, 2. L’oggetto XmlHttpRequest aspetta la risposta, 3. Quando la risposta arriva, chiama una funzione dello script chiamata callback fornendone il messaggio ricevuto MAKEAJAXREQUEST • Tipicamente non si lavora al livello basso dell’oggetto XmlHttpRequest ma si alza il livello. Una funzione molto comune per impostare chiamate AJAX è makeAjaxRequest, è però consigliato non usarla professionalmente in quanto • poco robusta, • non fa chiamate cross-domain, • non gestisce in automatico la correttezza dei dati ricevuti (rischio di JS Injection). JQUERY • jQuery è un framework di JS con lo scopo di fornire ulteriori funzionalità di alto livello, basate sul JS ma più sofisticate e complesse. Nasce con lo scopo di interrogare il DOM. Esiste anche jQuery UI, nato in parallelo, per fornire funzionalità grafiche aggiuntive al JS. • Aggiungerlo in una pagina: <script type=“text/javascript” src=“jquery-2.0.0.js”> </script> • Oggetto jQuery $: è il cuore del framework ed è un oggetto perché fornisce metodi, una funzione perché interroga il DOM. JQXHR • jqXHR: oggetto che incorpora ed estende l’oggetto XmlHttpRequest e consente di controllare lo stato di comunicazione, memorizza i dati ricevuti e gestisce le funzioni di callback. • Metodi principali: • Convenvione: jqXHR.done(…).fail(…).always(…) jqXHR.done(function(data, textStatus, jqXHR){…}) Funzione da chiamare in caso di successo jqXHR.fail(function(jqXHR, textStatus, errorThrown){…}) Funzione da chiamare in caso di fallimento jqXHR.always(function(data, textStatus, jqXHR){…}) Funzione da chiamare comunque al termine CHIAMATA AJAX var ajaxConf = { url: "/AJAX_00/calculate_all.jsp?v1=" + n1 + "&v2=" + n2 + "&op=" + oper, dataType: "xml", type: "GET" }; var success = function(data, textStatus, jqXHR) { risposta(data, ”xml”); } var failure = function(jqXHR, textStatus, errorThrown) { alert(errorThrown); } $.ajax(ajaxConf).done(success).fail(failure); CAP. 09 – NODE.JS NODE.JS • Node.js: linguaggio lato server in grado di manipolare dati JSON. Gestisce code di eventi a diversa priorità (Event Loop): • Prende un evento dalla coda non vuota a più alta priorità, • Chiama la funzione di callback associata, • Ripeti all’infinito. • Un programma per Node.js non lavora nel browser, il nuovo oggetto di contesto non è più Window ma global. GLOBAL • Un programma JS per Node.js ha il compito di attivare un server, quindi mettersi in ascolto su una porta TCP e rispondere alle richieste e gestisce in modo natico HTTP e HTTPS. • Global fornisce oggetti utili a creare il server e a gestire la comunicazione. • All’oggetto global sono associati numerosi campi e metodi. MONGODB • MongoDB: DBMS per un database NoSQL non relazionale, composto da: • Database: insieme di collezioni, • Collezione: nome univoco del db e formato da documenti JSON eterogenei, • Istanza della collezione: insieme di documenti JSON senza alcun vincolo strutturale. INSERIMENTO – DML • db.collezione.insertOne(obj): inserisce un oggetto JSON all’interno della collezione, restituendo un oggetto che riporta l’ID del documento creato. • db.collezione.insertMany(obj_array): inserisce un array JSON all’interno della collezione, restituendo un oggetto con l’elenco di ID creati. INTERROGAZIONE • db.collezione.find(): restituisce tutta la collezione. • db.collezione.find({}): restituisce un oggetto vuoto. • db.collezione.find(cond): restituisce i dati della collezione che rispettano la condizione (l’AND è implicito basta mettere la ,). • Manipolazione risultato dell’interrogazione: • limit(n): limita a n il numero di elementi nel risultato • skip(n): salta i primi n elementi nel risultato • count(): conta gli elementi del risultato • sort({<field>:<option>,…}): ordina gli oggetti in ordine ascendente option:1 o discendente option:-1. ESEMPIO NODE.JS + MONGODB – PARTE 1 /* Importare il modulo mongodb */ const mongo = require(‘mongodb’) /* Imposto alcune costanti di servizio */ cost db_name = "MyDB_test" const collection_name = "mycollection" const db_url = "mongodb://localhost:27017" ESEMPIO NODE.JS + MONGODB – PARTE 2 /* Creo il client che deve gestire la connessione */ var client_config = { useUnifiedTopology: true, useNewUrlParser: true }; const client = new mongo.MongoClient(db_url, client_config) ESEMPIO NODE.JS + MONGODB – PARTE 3 /* Effettuo la connessione al db */ client.connect(async function(err) { if(err) { consol.log("Error connecting to MongoDB"); throw err; } }) PYTHON • Python: linguaggio relativamente semplice, con tipizzazione dinamica e orientato ad oggetti. Si tratta di un linguaggio interpretato con sintassi snella, le variabili non vanno dichiarate e sono dei riferimenti ad oggetti (come dei puntatori), i tipi built-in sono classi quindi i valori sono oggetti. • Tipi di variabili: • Numerici: int, float, complex • Liste: string, list, tuple • Dizionari: mappe chiave-valore • Classi: int(n), float(n), complex(r, i) OPERATORI • Assegnamento: a=b • Aritmetici: a+b a-b a*b a/b a//b a%b a**b • //: quoziente • %: resto • **: potenza • Incrementali: a+=b a-=b a*=b a/=b a++ a-- ++a --a • Confronto: a>b a>=b a<b a<=b a==b a!=b • Logici: a and b a or b not a OGGETTI MUTABLE E IMMUTABLE • Immutable: gli oggetti una volta creati non possono essere cambiati. • Numeri, stringhe, tuple • Mutable: gli oggetti possono cambiare il loro stato tramite metodi di modifica. • Liste, dizionari TUPLE • Creazione di una tupla: t = (1, ″b″) • Creazione di una tupla con costruttore (obbligatorio con un elemento): t1 = tuple(″a″) • Concatenazione: t2 = t + t1 METODI COMUNI – STRINGHE, LISTE, TUPLE • Lunghezza: len(o) /* Numero di elementi */ • Accesso ad un elemento: o[2] /* Terzo elemento */ • Accesso ad un range di elementi: o[1:4] /* Elementi da 1 a 3, 4 escluso */ • Accesso all’ultimo elemento: o[-1] /* Ultimo elemento */ SET E FROZENSET • Collezioni di tipo set, ovvero senza ripetizioni: • Set: insieme mutable • Frozenset: insieme immutable CICLI • While: • For: • For range: while cond: … for var in list: … for var in range(from, to, step): … FUNZIONI def name_function(params): … • Le funzioni possono essere anche annidate ma la funzione interna può essere visibile solo nella funzione esterna. • La funzione vede tutte le variabili definite all’esterno ma una variabile nella funzione può coprire una esterna. Le variabili esterne, inoltre, non sono modificabili da una funzione (se è un oggetto mutable il suo stato può essere cambiato). PARAMETRI FORMALI • Parametri con valore di default: def f(a, b, c=3): return a + b + c • Parametri illimitati: def f(a, b, *varargs): s = 0 for v in varargs: s+=v return a + b + s tupla ECCEZIONI try: /* codice monitorato*/ except e: /* reazione */ else: /* opzionale */ /* codice da eseguire se non ci sono eccezioni */ GARBAGE COLLECTOR • La gestione degli oggetti è molto simile al Java. • Non esiste una deallocazione esplicita, quindi il python gestisce la memoria tramite il garbage collector. CAP. 12 – PYTHON E MODULI, MAP-REDUCE MODULO FILE HANDLER (BUILT-IN) • filein = open(name_file): lettura • string = filein.read() • string = filein.readline() • fileout = open(name_file, ″w″): scrittura • fileout.write(testo) • filehandler.close(): chiusura file MAP REDUCE • Nel mondo del Big Data si hanno volumi troppo grandi di dati e fare Data Science su questi richiede molto tempo e potenza di calcolo. • Map Reduce (Hadoop, Spark): paradigma che si organizza in • Map: un frammento del data set viene trasformato in coppie chiave-valore, • Reduce: l’intero insieme di coppie viene raccolto, aggregando le coppie con la stessa chiave. CAP. 13 – MICRO-SERVICES E REST REST • REST (Representional State Transfer): stile architetturale client-server, con comunicazione state-less, utilizzo di proxy con cache, contenuti dei messaggi uniformi basati su standard. • Il server trasferisce al client la rappresentazione dello stato della risorsa con associati i link che descrivono tutte le azioni possibili che si possono effettuare su quella risorsa. Uniformità data dall’utilizzo di URI. • Stile ideale per sistemi basati su micro-servizi poiché un micro-servizio fornisce una risorsa con le azioni possibili su essa e i link ai micro-servizi che le eseguono. CAP. 14 – BLOCKCHAIN BLOCKCHAIN • Catena formata da blocchi di transazioni (nel caso di cryptovalute scambio di denaro) che tiene traccia di tutti gli scambi che sono: • immutabili: storia del processo archiviata, trasparente e immutabile, • condivisi: l’autorizzazione agli scambi deve essere un consenso condiviso. • Una transazione, quando approvata, viene inserita in cima alla catena diventando la nuova testa della lista. • Ogni blocco è identificato da un Hash Code molto complesso. Trovare una chiave di cifratura per generare un Hash Code valido è una sfida chiamata mining. SMART CONTRACT • Contratto tra due o più parti che non richiede l’intervento umano per essere portato avanti. • Si tratta di un programma che contiene le regole di correttezza e le regole di trasformazioni dei dati associati al contratto. • La blockchain garantisce l’integrità temporale di tutti gli stati del contratto. TIPI DI BLOCKCHAIN – ACCESSO ALLA PIATTAFORMA • Permissionless: chiunque può entrare nella rete, basta installare il software necessario e rispettare le regole. • Permissioned: solo i peer autorizzati possono entrare, c’è un amministratore della rete che concede le autorizzazioni. TIPI DI BLOCKCHAIN – SUPPORTO AGLI SMART CONTRACTS • Internal code: il codice è memorizzato ed eseguito nella piattaforma. • Contract-Specific Code: codice non condiviso • Contract-Family Code: una famiglia di contratti condivide il codice • Global Code: codice globale, può operare su tutti i dati • External code: il codice è memorizzato ed eseguito al di fuori della piattaforma perché la piattaforma non supporta l’esecuzione del codice al suo interno. CORDA • Permissioned platform • Moneta: nessuna • Supporta gli Smart Contracts: legal prose version • In-platform code, Contract-family code • Linguaggi: Java, Kotlin • Proof of Knowlledge PROOF OF KNOWLEDGE • A differenza del Proof of Work, il consenso si basa sulla conoscenza di ciò che avviene. Non tutti i peer vengono coinvolti, solo alcuni. Questi confermano che sono a conoscenza che le operazioni si possono svolgere. • Pochi peer coinvolti equivale ad avere bisogno di poche risorse e quindi si ottiene maggiore velocità. HYPERLEDGER FABRIC • Permissioned platform • Moneta: nessuna • No smart contracts, ma ChainCode • In-platform code, global code • Linguaggi: Java, JS, Go • Proof of Knowledge Byzantine Fault Tolerant (BFT) PROOF OF STAKE • La piattaforma suddivide il tempo in time slot della stessa durata. In ogni slot al massimo un blocco può essere aggiunto al ledget e contiene tutte le transazioni effettuate durante quel time slot. • Validazione fatta da un nodo casuale (estratto il coin) che verifica che le transazioni siano tutte valide, poi aggiunge il blocco al ledger. • Molto veloce, ridottissimo consumo di energia. Sembra molto robusto. NFT • NFT: rappresentazione di un oggetto unico (reale o virtuale) che non può essere speso o sostituito da altri oggetti, ma solo ceduto. CAP. 15 – XML AVANZATO