---
# System prepended metadata

title: Details of AW1 / WA1

---

# Details of AW1 / WA1

## Dettaglio corso

- ogni settimana: 3 ore di lezione/esercitazione
- ogni settimana: 1,5 ore di laboratorio (eccetto la prima settimana?)
- soluzione 2-3 settimana dopo.

## Tools
- VSCode in Linux (o WSL su Win10)
- Firebase (with authentication): per vedere un po' di storage cloud.
- node.js, express per REST, webpack

## Guides/Books/Biblio
- JS: ?
- React: primi capitoli di "Fullstack React -The Complete Guide to ReactJS and Friends", by Anthony Accomazzo etc, 2016-2019

## Sample apps / guides
- twitter?  DB di amici. Tweet di quelli che seguo NON deve essere lato client!
- tweet dei followers: fatto bene serve minimo di logica server
- doodle
    - rogna con le date
- gioco a premi online 2 volte al giorno: 20 domande etc.... in sincrono su tutto il mondo, se sbagli sei fuori dalla vincita, se rispondi a tutte e 20 concorri all'estrazione


## Meeting 20191206. Concordato:
- Piattaforma: Linux (nodejs etc., al massimo WSL su Win10)
- Far vedere un minimo di lato server, fatto in proprio con nodejs, poi passare a framework per evitare di perdere tempo in metodi "stupidi"

- Opzioni backend
    - **self hosted**, open source: esistono framework ragionevoli?
        - Antonio: Parse (by Facebook); Hood.ie (offline first)
    - **firebase** (free ma richiede carta credito per funzioni con logica)
        - Alternative? piattaforma cloud con functions da mettere a disposizione (Google Amazon Azure Heroku IBMBlueMix)

    - **cloud vero**, comunque, provare ad usarlo 
        - firebase datastore: solo database ma niente logica
        - storage + microservices (lambda, servizi, callback)
        - backend di storage + logica fatto da sviluppatore (es. nodejs, express): vantaggio che vedi anche un server da qualche parte


## Note su cosa fare/non fare
- JS: let e const e basta, non approfondire aspetti di JS vecchio (var etc.)
- JS asincrono serve almeno per il server
- serve conoscere un minimo di DOM e JS
    - in React il DOM non lo vedi neanche (virtualDOM)
- Programma: per Firebase SDK 3 ore e' eccessivo
- Firebase ti nasconde reattivita' lato client (subscription ecc.): websocket, longpolling, server side events.
- alternativa: framework che ti generano il codice del server REST, non bello
- OK per provare a fare un'API che ti fai tu sul tuo server, NO fare che trovi tutto in cloud. NO fare un database esplicito, usare Firebase anche da backend se necessario
    - API se solo storage: si usa gia' fatte (es. Firebase)
    - API con logica: me lo faccio su mia piattaforma (es. expressjs in nodejs) o su servizio cloud. Da nodejs, se necessario, prendi i dati da firebase, invece di farglieli prendere dal browser

## Course detailed organization

### Lecture 1: HTTP, HTML/CSS (reharsal)

* Web architecture and HTTP protocol
* HTML5, CSS
* Sample "traditional" web app 1.0 (with dynamic part on server, e.g., PHP-like, as seen in DB course at Polito)
* Development tools in the browser (including HTTP tab network)
* Hosting on servers (use of local node.js  with npm package http-server)
* Principles of design
    * LAB: Create a simple web page with some CSS formatting, analyze/debug it with browser development tools. Use of a simple web server based on node.js and a basic HTTP server (NO express)

### Lecture 2: Complex Layouts, Accessibility, Usability

* Complex layouts
* Advanced CSS and libraries
* Usability and Accessibility (WCAG, ARIA)
* Good practices(Accessibility testing)
    * LAB: Create a complex web page layout copying an existing website, using a standard CSS library (e.g., Bootstrap)

### Lecture 3: Introduction to JS

* JS as a programming language (C syntax, Python semantic): phylosophy and peculiarities ("comportamenti strani a cui fare attenzione")
* JS execution in the browser
* JS execution in other environments (Node)
    * LAB: JS Programming exercise
        * In node.js (via VScode)
        * In the browser

*??? Forms: where to put them?*

### Lecture 4: Advanced JS

* DOM
* Events
* Callbacks
* Closures (NO Functional programming)
* ??async/wait??
    * LAB: JS "complex" exercise (???Enrico: with callbacks and some async programming e.g. at least timers or similar)

*Note: Browser recenti, app "gestionali"*

### Lecture 5: DOM manipulation in JS 

* Simple DOM manipulations in JS
* Example: Forms+tables ?????, Filtering a table (ModelView on a data structure. Hide all, show X,Y; maybe ask the list to a server as autocompletion feature)
    * LAB: Simple DOM manipulation, maybe using mustache.js??? Malnati: library for templating. 
    
### Lecture 6: AJAX and REST interaction

* Ajax
* Promise/Fetch
* JSON
* REST
* HTTP verbs
    * LAB: Example of simple Read&Store (Table with remote completion, NOT message board), with REST server already provided
    
*MISSING: authentication?*

### Lecture 7: Introduction to Firebase

* Firebase
* Login on Firebase
* CRUD on Firebase
* JSONP
* Subscription on JSON tree in Firebase
    * LAB: Firebase exercise (shopping list - populated by many users at the same time, showing auto-sync(???))

### Lecture 8: Single page applications

* Single page applications
* Reactive programming (in theory) [Antonio: cioe' templating {{}} ]
    * LAB: ???Enrico: experimenting with a provided single page application ????

### Lecture 9: Intro to React

* npm and modules
* Intro to React
* MVC/MVVM patterns
    * LAB: Hello world in React.

### Lecture 10: Web Component e JSX

* Web components
* JSX
    * LAB: Costruction of a complex page with components and JSX but NOT dynamic
    
### Lecture 11: Architecture of an application

* Routing
* Events
* State
* App and data model
    * LAB: Porting of the chat / table of products in React

### Lecture 12: ... free buffer ...

* ...
    * LAB: ...


### Lecture 13: Examples of complex applications

* Deploy
    * LAB: Working on the final project

### Lecture 14: ... ci sara'?