Lab Informatica 3cfu
Lab Informatica 3cfu
L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al
normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e determina
quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte dell'informatica
non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi tradizionali del
calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla medicina
all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di miliardi (il
numero non è un errore di battitura) di transistor – i componenti elementari delle tecnologie
dell'informazione – popolano i prodotti che ci circondano, dall'automobile all'elettrodomestico,
dalla pompa di benzina al videogioco, per l'equivalente della metà del valore economico di questi
oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di intelligenza umana, animano
questi componenti e attraverso di essi tutti i processi che caratterizzano la nostra società moderna.
Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro
distinti, seppur collegati:
In altre parole, si può pensare all'informatica come alla scienza che si occupa dei seguenti temi:
In definitiva, l’informatica non riguarda i computer più di quanto l’astronomia riguardi i telescopi.
Branche dell'informatica
Nel sentire comune, l'informatica è vista come una disciplina monolitica. Ogni volta che si pensa ad
un informatico, si immagina un esperto capace di risolvere qualsiasi problema legato all'uso dei
calcolatori. In realtà l'informatica è una disciplina complessa dove si possono riconoscere numerose
specializzazioni. Pertanto è possibile, per non dire frequente, che un esperto sviluppi le proprie
competenze rispetto a un sottoinsieme di specializzazioni.
• Informatica teorica
o Teoria dell'informazione
o Teoria della computazione
o Algoritmi e strutture dati
o Teoria dei linguaggi di programmazione
• Informatica applicata
o Architettura dei calcolatori
o Sistemi e architetture (Information Technology - IT)
o Reti di calcolatori
o Basi di dati
o Sicurezza informatica e crittografia
o Interazione uomo-macchina
o Intelligenza artificiale
o Elaborazione digitale dei segnali
o Programmazione
▪ Sviluppo software
▪ Sviluppo web
▪ Sviluppo sistemi integrati
Inoltre l'informatica può essere coniugata ad altre discipline per dare vita a branche multidisciplinari
comead esempio bioinformatica, chimica computazionale, robotica, computer grafica
e musicologia computazionale.
Perché si possa arrivare all'informatica come la intendiamo oggi è stato necessario sviluppare
parallelamente due diversi aspetti: quello tecnologico e quello filosofico (in particolare logico-
matematico). La serie di eventi, idee e scoperte che culmina con i moderni calcolatori ha quindi una
moltitudine di protagonisti, disseminati in un arco temporale di almeno 4000 anni, con molte storie
parallele. Per quanto il racconto possa essere avvincente e ricco di colpi di scena, non è questa la
sede per una esposizione esaustiva. Ci si limiterà pertanto a citare solo alcuni degli aspetti cruciali:
quelli più funzionali alla comprensione del pensiero informatico e del funzionamento del
calcolatore.
Nel 1702, Gottfried Wilhelm Leibniz sviluppò la logica come disciplina matematica e formale, con
i suoi scritti sul sistema numerico binario. Nel suo sistema, l'uno e lo zero rappresentano i
valori vero e falso. Questo non ebbe un effetto immediato, ma fu decisivo nel secolo successivo.
I primi veri progenitori dell’elaboratore moderno videro la luce agli inizi del XIX secolo. Nel 1804
Joseph Marie Jacquard introdusse una nuova tecnologia per i telai in grado di controllare il
movimento di aghi, filo e tessuto attraverso schede perforate, automatizzando così la procedura di
tessitura.
A metà del XIX secolo, Charles Babbage elaborò una macchina di calcolo in grado di compiere
operazioni aritmetiche, ma non fu mai realizzata. Fu Ada Lovelace (considerata oggi la prima
programmatrice della storia), ad accorgersi delle vere potenzialità della macchina di Babbage:
sebbene fosse stata progettata per svolgere solo calcoli matematici, Ada riconobbe la possibilità
di programmare la macchina per altri fini. In questa versatilità risiede la principale differenza tra
una calcolatrice tradizionale e un calcolatore.
Nel 1854, le idee di Leibniz vennero riprese da George Boole, che pubblica la propria algebra
booleana, creando un sistema nel quale è possibile trattare ogni relazione logica attraverso l'utilizzo
di formule algebriche. Le operazioni (come l'addizione, la sottrazione e la moltiplicazione) vengono
sostituite da operazioni logiche con valori di congiunzione, disgiunzione e negazione utilizzando
solamente numeri binari (ossia costituiti dalle sole cifre 0 e 1).
Alla fine del XIX secolo, Herman Hollerith, un funzionario statunitense dell’ufficio per il
censimento, sviluppò una macchina tabulatrice, sempre a schede perforate, per automatizzare le
operazioni di censimento. Il successo e la richiesta di queste macchine fu tale che nel 1896 Hollerith
fondò la Tabulating Machine Company, che nel 1924 divenne la International Business Machine
(IBM).
Tra gli antenati degli anni '30 del calcolatore, figura il Memex, macchina immaginaria progettata da
Vannevar Bush. L’idea era quella di un sistema di archiviazione di dati utilizzato a scopi personali.
Il dispositivo era descritto come una scrivania dotata di schermi traslucidi, una tastiera, un set di
pulsanti e delle leve. Il Memex avrebbe reso possibile la creazione da parte dell'utente di
collegamenti tra foto e documenti, e per questo motivo viene oggi ricordato come primo supporto
per l'approccio all'ipertesto.
Sempre nella prima metà degli anni '30, Kurt Gödel enunciò i suoi famosi teoremi di incompletezza.
Oltre a rappresentare un caposaldo nel campo della logica matematica, con importanti implicazioni
di ordine filosofico, questi fecero da base per il lavoro di Alan Turing, matematico, logico e
crittoanalista inglese. Egli formalizzò un modello di calcolatore universale (la Macchina di Turing,
mai costruita realmente), dimostrò come ogni funzione calcolabile si possa eseguire attraverso un
algoritmo installato su una Macchina di Turing, ma dimostrò anche come per alcuni algoritmi non
sia possibile sapere a priori se siano eseguibili in un tempo finito o infinito. Tra le implicazioni più
importanti della Macchina di Turing si sottolinea come essa introduca una netta separazione tra
la macchina fisica da una parte, e i dati e gli algoritmi astratti dall'altra. Le basi teoriche per lo
sviluppo dei moderni calcolatori sono ora mature.
Nel 1945, John von Neumann definisce l'architettura per calcolatori digitali programmabili tutt'ora
in uso nella maggior parte dei dispositivi moderni di questo tipo. La peculiarità dell'architettura di
von Neumann risiede nel fatto che dati e programmi condividono la stessa memoria.
Nel 1946 venne presentato l’ENIAC, il primo calcolatore elettronico basato interamente su
tecnologia a valvole. Progettato presso l’Università della Pennsylvania, fu il primo vero calcolatore
dell’era elettronica in quanto eliminava tutti i dispositivi meccanici. L’ENIAC era in grado di
compiere operazioni molto complesse in pochissimo tempo per l'epoca, ma pesava 300 tonnellate e
occupava 170 metri quadrati. Quella delle dimensioni rimase per lungo tempo una delle più grandi
sfide dell’industria dei calcolatori.
Nel 1948, Claude Shannon introdusse il termine bit (contrazione di binary digit), da lui coniato per
designare l'unità elementare binaria di informazione (vero e falso, o 0 e 1).
Generazione 2: I transistor
Nel 1954, l’IBM propose il primo calcolatore commerciale con memoria su nastro magnetico. Tra
le più importanti innovazioni di quegli anni, vi furono l'uso dei transistor al posto dei tubi a vuoto e
l’evoluzione dei linguaggi di programmazione.
Nel 1959 venne lanciato l’IBM 705, che usava il FORTRAN, un linguaggio di programmazione
molto più vicino a quello umano rispetto alle istruzioni comprensibili dal calcolatore. I problemi
principali che ostacolavano la diffusione commerciale del calcolatore restavano i costi elevati e la
dimensione di queste macchine.
Generazione 4: Il microprocessore
Agli inizi degli anni ’70, la Intel Corporation sviluppò il microprocessore, il primo circuito
integrato capace di contenere l’intera unità di calcolo di un calcolatore. In seguito venne
commercializzato quello che viene oggi considerato il primo PC della storia per come lo intendiamo
oggi, l'Apple II, con il suo sistema operativo chiamato Apple Dos.
Solo quattro anni dopo, nel 1981, l’IBM brevettò il suo primo PC, destinato a imporsi come
standard di riferimento con il sistema operativo MS-Dos prodotto dalla software house Microsoft.
Un algoritmo può essere definito come un metodo per risolvere in modo efficiente, univoco,
universale, formalmente preciso e finito un problema.
Nella sua accezione più ampia, è possibile includere nella categoria degli algoritmi anche una
semplice ricetta di cucina oppure il libretto di istruzioni di un elettrodomestico. Entrambi infatti
sono una successione di istruzioni precise per la realizzazione di un risultato.
Il termine algoritmo deriva dal nome del matematico Muhammad ibn Musa al-Khuwarizmi.
Va notato che ogni problema può essere affrontato e descritto in molti modi diversi; quindi non
esiste un unico algoritmo per la risoluzione di un problema. Questo significa che lo sviluppo di
algoritmi è un'attività che richiede, tra le altre cose, creatività e ingegno. A tal proposito, vale la
pena citare una famosa battuta di Bill Gates (co-fondatore della Microsoft): "Sceglierò sempre un
pigro per fare un lavoro difficile perché troverà il modo più facile per farlo".
molti modi di organizzare i dati, ognuno dei quali ha pregi e difetti. In genere gli aspetti più
rilevanti di cui tenere conto sono:
Infine, un programma può essere definito come un algoritmo scritto in un linguaggio comprensibile
al calcolatore, che utilizza dati organizzati secondo una determinata strategia ed è vincolato alle
risorse disponibili e alle condizioni al contorno del calcolatore sul quale il programma viene
eseguito.
L’informazione può essere definita come un insieme di dati espressi mediante una rappresentazione
simbolica ed inseriti in un contesto interpretativo. In generale, per rappresentare le informazioni è
possibile adottare sistemi di simboli diversi. Ad esempio, come mostrato nella Figura 2.1, le lettere
dell’alfabeto, i numeri arabi, i numeri romani o ancora i segnali stradali sono sistemi di simboli
comunemente usati per rappresentare e comunicare informazioni.
Esiste dunque una corrispondenza arbitraria fra ogni singolo simbolo e l’informazione che esso
intende rappresentare. Questa corrispondenza viene chiamata codifica dell’informazione.
Un codice è un insieme di simboli e di regole. Queste ultime sono necessarie a definire l’uso e il
significato dei simboli. Codificare un’informazione significa determinare una corrispondenza fra i
segni di un codice e i dati che costituiscono l’informazione e il suo significato.
Di una stessa informazione sono possibili diverse codifiche che usano regole e segni diversi. Ad
esempio, in un ristorante si può trovare un cartello con la scritta “vietato fumare” o più
semplicemente il simbolo della sigaretta con il divieto. Nonostante l’informazione sia sempre la
stessa, ossia che in quel ristorante non si può fumare, per trasmetterla si possono utilizzare codici
(cioè simboli) anche molto diversi tra loro.
Si voglia costruire un codice per comunicare a uno studente il voto conseguito a un esame
universitario senza usare la normale numerazione in trentesimi. Le possibili informazioni che il
codice deve poter rappresentare sono: “insufficiente”, i voti da diciotto a trenta e il voto “trenta e
lode”.
Per prima cosa, si deve individuare un insieme di simboli che costituisca il codice, avendo cura di
definire un simbolo per ognuna delle informazioni da rappresentare. Ci sarà quindi bisogno di 15
simboli diversi e si dovrà associare ad ogni simbolo la corrispondente informazione, definendo
un’opportuna tabella di codifica come nell'esempio della Figura 2.3.
In questo modo, dato un voto (messaggio), è possibile derivarne una rappresentazione conforme al
codice definito (attività di codifica). Viceversa, dato un messaggio espresso con tale codice, è
possibile ricavare il voto corrispondente (attività di decodifica). Ad esempio, dato il simbolo #, è
possibile decodificare il messaggio e affermare che il voto conseguito è 24.
E’ importante che a ogni simbolo corrisponda una e una sola informazione, in modo che il
messaggio non risulti mai ambiguo.
Nell'esempio della Figura 2.3, è stato mostrato un codice che richiedeva 15 simboli per
rappresentare altrettante informazioni diverse. Un codice costruito in questo modo è molto semplice
e di rapida realizzazione, ma comporta che il numero di simboli che compongono il codice e la
tabella di codifica crescano con il numero di informazioni da rappresentare. È facile intuire che la
gestione di un codice con un elevato numero di simboli possa essere molto complessa.
Con riferimento all'esempio del codice per rappresentare i voti di un esame universitario, si
supponga di poter utilizzare soltanto i simboli ! £ $ %. Nella Figura 2.4, si mostra un esempio di
tabella di codifica basata sui quattro simboli considerati.
In questo modo, dato un voto, la lunghezza del messaggio codificato sarà pari
a due simboli, il doppio rispetto all'unico simbolo richiesto dal codice della Figura 2.3. Si noti
inoltre che sono importanti tanto i simboli quanto la posizione che questi occupano nel messaggio.
Infatti il significato di “!$” è ben diverso da “$!”.
Codifica binaria
Adottando una numerazione in base 10 si hanno 10 cifre con le quali costruire i numeri: 0, 1, 2, 3, 4,
5, 6, 7, 8 e 9. Esistono molti altri tipi di numerazione in cui il numero di cifre è minore a 10, come
ad esempio nella numerazione binaria. Questa fu inventata nel XVII secolo da Gottfried Liebniz e
si basa sull’utilizzo di soltanto due cifre: 0 e 1. La differenza è che mentre nella numerazione
decimale il valore si misura in potenze di 10, nel caso della numerazione binaria il valore si misura
in potenze di 2. A parità di valore da scrivere con la numerazione binaria, è necessario impiegare
molte più cifre. Questo tipo di numerazione divenne fondamentale con l’avvento dei calcolatori
elettronici, poiché le due cifre 0 e 1 sono intuitivamente associabili ai due possibili stati fisici del
calcolatore, come ad esempio passaggio/non-passaggio di corrente attraverso un cavo elettrico;
polarizzazione/non-polarizzazione di una sostanza magnetizzabile; c arica elettrica positiva/negativa
di una sostanza.
Per manipolare ed elaborare informazioni (numeri, testo, immagini, audio, video), il calcolatore ha
bisogno che queste siano codificate attraverso un codice composto dai soli simboli di 0 e 1. Tale
rappresentazione dell’informazione prende il nome di rappresentazione binaria o rappresentazione
digitale.
Un bit (binary digit) rappresenta l’unità minima di informazione, ossia una sola unità informativa
che può avere valore 0 o 1. Per poter rappresentare un numero maggiore di informazioni sarà
necessario combinare i bit in sequenze.
Ad esempio, si supponga di voler fornire una rappresentazione binaria del codice della Figura 2.4.
Ogni informazione, cioè ogni possibile voto, deve avere una rappresentazione binaria diversa dalla
codifica degli altri voti, come mostrato nella Figura 2.5.
Si noti che, poiché il numero di simboli che costituiscono il codice binario è due (0 e 1), la
lunghezza di ogni informazione è maggiore rispetto all'esempio della Figura 2.4 in cui si erano usati
quattro simboli. All'aumentare del numero di bit di un simbolo, aumenta la quantità di informazioni
rappresentabili. Ad esempio, nel caso in cui si voglia rappresentare un numero naturale (intero), il
numero di bit determina il valore massimo rappresentabile, mentre nel caso di un numero
irrazionale (con virgola), il numero di bit determina implicitamente anche la precisione con cui è
possibile rappresentarlo. Nel primo caso sono frequenti le rappresentazioni a 8, 16 e 32 bit, mentre
nel secondo caso sono più comuni rappresentazioni a 32 e 64 bit.
A titolo di esempio, se si volesse rappresentare un numero intero non negativo con 8 bit, le
combinazioni possibili sarebbero 28=256, quindi i valori rappresentabili andrebbero da 0 a 255.
In informatica, dopo il bit, un'altra unità di misura fondamentale è il byte. Un byte è formato da una
sequenza di 8 bit contigui. Un byte può rappresentare 256 informazioni diverse. Questo dipende dal
fatto che, avendo 8 bit a disposizione e potendo assumere ogni bit due valori (0 e 1), è possibile
definire 28=256 diverse combinazioni di bit.
Come per ogni unità di misura, anche il byte possiede multipli che consentono di rappresentare
maggiori quantità di informazioni, tuttavia esistono due diverse scale di misura, spesso confuse
anche dagli informatici. Errore comune (riscontrabile anche in Windows o MacOS) è infatti usare i
nomi del Sistema Internazionale (SI) per riferirsi ai multipli binari, i cui nomi corretti sono stati
standardizzati nel 1998 dalla Commissione Elettronica Internazionale (IEC):
Ad esempio, se si vogliono memorizzare 5000 numeri, ognuno con una precisione di 16 bit (cioè 2
byte), saranno necessari:
La codifica binaria può essere utilizzata anche per rappresentare i caratteri alfanumerici, cioè i
caratteri alfabetici, i numeri e gli altri simboli usati nella scrittura di testi. A tal fine, è necessario
che ogni carattere di scrittura possieda una propria rappresentazione binaria univoca. Si noti che
pure segni come le parentesi, le cifre numeriche, gli operatori aritmetici, i segni di punteggiatura e
le lettere maiuscole devono avere la propria rappresentazione binaria univoca.
Il fatto che un codice “sia di 8 bit” significa che la rappresentazione di un singolo carattere occupa 8
bit (ad esempio, la lettera “a” nella codifica ASCII è rappresentata dal codice 01100001) e che,
complessivamente, il codice è in grado di rappresentare fino a 28=256 caratteri diversi. Questa
considerazione è generalizzabile: dato un codice di N bit possiamo dire che ogni carattere di quel
codice occupa N bit e che complessivamente il codice può rappresentare fino a 2N caratteri diversi.
Il primo alfabeto codificato è stato l’alfabeto anglosassone. Questo primo codice venne
chiamato ASCII (American Standard Code for Information Interchange). In origine l’ASCII era a 7
bit, cioè esistevano 27=128 diverse combinazioni di bit per la rappresentazione dei caratteri. Questo
significa che ASCII a 7 bit è in grado di rappresentare fino a 128 caratteri diversi.
In questo primo standard (mostrato nella Figura 2.6) non era possibile rappresentare caratteri come
le lettere accentate, di uso comune nei paesi di influenza neolatina. A questo primo codice ne fece
seguito una sua estensione, detta ASCII esteso. Questa si serve di un byte (8 bit) consentendo la
rappresentazione di 28= 256 caratteri diversi nei quali sono contenute anche le lettere accentate e
altri simboli.
Per codificare una parola occorre recuperare dalla tabella ASCII la sequenza di bit corrispondenti ad
ogni lettera che la compone. Ad esempio si voglia rappresentare la stringa “Inf”. Essa richiede 3
byte, uno per ogni carattere, e l’insieme dei bit corrispondente ad ogni lettera sarà:
• I = 01001001
• n = 01101110
• f = 01100110
Per decodificare un testo ASCII il procedimento è inverso rispetto a quello di codifica. Data la
sequenza 010010010110111001100110, dobbiamo suddividerla in gruppi di otto bit, e poi
decodificare ogni gruppo con il carattere corrispondente mediante la tabella ASCII:
• 01001001 = I
• 01101110 = n
• 01100110 = f
Si noti come alla lettera maiuscola corrisponde un simbolo diverso rispetto alla corrispettiva
minuscola, infatti la lettera “i” corrisponde alla sequenza 01101001. I caratteri maiuscoli e
minuscoli sono a tutti gli effetti diversi dal punto di vista della codifica binaria.
Si noti inoltre che per decodificare un messaggio è necessario conoscere a priori il tipo di codifica
usato.
Dall'analogico al digitale
La codifica di elementi come suoni, immagini e animazioni presenta aspetti molto diversi rispetto a
quella di testi e singoli numeri. Il testo è naturalmente composto da un insieme discreto di simboli
(che diventano quindi l'unità minima di informazione), mentre per i numeri ciò che conta è il loro
valore (codificato direttamente in binario con la precisione desiderata). Ma quali sono le unità
informative minime di un suono o di un'immagine?
Suoni e immagini sono descrivibili come segnali, cioè variazioni di una certa grandezza fisica lungo
una o più dimensioni: la pressione che varia in funzione del tempo nel caso di un suono, la luce che
varia in funzione dello spazio nel caso di un'immagine, o la posizione di un corpo che varia in
funzione del tempo nel caso di un'animazione.
La particolarità di questi segnali è che sono continui (Figura 2.7): perchè la pressione sonora passi
da un valore ad un altro, devono essere attraversati tutti gli infiniti valori intermedi. Lo stesso vale
per una fotografia (la transizione tra due colori, per quanto repentina e impercettibile, non può
essere immediata) e per il movimento (per andare da un punto ad un altro occorre passare per
infiniti punti intermedi).
Se si volesse dunque usare tutti i valori assunti dal segnale come unità minime informative di suoni
e immagini, ci si scontrerebbe con la necessità di una memoria infinita. Per questo motivo, per poter
rappresentare suoni e immagini in un calcolatore, è necessario passare dal dominio analogico
(continuo) a quello digitale (discreto, composto da un numero finito di punti) attraverso un processo
chiamato campionamento.
Il campionamento (Figura 2.8) è una tecnica che consiste nel convertire un segnale continuo nel
tempo o nello spazio in un segnale discreto, valutandone l'ampiezza a intervalli temporali o spaziali
solitamente regolari, in modo da ottenere un numero finito di punti (chiamati campioni). Perché
questa operazione non comporti una perdita di informazione o la comparsa di difetti percepibili
(chiamati aliasing), è necessario che gli intervalli temporali o spaziali a cui si legge il valore del
segnale siano più piccoli della metà del più piccolo dettaglio a cui si è interessati (teorema di
Nyquist-Shannon).
Un numero finito di campioni però non basta a permettere la rappresentazione di un segnale nel
calcolatore, è infatti necessario che ogni campione abbia anche una precisione finita, cioè sia
rappresentabile con un numero finito di bit. L'operazione con cui il valore di un campione viene
arrotondato alla precisione desiderata prende il nome di quantizzazione (Figura 2.8).
Figura 2.8. Campionamento e quantizzazione per rappresentare il segnale con un numero finito di
numeri a precisione finita.
Nel caso dei suoni la frequenza di campionamento (il numero di volte al secondo con cui si
misurano le variazioni di pressione) determina quali siano i suoni più acuti rappresentabili, mentre
la quantizzazione determina la soglia del volume minimo rappresentabile.
Per le immagini l’unità minima di informazione è rappresentata dal pixel (picture element –
elemento dell’immagine). In sostanza si campiona l’immagine attraverso una griglia regolare in cui
ogni cella è un pixel e a ogni pixel è associato un colore. Più la griglia è fitta, maggiore sarà il
numero di pixel e di conseguenza migliore sarà la risoluzione dell’immagine. Un esempio di griglia
di pixel applicata a un’immagine è mostrato nella Figura 2.9. La codifica di un'immagine realizzata
in questo modo è chiamata bitmap o raster.
Ogni pixel rappresenta un punto di colore, la cui tonalità è descritta mediante una sequenza di bit.
Se l’immagine è in bianco e nero sarà sufficiente un unico bit per descrivere ciascun pixel: 0 per il
nero e 1 per il bianco. Se l’immagine è a colori sarà necessario un numero maggiore di bit per pixel,
che dipende da come vengono codificati i colori.
Un sistema per la rappresentazione digitale dei colori viene detto modello di colore, e ne esistono
molti. La maggior parte usa i colori primari convenzionali per derivare tutte le possibili tonalità. Il
più utilizzato è lo schema RGB, (Red Green Blue, rosso verde blu) che sono i colori primari su cui il
modello è costruito. Per distinguere i colori l’occhio umano utilizza fotorecettori di tre tipi,
rispettivamente più sensibili al rosso, al verde o al blu. Questi colori sono quindi
detti primari perchè miscelandoli è possibile evocare la percezione di qualsiasi altro colore.
Solitamente in RGB si utilizza un byte per ognuno dei tre colori primari, per un totale di 24 bit per
pixel (cioè 3 byte). E' quindi possibile rappresentare 256 sfumature diverse per ogni colore
primario, quindi complessivamente 256 x 256 x 256 colori diversi, cioè circa 16 milioni di tonalità
di colore.
640 x 480 = 307200 pixel, ognuno dei quali richiede 3 byte per rappresentare il colore associato,
quindi 307200 x 3 = 921600 byte = 900 KiB.
Un suono può essere descritto come la sensazione causata dall'oscillazione più o meno periodica
dell'aria che incide sul timpano dell'ascoltatore. Oscillazioni di diversa ampiezza danno origine alla
sensazione di volumi più o meno elevati, mentre il periodo delle oscillazioni incide sulla percezione
di suoni gravi o acuti.
L'orecchio umano può sentire suoni che oscillano da 20 fino a 20000 volte al secondo (da 20 a
20000 hertz, o Hz). Dunque, per il teorema di Nyquist-Shannon, in genere si campiona il segnale
più di 40000 volte al secondo (solitamente 44100 o 48000). Tuttavia, per suoni particolari come la
voce, tutte le oscillazioni sopra i 4000 Hz non hanno un particolare contenuto informativo; non è
quindi raro vedere codifiche a 8000 campioni al secondo per applicazioni come telefonia o
messaggistica vocale.
Riguardo alla precisione di ogni campione audio, si è scelto un numero di bit consono a
rappresentare la gamma di volumi a cui si è normalmente esposti, dal sussurro fino a rumori forti
(ma sotto la soglia del dolore); questo valore è stato fissato a 16 bit. Tuttavia non è raro trovare
suoni registrati a 24 bit, in modo da poter sfruttare una precisione maggiore durante le fasi di
lavorazione di un prodotto, come può essere un disco musicale.
Infine si noti che l'essere umano, in genere, è dotato di due orecchie. Questo gli permette di
localizzare la direzione da cui provengono i suoni. Per poter codificare (almeno in parte) questo tipo
di informazione, solitamente vengono rappresentati segnali audio stereofonici, cioè composti da due
sequenze di campioni, una relativa al canale sinistro ed una al canale destro. Esistono poi codifiche
a più canali (come il 5.1, composto da 6 canali indipendenti), che permettono una maggiore
precisione spaziale.
60 secondi x 44100 campioni al secondo x 16 bit per campione x 2 canali = 84672000 bit
= 10584000 byte =10336 KiB = 10.1 MiB
Per un video l’unità minima di informazione è rappresentata dal fotogramma, a sua volta composto
da pixel. Un video quindi eredita quanto detto relativamente alle immagini, con l'aggiunta però di
avere tante immagini quanti sono i fotogrammi di cui è composto, riprodotte ad una velocità
sufficientemente alta da fornire, all'occhio umano, l'illusione del movimento.
Per via del fenomeno di persistenza delle immagini sulla retina, l'occhio umano fatica a percepire
come separate tra loro immagini che si susseguono ad una velocità minima di 10 o 15 fotogrammi
al secondo (fps), dunque tale velocità è sufficiente per creare l'impressione del movimento. Tuttavia
velocità più elevate consentono di creare un'illusione più realistica, e non è raro trovare codifiche a
25, 30, 50 o 60 fps. Va inoltre considerato che anche in questo caso vale il teorema di Nyquist-
Shannon: sarà capitato di vedere video in cui le pale di un elicottero sembrino ferme o girino molto
lentamente; questo è il tipico effetto di aliasing temporale che ha luogo quando il movimento da
codificare è molto superiore alla velocità con cui si campiona.
Materiale registrato a fps più alti (come 120, 240, 300 o addirittura >1000) viene impiegato per la
riproduzione in "slow motion" (movimento rallentato), viene cioè riprodotto ad una velocità
inferiore per osservare nel dettaglio i movimenti del soggetto del video, altrimenti troppo veloci per
essere notati. La tecnica opposta prende invece il nome di "stop motion"; in questo caso i
fotogrammi sono registrati a distanza di diversi minuti l'uno dall'altro e poi riprodotti a fps
tradizionali, in modo da rendere percepibili movimenti altrimenti troppo lenti per essere notati.
Infine si noti che l'essere umano, in genere, è dotato di due occhi, che consentono la
cosiddetta visione stereoscopica. Questo permette di valutare la distanza a cui si trovano gli oggetti
grazie alle diverse informazioni che ogni occhio riceve. Per poter codificare (almeno in parte)
questo tipo di informazione è possibile codificare video stereoscopici, cioè composti da due
sequenze di fotogrammi, una relativa all'occhio sinistro ed una all'occhio destro. Queste due
sequenze possono essere memorizzate: come aree diverse dello stesso fotogramma; come alternarsi
di fotogrammi dell'una e dell'altra sequenza; come sequenze distinte (una successiva all'altra).
60 secondi x 30 fps = 1800 immagini, ognuna delle quali con una risoluzione di 1920 colonne x
1080 righe = 2073600 pixel (circa 2 megapixel)
1800 immagini x 2073600 pixel x 24 bit per pixel = 89579520000 bit = 11197440000 byte = 10.43
GiB
La comodità di codificare il materiale multimediale nei modi descritti in precedenza risiede nel fatto
che è possibile applicare modifiche ai dati in maniera molto efficiente sfruttando semplici
operazioni matematiche.
Consultando la tabella in Figura 2.4, ad esempio, si può notare come la conversione di una lettera
maiuscola in una lettera minuscola si può ottenere sommando 32 al numero con cui è codificata. Lo
stesso vale per i formati multimediali: se si volesse conferire una tinta rossa ad una foto basterebbe
sommare una piccola costante a tutti i byte relativi a quel colore primario, tale da aumentare la
quantità totale di rosso che giunge all'occhio. Analogamente, si può simulare l'eco in una
registrazione sommando ad ogni campione il campione che lo precede ad una certa distanza.
Lo studente più attento si sarà accorto che il numero di bit necessario alla memorizzazione di suoni,
immagini e video è decisamente superiore a quanto suggerisce l'esperienza: quasi 1 MiB per una
piccola immagine, 10 MiB per un audio di 1 minuto e addirittura 10 GiB per un breve video ad alta
qualità.
Questa discrepanza trova una giustificazione nel fatto che il modo in cui viene rappresentato
nativamente un dato non corrisponde necessariamente al modo in cui viene archiviato in un
contenitore.
I metodi di
compressione lossless si basano sull'idea di eliminare ciò che è ridondante, si evita cioè di
memorizzare informazioni inutilmente ripetute. Questo comporta un risparmio di memoria che in
media si aggira intorno al 50% dell'occupazione originale. Il costo di questo risparmio si riflette
nella necessità di reintrodurre la ridondanza (decompressione) per poter elaborare le informazioni
(fosse anche solo per visualizzare l'immagine su schermo o sentire il suono). Va comunque notato
che la decompressione di un file lossless dà origine alle stesse informazioni di partenza, senza che
sia scartato alcun dettaglio. Formati di questo tipo sono quindi l'ideale per l'archiviazione o la
trasmissione di dati nella forma più conservativa, senza che però sia sprecata memoria. Nella tabella
seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo:
Infine, i metodi di
compressione lossy si basano sull'idea di eliminare ciò che è irrilevante, si evita cioè di
memorizzare informazioni non percepibili dall'utente. Viene quindi persa in modo definitivo tutta
quell'informazione che in media non viene percepita. Questo comporta un oggettivo degrado
dell'informazione, con la potenziale introduzione di artefatti e distorsioni non presenti nel dato
originale. Il risparmio che ne deriva può arrivare fino al 90% dell'occupazione originale. Oltre
all'oggettiva perdita di informazioni, il costo è che la decompressone in genere è più onerosa per il
calcolatore in termini di potenza di calcolo richiesta. Inoltre, sebbene la decompressione sia sempre
necessaria per la fruizione del dato originale, è caldamente sconsigliata la manipolazione dei dati e
la successiva ricompressione lossy, in quanto si affronterebbe una nuova perdita di informazioni,
con l'introduzione di sempre più distorsioni e artefatti. Formati di questo tipo sono ideali per la
fruizione in streaming da parte dell'utente finale. Nella tabella seguente si illustrano i nomi di alcuni
formati e contenitori di questo tipo, mentre in Figura 2.10 si può vedere un esempio di immagine
che ha subito diverse ri-codifiche (decompressione e ricompressione) in formato JPEG.
Anatomia di un calcolatore
Esistono diversi modi di combinare questi elementi. La maggior parte dei calcolatori moderni segue
quella che è chiamata architettura di von Neumann, caratterizzata dall'utilizzo di un'unica memoria
di lavoro, in cui sono memorizzati sia i dati sia i programmi (contrapposta all'architettura Harvard,
dove dati e programmi risiedono in spazi di memoria distinti), e dove tutte le componenti sono
collegate tra loro da bus.
Oltre a queste parti, il calcolatore si compone anche di una scheda madre (la piastra sulla quale si
inseriscono le varie componenti) e un alimentatore elettrico (che ha il compito di adattare la
corrente della rete elettrica per poter essere utilizzata dai dispositivi all'interno del calcolatore). Nei
calcolatori portatili l’alimentatore è affiancato da una batteria che permette il funzionamento del
dispositivo anche senza il collegamento alla rete elettrica. Questi elementi sono contenuti nel case:
la scatola di metallo o di plastica che racchiude tutti i componenti.
Unità di calcolo
La CPU (Central Processing Unit) è l’unità centrale del calcolatore. Si occupa di eseguire i
programmi che sono scritti in linguaggio macchina. Attualmente le CPU sono costituite da
microprocessori che racchiudono in un unico circuito integrato le seguenti componenti di calcolo.
• L’unità di controllo (CU, Control Unit) esegue le istruzioni dei programmi, coordina le
attività del microprocessore e controlla il flusso delle istruzioni tra il microprocessore e la
memoria. Inoltre svolge la sua attività in modo ciclico: preleva dalla memoria principale la
“prossima” istruzione da eseguire, preleva gli operandi specificati nell'istruzione, decodifica
ed esegue l’istruzione, e infine ricomincia (ciclo macchina).
• I registri di memoria sono delle unità di memoria estremamente veloci con capacità ridotta,
ma con tempo di accesso molto breve. Attualmente le loro dimensioni variano da 16 a 64 bit
e i registri vengono utilizzati per immagazzinare le istruzioni e i dati che stanno per essere
processati o sono appena stati processati.
• L’unità logico aritmetica (ALU, Arithmetic-Logic Unit) è il nucleo di esecuzione dei calcoli,
essendo in grado di eseguire operazioni come somma, sottrazione, moltiplicazione e
divisione, oltre che le principali operazioni logiche come AND, OR e NOT. Una volta
prelevati gli operandi dai Registri di memoria, la ALU esegue l'operazione richiesta e ne
deposita il risultato nuovamente in memoria. La ALU, insieme all'unità di controllo,
collabora al completamento di un ciclo macchina.
• I bus sono canali di comunicazione tra le varie componenti dell’elaboratore e si
differenziano a seconda della funzione svolta.
Tra i principali produttori di microprocessori è possibile citare Intel, AMD, Motorola, Qualcomm e
ARM.
Memoria primaria
Un calcolatore possiede due tipi di memoria: la memoria primaria (chiamata anche centrale o di
lavoro) e la memoria secondaria o di massa.
La memoria primaria è quella che conserva i programmi in esecuzione e i dati in uso all'interno
della CPU. E’ organizzata come una successione di bit raggruppati in unità dotate di indirizzo (un
numero progressivo a partire da 0) dette celle. La velocità di accesso a questa memoria è cruciale
perché da essa dipende la reattività del calcolatore alle richieste dell’utente. Il metodo di accesso
alla memoria primaria è casuale, nel senso che, conoscendo l’indirizzo, è possibile accedere a una
qualsiasi cella di memoria in modo diretto e il tempo di accesso alla cella non dipende dalla sua
posizione. Per questo motivo, la memoria primaria è anche detta Random Access Memory o RAM.
Un’ulteriore caratteristica distintiva della memoria primaria è la sua volatilità: questo significa che,
spegnendo il calcolatore, il contenuto delle celle di memoria viene cancellato e non è più
recuperabile.
Memoria secondaria
La memoria secondaria è la memoria dei dischi e delle unità di memorizzazione permanente, quali
ad esempio i dischi fissi (hard disk), i dischi ottici (CD-ROM, DVD, Blu-Ray) e le memorie flash
(utilizzate, per esempio, nelle chiavette USB). Questo tipo di memoria è in grado di memorizzare
grandi quantitativi di informazioni che, nel caso dei dischi ottici, può andare da qualche centinaio di
MB fino a qualche decina di GB e, nel caso dei dischi fissi, può arrivare a decine di TB. Nella
memoria secondaria l’informazione viene memorizzata in maniera permanente, ma, a differenza
della memoria primaria, questo tipo di memoria ha tempi di accesso molto più elevati. Le memorie
basate su dischi (hard disk, CD-ROM, DVD-ROM, ...) non possono accedere a una cella di
memoria in modo diretto ma richiedono un tempo di posizionamento del dispositivo di lettura e
scrittura per raggiungere la zona di memoria richiesta. Per questo motivo, il tempo di accesso ad un
dato dipende dalla posizione della cella sul disco.
• dischi fissi (hard disk): utilizzati per l’archiviazioni di programmi e dati e generalmente
collocati all'interno del calcolatore. Esistono anche hard disk esterni, di solito collegabili
tramite porte USB. Questi dispositivi sono composti da una pila di dischi metallici rotanti
collegati a due testine di lettura/scrittura ciascuno (una per lato del disco). Le testine
possono spostarsi dalla parte più esterna del disco alla parte più interna (il funzionamento è
pressoché identico a quello dei vecchi lettori di dischi in vinile) e possono magnetizzare o
smagnetizzare i vari blocchi dati in cui i dischi sono suddivisi;
• supporti a lettura ottica (CD-ROM, DVD, Blu-Ray): sono utilizzati per la distribuzione del
software e di grossi archivi di dati multimediali (testi audio, foto, video). Sono generalmente
usati come supporto alla memorizzazione di dati in sola lettura e richiedono dispositivi
dedicati, cioè i masterizzatori, per poter eseguire operazioni di scrittura. Il funzionamento
meccanico di questi dispositivi è praticamente identico a quello degli hard disk: la principale
differenza riguarda l'interazione della testina con il disco che, in questo caso, è basata su un
principio ottico (la testina emana luce e riceve la luce riflessa dal disco);
• memorie flash (chiavette USB, Solid State Drive, memory card): questa tipologia di
memorie è di recente introduzione e funziona, come la memoria primaria, senza l'ausilio di
parti meccaniche. Le memorie flash, generalmente basate su principi di fisica quantistica
(come l'effetto tunnel), sono ad accesso casuale, molto più veloci di tutte le altre tipologie di
memorie secondarie e permettono una notevole riduzione dei consumi (dovuta all'assenza di
parti meccaniche). Negli ultimi anni si sta assistendo all'introduzione di supporti chiamati
SSD (Solid State Drive) utilizzati come sostituti dei vecchi hard disk: questi nuovi dischi
sono ancora molto costosi e non riescono a raggiungere la capacità di memorizzazione dei
vecchi hard disk, ma garantiscono enormi incrementi della velocità di lettura e scrittura oltre
che consumi ed emissioni sonore estremamente ridotte.
Le periferiche
Oltre alla CPU e alla memoria primaria e secondaria, il calcolatore ha bisogno di dispositivi di input
e output chiamati periferiche per supportare l'interazione con l’ambiente esterno.
E’ importante notare che nella maggior parte dei casi il collegamento al calcolatore di una periferica
richiede, oltre al collegamento dei cavi alla porta adeguata, l’installazione di uno specifico software
chiamato driver che ha il compito di gestire il flusso di dati diretto al e proveniente dal dispositivo,
facendo in modo che la periferica funzioni correttamente. Esso rappresenta in pratica il vocabolario
contenente il "linguaggio" di comunicazione della periferica.
Oltre a quelle menzionate, esistono altre tipologie di periferiche. Tra le più comuni è possibile citare
la scheda di rete, che permette di collegare un calcolatore ad altri calcolatori tramite una rete locale
o la rete Internet, e il modem, che consente di far comunicare due calcolatori tramite la rete
telefonica. Si tratta di due esempi di periferiche che sono simultaneamente di input e di output.
G3 – PROGRAMMI E SOFTWARE
Il ruolo del software
Il termine software (letteralmente "materia morbida") è l'insieme dei programmi che possono essere
eseguiti da un calcolatore. In particolare, un singolo programma software è un insieme di istruzioni
che un calcolatore, e più precisamente la CPU, deve eseguire per portare a compimento un certo
compito (task).
Microsoft Word è un esempio di programma software che contiene istruzioni per la creazione e la
gestione di documenti. Nel contesto di Word, il pulsante che consente di formattare in grassetto un
testo selezionato è una funzione software associata a un insieme di istruzioni che consentono di
raggiungere l’obiettivo (cioè visualizzare in grassetto una data porzione di testo).
Firefox o Chrome sono invece esempi di programmi software che si propongono come strumenti
per reperire e visualizzare pagine web. E’ facile pensare a numerosi altri esempi di programmi
software, ciascuno con le proprie caratteristiche e finalità.
Ne risulta che esistono diverse tipologie di programmi software di cui è opportuno conoscere le
specificità.
Tipologie di software
Il software di sistema è l’insieme dei programmi che gestiscono le risorse e il comportamento del
calcolatore. In questa categoria, il software più importante è il sistema operativo, un insieme di
programmi che controlla e gestisce le funzionalità legate a CPU, memoria, periferiche e dispositivi
di input/output collegati al calcolatore.
Nel software di sistema sono inclusi i firmware e i driver. Il firmware è un software integrato in un
dispositivo elettronico per svolgere funzioni specifiche, come l’avvio del dispositivo stesso. Un
esempio di firmware è il BIOS (Basic Input-Output System) che è un firmware integrato sulla
scheda madre del calcolatore con il compito di eseguire la procedura di avvio all'accensione della
macchina.
Il software applicativo comprende tutti i programmi che consentono all'utente di eseguire compiti
specifici. Sono esempi di software applicativo i programmi per la creazione e la gestione di
documenti (es. Microsoft Word), i fogli di calcolo (es. Microsoft Excel), i browser per la
navigazione su web (es. Mozilla Firefox), i programmi per la gestione della posta elettronica (es.
Microsoft Outlook), i programmi per l’elaborazione delle immagini (es. Adobe Photoshop) e così
via.
Il sistema operativo
Il sistema operativo (SO) è il software di sistema più importante per il corretto funzionamento di un
calcolatore e presiede numerose funzionalità. Da un lato, il sistema operativo si occupa di gestire le
componenti fisiche del calcolatore. In particolare, sono di sua competenza funzioni come:
• la gestione della CPU e della memoria principale (RAM). In ogni istante, il calcolatore
esegue numerosi programmi. Per questo motivo, il sistema operativo deve stabilire come e
in quale ordine questi programmi avranno accesso alla CPU, allocando inoltre lo spazio in
memoria principale per ciascuno di essi;
• la gestione dei file e la memorizzazione sui dispositivi di memoria secondaria. Il sistema
operativo è dotato di un modulo denominato file system per la gestione dei file. Questo
modulo presiede le operazioni di salvataggio/memorizzazione dei file e le corrispondenti
operazioni di lettura/caricamento dei medesimi. Il file system utilizza un’organizzazione dei
file in cartelle (directory) per favorire una gestione ordinata e intuitiva dello spazio
disponibile da parte dell’utente;
• l’interazione con le periferiche. Tramite i driver, il sistema operativo è in grado di
comunicare con i dispositivi collegati al calcolatore consentendone il corretto
funzionamento.
Il sistema operativo è lo stesso per tutti i calcolatori? La risposta è no: esistono sistemi operativi
diversi, ognuno con le proprie caratteristiche e peculiarità. I sistemi operativi più diffusi e
conosciuti sono Microsoft Windows, Linux, Apple Mac OS X e Android.
Windows è un prodotto della società statunitense Microsoft e prende il nome dall'elemento che ne
caratterizza l’interfaccia grafica: la finestra (window). Nel corso degli anni, le versioni di Microsoft
Windows che sono andate succedendosi sono piuttosto numerose: Windows 95, 98, 2000, XP,
Vista, 7, 8 e 10, solo per citarne alcune. Si tratta di un SO disponibile per numerose piattaforme,
cioè installabile su calcolatori con diverse tipologie di microprocessore e scheda madre. Microsoft
Windows è un SO commerciale, è dunque necessario pagare l’acquisto di una licenza per poterlo
installare su un calcolatore.
Linux è un SO non commerciale e può essere installato su un calcolatore senza dover pagare alcuna
licenza. La prima versione nasce nel 1991 a opera di Linus Torvalds, un giovane studente da cui il
sistema ereditò il nome. Si tratta di un SO estremamente versatile (ispirato ad un importante sistema
dell'epoca chiamato UNIX) e, come Microsoft Windows, installabile su numerose piattaforme.
Oggi questo SO è disponibile in svariate distribuzioni. Le diverse distribuzioni Linux condividono
l’uso del medesimo nucleo (kernel) del sistema e si differenziano nei restanti moduli. Ne risulta che
le varie distribuzioni possono presentare differenze anche sostanziali per l’utente. Sono esempi di
distribuzioni Ubuntu, Fedora e SuSE.
Mac OS X è un prodotto della società statunitense Apple ed è concepito per essere installato solo
ed esclusivamente sui dispositivi di questo stesso produttore (PC o dispositivi mobili). Come
Microsoft Windows, anche Mac OS X è un prodotto commerciale ed è necessario pagare una
licenza per installarlo su un calcolatore; come Linux, anche questo SO è ispirato al SO UNIX.
Android è un sistema operativo non commerciale sviluppato da Alphabet (azienda nota anche col
nome Google) basato su Linux, ma ottimizzato per i dispositivi mobili (smartphone, tablet ecc).
È possibile scegliere il sistema operativo da installare sul proprio calcolatore? In genere, all'acquisto
del calcolatore, il sistema operativo è già installato (e l’eventuale licenza d’uso già pagata in caso di
Programmi applicativi
La scelta può richiedere una riflessione: a volte la medesima funzionalità è offerta da più software
applicativi e si pone il dubbio di come procedere. In generale, i software applicativi non sono in
conflitto fra loro e possono coesistere sul calcolatore senza recarsi reciproco danno. Esistono
eccezioni a questa regola generale, come ad esempio il caso dei software antivirus per i quali è
raccomandato l'uso di un unico prodotto alla volta. Fatta eccezione per questi casi, i software
applicativi, anche quando analoghi per funzionalità, possono essere installati e usati
contemporaneamente sul calcolatore. Si pensi al caso dei browser, i software applicativi per la
navigazione su web. Esistono numerosi prodotti che offrono questa funzionalità come ad esempio i
noti Chrome e Firefox. Entrambi possono essere installati sul calcolatore e possono essere usati
contemporaneamente senza alcun problema.
Dunque, come scegliere quali software applicativi installare sul proprio calcolatore? Un fattore di
scelta è certamente il costo. Numerosi software sono prodotti commerciali ed è necessario pagare il
costo di una licenza per poterli installare e utilizzare. Spesso questi software possono essere
installati in versione di prova (trial version) che ha una durata limitata nel tempo (tipicamente 30
giorni) oppure offre funzionalità limitate rispetto alla versione ufficiale. Esistono anche software
cosiddetti freeware per i quali non è necessario pagare una licenza e possono essere liberamente
installati sul calcolatore. Una ulteriore categoria è quella del software open source, programmi di
cui è reso disponibile pubblicamente il codice sorgente scritto in linguaggi di alto livello in nome
della trasparenza e della possibilità da parte di chiunque di contribuire allo sviluppo.
Il software applicativo interagisce con il software di sistema e in particolare con il sistema operativo
per l'accesso e l'utilizzo delle risorse del calcolatore, come ad esempio la memoria principale e
quella secondaria. Pertanto il software applicativo è costruito per funzionare con uno specifico
sistema operativo. Il software applicativo è distribuito in diverse versioni, una per ogni sistema
operativo su cui può essere installato. Si pensi al caso di Mozilla Firefox che è disponibile per
sistema operativo Windows, Linux, Mac OS X e Android. Tuttavia, si tenga presente che numerosi
software sono concepiti e distribuiti per funzionare solo con uno specifico sistema operativo e non è
possibile utilizzarli su altri sistemi. Si pensi al caso di Microsoft Access, un software applicativo
della suite di Microsoft Office che è disponibile solo per sistema operativo Windows.
Dopo che un testo, un'immagine o qualsiasi altro dato è stato creato, acquisito mediante conversione
analogico-digitale, o modificato, è necessario memorizzarlo in maniera persistente nella memoria di
massa.
Esistono diversi file system, in genere caratteristici di un sistema operativo e non sempre
compatibili tra loro. Tuttavia tutti i file system più diffusi supportano l'organizzazione di file in
cartelle (raggruppamenti logici che hanno il solo scopo di aiutare l'utente a reperire i propri file, ma
non necessariamente identificano aree diverse del dispositivo di memoria) e la memorizzazione di
dati satellite relativi ad un file (come la data di creazione, la visibilità del file negli elenchi e i
permessi di accesso da parte di diverse categorie di utenti).
Per citare alcuni nomi a scopo di esempio, Windows può utilizzare file system come NTFS o
exFAT; Mac OSX in genere supporta HFS+ o exFAT; Linux e Android supportano Ext, JFS,
exFAT.
In ogni caso, lo spostamento di un file in una cartella sullo stesso dispositivo o la cancellazione di
un file non necessitano di una effettiva lettura e riscrittura dei dati, sarà il file system a tenere
traccia della posizione logica del file o a segnalare come libera la porzione di memoria
precedentemente occupata.
In generale i file sono organizzati in cartelle mediante una struttura ad albero che consente
molteplici livelli di annidamento. Per localizzare un file da un punto di vista logico ci si riferisce al
suo percorso, ossia il nome delle cartelle e sottocartelle separate da un carattere speciale (non
utilizzabile quindi all'interno del nome di un file o di una cartella). Ad esempio, il percorso del
file [Link] posto all'interno di una cartella pluto, a sua volta all'interno di paperino, tutte residenti
sul disco identificato dal SO con la lettera C: sarà:
C:\paperino\pluto\[Link]
• Software di videoscrittura o word processor. Alcuni software di questo tipo sono molto
semplici e offrono funzionalità minimali per lo più legate alla semplice scrittura (es. Blocco
Note o Notepad++) o alla formattazione del testo (es. Wordpad o Text Edit). Altri software
offrono funzionalità avanzate per la videoscrittura che comprendono strumenti di revisione e
supporto all'inserimento di immagini e altri elementi grafici (es. Microsoft
Word e OpenOffice Writer). Altri ancora sono concepiti per la scrittura in ambito scientifico
e facilitano l'uso di notazioni matematiche sofisticate (es. LaTeX).
• Fogli di calcolo o spreadsheet. Consentono la memorizzazione di dati sui quali eseguire
funzioni di calcolo di varia natura (ad esempio calcoli matematici, statistici, finanziari).
Esempi di software di questo tipo sono Microsoft Excel, OpenOffice Calc e Lotus 123.
• Software per la gestione di basi di dati o DBMS (Database Management System). Questi
software supportano l'interazione con le base di dati, cioè oggetti capaci di memorizzare dati
in forma strutturata. Esempi di software di questo tipo sono Microsoft Access e OpenOffice
Base.
• Software per realizzare presentazioni. Consentono di creare presentazioni composte da
diapositive (slide) in sequenza. Esempi di software di questo tipo sono Microsoft
PowerPoint e OpenOffice Impress.
• Software di intrattenimento. Consentono di giocare e di usare il calcolatore come uno
strumento ludico. Questi software possono essere semplici emulazioni di giochi esistenti
nella realtà (come ad esempio giochi di carte, dama, scacchi) o giochi più complessi di
avventura e strategia.
• Software per grafica (disegno, fotoritocco, progettazione). Consentono la modifica e la
manipolazione di immagini e oggetti di tipo grafico. Esempi di software di questo tipo
sono Adobe Photoshop, Adobe Illustrator, Autocad e Gimp.
• Software per la riproduzione audio e video. Esempi di software di questo tipo
sono Windows Media Player, Video Lan Player, iTunes, QuickTime player e FooBar.
• Software per la navigazione su web (browser). Consentono di reperire e visualizzare pagine
web. Esempi di software appartenenti a questa categoria sono Microsoft Edge, Google
Chrome, Safari, Opera e Mozilla Firefox.
• Software per scrivere (sviluppare) software. Si tratta di complessi ecosistemi composti
(nella forma più basilare) da un semplice applicativo capace di scrivere del testo non
formattato e da un secondo applicativo (il compilatore) in grado di tradurre il testo scritto in
un linguaggio di alto livello (il codice sorgente) in linguaggio comprensibile dal calcolatore
(il codice macchina).
• Software gestionali, concepiti e sviluppati per soddisfare le esigenze di realtà specifiche. I
software di gestione di ospedali, biblioteche, uffici, magazzini sono esempi di questo tipo. I
software gestionali sono commissionati dall'interessato (l'azienda che necessita del software
per le proprie esigenze gestionali) ad una o più società di sviluppo software (software house)
concordando le funzionalità da sviluppare e il prezzo da corrispondere.
Ogni sistema operativo ha una strategia diversa per riconoscere la tipologia di un file (immagine,
testo, suono, ecc). Le tecniche principali sono le seguenti:
Estensione: In Windows i caratteri successivi all'ultimo punto (".") determinano l'estensione del
file (nascosta per impostazione predefinita). Ad ogni estensione è associata una applicazione
predefinita, che può essere cambiata dall'utente. Si tratta di un metodo molto veloce per capire di
che tipo è un file, ma se per errore l'estensione viene cancellata o cambiata possono insorgere dei
problemi.
Metadati espliciti: In Mac OS X ogni file è accompagnato da un file nascosto con lo stesso nome,
ma preceduto da un punto. Questo contiene informazioni aggiuntive che permettono al sistema
operativo di tenere traccia di quale sia stata l'ultima applicazione che ha elaborato il file, e quindi di
usarla nuovamente per l'interpretazione (senza l'obbligo che i file dello stesso tipo condividano la
stessa applicazione predefinita).
Magic number: Un sistema più robusto dei precedenti perchè indipendente dal nome del file o da
altri file collaterali (informazioni che si perdono facilmente) prevede l'utilizzo di dati addizionali
salvati in testa al file (chiamate header o intestazione), e di convenzioni per interpretare tali dati.
Questo metodo era utilizzato in sistemi UNIX, ma è in uso ancora oggi da parte di applicazioni
specifiche. Una volta eseguita l'applicazione più adatta (secondo uno dei metodi precedenti) ad
aprire ad esempio un'immagine con estensione ".tif", questa riconosce che il tipo di contenitore sia
effettivamente TIFF grazie ad un codice salvato nei primissimi byte del file (in questo caso "4D 4D
00 2A"). Ogni tipo di file inoltre comprende nell'header anche informazioni circa la codifica
utilizzata (che nel caso di un TIFF lossy o lossless, con indicazioni anche sulle dimensioni
dell'immagine, la risoluzione e il profilo colore).
In meno di 60 anni l'informatica ha cambiato il mondo. Questa ondata di novità ha aperto molte
possibilità e ha migliorato la vita di molte persone, ma si è abbattuta sulla società ad una velocità
superiore alla sua capacità di adattamento, esponendo quindi la popolazione a rischi notevoli,
specialmente per chi non ha una alfabetizzazione informatica. Che piaccia o meno, conoscere le
dinamiche dell'informatica è ormai necessario per mantenere gli standard a cui si è abituati senza
incorrere nei possibili rischi.
Uno dei rischi più grandi per la società è proprio quello di dipendere da sistemi così
complessi senza conoscerli: da un lato diventa difficile interpretarne il comportamento e si tende a
pensarli come un oracolo infallibile (quando invece sono fallibili, in quanto prodotto umano),
dall'altro perchè la complessità comporta una certa difficoltà di manutenzione, e dipendere da
qualcosa che non si sa riparare è un rischio notevole, che trasforma la tecnologia in una
vulnerabilità.
Un ulteriore rischio è quello del sovraccarico cognitivo (o information overload). Fenomeno che di
per sé è sempre esistito, ma che ha avuto un grande impatto con l'avvento dell'informatica e di
Internet. Si tratta di un disturbo che si manifesta quando si ricevono troppe informazioni, rendendo
impossibile prendere decisioni o riuscire a concentrarsi su una singola informazione.
Nel contesto dell'informatica, si parla di information overload in due circostanze: nel piccolo può
essere causato da interfacce grafiche o siti web mal progettati, che inibiscono la capacità di
discernere ciò che è importante da ciò che non lo è per via della mole di dati e del modo in cui le
informazioni sono presentate. Esiste però anche una dimensione patologica del fenomeno,
condizione in cui l'utente passa il tempo navigando compulsivamente da un sito all'altro o scorrendo
la pagina di un social network, cercando informazioni sempre più complete o aggiornate, non
riuscendo a fermarsi o a ricordarne alcuna, provando un iniziale ed effimero senso di piacere alla
comparsa di nuove informazioni, che però lascia subito il posto al bisogno di ulteriori
aggiornamenti, ricerca che viene percepita come un dovere o una necessità.
In sintesi, il calcolatore (in ogni sua forma) ha davvero una funzione strategica, e per questo
l'infrastruttura va difesa, ma senza che vengano minate la libertà e la privacy dei singoli (ad
esempio a seguito dell'introduzione di politiche di priorità di alcuni dati rispetto ad altri, che
comprometterebbero la neutralità della rete senza che sussista alcuna ragione tecnica). A loro volta,
però, gli utenti hanno responsabilità legate alla sicurezza del sistema e alla diffusione delle
informazioni.
Quella corrente è definita da alcuni come l'epoca del capitalismo cognitivo, dove ciò che ha valore
sono le idee e i beni immateriali (come i dati) più che i prodotti materiali. In questo contesto vale la
pena chiedersi cosa si possa celare dietro ad un servizio gratuito come un social network, un
servizio di messaggistica o un motore di ricerca.
Per i servizi di questo tipo, caratterizzati dalla possibilità di caricare contenuti propri (dati personali
e non), i dati stessi costituiscono la forma di pagamento per il servizio ricevuto. Nella maggior parte
dei casi, infatti, chi offre il servizio monetizza il suo investimento attraverso
la profilazione dell'utente (sotto l'esplicito consenso dell'utente stesso, fornito al momento della
registrazione). Per profilazione si intende la raccolta di informazioni al fine di suddividere l'utenza
in categorie di comportamento.
I fornitori di servizi possono fare un triplice uso dei dati in loro possesso, e ognuno di questi usi
nasconde potenziali insidie:
• Utilizzo dei dati per la scelta di contenuti personalizzati: il fornitore di servizi (attraverso
opportuni algoritmi) può presentare all'utente contenuti conformi a quelli che sono i suoi
interessi e le sue opinioni analizzando la cronologia delle ricerche, le condivisioni sui social
network o ciò che scrive nei servizi di messaggistica. Per quanto apparentemente utile,
questo può portare all'involontario offuscamento di contenuti contrari al suo sentire,
creando di fatto una bolla nella quale tutto sembra confermare il suo punto di vista,
allontanandolo da una corretta percezione della realtà.
• Vendita a terze parti di servizi basati sui dati di un utente: un fornitore di servizi può
vendere a terze parti spazi pubblicitari personalizzati, dedicati cioè ad una specifica
categoria di utenti. Sebbene possa fare piacere non vedere pubblicità completamente casuali,
le preferenze di un utente permettono di evincere quale sia la sua personalità. Inserzionisti
malevoli interessati alla manipolazione dell'opinione pubblica potrebbero confezionare
contenuti e pubblicità adatti a cambiare la percezione di un tema politico o sociale.
• Vendita dei dati a terze parti: i dati raccolti da un fornitore di servizi possono infine essere
venduti a terze parti per scopi di indagine, ad esempio per progettare nuovi prodotti in linea
con i desideri dei possibili acquirenti. Tuttavia, una volta che i dati sono in possesso di altri
non è sempre facile capire l'uso che ne sarà fatto. Emblematico è il caso di Cambridge
Analitica, che sfruttando la raccolta illegale di dati di milioni di utenti ha estratto il profilo
psicologico di tutti coloro fossero indecisi riguardo alle preferenze di voto, ed in seguito,
mediante pubblicità mirate (si veda il punto precedente), ha influenzato l'opinione pubblica
cambiando le sorti di almeno due importanti votazioni del biennio 2016-2017, ingerendo
così sugli equilibri geopolitici degli anni successivi.
Va infine sottolineato che ogni tipo di azione svolta online (visitare un sito web, mandare un
messaggio, cercare qualcosa, ecc) lascia sempre tracce, sia sul proprio dispositivo sia in rete. Casi
di utilizzi malevoli di queste tracce non sono rari, e per difendersi (almeno in parte) da questo tipo
di pericoli si possono adottare soluzioni basate su:
Quello della manipolazione dell'opinione pubblica attraverso internet è un tema molto importante,
tanto da essere oggetto di studio da parte della NATO. Unitamente al resto delle infrastrutture
tecnologiche nel loro insieme, è considerato dagli eserciti nazionali alla stregua di un vero e proprio
campo di battaglia (insieme a terra, mare, aria e spazio). Le operazioni tattiche svolte in questo
dominio vengono perpetrate (da forze armate, governi, o semplici privati) attraverso un
monitoraggio estensivo della rete e la diffusione di: notizie falsificate (fake news); notizie reali
presentate in modo tendenzioso; condivisione di contenuti originali da parte di account fasulli (fake
account). Il tutto confezionato ad arte per manipolare l'opinione pubblica.
Un esempio lampante riguarda le violenze nel Myanmar del 2016, in cui è stata documentata
un'attività di propaganda basata su fake news e utilizzo di fake account, diffusa attraverso i social
network da parte dell'esercito di regime, che ha portato ad atti di violenza ai danni della minoranza
musulmana Rohingya, tanto da essere classificata come genocidio dal Commissariato delle Nazioni
Unite per i Diritti Umani.
A complicare la situazione si consideri poi che, oltre a quello ideologico, ci può essere un secondo
movente per la diffusione di fake news: quello economico. Alcuni social network infatti permettono
all'utente di guadagnare denaro attraverso la pubblicità mostrata contestualmente alla fruizione di
un suo contenuto. Alcuni soggetti sfruttano questo meccanismo di monetizzazione creando
contenuti estremamente virali per massimizzarne la diffusione, e quindi il guadagno. Una delle
caratteristiche che può rendere virale un contenuto è proprio la sua capacità di polarizzare l'opinione
pubblica, facendo leva su temi controversi e divisivi. Spesso fake news indistinguibili da quelle
confezionate per fini ideologici rientrano in questa categoria.
Un esempio che spicca per creatività riguarda un'agenzia che diffondeva fake news riguardanti i
temi più disparati, e al tempo stesso gestiva un sito di debunking (demistificazione) che smontava
tutte le false notizie, garantendosi così un gran volume di condivisioni, sia da parte di chi credeva
alle fake news, sia da parte di chi condivideva le smentite. In questo caso il movente era economico,
ma il danno ideologico è stato ingente, perchè ha screditato l'importante operato di altri debunker,
onesti e appassionati.
Esistono infine fornitori di servizi illegali a cui spesso si appoggiano i soggetti interessati alla
diffusione di contenuti malevoli (sia per fini economici che ideologici) chiamati click farm. Queste
realtà forniscono in genere due tipi di prodotto: click e fake account. Nel primo caso si tratta di
centinaia di agenti (fisici e/o virtuali) che passano il tempo cliccando e visualizzando i contenuti del
cliente per aumentarne artificialmente il numero di interazioni con il pubblico, in modo da
ingannare gli algoritmi preposti al riconoscimento dell'interesse generale di un contenuto ed
aumentarne la diffusione. Nel secondo caso vengono venduti account di social network confezionati
su misura per impersonificare una specifica tipologia di persona, utilizzati come vettore per
influenzare l'opinione pubblica riguardo a temi specifici con commenti e provocazioni (troll).
Questi account sono confezionati così bene da sembrare reali: hanno una storia, foto, e una fitta rete
di amici. Spesso vengono creati partendo dal furto di credenziali di un vero account, motivo per cui
chiunque può essere una potenziale vittima del furto di credenziali.
Come forma di difesa dai fake account, molti social network stanno impiegando algoritmi in grado
di riconoscere i comportamenti inautentici, ma non si tratta di un compito facile: sebbene vengano
cancellati migliaia di account ogni giorno, molti riescono a superare le maglie di sicurezza.
Ogni volta che si vede una notizia condivisa da qualcuno bisognerebbe chiedersi se sia genuina o
meno, abituarsi ad essere scettici:
Inoltre ci possono essere anche indizi nel modo in cui l'informazione è presentata che suggeriscono
scarsa attendibilità:
• uso di click-bait (esche per i click): si tratta di tecniche usate nel giornalismo meno
professionale per spingere gli utenti a cliccare su un titolo; tra queste si citano: toni
sensazionalistici, domande nel titolo, presenza di elenchi (es. "10 cose che la scienza non
dice!");
• grande mole di pubblicità (che spesso rende difficile anche la fruizione del contenuto);
• errori grossolani nel testo e anomalie tipografiche;
• gli articoli sono privi di data, non sono firmati e non citano alcuna fonte ufficiale.
Tuttavia, se la fake news è ben confezionata, o se testate giornalistiche affidabili hanno creduto alla
notizia e l'hanno ridistribuita, questi segni potrebbero essere stati eliminati, a quel punto il fact
checking (cioè il lavoro di accertamento degli avvenimenti citati e dei dati usati in un testo o in un
discorso) è l'unico modo per capire se una news è genuina.
Esistono diversi blog e pagine di social network che si occupano di debunking e fact checking,
alcune delle quali riportano elenchi di pagine web associate alla insistente diffusione di fake news.
Come raccomandazione generale, è bene non diffondere notizie qualora si abbiano dubbi sulla
veridicità del contenuto.
Nella sfera personale, quando non si ha una grande dimestichezza con la fenomenologia del
linguaggio testuale e visuale di internet, i rischi che si incontrano più di frequente sono: le insistenti
pubblicità non richieste (Spam), i tentativi di truffa perpetrati per via telematica (Scam), e i tentativi
di furto di credenziali per mezzo di false comunicazioni ufficiali (Phishing).
Quasi tutti i sistemi di messaggistica e di posta elettronica oggi incorporano algoritmi anti-
spam/scam/phishing, tuttavia alcune minacce a volte riescono a superare questi controlli automatici,
è quindi bene imparare a riconoscerle. Elementi che possono suggerire la scarsa attendibilità di un
messaggio sono:
• il mittente è sconosciuto o (in caso di mittente noto) il contenuto è atipico per quel mittente;
• il messaggio fa leva su presunte vincite, risparmi, fatture, spedizioni, personaggi facoltosi o
attraenti e qualsiasi altro tipo di esca che stimoli la curiosità;
• si riscontrano errori grossolani nel testo e anomalie tipografiche;
• i collegamenti presenti nel messaggio non portano dove dovrebbero (link sui quali è bene
non cliccare mai);
• sono presenti allegati sospetti e non richiesti.
Figura 5.1: Quando fermiamo il puntatore su un link senza cliccare, solitamente nella parte bassa
dello schermo vediamo l'indirizzo della pagina di destinazione
L'interesse nel garantire la confidenzialità dei dati può essere quello ovvio del segreto industriale (o
simili), ma anche un più generico concetto di privacy e di protezione della persona dai rischi della
manipolazione dell'opinione o dal furto di dati come password o numeri di carte di credito. Inoltre
impedire l'accesso di estranei al proprio dispositivo è essenziale affinché questi non usino il
calcolatore come tramite (schiavo) per perpetrare ulteriori attacchi a terzi.
Perdere l'integrità dei dati significa che alcuni di questi hanno subito una modifica accidentale o
malevola, diventando quindi non affidabili. Scenari tipici sono: non sapere che i dati hanno perso
integrità (si pensi ad esempio ad un elenco in cui sono state contraffatte alcune voci) o
l'eliminazione di alcuni dati in seguito ad un guasto.
La disponibilità dei dati infine è necessaria per poterli usare. E' inutile avere dati integri e ben
protetti se non vi si può accedere. Anche in questo caso è possibile perdere l'accesso in modo
involontario o in modo doloso. La disponibilità dei dati è inoltre necessaria perchè un software
possa svolgere le funzioni cui è preposto.
I modi in cui confidenzialità, integrità e disponibilità possono essere messe a rischio sono
innumerevoli, tanto che, in maniera semiseria, si definisce sicuro un sistema solo quando
l'amministratore è soddisfatto del suo lavoro. Si tratta cioè di una misura soggettiva, perché da un
punto di vista oggettivo non è possibile garantire la sicurezza totale.
Infine, vista la confusione che a volte si riscontra su questo tema, vale la pena definire le due figure
che spesso si associano al concetto di "violazione della sicurezza". In informatica si
definiscono Cracker (o pirati informatici) coloro che si introducono in reti di calcolatori senza
autorizzazione allo scopo di danneggiare il sistema informatico (per motivi ideologici, economici o
politici). Si definiscono invece Hacker gli operatori molto esperti, che amano esplorare qualsiasi
tipo di sistema informatico, sperimentando nuovi usi delle tecnologie, senza mai nuocere
intenzionalmente. Questi ultimi sono caratterizzati da una particolare cultura ed etica, ed in genere è
grazie a questi che le vulnerabilità vengono scoperte e corrette.
I fattori di rischio
Da un lato la sfida della sicurezza si gioca sul campo delle tecnologie, ma non è da sottovalutare
anche il lato umano.
Per quanto riguarda le tecnologie, si adottano contromisure per combattere i tentativi di infrazione
per mano di malintenzionati. Questi possono agire sfruttando la rete da una posizione remota
(sfruttando anche il lavoro di altri calcolatori di cui hanno preso il controllo) o per mano mediata
da software malevoli (malware) come virus, trojan, worm, spyware, ransomware e altre categorie
di programmi che in un modo o nell'altro compromettono la sicurezza del sistema.
I software malevoli possono essere distribuiti in modi diversi: inviati via mail, scaricati
inavvertitamente da internet, installati credendo che siano un altro software. La principale linea di
difesa verso queste minacce è il software storicamente chiamato antivirus (in realtà i sistemi
moderni, detti di protezione degli endpoint, funzionano in modo diverso dai vecchi antivirus
propriamente detti).
Gli attacchi remoti invece fanno leva su vulnerabilità del sistema, difetti del software o
dell'hardware che sono sfuggiti al controllo degli sviluppatori, non necessariamente per
incompetenza, ma per l'intrinseca complessità del sistema nel suo insieme.
Per evitare che si possano sfruttare le vulnerabilità del sistema, i prodotti commerciali segretano il
loro codice sorgente confidando nella difficoltà di trovare falle semplicemente leggendo il codice
macchina (sicurezza tramite segretezza). Tuttavia il segreto come unica forma di protezione è
decisamente inaffidabile, il modello di software open source ad esempio opera all'opposto:
attraverso la divulgazione del codice sorgente chiunque può controllare se vi siano problemi di
sicurezza, inoltre è possibile accertare che il programma sia privo di malware nascosto al suo
interno.
L'altro lato del problema della sicurezza informatica è il fattore umano. Di fatto, quest'ultimo
aspetto causa più danni nella sicurezza del fattore tecnologico. Sono le persone infatti il sistema più
facile da penetrare: password deboli, magari svelate ad un amico in luoghi pubblici; convinzione di
non essere obiettivi interessanti per un attacco malevolo; installazione di software dalla dubbia
provenienza; apertura di mail chiaramente sospette; nessun backup. Questi sono solo alcuni dei
comportamenti che mettono a rischio la sicurezza di intere aziende o anche solo del proprio
dispositivo personale. Tutti i tentativi di circuizione degli utenti ricadono nella categoria del social
engineering (ingegneria sociale), una delle tecniche più usate dai pirati informatici.
Per proteggere la confidenzialità dei dati, esistono tecnologie come la cifratura dei dati. Queste
tecnologie sono sempre più diffuse ed efficaci, ma fanno leva sul fatto che gli utenti imparino a
considerare le loro password come qualcosa di molto importante. Ci sono tecnologie alternative al
basare la sicurezza su informazioni che l'utente sa, come fare leva su oggetti che l'utente ha con sé
(ad esempio le chiavi OTP - one time password, o i codici di verifica ricevuti sullo smartphone), per
arrivare fino alla lettura di proprietà biometriche come le impronte digitali, che fanno leva su ciò
che l'utente è.
Per proteggere l'integrità dei dati da manomissioni il modo migliore rimane quello delle copie di
sicurezza (backup). I backup possono essere fatti su dispositivi di archiviazione di massa di nostra
proprietà o su spazi di archiviazione remoti. Una tecnologia che permette di controllare l'integrità
dei dati è l'hashing, ossia la creazione di un codice di verifica molto piccolo, che però dipenda dalla
totalità dei dati di interesse: se i dati cambiano, anche solo di una piccola quantità, l'hash cambierà
di conseguenza, dando la possibilità all'utente di accorgersi che l'integrità rispetto ad un hash di
riferimento è stata persa.
La disponibilità dei dati può essere compromessa da diversi fattori: ransomware che criptano la
memoria chiedendo un riscatto per decifrarla; tecnologie di memorizzazione o di codifica obsolete e
non più supportate; connettività assente; permessi negati; sovraccarico dei server. Ognuna di queste
cause prevede una sua tecnologia di prevenzione, ma (come per l'integrità) non per tutte esiste la
possibilità di correzione del problema una volta che si manifesta.
Infine, il modo migliore per proteggersi dalle vulnerabilità del software rimane quello di tenere il
software aggiornato, in modo che possano essere corrette le vulnerabilità appena vengono trovate, e
(per le aziende) di affidarsi a dei professionisti per lo sviluppo e la gestione dell'infrastruttura
tecnologica, anche se apparentemente meno economici.
Con il nome di Sistema Informativo Sanitario (SIS) si intende il patrimonio informativo che ha
permesso, in ambito sanitario, di fotografare periodicamente attività, costi e risorse del Servizio
Sanitario Nazionale (SSN) italiano, attraverso flussi sistematici di dati provenienti dalle aziende
sanitarie e ospedaliere delle diverse regioni.
Nell’anno 2005 è nato il progetto chiamato Nuovo Sistema Informativo Sanitario (NSIS) in quanto
è emersa la necessità di costruire una base dati nazionale, condivisa con le regioni, all’interno della
quale collocare tutte le informazioni necessarie al bilanciamento tra qualità e costi del sistema
sanitario.
L’elemento chiave su cui si sviluppa il NSIS è rappresentato dal sistema di informazioni sanitarie
individuali che, raccogliendo i dati riguardanti le prestazioni sanitarie erogate al singolo cittadino,
consente di disporre degli elementi di base per esaminare l’appropriatezza della domanda, la
mobilità sanitaria, i tempi di attesa dei cittadini, i costi generati per livello di assistenza, ecc.
La realizzazione di un sistema nazionale di informazioni sanitarie individuali richiede:
• l’esistenza di uno strumento che consenta l’identificazione certa e univoca dei cittadini su
tutto il territorio nazionale; necessità che viene affrontata dal progetto “tessera sanitaria”,
che prevede la realizzazione di un’anagrafe sanitaria unitaria, basata sul codice fiscale di un
individuo come chiave unica di identificazione;
• la piena condivisione di un sistema di classificazioni, codifiche e metodologie di misura che
costituiscono il livello “semantico” del sistema informativo.
Altro elemento fondamentale per lo sviluppo del NSIS è rappresentato dal Monitoraggio delle rete
di assistenza, che consente di censire le strutture ospedaliere e territoriali.
Il modello concettuale del NSIS è costituito da un insieme di elementi costitutivi che corrispondono
ad altrettante fonti originatrici di informazioni (vedi Figura 6.1).
Il Codice della Privacy ([Link]. 196/2003) comprende tra i dati sensibili quei dati personali idonei a
rivelare lo stato di salute di un individuo. In questo caso, il trattamento è consentito solo ed
esclusivamente se è autorizzato da una legge, che specifichi quali sono i dati trattabili e le
operazioni eseguibili, nonché le rilevanti finalità di interesse pubblico che si intendono perseguire.
Al cittadino che entra in contatto con le strutture sanitarie per diagnosi, cure, prestazioni mediche,
operazioni amministrative, deve essere garantita la più assoluta riservatezza e il più ampio rispetto
dei suoi diritti fondamentali e della sua dignità.
Il Codice della Privacy individua le misure minime di sicurezza che tutti i titolari del trattamento,
siano essi soggetti privati o pubblici, devono adottare. I dati personali oggetto del trattamento
devono essere custoditi in modo da ridurre al minimo i rischi di distruzione o perdita, anche
accidentale, nonché di accesso non autorizzato o di trattamento non consentito e non conforme alle
finalità di raccolta.
A tale scopo devono essere predisposte tutte le idonee misure di sicurezza in relazione alle
conoscenze acquisite in base al progresso tecnico, alla natura dei dati e alle specifiche
caratteristiche del trattamento.
Attualmente in un ospedale sono presenti tre tipologie di sistema informativo sanitario (vedi Figura
6.2):
Di particolare interesse in questo caso è il sistema PACS, componente del sistema RIS, in quanto
l’ambito radiologico è il settore nel quale si fa maggiormente uso di tecnologie avanzate e nel quale
l’informatica occupa un posto di primo piano.
L’importanza e le problematiche del trattamento delle immagini hanno contribuito, fin dagli anni
‘80, a delineare il concetto di PACS come sistema integrato per la gestione digitale delle immagini
diagnostiche, finalizzato all’eliminazione delle pellicole radiografiche.
Le motivazioni che hanno portato alla definizione di questo Sistema Informativo sono le seguenti:
Per raggiungere questi scopi l’architettura del sistema PACS è basata su una rete in grado di
connettere le apparecchiature di acquisizione delle immagini, le stazioni di visualizzazione e i
dispositivi di archiviazione. La maggior parte dei sistemi RIS/PACS presenti sul mercato seguono il
modello client/server, un sistema centralizzato dove l’elaborazione avviene su macchine
dette server e la fruizione avviene su macchine più semplici dette client. Lacomunicazione verso i
client avviene attraverso protocolli standard.
Le banche dati (o database) sono uno strumento ampiamente utilizzato anche in ambito medico,
biomedico e sanitario. In genere, si tratta di grandi archivi di informazioni dotati di opportune
funzionalità di ricerca che consentono agli utenti di fruire i contenuti di interesse in modo rapido e
funzionale. Le principali banche dati in ambito medico sono online, cioè dispongono di
un’interfaccia web che permetti agli utenti, siano essi soggetti comuni o professionisti del settore, di
accedere alle funzionalità di ricerca e quindi ai contenuti mediante una qualsiasi connessione
Internet. Si parla di banca dati ad accesso libero (open access) quando i contenuti sono fruibili da
qualsiasi utente senza necessità di autenticazione, mentre si parla di banca dati ad accesso
protetto quando è necessario specificare delle credenziali di accesso o sottoscrivere un
abbonamento (talvolta a pagamento) per poter fruire i contenuti della banca dati.
Tra le numerose banche dati in ambito medico si possono citare: MEDLINE, una banca dati che
raccoglie una grande varietà di pubblicazioni biomediche relative a diverse
specializzazioni; Cinahl, la banca dati sulle discipline infermieristiche e le professioni
sanitarie; PsycINFO, la banca dati nel campo della psicologia e discipline collegate; il Veterinary
Science Database, che raccoglie dati relativi agli aspetti della medicina veterinaria o
l’italiana VDA Net, ovvero la Banca Dati Sanitaria Farmaceutica.
La ricerca di pubblicazioni
La ricerca di pubblicazioni mediche può essere svolta mediante motori di ricerca appositi, che
permettono di inserire come chiavi di ricerca diversi elementi, come l'anno di pubblicazione, il
nome di uno o più autori, o semplici parole chiave relative al tema di interesse. In genere le basi di
dati citate in precedenza hanno un motore di ricerca interno, ma esistono anche motori in grado di
cercare in più basidi dati contemporaneamente.
Il motore di ricerca più noto in medicina (che si appoggia principalmente sulla base di dati
MEDLINE) è PubMed. Esistono poi motori che coprono più basi di dati come Ovid (richiede che
l'istituzione per cui si lavora abbia delle credenziali di accesso) e motori come Web of
Science, Science Direct, Scopus e Google Scholar, che sono strumenti di uso più generale (non solo
medico), che si appoggiano a moltissime basi di dati.
Tra i risultati delle ricerche possono comparire sia pubblicazioni open access che a pagamento. Le
prime saranno subito disponibili per la lettura, mentre per le seconde prevedono il pagamento di un
abbonamento alla rivista o relativamente al solo documento di interesse. Si tenga però presente che
molto spesso le grandi istituzioni hanno delle convenzioni con gli editori, è quindi possibile che
anche le pubblicazioni a pagamento possano essere accessibili liberamente se sussistono queste
convenzioni.
La telemedicina
I primi esperimenti di telemedicina sono stati condotti per permettere un’adeguata assistenza nelle
aree geografiche più remote o in situazioni disagiate come ad esempio perforazioni petrolifere su
piattaforma off-shore e spedizioni artiche o spaziali.
La telemedicina in Italia
L’obiettivo della telemedicina in Italia è quello di realizzare un sistema efficiente che consenta di
affrontare i problemi della medicina d’urgenza e che offra gli strumenti per permettere un
decentramento territoriale delle competenze specialistiche previsto dalla Legge 833/78, istitutiva del
Servizio Sanitario Nazionale.
La possibilità di applicare soluzioni e servizi basati sulle tecnologie telematiche all’ambito sanitario
ha permesso la creazione di soluzioni nuove ad esigenze e problematiche finora irrisolte. Nello
specifico rende possibile la creazione di Sistemi di Telemedicina per:
• la medicina d’urgenza (es. Telecardiologia, Primo e Pronto Soccorso, Centrali operative del
118, Elisoccorso, ecc.);
• espandere territorialmente l’utilizzo sistematico delle competenze specialistiche, per una
migliore distribuzione qualitativa dell’assistenza sanitaria ed un migliore rapporto
costi/prestazioni (es. Televideoconsultazione ospedaliera, Telecardiologia ospedaliera,
Teledialisi ospedaliera, ecc.);
• effettuare monitoraggi nell’ambito domiciliare (es. Telemonitoraggio cardiaco, dialitico,
delle gestanti, Home Care, ecc.);
• l’impiego ottimale nel sistema sanitario dell’informatica distribuita (terminali e mezzi
elaborativi) allo scopo di migliorare i servizi e ridurre le spese di gestione (es. Centri CUP
per prenotazione esami, creazione di archivi specialistici per diagnosi integrate, ecc.);
• la didattica (es. Teledidattica, Videochirurgia/Telechirurgia, trasmissione tra reparti
ospedalieri ed Università e tra Istituti universitari, gestione di Banche Dati, ecc.);
• la diffusione telematica dell’informazione verso i cittadini (es. lo Sportello del Cittadino,
Customer Care - Call Center con Numero Verde, ecc.).
F. FOGLI DI CALCOLO
F1 - FOGLI DI CALCOLO
Un foglio di calcolo, detto anche foglio elettronico o spreadsheet in lingua inglese, è un programma
applicativo di produttività personale. Operando su dati organizzati in una griglia di celle, esso offre
strumenti di elaborazione e automazione del calcolo, quali ad esempio l’inserimento di funzioni
predefinite, la definizione di formule personalizzate e la produzione di grafici e diagrammi.
Esistono molti esempi di fogli di calcolo. A partire da VisiCalc (1978), che è considerato il primo
programma di questo tipo, passando per Lotus-1-2-3 (1983), che è stato il primo foglio di calcolo di
grande successo commerciale, si arriva ai più recenti e diffusi Microsoft Excel e OpenOffice Calc.
Nelle prossime pagine, si presenteranno i principali aspetti che caratterizzano i fogli di calcolo e,
dove necessario, si farà riferimento allo strumento Microsoft Excel (in seguito denominato
semplicemente Excel) per illustrare nozioni e esempi. Tuttavia, si precisa che tali contenuti sono
facilmente applicabili a tutti i principali fogli di calcolo oggi disponibili.
Un foglio di calcolo si presenta come una griglia di celle, ciascuna risultante dall’intersezione di
una riga e una colonna. Convenzionalmente, le colonne e le righe di un foglio di calcolo sono
identificate rispettivamente da un indice progressivo alfabetico (A, B, …) e da uno numerico (1, 2,
…). Ne consegue che ogni cella possiede coordinate univoche rappresentate dalla combinazione
degli indici di colonna e riga che la determinano. Ad esempio, nella Figura 1.1 è rappresentata una
porzione di foglio di calcolo in cui è stata selezionata la cella B4.
In un foglio di calcolo, esiste sempre almeno una cella selezionata che indica la posizione corrente.
La cella selezionata è evidenziata mediante una bordatura più marcata rispetto a quella delle altre
celle. Inoltre, essa è dotata di un quadratino sporgente nell’angolo in basso a destra
chiamato maniglia di riempimento che, come spiegato in seguito, consente di accedere a
particolari funzionalità legate al riempimento automatico di celle e al trascinamento di formule.
Nell’esempio della Figura 1.1, è possibile notare la maniglia di riempimento della cella selezionata.
Sopra alla griglia delle celle, il foglio di calcolo mostra la barra della formula (fx), che visualizza
il contenuto della cella correntemente selezionata. Nell’esempio della Figura 1.1, la barra della
formula è vuota dal momento che la cella B4 selezionata non ha alcun contenuto.
Inserimento di dati
Una cella di un foglio di calcolo può ospitare tre diverse tipologie di contenuto: valori testuali, cioè
una sequenza di caratteri alfanumerici (anche denominata stringa di testo); valori numerici, cioè
una sequenza di cifre; formule, cioè espressioni di calcolo che consentono di eseguire operazioni
riferendosi (in generale) al contenuto di altre celle.
Una formula può essere composta manualmente utilizzando i consueti operatori aritmetici di somma
(+), sottrazione (-), prodotto (*), divisione (/) ed elevamento a potenza (^). A questi, si aggiunge la
possibilità di costruire una formula utilizzando, anche in modo combinato, le funzioni predefinite
che il foglio di calcolo mette a disposizione per eseguire calcoli complessi. Una formula ha sempre
inizio con il simbolo di uguaglianza (=), al quale segue l’espressione della formula da calcolare.
Una volta completato l’inserimento della formula (ad esempio premendo il tasto Invio sulla tastiera
o un apposito pulsante nell'interfaccia), la cella mostra il risultato calcolato mediante l’espressione
inserita. Selezionando una cella che contiene una formula, l’espressione corrispondente è
visualizzata nella barra della formula.
Un esempio di inserimento di dati in un foglio di calcolo è mostrato nella Figura 1.2 dove:
In particolare, si noti che la cella B4 visualizza il risultato della somma delle celle B1 e B2. Essendo
la cella selezionata, l’espressione aritmetica calcolata in B4 è mostrata nella barra della formula
sopra la griglia di celle.
Si noti che nel caso di giorni della settimana o di mesi dell'anno è sufficiente evidenziare una cella,
mentre nel caso di valori numerici ne vanno selezionate (almeno) due, il che consente al programma
di calcolare la ragione della progressione. Tale caratteristica e può essere sfruttata per replicare i
valori di una cella o per creare progressioni di natura differente.
Ad esempio, se l'operazione venisse invocata su una singola cella contenente il valore 0, questo
verrebbe replicato su tutte le celle consecutive, così come se il contenuto fosse il valore 1, il
carattere a o la stringa pippo. Se invece le celle oggetto di selezione e trascinamento fossero due e
contenessero i valori 1 e 3, il programma riempirebbe le celle successive con 5, 7, ecc. Va
sottolineato che questo comportamento è tipico dei valori numerici: se i valori fossero invece a e b,
il programma, anziché portare avanti la sequenza alfabetica con c, d, ecc., applicherebbe il criterio
di replicazione, compilando le celle successive con a, b, a, b, e via dicendo.
Inizialmente, le colonne e le righe di un foglio di calcolo sono impostate alla medesima dimensione,
creando l’effetto di una griglia omogenea di celle tra loro identiche. La larghezza di ogni colonna e
l’altezza di ogni riga, possono essere modificate in base al contenuto da ospitare. È possibile
modificare la larghezza di una colonna o l'altezza di una riga utilizzando il dispositivo di
puntamento (mouse), come mostrato nell'esempio della Figura 1.4 per la colonna A. Se questa
operazione viene compiuta avendo evidenziato più colonne o più righe, il dimensionamento viene
applicato a tutti gli elementi della selezione.
È bene notare che la griglia di un foglio di calcolo deve sempre possedere una struttura regolare,
quindi non è possibile modificare la dimensione in larghezza o altezza di una singola cella.
Nell’esempio della Figura 1.2, la larghezza della colonna A e l’altezza delle righe 1 e 2 sono state
incrementate per ottenere una migliore disposizione del testo nelle celle A1 e A2.
Formattazione di celle
I fogli di calcolo mettono a disposizione numerose funzionalità di formattazione delle celle e del
loro contenuto. Tali funzionalità possono essere suddivise nelle seguenti categorie:
Nell’esempio della Figura 1.2, si noti la disposizione su due righe del testo contenuto nelle celle A1
e A2 ottenuta mediante la corrispondente opzione di formato allineamento. Inoltre, si noti che le
celle B1, B2, B4 sono state impostate al formato numerico di valuta. Questo comporta la
visualizzazione del simbolo della divisa Euro (€) e del separatore delle migliaia accanto ai valori
numerici contenuti nelle celle.
Consideriamo il foglio di calcolo riportato nella Figura 1.5, che sarà utilizzato come esempio di
riferimento nelle prossime unità di contenuto. Il foglio mostra un report trimestrale con gli importi
complessivi delle prestazioni mediche erogate da un ipotetico laboratorio di analisi.
In questo esempio, sono state applicate varie opzioni di formattazione. In particolare, è stata
aumentata la dimensione del font del testo (righe 1 e 2), è stato applicato lo stile grassetto (celle A1,
A2, A4, B4, C4 e D4) ed è stata modificata la larghezza delle colonne (colonna A) e l’altezza delle
righe (righe 5, 6, 7, 8, 9). Inoltre, è stato impostato il formato valuta per le celle che contengono gli
importi delle prestazioni (celle nell’intervallo B5:D9).
A seconda della lunghezza del testo inserito, può capitare che il contenuto di una cella occupi
visivamente lo spazio delle celle attigue. Nell’esempio di Figura 1.5, questo avviene per le celle A1
e A2, che occupano rispettivamente parzialmente lo spazio della cella B1 e delle celle B2 e C2. In
questi casi, si ricordi che, nonostante la visualizzazione possa trarre in inganno, il testo è
interamente contenuto nelle celle A1 e A2 mentre le celle B1, B2 e C2 sono vuote.
Infine, si noti che nelle celle dell’intervallo B5:D9 sono stati inseriti esclusivamente i valori
numerici degli importi. Il simbolo di divisa e il separatore delle migliaia sono effetti di
visualizzazione derivanti dall’applicazione del formato valuta, ma non incidono sul contenuto delle
celle. Ad esempio, nella Figura 1.5, si osservi come alla visualizzazione di € 70.000 della cella D9
corrisponda il valore numerico 70000 mostrato nella barra della formula.
Tipologie di funzione
Il foglio di calcolo mette a disposizione numerose funzioni predefinite in grado di eseguire calcoli
complessi che richiederebbero altrimenti l’inserimento di formule lunghe e complicate.
Una funzione prevede uno o più argomenti racchiusi fra parentesi che indicano i valori o i
riferimenti alle celle da considerare per il calcolo della funzione.
La funzione SOMMA
La funzione SOMMA è una funzione matematica che permette di eseguire la somma dei valori
numerici contenuti in un intervallo di celle specificato. La sintassi della funzione è la seguente:
=SOMMA(num1;num2;…)
Nella formula, num1;num2;… sono i riferimenti alle celle contenenti i valori da sommare. In
alternativa, è possibile utilizzare una sintassi più sintetica con un unico argomento che rappresenta
un intervallo di celle. In questo caso, tutti i valori numerici contenuti nelle celle dell’intervallo
specificato saranno considerati nell’operazione di somma.
Con riferimento all’esempio della Figura 1.5, supponiamo di voler calcolare l’importo complessivo
delle prestazioni erogate nel mese di gennaio. A tal proposito, si inserisce nella cella B11 la
seguente formula:
=SOMMA (B5:B9)
In questo esempio, l’intervallo di celle B5:B9 costituisce l’unico argomento della funzione
SOMMA. La cella B11 visualizzerà l’importo di € 366.700, risultato dell’operazione di somma. Si
osservi che un intervallo di celle è espresso attraverso i riferimenti alle due celle poste alle estremità
dell'intervallo stesso, separati dal carattere ":" (due punti). Non è necessario che un intervallo si
espanda su un'unica riga o colonna; B5:E9 è un esempio di intervallo valido, e include tutte le celle
dalla colonna B alla colonna E il cui numero di riga sia compreso tra 5 e 9.
Dunque, la sintassi con il carattere due punti va utilizzata all'interno di un singolo argomento per
denotare un intervallo. Gli argomenti di una funzione, invece, sono separati dal carattere ";" (punto
e virgola).
Volendo calcolare l’importo complessivo delle prestazioni erogate nel trimestre dal laboratorio di
microbiologia degli alimenti, va inserita la seguente formula nella cella F5:
=SOMMA (B5:D5)
In questo caso, la cella F5 visualizzerà l’importo di € 456.000.
Si noti che il risultato prodotto dalla funzione SOMMA può essere ottenuto anche mediante
l’inserimento di una formula manuale in cui si utilizza l’operatore aritmetico di addizione (+)
concatenando i riferimenti alle celle contenenti gli addendi. Per esempio, la funzione
=SOMMA(B5:B9) è equivalente alla seguente formula inserita manualmente:
= B5+B6+B7+B8+B9
L’utilità della funzione SOMMA risulta evidente quando è necessario sommare i valori di un
intervallo di celle molto ampio. In questo caso, l’inserimento di una formula manuale è
sconsigliabile, poiché richiede l’inserimento di tutti i riferimenti alle celle che contengono i valori
da sommare.
Spesso, una formula deve essere invocata diverse volte in un foglio di calcolo, ma su intervalli di
celle differenti. La medesima situazione può accadere per una funzione. Ad esempio, nel foglio di
calcolo della Figura 1.5, volendo calcolare l’importo complessivo delle prestazioni rispetto a diversi
mesi o rispetto a diversi laboratori, andrebbe inserita la funzione SOMMA in varie celle del foglio,
specificando di volta in volta l’intervallo di celle opportuno su cui eseguire l’operazione.
Il foglio di calcolo offre una funzionalità di trascinamento di formule e funzioni che lavora in modo
analogo al riempimento automatico di celle. In particolare, mediante la maniglia di riempimento, è
possibile trascinare una cella che contiene una formula o una funzione copiandola da una cella di
origine a una cella di destinazione. Il trascinamento ha come effetto quello di traslare
automaticamente i riferimenti alle celle contenuti nella formula o funzione di un numero di
righe/colonne pari alla differenza tra le coordinate della cella di origine e quelle della cella di
destinazione.
Nell’esempio della Figura 1.5, la funzione SOMMA(B5:B9) contenuta nella cella B11 può essere
copiata mediante trascinamento nelle celle C11 e D11. Per effetto del trascinamento, l’argomento
della funzione SOMMA in C11 e D11 è traslato di una e due colonne, rispettivamente. Dunque, in
C11 avremo la funzione SOMMA(C5:C9) che calcola l’importo complessivo delle prestazioni
erogate in febbraio, mentre in D11 avremo la funzione SOMMA(D5:D9) che calcola l’analogo
importo per il mese di marzo. Questo risultato è osservabile nella Figura 2.1, dove la barra della
formula mostra la funzione contenuta nella cella D11 correntemente selezionata.
Allo stesso modo, la funzione SOMMA(B5:D5) della cella F5 può essere trascinata nelle celle
dell’intervallo F6:F9 per calcolare l’importo complessivo delle prestazione erogate nel trimestre dai
vari laboratori di analisi. L’effetto di questa operazione di trascinamento è anch'esso osservabile
nell’esempio della Figura 2.1.
Una caratteristica fondamentale dei fogli di calcolo è l’aggiornamento automatico dei risultati di
formule e funzioni quando il contenuto di una cella riferita subisce una modifica. Questo significa
che ogni volta che il contenuto di una cella viene cambiato, le formule e le funzioni presenti
all’interno del foglio di calcolo che lavorano su quella cella vengono automaticamente ricalcolate
per aggiornare il risultato.
Nell'esempio in Figura 1.5, si supponga di modificare l’importo delle prestazioni erogate dal
laboratorio di microbiologia degli alimenti nel mese di gennaio (cella B5). In particolare, si
sostituisca l’importo esistente (€ 123.000) con un nuovo importo pari a € 125.000.
Automaticamente, le somme calcolate nelle celle B11 e F5 sono aggiornate dal foglio di calcolo e
sono impostate al nuovo valore di € 368.700 e € 458.000, rispettivamente. I risultati delle altre
operazioni di somma rimangono invece invariati, dal momento che la cella B5 modificata non
rientra negli intervalli di celle considerati dalle formule nelle celle C11:D11 e F6:F9.
Negli esempi mostrati in precedenza, sono state utilizzate formule e funzioni contenenti riferimenti
relativi alle celle. Questo consente di fare in modo che, in caso di trascinamento della formula o
della funzione, i riferimenti siano automaticamente traslati. Tale comportamento può non essere
auspicabile quando, trascinando una formula, si vuole mantenere fisso il riferimento a una o più
celle. In questi casi, è necessario utilizzare nella formula o funzione un riferimento assoluto alle
celle per fare in modo che, durante l’operazione di trascinamento, tale riferimento resti invariato e
non subisca traslazione. Un riferimento assoluto è creato anteponendo il carattere $ alla coordinata
della cella che deve restare fissa durante l’operazione di trascinamento. Nell'inserire le coordinate di
una cella, è possibile combinare l’uso di riferimenti relativi e assoluti.
Si supponga di voler inserire in una formula o funzione il riferimento alla cella B5. Esistono quattro
possibilità:
Si consideri l’esempio in Figura 1.5. Si supponga che, in base a una disposizione interna, il centro
di analisi riceva ogni mese un premio pari a una percentuale fissata rispetto all'importo complessivo
delle prestazioni erogate in quel mese da parte di tutti i laboratori. Come mostrato nella Figura 2.3,
si inserisce nella cella B13 la percentuale da utilizzare per il calcolo del premio mensile, e nella
cella B14 la formula per calcolare l’importo effettivo del premio.
= B11 * $B$13
Calcolando la formula, l’importo del premio per il mese di Gennaio risulta pari a € 73.740. Per
calcolare l’importo del premio per i mesi di Febbraio e Marzo va trascinata la formula della cella
B14 rispettivamente nelle celle C14 e D14. Nella formula inserita, i riferimenti alla cella $B$13
sono assoluti. In questo caso, l’uso dei riferimenti assoluti è necessario poiché trascinando la
formula in C14 e D14 si desidera che i riferimenti alla cella $B$13 restino fissi e non siano traslati.
Al contrario, i riferimenti alla cella B11 sono relativi perché si vuole che siano traslati e che vadano
a considerare gli importi complessivi delle prestazioni per i mesi di Febbraio e Marzo (celle C11 e
D11, rispettivamente).
Come mostrato nella Figura 2.3, l’importo del premio per i mesi di Febbraio e Marzo è pari
rispettivamente a € 73.520 e € 88.880.
La funzione condizionale SE
La funzione condizionale SE è una funzione logica che consente di variare il contenuto di una cella
in base al verificarsi o meno di una condizione prefissata. La sintassi della funzione è la seguente:
=SE(test;se_vero;se_falso)
Il primo argomento è test, che esprime la condizione da verificare. Generalmente, test è costituito da
un’operazione di confronto aritmetico nel quale il contenuto di una cella è comparato con un valore
costante o con il contenuto di un’altra cella. Esempi di test sono B11>50 e F4=D7. L’esito di test è
un valore booleano; questo significa che il risultato di test può assumere soltanto due valori: VERO
o FALSO.
Il secondo argomento se_vero esprime la formula o funzione che deve essere eseguita nel caso in
cui test sia risultato VERO.
Il terzo argomento se_falso esprime la formula o funzione che deve essere eseguita
quando test produce un risultato FALSO.
Con riferimento all’esempio della Figura 2.3, si supponga che il premio mensile da destinare al
centro di analisi sia pari al 20% dell’importo complessivo delle prestazioni (premio minimo) se
queste sono inferiori a € 400.000, e sia pari al 30% (premio massimo) in caso contrario. In questo
caso, per calcolare l’importo del premio per il mese di Gennaio, va utilizzata la funzione SE
inserendo nella cella B16 la seguente formula:
=SE(B11<400000;B11*20%;B11*30%)
Per calcolare gli importi del premio per i mesi di Febbraio e Marzo è necessario trascinare la
formula nella cella B16 rispettivamente nelle celle C16 e D16.
Tanto la soglia di € 400.000 quanto le percentuali del 20% e 30% possono subire variazioni nel
tempo a seguito di cambiamenti nella politica di assegnazione dei premi. Per rendere l'esempio più
flessibile rispetto a questo genere di modifiche, si consideri l’esempio della Figura 2.4.
In questo esempio, la soglia e le percentuali per il calcolo del premio sono inserite rispettivamente
nelle celle B13, B14 e B15. La formula nella cella B16 che calcola l’importo del premio è la
seguente:
=SE(B11<$B$13;B11*$B$14;B11*$B$15)
In caso di variazioni alla soglia o alle percentuali, è sufficiente modificare il contenuto delle celle
B13, B14 e B15 per aggiornare l’importo dei premi mensili. Si noti l’uso di riferimenti assoluti per
consentire il corretto trascinamento della formula nelle celle C14 e D14.
Le funzioni statistiche
Una categoria di funzioni Excel particolarmente utile è quella delle funzioni statistiche. Essa
contiene numerose funzioni di utilizzo molto frequente sia per utenti generici sia per utenti esperti
con competenze professionali in materia statistica. Ad esempio, le funzioni che permettono di
eseguire conteggi e calcolare i principali indicatori statistici, come media, massimo e minimo,
risultano utili in numerosi contesti, ogni qualvolta si rende necessario derivare dati di sintesi a
partire da una certa serie dati. Si pensi a un ciclo di esperimenti medici in laboratorio, dove si vuole
calcolare e mettere in evidenza il comportamento medio e i picchi positivi/negativi di una serie
consecutiva di osservazioni.
Inoltre, le funzioni statistiche di Excel consentono di supportare l’utente in analisi statistiche più
avanzate quali modelli di regressione, analisi della varianza, test di ipotesi, stima di parametri e
calcolo di intervalli di confidenza. Si pensi alla divisione marketing di una azienda di vendite nella
quale l’analisi dei dati è fondamentale per eseguire valutazioni e stimare le linee di tendenza e le
previsioni di crescita.
Nel seguito, saranno illustrate e discusse le funzioni statistiche di Excel di utilità generale. Per una
trattazione più approfondita degli strumenti di analisi statistica nei fogli di calcolo si rimanda a
pubblicazioni specializzate.
Le funzioni statistiche MAX e MIN restituiscono rispettivamente il massimo e minimo dei valori
contenuti in un insieme di celle considerato. La sintassi delle funzioni è la seguente:
=MAX(num1;num2;…)
=MIN(num1;num2;…)
Si consideri l’esempio in Figura 3.1, nel quale sono mostrati i dati delle rilevazioni relative a tre test
di laboratorio nel periodo dal 01/09/2010 al 15/09/2010.
Per ognuno dei tre test si voglia calcolare mediante la funzione MAX il valore massimo rilevato nei
giorni in cui è stata eseguita l’osservazione (1-15/09/2010). Per quanto riguarda Test1, i dati rilevati
sono contenuti nelle celle B4:B18. Come mostrato nella barra della formula della Figura 3.1, la
funzione MAX inserita nella cella B20 è la seguente:
=MAX(B4:B18)
Il risultato è il valore 32. Per calcolare il valore massimo relativo a Test2 e Test3, si copia mediante
trascinamento la funzione in B20 rispettivamente nelle celle C20 e D20. I valori massimi delle
rilevazioni relative a Test2 e Test3 sono 35.8 e 33.9.
La funzione MIN ha sintassi identica a quella della funzione MAX. Nell’esempio della Figura 3.1, i
valori minimi rilevati per ciascuno dei tre test sono calcolati mediante la funzione MIN e i risultati
sono contenuti nelle celle B21:D21.
Nella determinazione del valore massimo e minimo, si tenga presente che MAX e MIN considerano
soltanto valori numerici, ignorando i valori logici o testuali eventualmente contenuti nell’intervallo
di celle considerato. Nell’esempio in Figura 3.1, si può notare che alcuni valori di rilevazione non
sono disponibili (celle C12 e C13) o non sono stati inseriti (cella C8). Questo non è un problema per
il calcolo delle funzioni MAX e MIN, in quanto il contenuto di queste celle viene semplicemente
ignorato.
La funzione statistica MEDIA restituisce la media aritmetica dei valori contenuti in un insieme di
celle. La sintassi della funzione MEDIA è la seguente:
=MEDIA(num1;num2;…)
Nella formula, num1;num2;… sono i riferimenti alle celle contenenti i valori da considerare. In
alternativa, è possibile utilizzare una sintassi più sintetica in cui la funzione MEDIA riceve un unico
argomento che rappresenta un intervallo di celle. In questo caso, verranno considerati i valori
numerici contenuti nelle celle dell’intervallo specificato.
Nell’esempio in Figura 3.1, si usa la funzione MEDIA per calcolare la media aritmetica delle
rilevazioni osservate sui tre test. Per Test1, la funzione MEDIA è inserita nella cella B22 come
segue:
=MEDIA(B4:B18)
Il risultato è il valore 30.32. Per calcolare la media aritmetica relativa a Test2 e Test3, si copia
mediante trascinamento la funzione in B22 rispettivamente nelle celle C22 e D22. I valori di media
delle rilevazioni relative a Test2 e Test3 risultano essere 33.67 e 33.32.
Come nel caso delle funzioni MAX e MIN, anche la funzione MEDIA considera soltanto valori
numerici, ignorando i valori logici o testuali eventualmente contenuti nell’intervallo di celle
considerato. Per questo motivo, nell’esempio della Figura 3.1, le celle C8, C12 e C13 sono ignorate
nel calcolo della funzione MEDIA.
Oltre alla funzione MEDIA, Excel metta a disposizione funzioni per il calcolo di altre tipologie di
media, come ad esempio la media armonica (ossia il reciproco della media aritmetica dei reciproci)
e la media geometrica (ossia, dati n termini, la radice n-esima del prodotto degli n valori). La
sintassi delle funzioni che implementano tali tipologie di media è la seguente:
=[Link](num1;num2;…)
=[Link](num1;num2;…)
Nelle formule, num1;num2;… sono i riferimenti alle celle contenenti i valori da considerare. In analogia con
la funzione MEDIA, è possibile specificare un intervallo di celle come unico argomento delle funzioni
[Link] e [Link].
Le funzione statistica [Link] esegue il conteggio delle celle che contengono un valore
numerico considerando un insieme di celle specificato. La sintassi della funzione
[Link] è la seguente:
=[Link](val1;val2;…)
Nella formula, val1;val2;… sono i riferimenti alle celle contenenti i valori da considerare. In
alternativa, è possibile specificare un intervallo di celle come unico argomento della funzione
[Link]. La funzione [Link] considera soltanto valori numerici, ignorando i
valori logici o testuali eventualmente contenuti nell’intervallo di celle considerato.
=[Link](B4:B18)
Come mostrato nella Figura 3.2, il risultato di questo conteggio è il valore 15.
Per eseguire il medesimo conteggio su Test2 e Test3, si copia mediante trascinamento la funzione in
B23 rispettivamente nelle celle C23 e D23. Il conteggio per Test2 restituisce il valore 12 dal
momento che le celle C8, C12 e C13 contengono valori non numerici e sono quindi ignorate. Il
conteggio per Test3 restituisce il valore 15 (cella D23, Figura 3.2).
Oltre alla funzione [Link], Excel mette a disposizione altre funzioni di conteggio.
=[Link](val1;val2;…)
Esegue il conteggio delle celle non vuote in un intervallo di celle specificato, esprimibile come un
insieme di argomenti in cui ogni argomento è il riferimento a una cella (carattere separatore ";")
oppure come un singolo argomento intervallo (carattere separatore ":" tra le celle che lo
delimitano). A differenza della funzione [Link], la funzione [Link]
conteggia anche le celle che contengono valori logici o testuali.
=[Link](val1;val2;…)
Esegue il conteggio delle celle vuote in un intervallo di celle specificato, esprimibile come un
insieme di argomenti in cui ogni argomento è il riferimento a una cella (carattere separatore ";")
oppure come un singolo argomento intervallo (carattere separatore ":" tra le celle che lo
delimitano). Una cella è considerata vuota quando non contiene alcun valore. È bene ricordare che
il carattere spazio (blank) è a tutti gli effetti un valore, dunque le celle apparentemente vuote ma in
realtà contenenti spazi non sono conteggiate.
=[Link](intervallo;criteri)
Esegue il conteggio delle celle che si trovano in un intervallo specificato e soddisfano una
condizione assegnata. La funzione [Link] presenta argomenti diversi rispetto a
[Link], [Link] e [Link], pertanto verrà approfondita nella
prossima pagina di contenuti.
[Link] è la funzione di conteggio più flessibile tra quelle offerte da Excel, poiché consente
all'utente di specificare quali celle (tra quelle considerate dall'intervallo) includere nel conteggio in
base a una condizione.
=[Link](intervallo;criterio)
Per fare chiarezza sulle condizioni di confronto impiegabili come criterio della funzione
[Link], si propongono i seguenti esempi. Per ciascun criterio, si mostra l’effetto sulla funzione
di conteggio.
Excel mette inoltre a disposizione la funzione [Link], la cui sintassi è analoga a [Link],
il cui scopo è eseguire la somma dei valori contenuti in un insieme di celle in base al verificarsi di
una condizione.
Si consideri l’esempio in Figura 3.1 e si voglia conteggiare il numero di rilevazioni che hanno
restituito un valore sopra la media per ciascuno dei tre test considerati. Secondo quanto visto alla
pagina precedente, il criterio andrebbe espresso attraverso la stringa ">30.32". Questo però
introduce un problema: se i valori nella tabella cambiassero, tale valore non sarebbe più corretto e ci
si dovrebbe ricordare di aggiornarlo manualmente all'interno di tutte le formule di confronto che ne
fanno uso.
Questo problema viene risolto attraverso una variante sintattica, in cui il criterio si compone di una
parte testuale (l'operatore di confronto ">") e di un riferimento a una cella contenente il valore
soglia (B22). La concatenazione delle parti che insieme costituiscono il criterio viene
effettuata attraverso il carattere ampersand (&).
Per Test1, la funzione [Link] va inserita nella cella B24 come segue:
=[Link](B4:B18;">"&B22)
Il risultato della funzione [Link] stabilisce che 7 rilevazioni di Test1 sono superiori al valore
di media 30.32 contenuto nella cella B22. Per eseguire il medesimo conteggio su Test2 e Test3, si
copia mediante trascinamento la funzione in B24 rispettivamente nelle celle C24 e D24.
Sintetizziamo nella tabella seguente altre funzioni statistiche di Excel non ancora presentate.
I grafici sono uno strumento di analisi molto efficace e, per questo motivo, sono frequentemente
impiegati all’interno dei fogli di calcolo. Un grafico offre una visualizzazione complessiva dei dati,
mediante la quale è immediato osservare tendenze, variazioni relative e correlazioni tra gruppi di
valori diversi. Inoltre, dal momento che un grafico è aggiornato automaticamente al variare dei dati,
esso costituisce un valido strumento per evidenziare cambiamenti nei dati che rischierebbero
altrimenti di passare inosservati. Ad esempio, considerando un foglio di calcolo contenente i dati
relativi alle rilevazioni sperimentali relative a un certo fenomeno di interesse, è possibile realizzare
un grafico che consenta di osservare in maniera visuale l’andamento dell’esperimento in un certo
arco temporale, ponendo in evidenza le variazioni relative che corrispondono agli aumenti o alle
diminuzioni dei valori rilevati di volta in volta.
Un grafico è realizzato a partire da una serie di dati, cioè un insieme di valori relativi a uno
specifico oggetto/fenomeno di interesse. Una serie di dati è memorizzata in un intervallo di celle di
un foglio di calcolo e ogni cella dell’intervallo contiene uno specifico valore che dovrà essere
visualizzato nel grafico. Ad esempio, i valori rilevati per un esperimento nell'arco temporale di un
mese costituiscono una serie di dati.
È anche possibile costruire un grafico a partire da più di una serie di dati, in modo da poterne
confrontare i valori. Ogni dato all'interno di una serie può essere associato a una categoria che
descrive la natura del dato stesso. Spesso, l’obiettivo di un grafico è confrontare i valori relativi a
più serie di dati rispetto a un unico insieme di categorie. Ad esempio, si considerino due serie di dati
costituite dalle rilevazioni relative a due esperimenti. In questo caso, l’insieme delle categorie è
rappresentato dalle date in cui le rilevazioni dei due esperimenti sono state eseguite. Ovviamente,
affinché il confronto sia significativo, è necessario considerare un unico insieme di categorie per le
due serie di dati, ovvero un unico insieme di date di rilevazione per entrambi gli esperimenti.
Excel mette a disposizione una procedura guidata per la realizzazione di un grafico. La procedura si
articola nei seguenti passaggi:
1. scelta del tipo di grafico - L'utente imposta il tipo di grafico da utilizzare scegliendo tra una
lista di possibilità (grafici cartesiani, istogrammi, diagrammi a barre, diagrammi a torta,
grafici a linea);
2. selezione dei dati di origine - L'utente indica i dati del foglio di calcolo (serie di dati e
categorie) su cui basare la costruzione del grafico;
3. personalizzazione e formattazione - L’utente definisce l’aspetto del grafico utilizzando
una lista di opzioni disponibili.
4. finalizzazione e posizionamento - Il grafico viene completato e collocato nel foglio di
calcolo corrente o in un nuovo foglio.
Il primo passo per la costruzione di un grafico è la scelta da parte dell’utente del tipo di grafico che
si intende realizzare. Excel mette a disposizione diversi tipi di grafico, fra cui gli istogrammi e i
grafici a barre.
Altri tipi di grafico offerti da Excel sono i grafici a linee, i grafici a torta e i grafici a dispersione.
Altri tipi di grafico offerti da Excel sono i grafici ad area, ad anello, a superficie e a bolle.
Nella maggioranza dei casi, le varie tipologie di grafico offrono la medesima potenza
rappresentativa e la scelta del tipo di grafico da utilizzare è dettata dall'efficacia comunicativa.
Tuttavia, in alcuni casi, ciò può non essere vero. Ad esempio, i grafici a torta sono adatti a
rappresentare solo dati che descrivono la percentuale espressa da ciascuna voce rispetto al totale.
Si consideri l’esempio in Figura 3.1 ove sono mostrati i dati delle rilevazioni relative a tre test di
laboratorio nel medesimo periodo. Si voglia costruire un grafico che consente di confrontare
visivamente i valori rilevati per ciascun test in ciascuna data. Come mostrato nella Figura 4.1, un
tipo di grafico adatto allo scopo è quello a linee.
In questo esempio, ogni serie di dati, una per ogni test, è rappresentata mediante una linea di colore
diverso (vedi legenda all’interno della Figura 4.1). I valori di ciascuna serie sono rappresentati
sull'asse verticale (y), mentre l’insieme delle categorie è rappresentato sull'asse orizzontale (x) ed è
costituito dall'insieme delle date in cui sono state effettuate le rilevazioni dei test.
Dopo la scelta del tipo di grafico, l’utente deve indicare l’intervallo di celle, detto intervallo dati, in
cui sono memorizzati i valori da rappresentare al suo interno. Excel richiede di specificare un unico
intervallo dati che contenga sia le serie di dati sia le categorie del grafico. Per questo motivo, è
necessario che l’utente, dopo aver specificato l’intervallo dati, indichi come sono disposte
nell'intervallo le serie di dati e le categorie. Sono possibili due scenari:
• serie in righe - Ciascuna riga dell’intervallo dati memorizza i valori di una serie di dati da
visualizzare nel grafico, e ciascuna colonna dell’intervallo ospita una categoria;
• serie in colonne - Ciascuna riga dell’intervallo dati memorizza una categoria, e ciascuna
colonna dell’intervallo ospita una serie di dati da visualizzare nel grafico.
La scelta tra serie in righe e serie in colonne non è univoca. Spesso, i valori nell'intervallo dati
possono essere considerati una serie sia considerando la riga sia considerando la colonna. In questi
casi, è l’utente che deve operare la scelta tra le due possibilità in base a ciò che vuole evidenziare
nel grafico.
Excel mette inoltre a disposizione una funzionalità per raffinare la selezione dei dati di origine
facendo in modo di leggere dalle celle del foglio di calcolo non solo i valori da visualizzare nel
grafico, ma anche le etichette di testo che identificano ciascuna serie e ciascuna categoria.
Considerando l’esempio della Figura 3.1 e il corrispondente grafico a linee mostrato nella Figura
4.1, l’intervallo dati è B4:D18, che ospita i valori delle rilevazioni dei tre test nel periodo di
osservazione dal 01/09/10 al 15/09/10. In questo caso, la disposizione è del tipo "serie in colonne"
poiché ciascuna colonna dell’intervallo (B, C, D) ospita i valori di una serie di dati, cioè di un test e
ciascuna riga dell’intervallo memorizza i valori di una categoria, cioè i dati rilevati per i tre test in
una specifica data. Nel grafico in Figura 4.1, i nomi delle tre serie di dati sono riportati nella
legenda e corrispondono rispettivamente al contenuto delle celle B3, C3 e D3 del foglio di calcolo.
Analogamente, i nomi delle categorie visualizzati sull'asse orizzontale corrispondono ai valori delle
celle nell'intervallo A4:A18.
Il terzo passo per la costruzione di un grafico prevede una fase di personalizzazione che consente di
intervenire sugli aspetti di visualizzazione. A tal proposito, Excel mette a disposizione varie
opzioni.
• Titoli. Consente di assegnare un titolo al grafico e di dare un nome agli assi, sia quello
orizzontale (x) delle categorie, sia quello verticale (y) dei valori.
• Assi. Consente di modificare l’aspetto degli assi, eventualmente eliminando la
visualizzazione di questi oggetti.
• Griglia. La griglia è costituita dalle linee guida disposte orizzontalmente e verticalmente
nell'area del grafico a intervalli regolari. Esse favoriscono la lettura del grafico, facilitando
la comparazione di valori appartenenti a serie diverse. È possibile impostare una griglia più
o meno fitta di linee, differenziando eventualmente la granularità delle linee guida
orizzontali della griglia rispetto a quelle verticali.
• Legenda. Consente di scegliere se mostrare il riquadro della legenda e dove posizionarlo.
• Etichette dati. Consente di visualizzare nell'area del grafico alcune informazioni che
possono facilitare la lettura dei valori, come ad esempio il nome della serie di dati e il nome
della categoria di appartenenza.
• Tabella dati. Consente di accostare alla visualizzazione del grafico una tabella che contiene
le serie di dati e le categorie che hanno generato il grafico. Si tratta di un’opzione utile
quando si ipotizza di dover estrarre il grafico dal foglio di calcolo per utilizzarlo in un altro
programma.
Nell'esempio della Figura 4.1, il titolo del grafico è stato impostato a “Rilevazione dati dei test”,
mentre i nomi degli assi orizzontale e verticale sono rispettivamente “Data rilevazione” e “Valore
rilevato”. Gli assi sono visibili e la griglia è limitata alle linee guida orizzontali che favoriscono il
confronto fra i valori delle serie di dati rappresentate. La legenda è visualizzata alla destra del
grafico. Non è visualizzata alcuna etichetta dati e neppure la tabella dati.
L’ultimo passaggio per la creazione di un grafico consiste nel posizionamento del grafico. È
possibile memorizzare il grafico nello stesso foglio di calcolo che ospita i dati che lo hanno
generato, oppure posizionarlo in un nuovo foglio di calcolo appositamente creato.
Al termine dei quattro passaggi, l’utente può sempre intervenire per modificare il grafico in tutte le
sue componenti. In particolare, Excel mette a disposizione alcuni strumenti di formattazione
aggiuntivi rispetto a quelli proposti in fase di personalizzazione. Tali strumenti consentono di
modificare l’aspetto di un grafico in ogni sua caratteristica, come il tipo di font usato nelle etichette
di testo, i colori degli elementi del grafico e quelli di sfondo, la scala di rappresentazione dei valori
sugli assi e così via.
Si consideri l’esempio mostrato in Figura 1.5 in cui sono evidenziati gli importi delle prestazioni
erogate dai laboratori di un centro di analisi in un dato trimestre. Si voglia costruire un grafico di
tipo istogramma che permetta di confrontare in modo visuale i risultati prodotti dai vari laboratori.
Come intervallo dati impostiamo le celle B5:D9, nelle quali sono memorizzati gli importi delle
prestazioni per i vari laboratori nei tre mesi osservati. A questo punto è necessario scegliere tra la
rappresentazione delle serie in righe o colonne. In questo caso, entrambe le possibilità sono sensate,
ma producono due diversi confronti dei dati nell'intervallo considerato.
In questo grafico, le serie di dati sono i tre mesi considerati e le categorie sono i vari laboratori
confrontati. Ciò che il grafico della Figura 4.2 consente di analizzare efficacemente è l’andamento
di ciascun laboratorio nel trimestre considerato. Da questo grafico si deduce facilmente che il
laboratorio di microbiologia degli alimenti ha avuto nel mese di marzo un significativo incremento
delle prestazioni erogate, il laboratorio di microbiologia delle acque ha un andamento negativo, il
laboratorio di microbiologia cosmetica evidenzia un comportamento altalenante, quello di
parassitologia e batteriologia umana è costante e quello di sierologia delle malattie infettive ha un
andamento costantemente positivo, senza particolari scostamenti.
In quest’altro grafico, le serie di dati sono i vari laboratori e le categorie sono i mesi di osservazioni
considerati. Il grafico della Figura 4.3 evidenzia il contributo di ogni laboratorio al raggiungimento
del risultato complessivo di ogni mese. Da questo grafico è facile osservare che i laboratori di
microbiologia degli alimenti e di microbiologia cosmetica sono preponderanti nella determinazione
del risultato mensile del centro di analisi, il laboratorio di sierologia delle malattie infettive è in
crescita e sta assumendo un ruolo sempre più significativo, quelli microbiologia delle acque e di
parassitologia e batteriologia umana contribuiscono in modo marginale al risultato complessivo del
centro di analisi.
In definitiva, quale delle due alternative è preferibile? La risposta dipende da quale obiettivo si
intende raggiungere con il grafico, e in particolare quale confronto l’utente desidera rappresentare
con maggiore efficacia.
Nel foglio di calcolo mostrato nella Figura 2.1, gli importi mensili delle prestazioni erogate sono
sommati per produrre un importo complessivo trimestrale di ciascun laboratorio. Si voglia costruire
un grafico di tipo torta per visualizzare qual è la proporzione tra gli importi trimestrali prodotti da
ciascun laboratorio. Come intervallo dati vanno impostate le celle F5:F9 in cui sono memorizzati gli
importi complessivi trimestrali di ciascun laboratorio. Dunque, in questo caso, l’unica serie di dati
considerata è rappresentata in colonna e ciascuna riga rappresenta una categoria. Il grafico risultante
è mostrato nella Figura 4.4.
In questo grafico, i contributi preponderanti del laboratorio di microbiologia degli alimenti e del
laboratorio di microbiologia cosmetica sono ancora più evidenti che nel grafico di tipo istogramma.
B. BASE DI DATI
Il reperimento e la gestione di dati sono processi comuni, presenti in numerose attività che
svolgiamo quotidianamente, come ad esempio, la consultazione del catalogo di una biblioteca,
l’esplorazione di un portale web cinematografico contenente recensioni di pellicole, la stampa degli
esami attraverso il sistema informativo di un ateneo, o ancora il versamento di una somma su un
conto corrente. In tutte queste attività, siamo interessati a reperire le informazioni che soddisfano le
nostre specifiche esigenze in un preciso momento. Ad esempio, possiamo essere interessati a
reperire le informazioni disponibili su uno specifico libro di cui conosciamo l’autore, oppure le
informazioni sui film realizzati da un certo regista. In un ulteriore scenario di esempio, quando ci
presentiamo allo sportello bancario per effettuare un’operazione di versamento, l’operatore della
filiale inserisce il nostro numero di conto corrente ed è così in grado di reperire i dati relativi al
nostro credito e registrare l’avvenuta operazione di versamento all’interno del sistema informativo
della banca aggiornando il nostro saldo in tempo reale.
È chiaro che in tutti questi scenari, c’è un sistema informatico in grado di memorizzare e gestire le
informazioni di interesse (trasformandole in dati), rendendo possibile le operazioni di reperimento e
gestione (inserimento, aggiornamento, cancellazione) delle informazioni di interesse in un dato
momento.
Dato e informazione
Nella precedente scheda, abbiamo utilizzato sia il termine dato sia il termine informazione.
Per dato si intende la descrizione di una caratteristica della realtà costituita da simboli che ne
garantiscano la comprensione e registrata su un supporto che ne garantisca la conservazione.
Se prendiamo in considerazione il valore 2005 scritto su un foglio, questo è un dato. Siamo infatti in
grado di leggere e comprendere il valore 2005 e il foglio ne garantisce la conservazione. Tuttavia,
non siamo in grado di comprendere il significato del valore 2005, ovvero che cosa rappresenti
questo insieme di simboli.
Se il valore 2005 è associato a una descrizione del tipo “Titolo: Be Cool – anno di produzione:
2005”, allora siamo in presenza di una informazione, ovvero di un dato interpretato. Al dato è
associato un contesto interpretativo che consente di comprendere il significato del dato rispetto alla
sua funzione descrittiva di una certa realtà. Nel nostro caso, il dato rappresenta l’anno di produzione
di un certo film. I sistemi informatici per la gestione dei dati normalmente sono in grado di
memorizzare i dati nel tempo e di fornire un contesto interpretativo ai dati facendoli diventare
informazioni utili per gli utenti.
Si consideri un insieme di dati relativi a film, ciascuno descritto mediante le proprie caratteristiche
come ad esempio il titolo, il regista e l’anno di produzione. Tipicamente, il foglio di calcolo che
memorizza questo insieme di dati è organizzato in modo tale da presentare le caratteristiche dei film
nelle colonne e i valori associati alle caratteristiche nelle righe. Leggendo i valori colonna per
colonna su una specifica riga si osserva la descrizione di un certo film attraverso le sue
caratteristiche (vedi Figura B1.1).
L’organizzazione dei dati illustrata nella scheda precedente è valida, tuttavia presenta alcuni limiti.
Con riferimento alla tabella di Figura B1.2, i limiti che si possono riscontrare sono relativi a:
celle interessate. Si supponga di voler modificare la descrizione dei registi dei film
cambiando i valori delle celle relative all’anno di nascita in favore della data precisa di
nascita. Per ciascun regista, come ad esempio Christopher Nolan, è necessario individuare
tutte le righe relative ai film di questo regista e modificare l’anno di nascita (1970)
inserendo la data di nascita (30/07/1970).
Figura 1.2: Foglio di calcolo relativo a film con evidenza in rosso di valori errati o ridondanti
Si supponga di avere due fogli di calcolo. Il primo foglio memorizza dati relativi a film e ciascuna
riga mostra le caratteristiche di una specifica pellicola tra le quali il nominativo del regista in una
certa colonna (si veda la Figura B1.1). Il secondo foglio memorizza i dati relativi ai registi e
ciascuna riga mostra le informazioni anagrafiche e biografiche di uno specifico individuo. Volendo
conoscere la nazionalità del regista di un film di interesse, è necessario mettere in relazione i dati
contenuti nei due fogli di calcolo. Identificata la riga del film di interesse nel primo foglio di
calcolo, sarà necessario trovare la colonna relativa al regista e prelevare il nominativo, trovare la
riga nel secondo foglio di calcolo che corrisponde a tale nominativo e consultare la colonna relativa
alla nazionalità.
Il procedimento descritto si basa sull’assunto implicito che il nominativo sia una caratteristica
univoca nella descrizione di ciascun regista. In altre parole, stiamo assumendo che non esistano due
registi con il medesimo nominativo. In caso contrario, passando dal foglio dei film al foglio dei
registi potremmo avere il dubbio di quale sia la nazionalità corretta del nostro regista quando il
medesimo nominativo è associato a individui diversi e cioè compare in righe diverse.
Questa assunzione è evidentemente molto pericolosa perché i casi di omonimia fra individui sono
tutt’altro che rari e questo rischia di compromettere la correttezza delle informazioni reperite dovuta
a un errato collegamento fra le righe appartenenti ai fogli di calcolo diversi.
Una base di dati è una soluzione pensata per organizzare e gestire dati in modo strutturato offrendo
soluzioni appropriate per superare i limiti che tipicamente affliggono i dati memorizzati nei fogli di
calcolo. Spesso, gli utenti che si avvicinano per la prima volta al mondo delle basi di dati si
pongono alcuni interrogativi: “quale differenza c'è fra una base di dati e un foglio di calcolo?”,
“quando è opportuno utilizzare una base di dati per memorizzare le informazioni di interesse?” e
ancora “quando è meglio impiegare un foglio di calcolo?”.
In verità il confronto fra basi di dati e fogli di calcolo è improprio: si tratta di due software con
finalità molto diverse, accomunati soltanto dal fatto che entrambi memorizzano dati in strutture di
forma tabellare.
I fogli di calcolo consentono la memorizzazione dei dati in una griglia di celle in cui non esiste
alcuna distinzione fra schema e istanza: l'organizzazione dei dati dipende dall'utente che predispone
il foglio di calcolo in base alle sue necessità. La scelta di avere serie di dati omogenei disposti per
riga o per colonna è una convenzione che facilita la lettura del foglio e l'inserimento di formule, ma
non è obbligatoria e neppure suggerita in qualche modo dagli strumenti. Inoltre, i fogli di calcolo
sono concepiti come strumenti di elaborazione e analisi dei dati, predisposti per l'inserimento di
formule e funzioni di calcolo eventualmente complesse. La possibilità di correlare dati appartenenti
a fogli di calcolo diversi esiste ma è scarsamente impiegata e di non facile utilizzo.
Al contrario, in una base di dati, l'organizzazione dei dati è basata sul concetto di tabella nella quale
sono ben distinte le nozioni di schema e istanza come caratteristiche essenziali e distintive, così
come la possibilità di correlare fra loro i dati appartenenti a tabelle diverse. Questo favorisce la
memorizzazione dei dati in modo da minimizzare le ridondanze e facilitare la gestione degli
aggiornamenti nel corso del tempo.
----------------------------------------------------------------------------------------------------------------
Consideriamo nuovamente gli esempi di consultazione del catalogo di una biblioteca, esplorazione
di un portale web cinematografico, stampa degli esami universitari, e versamento di una somma su
un conto corrente. In tutte queste attività, i dati di interesse (ovvero i dati relativi a libri, film, esami
e conti correnti) sono reperiti all’occorrenza estraendoli da un archivio elettronico dove sono
memorizzati e conservati nel tempo.
Una base di dati (o database in lingua Inglese) è una collezione di dati coerenti creata allo scopo
specifico di rappresentare e memorizzare adeguatamente le informazioni di una realtà d’interesse.
Come anticipato nella precedente scheda, un database memorizza i dati in modo strutturato, cioè
organizzati secondo schemi e tabelle dotati di una precisa e rigida definizione. Ad esempio, la base
di dati relativa al portale web cinematografico conterrà tabelle per memorizzare dati su film, attori,
registi e così via. Analogamente, la base di dati relativa al sistema informativo universitario conterrà
tabelle con dati su studenti, corsi di laurea, esami, docenti e così via.
Per eseguire il reperimento dei dati di interesse da una base di dati, è possibile fare uso di appositi
programmi software che mettono a disposizione strumenti, spesso di tipo visuale, per guidare
l’utente nella corretta formulazione delle sue specifiche richieste.
DBMS, a patto che abbia gli opportuni diritti di lettura ed eventualmente scrittura (cioè modifica)
sul database. In particolare, un DBMS offre le seguenti funzionalità:
• Fornisce agli utenti una visione di alto livello dei dati contenuti nella base di dati attraverso
l’uso di un modello dei dati, nascondendo i dettagli di basso livello relativi alla
memorizzazione fisica dei dati.
• Fornisce supporto per la condivisione della base di dati da parte di molteplici utenti e
applicazioni diverse, garantendo la corretta gestione degli accessi anche contemporanei ai
dati da parte di utenti diversi.
• Garantisce la sicurezza dei dati, ovvero che solamente utenti autorizzati abbiano accesso alla
base di dati, compiendo operazioni autorizzate.
• Fornisce la possibilità di definire una visione personalizzata dei dati per le diverse tipologie
di utenti/applicazioni, contenente il sottoinsieme di dati di utilità per
quell’utente/applicazione.
• Può integrare le funzionalità di salvataggio e ripristino (backup e recovery) dei dati
contenuti nella base di dati, per garantire che non ci siano perdite di dati anche in caso di
guasti e malfunzionamenti del software o dei dispositivi hardware del sistema di
elaborazione.
• È in grado di assicurare la consistenza dei dati contenuti nella base di dati, facendo in modo
che vengano rispettati i vincoli di integrità sui dati stessi.
Negli anni ‘80/90 si assiste all'affermazione della tecnologia dei DBMS relazionali, che sono
diventati uno standard di mercato e una componente essenziale per la gestione delle informazioni
nell’ambito di organizzazioni pubbliche e private. Esistono numerosi esempi di DBMS relazionali,
tra i quali vale la pena menzionare Oracle, MySQL, Microsoft SQL Server, PostgreSQL, MariaDB.
Per modello dei dati si intende la descrizione della struttura dei dati che caratterizzano la realtà di
interesse a cui si riferisce la base di dati. Un modello dei dati comprende:
• Un insieme di costrutti,
• Una notazione per specificare i dati tramite i suddetti costrutti,
• Un insieme di operazioni per esprimere le interrogazioni e le modifiche da eseguire sui dati
organizzati secondo quel modello.
Un modello dei dati deve permettere la rappresentazione degli (insiemi di) oggetti del mondo reale,
dei legami (associazioni) fra tali oggetti e delle caratteristiche (attributi) degli oggetti e/o delle loro
associazioni. Un attributo consiste quindi in un campo non scomponibile il cui insieme di valori
possibili è definito dagli oggetti che appartengono a quest’ultimo. Esempi di oggetti, attributi e
associazioni di interesse nel caso di una base di dati cinematografica sono mostrati in Figura 2.1.
Allo scopo di definire correttamente lo schema della base di dati è necessario procedere a una
concettualizzazione delle informazioni che riguardano la realtà osservata. Per concettualizzazione
intendiamo qui la rappresentazione di una realtà di interesse in termini di insiemi di oggetti,
caratteristiche e legami.
Figura 2.1: Esempi di oggetti, attributi e associazioni per una base di dati cinematografica
Il modello relazionale
Come esempio di modello dei dati per basi di dati, consideriamo il modello relazionale introdotto
nel 1970 da Ted Codd, che rappresenta il modello dei dati sul quale si basa la maggior parte dei
DBMS oggi disponibili.
In un modello relazionale i dati sono memorizzati in tabelle, dette relazioni, composte da un certo
numero di colonne, dette attributi, e da un certo numero di righe, dette tuple. Ad esempio, la
tabella seguente, denominata regista, rappresenta un insieme di registi di film.
Ogni riga della tabella rappresenta un singolo regista. Osserviamo inoltre che in una tabella di una
base di dati relazionale, tutti i valori presenti in una colonna appartengono allo stesso tipo di
dato o dominio. Ad esempio, il nome di un regista è un valore di tipo testuale, come anche il
cognome e la nazione. In generale, le righe di una tabella di una base di dati relazionale
rappresentano specifici oggetti o legami fra oggetti del mondo reale; gli attributi definiti per la
tabella forniscono l’interpretazione dei dati che compaiono nelle varie righe.
Una base di dati relazionale è quindi una collezione di tabelle che rappresentano gli oggetti e le
associazioni fra oggetti che caratterizzano la realtà di interesse. Osserviamo che i legami fra i dati di
tabelle diverse vengono espressi per mezzo di valori comuni presenti nelle tuple di tali tabelle.
Questi valori dovranno per forza essere univoci in entrambe le tabelle. Un esempio, è costituito
dalla seguente base di dati che descrive registi e film e l'associazione che sussiste fra i film e i
corrispondenti registi.
Come si può vedere dalla Figura 4.2, nella relazione film, un film fa riferimento al relativo regista
attraverso il valore dell'attributo id_regista, che è il codice del regista del film e che corrisponde a
uno dei codici contenuti nella tabella regista.
Per prima cosa, introduciamo la nozione di schema di relazione, che è costituito dal nome r della
relazione e dall'insieme degli attributi che costituiscono la relazione. Ad esempio, lo schema di
relazione della relazione "regista" è definito come segue
Sulla base di quanto appena detto ne consegue che lo schema dell'intera base di dati
cinematografica che costituisce il nostro esempio è il seguente:
I dati che compongono le relazioni di una base di dati ne costituiscono l’istanza. In particolare, si
definisce istanza di una relazione r l’insieme delle tuple definite sugli attributi di r.
Si definisce istanza di base di dati l’insieme delle istanze di relazione di ciascuna relazione che
costituisce la base di dati.
Ad esempio, un’istanza valida dello schema di base di dati mostrato in precedenza è la seguente:
Gli attributi di una base di dati possono avere differenti vincoli che possono essere inseriti in fase di
progettazione. Questi vincoli obbligano a seguire un determinato criterio di inserimento o
forniscono delle regole di inserimento per i valori degli attributi. Alcuni esempi di vincoli sono:
• Not null: richiede di inserire un valore per l’attributo sul quale è impostato il vincolo. Ad
esempio, nel caso della relazione regista, specificare un vincolo not null sull’attributo
cognome significa che non sarà possibile memorizzare una tupla nella relazione qualora essa
sia priva di valore sull’attributo cognome.
• Default: comporta l’inserimento di un valore predefinito nel caso in cui non sia stato
specificato alcun valore per l’attributo in fase di inserimento o modifica. Ad esempio, nel
caso della relazione attore, impostare il valore di default “USA” per l’attributo nazione
significa che qualora si intenda memorizzare una tupla in questa relazione e qualora essa sia
priva di valore sull’attributo nazione, il valore USA sarà inserito come valore dell’attributo
per quella tupla.
• Unique: richiede di inserire un valore univoco per l’attributo sul quale è impostato il
vincolo. Questo significa che non sarà possibile avere due tuple della relazione con il
medesimo valore per l’attributo definito unique. As esempio, nel caso della relazione film,
specificare un vincolo unique sull’attributo titolo significa che non potranno essere
memorizzate due pellicole distinte con il medesimo valore sull’attributo titolo.
Chiave primarie
Ogni tabella possiede una chiave primaria; in questo modo ogni tupla della tabella è univocamente
riconoscibile. Facendo riferimento alla tabella regista del nostro esempio, id_regista è la chiave
primaria della tabella, ovvero non possono essere memorizzate nella tabella regista due tuple
distinte con il medesimo valore per l’attributo id_regista. Un ulteriore esempio di chiave primaria è
la coppia di attributi titolo, id_attore della tabella partecipazione. Questo significa che non possono
essere memorizzate tuple distinte aventi la medesima coppia di valori per titolo e attore.
Se un utente tentasse di inserire una tupla con un valore di chiave primaria già presente in una certa
tabella, il sistema di gestione della base di dati, cioè il DBMS, impedirebbe l’inserimento e
segnalerebbe un errore. L’utente dovrà modificare il valore della chiave primaria per poter
concludere con successo l’inserimento della nuova tupla.
In genere, la chiave primaria di una tabella è indicata sottolineando i nomi degli attributi che la
costituiscono.
Figura 3.6: Esempio di base di dati relazionale cinematografica con le relative chiavi primarie per
ciascuna tabella
Chiavi esterne
Nel nostro esempio, le tuple delle tabelle film e regista sono legate fra loro tramite l'attributo
id_regista, ovvero ogni singolo film fa riferimento per mezzo dell'attributo id_regista, alla tupla del
suo corrispondente regista. Affinché la base di dati sia corretta, l'identificatore di regista presente
all'interno di una tupla di film deve essere un valore già presente come valore di chiave primaria
nella tabella dei registi. Se ciò non avvenisse, non sarebbe possibile associare ciascun film con il
corrispondente regista qualora un utente volesse conoscere questa informazione relativamente a una
pellicola di interesse. In altri termini, il regista di ciascun film deve essere presente nella base di
dati. Per garantire che questo controllo sia effettuato dal DBMS, nelle basi di dati relazionali
l'attributo id_regista viene dichiarato come chiave esterna nella tabella film, ovvero si richiede che i
valori di questo attributo siano presenti come valori dell’attributo id_regista nella tabella regista.
Valori nulli
Ogni tupla di una relazione possiede la struttura definita nello schema di quella relazione anche
quando uno o più valori non sono presenti. Ad esempio, supponiamo di non conoscere la nazione
del regista Gray. La tupla memorizzata nella tabella regista sarà comunque caratterizzata dagli
attributi id_regista, nome, cognome e sesso, come previsto dalla relazione regista. Quale valore
dovrà essere dunque specificato in corrispondenza dell'attributo nazione?
A tale scopo, nelle basi di dati relazionali, si usa un particolare valore, detto valore NULL. Nel
nostro esempio, la tupla assumerebbe dunque la seguente forma:
Una base di dati gestita da un DBMS può essere vista a tre livelli di astrazione, a ciascuno dei quali
corrisponde una descrizione dei dati sotto forma di uno specifico schema.
Lo schema logico fornisce la descrizione dell'intera base di dati per mezzo del modello dei dati del
DBMS utilizzato. Nel nostro caso, abbiamo considerato DBMS relazionali, nei quali il modello dei
dati utilizzato è appunto quello relazionale.
Lo schema fisico descrive l'organizzazione fisica dei dati in termini di strutture fisiche di
memorizzazione e di accesso, come ad esempio, file sequenziali su disco.
Uno schema esterno o vista descrive una porzione dell'intera base di dati, limitata ai dati che
costituiscono la specifica visione di singoli utenti o gruppi di utenti, facendo uso del modello dei
dati utilizzato dal DBMS, che per noi è il modello relazionale.
In Figura 3.8, riportiamo un esempio relativo alla base di dati relazionale cinematografica.
• Al livello fisico, la visione dei dati è quella di più basso livello, ovvero si considerano
direttamente i valori delle tuple, memorizzati in file su un supporto fisico di
memorizzazione. Questo livello è nascosto all'utente finale ed è gestito internamente
direttamente dal DBMS.
• A livello logico la rappresentazione dei dati è di alto livello, vicino alla concettualizzazione
della realtà e presenta i dati in formato tabellare, secondo il modello dei dati relazionale del
DBMS utilizzato. A questo livello, possiamo quindi fare riferimento agli attori utilizzando la
tabella corrispondente, in cui ciascuna colonna rappresenta un attributo che caratterizza gli
attori e ogni riga descrive uno specifico attore.
• Al livello esterno, i dati possono essere presentati a utenti diversi secondo schemi esterni
diversi, detti viste, che contengono un sottoinsieme di tutti i dati, quelli di interesse per lo
specifico utente. Ad esempio, nel nostro caso abbiamo la vista relativa agli attori americani e
quella relativa agli attori francesi, rispettivamente. Alcuni DBMS, come ad esempio quelli
mono-utente per la gestione di basi dati personali, possono non supportare il livello esterno,
che è invece molto importante nel caso di DBMS che operano in ambienti multi-utente,
tipici delle organizzazioni pubbliche e private.
L'aspetto importante di questa architettura è che gli utenti formulano le loro richieste facendo
riferimento allo schema logico oppure agli schemi esterni, quindi facendo riferimento a descrizioni
di alto livello dei dati contenuti nella base di dati e non a una descrizione di basso livello in termini
di file memorizzati su disco. Il DBMS tradurrà internamente le richieste di accesso formulate sugli
schemi esterni oppure sullo schema logico in opportune richieste di accesso a file nelle strutture di
memorizzazione per reperire i dati di interesse.
Figura 3.8: Esempio dei diversi livelli di astrazione dei dati in un DBMS relazionale
I DBMS mettono a disposizione i seguenti linguaggi per definire e manipolare una base di dati:
• Linguaggio di definizione dei dati o DDL (Data Definition Language), ovvero un linguaggio
per la definizione dello schema logico e degli eventuali schemi esterni.
• Linguaggio di manipolazione dei dati o DML (Data Manipulation Language), cioè un
linguaggio per formulare estrazioni e modifiche sui dati (cioè, inserimenti, cancellazioni,
modifiche) della base di dati. Spesso si indica con linguaggio di interrogazione (query
language) il sottoinsieme delle istruzioni DML per l’estrazione di dati da una base di dati.
Nei DBMS relazionali le funzionalità DDL e DML confluiscono in un unico linguaggio denominato
SQL (Structured Query Language),, che è uno standard per i DBMS relazionali. Analizzando i
prodotti DBMS sul mercato, si notano differenze, a volte anche sostanziali, tra lo standard e le
implementazioni del linguaggio SQL offerte dai diversi DBMS. Molto spesso, l’aderenza allo
standard è garantita solo per i costrutti consolidati del linguaggio, mentre ogni sistema realizza le
funzioni evolute di SQL in modo fortemente dipendente dall’implementazione.
Vogliamo ora illustrare il procedimento che consente la creazione di una base di dati relazionale
(db) con l’ausilio di LibreOffice [Link] non essendo un vero e proprio DBMS e pur non
offrendo tutte le funzionalità tipiche di un DBMS, LibreOffice Base consente la creazione di una
base di dati relazionale e mette a disposizione funzionalità per l'inserimento di tuple e la loro
conseguente estrazione in base ai criteri di selezione di volta in volta definiti dall’utente. Quindi, si
tratta di uno strumento valido e facile da reperire per un’esperienza pratica di lavoro con le basi di
dati relazionali. LibreOffice Base è uno strumento software libero e open source appartenente alla
suite per ufficio LibreOffice. Analogamente agli altri pacchetti della suite LibreOffice, Base è
supportato su più piattaforme tra cui Microsoft Windows, macOS e Linux.
Di seguito mostreremo la fase di definizione della base di dati cinematografica di Figura 3.x. Una
volta avviato il programma, andiamo nel menù File > Nuovo e selezioniamo la voce Database.
Chiamiamo la nostra base di dati db_cinema. A questo punto compare una finestra che rappresenta
la nostra base di dati per mezzo della quale sarà possibile agire sulla base di
dati db_cinema creando, modificando o cancellando tabelle (Figura 4.1).
Per creare una tabella posizioniamoci nell’elenco Attività (Figura 4.1) e selezioniamo la voce Crea
tabella in vista struttura (altre possibilità di creazione guidata sono presenti ma questa offre il
maggiore controllo).
Compare così la struttura di una tabella in cui andremo a definire per ogni riga un attributo del
record e il tipo o dominio corrispondente (Figura 4.2). Si noti che il tipo di dato da associare a
ciascun attributo può essere scelto da un menù a tendina dove sono disponibili le tipologie di dato
più comuni come i tipi di dato testuali, numerici e temporali. Supponiamo di voler definire la
tabella regista; i nomi dei campi (ovvero gli attributi) che andremo a definire sono: id_registaal
quale assegneremo il tipo di dato numerico Intero, nome, cognome, sesso e nazione ai quali
assegneremo il tipo di dato Testo. Notiamo che per ogni campo possono essere impostate una serie
di opzioni aggiuntive (come ad esempio, un valore predefinito o una lunghezza massima del valore
che può essere inserito). Una volta definiti tutti gli attributi della tabella, si dichiara la chiave
primaria selezionando gli attributi che la costituiscono, posizionandosi sulla colonna più a sinistra e
facendo Clic tasto destro > Chiave primaria. A questo punto non ci resta che salvare la nostra
tabella e assegnarle il nome regista. In modo analogo andremo poi a creare le
tabelle film(utilizzando l’attributo titolo come chiave primaria), attore (id_attore chiave primaria)
e partecipazione (la coppia titolo, id_attore è utilizzata come chiave primaria).
Creata la struttura delle tabelle, si può procedere a stabilire le associazioni che intercorrono tra loro,
ricordando che le associazioni nelle basi di dati relazionali vengono espresse mediante valori di
attributi opportuni. Andiamo quindi a selezionare la voce Relazioni nel menù Strumenti. Scegliamo
ora le tabelle da collegare ed eseguiamo fisicamente l’associazione cliccando sull’attributo della
nostra prima tabella e trascinandolo fin sopra l’attributo corrispondente della seconda tabella.
Una volta stabiliti i collegamenti tra le tabelle, si può procedere con l’inserimento dei dati, ovvero
con il popolamento della base di dati. Per fare ciò, torniamo nella finestra che rappresenta la nostra
base di dati (quella con intestazione db_cinema) e clicchiamo su una delle tabelle precedentemente
create. Comparirà una struttura in cui ogni colonna rappresenta uno degli attributi definiti per la
tabella, mentre ogni riga dovrà contenere i dati che andremo ora a inserire. A partire dalla prima
riga della tabella andremo ad inserire i nostri dati in ogni colonna e al termine dell’operazione ci
sposteremo sulla riga successiva iterando il processo fino a quando non avremo completato la fase
di inserimento dati.
È bene porre l’attenzione all’ordine da seguire nel popolamento della base di dati. Per prima cosa,
vanno inseriti i dati delle tabelle in cui non sono presenti chiavi esterne, nel nostro caso le
tabelle attore e regista. Successivamente, andremo a popolare la tabella film, la cui chiave esterna fa
riferimento all’attributo id_regista della tabella regista. Infine, possiamo popolare la
tabella partecipazione i cui attributi sono chiavi esterne sulle tabelle film e attore, rispettivamente.
Nel caso in cui non rispettassimo questo ordine, il sistema rileverebbe il nostro tentativo di inserire
dati che non rispettano i vincoli di chiave esterna (ad esempio, l’inserimento di un film il cui
regista non è ancora stato inserito) e ci impedirebbe di salvarli causando un messaggio di errore.
B5 - COMPOSIZIONE DI QUERY
LibreOffice Base mette a disposizione uno strumento visuale per la formulazione di interrogazioni
(anche dette query), denominato query-by-example (QBE). Secondo questa modalità QBE,
l’interrogazione viene formulata in modo dichiarativo descrivendo le caratteristiche che le tuple del
risultato dovranno possedere. L’utente seleziona una o più tabelle della base di dati dalle quali
intende estrarre le informazioni di interesse. Per ciascuna tabella selezionata, l’utente indica gli
attributi che saranno utilizzati nell’interrogazione. In particolare, un attributo può essere coinvolto
nell’interrogazione perchè deve essere incluso nel risultato, come ad esempio
l’attributo cognome della tabella attore nell’esempio considerato in precedenza. Un attributo può
essere coinvolto in una interrogazione perché necessario al fine di esprimere la condizione di
selezione sui dati delle tabelle coinvolte. E’ questo il caso dell’attributo data_nascita nel nostro
esempio di interrogazione dove l’attributo, pur non facendo parte del risultato, deve essere
coinvolto per filtrare le righe della tabella relative agli attori nati dopo il 1950.
strumenti, oppure premendo il tasto F5, vedremo comparire, nella parte alta della schermata, il
risultato dell’interrogazione.
SELECT è il comando SQL che permette di interrogare una base di dati per estrarne le
informazioni di interesse. La clausola SELECT permette di specificare gli attributi che vogliamo
ottenere nel risultato dell’interrogazione SQL. La clausola FROM esprime il nome della tabella o
delle tabelle della base di dati dalle quali saranno prelevati i dati di interesse. Ad esempio, con il
seguente comando SQL:
La clausola WHERE
La clausola WHERE può seguire la clausola FROM in un comando SELECT di SQL per
specificare eventuali condizioni di selezione di un’interrogazione. In particolare, le tuple delle
tabelle indicate nella clausola FROM sono valutate rispetto alle condizioni della clausola WHERE.
Una tupla viene inserita nel risultato dell’interrogazione se soddisfa le condizioni espresse nella
clausola WHERE. Le condizioni sono espresse mediante operatori di confronto dove il valore di un
attributo viene confrontato con un valore costante, il risultato di un’espressione matematica o il
valore di un altro attributo. Ad esempio, con il seguente comando SQL:
I predicati possono essere racchiusi tra parentesi in modo da poter essere combinati in espressioni
articolate qualora sia necessario. Gli operatori AND e OR sono utilizzati per combinare i predicati
secondo il criterio congiuntivo (AND logico) disgiuntivo (OR logico), rispettivamente. E’ inoltre
disponibile l’operatore NOT per eseguire la negazione del risultato di un’operazione di confronto.
Ad esempio, con il seguente comando SQL:
SELECT titolo FROM film WHERE genere = ‘thriller’ AND nazione = ‘USA’;
intendiamo reperire il titolo delle pellicole di genere thriller che sono state prodotte negli Stati Uniti.
Questo significa che una tupla della tabella film viene inserita nel risultato dell’interrogazione se e
solo se entrambe le condizioni di selezione genere = ‘thriller’ e nazione = ‘USA’ sono soddisfatte
dai valori degli attributi genere e nazione di quella tupla.
Consideriamo un secondo esempio di interrogazione di una base di dati. In questo caso vogliamo
estrarre dalla base di dati il titolo dei film e il nominativo (nome e cognome) del corrispondente
regista.
La query costruita con lo strumento QBE, insieme ai risultati ottenuti, sono mostrati in Figura 5.2.
Figura 5.2: Query di selezione del titolo dei film e il nominativo del corrispondente regista.
Il comando SQL corrispondente alla query dell’esempio precedente costruita con QBE è il
seguente:
In questa interrogazione sono coinvolte tabelle diverse della base di dati. La tabella film è usata per
reperire il titolo delle pellicole e la tabella regista è usata per reperire il nominativo del
corrispondente regista. Il coinvolgimento di entrambe le tabelle è necessario visto che la
tabella film contiene solo l’attributo film.id_regista che è chiave esterna verso la tabella regista e
permette di associare ciascun film con i dati relativi al regista memorizzati nell’omonima tabella.
La clausola SELECT riporta i nomi degli attributi da mostrare nel risultato dell’interrogazione. Gli
attributi provengono dalla tabella film e dalla tabella regista, per questo motivo è buona norma
prefiggere il nome della tabella al nome dell’attributo per esplicitarne la provenienza ed evitare
possibili ambiguità nel caso in cui il medesimo nome di attributo sia usato in tabelle diverse. La
clausola FROM riporta le tabelle coinvolte nell’interrogazione (film e regista). La clausola definisce
come le tuple delle tabelle considerate debbano essere poste in relazione. A tale scopo, viene
utilizzata un’operazione chiamata JOIN.
Join di tabelle
Ai suoi albori a metà degli anni Novanta, il Web era formato in gran parte da cosiddette pagine
statiche, cioè documenti HTML che venivano mostrati identici a tutti gli utenti che facevano
richiesta di visualizzazione. Con il passare del tempo e con l'evoluzione dei linguaggi per il web, si
iniziò a sentire l'esigenza di rendere dinamici i contenuti, ovvero di fare in modo che la medesima
pagina, detta pagina dinamica, potesse mostrare contenuti personalizzati in base allo specifico
utente che ne faceva richiesta. Tipicamente, una pagina dinamica è basata su una o più
interrogazioni a una base di dati e le condizioni di selezione di tali interrogazioni dipendono dallo
specifico utente che invoca la visualizzazione della pagina.
Una pagina dinamica è realizzata combinando codice in linguaggio HTML (come per le pagine
statiche) con istruzioni espresse mediante un linguaggio di programmazione. Esistono diversi
linguaggi di programmazione per definire pagine web dinamiche. Uno dei più noti e diffusi è PHP.
Il linguaggio PHP
PHP nasce nel 1994, ad opera di Rasmus Lerdorf, come una sequenza di comandi finalizzati a
facilitare il compito dei programmatori nella personalizzazione delle pagine web. In seguito, queste
sequenze di comandi, dette macro, furono riscritte ed ampliate per comunicare con i database.
Un esempio reale
Come esempio di pagina dinamica il cui contenuto è generato a partire da una base di dati,
consideriamo la pagina web mostrata nella Figura 6.1.
L’esempio riporta una pagina web del sito IMDB (Internet Movie DataBase) e mostra la
funzionalità di ricerca avanzata di un film. Dal menù in corrispondenza della voce Genres (Generi),
l’utente seleziona i generi di film a cui è interessato e l’applicazione restituisce l’elenco dei film
relativi ai generi selezionati. L’utente, senza saperlo, ha eseguito un’interrogazione sulla base di dati
del sistema IMDB. L’interrogazione è stata predisposta dai programmatori responsabili dello
sviluppo del sito, i quali hanno preconfezionato un insieme di possibili interrogazioni sulla base
delle informazioni che possono essere consultate dagli utenti. In questo esempio, il sito web IMDB
funge da strumento mediante il quale l’utente interagisce con la base di dati senza conoscerne lo
schema e senza conoscere linguaggi specifici per le basi di dati.
Con riferimento all’esempio di Figura 6.1, la pagina web che contiene il risultato della richiesta
dell’utente è mostrata in Figura 6.2 e riporta l’elenco dei film di genere Commedia e Horror.
Questa pagina è dinamica in quanto generata al momento della richiesta dell’utente in base ai
parametri da lui selezionati (commedia e horror). La richiesta di visualizzazione della pagina
comporta l’esecuzione della query sulla base di dati e il risultato viene utilizzato per costruire il
contenuto della pagina che viene infine mostrato all’utente. Sia chiaro che la richiesta di
visualizzazione della medesima pagina effettuata selezionando generi diversi produce risultati
diversi e quindi pagine web diverse.
I1 - RETI DI CALCOLATORI
Comunicare in rete
Con il termine rete di calcolatori si intendono due o più dispositivi connessi tra loro, i quali sono in
grado di scambiare informazioni. La connessione può avvenire attraverso differenti tipi di
infrastrutture fisiche, come ad esempio cavi o onde radio.
rappresenta un singolo nodo della rete e quella di ciascun appartamento diventa una sottorete della
rete condominiale.
La comunicazione tra due o più nodi può avvenire in due modalità: sincrona e asincrona. In una
comunicazione sincrona i nodi coinvolti sono connessi nel medesimo momento alla rete e
scambiano informazioni (detti pacchetti) tra loro. Un esempio di comunicazione sincrona è la
telefonata. Al contrario, una comunicazione asincrona non richiede la connessione alla rete di tutti i
nodi nel medesimo momento. Un nodo invia un messaggio sapendo che i destinatari potrebbero non
essere connessi e questi ultimi riceveranno il messaggio in seguito, al momento della loro
connessione alla rete. Un esempio di comunicazione asincrona è la posta elettronica (email).
Nelle comunicazioni Point-to-Point lo scambio di messaggi avviene fra coppie di elaboratori non
direttamente connessi. Per trasmettere un pacchetto dal mittente al destinatario, è spesso necessario
passare attraverso numerosi nodi intermedi, i quali hanno il compito di inoltrare il messaggio ai
nodi successivi finché il pacchetto arriva al nodo destinatario. Spesso fra due nodi della rete
esistono numerosi percorsi alternativi lungo i quali si potrebbe effettuare la trasmissione. Per questo
motivo, i nodi fanno uso di algoritmi di instradamento (routing) che hanno lo scopo di individuare il
miglior percorso per fare arrivare ciascun messaggio fino al nodo destinatario.
Nelle reti Multicast, il mittente inserisce (incapsula) gli indirizzi dei destinatari nel contenuto di
ciascun pacchetto da trasmettere. I pacchetti si propagano nella rete passando tra i nodi che la
costituiscono. Ciascun nodo della rete esamina i pacchetti in transito e valuta se il suo indirizzo
figura tra quelli dei destinatari. In caso negativo, il pacchetto viene ignorato e inoltrato ai successivi
nodi della rete. In caso positivo, il pacchetto viene elaborato per la lettura prima di essere inoltrato
ai successivi nodi.
Tipologie di rete
Le reti di calcolatori possono essere classificate in base all’estensione dell’area geografica che
interessano:
• Local Area Network (LAN): è una rete locale, cioè una rete di elaboratori localizzati in
un’area circoscritta come ad esempio un appartamento o una sede aziendale. La connessione
può avvenire via cavo, tipicamente utilizzando lo standard Ethernet, o via radio. In
quest’ultimo caso si può parlare di WLAN (Wireless Local Area Network).
• Metropolitan Area Network (MAN): è una rete metropolitana, cioè una rete che
interconnette LAN geograficamente vicine tra loro. Questo tipo di rete permette di collegare
nodi troppo distanti per essere collegati mediante LAN, come ad esempio due sedi cittadine
Ed eccezione della rete GAN, ciascuna tipologia di rete può essere considerata una sottorete della
tipologia successiva (vedi Figura I1.1). Di conseguenza, ogni sottorete costituisce un sistema
autonomo (AS, autonomous system).
In questo contesto, è comune definire internet una generica rete di calcolatori ottenuta mediante
interconnessione (internetworking) di reti o sottoreti diverse. Il termine internet non deve essere
confuso con il termine Internet (con i maiuscola) che indica la ben nota rete GAN mondiale che
offre, tra gli altri, i servizi di posta elettronica e WWW (World Wide Web).
Gateway e VPN
E’ possibile che due nodi appartenenti a sistemi autonomi diversi vogliano comunicare. A tale
scopo, ciascun AS è dotato di un apparato denominato gateway con due precise funzionalità. Da un
lato, il gateway di un certo AS ha il compito di instradare i pacchetti provenienti dai nodi di AS
verso i nodi esterni appartenenti a un diverso AS. Dall’altro lato, il gateway riceve i pacchetti
provenienti da altri AS e li instrada verso i nodi del proprio AS. In altri termini, la comunicazione
fra due AS avviene attraverso i rispettivi gateway.
Inoltre, due nodi appartenenti a sistemi autonomi diversi che vogliono comunicare possono
utilizzare una VPN (Virtual Private Network). L’obiettivo di una VPN è simulare una
comunicazione LAN anche se i nodi coinvolti sono collocati in sottoreti diverse e potenzialmente
distanti geograficamente. Le VPN sono diffusamente utilizzate in ambito aziendale e consentono di
accedere a un elaboratore fisicamente collocato in una sede da una postazione remota come ad
esempio il proprio appartamento o una seconda filiale dell’azienda.
Come in una comunicazione tra individui, due nodi della rete che devono comunicare necessitano di
un mezzo di comunicazione fisico e uno o più protocolli che permettono lo scambio di messaggi.
In una rete, i protocolli governano tutti gli aspetti che interessano la comunicazione tra nodi, come
ad esempio la regolamentazione del flusso di informazioni da un nodo all’altro e la gestione delle
congestioni di rete. Ad esempio, consideriamo uno smartphone che fa richiesta di visualizzazione di
una pagina web. La richiesta viene inviata all’elaboratore (server) che ospita la pagina web
richiesta. Il server inserisce la richiesta in una coda di messaggi in attesa di risposta. Al momento
opportuno, il server elabora la richiesta, preleva la pagina web di interesse e la invia in risposta allo
smartphone per la visualizzazione. Affinché la comunicazione sia efficace, è necessario che la
struttura (formato) dei messaggi sia comprensibile a tutti i nodi coinvolti. In
definitiva, “un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o più entità
in comunicazione, così come le azioni intraprese in fase di trasmissione e/o di ricezione di un
messaggio o di un altro evento” (Ross, Kurose).
La comunicazione in rete coinvolge numerosi protocolli ognuno dei quali ha il compito di trattare
uno specifico aspetto. I protocolli sono organizzati in livelli, il cui numero è variabile per tipo e
funzione a seconda della tipologia di rete considerata. In ogni caso, è sempre rispettato il principio
generale per il quale lo scopo di un livello è fornire servizi ai livelli superiori, nascondendo loro i
dettagli relativi al servizio svolto. Questo permette al protocollo di un dato livello di non
considerare i problemi specifici della comunicazione che sono risolti dai protocolli di livello
sottostante. Con un’analogia, l’organizzazione dei protocolli di rete non è differente
dall’organizzazione delle attività necessarie per la scrittura e l’invio di una lettera cartacea. Infatti,
l’individuo che scrive l’indirizzo del destinatario della lettera (protocollo di alto livello) può
ignorare completamente gli aspetti relativi all’invio e al recapito della missiva. Il mittente sa che il
sistema postale (protocolli di livello inferiore) farà in modo che la lettera arrivi al destinatario
nascondendogli i dettagli relativi alla trasmissione, quali ad esempio gli uffici postali che saranno
coinvolti, il portalettere che prenderà in carico la lettera e il mezzo di trasporto che sarà usato per la
consegna.
Per offrire un’organizzazione di riferimento dei livelli e dei protocolli di rete, è stato definito il
modello OSI - Open System Interconnection - (comunemente chiamato ISO/OSI, per via del nome
dell’ente che lo ha ideato, International Organization for Standardization) che consiste
in un'architettura logica disegnata su 7 livelli (vedi Figura I1.2).
Nel modello OSI, il più alto livello è detto livello applicativo, nel quale si genera il messaggio che
si vuole inviare e si riceve il messaggio da leggere. Per contro, il livello più basso è detto livello
fisico e definisce il mezzo di trasporto (ad esempio, cavo di rete e onde radio).
Tra i nodi di una internet, distinguiamo i calcolatori (host) i quali offrono servizi, e gli apparati
comunicazione i quali sono costituiti da linee di trasmissione (via cavo o via radio) ed elementi di
commutazione (router).
Un router è un elaboratore dedicato a funzioni di instradamento dei messaggi tra due reti alle quali
appartiene contemporaneamente. Consideriamo l’esempio di una rete domestica. Il router è il
dispositivo della rete domestica attraverso il quale i messaggi vengono instradati verso la rete
esterna (la rete del fornitore di servizio, cioè la rete dell’ISP - Internet Service Provider). Allo stesso
tempo, il router è il dispositivo della rete esterna attraverso il quale i messaggi vengono instradati
verso i nodi della rete domestica.
Alla luce di questa definizione, potrebbe sembrare che router e gateway realizzino il medesimo
servizio. Più precisamente, un gateway è resposabile della traduzione di protocollo quando due
dispositivi appartenenti a reti diverse devono comunicare e il protocollo utilizzato non coincide. Al
contrario, un router è semplicemente un dispositivo che permette l'instradamento e lo scambio di
messaggi tra due reti adiacenti. Spesso le funzioni svolte dal gateway e dal router sono assolte da un
medesimo dispositivo che viene comunemente chiamato router.
Frequentemente, i protocolli utilizzati dalle due reti che devono comunicare coincidono e il servizio
di traduzione svolto dal gateway non è necessario. In questo caso, le sole funzioni di instradamento
offerte dal router sono sufficienti a garantire lo scambio di messaggi tra due reti.
Essere connessi ad una rete, come ad esempio la rete Internet, comporta alcuni pericoli dai quali è
necessario proteggersi. Gli elementi ai quali prestare attenzione sono essenzialmente tre:
Per evitare intrusioni in una rete, è possibile utilizzare un software denominato Firewall. Tramite
regole, il Firewall può essere usato per bloccare specifiche tipologie di traffico sia provenienti
dall’esterno della rete sia provenienti dai nodi appartenenti alla rete. Anche se il Firewall è un
valido strumento di protezione, esso non garantisce la protezione da tutte le minacce provenienti da
dispositivi esterni alla rete, come ad esempio gli attacchi DoS (Denial of Service).
I2 - LA RETE INTERNET
Come accennato nelle precedenti sezioni, Internet è la più grande rete telematica mondiale e
connette attualmente alcune centinaia di milioni di elaboratori. Internet si avvale di apparati e
collegamenti di vario tipo (fibre ottiche, collegamenti satellitari, onde radio) mediante i quali è in
grado di connettere dispositivi, cioè nodi/host, di varia natura appartenenti a sottoreti diverse.
Per capire le basi di Internet è istruttivo ripercorrere brevemente la storia. Nel 1957, in risposta al
lancio dello Sputnik da parte dell'Unione Sovietica, gli Stati Uniti si danno l'obiettivo di stimolare la
crescita in ambito scientifico e tecnologico. Nel 1958 costituirono ARPA, una nuova agenzia per lo
sviluppo tecnologico in grado di riunire sotto un'unica direzione tutte le attività gestite all'interno
del Dipartimento di Difesa. Tra i vari progetti promossi da ARPA, nel 1966 venne dato avvio ad
ARPANET con l'obiettivo di sviluppare una rete di calcolatori efficiente che potesse essere
utilizzata per aumentare la produttività dei sistemi di calcolo attraverso la condivisione delle risorse.
L'idea centrale del progetto era di evitare che i calcolatori fossero connessi per mezzo di un'unica
unità centrale di smistamento, poiché questa sarebbe stata inevitabilmente un punto di debolezza
dell'intero sistema. Al contrario, disponendo di percorsi alternativi, la trasmissione poteva passare di
volta in volta attraverso i percorsi liberi.
Inizialmente nel progetto vennero coinvolti quattro centri di calcolo universitari, nel 1969 venne
effettuata la prima trasmissione. Nel 1972, fu svolta la prima dimostrazione pubblica del
funzionamento della rete ARPANET durante la quale furono connesse quaranta macchine
distribuite lungo l'intero territorio degli Stati Uniti.
Per rendere effettiva la comunicazione in rete di macchine differenti, era necessario assicurare un
metodo standard di trasmissione e ricezione delle informazioni. Questi standard di trasmissione
furono chiamati protocolli. Durante gli anni '80, l'International Standard Organization (ISO) si
occupò di definire uno standard per la connessione di sistemi aperti in grado di colloquiare gli uni
con gli altri (modello OSI). Con il termine standard si identifica un insieme di criteri e procedure
che formano un modello predefinito da seguire.
Grazie a questo lavoro fu possibile offrire una base comune per lo sviluppo di standard per
l'interconnessione di sistemi e fornire un modello di riferimento con cui confrontare le varie
architetture di rete. È bene notare come tale modello non includa la definizione di protocolli
specifici (definiti successivamente, in documenti separati).
Nel 1982, lo sviluppo dei protocolli TCP e IP gettò le basi per la realizzazione dell’attuale rete
Internet. Nel 1984, nel Regno Unito fu sviluppata JANET, una rete in grado di collegare università
e organizzazioni scientifiche e militari che venne a sua volta collegata ad ARPANET. Nel corso
degli anni ’80 la tendenza a collegare tra loro reti differenti si consolidò e nel 1990 cessò l’esistenza
di ARPANET. In parallelo si affermò sempre più Internet, una collezione di reti che comunicavano
tra loro adottando i protocolli TCP/IP. In particolare, furono due i fattori decisivi alla crescita
esplosiva di Internet. Il primo fu il rapido incremento di personal computer adottati sia da utenti
privati che da aziende, un fenomeno che riguardò il mondo intero. I pc divennero sempre meno
costosi e sempre più potenti mentre i modem, i dispositivi necessari per collegare i computer alla
rete telefonica, migliorarono le loro prestazioni permettendo di condividere sia testo che immagini e
suoni. Il secondo fattore chiave fu l’introduzione del World Wide Web che permise agli utenti della
rete Internet di ritrovare le informazioni di interesse in modo intuitivo ed immediato sia che fossero
composte da testo o da testo e immagini allo stesso tempo.
Ad oggi la rete Internet è certamente la principale fonte di informazioni e di intrattenimento, sia per
le imprese che per gli utenti privati.
Comunicazione client/server
Come è facile intuire, al fine di usufruire dei differenti servizi presenti sulla rete Internet, i vari host
della rete devono comunicare tra loro. A tale scopo, sono stati progettati due principali
approcci: client-server e peer-to-peer.
I sistemi client-server sono un'evoluzione dei sistemi basati sulla condivisione delle informazioni
tra due calcolatori. L'idea è che vi siano nella rete alcuni host che offrono un servizio (ad esempio
un sito Web, anche se non è l’unico servizio erogato su Internet) e altri host che si collegano ad essi
per usufruire di questo servizio; i primi sono denominati server, i secondi sono denominati client. È
importante notare che client e server possono essere calcolatori dotati delle stesse capacità di
calcolo e comunicazione: la loro distinzione è solo funzionale, ossia legata al ruolo che svolgono
nella comunicazione. La presenza di un server permette a un certo numero di client di condividerne
le risorse, lasciando che sia il server a gestire gli accessi, evitando i conflitti tipicamente presenti nei
primi sistemi informatici.
Riassumendo, con il termine client è indicata una componente che accede ai servizi o alle risorse di
un'altra componente, detta server. In questo contesto si può quindi parlare di client riferendosi
all'hardware o al software. Un elaboratore collegato tramite la rete ad un server che richiede uno o
più servizi è un esempio di client hardware. Il programma di posta elettronica installato sul proprio
dispositivo che si connette a un servizio centralizzato per scaricare (download) i messaggi ricevuti e
visualizzarli è un esempio di client software. Sono sempre più numerosi gli strumenti software
(come ad esempio web, email, database) che sono suddivisibili in una componente client (installata
su un elaboratore client) ed una componente server (installata su un elaboratore server). Ad
esempio, le App installate sui dispositivi mobili (smartphone e tablet) dispongono spesso di una
componente client che accede a risorse disponibili su un server a partire da una richiesta dell'utente
(unita spesso ad informazioni contestuali del dispositivo, come ad esempio la posizione) per poi
visualizzare i risultati sullo schermo del dispositivo. Si pensi ad esempio alle App che forniscono
suggerimenti rispetto alla strada meno trafficata da percorrere per arrivare a una destinazione o
rispetto al ristorante migliore nelle vicinanze.
Comunicazione peer-to-peer
Al contrario del modello client/server, in una rete peer-to-peer (P2P), due o più host (detti peer)
interagiscono mediante comunicazione alla pari. Un peer non fornisce di per sè un servizio, ma ha
la funzione di server e di client allo stesso tempo. L’idea è che ciascun nodo della rete offra agli
altri i servizi e i contenuti che intende condividere e contemporaneamente possa accedere ai servizi
e ai contenuti condivisi dagli altri nodi. Il principale beneficio dei sistemi peer-to-peer è
la scalabilità, in quanto una determinata risorsa può essere messa a disposizione da più nodi allo
stesso tempo e chi ne fa richiesta ha maggiori possibilità di ottenerla in breve tempo. Per contro, il
principale limite dei sistemi peer-to-peer è la maggiore complessità dei meccanismi di ricerca
(lookup) delle risorse di interesse, che spesso comporta maggiori latenze nel reperimento. Infatti, le
operazioni di ricerca richiedono l'interrogazione di uno o più nodi (peer) della rete per determinare
quale o quali nodi possano fornire la risorse di interesse. Solo dopo aver determinato i potenziali
fornitori della risorsa sarà possibile avviare un contatto per eseguirne l'acquisizione (download). Nei
sistemi client/server, queste operazioni di lookup sono più efficienti poichè i fornitori di contenuti
(server) sono definiti a priori. Il servizio di lookup nei sistemi client/server viene svolto dai motori
di ricerca, i quali sono in grado di restituire un elenco di server in grado di fornire risorse utili
rispetto a una richiesta dell'utente espressa mediante parole chiave di interesse.
Un celebre sistema per lo scambio di file basato sul modello peer-to-peer è BitTorrent.
I protocolli di Internet
Rispetto al modello OSI presentato in precedenza, il funzionamento della comunicazione sulla rete
Internet è affidata a un sottoinsieme di quattro livelli corrispondenti a Applicazione, Trasporto, Rete
e Accesso alla Rete (Figura I2.1). Il modello a quattro livelli adottato su Internet è talvolta chiamato
modello TCP/IP o UDP/IP dal nome dei protocolli di livello Trasporto e Rete che caratterizzano lo
scambio di messaggi sulla rete Internet. Nel modello TCP/IP, il livello Applicazione è responsabile
di fornire i servizi di livello utente come ad esempio il servizio web o il servizio di posta elettronica
e riassume le funzionalità fornite dai livelli Applicazione, Presentazione e Sessione del modello
OSI. Il livello Trasporto viene realizzato mediante i protocolli TCP o alternativamente UDP. La
scelta tra TCP e UDP dipende dal servizio di livello Applicazione che viene invocato. Il livello Rete
è denominato livello Internet ed è realizzato mediante il protocollo IP (Internet Protocol). Il livello
Accesso alla Rete è il livello che si occupa della trasmissione, cioè il mezzo fisico, cavo o segnale
radio, che permette la comunicazione. Nel modello TCP/IP, il livello Accesso alla Rete è
responsabile delle funzionalità offerte dai livelli Collegamento e Fisico del modello OSI.
Nella vastità e nella complessità della rete Internet, individuare un percorso che unisca e metta in
comunicazione due host che necessitano di scambiare messaggi non è banale. Il livello Internet del
modello TCP/IP si occupa di trovare il percorso per la trasmissioni di pacchetti tra due host tramite
il protocollo IP (Internet Protocol). Per fare ciò utilizza due importanti funzioni:
Al fine di identificare gli host della rete Internet, ogni nodo possiede indirizzo IP univoco.
L’indirizzo IP viene assegnato dal gestore di ciascuna sottorete in modo da evitare conflitti sull’uso
del medesimo indirizzo. Esistono due versioni di indirizzi IP: IPv4 e IPv6 che si differenziano per la
lunghezza degli indirizzi assegnati e dunque per la numerosità dei dispositivi ai quali è possibile
assegnare un indirizzo.
Un indirizzo IPv4 è lungo 32 bit, il che permette di rappresentare 2^32 indirizzi differenti
(permettendo di indirizzare circa 4 miliardi di dispositivi diversi). Questi indirizzi sono
rappresentati in notazione decimale e suddivisi in 4 blocchi separati da un punto. Ciascun blocco ha
lunghezza 8 bit e può rappresentare numeri decimali nell’intervallo 0-255. Un indirizzo IPv6 è
lungo 128 bit e può quindi indirizzare un numero molto superiore di dispositivi rispetto a IPv4. Per
questo motivo, IPv6 sta progressivamente sostituendo IPv4 nell’indirizzamento dei dispositivi
appartenenti alla rete Internet.
Il protocollo di trasporto TCP (Transfer Control Protocol) consente lo scambio di messaggi tra due
nodi (host) basato su una connessione affidabile. I due nodi interessati stabiliscono la connessione
mediante una procedura di handshake (stretta di mano) costituita da una sequenza di pacchetti
mirati a concordare le modalità che caratterizzeranno il successivo scambio di messaggi. La
connessione TCP viene utilizzata dai due nodi per comunicare e scambiare dati appartenenti al
livello Applicazione. Il protocollo TCP è dotato di meccanismi di ri-trasmissione e verifica di
consegna dei pacchetti mirati a garantisce la consegna dei messaggi: il protocollo è in grado di
verificare che ciascun messaggio in partenza da un nodo mittente su una connessione TCP sia
ricevuto dal nodo destinatario all'altro capo della connessione. A tal scopo, ogni pacchetto TCP
possiede due campi molto importanti:
Una volta terminata lo scambio di messaggi tra i due nodi, la connessione TCP viene rilasciata, cioè
chiusa. Il protocollo TCP è adatto a situazioni dove l'affidabilità della trasmissione costituisce un
aspetto cruciale, come ad esempio il servizio di navigazione web e la posta elettronica.
Il protocollo di trasporto UDP (User Datagram Protocol) consente lo scambio di messaggi tra due
nodi basato su una connessione non affidabile. UDP non richiede che due nodi stabiliscano una
connessione per poter comunicare e quindi non è prevista alcuna procedura di handshake. Il
vantaggio di UDP rispetto a TCP è che la comunicazione tra i nodi è più semplice e snella: non
sono previsti meccanismi di ri-trasmissione o verifica di consegna dei pacchetti. Per contro, UDP
non è in grado di garantire la consegna dei messaggi da un nodo mittente a un nodo destinatario.
Il protocollo UDP è adatto a situazioni dove l'affidabilità della trasmissione non costituisce un
aspetto cruciale, come ad esempio la telefonia su Internet (VoIP - Voice Over IP) e lo streaming di
file multimediali.
Il livello Applicazione riguarda l'erogazione dei numerosi servizi offerti dalla rete Internet. Questi
servizi comunicano con il livello Trasporto mediante un’interfaccia denominata socket, la quale si
occupa dell’invio dei messaggi dal livello Applicazione al livello Trasporto e viceversa.
Su un calcolatore connesso alla rete Internet, in un certo istante, possono essere attivi numerosi
servizi a livello Applicazione, i quali dovranno condividere i medesimi livelli Trasporto, Rete e
Acceso alla Rete essendo attivo un unico canale di trasmissione. Il ruolo di una socket è smistare le
comunicazioni che i vari servizi hanno con i diversi interlocutori. Ciascun servizio di livello
Applicazione è associato a un numero di porta univoco che permette alle socket di gestire
molteplici comunicazioni contemporaneamente anche se associate a servizi diversi a livello
Applicazione.
Nella rete Internet sono presenti differenti servizi a cui si può fare accesso e di cui il più noto è il
World Wide Web (comunemente chiamato Web o WWW). Ideato dal CERN nel 1989, il web offre
un metodo standard per condividere informazioni su Internet. I punti di forza che lo hanno reso così
importante sono:
Mentre il web è un servizio della rete internet, il protocollo di rete a livello applicativo del Web si
chiama HTTP.
Altri famosi servizi sono la posta elettronica e il file sharing (condivisione file).
La posta elettronica (e-mail) è un metodo standard utile a inviare e ricevere messaggi in modalità
asincrona. Il protocollo utilizzato per l’invio dei messaggi attraverso la posta elettronica si chiama
SMTP. Invece i protocolli utili alla ricezione dei messaggi sono IMAP, il quale lascia i messaggi
sul server, e POP3, il quale scarica i messaggi in arrivo in locale eliminando la copia sul server.
ll file sharing può essere di tre tipi: peer-to-peer, client/server o un ibrido tra i due. Il file sharing
permette la condivisione tra più nodi di un determinato numero di contenuti. Un nodo abilitato
all’accesso a questi contenuti, può quindi fare richiesta di scaricamento del file e leggere le
informazioni sul proprio computer locale. I più comuni protocolli di file sharing sono FTP
(disegnato per la comunicazione client/server) e BitTorrent (usato nelle reti peer-to-peer).
HTTP - descrizione
mediante il quale il server invia la pagina web richiesta al dispositivo client che visualizzerà la
pagina tramite un browser.
HTTP - funzionamento
Un utente utilizza il protocollo HTTP (o HTTPS) ogni volta che richiede la visualizzazione di una
pagina web. Digitando l'indirizzo di una pagina web in un browser o cliccando su un link all'interno
di una pagina web visualizzata, il browser compone una richiesta HTTP e la invia al server dove è
memorizzata la pagina web richiesta. Il server interpreta la richiesta e risponde con un messaggio
HTTP di risposta contentente la pagina web richiesta. Ogni messaggio HTTP è costituito da
un'intestazione (header) e un corpo (body). Nel messaggio di richiesta HTTP, l'intestazione contiene
l'indirizzo della pagina richiesta, ovvero i dati necessari a individuare la collocazione della pagina
web sulla rete (cioè il server presso il quale la pagina è ospitata). Nel messaggio di richiesta, il
corpo della richiesta HTTP contiene eventuali parametri associati alla richiesta. Nel messaggio di
risposta HTTP, l'intestazione contiene informazioni relative al server che ha risposto e al tipo di
risposta (ad es., richiesta andata a buon fine, errore). Il corpo della risposta HTTP contiene la pagina
effettivamente richiesta (risorsa) che il browser del dispositivo client mostrerà all'utente.
Nome di Dominio
Per contattare un server è necessario conoscere l'indirizzo IP che lo identifica sulla rete. Tale
indirizzo è una sequenza di 32 bit che può essere rappresentato mediante 4 blocchi di numeri
decimali nell'intervallo 0-255 separati da punto. Ad esempio, l'indirizzo IP del server di Wikipedia è
[Link]. Ovviamente, per un utente, memorizzare un indirizzo IP è piuttosto scomodo e
innaturale. Il Nome di Dominio ([Link] nel nostro esempio) è stato introdotto per
affiancare l'indirizzo IP e consentire agli utenti di avere nomi significativi e facilmente associabili a
un server senza dover necessariamente conoscere il corrispondente indirizzo IP.
Nel nome di un dominio possono essere impiegati caratteri alfanumerici (lettere e numeri) e tratti (i
cosiddetti hyphen - ). Non sono quindi ammessi i caratteri speciali come spazi, tratti bassi (i
cosiddetti underscore _ ) e segni di interpunzione, quali ad esempio punti esclamativi e punti di
domanda.
Ciascun nome di dominio è costituito da sotto-domini, cioè nomi separati dal punto (dot). I sotto-
domini sono organizzati gerarchicamente dal pù generale al più specifico procedendo da destra a
sinistra in ordine inverso rispetto al normale verso di lettura. In altre parole, un nome di dominio
termina sempre con un sotto-dominio di primo livello preceduto da uno o più sotto-domini di livello
superiore.
Tipicamente, un nome di dominio è composto da tre sotto-domini così articolati (nella descrizione
si consideri l'esempio del nome di dominio [Link]):
URI e URL
URI (Uniform Resource Identifier) è uno standard per rappresentare l'indirizzo univoco e completo
di una risorse sulla rete Internet (come ad esempio una pagina web, un documento di testo o
un'immagine). Una URI è composta dal nome di dominio del server presso il quale la risorsa è
ospitata e dal percorso (path) sul disco del server che permette di raggiungere la risorsa.
Una URL (Uniform Resource Locator) è una tipologia di URI che oltre a identificare la risorsa
descrive anche il protocollo da utilizzare per reperirla.
[Link]
in cui:
GET E POST
In un messaggio di richiesta HTTP utilizzato per accedere e visualizzare una risorsa web, è
possibile che il richiedente voglia aggiungere alcuni parametri mirati a qualificare ciò che intende
ottenere in risposta.
Ad esempio, per visualizzare una pagina web potrebbe essere necessario che l'utente sia tenuto a
fornire le proprie credenziali (username e password). In questo caso, il messaggio di richiesta HTTP
del richiedente dovrà fornire anche le credenziali oltre all'indirizzo (URL) della pagina web di
interesse.
Il protocollo HTTP offre due meccanismi per consentire a un utente di inviare parametri in un
messaggio di richiesta HTTP. Il primo meccanismo è GET e permette di inserire i parametri in coda
alla URL della pagina richiesta. Con il metod GET, i parametri sono inseriti nell'intestazione del
messaggio di richiesta HTTP. Il secondo meccanismo è POST e permette di inserire i parametri nel
corpo del messaggio di richiesta HTTP.
DNS
Quando un nome di dominio viene assegnato a un host, come può un qualsiasi nodo della rete
Internet conoscere l’indirizzo IP corrispondente a tale nome?
Il DNS (Domain Name System) è un servizio di livello Applicativo che permette la conversione di
nomi di dominio nei corrispondenti indirizzi IP. Questo servizio è realizzato mediante una base di
dati distribuita su numerosi server. Quando si interroga un server DNS per conoscere l'indirizzo IP
di un nome di dominio di interesse, il servizio è organizzato in modo gerarchico e i vari server DNS
comunicano fra di loro fino a risalire all’indirizzo IP del nome di dominio richiesto.
Un Autonomous System (AS) accede alla rete Internet tramite un Internet Service Provider (ISP).
Esistono differenti tipi di ISP, ad esempio residenziali (come Telecom, Vodafone e Fastweb),
aziendali, e dedicati a specifiche attività commerciali o istituzionali (università, aeroporti, etc.).
Tramite l’ISP, si definisce la tecnologia di trasferimento dei dati (ADSL, Fibra Ottica) e la banda
massima di trasferimento dati concessa al richiedente in scaricamento - download - e caricamento -
upload.
Ogni ISP utilizza il protocollo IP e si conforma alle regole e alle convenzioni previste da questo
protocollo. Di conseguenza, nel momento in cui un host si collega alla rete Internet, l’ISP fornisce a
quest’ultimo un indirizzo IP, generalmente tramite protocollo DHCP (Dynamic Host Configuration
Protocol). Questo protocollo consente di fornire in maniera automatica un indirizzo IP a un host che
fa richiesta di accesso alla rete. Quest'ultimo manda una richiesta, chiamata DHCP discover, in
broadcast alla rete. Quando il server DHCP riceve la richiesta, esso risponde con l'indirizzo IP che
gli sarà assegnato e potrà utilizzare. Con DHCP, l'indirizzo IP sarà assegnato al dispositivo fintanto
che tale dispositivo rimane collegato alla rete. Una volta scollegato, l'indirizzo IP può essere
assegnato a un altro dispositivo. Questo significa che il medesimo indirizzo IP può essere utilizzato
da dispositivi diversi in momenti diversi. Ovviamente, non è possibile che due dispositivi utilizzino
il medesimo indirizzo IP contemporaneamente. E' dunque possibile che un dispositivo riceva un
diverso indirizzo IP in due diverse sessioni di accesso alla rete poichè DHCP assegna
dinamicamente l'indirizzo IP in base alla disponibilità in uno specifico momento.
Riassumendo, normalmente quando un ISP permette l’accesso alla rete a un determinato host, usa il
protocollo DHCP per fornirgli l’indirizzo IP. Esiste anche un meccanismo alternativo a DHCP per
assegnare un indirizzo IP a un host che accede alla rete. E' possibile richiedere al proprio ISP
l'assegnazione di un indirizzo IP statico. Questo significa che l'host avrà sempre il medesimo
indirizzo ogni volta che accede alla rete. Tale scolta è particolarmente adatta quando l'host deve
fornire uno o più servizi ad altri nodi della rete ed è quindi necessario che abbia un proprio nome di
dominio e sia facilmente ed intuitivamente rintracciabile dagli altri nodi della rete.
Pagine HTML
HTML utilizza dei tag (marcatori) per definire le regole di formattazione che il browser deve poi
interpretare per comporre la pagina web. Ad ogni tag di apertura è associato il corrispettivo tag di
chiusura usualmente identificato dal simbolo “/”. Ad esempio <title>Guida introduttiva a
HTML</title> delimita il testo “Guida introduttiva a HTML” entro l’apertura e la chiusura del
marcatore “title”. I tag possono essere innestati o combinati tra loro quando è necessario applicare
più stili di formattazione al medesimo testo. Ad esempio <b><i>World Wide
Web</i></b> istruisce il browser in modo che la scritta “World Wide Web” sia visualizzata in
grassetto corsivo. A tutto il testo compreso tra il tag di apertura e quello di chiusura il browser
applica lo stile di formattazione indicato dal tag.
HTML impone ai documenti una struttura entro la quale collocare tutti i singoli elementi. Di seguito
è presentata la composizione della struttura di base di una qualsiasi pagina web.
<!DOCTYPE html>
<html>
<head>
<title> La mia prima pagina web </title>
</head>
<body>
<p> Questa è la mia prima pagina in html. </p>
</body>
</html>
Di tutto il codice scritto sopra, il browser mostrerà a video solamente il testo compreso tra gli
elementi <body> e </body>, ovvero:
Dove <!DOCTYPE html> ha il solo compito di informare il browser che si tratta di un documento
HTML. <html> è l’inizio del codice html vero e proprio, tutto ciò che sarà posto all'interno di
questo documento e fino al relativo tag di chiusura sarà inteso come struttura del codice
HTML. <head> testata o head del documento, in questa sezione trovano posto tutti i tag che
impartiscono direttive al browser quali: titolo, comandi Meta, richiami ai fogli di stile,
script. <body> è il corpo del documento nel quale vanno inseriti dati multimediali, testo, form,
tabelle, link e quant'altro faccia parte di html.
Inizialmente, il Web era costituito solo da testo ed era piuttosto noioso. Fortunatamente, non passò
molto tempo prima che fosse aggiunta la possibilità di incorporare immagini (e altri tipi di contenuti
più interessanti) nelle pagine Web. Il tag <img>, ad esempio, è usato per inserire una singola
immagine. Si tratta di un elemento vuoto, ovvero che non ha un contenuto testuale nè un tag di
chiusura, e richiede la presenza dell’attributo src per poter funzionare. Quindi, ad esempio, se
l'immagine è chiamata [Link] ed è collocata nella stessa directory della pagina HTML, la si
inserisce con <img src="[Link]">. Se l'immagine si trova nella sottodirectory images della
directory in cui si trova la pagina HTML, allora si dovrà scrivere <img src="images/[Link]">.
Con la diffusione della banda larga, veloce abbastanza da supportare la trasmissione di un maggior
numero di contenuti, si è iniziato ad inserire nelle pagine web anche contenuti video e audio. Nei
primi tempi, l'HTML non aveva la capacità di integrare video e audio, così, per poterlo fare, sono
diventate popolari delle tecnologie proprietarie come Flash (e più tardi Silverlight). Tuttavia, questo
tipo di tecnologie non sono ben integrate con HTML/CSS e presentano problemi di sicurezza e di
accessibilità. Fortunatamente, nel 2007, la specifica HTML5 aggiunge gli
elementi <video> e <audio>. Analogamente a quanto fatto per le immagini, il tag <video> permette
di aggiungere un contenuto video in modo molto semplice, ovvero con
L'elemento <audio> funziona esattamente come l'elemento <video> ed un esempio tipico potrebbe
apparire così:
I CSS, ovvero Cascading Style Sheet, sono visti come lo strumento designato per arricchire
l’aspetto visuale ed estetico di una pagina web e al tempo stesso separare l’informazione relativa
allo stile grafico degli elementi HTML dal ruolo strutturale che tali elementi hanno. E’ possibile
infatti applicare il medesimo foglio di stile a diverse pagine di uno stesso sito per ottenere uno stile
di impaginazione uniforme senza dover riscrivere il codice della pagina HTML. L’adozione di fogli
di stile permette di ottenere diversi effetti visivi, come ad esempio il font e il colore preferito per il
testo così come usare un sistema di interlinea ovvero distanziare gli elementi di una pagina con un
efficace meccanismo di gestione dei margini.
Esistono tre modi per utilizzare i CSS, che si combinano e integrano tra loro:
• direttamente in linea,
• ad inizio pagina a stile incorporato,
• utilizzando un foglio di stile esterno.
CSS in linea
Ad esempio:
CSS incorporato
È adottato in quei casi in cui elementi diversi utilizzano il medesimo stile. In questo caso le
istruzioni non sono più inserite all’interno del singolo elemento bensì all’inizio della pagina,
dichiarate dagli elementi <style> e </style> posti all’interno della sezione <head></head>. Questo
metodo può essere combinato con il precedente. In tal caso le istruzioni definite in linea hanno la
priorità.
Ad esempio:
<head>
<style>
p{
color: red;
}
</style>
</head>
CSS esterno
In questo caso si definisce un file esterno a quello html a cui tutte le pagine che lo desiderano
possono fare riferimento. Il file esterno conterrà tutte le istruzioni che tipicamente si indicano nella
sezione definita dagli elementi <style></style> e la sua importazione avviene ad inizio pagina
all’interno della sezione <head></head>. Risulta evidente come tutto ciò sia comodo qualora si
desideri utilizzare lo stesso stile su diverse pagine. Anche in questo caso, usare un foglio di stile
esterno è un metodo assolutamente compatibile con i due precedentemente illustrati.
Ad esempio:
<head>
<link rel="stylesheet" href="[Link]">
</head>
p{
color: red;
}
I siti web statici presentano contenuti di sola ed esclusiva lettura. Solitamente vengono aggiornati
con una bassa frequenza ed è necessario un programmatore che modifichi il codice della pagina
HTML (più eventuali fogli CSS e script Javascript) e che lo carichi sul server. Un sito statico ha
sempre un numero finito di pagine, esattamente quantificabile. A scanso di equivoci bisogna
precisare che sito web statico non significa privo di “animazioni” ma ci si riferisce a semplici
pagine ipertestuali, contenenti testo e immagini, collegate le une alle altre da pulsanti e link di
navigazione. Se l’obiettivo è creare un semplice sito web, senza la necessità di aggiornamenti
costanti e non si ha l’esigenza di permettere all’utente finale di interagire con la pagina web allora il
sito web statico è la scelta migliore per una serie di motivi:
Per tutti questi motivi, e soprattutto in seguito all’aumentare di attacchi ai siti web dinamici, negli
ultimi anni i generatori di siti statici stanno catturando sempre di più l’interesse della comunità
web. Questi sono strumenti in grado di creare codice HTML e CSS partendo da file scritti in
linguaggi più facili e intuitivi, come il Markdown.
I siti web dinamici poggiano su un’applicazione scritta in linguaggio server-side (tipicamente PHP
o [Link]) che provvede a generare e pubblicare le pagine del sito al momento della loro richiesta
da parte del browser. Questo permette ai siti web dinamici di variare il contenuto della pagina sulla
base delle scelte fatte dell’utente, offrendo quindi un elevato livello di interazione. Normalmente,
ma non sempre, le informazioni sono estratte da una base di dati che le contiene. Una volta creata
la struttura che dinamicamente produce le pagine, i contenuti possono essere inseriti e variati senza
conoscere tecniche di programmazione di siti web. È possibile in questo modo aggiungere o
rimuovere pagine, immagini e contenuti autonomamente ricorrendo ad un sistema di gestione dei
contenuti (CMS: Content Management System) quali Wordpress, Joomla, Drupal ecc.
La scelta di usare un sito web statico è poco comune in quanto ogni modifica al sito richiede
l’intervento di una persona con adeguate competenze tecniche del linguaggio HTML. Al contrario,
la scelta di usare un sito web dinamico è quella più diffusa in quanto è l’unico in grado di garantire
prestazioni adeguate per raggiungere gli obiettivi desiderati, quali ad esempio:
• Debbano essere elaborati dei dati forniti dall’utente: le informazioni vengono mostrate
all’utente dinamicamente o in base ai parametri con i quali è configurata la richiesta (ad
esempio, si potrebbe decidere di pubblicare tutti gli articoli in sconto, tutti gli eventi
accaduti in una certa città in un preciso giorno, ecc…);
• Siano necessarie modifiche all’aspetto grafico del sito in qualsiasi momento e con poco
know-how: l’aspetto grafico di ogni pagina è facilmente editabile, senza dover ricorrere alla
scrittura di istruzioni CSS. Spesso i CMS includono un editor di testo che aiuta a
concentrarsi sul contenuto da scrivere, anziché alla definizione dei fogli di stile.
I browser web sono software usati dai client per accedere alle informazioni del World Wide Web
residenti sui server web. Per fare ciò, il browser deve essere in grado di trovare i contenuti ricercati
in Internet; è quindi fondamentale definire regole certe sulle modalità in cui un browser cerca e
successivamente ottiene le informazioni di interesse. Da qui l’importanza del protocollo HTTP. I
browser, quindi, sono essenzialmente programmi capaci di generare una richiesta HTTP quando
ricerchiamo una pagina Web e interpretare il codice HTML della pagina ottenuta in risposta,
visualizzando i suoi contenuti. I browser maggiormente utilizzati ad oggi, in ordine di diffusione
sono: Google Chrome, Safari, Mozilla Firefox, Internet Explorer ed Opera.
Tuttavia, al giorno d’oggi, pensare ad un browser web come un semplice interprete e visualizzatore
di siti web è decisamente riduttivo. Con l’avvento delle web application (o web app) interi
pacchetti applicativi sono stati resi fruibili attraverso l’utilizzo di un browser web. Ad aiutare questo
sviluppo è stata l’introduzione in HTML5 del supporto esplicito alla creazione di applicazioni che
sono caricate come pagine Web, ma possono archiviare dati localmente e continuare a funzionare
offline. Esempi di web application sono i servizi di webmail per la gestione della casella di posta
elettronica o software per ufficio (elaboratori di testi, fogli di calcolo online e strumenti di
presentazione) ma possono anche includere applicazioni più avanzate come i software CAD,
l'editing video fino ad arrivare ai software per i registratori di cassa
I6 - I motori di ricerca
Tramite il protocollo HTTP e utilizzando il browser si può accedere a testi, immagini, audio e
video contenuti all’interno del sito selezionato. Se l’URL non è conosciuto a priori dall’utente, è
possibile avvalersi dell’ausilio di un motore di ricerca (Google, Bing, Yahoo!, ecc.) per trovare i
siti che trattano gli argomenti di interesse.
I motori di ricerca scandagliano continuamente l’intero World Wide Web utilizzando dei
programmi chiamati web crawler (o spider o robots) che si occupano di visitare automaticamente
gli URI registrati nel database del motore e ricorsivamente seguire tutti gli indirizzi contenuti nei
documenti analizzati memorizzandone una loro copia. Dopo l’analisi delle pagine, a seconda di
criteri che variano da motore a motore, alcune di esse vengono inserite nel database e nell’indice del
motore di ricerca.
In questa sezione vogliamo mostrare in che modo utilizzare un motore di ricerca. In particolare,
prenderemo in considerazione Google che senza ombra di dubbio è uno dei più usati. Quando si
esegue una interrogazione, Google visualizza solo le pagine che contengono tutti i termini
ricercati, aggiungendo automaticamente l’operatore booleano “and”. Per limitare ulteriormente la
ricerca, è sufficiente quindi aggiungere altri termini. Nel caso si volesse escludere una parola dalla
ricerca basta inserire il segno “-” preceduto da uno spazio.
E’ bene sottolineare come tutti i risultati trovati contengano una o più sintesi della pagina Web, che
mostrano il contesto in cui vengono utilizzati i termini ricercati, in modo tale da rendere più chiaro
all’utente se la pagina trovata è quella desiderata o meno.
Esempio di interrogazione
Facciamo una semplice interrogazione inserendo come termini da cercare “la statale” . I risultati
restituiti sono quelli mostrati nella Figura 6.1 ordinati da Google per rilevanza.
Ricerca avanzata
Oltre all’interfaccia di base Google offre anche una modalità di ricerca avanzata. Andando
nell’apposita sezione del sito, accessibile dalla homepage sotto Impostazioni > Ricerca avanzata, si
accede ad una pagina più elaborata della precedente che offre maggiori possibilità di
personalizzazione della richiesta (Figura 6.2).
Sono presenti cinque campi per inserire i termini a seconda che si vogliano ritrovare tutte le parole,
l’intera frase, anche un solo termine tra quelli inseriti, escludere delle parole dalla ricerca oppure
cercare attraverso degli intervalli numerici che diventano date o unità di misura. Aggiungendo
2013 e 2015 alla precedente ricerca otterremo un elenco che, oltre a rispettare i criteri già inseriti,
sarà limitato a pagine contenenti i numeri 2013, 2014 e 2015.
E’ possibile inoltre selezionare la lingua in cui devono essere scritte le pagine restituite,
il formato di quanto ritrovato, ad esempio solo file di tipo .pdf, selezionare le pagine in base a
quando sono state aggiornate e ancora indicare in quale posizione della pagina (titolo, corpo,
indirizzo URL o link) ricercare i termini desiderati. Si possono addirittura cercare tutte le pagine
collegate o correlate ad uno specifico sito web.
Per stabilire la rilevanza di un sito ogni motore di ricerca sfrutta propri algoritmi di
classificazione che controllano, per esempio, quante volte le parole chiave vengono ripetute, quanti
link riceve quel documento, in quali punti della pagine sono poste le parole chiave, quanti siti del
database contengono link verso quella pagina, o quante volte un utente ha visitato quel sito dopo
una ricerca. I risultati ritornati sono così ordinati in ordine decrescente ed eventualmente suddivisi
in gruppi logici (cluster).
Talvolta i motori di ricerca sul web forniscono anche risultati sponsorizzati, ovvero mostrano in
maggiore evidenza nelle pagine di risultato dei motori di ricerca (SERP: Search Engine Result
Page), siti web di aziende che pagano per piazzarsi tra i primi risultati quando si cercano termini
(detti keyword o parole chiave) che sono in relazione all’ambito di competenza dell’azienda stessa.
Il processo di indicizzazione
Il lavoro di un motore di ricerca può essere suddiviso in fasi: un primo momento in cui gli
spider trovano le pagine e ne memorizzano una copia; segue una fase di indicizzazione in cui la
pagina viene prelevata dal database per essere analizzata e scomposta nelle diverse parole che la
compongono. Per ogni parola viene creato un piccolo registro che riporta varie informazioni:
l’occorrenza (numero di ripetizioni nella pagina), la dimensione del carattere, il marcatore HTML in
cui è inclusa oltre che, naturalmente, il codice identificativo della pagina (page IN). Ognuno di
questi piccoli registri viene poi salvato nella memoria di uno specifico server.
Il processo di interrogazione
A questo punto, quando un utente inserisce la propria richiesta, sono individuate le parole che
compongono la stessa ed effettuata un’interrogazione presso i server che contengono i registri
appropriati. Alle pagine individuate viene attribuito un punteggio (ranking), strettamente
dipendente dai criteri di base adottati dal motore di ricerca per valutare le occorrenze delle parole.
E’ facile capire come diversi motori producano risultati differenti pur analizzando la medesima
interrogazione; la grandezza del database, la frequenza di aggiornamento, le opzioni di ricerca
fornite e la tecnologia utilizzata sono tutti fattori che incidono profondamente sul risultato finale.
Gli algoritmi adottati dai diversi motori di ricerca nella maggior parte dei casi non sono mai
completamente conosciuti e molti dei parametri che incidono sulla stima della pertinenza e il
relativo peso associato vengono nascosti. Alcune cose però sono note come il fatto che un ruolo
importante lo giocano le parole chiave che caratterizzano un sito e il posizionamento delle stesse
all’interno delle pagine. Altro parametro molto importante preso in considerazione dalla maggior
parte delle tecnologie adottate dai motori di ricerca sono i link da e verso una pagina web (Inbound
Sapere come i motori di ricerca considerino i link fra le pagine Internet è quindi importante per
conoscerli un po' di più e comprendere sempre meglio i motivi che “muovono” le pagine all'interno
dei loro database.
Google è stato uno dei pionieri nell'utilizzo dei collegamenti ipertestuali per la valutazione
dell'importanza di un sito web. Grazie alla tecnologia chiamata PageRank, Google riesce oggi a
fornire risultati altamente pertinenti stabilendo in modo del tutto automatizzato una misurazione
oggettiva dell'importanza di ogni singola pagina web presente nel suo database. PageRank utilizza
un'equazione di circa 500 milioni di variabili e 2 miliardi di termini per creare una struttura dei link
della rete (Figura 6.4) che poi utilizza come strumento di organizzazione e valutazione. Questo
sistema non esegue semplicemente un conteggio dei link verso un certo sito a partire da pagine già
indicizzate (cioè la Link Popularity) e un conteggio dei link dal sito stesso verso queste pagine, ma
valuta anche la qualità dei link, ovvero la pertinenza rispetto all'argomento trattato nella nostra
pagina.
Il fattore principale nella determinazione del PageRank sono i link provenienti dall'esterno, quelli
più difficili da ottenere e mantenere se il nostro sito non presenta contenuti validi e facilmente
accessibili. Risulta di conseguenza determinante tessere una rete di relazioni con altri siti del
settore, evitando di associarsi a siti mal strutturati e che a loro volta hanno un numero troppo esiguo
di link dall'esterno.
Gli algoritmi alla base dei motori di ricerca necessitano di aggiornamenti periodici sia per
migliorare il servizio offerto agli utilizzatori, sia per scongiurare eventuali manomissioni che
potrebbero modificare i posizionamenti delle pagine. Attualmente, infatti, i motori di ricerca come
Google, non solo restituiscono i risultati delle query inserite, ma personalizzano anche la ricerca e
suggeriscono informazioni pertinenti che potremmo trovare utili.
Evoluzioni di PageRank
Google Panda è il nome ufficiale di uno dei più importanti aggiornamenti dell’algoritmo della
compagnia di Mountain View, che nasce per filtrare dai più di 100 miliardi di documenti presenti
nel suo indice i content farm. Questi sono responsabili della presenza di pagine brevi con contenuti
di bassa qualità prodotte in elevato numero al solo fine di inserire paid ads (ovvero annunci a
pagamento). Google Penguin, in azione dal 2012, si pone sulla scia di Panda e si focalizza
prevalentemente nel cercare contenuti nei quali ritiene siano state adottate le due seguenti tattiche di
spam:
• link spam - Consiste nel migliorare il ranking aumentando il numero di backlink innaturali
(link fuori contesto che puntano verso un sito) provenienti da siti di bassa qualità o con
penalizzazioni
• keyword stuffing - Si tratta di una tattica SEO (Search Engine Optimization) che consiste
nel ripetere più volte nel testo una specifica keyword o long tail keyword al fine di favorirne
il posizionamento nei risultati di ricerca.
Infine, Google Hummingbird è stato progettato per comprendere concetti e relazioni tra keyword
in modo simile ad un umano ed è, nel 2013, la prima volta che l’algoritmo viene così pesantemente
riscritto. Si tratta di un importante passo avanti verso la realizzazione di un motore di ricerca
semantico.
Consideriamo la seguente query conversazionale, ovvero una richiesta formulata come una
domanda espressa in tono colloquiale :
SEO
La Search Engine Optimization (SEO), ovvero l'ottimizzazione dei motori di ricerca, è il processo
che aumenta la qualità e la quantità del traffico web aumentando la visibilità di un sito Web o di
una pagina Web agli utenti di un motore di ricerca. Il SEO si riferisce al miglioramento dei risultati
non pagati (noti come risultati "naturali" o "organici") ed esclude il traffico/visitatori diretti e
l'acquisto di posizionamenti a pagamento. La SEO può indirizzare diversi tipi di ricerche, tra cui
ricerca di immagini, ricerca di video, ricerca di articoli scientifici, ricerca di notizie e motori di
ricerca verticali specifici di un settore.
La SEO comporta alcune modifiche al design e al contenuto del sito Web che rendono il sito più
“attraente” per un motore di ricerca. In passato, ottimizzare il sito Web per i motori di ricerca
significava ottimizzare per l'algoritmo e i robot di ricerca. Si trattava di un
processo prevalentemente tecnico che si concentrava esclusivamente sulla creazione di collegamenti
e sul modo in cui il sito Web era strutturato. Ciò ha permesso alle persone di provare a manipolare il
sistema con tecniche che ora verrebbero considerate spam. Come visto nella sezione precedente,
Google ha risolto questo tipo di problemi quando ha rilasciato gli aggiornamenti Panda e Penguin.
Questi aggiornamenti hanno penalizzato i siti Web con contenuti "spammy" e siti Web che hanno
utilizzato strategie di costruzione di link non organiche e pertinenti al contenuto del sito, ma
progettate invece per manipolare l'algoritmo di ricerca. Oggi, ottimizzare il sito Web per i motori di
ricerca significa ottimizzare per gli utenti che desideri trovino il tuo sito Web (in altre parole, il
tuo pubblico di destinazione). L'obiettivo dei motori di ricerca, infatti, è quello di fornire agli utenti
i migliori risultati da abbinare alle loro query di ricerca. Fornendo i migliori contenuti per
rispondere a tali query di ricerca, si aumentano notevolmente le possibilità di posizionamento nella
SERP (Search Engine Results Page). Detto questo, la SEO è ancora importante per garantire che i
bot di Google possano capire i contenuti della pagina e indicizzarli correttamente.
Se si sta cercando di ottimizzare per parole chiave competitive, i contenuti di alta qualità potrebbero
non essere sufficienti e alcuni passaggi devono essere presi in considerazione per migliorare il
posizionamento del sito web:
• una buona struttura di collegamento interna, che aiuti gli utenti a navigare nel sito e aiuta
i robot di ricerca a comprendere la gerarchia delle pagine;
• più veloce è il caricamento di una pagina, meglio è. Un sito Web veloce offre un'esperienza
utente migliore, riduce la frequenza di rimbalzo e può in definitiva portare ad un aumento
nel posizionamento;
• più della metà delle ricerche su Google viene eseguita su smartphone e tablet. Se il sito
non è ottimizzato per i dispositivi mobili, è meno probabile che il motore di ricerca lo mostri
nella pagina dei risultati su tali dispositivi. Ciò significa che si perderebbero circa il 60% di
tutti gli utenti possibili.
Web 2.0
Il Web 2.0 è un termine ombrello che raggruppa riferimenti sia sul piano dello sviluppo della
tecnologia e degli standard, sia sul piano dello sviluppo dei modelli di business e dell'user
experience applicati al Web. In generale il termine indica l'evoluzione delle applicazioni web verso
strumenti che facilitano la partecipazione alla costruzione dei contenuti da parte degli utenti.
Temporalmente è difficile da situare, si colloca tra la nascita dei primi blog (1994) all'affermarsi di
Wikipedia (2001), Youtube (2005) e altri servizi simili. Per descrivere questa evoluzione può essere
utile concentrarsi sulle evoluzioni avvenute in specifici contesti. Assistiamo, ad esempio, al
passaggio dai siti web personali ai blog; dai sistemi di content management ai wiki; dal link come
strumento di aggregazione delle risorse tramite riferimento al mash-up come strumento di
aggregazione per inclusione e fusione delle risorse. Nel marketing l'affermarsi di questo paradigma
comporta il passaggio dall'approccio stickiness, mantenere l'utente legato a sito web,
all'approccio syndication, far giungere all'utente solo le informazioni a cui attribuisce valore. La
differenza con il Web 1.0 sta nell'approccio con il quale gli utenti si rivolgono al Web, che passa
fondamentalmente dalla semplice consultazione (seppure supportata da efficienti strumenti di
ricerca, selezione e aggregazione) alla possibilità di contribuire popolando e alimentando il Web
con propri contenuti. Le tecnologie che hanno sostenuto questo processo sono rappresentate
dai Web Services, le API e i protocolli REST.
Per Web Service si intende un software in grado di comunicare con altre componenti connesse in
rete tramite lo scambio di dati in un formato standard; tipicamente uno specifico
vocabolario XML definito per tale applicazione. Ad esempio gli orari dei treni sono accessibili
tramite Web Service consentendo ad un programma che seguisse il protocollo definito dal Web
Service di accedere ai dati. Per API si intende un insieme di procedure rese disponibili da un
software per accedere alle sue risorse o ai suoi servizi. Queste procedure vengono definite dal
fornitore di un servizio, per consentire ad altri programmatori di usufruire del proprio servizio (e
quindi di diffonderlo). Ad esempio attraverso le API di Google Maps è possibile configurare la
specifica visualizzazione di una mappa e includerla all'interno della propria pagina Web.
Per protocolli REST si intendono protocolli di interscambio dei dati che si basano sui soli metodi
resi disponibili dal protocollo HTTP. Questo tipo di protocolli descrivono i servizi come risorse
web, tipicamente documenti XML o JSON.
Web 3.0
Ogni volta che si acquista qualcosa su Amazon, l'algoritmo del sito Web esaminerà gli altri articoli
acquistati dalle persone che hanno acquistato il nostro prodotto e ce li consiglia. Il sito Web,
dunque, sta imparando da altri utenti quali possono essere le nostre scelte preferite e le utilizza per
consigliarci ciò che ci potrebbe piacere. In sostanza, il sito Web stesso sta imparando e diventando
più intelligente. Questa, in poche parole, è la stessa filosofia alla base del Web 3.0. Il Web 1.0 era
principalmente guidato dal contenuto proveniente dall'azienda o dall'istituzione per i suoi clienti. Il
Web 2.0 ha portato le cose un po’ oltre, consentendo agli utenti di caricare e condividere i propri
contenuti sul sito Web stesso. Il Web 3.0 consente alle applicazioni e ai siti Web online di ricevere
informazioni sul Web, elaborarle semanticamente e di fornire nuove informazioni agli utenti.
Il Web semantico insieme all'intelligenza artificiale sono i due cardini del web 3.0. Il Web
semantico insegnerà al computer cosa significano i dati e questo potrà evolversi in intelligenza
artificiale in grado di utilizzare tali informazioni. L'idea principale è quella di creare una ragnatela
di conoscenza su Internet che possa aiutare a comprendere il significato delle parole per generare,
condividere e collegare i contenuti attraverso la ricerca e l'analisi. Grazie ai dati strutturati, il Web
3.0 contribuirà a una maggiore connettività tra i dati. Di conseguenza, l'esperienza dell'utente si
evolve in un ulteriore livello di connettività che sfrutta tutte le informazioni disponibili.
La Rete semantica
La semantica è lo studio del significato delle parole. In particolare, studia la relazione tra parole,
frasi e simboli e ciò che rappresentano (il loro significato). Pertanto, la rete semantica è una rete
significativa. Il web semantico non parla di parole chiave e backlink, ma di relazioni tra
concetti (o cose). Invece di guardare alle stringhe stesse, guarda ai concetti dietro di loro e alle loro
proprietà. Esistono vocabolari e grammatiche per la rete semantica molto simili al linguaggio
umano. Si utilizzano per formare dichiarazioni logiche su un sito web che i robot dei motori di
ricerca possono raccogliere, analizzare ed elaborare. Ciò che rende la ricerca semantica diversa
dalla ricerca normale è che le regole della logica possono essere applicate alle informazioni. Se un
motore di ricerca trova un'affermazione logica sul sito Web di Barack che dice "Barack è amico di
Michelle" e qualcuno fa una ricerca di "amici di Michelle", allora, anche se il sito Web di Michelle
non menziona Barack, il motore di ricerca semantico ci farà sapere che Barack si considera amico
di Michelle.
I dati strutturati
Dall'esempio precedente vediamo che i motori di ricerca possono derivare nuove conoscenze dai
dati con un alto grado di organizzazione. Possiamo chiamarli dati significativi o strutturati.
Sebbene la comunità di Internet non sia unanime riguardo al modo migliore per contrassegnare i
dati strutturati, in ogni caso, sono necessari due elementi:
Google, Microsoft, Yahoo e Yandex nel 2011 hanno pensato bene di creare un enorme vocabolario
chiamato [Link]. Nel sito ufficiale sono rappresentati tutti gli schemas (tipi di dato) che
vengono riconosciuti dai motori di ricerca e questo vocabolario è quello utilizzato dalla maggior
parte dei dati strutturati
Per quanto riguarda la grammatica, non c'è una risposta breve. Tre sono gli attori
principali: RDFa (Resource Description Framework in Attributes), JSON-LD (JSON for Linking
Data) e Microdata.
RDFa
RDFa e Microdata sono concettualmente molto simili. Entrambi consentono di riutilizzare i dati
HTML visibili. In particolare, RDFa è una estensione di HTML5 che supporta i dati strutturati
introducendo attributi di tag HTML che corrispondono al contenuto visibile all'utente che si vuole
descrivere per i motori di ricerca. RDFa è comunemente usato in entrambe le sezioni intestazione e
corpo della pagina HTML. Ad esempio:
JSON-LD
JSON-LD, al contrario, duplica i dati per utenti e motori di ricerca inserendoli in <head> o
<body> di una pagina come <script>. L’esempio precedente, diventerebbe:
<script type="application/ld+json">
{
"@context": "[Link]
"@type": "SportsTeam",
"name": "San Francisco 49ers",
"member": {
"@type": "OrganizationRole",
"member": {
"@type": "Person",
"name": "Joe Montana"
},
"startDate": "1979",
"endDate": "1992",
"roleName": "Quarterback"
}
}
</script>
Microdata
I Microdata sono, infine, una specifica HTML open-community utilizzata per annidare i dati
strutturati all'interno del contenuto HTML. Come RDFa, utilizza gli attributi del tag HTML per
denominare le proprietà che si desiderano esporre come dati strutturati. Vengono in genere utilizzati
nel corpo della pagina, ma possono essere utilizzati anche nell'intestazione.
L'Internet of Things (IoT) si riferisce a un gran numero di "cose" che sono connesse a Internet in
modo che possano condividere dati con altre “cose”: applicazioni IoT, dispositivi connessi,
macchine industriali e altro ancora. I dispositivi connessi a Internet utilizzano sensori integrati per
raccogliere dati e, in alcuni casi, agire su di essi. I dispositivi e le macchine connesse IoT possono
migliorare il modo in cui lavoriamo e viviamo. Gli esempi di Internet of Things del mondo reale
vanno da una casa intelligente che regola automaticamente il riscaldamento e l'illuminazione a una
fabbrica intelligente che monitora le macchine industriali per cercare problemi, quindi si regola
automaticamente per evitare guasti. Il termine "Internet of Things" è stato coniato dall'imprenditore
Kevin Ashton, uno dei fondatori dell’Auto-ID Center presso il MIT. Ashton faceva parte di un team
che ha scoperto come collegare oggetti a Internet tramite un tag RFID. Ha usato per la prima volta
la frase "Internet of Things" in una presentazione del 1999 - e da allora è rimasta tale.
Tuttavia, definendo Internet delle cose come "semplicemente il momento in cui più" cose o oggetti
"erano connessi a Internet rispetto alle persone", Cisco Systems ha stimato che l'IoT è "nato" tra il
2008 e il 2009, con il rapporto cose/persone in crescita da 0.08 nel 2003 a 1.84 nel 2010.
L'architettura IoT
L'architettura del sistema IoT, nella sua visione semplicistica, è composta da tre livelli:
• Livello 1: Dispositivi,
• Livello 2: Edge Gateway
• Livello 3: Cloud.
I dispositivi includono elementi di rete, come i sensori e gli attuatori presenti nelle apparecchiature
IoT, in particolare quelli che utilizzano protocolli come Modbus, Zigbee o protocolli proprietari, per
connettersi a gli Edge Gateway.
Un Edge Gateway è costituito da sistemi di aggregazione dei dati dei sensori che forniscono
funzionalità come la pre-elaborazione dei dati e la protezione della connettività al cloud
Il livello finale include l'applicazione cloud creata per IoT usando l'architettura dei microservizi,
che di solito sono poliglotta e intrinsecamente sicuri usando HTTPS/OAuth. Include vari sistemi di
database che memorizzano i dati dei sensori e presenta un sistema di accodamento e messaggistica
di eventi che gestisce le comunicazioni che avvengono in tutti i livelli.