martedì 7 dicembre 2010

Lezione del 6 dicembre 2010


Lezione del 6 dicembre 2010 PSINFORM from Marco Tonti on Vimeo.

Argomenti della lezione (per un disguido niente audio mi spiace) su OpenOffice Writer:
- Inserimento di interruzioni manuali di pagina
- Margini di paragrafo o dela prima riga del paragrafo
- Stili di paragrafo
- Tabulazioni personali (sinistre, centrate, destre e decimali)
- Inserimento note a piè di pagina
- Inserimento numeri di pagina (ed esclusione dalla prima pagina dalla numerazione, con esempio di ricerca con Google)
- Tabelle
- Esportazione in PDF
- Scorciatoie di tastiera per il copia-incolla (CTRL-C CTRL-V)
- Sistema delle revisioni (memorizzazione dei cambiamenti)
- Ricerca e sostituzione avanzata
- Primi cenni di espressioni regolari

lunedì 6 dicembre 2010

Aggiornamento calendario lezioni

Le lezioni del 9, 13 e 14 dicembre non ci saranno, per via delle lezioni intensive dei prof. Rosa e Valsiner. Le altre lezioni avranno luogo normalmente.

QUESTION TIME

Inserite nei commenti a questo post domande, questioni o argomenti su cose che vi interesserebbe approfondire o cose che non vi sono chiare (anche al di fuori del programma del corso). Cercherò di fare una sintesi di dedicare una lezione alle vostre richieste.

Anticipo lezione del 6 dicembre

In seguito all'indispozione della prof. Venuleo, la lezione di oggi è anticipata alle 15.30 .

venerdì 3 dicembre 2010

Programmi da scaricare per il resto del corso

www.openoffice.org

Per Windows: http://download.services.openoffice.org/files/localized/it/3.2.1/OOo_3.2.1_Win_x86_install-wJRE_it.exe

Per Mac: http://download.services.openoffice.org/files/localized/it/3.2.1/OOo_3.2.1_MacOS_x86_install_it.dmg

Lezione del 3 dicembre 2010 /2

Nella seconda lezione si sono descritti i programmi e i formati più comunemente utilizzati nell'uso quotidiano.

Le prime considerazioni riguardano i file di dati, i file cioè che contengono le informazioni che ci interessa mantenere (la tabella di excel con i voti, l'archivio delle email, le lettere d'amore scritte con Word). Come è in grado il sistema operativo di "riconoscerne" il contenuto in modo da rappresentarli con un'icona che li ricollega al programma con cui sono stati creati o con cui è possibile aprirli? (per esempio i file di word vengono riconosciuti come tali: ma se i file sono solo una sfilza di numeri come è possibile che vengano "riconosciuti" dal sistema?)

Il "segreto" è che i nomi dei file, in windows, possiedono una "estensione" di tre caratteri che li rende riconsudibili al programma appropriato per aprirli. Windows nasconde questa estensione per... semplificare la vita agli utenti (introducendo anche rischi per la sicurezza), ma comuque la mantiene e la usa per avere un'informazione sul contenuto del file. Ogni programma è libero di "scegliere" l'estensione da applicare ai propri file, ma alcune di queste sono diventate ormai consolidate e caratteristiche. Vediamo ne alcune con le diverse caratteristiche.

Formati compressi: ZIP e RAR (o 7z per il 7zip)
Sono le estensioni classiche che rappresentano file che contengono dati compressi. I dati compressi sono dati di qualsiasi genere che vengono ricodificati in modo da fargli occupare uno spazio minore, ma senza perdere nessuna informazione. Per fare un semplice esempio, se il file originale fosse AAABBBCCCCCCC, sarebbe possibile ricodificarlo (in questo esempio in modo molto ingenuo e poco realistico) come 3A3B7C (codifica "run length", di fatto quella usata nei fax). Questa nuova codifica mantiene tutta l'informazione originale (infatti permette di ricostruire il file di partenza) ma è in grado di esprimerla in modo molto più compatto (meno della metà). Ovviamente per poter utilizzare nuovamente i dati è necessario operare il processo inverso per ricostruire il file originario.
Un esempio più realistico è il seguente. Mettiamo di voler comprimere il seguente testo:
CARO AMICO TI SCRIVO PERCHÉ SEI UN AMICO CARO. È immediatamente evidente che c'è una certa ridondanza di informazioni, infatti le parole AMICO e CARO sono ripetute. Cerchiamo un modo per ricodificare questi dati in modo più compatto, in particolare cercando un modo di richiamare dentro al testo pezzi di testo già comparsi. Usiamo la convenzione di scrivere [pos iniz, num car] per indicare che in quel punto si deve sostituire il testo che si trova a partire dalla posizione pos iniz per un certo umero di caratteri. Il testo di esempio diventa quindi: CARO AMICO TI SCRIVO PERCHÉ SEI UN [6,5] [1,4]. In questo esempio particolare il guadagno non è evidente, ma la procedura permette in generale di risparmiare molto spazio nella codifica. Inoltre la procedura potrebbe essere nidificata, mettiamo che nel seguito della lettera si ripetessero le parole AMICO CARO, le si potrebbe sostituire con [35,11] cioè facendo riferimento a una sezione già codificata, e iniziare a "risparmiare" un bel po' di caratteri.
Questo è in generale il funzionamento di programmi tipo winzip (che implementano l'algoritmo Lempel-Ziv) e anche winRAR. Esistono altri algoritmi di compressione (come il metodo di Huffman) ma sono in linea di massima meno efficienti.

Formati immagine: JPG e GIF
Come già spiegato le immagini a livello di base vengono ottenute suddividendo la fotografia in piccoli riquadri, e ogni riquadro (detto pixel) possiede un colore. Registrare tutte quelle informazioni richiede molta memoria, per esempio una foto 800x600 pixel, dove ogni pixel può rappresentare 64000 colori richiede 960 kilobyte. Ci chiediamo quindi se non sia possibile usare una codifica simile a quella illustrata sopra per rendere più efficiente. Data la caratteristica delle immagini, dove molte aree spesso hanno colori uniformi o molto vicini, già una codifica tipo quella run-length è un guadagno.
Con il formato JPG si aggiunge un ulteriore fatto: le compressioni "lossless" (cioè quelle che non perdono informazioni) possono non esere le migliori per le immagini di tipo fotografico, dato che spesso la qualità effettiva richiesta è molto inferiore alla qualità massima: insomma, una foto per quasi tutti gli usi può non essere superdefinita. Il formato JPG mette in pratica questo principio introducendo un formato di compresione di tipo "Lossy" (cioè con perdita).

Formato PDF e PS:
Portable Document Format e PostScript (strettamente imparentati, sviluppati entrambi da Adobe)
Contrariamente ai formati di immagine dove l'immagine viene divisa in puntini, il formato PDF è vettoriale. Questo significa che le aree vengono definite da una serie di piccoli segmenti, e anche le lettere sono costruite in questo modo. Il vantaggio di essere un formato vettoriale è che è possibile ingrandirlo a piacere e mantiene i margini sempre perfettamente definiti.

Formati testuali: TXT e DOC
Normalmente i file con estensione TXT sono quelli che contengono testo semplice, senza formattazioni né altri arricchimenti. Una "a" è una "a" e basta.
Invece i formati di file tipo Word permettono non solo di avere le informazioni delle lettere scritte nel testo, ma anche della particolare formattazione di ogni carattere o parti di testo, oltre alle altre informazioni che si possono inserire come le note o dei grafici o delle immagini. Possiamo immaginare il formato di word descritto con un sistema simile all'xml discusso in una lezione precedente. Dato che abbiamo un testo e delle informazioni "a proposito" del testo, possiamo esprimerle in questo modo:
Il testo Caro amico potremmo pensare di descriverlo come:
<text font="Courier"><italic>Caro</italic></text> <text size="small"><underline>amico</underline></ext>

Lezioni del 3 dicembre 2010 /1

Approfondimento del concetto di sistema operativo. Dato che il computer può eseguire solo un programma alla volta, è necessario immaginare un sistema che ci permetta di utilizzare il computer in un modo più versatile. Il vincolo rimane, ma è possibile strutturare le cose in modo più intelligente per aumentare le possibilità di funzionamento.

Quando accendiamo il computer la memoria è completamente vuota. Per potervi inserire qualcosa è nevessario che le istruzioni del programma siano scritte in un luogo che le possa mantenere nel tempo: questo lugo, come sappiamo, è l'hard disk (ma alcuni vecchi computer avevamo dei piccoli programmi scritti in delle memorie non modificabili inserite direttamente sulla ciruciteria, le note ROM: read only memory). Grazie a un sistema di gestione elementare delle periferiche (che fornisce un funzionamento di base per tastiera, schermo e accesso a memorie di massa come gli hard disk), che si chiama BIOS (Basic Input Output System), il copmuter autonomamente trova sul disco il programma "di avvio" del sistema operativo, lo copia nella memoria e lo esegue. Niente di sostanzialmente diverso da quello che abbiamo visto finora.

Il sistema operativo si occupa di gestire l'interazione tra l'utente e i programmi, e di amministrare l'"ecosistema" dove i programmi "vivono". Dato che i programmi, come abbiamo visto, devono avere (e poter disporre liberamente) di una memoria, il primo "potere speciale" che deve avere un sistema operativo è quello di poter creare delle sotto-aree di memoria "ritagliandole" dalla memoria globale del computer. Da un punto di vista del programma che si trova a funzionare in questa sotto-area, quella è la sua memoria, che comincia da 1 ed è di sua esclusiva competenza. Con questa memoria ci può fare quello che vuole. (ma non può uscirne e invadere la memoria globale o altre aree di memoria: se serve un'aggiunta è il sistema operativo che provvede, automaticamente, a ingrandire lo spazio del programma che ne necessita)

Dentro queste aree di memoria è possibile inserire dei programmi (normalmente estratti dall'hard disk, che rispondono a nomi esotici e strani come "Word", "Outlook Express", "Internet Explorer", "Excel"). Questi programmi si comporteranno né più né meno come quelli "astratti" che abbiamo visto a lezione, lavorando sulla propria memoria privata e facendo cose molto diverse da quelle che facevano i "nostri" programmi, ma facendole usando esattamente le stesse modalità.

Ma dato che in ogni momento solo un programma (anzi: una sola istruzione di un solo programma) può essere in esecuzione, bisogna escogitare una struttra che renda possibile la convivenza contemporanea di più programmi. La soluzione è ingegneristica e non logica: si usa un sistema detto di scheduling. Lo scheduling permette il multitasking, cioè permette di eseguire più compiti contemporaneamente. Per dare l'idea che più programmi possano essere eseguiti allo stesso momento (un programma in esecuzione è detto processo) il sistema operativo reindirizza il flusso delle istruzioni a turno verso uno dei processi in esecuzione, permettendogli di avanzare per alcune frazioni di secondo e quindi fermandolo per poi passare il controllo nuovamente a un altro processo. Quando tutti i processi hanno avuto il loro "pezzettino" di tempo, il ciclo si ripete. In questo modo, a turno, tutti i programmi possono procedere in modo apparentemente parallelo. Il passaggio tra un processo e l'altro è talmente veloce che è impercettibile all'utente che "vede" tutti i processi andare avanti in parallelo e contemporaneamente.


Noi comunichiamo col sistema operativo attraverso l'interfaccia. Fondamentalmente quando facciamo "doppio click" sull'icona di Word, stiamo dando istruzione al sistema operativo di cercare il file che contiene le istruzioni del programma Word sull' hard disk, di creargli una sua area di memoria, di copiare le istruzioni dal disco alla memoria e di farne partire l'esecuzione. A quel punto il processo Word andrà avanti per conto suo, a turno con gli altri processi in funzione. (questo è il motivo per cui più programmi sono "aperti", più è lenta l'esecuzione di ognuno)

Il sistema operativo gestisce e coordina anche le risorse comuni alla macchina sulla quale viene eseguito, per esempio l'accesso al disco, alla stampante e così via.

A questo punto però bisogna rendersi conto che al computer si possono collegare periferiche che hanno modelli, funzionalità, marche, caratteristiche anche molto diverse tra loro. Alcune di queste periferiche potrebbeno non essere nemmeno state previste dai creatori del sistema operativo. Anche per limitarsi solo alle stampanti, ne esistono migliaia di marche e modelli, ognuno con modalità di funzionamento e di gestione del tutto diverse. Come può il sistema operativo gestire delle risorse con caratteristiche così varie? Per fare ciò si utilizzano speciali programmi detti driver. Un driver è un tipo speciale di programma che deve essere scritto secondo una struttura rigida e predefinita. Il programma driver deve possedere alcune funzioni standard (sono le sottoprocedure che abbiamo visto in altre lezioni) con dei parametri standard. Per esempio u driver di stampa dovrà avere funzioni come STAMPA, SALTA_PAGINA, INTERROMPI_STAMPA e così via: sono le funzioni che genericamente ci aspettiamo di poter eseguire con quel particolare hardware. Tutti i driver di stampa devono possedere quelle funzioni. (si dice in gergo che devono possedere una "interfaccia standard": interfaccia in questo caso non è quella visuale di windows, ma una particolare strutura fatta i modo da "incastrarsi" con le aspettative del sistema operativo, una inter-faccia appunto, fatta come il pezzo di un puzzle che si deve adattare alle specifiche del sistema). Le istruzioni contenute in queste funzioni sono invece strettamente dipendenti dall'apparecchio che deve essere pilotato (infatti "driver" significa "pilota"!). Se per esempio una stampante richiede il codice A per saltare pagina, il driver all'interno della procedura SALTA_PAGINA dovrà inviare alla stampante il codice "A". Se una stampante richiede il codice B, il suo driver dovrà sempre avere la procedura SALTA_PAGINA ma all'interno di quest'ultima il codice da inviare sarà "B", e così via. Ogni apparecchio collegato al computer (ma anche quelli all'interno del computer, come la scheda video che permette di mostrare le immagini sullo schermo, o la sched aaudio che permette di riprodurre i suoni) richiede un driver specifico. Molto spesso i sistemi operativi possiedono già una certa collezione di driver per i dispositivi più diffusi, ma nel caso questo driver non sia presente è necessario installarlo col CD fornito con l'apparecchio o scaricarlo dal sito del produttore. Ci si può accorgere di questo fatto quando si inserisce una chiavetta di memoria in una porta USB e compare un messaggio "installazione della periferica in corso": il sistema operativo sta cercando se possiede già il driver di quell'apparecchio e in caso positivo fa in modo di utilizzarlo per interagire con quella periferica.

I driver quindi sono programmi molto speciali, perché diversamente dagli altri che "vivono" una vita propria nella memoria e che in caso di errore possono essere interrotti (col task manager che si apre premendo contemporaneamente ctrl-alt-canc), i driver diventano pezzi del sistema operativo, vengono incorporati in esso. Se nei programmi driver ci sono errori o si verificano malfunzionamenti è l'intero sistema a trovarsi a rischio di instabilità, perché il problema viene a manifestarsi nel cuore stesso del sistema pregiudicandone il buon funzionamento. Questo spiega per quale ragione i driver sono gli elementi dell'ecosistema "computer" a introdurre i maggiori problemi di funzionamento.