Università degli Studi di Napoli "Parthenope"

Scheda dell'insegnamento

Anno accademico: 
2015/2016
Tipologia di insegnamento: 
A scelta dello studente
Tipo di attività: 
Opzionale
Corso di afferenza: 
Corso di Laurea triennale (DM 270) in INFORMATICA
Settore disciplinare: 
INFORMATICA (INF/01)
Crediti: 
6
Anno di corso: 
3
Docenti: 
Ciclo: 
Secondo Semestre
Ore di attivita' frontale: 
48

Obiettivi

l corso è un’introduzione alla programmazione di applicazioni in ambiente internet con riferimenti anche alla fruizione attraverso dispositivi mobili. Il corso contiene un’introduzione alla programmazione di applicazioni web mediante l’uso della piattaforma LAMP (Linux Apache MongoDb Python). Una parte del corso è dedicata all’introduzione al Cloud Computing con particolare riferimento ai servizi offerti da Amazon Web Services per le tecnologie web e all’Internet of Things con microcontrollori di tipo Arduino o similari. Nel corso delle lezioni sono fatti continui riferimenti alle tecnologie per lo sviluppo di applicazioni mobile ibride multipiattaforma, alla gestione e rappresentazione dei dati spaziali sul web e ai sistemi pervasivi distribuiti/indossabili.
Il corso contiene una introduzione al linguaggio Python, utilizzato per lo sviluppo di progetti software e hardware nelle attività (singole o di gruppo) in Laboratorio che sono parte integrante del corso. Il corso ha una impostazione tipicamente pratico/applicativa finalizzata alla risoluzione di problemi concreti e allo sviluppo di software effettivamente utilizzabile.
Conoscenza e capacità di comprensione: Lo studente deve dimostrare di conoscere e saper comprendere i fondamenti delle tecnologie web, del cloud computing e dell’internet of things, con particolare riguardo alle applicazioni web complesse e distribuite, le metodologie di sviluppo e di analisi di applicazioni basate su servizi web, il linguaggio di programmazione Python e il suo contesto applicativo, le metodologie e le tecniche dello sviluppo software in tale contesto.
Capacità applicative: Lo studente deve dimostrare di saper utilizzare la propria conoscenza acquisita per risolvere problemi computazionali come applicazioni web o applicazioni mobile/embedded ibride basate su tecnologie web in contesti concreti, per sviluppare soluzioni progettuali e analizzarle dal punto di vista dell’architettura e dell’usabilità, per usare in modo consapevole uno o più linguaggi di programmazione al fine di implementare un’applicazione web complessa. Tali capacità si estrinsecano anche in un uso approfondito e consapevole degli strumenti offerti dal cloud computing e dall’internet of things e differenti framework applicativi.
Autonomia di giudizio: Lo studente deve essere in grado di sapere valutare in maniera autonoma i risultati ottenuti dalla applicazione sviluppata sia in termini progettuale che dell’implementazione software valutandone l’efficacia e l’efficienza.
Abilità comunicative: Lo studente deve essere in grado di redigere una relazione di presentazione di un progetto e di documentare la sua implementazione, anche lavorando in gruppo, servendosi di strumenti avanzati di scrittura/documentazione con particolare riferimento all’uso degli strumenti di produttività per sviluppatori come sistemi per la redazione condivisa di documenti (Google Drive), di collaborazione remota (Slack), di gestione della produzione (Trello), di gestione dei repository online (GitHub), di infrastrutture cloud come servizio (Amazon AWS) usando correttamente la terminologia delle tecnologie web anche in lingua inglese.
Capacità di apprendimento: Lo studente deve essere in grado di aggiornarsi e approfondire in modo autonomo argomenti e applicazioni specifiche di tecnologie web, anche accedendo a banche dati, repository on-line di documenti, software e librerie applicative e altre modalità messe a disposizione dalla rete.

Prerequisiti

E’ necessaria la conoscenza degli argomenti svolti nei corsi di Programmazione I, Programmazione II.

Contenuti

Le tecnologie web - Il paradigma client-server - Ipertesto, multimedia, ipermedia - Il web come documento ipermediale - Il protocollo HTTP, richieste, risposte, intestazioni, cookie e mantenimento delle sessioni - Server web.
Introduzione al cloud computing - infrastruttura come servizio – Virtualizzazione - immagini ed istanze di macchine virtuali - Gestire macchine virtuali in Amazon Web Service - Preparare una macchina virtuale per la produzione di servizi web -Accedere alle macchine virtuali AWS - Elementi di Linux per la gestione delle macchine virtuali e dei software per le tenologie web.
Introduzione al linguaggio Python - costrutti, variabili, tipi di dati - Python argomenti avanzati: classi, oggetti e namespace - Python come linguaggio per le tecnologie web: introduzione a Flask - Generare pagine web con Flask.
I web service - SOAP e REST - JSON: Javascript Object notation - GET, POST e gli altri metodi HTTP in Flask.
I client per il web - iI browser – altri client – le applicazioni mobile
Programmazione server side e client side
Linguaggi di descrizione per le pagine web - Extensible Markup Language -Il markup - XML come metalinguaggio - Caratteristiche sintattiche - Documenti XML ben formati - XHTML e HTML 5
Caratteristiche generali di una pagina web -Elementi ed attributi - Struttura base del documento -Testo, ipertesto, immagini, liste ed elenchi, form, tabelle, collegamenti e scripting lato client - Il cascading style sheets (CSS): introduzione.
Generazione dinamica delle pagine - Gestione degli header http - File attaching - Templating in Python/Flask.
Introduzione ai database NoSQL e a Mongodb - Python & MongoDb
Trattamento dei dati geografici: LeatLet & GeoJson
Introduzione ai websocket - Metodi avanzati e consumo dei websocket in JavaScript - Servire websocket in Python
Internet of things, introduzione ad Arduino e alle tecnologie web
Esercizio applicativo: “The Imitation Game” – Sviluppo di un’applicazione imitante: “Facebook”, “Uber”, “Open table” o similari.

Metodi didattici

Verifica dell'apprendimento

L’obiettivo della procedura di verifica consiste nel quantificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
La procedura di verifica è indicata precisamente nella piattaforma di e-learning del Dipartimento di Scienze e Tecnologie. In sintesi: a circa 1/3 del corso gli studenti sottomettono una proposta di progetto rafforzata da una presentazione composta da non più di 3 slide e della durata non superiore ai 3 minuti. La proposta può essere individuale o di un gruppo composto da non più di 3 studenti. La proposta viene emendata dal docente, rigettata o assegnata come progetto di esame. A circa 2/3 del corso è organizzata una presentazione dei progetti in cui ciascuno studente o gruppo di studenti illustra lo stato dell’arte del progetto e discute con docenti e altri studenti di potenzialità e debolezze dello stesso. A fine corso è organizzata una presentazione finale che non ha valore di esame ma momento comunicativo del lavoro svolto. Il progetto deve essere rilasciato in open source preferibilmente con licenza Apache 2.0 su di un repository pubblico come, ad esempio, GitHub almeno 2 giorni prima della data di esame e deve essere funzionante online ameno fino alla conclusione dell’esame. La procedura di verifica consiste in un esame orale individuale (60% del voto), la presentazione della parte di progetto di propria competenza (20% del voto), dimostrazione del progetto (20% del voto). Sono previste 2 Prove Intercorso (40% del voto dell’esame orale) + 2 HomeWork (20% del voto dell’esame orale) individuali.

Testi

Programmazione Web Lato Server - ultima versione aggiornata - V. Della Mea, L. Di Gaspero, I. Scagnetto. Apogeo
Learning Python - M. Lutz. O'Reilly
Flask Web Development: Developing Web Applications with Python - M. Grimberg. O'Reilly
Cloud computing per applicazioni web - J. Barr. Apogeo
Il manuale di Arduino: guida completa – P. Aliverti, LSWR
 
Le slide (formato .pdf) di tutte le lezioni sono disponibili sulla piattaforma di e-learning del Dipartimento di Scienze e Tecnologie, insieme con quiz on-line di autovalutazione, esercizi, progetti di approfondimento, note per il laboratorio, una nota di introduzione operativa agli strumenti software trattati. In particolare, per ogni edizione del corso, le slide sono prodotte in ambiente Google Drive con condivisione con gli studenti che possono arricchire il materiale con contenuti specifici. Tutto il materiale prodotto in questa forma, nel rispetto dei diritti delle singole fonti, è rilasciato con licenza Creative Commons.

Altre informazioni

Mutuazioni