Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
didattica:triennale:pw:ay_1718:main [2017/09/16 19:26]
mescal removed
— (current)
Line 1: Line 1:
-====== Programmazione Web ====== 
----- 
-===== News ===== 
  
- 
-<WRAP center round important 95%> 
-  * <wrap em>**11 Settembre 2017**</​wrap>:​ **L'​appello** per l'​esame in presenza è stato spostato a venerdì **29 Settembre 2017**, alle 10:00. Guardate sotto la sezione "​Modalità di Esame" che è stata aggiornata 
-  * <wrap em>**7 Settembre 2016**</​wrap>:​ 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: [[didattica:​triennale:​pw:​ay_1516:​main|Programmazione Web A.A. 2015/​16]] ​ 
-</​WRAP>​ 
- 
----- 
-===== Informazioni Generali ===== 
-<WRAP box round 95% center> 
-**Docente**: ​ 
-  * Leonardo Mostarda più docenti esterni di aziende specializzate 
-</​WRAP>​ 
- 
- 
- 
- 
----- 
- 
-===== Obiettivi del Corso ===== 
- 
-<WRAP box round 95% center> 
- 
-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. 
- 
- 
-</​WRAP>​ 
- 
----- 
- 
- 
-===== Calendario delle Lezioni ===== 
-<WRAP box round 95% center> 
-  * [[https://​drive.google.com/​drive/​folders/​0BzDyK245kXvlOXpyaHhmU2NMX2s?​usp=sharing|link ai video 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 autenticate con JWT 
-  * 14/06/2017 11-16 promesse Q in javascript 
-  * 21/06/2017 11-15 Laboratorio e ripasso 
- 
- 
-</​WRAP>​ 
----- 
-===== Contenuti del Corso ===== 
- 
-<WRAP round 95% center box> 
-  * 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 
- 
-</​WRAP>​ 
----- 
- 
- 
-===== Strumenti ===== 
- 
-<WRAP round 95% center box> 
-  * 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 
- 
-</​WRAP>​ 
----- 
- 
-===== Modalità di Frequenza ===== 
-<WRAP round 95% center box> 
-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 [[http://​didattica.cs.unicam.it/​doku.php?​id=didattica:​triennale:​pw:​ay_1718:​main#​materiale|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 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-</​WRAP>​ 
- 
----- 
- 
- 
- 
-===== Materiale ===== 
-<WRAP box round center 95%> 
-**Webinar del corso** 
-  * Lezione 1 https://​www.youtube.com/​watch?​v=1no4NKsczRw 
-  * 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: [[https://​drive.google.com/​open?​id=0BzDyK245kXvlSVVhYk80YXlTZVU|video lezione webex pt.2]] 
-  * Lezione 6: [[https://​drive.google.com/​file/​d/​0BzDyK245kXvlTVladUVyZHhyYjQ/​view?​usp=sharing|video lezione webex]] 
-  * Lezione 7: [[https://​drive.google.com/​file/​d/​0BzDyK245kXvlbDlPaG12SmNGbnc/​view?​usp=sharing|video lezione webex pt.1]], [[https://​drive.google.com/​open?​id=0BzDyK245kXvlQkVvSzE2eDJobGM|video lezione webex pt.2]] 
-  * Lezione 8: [[https://​drive.google.com/​open?​id=0BzDyK245kXvlMmxXNTF0Mk93dVE|video lezione webex]] 
-  * Lezione 9: [[https://​drive.google.com/​open?​id=0BzDyK245kXvlODlicmhSbmlwcWs|pt.1]] [[https://​drive.google.com/​open?​id=0BzDyK245kXvla1piTFNJWVcydTA|pt.2]] 
-  * Lezione 10: [[https://​drive.google.com/​open?​id=0BzDyK245kXvlUFU1RXRyWFBpUHc|pt.1]] [[https://​drive.google.com/​open?​id=0BzDyK245kXvlNy05TmxKYVlXZkU|pt.2]] 
- 
- 
-**Testi e Risorse di Riferimento** 
-  * Spotify Method http://​blog.crisp.se/​wp-content/​uploads/​2014/​10/​Screen-Shot-2014-10-07-at-08.20.00.png 
-  * 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 
-  * css props https://​www.w3schools.com/​cssref/​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 
-  * Guida MongoDb https://​docs.mongodb.com/​manual/​tutorial/​install-mongodb-on-windows/#​run-mongodb-community-edition 
- 
- 
-**Lezione 5 (Angular)** 
-  * [[http://​slides.com/​extrategy/​angular-2-12#/​|Slide lezione]] 
- 
-**Lezione 6 (Git e altri tool)** 
-  * [[https://​drive.google.com/​file/​d/​0BzDyK245kXvlTVladUVyZHhyYjQ/​view?​usp=sharing|video lezione]] 
-  * Git - [[https://​www.slideshare.net/​matteogavagnin/​git-bestpractices?​qid=21554667-7f40-455d-8233-a58ba3fc2ce8&​v=&​b=&​from_search=5|Slide]] su termini e parole chiave 
-  * Git - [[http://​rogerdudler.github.io/​git-guide/​index.it.html|comandi base]] 
-  * Git - [[https://​git-scm.com/​book/​it/​v1/​Strumenti-di-Git-Accantonare|Stash]],​ accantonare le modifiche senza committarle 
-  * Git - [[http://​stackoverflow.com/​questions/​3689838/​difference-between-head-working-tree-index-in-git|differenza tra index e HEAD]] 
-  * Git client - [[http://​sourcetreeapp.com|SourceTree]] o [[https://​www.gitkraken.com|GitKraken]] 
-  * [[http://​github.com|GitHub]] - hosting open di server git 
-  * [[http://​gitlab.com|GitLab]] - hosting privato di server git, da installare sul proprio server 
-  * [[https://​mobirise.com|Mobirise]] - free responsive website drag&​drop editor 
-  * [[https://​v4-alpha.getbootstrap.com|Bootstrap]] - framework to build responsive websites 
-  * Bootstrap - come funziona il [[http://​www.helloerik.com/​the-subtle-magic-behind-why-the-bootstrap-3-grid-works|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)** 
-  * [[https://​drive.google.com/​file/​d/​0BzDyK245kXvlbDlPaG12SmNGbnc/​view?​usp=sharing|video lezione pt.1]], [[https://​drive.google.com/​open?​id=0BzDyK245kXvlQkVvSzE2eDJobGM|pt.2]] 
-  * Server side vs Client side - [[http://​www.codeconquest.com/​website/​client-side-vs-server-side/​|Example]] 
-  * Closure - how to use it [[https://​howtonode.org/​why-use-closure|example]] 
-  * MEAN - [[https://​www.slideshare.net/​ibuildingsIT/​mean-35687380?​qid=dfad8d98-1754-417b-aed7-cdf68546f94c&​v=&​b=&​from_search=2|Lo stack MEAN]] 
-  * JSON - [[https://​www.tutorialspoint.com/​json/​json_overview.htm|basic tutorial]] 
-  * NodeJs (package.js,​ install, etc.)- [[https://​www.tutorialspoint.com/​nodejs/​nodejs_npm.htm|tutorial for beginners]] 
-  * .env - How to create and read a config param in Node [[https://​www.npmjs.com/​package/​node-env-file|example]] 
-  * Winston - Advanced logging [[http://​tostring.it/​2014/​06/​23/​advanced-logging-with-nodejs/​|tutorial]] 
-  * Heroku - How to deploy a Nodejs server to Heroku cloud [[https://​scotch.io/​tutorials/​how-to-deploy-a-node-js-app-to-heroku|how to]] 
-  * Express - get params of the routes [[https://​scotch.io/​tutorials/​use-expressjs-to-get-url-and-post-parameters|tutorial]] 
-  * Express - esempio completo con backend e frontend angolar, per file upload [[https://​scotch.io/​tutorials/​angular-file-uploads-with-an-express-backend|tutorial]] 
-  * Angularjs - a very good [[https://​www.codeschool.com/​courses/​shaping-up-with-angularjs|tutorial]] 
- 
-**Lezione 8 (MongoDb)** 
-  * [[https://​drive.google.com/​open?​id=0BzDyK245kXvlMmxXNTF0Mk93dVE|video lezione]] 
-  * panoramica stack MEAN{{ :​didattica:​triennale:​pw:​ay_1516:​architettura.pdf |}} 
-  * MongoDB - [[https://​www.slideshare.net/​savez/​mongodb-15962567?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=6|panoramica e carrellata comandi[1]]],​ [[https://​www.slideshare.net/​mixmax99/​webinar-back-to-basics-01-introduzione?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=18|[2]]] 
-  * NOSQL - [[https://​www.slideshare.net/​yourAlbertoOlla/​introduzione-database-nosql?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=10|intro]] 
-  * MongoDB - [[https://​www.slideshare.net/​yourAlbertoOlla/​mongodb-in-un-app?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=7|Affinità tra Mongo e RDBMS]] 
-  * MongoDB - [[https://​www.slideshare.net/​yourAlbertoOlla/​schema-dinamico|schema dinamico]], [[https://​www.slideshare.net/​yourAlbertoOlla/​schema-design-52534839?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=9|Schema Design]], [[https://​www.slideshare.net/​yourAlbertoOlla/​join-transaction-e-prejoin|Pre-Join]] 
-  * MongoDB - [[https://​www.slideshare.net/​yourAlbertoOlla/​json-e-bson|BSON]] 
-  * MongoDB vantaggi - [[https://​www.slideshare.net/​mixmax99/​mongodb-quantificare-il-vantaggio-di-business?​next_slideshow=1|perchè utilizzare NOSQL?]] 
-  * MongoDB comandi [[https://​www.slideshare.net/​mixmax99/​webinar-back-to-basics-session-4-indexing?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=11|esempi di query e indici [1]]], [[https://​www.slideshare.net/​mixmax99/​2014-it-app-dev-series-03-interagire-con-il-database-40438650?​qid=26c128fb-365c-43fc-bbbf-2cb35d0e6463&​v=&​b=&​from_search=16|[2]]] 
-  * Mongoose - [[http://​mongoosejs.com|official page]] 
-  * Mongoose - [[http://​mongoosejs.com/​docs/​models.html|models]] 
-  * Mongoose - [[http://​mongoosejs.com/​docs/​schematypes.html|field types]] 
-  * Mongoose - [[http://​mongoosejs.com/​docs/​validation.html|fields validation]] 
-  * Mongoose - [[https://​scotch.io/​tutorials/​using-mongoosejs-in-node-js-and-mongodb-applications|Nodejs tutorial]] 
-  * NodeJs, Express - [[https://​scotch.io/​tutorials/​keeping-api-routing-clean-using-express-routers|come organizzare le route]] 
- 
-**Lezione 9 (JWT)** 
-  * [[https://​drive.google.com/​open?​id=0BzDyK245kXvlMmxXNTF0Mk93dVE|video lezione pt.1]] [[https://​drive.google.com/​open?​id=0BzDyK245kXvla1piTFNJWVcydTA| pt.2]] 
-  * JWT - [[https://​scotch.io/​tutorials/​the-anatomy-of-a-json-web-token|Json Web token]] 
-  * JWT - [[https://​ponyfoo.com/​articles/​json-web-tokens-vs-session-cookies|token vs session authentication (lettura)]] ​ 
-  * JWT - [[https://​auth0.com/​blog/​cookies-vs-tokens-definitive-guide/​|token vs session authentication (con esempi di codice)]] 
-  * JWT Auth0 - [[https://​scotch.io/​tutorials/​the-easiest-way-to-add-authentication-to-any-app|approfondimento]] 
-  * JWT+Node - [[https://​scotch.io/​tutorials/​authenticate-a-node-js-api-with-json-web-tokens|Tutorial]] 
-  * [[https://​jwt.io|www.jwt.io]] 
- 
-**Lezione 10 (promesse Q)** 
-  * [[https://​drive.google.com/​open?​id=0BzDyK245kXvlUFU1RXRyWFBpUHc|video pt.1]] 
-  * [[https://​drive.google.com/​open?​id=0BzDyK245kXvlNy05TmxKYVlXZkU|video pt.2]] 
-  * [[https://​github.com/​De-Lac/​NodeJs_server_examaple/​blob/​master/​README.md|Esempio di server su GitHub]]. Scaricare, studiare e sviluppare secondo le specifiche del vostro progetto. 
- 
-** Lezione 11** 
-  * Esercitazione finale mercoledì 28 dalle 11:00 in poi. Sono inoltre disponibile a chiarire eventuali dubbi e argomenti. Visto l'​esame di sistemi del 29, se volete possiamo fare solo mattina, e programmare un altro incontro. 
-  * [[https://​github.com/​De-Lac/​AngularJs_client_example|Esempio di client Angular su GitHub]]. Scaricare, studiare e sviluppare secondo le specifiche del vostro progetto. 
- 
- 
-</​WRAP>​ 
----- 
-===== Esami ===== 
-<WRAP box round center 95%> 
-====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 29 settembre 2017 con inizio alle ore 10:** 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. Preparate un pdf con il testo del progetto, le user stories implementate,​ una descrizione dell'​architettura del progetto (struttura file, componenti software ecc.) e qualche screenshot della demo live 
-  * **Consegna asincrona:​** inviando il link al repo a <​daniele.fani@unicam.it>​ con oggetto “consegna esame programmazione web 2017”. Nel caso di consegna asincrona si dovrà: 
-    * riempire il file ReadMe del repo GitHub. Potete prendere spunto dal [[https://​github.com/​De-Lac/​NodeJs_server_examaple|mio esempio]] 
-    * scrivere nel ReadMe di GitHub il testo del progetto (con le varie user stories) ed eventuali credenziali per l'​accesso Admin 
-    * fare un breve video di presentazione del progetto (qui un [[https://​www.youtube.com/​watch?​v=sYJh6m3IWIU&​t=261s|esempio]]) e scrivere nel ReadMe il link youtube. Nel video tutti i membri del gruppo illustrano il progetto. Potete anche comparire qualche secondo solo all'​inizio,​ dove vi presentate, e poi proseguite con le voci fuori campo che commentano delle slide e la demo live. 
-    * link a un pdf con il contenuto simile al readme (membri gruppo, testo progetto, user stories, link a GitHub e video, architettura componenti software..) 
- 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 [[didattica:​triennale:​pw:​ay_1516:​main|Programmazione Web A.A. 2015/16]] 
-</​WRAP>​