This is an old revision of the document!
Programmazione Web
News
- 21 Giugno 2017: La lezione del 21 Giugno è rimandata, causa assenza del docente. Nei contenuti dell'ultima lezione trovate il link a un repo GitHub con un server funzionante in Node, che racchiude le varie cose viste a lezione. Sviluppatelo secondo i requisiti del vostro progetto. La lezione (esercitazione completa sui vari argomenti, e revisione problemi) sarà recuperata Giovedì o Venerdì. Vi prego di controllare questa pagina domani. Grazie
- 7 Settembre 2016: La pagina del corso è on-line. Gli studenti che devono sostenere l'esame negli appelli dell'A.A. 2015/16 debbono fare riferimento alla pagina del corso dell'anno scorso: Programmazione Web A.A. 2015/16
Informazioni Generali
Docente:
- Leonardo Mostarda più docenti esterni di aziende specializzate
Obiettivi del Corso
L'obiettivo del corso è introdurre gli studenti al mondo della programmazione web attraverso uno stack moderno ma di facile comprensione. Alla fine del corso ogni studente sarà in grado di sviluppare e gestire il progetto di un'applicazione web completa (frontend + backend). Il corso darà inoltre le basi delle metodologie agili e dei più comuni strumenti utilizzati nell'ambito dello sviluppo web.
Il corso avrà un approccio learning by doing. Gli studenti si dovranno dividere in gruppi e affrontare un vero progetto seguendo una traccia. Tutto il codice sarà pubblico su github e il progetto live in modo che sia visibile e valutabile da tutti.
Calendario delle Lezioni
- 05/04/2017 14-16 Introduzione al corso e agli strumenti
- 12/04/2017 11-16 Rapid Prototyping & agile methodology (dalle 11 alle 13 l'aula sarà AB1)
- 19/04/2017 11-16 HTML+ CSS & responsive interface
- 26/04/2017 11-16 Javascript
- 03/05/2017 11-16 Angular 1
- 10/05/2017 11-16 Git + Tool
- 17/05/2017 11-16 Node
- 31/05/2017 11-16 Mongodb e mongoose
- 07/06/2017 11-16 Sviluppo API Rest
- 14/06/2017 11-16 Swagger-Tool o Auth-Token
- xx/06/2017 11-15 Laboratorio e ripasso
- xx/09/2017 09-18 Presentazioni ed Esame
Contenuti del Corso
- Nozioni base di Programmazione Web
- Architetture Client/Server
- Installazione e configurazione dei vari componenti software per lo sviluppo, test e deployment di applicazioni Web (Nodejs, Mongodb, ecc.)
- Linguaggi e Tool di sviluppo lato client: HTML 5, CSS, JavaScript, Angular
- Linguaggi e Tool di sviluppo lato server
Strumenti
- un laptop personale con mac o linux (anche macchina virtuale)
- editor di testo (consigliato https://code.visualstudio.com/ )
- Node.js installato (per il backend - consigliata v6.10.1 LTS https://nodejs.org/it/ )
- Studio3T (ex MongoChef - client per MongoDb)
- Heroku.com
- Github.com
- Trello.com
Modalità di Frequenza
Le lezioni saranno tutte di 4 ore (tranne la prima di introduzione al corso che sarà di 2 ore).
Tutte le lezioni saranno trasmesse come webinar e registrate per essere seguite anche da remoto real-time o in un momento successivo. Tutti i link delle lezioni saranno messi nella sezione materiale di questa pagina
Ogni lezione avrà una parte introduttiva fatta dal docente con slide teoriche più live code e degli esercizi pratici che gli studenti dovranno svolgere per far emergere eventuali criticità/dubbi.
Durante il corso gli studenti dovranno sviluppare un progetto seguendo una delle tracce proposte. Il consiglio è di affrontare il progetto in gruppi di 3 o 4 persone.
Ogni gruppo dovrà scegliere una traccia tra le 5 seguenti e dovrà implementare tutte le 5 user story indicate nella traccia più altre 5 a libera scelta.
Tracce:
- Homebanking
- come utente voglio poter accedere ad un’area privata tramite username e password
- come utente voglio poter leggere i miei movimenti bancari
- come utente voglio poter stampare un report dei miei movimenti bancari
- come utente voglio poter effettuare un bonifico
- come utente voglio poter avere un grafico che mi illustra in maniera sintetica la mia situazione in banca
- Piano di studio
- come utente voglio poter accedere ad un’area privata tramite username e password
- come admin voglio poter modificare il piano di studio
- come studente voglio potermi iscrivere ad un esame
- come professore voglio poter caricare ed inviare i risultati degli esami agli studenti
- come studente voglio visualizzare la mia carriera universitaria anche con l’ausilio di grafici
- App per pagamenti & prestiti online
- come utente voglio poter accedere ad un’area privata tramite username e password
- come utente voglio poter inviare del denaro ad un altro utente
- come utente voglio poter richiedere un prestito P2P dentro l’app rispettando le leggi italiane
- come utente voglio poter investire in un prestito chiesto da un altro utente
- come admin voglio poter moderare le richieste di prestito
- Gestione magazzino Ecommerce
- come admin voglio poter accedere ad un’area privata tramite username e password
- come admin voglio gestire le rimanenze e i re-ordini dei prodotti
- il server deve inviare una email all’admin quando sta per terminare un prodotto
- come admin voglio poter creare e inserire un nuovo prodotto (con proprietà come nome, descrizione, peso, ecc.)
- come user voglio essere avvertito quando un prodotto terminato, risulta nuovamente disponibile.
- Client Web di GIT
- come utente voglio poter accedere ad un’area privata tramite username e password
- come utente voglio poter leggere la lista dei miei repo
- come utente voglio poter vedere il codice di un repo
- come utente voglio poter vedere un grafico che mi illustri l’alberatura dei branch di un repo
- come utente voglio poter fare un pull-request da un branch
Materiale
Webinar del corso
- Lezione 2: mattina https://www.youtube.com/watch?v=UfnQJAEafKg / pomeriggio https://www.youtube.com/watch?v=2iVpGC7MPy8
- Lezione 3: mattina https://www.youtube.com/watch?v=7dVwc3_5xPE / pomeriggio https://www.youtube.com/watch?v=Hrwf2P7EYvs
- Lezione 4: mattina https://www.youtube.com/watch?v=pfoDnilCd2w / pomeriggio https://www.youtube.com/watch?v=m00Dmuwvx7M
- Lezione 5: video lezione webex pt.2
- Lezione 6: video lezione webex
- Lezione 7: video lezione webex pt.1, video lezione webex pt.2
- Lezione 8: video lezione webex
- Lezione 10: pt.1
Testi e Risorse di Riferimento
- Manifesto Agile http://agilemanifesto.org/iso/it/manifesto.html
- What do Prototypes Prototype https://pdfs.semanticscholar.org/30bc/6125fab9d9b2d5854223aeea7900a218f149.pdf
- repo lezione 3 con esempi html e css https://github.com/e-xtrategy/unicam-html-css
- html tag list https://www.w3schools.com/tags/default.asp
- conditional comments https://www.quirksmode.org/css/condcom.html
- You don't know JS https://github.com/getify/You-Dont-Know-JS
- Documentazione angularjs https://docs.angularjs.org
- Tutorial angularjs https://docs.angularjs.org/tutorial
Lezione 5 (Angular)
Lezione 6 (Git e altri tool)
- Git - Slide su termini e parole chiave
- Git - comandi base
- Git - Stash, accantonare le modifiche senza committarle
- Git client - SourceTree o GitKraken
- GitHub - hosting open di server git
- GitLab - hosting privato di server git, da installare sul proprio server
- Mobirise - free responsive website drag&drop editor
- Bootstrap - framework to build responsive websites
- Bootstrap - come funziona il grid system
- Esercitazioni
- clone, push, commit
- Ordered List Itema gruppi, create un repository su github a gruppo (aggiungete gli altri come collaboratori)
- clonatelo tutti localmente
- un collaboratore fa delle modifiche –>stage–>commit–>push
- gli altri fanno pull
- merge e conflitti
- provate a modificare file diversi, file uguali su righe diverse, file uguali sulle stesse righe
- imparate a gestire i conflitti e i merge
- CLI (command line interface)
- non dimenticate la riga di comando, fate le stesse prove da terminale/bash/prompt
Lezione 7 (NodeJS)
- Server side vs Client side - Example
- Closure - how to use it example
- MEAN - Lo stack MEAN
- JSON - basic tutorial
- NodeJs (package.js, install, etc.)- tutorial for beginners
- .env - How to create and read a config param in Node example
- Winston - Advanced logging tutorial
- Heroku - How to deploy a Nodejs server to Heroku cloud how to
- Express - get params of the routes tutorial
- Express - esempio completo con backend e frontend angolar, per file upload tutorial
- Angularjs - a very good tutorial
Lezione 8 (MongoDb)
- panoramica stack MEANarchitettura.pdf
- MongoDB - panoramica e carrellata comandi[1], [2]
- NOSQL - intro
- MongoDB - Affinità tra Mongo e RDBMS
- MongoDB - BSON
- MongoDB vantaggi - perchè utilizzare NOSQL?
- MongoDB comandi esempi di query e indici [1], [2]
- Mongoose - official page
- Mongoose - models
- Mongoose - field types
- Mongoose - fields validation
- Mongoose - Nodejs tutorial
- NodeJs, Express - come organizzare le route
Lezione 9 (JWT)
- JWT - Json Web token
- JWT Auth0 - approfondimento
- JWT+Node - Tutorial
Lezione 10 (promesse Q)
- Esempio di server su GitHub. Scaricare, studiare e sviluppare secondo le specifiche del vostro progetto.
Esami
Modalità di Esame
Tutti i gruppi dovranno consegnare il loro codice tramite un repository github. Tutte le commit dovranno essere fatte dagli studenti dal proprio account personale in modo da rendere evidente chi ha fatto cosa.
Nel readme del repository deve essere presente:
- link all’app deployata su heroku
- procedura per far partire in locale il progetto
- procedura per deployare
- descrizione dell’architettura del codice e delle cartelle
- link ai wireframe
- nome e cognome di tutti gli studenti del gruppo con numero di matricola
Si potrà dare l’esame in 2 modi:
- Giornata di presentazione dal vivo il giorno 14 settembre 2017 con inizio alle ore 9: presentando dal vivo il proprio progetto. Tutti i membri del gruppo dovranno parlare e avranno a disposizione massimo 10 minuti, più 5 per le domande.
- Consegna asincrona: inviando il link al repo a daniele.fani@unicam.it con oggetto “consegna esame programmazione web 2017”. Nel caso di consegna asincrona dovrà essere aggiunta una sesta informazione al readme: link a video youtube pubblico dove tutti i membri del gruppo illustrano il progetto. La consegna asincrona potrà essere effettuata a partire dall’inizio della prima sessione di esami dopo la fine del corso in qualsiasi momento. La registrazione ufficiale avverrà alla prima data a calendario accademico disponibile.
Modalità di Valutazione
I docenti assegneranno da 1 a 3 punti per ogni user story completata. Le 10 user story daranno un punteggio massimo di 30.
Nota
gli studenti che vogliono sostenere l'esame negli appelli ancora disponibili dell'A.A. 2015/2016 consultino la pagina web del corso dell'anno accademico 2015/16 Programmazione Web A.A. 2015/16