Slide 1

Slide 1 text

Strumenti per lo sviluppo web Automatizza operazioni ripetitive e noiose

Slide 2

Slide 2 text

Mi presento Davide Moro ● appassionato software libero ● Python (Plone, Zope, Pyramid, Django) ● Javascript (JQuery, AngularJS)

Slide 3

Slide 3 text

Argomenti talk ● evitare operazioni lunghe e noiose ● automazione ● produttività ● routine di lavoro efficiente ● applicazioni web Bisogna lavorare molto su...

Slide 4

Slide 4 text

… prigrizia! Image courtesy of koratmember at FreeDigitalPhotos.net

Slide 5

Slide 5 text

Obiettivi ● soluzioni generiche e riusabili ● evitare operazioni manuali ● delegare lavoro ai computer ● strumenti per migliorare esperienza sviluppo In pratica (valido solo per gli informatici :) ● > prigrizia, > produttività

Slide 6

Slide 6 text

Sviluppo web... molti minimizzano (una paginetta html, jquery)... Image courtesy of koratmember at FreeDigitalPhotos.net

Slide 7

Slide 7 text

Sviluppo web… realtà è dura! Image courtesy of Naypong at FreeDigitalPhotos.net

Slide 8

Slide 8 text

Sviluppo web - in realtà ● scaffolding ● gestione librerie terze parti ● test automatici ● code linting ● altre perdite di tempo “nascoste” ● gestione dipendenze dev vs production ● setup ambiente mock

Slide 9

Slide 9 text

Sviluppo web (deploy) - 1 ● html minificato ● ridurre numero download risorse e banda ● auditing ● immagini ottimizzate ● css concatenati e minificati ● ...

Slide 10

Slide 10 text

Sviluppo web (deploy) - 2 ● javascript concatenati e minificati ● problematiche cache (revving) ● CDN ● uncss regole css non utilizzate ● altre tecniche avanzate front end legate alle prestazioni (talk Addy Osmani) ● ...

Slide 11

Slide 11 text

Yeoman! http://yeoman.io “The web's scaffolding tool for modern webapps” Non si tratta solo di uno strumento ma di un nuovo modo di lavorare!

Slide 12

Slide 12 text

Yeoman Composto da 3 tool principali: ● yo, scaffolding ● grunt, build/task system (o gulp) ● bower/npm, package manager e gestore dipendenze

Slide 13

Slide 13 text

Yo! ● Esempi: ○ yo angular ○ yo webapp ○ … ● centinaia di generatori disponibili e sottocomandi ● scrivi il tuo generatore!

Slide 14

Slide 14 text

generator-angular (1) Struttura app:

Slide 15

Slide 15 text

generator-angular (2) app:

Slide 16

Slide 16 text

generator-angular (3) dist:

Slide 17

Slide 17 text

Grunt! Esempi: ● grunt build ● grunt serve ● grunt test ● grunt jshint ● ecc

Slide 18

Slide 18 text

Gruntfile.js (task)

Slide 19

Slide 19 text

Gruntfile.js (pipeline)

Slide 20

Slide 20 text

jshint Errori di sintassi javascript o di stile prontamente segnalati

Slide 21

Slide 21 text

concat, cssmin, uncss Ridotto numero di request e banda

Slide 22

Slide 22 text

concat Uso di annotazioni direttamente nell’html per determinare i blocchi di css e js da concatenare, minificare, ecc. Esempio:

Slide 23

Slide 23 text

grunt-uncss Riduzione considerevole download size css (Twitter Bootstrap o altri framework UI)

Slide 24

Slide 24 text

cdnify Switch automatico CDN

Slide 25

Slide 25 text

Bower! Esempi: ● bower search angular ● bower install --save angular ● bower install --save-dev angular-mocks

Slide 26

Slide 26 text

bower.json

Slide 27

Slide 27 text

Risultati ● boostrap iniziale veloce e di qualità ● linting automatico del codice javascript ● reload automatico server e browser ● setup test javascript ● ambiente di lavoro e produzione RIPETIBILE ● build versione PRODUZIONE ● compass + sass ready

Slide 28

Slide 28 text

Tutto gratis … senza perdere tempo e mal di testa!

Slide 29

Slide 29 text

Yeoman - altro ● Estendi il tuo workflow ○ numerosi plugin disponibili ○ sviluppa nuovi task ● Esempio: ○ pageres: screenshot automatici a diverse risoluzioni ○ grunt-aws-s3: deploy automatico AWS S3 + CloudFront ○ json-server: prototipazione rapida

Slide 30

Slide 30 text

Yeoman - pageres ● pageres: “Capture screenshots of websites in various resolutions. A good way to make sure your websites are responsive.” ● Origine foto: https://twitter.com/nikmd23/status/520138885490548736

Slide 31

Slide 31 text

Yeoman - json-server Supporta query ricerca (es: ?attr=5)

Slide 32

Slide 32 text

Framework web? ● non solo html statico… ● Esempi di integrazione con un framework ○ NodeJS/Express (Javascript) ○ loopback.io (Javascript) ○ Pyramid (Python) ○ Plone (Python) ● Adattabile a qualsiasi framework con un minimo di lavoro

Slide 33

Slide 33 text

NodeJS ● piattaforma basata su Javascript (V8) ● event-driven ● non-blocking I/O model ● data-intensive real-time applications that run across distributed devices

Slide 34

Slide 34 text

ExpressJS ● framework web basato su NodeJS ● minimale ● unopinionated (database, templating, ecc) ● molto popolare ● ha un proprio generatore di progetti (non basato su Yeoman) http://expressjs. com/starter/generator.html

Slide 35

Slide 35 text

ExpressJS - esempio

Slide 36

Slide 36 text

express-angular express-angular: esempio (didattico) integrazione NodeJS + ExpressJS + AngularJS con workflow Yeoman: ● blog post: http://bit.ly/16WZ40Q ● codice: http://bit.ly/ZBymwX

Slide 37

Slide 37 text

Premesse express-angular ● illustrati passi necessari per adattare uno scaffold generato con express con un progetto Yeoman su http://bit.ly/16WZ40Q ● si tratta solo di uno studio di fattibilità (puro scopo dimostrativo) ● un po’datato ma utile per capire (vecchia versione di Express)

Slide 38

Slide 38 text

express-angular

Slide 39

Slide 39 text

express-angular ● app di esempio (solo studio di fattibilità) ● ok per SPA limitate ● produzione/dev ● Yeoman ready

Slide 40

Slide 40 text

loopback.io ● framework basato su ExpressJS ● indicato per model-driven apps fortemente dinamiche ● generazione API REST tramite CLI ● Android, iOS, JavaScript SDKs ● generazione automatica Javascript (client side) per comunicazioni con end-point REST

Slide 41

Slide 41 text

loopback.io (2) ● MySQL, Oracle, MongoDB, Postgres, … ● Javascript lato client (AngularJS) ● Login Facebook, Google, Github, … ● Geolocalizzazione ● Role-based access controls ● Licenza MIT

Slide 42

Slide 42 text

loopback.io (Angular SDK) ● endpoint REST generato tramite CLI (es: users) ● grunt-loopback-angular: generazione automatica Javascript (client side) che interagisce con l’end-point REST server side (!!!)

Slide 43

Slide 43 text

loopback.io (grunt conf)

Slide 44

Slide 44 text

loopback.io (AngularJS) Wow!!!

Slide 45

Slide 45 text

Pyramid (1) http://trypyramid.com ● framework web minimale ● “start small, finish big” ● database e template agnostico ● architettura pluggable ed estensibile (no fork) ● molto flessibile (url dispatch vs traversal)

Slide 46

Slide 46 text

Pyramid (2) ● utilizza librerie standard (non implementa il suo ORM, request object, ecc) ● uno dei primi framework con supporto Python3 ● documentato e testato (http://docs. pylonsproject.org/projects/pyramid/en/latest/)

Slide 47

Slide 47 text

Pyramid - progetti ● intranet & knowledge management (http: //karlproject.org) ● Web application framework + CMS (http: //kotti.pylonsproject.org) ● applicazioni web verticalizzate in genere

Slide 48

Slide 48 text

Pyramid - librerie Librerie utili per lo sviluppo web: ● rest_toolkit ● pyramid_sqlalchemy

Slide 49

Slide 49 text

Pyramid - minimale

Slide 50

Slide 50 text

PSS pyramid_starter_seed: esempio integrazione framework Pyramid + Yeoman + soluzione riusabile (kickstart) ● blog - http://bit.ly/1AR2Oiu ● codice - http://bit.ly/1raI7cJ

Slide 51

Slide 51 text

Premesse PSS ● basato sullo scaffold standard Pyramid ● adotta tecnica uncss ● soluzione riusabile ○ installa ○ customizza ○ cambia nome al progetto con uno script di clone e rilascia

Slide 52

Slide 52 text

Prerequisiti PSS ● NodeJS (npm, grunt, bower) ● Python ● Python virtualenv (opzionale, ma consigliato) ● git clone [email protected]: davidemoro/pyramid_starter_seed.git

Slide 53

Slide 53 text

Installazione PSS $ cd pyramid_starter_seed $ python setup.py develop $ cd pyramid_starter_seed/webapp $ bower install $ npm install

Slide 54

Slide 54 text

Esecuzione PSS $ cd ../.. $ ./bin/pserve development.ini $ ./bin/pserve production.ini

Slide 55

Slide 55 text

Risultato Visita http://localhost:3000

Slide 56

Slide 56 text

PSS main

Slide 57

Slide 57 text

PSS view

Slide 58

Slide 58 text

PSS template

Slide 59

Slide 59 text

PSS config

Slide 60

Slide 60 text

Vantaggi PSS Rispetto a scaffold originale produzione: ● html minificato (~7Kb -> ~4Kb) ● immagini ottimizzate ● switch automatico CDN ● plugin javascript Bootstrap componibili ● uncss ● può essere fatto molto di più...

Slide 61

Slide 61 text

Riassunto PSS Sviluppo ● esperienza di sviluppo migliorata ● kickstart nuovi progetti basati su AS Produzione ● risparmiati ~38 Kb (su una base di partenza già pronta e ottimizzata per andare in produzione)

Slide 62

Slide 62 text

Clone PSS Installa PSS, modificalo aggiungendo nuove funzionalità (per esempio: AngularJS, REST, autenticazione, modelli utente, ecc) e rilascia: ● $ pyramid_starter_seed_clone new_template

Slide 63

Slide 63 text

PSS feedback

Slide 64

Slide 64 text

Plone (1) CMS + framework sviluppo web ● intranet ● portali collaborativi Applicazioni verticalizzate: ● gestore contenuti, workflow, security, sharing, ricerca, configurazioni TTW

Slide 65

Slide 65 text

Plone (2) ● dexterity ● curva di apprendimento critica ● community super friendly Link: ● http://plone.org ● http://docs.plone.org ● http://plone-training.readthedocs.org/en/latest

Slide 66

Slide 66 text

Plone - cowork (1)

Slide 67

Slide 67 text

Plone - cowork (2)

Slide 68

Slide 68 text

Plone - search

Slide 69

Slide 69 text

angularstarter (AS) collective.angularstarter: esempio integrazione framework Plone + Yeoman + AngularJS + soluzione riusabile (kickstart) ● blog - http://bit.ly/1xnoR38 ● codice - http://bit.ly/1ykHRwH

Slide 70

Slide 70 text

Premesse AS ● basato sullo scaffold standard Plone ● soluzione riusabile ○ installa ○ customizza ○ cambia nome al progetto con uno script di clone e rilascia

Slide 71

Slide 71 text

Prerequisiti AS ● NodeJS (npm, grunt, bower) ● Python ● Plone (vedi documentazione ufficiale per installazione)

Slide 72

Slide 72 text

Risultato Applicazione Plone + Angular + Bootstrap

Slide 73

Slide 73 text

AS - devel mode Network (devel mode)

Slide 74

Slide 74 text

AS - production mode Network (production mode)

Slide 75

Slide 75 text

AS configure

Slide 76

Slide 76 text

AS template Semplice!

Slide 77

Slide 77 text

Vantaggi AS (1) ● pattern riusabile ed estensibile per integrazione Plone + Angular + Yeoman ● leggero (~57 Kb totali per prima request) ● html minificato (~2.1Kb -> ~0.9Kb) ● immagini ottimizzate ● switch automatico CDN ● plugin javascript Bootstrap componibili

Slide 78

Slide 78 text

Vantaggi AS (2) ● uncss ● file revving ● integra soluzione javascript i18n ● ottima soluzione per SPA (da associare a content type, REST per applicazioni più evolute)

Slide 79

Slide 79 text

Riassunto AS Sviluppo ● esperienza di sviluppo migliorata (Angular e Yeoman integrati) ● kickstart nuovi progetti basati su AS Produzione ● già ottimizzato

Slide 80

Slide 80 text

Clone AS Installa AS, modificalo aggiungendo nuove funzionalità (per esempio: AngularJS, REST, autenticazione, modelli, ecc) e rilascia: ● $ collective_angular_starter_clone your. awesomeplugin

Slide 81

Slide 81 text

Ulteriori approfondimenti Tecniche avanzate front-end, tooling e ottimizzazione prestazioni (Addy Osmani): ● https://speakerdeck.com/addyosmani/css- performance-tooling

Slide 82

Slide 82 text

Trend crescita Interesse Yeoman, AngularJS, grunt, etc

Slide 83

Slide 83 text

Domande? ???

Slide 84

Slide 84 text

Davide Moro ● Blog: http://davidemoro.blogspot.it ● Twitter: @davidemoro ● Google Plus: +davidemoro ● Linkedin: http://it.linkedin. com/in/davidemoro82 ● Posta elettronica: [email protected]

Slide 85

Slide 85 text

Resoconto ● Resoconto mio LinuxDay2014 Torino ● Domande e risposte alla fine del talk Link: ● http://bit.ly/1rFh2yH