Informatica per le discipline umanistiche 2 - lezione 2 - Strumenti per elaborare simboli Questa lezione verte su quali sono i simboli che si possono elaborare per mezzo dei computer. 8 simbolo simbolo Ricordo che, in informatica, il termine “simbolo” ha un significato molto più debole che nelle discipline umanistiche: per “simbolo” intendiamo un qualunque segno, come ad esempio una cifra, senza alcun significato associato, come succede invece per il leone, a cui associamo per simbolismo il concetto di “coraggio”. 8 Avere delle semplici cifre su un computer sembra un poʼ limitativo rispetto a quello che solitamente vediamo succedere sui computer intorno a noi. Jonathan Franzen, ad esempio, ha scritto un intero romanzo sul suo computer. E, sicuramente, sui computer degli studenti del corso si svolgono almeno queste tre attività: i social network, lʼascolto di musica, e la visione di film. Ragioniamo. Premessa 1: i computer sono basati sul modello di calcolatore proposto da Turing e non sono altro che esecutori automatici di operazioni su simboli. Premessa 2: con i computer scriviamo romanzi, navighiamo nei social network, ascoltiamo musica, guardiamo film. 8 Conclusione: scrivere romanzi, navigare nei social network, ascoltare musica, guardare film sono operazioni su simboli. Il ragionamento non fa una piega, ma la conclusione potrebbe lasciare perplessi. Per capire meglio la conclusione del ragionamento precedente, occorre fare più chiarezza sul legame che cʼè tra tutte queste attività e i simboli elaborati da un computer. 8 codifica Tale legame è dato da una codifica. Codifica: corrispondenza biunivoca tra le entità di un particolare dominio e lʼinsieme dei numeri naturali oppure un suo sottoinsieme. Una corrispondenza si dice biunivoca quando ci sono tanti elementi da una parte quanti dallʼaltra, e ogni elemento viene messo in corrispondenza con uno e un solʼaltro elemento. Codifica: corrispondenza biunivoca tra le entità di un particolare dominio e lʼinsieme dei numeri naturali oppure un suo sottoinsieme. In una codifica, gli elementi presi in considerazione possono essere di qualunque tipo da una parte… Codifica: corrispondenza biunivoca tra le entità di un particolare dominio e lʼinsieme dei numeri naturali oppure un suo sottoinsieme. …ma dallʼaltra gli elementi devono essere dei numeri naturali. Codifica: corrispondenza biunivoca tra le entità di un particolare dominio e lʼinsieme dei numeri naturali oppure un suo sottoinsieme. In altre parole, una codifica consiste nel far corrispondere a un elemento di nostro interesse uno e un solo numero naturale, come ad esempio avviene per gli studenti universitari, che ricevono un numero naturale che li caratterizza in maniera univoca: la matricola. Questo non vuol dire che lo studente stesso può venire elaborato da un computer, naturalmente, ma che almeno riusciamo a creare un riferimento allo studente che il computer può trattare. 0 1 2 3 Vediamo come si può creare una codifica per i testi. 8 La codifica dei testi si basa sulla codifica dei caratteri che li compongono: se ad ogni lettera e ogni segno di punteggiatura faccio corrispondere un numero, ottengo una corrispondenza biunivoca tra lettere e numeri. Perché tale corrispondenza sia utile, deve essere nota e condivisa da tutti coloro che vogliono usare un computer per scambiarsi i testi così codificati. La presente tabella mostra una nota codifica: UTF-8 UTF-8 Universal Character Set Transformation Format – 8bit Per poter essere elaborato da un computer, il testo di “Freedom” di Franzen deve essere codificato sotto forma di sequenza di numeri. Ciascun numero corrisponde in maniera unica a un carattere del testo. 108927350456345347653845098753094857039 845628765039417538945734589349058340958 447826296204237862386437826178162372762 130487627634780123640237462837467637643 764208701828736347565805656582760278635 082716508217365827136502781356082173656 573802783562387460215606098465246574568 038047569345830948563094563074560384756 038476501837465087314650138746507834560 384756037486578346574658734506183745601 837465018376456758403876573480187364571 088573465783104587134653178451103874650 Vediamo come si può costruire una codifica anche i social network come Facebook. 8 Ciò che vediamo sul nostro computer di un social network non è altro che un insieme di testi e immagini. Ci siamo già occupati dei testi, quindi ora concentriamo la nostra attenzione sulle immaigini. Guardando una foto molto dettagliata di dolci bergamaschi, viene difficile da pensare che ci possa essere una corrispondenza con i numeri naturali. Guardando unʼimmagine a bassa risoluzione di SuperMario, si può invece intuire come può essere codificata una foto. pixel: picture element Nellʼimmagine di SuperMario, si possono riconoscere elementi quadrati di base, caratterizzati dalle posizione che occupano, e dal loro colore: i pixel. Anche questa foto è fatta di pixel. Semplicemente non li vediamo perché sono troppo piccoli. In questa immagine ce ne sono ben 12 milioni. pixel (1/12000000) La codifica delle immagini si basa sui pixel che la compongono. Come il testo viene considerato come una sequenza di caratteri per essere codificato… …così consideriamo una foto come una sequenza di pixel. Se riusciamo a codificare un pixel, possiamo codificare unʼintera immagine. 0 1 2 codifica della posizione del pixel Abbiamo detto che la prima caratteristica di un pixel è la sua posizione. Se immaginiamo di inserire lʼimmagine in piano cartesiano, ecco che siamo in grado di individuare la posizione di pixel tramite le sue coordinate numeriche 0 1 2 codifica del colore? 0 1 2 Se immaginiamo di organizzare i colori in una tabella, allo stesso modo dei pixel siamo in grado di associare a ciascun colore un valore numerico, corrispondente alle coordinate del colore nella tabella. I pixel che compongono SuperMario, quindi, possono venire codificati in base alla loro posizione ed al loro colore, permettendo di esprimere lʼimmagine, una sequenza di pixel, sotto forma di una sequenza di numeri. 567872872983093948748974987498748467101 187627862876783546354137676129123621352 413651243873614983502385746754779090939 423847293847283478237492384723894728347 298374283647165155155625465463546354376 473658475984759824757671511019824928493 849340283918091740375474783474736478364 734637843940109134813409463074560384756 038476501837465087314650138746507834560 384756037486578346574658734506183745601 837465018376456758403876573480187364571 088573465783104587134653178451103874650 Si procede in maniera analoga per la foto da 12 milioni di pixel. Non è affatto un caso che le foto più dettagliate occupino più spazio nel computer: ci sono semplicemente più pixel codificati. 108927350456345347653845098753094857039 845628765039417538945734589349058340958 447826296567346374637463349348989810101 029493848374873487394873481761764739487 398473948738471893749183748374837483743 814718397491384791834781347139847183947 318478134718347387483478347384738748738 473483748734873847384738478347834738478 347834791837498137483483138746507834560 384756037486578346574658734506183745601 837465018376456758403876573480187364571 088573465783104587134653178451103874650 0 1 2 Come si sarà notato, nella tabella che permette la codifica dei colori, non tutte le sfumature sono presenti. Basta prendere due quadrati adiacenti e immaginare di prendere il colore intermedio: esso non è chiaramente presente nella tabella, quindi non è un colore codificato. Questo vuole dire che solo una piccola parte dei colori presenti nello spettro dellʼarcobaleno può essere codificato. Numerosissime sfumature (infinite, per essere precisi) rimangono tagliate fuori dalla codifica. Dʼaltronde non è pensabile di avere una tabella di dimensioni infinite per accomodare le infinite sfumature dei colori. Questo è il problema della conversione dallʼ“analogico” al “digitale”: la codifica di fenomeni fisici comporta sempre una perdita di informazione. Volendo fare un parallelo con la matematica, i fenomeni fisici sono caratterizzati da sfumature infinitesimali analoghe ai numeri reali, mentre le codifiche sono corrispondenze con i numeri naturali, che, pur essendo infiniti, sono comunque molto minori di quelli reali e non riescono a fungere da riferimenti alle suddette sfumature. Analogico vs. Digitale Eʼ il discorso delle persone che dicono che guardare una foto non potrà mai eguagliare la visione del vero. In realtà, tridimensionalità a parte, le codifiche attuali di colori arrivano a catturare milioni di sfumature, molte delle quali indistinguibili allʼocchio umano. Quindi, seppur con perdite, le codifiche ci permettono di avere delle approssimazioni più che buone della realtà. Abbiamo menzionato prima che la foto dettagliata dei dolci dà luogo a una sequenza codificata di numeri molto più lunga di quella relativa al disegno molto semplice di SuperMario. Le lunghezze delle codifiche naturalmente dipendono da che cosa viene codificato: maggiore è lʼinformazione da codificare, più lungo è il risultato, e infatti la foto dei dolci (con tutti i dettagli e le sfumature dati dai 12 milioni di pixel) sicuamente occupa più spazio nel computer che il disegno di SuperMario (che, di fatto, è una sequenza di 16 x 12 pixel). Compressione Vi sono, però, modi diversi di descrivere la sequenza di pixel codificati, e, se scegliamo in maniera accorta, possiamo ottenere una descrizione più breve della stessa sequenza, in modo da farle occupare meno spazio sul computer, e anche risparmiare tempo nel trasmetterla da un computer allʼaltro. Chiamiamo “compressione” un modo per ottenere sequenze di simboli che descrivono una particolare informazione in maniera più breve del semplice elenco delle codifiche di ciascun elemento che la compone. pixel bianco, pixel verde, pixel verde, pixel giallo, pixel giallo, pixel giallo, pixel giallo, pixel verde, pixel verde, pixel verde, pixel verde, pixel bianco 1 pixel bianco, 2 pixel verdi, 4 pixel gialli, 4 pixel verdi, 1 pixel bianco La descrizione dellʼimmagine di SuperMario, ad esempio, può essere compressa descrivendone i pixel come mostrato nel secondo riquadro rosso. Qualunque tipo di informazione che può essere codificato, può essere compresso. Il rapporto di compressione, ossia quanto riusciamo a sintetizzarne la descrizione, dipende dal contenuto dellʼinformazione. (Immaginate di dover descrivere un rettangolo 16 x 12 tutto bianco. Come fareste?) Vediamo ora come funziona la codifica che permette di avere musica sul computer. 8 ampiezza timbro frequenza I suoni, e quindi anche la musica, sono dovuti a vibrazioni dellʼaria (o di un qualsiasi mezzo*) che si propagano sotto forma di onde e che, colpendo i nostri timpani, danno luogo a ciò che noi percepiamo con le nostre orecchie. Le onde sonore sono caratterizzate da unʼampiezza (che determina lʼintensità del suono: più è ampia lʼonda più è forte il suono), una frequenza (che determina lʼaltezza della nota: note alte corrispondono a frequenze alte), e da una forma (che determina il timbro del suono: la mia voce, quella di Giovanna, pianoforte, violino, piatti…) *nel vuoto i suoni non si propagano Campionamento La codifica dei suoni si basa sulla codifica delle onde che li producono, a sua volta basata su una procedura chiamata campionamento. Il campionamento consiste nel considerare lʼonda che costituisce il suono solo in determinati istanti temporali. Immaginate di descrivere lʼonda del suono (con la sua ampiezza, frequenza, e forma) in un piano cartesiano, e di considerare solo determinati punti di tal curva. A tali punti corrispondono, nel piano cartesiano, delle precise coordinate, il cui valore numerico viene usato come codifica del suono “campionato”. La sequenza delle codifiche dei campioni costituisce la codifica dellʼintera informazione sonora rappresentata dallʼonda. frequenza di campionamento Non cʼè un criterio universale per stabilire la distanza tra un campione e lʼaltro (o il suo inverso, noto come “frequenza di campionamento”). Eʼ facile immaginare che a campioni più vicini tra di loro (frequenza di campionamento maggiore) corrisponda una codifica più lunga, ed anche una ricostruzione più fedele alla curva originale. Anche nel caso delle codifiche di suoni e musica, ci sono metodi di compressione per sintetizzarne la descrizione. I famosi file MP3 si chiamano in questo modo perché prendono il nome da una specifica tecnica di codifica dei suoni con compressione. Anche in questo contesto vi sono persone che affermano che il suono di un MP3 su un computer non eguaglierà mai la qualità di un concerto dal vivo: è tutta una questione di approssimazioni. La codifica di un suono serve a farlo elaborare a un computer (ad esempio, per permettere il trasferimento di un brano dal negozio online iTunes al nostro computer). Noi, però, anche nellʼera digitale, continuiamo ad ascoltare con le nostre orecchie, e per far sì che il nostro ascolto sia possibile, necessitiamo di onde sonore che si propagano nellʼaria. Si rende necessaria, dunque, una riconversione dalla codifica numerica alle onde sonore: abbiamo cioè bisogno di altoparlanti che, comandati dai segnali elettrici prodotti dal computer secondo i numeri contenuti nella codifica del brano, fanno vibrare delle membrane che producono onde che noi percepiamo come suoni e musica. analogico vs. digitale, di nuovo Vediamo infine come procedere per codificare i filmati. 8 In realtà, avendo a disposizione le tecniche di codifica delle immagini e dei suoni, è facile immaginare che esse si possono combinare per creare codifiche di filmati. + = Servono solo delle tecniche aggiuntive per tener conto della sincronizzazione tra immagini e suoni, e dellʼeventuale compressione basata sullʼidea di non descrivere tutti i pixel di ciascuna immagine, ma di descrivere quella iniziale e poi di concentrarsi sull differenze tra unʼimmagine e la successiva (compressione migliore con fotogrammi molto simili, compressione peggiore con cambio di scena). + … Come già detto, lʼapprossimazione che si ha passando da fenomeni fisici come i colori e le onde sonore a codifiche numeriche adatte a un computer ricorda il rapporto che cʼè tra numeri reali e i numeri naturali in matematica. Forse lʼuso dei numeri naturali per parlare del concetto di codifica può sembrare limitativo e può sembrare invitare a coinvolgere i numeri razionali, ma il discorso alla base non cambia: anche con i numeri razionali, le codifiche non riescono a riprodurre in maniera federe un fenomeno fisico, ma portano con sé inevitabili approssimazioni. Il numero nella slide precedente, ad esempio, rappresenta solo una parte dello sviluppo decimale del numero π. Possiamo approssimarlo a nostro piacimento, ma una parte della descrizione di π rimarrà comunque tagliata fuori e non può essere inclusa, dal momento che nessun calcolatore è capace di contenere una sequenza infinita di cifre. Lʼimportante è che lʼapprossimazione arrivi a un dettaglio tale che la ricostruzione del fenomeno fisico risulti indistinguibile dallʼoriginale agli occhi (o alle orecchie) dellʼessere umano che utilizza il computer per elaborarlo.