UNIVERSITA’ DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA “E. AMALDI” Laboratorio di Programmazione e Calcolo 6 crediti a cura di Severino Bussino Anno Accademico 2016-17 Docenti del Corso Severino Bussino Dipartimento di Matematica e Fisica Stanza 36 - tel. (06 5733) 7285 [email protected] Alessandro Di Cicco Dipartimento di Matematica e Fisica [email protected] Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 2 Pagina Web del Corso http://webusers.fis.uniroma3.it/~bussino/Lab_Prog_Calc.html Alcuni aspetti della Pagina Web devono ancora essere completati Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 3 Programma del Corso (1) Elementi di programmazione ad oggetti (linguaggio C++) in ambiente Linux circa 20 ore di lezione frontale e 30 ore di laboratorio Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 4 Materiale Didattico per il Corso (1) Voi stessi durante le esercitazioni in Laboratorio “... Sofia ricordava bene quelle volte in cui sua madre o i professori avevano cercato di insegnarle qualcosa per cui lei non nutriva il benché minimo interesse. Invece, quando si era impegnata in prima persona, allora sì che aveva veramente «imparato»! A volte succedeva che di colpo capisse qualcosa, ed era proprio questo che veniva chiamato «sapere».” (Jostein Gaarder, “Il mondo di Sofia”) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 5 Materiale Didattico per il Corso (2) Trasparenze delle Lezioni (disponibili sul sito web) Lippman, Lajoie, Moo C++ primer Addison Wesley 2012 (5a ed.) Anche in italiano (3a ed. - senza Moo tra gli autori) Barone, Marinari, Organtini, Ricci-Tersenghi Programmazione Scientifica Pearson Education 2006 Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 6 Valutazione del Corso • Il voto del Corso si puo’ ottenere con una valutazione “in itinere” (come descritto in seguito) oppure superando un esame a febbraio o a giugno (per chi non ha raggiunto la sufficienza, per chi non e’ soddisfatto del voto ottenuto, per chi e’ stato costretto a numerose assenze, ecc.) • Chi vuole puo’ superare l’intero corso (6 crediti) con un unico esame a partire da febbraio (una prova pratica ed una prova orale) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 7 0) Struttura del Corso 8 Introduzione alla programmazione ad oggetti Elementi di programmazione in linguaggio C++ Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 9 Alcuni esempi 1. ATLAS (LHC al Cern) 1.000.000 canali di lettura bunch-crossing ogni 25 ns 40 Tbyte/sec 100 Mb/sec Cluster di circa 1000 CPU (PC) Software specifico per il trigger di III livello Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 10 Alcuni esempi (segue) 2. ARGO-YBJ (Raggi Cosmici –Tibet) circa 1 Tbyte/mese di dati da memorizzare dati disponibili per l’analisi Cluster di PC per la gestione dello spazio disco Software dedicato per l’accesso ai dati e l’analisi 3. GRID (Calcolo su rete geografica) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 11 Alcuni esempi (segue) 4. Progetto genoma e studi di Biologia molecolare (www.embnet.org) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 12 Alcuni esempi (segue) Altre applicazioni: 1. Telefonini cellulari 2. Bancomat 3. Reti di Trasporto (ferrovie, metropolitane, …) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 13 Scopo del corso (I) •Familiarizzazione con l'uso del personal computer in ambiente Unix (useremo il sistema Linux) •Acquisizione dei principi di base per la programmazione in linguaggio C ++ •Acquisizione dei principali elementi programmazione in linguaggio C (C++) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 sintattici per la 14 Scopo del corso (II) “Idee” e non aspetti tecnici = “Architetti” e non “Esperti del Linguaggio C/C++” Insegnare a progettare un approccio al Calcolo Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 15 Programma delle Esercitazioni di Laboratorio Le Esercitazioni inizieranno il 10 ottobre (gr. A e B) • Introduzione (1 esercitazione in gruppi di due) • Programmazione: linguaggio C e C++ (8 esercitazioni in gruppi di due studenti) • (Simulazione della) Esercitazione individuale (a gennaio) • 1 Esercitazione individuale (a gennaio) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 16 Organizzazione delle Esercitazioni di Laboratorio (1) • Gruppi di 2 persone (la stessa coppia per tutto il corso) • Due sessioni di laboratorio - Lunedi’ - Mercoledi’ 14.30 – 17.30 14.30 – 17.30 Gruppo A Gruppo B • Scegliere il giorno del laboratorio e mantenere la scelta per tutto il corso (eccezioni sono possibili per la coppia, compatibilmente con lo spazio disponibile in laboratorio, avvisando con anticipo) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 17 Organizzazione delle Esercitazioni di Laboratorio (2) • Variazioni al Calendario usuale 10 ottobre (gr. A: ore 14-15:45; gr. B ore 16-17:45) 31 ottobre e 2 novembre non ci saranno esercitazioni [19 dicembre e 21 dicembre non ci saranno esercitazioni] • 1 esercitazione individuale (senza valutazione - simulazione) 9 gennaio - 10 gennaio - 11 gennaio (date da confermare) • 1 esercitazione individuale (con valutazione) 16 gennaio - 17 gennaio - 18 gennaio (date da confermare) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 18 Orario e Programma dettagliato delle lezioni e delle esercitazioni sulla pagina web del corso http://webusers.fis.uniroma3.it/~bussino/Lab_Prog_Calc.html Ultima lezione in Aula nel I semestre: (presumibilmente) giovedi’ 1 dicembre Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 19 Valutazione del Corso Il voto in trentesimi viene attribuito principalmente in base al lavoro svolto durante le esercitazioni: • Le prime 3 (?) esercitazioni non vengono valutate. • Le altre 5 esercitazioni (?) valgono 4 punti e si considerano solo le 4 migliori (totale 16 punti). Il voto è individuale anche se il programma viene scritto in gruppi di due. • L’esercitazione individuale vale 10 punti 16 gennaio - 17 gennaio - (date da confermare) • 18 gennaio I rimanenti 4 punti vengono assegnati in base ad un test sugli argomenti trattati nelle lezioni. Il test si svolgerà a fine corso, ad esempio il 25 gennaio in Aula IV (?) ore 14:30 (data, ora e aula da confermare) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 20 • La partecipazione alle esercitazioni è obbligatoria. • Gli studenti lavoratori che avessero problemi di orario sono pregati di farlo presente il prima possibile, per concordare una soluzione. • Gli esercitatori valutano i programmi nelle condizioni in cui si trovano dopo le 3 ore di esercitazione. • Gli studenti che non avranno ottenuto la sufficienza con questo tipo di valutazione potranno sostenere l'esame in modo tradizionale, con una prova pratica (realizzazione di un programma) ed una prova orale. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 21 0) Struttura del Corso 1) Trattamento dell'informazione Elementi di Architettura di un Computer 2) Sistemi operativi Come opera il calcolatore? • Supponiamo di volere calcolare X, per uno o più possibili valori di Y, in base all'espressione algebrica X = 5 + 0.2 x Y • Riscriviamo questa espressione come X = 5 + 0.2 * Y (in tutti i linguaggi di programmazione l'operatore di moltiplicazione si indica col simbolo * per non confonderlo con la lettera x) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 23 Esempio: X = 5 + 0.2 * Y Questa espressione è composta di due parti: 1. A destra troviamo tutte le informazioni necessarie per elaborare i dati noti, siano essi costanti (5, 0.2) o variabili (Y), ovvero una sequenza di operandi (i dati noti) e operatori (+,*) che costituisce la sequenza di ingresso (input); 2. A sinistra troviamo il risultato cercato (X) che dovrà essere conservato e inviato in uscita (output). Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 24 Esempio: X = 5 + 0.2*Y Per calcolare X sono necessari i seguenti passaggi: 1. Lettura dei possibili valori della variabile Y 2. Moltiplicazione di 0.2 per il valore assunto da Y 3. Memorizzazione del risultato di 0.2*Y 4. Somma della costante 5 al risultato precedente 5. Memorizzazione nella variabile X del risultato 6. Eventuale invio in uscita del valore assunto da X 7. Eventuale ripetizione della procedura per un altro valore di Y Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 25 Funzioni essenziali • Lettura (acquisizione dei dati, ovvero dei valori numerici e della successione di operatori da applicare) • Calcolo (applicazione degli operatori ai dati nella successione predeterminata) • Scrittura risultato) (memorizzazione e comunicazione Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 del 26 Gestione dell'informazione • La lettura dei dati e delle istruzioni da opportune periferiche (tastiera, disco, nastro, linea di trasmissione...) avviene tramite i canali di input, che li trasferiscono in memoria, dove vengono conservati • L'interpretazione dei dati e delle istruzioni e l'esecuzione del calcolo sono gestite dai circuiti logici e di calcolo dell'unità centrale (CPU) • La comunicazione del risultato trasferito dalla CPU alla memoria, è affidata ai canali di output, che lo trascrivono su opportune periferiche (terminale video, disco etc...) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 27 Hardware e Software • L'insieme delle parti fisiche (meccanismi, elettromeccanismi, circuiti elettrici ed elettronici) che gestiscono l'informazione (periferiche, memorie, CPU), costituisce l'hardware del calcolatore; • I dati, i programmi di gestione della macchina ed i programmi applicativi, non sono parte del calcolatore ma vi sono immessi di volta in volta, a seconda delle necessità e finalità. Questi costituiscono il software. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 28 Componenti principali dell’Hardware • Processore • Memoria • Dispositivi di I/O (input/output) • Canali di comunicazione Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 29 Il processore • In un sistema tipico c'è un unico processore, la CPU (Central Processing Unit). • La CPU è la parte del sistema che esegue i programmi effettuando operazioni aritmetiche e logiche sui dati. • Si tratta dell'unica componente del sistema in grado di produrre nuove informazioni combinando e modificando le informazioni esistenti. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 30 La memoria • La memoria è un componente passivo che si limita ad accumulare le informazioni fin tanto che non vengono richieste da altre parti del sistema (processore, dispositivi di I/O). • Ad una informazione in memoria si accede mediante il suo indirizzo. Possiamo visualizzare la memoria come un vettore M: – una richiesta del processore alla memoria può essere ad esempio "mandami l'informazione dalla locazione M[1000]" – la richiesta del controller di un disco invece potrebbe essere "copia questo blocco di dati dalla locazione M[0] alla locazione M[256]" Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 31 I dispositivi di I/O • I dispositivi di I/O trasferiscono l'informazione, senza alterarla, tra il mondo esterno ed una o più componenti interne. • Possono essere memorie secondarie (dischi, nastri...) o dispositivi per comunicare direttamente con l'utente (schermo, tastiera, mouse...). Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 32 I canali di comunicazione • I canali di comunicazione tra le diverse parti del sistema possono essere semplici collegamenti tra due dispositivi o che interconnettono varie interruttori (switch) componenti, permettendo però solo la comunicazione di due di loro per volta. • Nei Personal Computer di solito c'è un unico canale di comunicazione (bus) che collega tra di loro tutte le componenti principali del sistema. Si tratta di uno switch e quindi, per esempio, quando questo è configurato per un trasferimento di I/O non permette al processore di accedere la memoria, rallentandone l'operazione. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 33 Operazioni del processore (1) • Un processore opera mediante un ciclo di caricamentodecodifica-esecuzione delle istruzioni. • Nella prima fase del ciclo il processore legge dal registro di memoria PC (Program Counter) l'indirizzo dell'istruzione da caricare e incrementa il contenuto di PC. • Nella fase di decodifica il processore salva l'informazione recuperata dalla memoria, un'istruzione in linguaggio macchina codificata in un numero binario, in un altro registro: IR (Instruction Register). • Infine il processore esegue l'istruzione contenuta in IR. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 34 Operazioni del processore (2) • La fase di esecuzione può richiedere ulteriori accessi alla memoria, per caricare e/o salvare dati. Alla fine di questa fase il processore ripete il ciclo caricando l'istruzione successiva. • Le – – – istruzioni possono essere di tre tipi: Operazioni logico-aritmetiche Trasferimenti di dati Controllo • Le istruzioni di controllo modificano l'ordine di esecuzione delle altre istruzioni agendo sugli indirizzi contenuti nel registro PC. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 35 Tempo di esecuzione (1) • Il tempo necessario per caricare-decodificare-eseguire un'istruzione dipende dal processore e dalla complessità dell'istruzione. • L'unità di misura elementare del tempo è il ciclo di clock: la logica che dirige le operazioni del processore è controllata da un circuito esterno che genera un'onda quadra con un periodo fissato. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 36 Tempo di esecuzione (2) • Il tempo di esecuzione di un'istruzione dipenderà quindi dal numero di cicli di clock necessari per essa (e dalla frequenza del clock). • Il tempo di processamento dipende però anche dalla velocità di accesso alla memoria ovvero da come questa è organizzata e dalla velocità di comunicazione. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 37 Le memorie • Una memoria è caratterizzata dalla sua funzione, dalle sue dimensioni e dal suo tempo di risposta. • Le operazioni effettuabili su una memoria sono operazioni di lettura o di scrittura: – Memorie che consentano entrambe le operazioni sono dette RAM (Random Access Memory). – Memorie accessibili solo in lettura sono dette ROM (Read Only Memory) o PROM (Programmable Read Only Memory) a seconda che siano scritte dal costruttore o in una programmazione successiva. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 38 Dimensioni delle memorie • L'unità elementare di informazione è il bit (b), che può assumere due soli valori. La capacità di un chip di memoria viene generalmente indicata in bit, quella di tutta la memoria del sistema in byte (B) o parole, corrispondenti a 8 bit. • Le memorie dei sistemi attuali vanno da varie decine di milioni di byte (MB) a svariati miliardi di byte (GB). Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 39 Prestazioni delle memorie • Le prestazioni di un sistema di memorie sono definite mediante due misure: – Il tempo di accesso vero e proprio, determinato principalmente dall'organizzazione dei chip usati, ma anche dalla ricerca dell'informazioni sui vari chip e dalle prestazioni del bus. – Il tempo minimo che deve intercorrere tra due richieste successive, generalmente superiore al tempo di accesso. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 40 Organizzazione di un sistema di memorie • Anche se e' possibile accedere alla RAM in un ordine qualsiasi, si osserva che tanto le istruzioni di un programma quanto i dati a cui si accede sono generalmente raggruppati un una stessa area di memoria. • Ciò permette di organizzare la memoria ad albero, ponendo poche memorie molto veloci vicino al processore (cache) ed effettuando traferimenti di blocchi di dati dalle memorie più lente alla cache ogni qualvolta il dato richiesto non sia disponibile nella cache. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 41 Comunicazioni sul bus • La comunicazione su un bus avviene mediante transazioni discrete. Ogni transazione ha un trasmettitore ed un ricettore. • Per iniziare una transazione un modulo del sistema (CPU, controller di un disco...) deve acquisire almeno temporaneamente il controllo del bus. • Sono quindi necessari dei protocolli di arbitraggio che consentano ai vari dispositivi di accordarsi su chi debba avere il controllo per primo. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 42 Prestazioni di un bus • Le prestazioni du un bus sono caratterizzate da due quantità: – Il tempo di trasmissione, ovvero il ritardo tra l'invio e la ricezione dell'informazione. – La larghezza di banda, ovvero la quantità di informazioni che possono essere trasmesse nell'unità di tempo (unità di misura: bits per second, bps). Questa dipende dal numero di bit trasmissibili in parallelo in una transazione e dal numero di transazioni effettuabili nell'unità di tempo. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 43 0) Struttura del Corso 1) Trattamento dell'informazione Elementi di Architettura di un Computer 2) Sistemi operativi Introduzione • Il sistema operativo è un programma dedicato alla gestione del calcolatore. • All'accensione di un calcolatore viene eseguito un programma di base memorizzato su una memoria ROM, il BIOS. • Al termine dell'esecuzione del BIOS viene caricato in memoria ed eseguito automaticamente il programma che inizia alla traccia 0 del disco di avvio, che è il sistema operativo. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 45 Compiti del sistema operativo • Gestione dell'interfaccia utente • Controllo dell'esecuzione dei programmi (processi) • Gestione della memoria • Gestione delle periferiche • Gestione del file-system Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 46 Gestione dell'interfaccia utente • Il sistema operativo esegue un ciclo infinito nel quale attende che gli vengano inviati comandi dall'utente, attraverso la tastiera o il mouse. • Il sistema decodifica ogni comando e se lo riconosce come valido manda in esecuzione un programma che esegua l'azione richiesta. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 47 Controllo dell'esecuzione dei programmi • Un processo è un programma in esecuzione: include il programma eseguibile, i dati che questo sta usando etc… • Un processo può trovarsi in due stati: in esecuzione o sospeso. Nel secondo caso tutti i suoi dati, il program counter etc... sono salvati e verranno ricaricati in memoria quando viene ripristinato lo stato di esecuzione. • Il controllo dei processi è responsabile di creare processi, inviarli in esecuzione, sincronizzarli tra di loro, gestirne le priorità. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 48 Gestione della memoria • Ogni programma in esecuzione richiede al sistema di riservargli una certa quantità di memoria. • Il sistema alloca quando possibile un'area di memoria al programma che la richieda, ma la memoria non è illimitata e quindi il sistema deve conoscere il grado di occupazione della memoria ed eventualmente negarne l'uso a programmi che ne richiedano troppa sospendendoli in attesa che si liberi la memoria richiesta. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 49 Gestione delle periferiche • Il sistema operativo nasconde all'utente le complessità dei dispositivi periferici e le loro caratteristiche hardware, consentendovi l'accesso tramite chiamate semplici. • Inoltre il sistema identifica nei vari processi in esecuzione le richieste di accesso a periferiche e le gestisce in modo mutualmente esclusivo, per evitare che due processi tentino di scrivere contemporaneamente sullo stesso disco o altro dispositivo. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 50 Gestione del file-system • Il sistema operativo organizza la memorizzazione su disco in raccolte organizzate di dati (file). • Il file-system è responsabile – di stabilire la relazione tra i file logici e l'hardware (tracce del disco) – di fornire uno schema di nomi che consenta di far riferimento ai file – di fornire un sistema di protezione dei file, specialmente in ambienti multi-utente. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 51 Sistemi operativi • Storicamente ogni costruttore di calcolatori ha scritto un proprio sistema operativo (firmware) che veniva distribuito insieme alla macchina. • Con l'uniformarsi delle architetture e con l'avvento dei Personal Computer, la varietà di sistemi operativi è andata riducendosi. • Attualmente Windows è il sistema largamente più diffuso, mentre Unix è quello più utilizzato negli ambienti scientifici. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 52 Windows • È stato introdotto a fini commerciali ed è caratterizzato da una particolare semplificazione dell'interfaccia utente. • Per la qualità e quantità di software sviluppato in questo ambiente è senza dubbio il sistema più idoneo per l'utilizzo di applicazioni quali word processing, uso di database, indirizzamento di periferiche standard, scrittura di lucidi per presentazioni e lezioni … • Non è ottimizzato per l'uso in rete e non supporta più di un utente: WindowsNT e Windows2000 sono nati per queste nuove funzioni (e sono poi evoluti in Windows XP, Windows 7 e 8) Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 53 Unix • Sviluppato in ambienti scientifici è ottimizzato per usi non comuni e per l'utilizzo in rete dei calcolatori oltre che per l'uso di uno stesso calcolatore da parte di più utenti. • Esistono dei sistemi Unix freeware quali Linux (che a sua volta esiste in varie distribuzioni: RedHat, Slackware, Suse...) o FreeBSD dei quali sono disponibili anche i codici sorgente (open source). • Le varie distribuzioni forniscono delle interfacce utente semplificate, ma non sono standardizzate, anche se GNOME e KDE si stanno affermando come interfacce standard Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 54 Il file-system di Windows • Il file-system è il sistema che gestisce non solo la collocazione dei files sul disco rigido ma più in generale tutti i dischi e periferiche di un computer. • Sotto Windows ogni dispositivo hardware è associato ad una diversa unità logica ed è rappresentato nel pannello di controllo con un'icona: in particolare due dischi appaiono come due icone distinte. • La maggior parte di voi ha familiarita’ con questo sistema operativo, che non verra’ usato nell’ambito di questo corso. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 55 Il file-system di Unix • Il file-system viene visto come un albero di directory. • Tutti i dispositivi sono visti nello stesso modo dal sistema operativo, ovvero come file. • Ogni file può essere montato ( comando mount ) sul filesystem e quindi associato ad un particolare punto dell'albero logico. • La gestione dei file sotto Unix sara’ oggetto della prima esercitazione. Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 56 Linux Esistono varie distribuzioni (anche in versione Live) (RedHat, Scientific [6.3], SuSe, Ubuntu, Fedora, etc.) Pagina Web della distribuzione Fedora: http://fedoraproject.org Pagina Web della distribuzione Scientific Linux : http://www.scientificlinux.org Pagina Web della distribuzione Ubuntu : http://www.ubuntu.com Per l’accesso ai repository ftp (se viene richiesta una passsword): username: password: anonymous il proprio indirizzo E-Mail Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 57 Laboratorio di Programmazione e Calcolo - AA 2016-17 - lezione 1 58