Tpsit Riassunti
Tpsit Riassunti
Android (2005)
● Open Source
● Librerie sia native che composte (usano le native)
Activity e Componenti
● Activity: componente grafica, interagisce con l’utente
● Service: esecuzione in background
● Broadcast Receiver: riceve eventi di sistema (es. batteria scarica)
● Content Provider: canale di comunicazione tra app diverse
● Intent: permette di attivare Activity e passare dati
Note Storiche
● Android nasce nel 2003 a Mountain View
● Acquistato da Google nel 2005 → lo rende open source
● Android 26 = Oreo (API Level 26)
Altre Note
● API Level indica la versione Android; versioni successive non garantiscono compatibilità con quelle precedenti
● Widget: gruppo grafico per info e operazioni rapide (es. meteo, orologio)
Modalità di programmazione
App Native
● Sviluppate per un sistema operativo specifico (es. Android, iOS)
● Funzionano solo su quel sistema e sfruttano tutte le funzionalità del dispositivo
App Web
● Sviluppate con strumenti web (HTML, JavaScript, CSS)
● Accessibili via browser
● Non sfruttano al massimo le funzionalità hardware
App Ibride (Cross-Platform)
● Sviluppate con IDE che permettono di creare app per diversi sistemi operativi
APK
● È il pacchetto generato da Android Studio da installare sul dispositivo
MANIFEST (file .xml)
● Descrive le caratteristiche dell'app
● Viene generato nel progetto Android e letto da ART
Sistemi distribuiti
Sistema Centralizzato
● I dati e l’elaborazione sono su una sola macchina
● Esempio: Word
Sistema Distribuito
● I dati sono memorizzati su più macchine
● L’elaborazione avviene su più macchine
● Esempio: Google Docs
● Insieme di applicazioni indipendenti che collaborano per uno scopo comune
● Usano una rete come infrastruttura software
Concorrente vs Distribuito
● Concorrente: un processo utilizza sottoprocessi per suddividere il lavoro
● Distribuito: i processi sono su macchine diverse
Definizioni importanti
● Leslie Lamport: un sistema distribuito è tale che, anche se una macchina ha un errore, gli altri computer non se ne
accorgono
● Andrew Tanenbaum: un sistema distribuito è una collezione di macchine indipendenti che l’utente percepisce come
un’unica applicazione
Esempi
● App social su cellulare → esempio di sistema distribuito
Ricerca
● Es. Google si suddivide in diverse fasi:
○ Web crawling: macchine che scansionano e raccolgono pagine
○ Parsing e indicizzazione: analisi dei contenuti e creazione degli indici
○ Query: interpretano l’espressione cercata, valutano gli indici e preparano la risposta
○ Output: predisposizione della pagina di risposta
DNS (Domain Name System)
● Sistema usato per la conversione tra nomi di dominio e indirizzi IP
● Costituito da tabelle distribuite su molte macchine nel mondo
Folding@Home
● Progetto che ha realizzato un sistema distribuito grazie agli utenti
● Permette l’uso dei loro PC per applicazioni di ricerca scientifica
● Modello a scambio di messaggi (message passing model):
○ Ogni CPU ha la sua RAM e comunica attraverso la rete
○ Tipico dei sistemi distribuiti
Classificazione a layer
Il software di un sistema distribuito è suddiviso in layer:
1. Presentation Layer (PL)
Interfaccia con l’utente: input/output (es. interfacce grafiche) (html e css)
2. Business Logic Layer (BLL)
Logica dell'applicazione, coordina l’elaborazione dei dati
3. Resource Management Layer (RML)
Gestione delle risorse, come l’accesso ai database
● Architettura a 3 Tier
Ogni layer è su una macchina diversa:
○ PL → Presentation Tier (front-end)
○ BLL → Middle Tier
○ RML → Data Tier (back-end)
● Architettura a N Tier
N > 3 tier (es. BLL suddiviso su più livelli)
Protocolli di trasporto
● UDP: datagrammi, senza connessione, non affidabile, non garantisce ordine, full-duplex, socket simmetriche
● TCP: stream, orientato alla connessione, affidabile, garantisce ordine dei segmenti, comunicazione full-duplex, socket
assimmetriche
Socket
● Entità software che individua un endpoint in un canale di comunicazione
● Identificato da: indirizzo IP + porta + protocollo
Tipi:
● Socket TCP: orientati alla connessione, stream
● Socket UDP: datagrammi, senza connessione
● Socket RAW: permettono di accedere e modificare ai pacchetti del lv retee realizzare protocolli di diagnostica (es. ping)
Librerie Java
● java.io.*, java.net.*
Localhost
● 127.0.0.1: indica la macchina stessa
Esempio:
● Sul client cambia l’IP ma non il localhost
Definizione Socket
● Entità software usata per permettere l’interconnessione di processi (IPC: Inter Process Communication)
Famiglie di Socket
● AF_INET: per Internet (raw stream e datagram)
● AF_UNIX: per comunicazioni tra processi sulla stessa macchina
Multicast
● Modalità di trasmissione da 1 mittente a più destinatari (selezionati)
Confronti:
● Broadcast: a tutti i nodi della rete
● Unicast: a un solo destinatario
Motivazione
● Multicast = maggiore efficienza nell’utilizzo della rete
● Permette di inviare pacchetti a un gruppo specifico, i router fanno duplicazioni del pacchetti e riducendo l’uso della
banda
Multicast vs Broadcast
● Le socket multicast derivano da quelle datagram, ma con caratteristiche specifiche per l’invio a più destinatari
Architetture di rete
Client-Server
● Processi diversi: uno richiede e l’altro offre un servizio
● Centralizzato
●
● ip client: dimanici
ip server: fisso
● client non comunicano tra di loro
Peer-to-Peer (P2P)
● formato da peer, host alla pari, host = peer
● Può essere:
○ decentralizzato: un peer ha sia funzionalita client che server
Evoluzione storica
● 1998 – MP3.com: upload di musica propria, architettura client-server
● 1999 – MY.MP3.com: possibilità di ascoltare musica ovunque (anche rippata da CD)
● 2000: cause legali dall’industria discografica
● 1999 – Napster (di Shawn Fanning): condivisione file musicali via P2P
○ Architettura P2P centralizzata (ricerca via server centrale)
● 2001: cause legali → chiusura di Napster
Vantaggi e svantaggi
● Vantaggio di Napster: memorizzazione canzoni distribuita
● Svantaggio: se si blocca il server centrale, l’intero sistema si chiude
2000 – Gnutella
● Applicazione distribuita per la condivisione di file
● Architettura P2P pura: ricerca distribuita tra i vicini
● Vantaggio: nessun punto unico di rottura
● Svantaggio: ricerca lenta, consumo di banda e tempo, possibile abuso di connessioni altrui
2001 – Kazaa
● Condivide file con architettura P2P ibrida
● La ricerca viene ottimizzata tramite supernodi
● Cause legali simili a Gnutella per violazione di copyright, ma li lasciano fare perche il problema erano i file condivisi non
il fatto che esisteva effettivamente il software
2001 – BitTorrent
● Condivide file dividendo i file in pezzi
● Gli utenti scaricano pezzi diversi simultaneamente, migliorando velocità
● Risolve il problema del leeching:
Serializzazione / Deserializzazione
● Serializzazione (Marshalling): trasformazione di un oggetto in stringa XML
● Deserializzazione (Unmarshalling): ricostruzione dell’oggetto dalla stringa XML
Caratteristiche di XML
● Standard industriale usato globalmente
● Estensibile: si possono aggiungere tag personalizzati
● Case sensitive
● Condivide caratteristiche con JSON
● Human readable/writable: XML può essere letto, scritto e modificato facilmente
● NON è un linguaggio di programmazione (è solo markup)
Validabile
● Può essere controllato:
○ Dal punto di vista sintattico (well-formed): struttura corretta con tag chiusi
○ Dal punto di vista semantico (valid): uso corretto dei tag previsti
Servlet (Java)
● Eseguite su un application server (es. Apache Tomcat)
● Producono pagine web dinamiche
Svantaggi
● Richiede aggiornamenti della conoscenza e della programmazione
Metodi HTTP
● GET: recupera una risorsa (es. pagina o collezione), senza body
● POST: invia dati al server per creare una risorsa all’interno del percorso specificato
Metodo PUT
● Richiede di creare o aggiornare la risorsa al percorso indicato
● Il contenuto è nel body
Metodo DELETE
● Richiede che la risorsa presente al percorso venga rimossa
● Non ha body
Con il post i dati non vengono messi nell’url ma nel body e sono cifrati
Tipologie di HEADER
● Generali: date, connection
○ text/plain
○ image/jpeg
○ application/json
Funzionamento CGI
1. Il client invia una richiesta HTTP con i parametri
2. Il web server avvia la CGI, passando i parametri in STDIN
3. La CGI elabora e produce output
4. L’output viene passato al web server
5. Il web server risponde al client
JAVA e portabilità
● Codice Java viene eseguito su JVM (Java Virtual Machine)
● JDK include il JRE
● La JRE (Java Runtime Environment) consente di eseguire classi Java e contiene librerie e il JVM
questo rende java portabile su qualsiasi macchina
Servlet
● Oggetti Java eseguiti lato server (in un container)
x elaborare richieste http, produce contenuto web dinamico
● Gestiti dal web server che esegue la JRE
Versioni HTTP
● 1991 – Versione 0.9
○ solo get, nessun header
● 1996 – Versione 1.0
○ Introduzione di metodi (GET, POST) e header
Modalità di funzionamento
● Incanalata: richieste/risposte una dopo l’altra
● Pipelining: invio di più richieste senza attendere la risposta
Problemi
● Pipelining difficile da usare con i proxy server (server intermediari)
● Head-of-line blocking:
○ Se una risposta tarda ad arrivare, blocca tutte le successive
2.0
introduce multiplexxing =
risolve l’head of blocking, con una sola connessione venivano spezzettate le richieste e composta la risposta a pezzi per poi
mandarla indietro
aveva comunque problemi di packed loss
3.0
utilizza QUIC al posto di TCP ed era basato su UDP fatto da google
questo permette di gestire le connessioni con piu velocita quidni meno latenza e meno packed loss, gestiva anche meglio il
problema dell’head of blocking grazie alla sua velocita
gestisce anche meglio le connessioni wifi
Esempio: 200 OK, 404 Not Found, 500 Internal Server Error
HTTP è stateless
● Ogni richiesta HTTP è indipendente dalle altre
● Per mantenere la persistenza dei dati si usano:
○ Sessioni
○ Cookie
TAG JSP
● <%! ... %> → Dichiarazioni (visibilità globale)
● <% ... %> → Scriptlet (istruzioni eseguite, visibilità locale)
● <%= ... %> → Espressioni (valutate e inserite nel risultato)
● <%@ ... %> → Direttive (es. import, configurazioni)
Esempio:
HttpURLConnection conn = (HttpURLConnection) new URL("http://172.18.80.8:90/getHello").openConnection();
Parte CLIENT
● Cerca il servizio nel Service Registry tramite UDDI (universal description descovery integration)
● Scarica il file WSDL
● Genera il client stub (interfaccia Java del servizio)
● Sviluppa e usa l’applicazione client
● richiamando metodi STUB veongo inviate richieste SOAP (richieste post con body SOAP variante xml)
Binding
● Collegamento tra un’operazione astratta e un protocollo concreto (es. HTTP)
HATEOAS
Hypermedia As The Engine Of the Application State
→ Permette al client di scoprire dinamicamente le azioni disponibili tramite link presenti nella risposta