SlideShare a Scribd company logo
1 of 56
JavaScript, from dark ages to
     renaissance, the web apps
     revolution


    Occasion:     CodeCamp Iasi
         Date:    10-11-2012
      Present:    Remus Pereni / Software Architect / remus.pereni@tss-yonder.com
                  Public
Classification:
Vom povesti despre:


●   Diferite modalități de a construi aplicații web
●   De ce JavaScript?
●   Librarii și framework-uri
●   BootstrapJS
●   EmberJS
●   AngularJS




                                                          2
Un pic de istorie

● 1991 Tim Berner lee @CERN: HTML, HTTP 0.9,
  WorldWideWeb
● 1993 Mark Andersen & NCSA, Mosaic 1
● 1994 W3.org (MIT + CERN) / HTML 2
● 1996 CSS 1, Netscape 2, JavaScript
● 1997 HTML 4
● 1998 CSS 2
● 1999 RFC 2616 / IETF + W3, HTTP/1.1
● 2000 XHTML 1
● 2002 Tableless Web Design
● 2005 AJAX
● 2009 HTML 5
Un pic de istorie

● 1995 Netscape / Brendan Eich
● Rol?
   o comunicare cu / dinspre Appleti Java
   o manipulare de continut in pagina
● Netscape 2 / Mocha -> LiveWire-> LiveScript
● Redenumit in JavaScript, miscare de marketing destul de ne-
  inspirata
● Microsoft raspunde cu VBScript iar in 1996 dupa reverse
  engineering un port de JavaScript numit Jscript




                                                                4
Un pic de istorie


● 1996 Netscape + Sun propun standardizarea
  limbajului la ECMA (European Computer
  Manufacturers Association)
● 1997 Standardizare aceptata si noua denumire
  EcmaScript
● Standardizarea acopera doar limbajul in sine.
● API-ul de access la DOM -> W3.org




                                                       5
Caracteristici și categorii de aplicații


Despre ce anume vorbim?
● Aplicații web traditionale (incl. AJAX)
  (Thick Server)
● Aplicații browser (Single Page)
Aplicații web traditionale (Web 2.0) /
                                               Thick Page

Responsabilități Client         Responsabilități Server
● Refresh parțial de conținut   ● Asigură datele
● Validări                      ● Persistență
● Componente usabile            ● Continutul / markup-ul
 o Autocomplete                   complet sau partial pentru
 o Date selector                  client
 o ...
● Animație
Platforma evoluează rapid
Direcții de presiune asupra aplicațiilor
                                        conventionale


1. Așteptări crescute din partea UI si UX
2. Așteptări crescute din partea vitezei de
   reacție
3. Cerințe noi în privința disponibilității
   aplicațiilor pe platforme noi care implică
   modificări de arhitectură




                                                           9
Presiune din partea UI / UX




                              10
Presiune din partea UI / UX




                              11
Presiune din partea UI / UX




                              12
Presiune din partea UI / UX




                              13
Presiune din partea / Vitezei de reacție
“According to Harry Shum, a Microsoft computer scientist,
computer users will visit a Web site less if its loading time is
slower than its competitors by 250 milliseconds, or one-
quarter of a second. That is less time than a single eye blink.
“(
http://www.nytimes.com/interactive/2012/02/29/business/Th
e-Blink-of-an-Eye-Oh-Please.html)

• 500 ms slower = 20% drop in traffic (Google)
• 100 ms slower = 1% drop in sales (Amazon)




                                                                   14
Presiune din partea / Vitezei de reacție




                                           15
Presiune din partea / Vitezei de reacție




                                           16
Presiune din partea / Vitezei de reacție




                                           17
Presiune din partea / Vitezei de reacție




                                           18
Presiune din partea / Arhitecturii

Platform
  IOS & Android &
 Desktop Browser

Type
       Web / HTML5

Runs on
     IPhone/Ipad
  Android phones
  Regular desktop

OS version
    IOS: 4.x, 5.x
     Android: 2.x

Technologies
           HTML5
       JavaScript
    JQuery Mobile
       Phone Gap
 Google Chart API
      Geolocation
     Web services
             JSON
                                                      19
Ce soluții sunt?




                   20
Aplicații browser / Single Page

Responsabilități Client       Responsabilități Server
● Continutul / markup-ul      ● Asigură datele
  complet sau partial bazat   ● Persistență
  pe datele de la backend
● Validări
● Componente usabile
 o Autocomplete
 o Date selector
 o ...
● Animație
● Logică aplicație
Web Application Framework


"A web application framework ("WAF") is a
software framework that is designed to
support the development of dynamic
websites, web applications and web
services. The framework aims to alleviate
the overhead associated with common
activities performed in Web development.”
(Wikipedia)




                                              22
Web Application Framework


Functionalități
o Templating
o Access la baza de date
o Managementul sesiunii (session management)
o Decuplare de componente / Pattern-uri
  (varianta de MVC de obicei)
o Mapare URL
o Internaționalizare (i18n)
o Caching


                                               23
Evoluție




           24
Dezvoltarea de aplicații JavaScript


●   multitudine de optiuni
●   putine standarde si convenții
●   fiecare librarie propria interpretare de MVC
●   o data adoptat un stack, devii dependent de el




                                                            25
Dezvoltarea de aplicații JavaScript

Librării                        Framework-uri
Backbone                        Ember
Knockout                        AngularJS
Spine                           Batman
CanJS                           Meteor
Se adauga la proiect, adauga    Îți impune / dă o arhitectură
functionalitate dar nu impune   (structură de fișiere, ….) și
arhitectură                     încearcă să se ocupe de toate
                                aspectele




                                                                26
Backbone.js

●   http://backbonejs.org

●   Jeremy Ashkenas and DocumentCloud

●   Foarte popular

●   Open Source (MIT)

●   Model View

●   Minimal, doar 800 linii de cod

●   Modele persistabile REST cu mecanism simplu de rutare

●   Depinde de / se foloseste împreuna cu:
    o   _underscore.js

    o   JQuery

    o   template engine (_.template, Mustache, Handlebars)
Backbone.js

●   modele obțin procesează și stochează datele

●   view-uri, afiseaza datele

●   route, navighează, salvează și restaurează starea aplicației
    folosind url-urile
Backbone.js

●   Backbone.Model
    o   fetching, processing and storing data

    o   modificari in date -> change events

    o   syncronizare standard via REST
Backbone.js

Clase de bază

●   Backbone.Events
    o   callback registration, event dispatch

    o   methode: on, off, trigger

●   Backbone.Collection
    o   liste de modele care publică change events (add, remove,
        reset)
Backbone.js
Backbone.js

Backbone.View
●   tine referintă la un element DOM și face rendering-ul la datele din
    model

●   Știe despre modelul sau respectiv colecțiile de care țin

●   Gestioneaza evenimentele DOM (user input)

●   Observa evenimentele din modele (binding)

●   Apelează metode din modele sau declansează evenimente pe ele
Backbone.js

Clase de bază

●   Backbone.Router
    o   Observă modificările de URL și declanșează evenimente la
        modificarea lui

    o   Mapează URL-uri pe methode JavaScript

    o   De cele mai multe ori constituie parte din controller
        (instanțiază modele și view-urile)

●   Backbone.History
    o   HTML5 History (pushState / popState)

    o   fallback pe modificarile hash-lui din URI #
Backbone.js
Backbone.js

Aria                           Responsabilitate
OOP & Functional Programming   Underscore
DOM Scripting                  JQuery
HTML Templating                Underscore, Handlebars, …
API Communication              Backbone*
Application Structure          Backbone*
Routing & History              Backbone
Model-View-Binding             Backbone
Modularization & Dependency    RequireJS, …
management




                                                              35
Backbone.js


● extrem de configurabil si flexibil
  o nu in direcția “convențion over configuration”

● abordare intenționat minimalistă

● nu e o soluție completă / independentă




                                                       36
Eember.js

●   http://emberjs.com/

●   Construit De Yehuda Katz of Ruby on Rails

●   Tot de ce ai nevoie pentru a construi o aplicație web
    ambițioasa

●   Construit pe JQuery

●   Rădăcinile le are in Sproutcore2 / COCOA

●   Open Source / MIT

●   Approx 40k minimizat si gzipat

●   Framework MVC

●   Opinionated / “The Ember Way”
Ember.js




           38
Ember.js

● Gândit foarte bine pentru cum să-ți descompui paginile intr-o
  ierarhie de controale si cum sa le legi intr-un system bazate
  pe state-uri
● Convention over configuration
   o elimină deciziile triviale
   o reduce codul applicației
   o crește predictibilitatea execuției
● Librărie sofisticată pentru comunicare, access la date
  (Ember.data) în dezvoltare
● Intenționată pentru a controla intraga pagină nu insulițe de
  continut dinamic




                                                                  39
Ember.js

● Ember.View
   o noțiunea de hierarhie
      • parrent view / child view
   o delegate events
   o asigura renderingul
   o componentele sunt
      • reutilizabile
      • compozabile
   o automatizări la
      • automatic cleanup la toate binding-urile si observerii registrati de si
        pe copii
      • eliminarea automata a referințelor pentru a elimina sursele de
        probleme de memorie
   o evenimente de lifecycle
      • inainte de rendering
      • inainte de distrugere
      • …

                                                                                  40
Ember.js

● Routele
 o traditionale nu sunt cele mai
   fiabile ca mechanism
● Suplinite cu state charts
 o un obiect / stare
 o stările sunt modelate hierarhic
 o raspund la evenimente
 o poate trece in alta stare
● Beneficii?
 o Nu poti fii in 2 stari in acelasi
   timp
 o Te forteză să gândești ce
   evenimente sunt valide in care
   stări
 o Permite verificări (fail fast,
   evenimente inregistate pe stări
   dar netratate)
                                                  41
Ember.js



Routes




                    42
Ember.js



Clase




                   43
Ember.js

Mixins




                    44
Ember.js

Computed properties




                                 45
Ember.js

Namespaces




                        46
Ember.js
Observeri




                       47
Ember.js
Binding




                     48
Ember.js

●   Ember.Application          ●   Ember.HistoryLocation
●   Ember.Array                ●   Ember.Logger
●   Ember.ArrayController      ●   Ember.Mixin
●   Ember.ArrayProxy           ●   Ember.MutableArray
●   Ember.Binding              ●   Ember.MutableEnumerable
●   Ember.Checkbox             ●   Ember.Namespace
●   Ember.CollectionView       ●   Ember.NativeArray
●   Ember.Comparable           ●   Ember.NoneLocation
●   Ember.ComputedProperty     ●   Ember.Object
●   Ember.ContainerView        ●   Ember.ObjectController
●   Ember.Controller           ●   Ember.ObjectProxy
●   Ember.ControllerMixin      ●   Ember.Observable
●   Ember.Copyable             ●   Ember.RenderBuffer
●   Ember.CoreObject           ●   Ember.Routable
●   Ember.Deferred             ●   Ember.Route
●   Ember.Enumerable           ●   Ember.Router
●   Ember.Error                ●   Ember.Select
●   Ember.Evented              ●   Ember.Set
●   Ember.Freezable            ●   Ember.SortableMixin
●   Ember.Handlebars           ●   Ember.State
●   Ember.Handlebars.helpers   ●   Ember.StateManager
●   Ember.HashLocation         ●   Ember.TargetActionSupport
                               ●   Ember.TextArea
                               ●   Ember.TextField
                               ●   Ember.View
                                                                          49
Ember.js

Aria                           Responsabilitate
OOP & Functional Programming   Ember
DOM Scripting                  JQuery
HTML Templating                Handlebars
API Communication              Ember
Application Structure          Ember
Routing & History              Ember
Model-View-Binding             Ember
Modularization & Dependency    RequireJS, …
management




                                                             50
Angular.js

● http://www.angularjs.org
● Creat si folosit de către Google
● bazat pe JQuery
● MVW* (Whatever)
● Include propriul templateing system
● approx 500k
● IE8+, Chrome, FF, Safari, Opera
● Databinging (mai naturale)
● Modelele sunt obiecte normale JavaScript
● Dependency Injection
● Conceptual este un polyfill intre ce fac browserele astazi si ce
  vor face nativ in anii următori
● Nu impune o arhitectură sau layout
● Poate lucra în insulițe mici de pagină

                                                                     51
Angular.js

Template




                        52
Angular.js

Rutare




                      53
Angular.js

Aria                           Responsabilitate
OOP & Functional Programming   Angular
DOM Scripting                  JQuery
HTML Templating                Handlebars
API Communication              Ember
Application Structure          Ember
Routing & History              Ember
Model-View-Binding             Ember
Modularization & Dependency    RequireJS, …
management




                                                               54
http://addyosmani.github.com/todomvc/




                                        55
Diamond Sponsors




Platinum Sponsors                    Gold Sponsors


Training Partners   Media Partners          Other Partners

More Related Content

Viewers also liked

Sizing epics tales from an agile kingdom
Sizing epics   tales from an agile kingdomSizing epics   tales from an agile kingdom
Sizing epics tales from an agile kingdomCodecamp Romania
 
Iasi code camp 12 october 2013 marius ursache - sketching & prototyping
Iasi code camp 12 october 2013  marius ursache - sketching & prototypingIasi code camp 12 october 2013  marius ursache - sketching & prototyping
Iasi code camp 12 october 2013 marius ursache - sketching & prototypingCodecamp Romania
 
The case for continuous delivery
The case for continuous deliveryThe case for continuous delivery
The case for continuous deliveryCodecamp Romania
 
2015 dan ardelean develop for windows 10
2015 dan ardelean   develop for windows 10 2015 dan ardelean   develop for windows 10
2015 dan ardelean develop for windows 10 Codecamp Romania
 
Andrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseAndrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseCodecamp Romania
 
Material design screen transitions in android
Material design screen transitions in androidMaterial design screen transitions in android
Material design screen transitions in androidCodecamp Romania
 
Ionut grecu the soft stuff is the hard stuff. the agile soft skills toolkit
Ionut grecu   the soft stuff is the hard stuff. the agile soft skills toolkitIonut grecu   the soft stuff is the hard stuff. the agile soft skills toolkit
Ionut grecu the soft stuff is the hard stuff. the agile soft skills toolkitCodecamp Romania
 
Diana antohi me against myself or how to fail and move forward
Diana antohi   me against myself  or how to fail  and move forwardDiana antohi   me against myself  or how to fail  and move forward
Diana antohi me against myself or how to fail and move forwardCodecamp Romania
 
Parallel & async processing using tpl dataflow
Parallel & async processing using tpl dataflowParallel & async processing using tpl dataflow
Parallel & async processing using tpl dataflowCodecamp Romania
 
Stefan stolniceanu spritekit, 2 d or not 2d
Stefan stolniceanu   spritekit, 2 d or not 2dStefan stolniceanu   spritekit, 2 d or not 2d
Stefan stolniceanu spritekit, 2 d or not 2dCodecamp Romania
 
Cezar chitac the edge of experience
Cezar chitac   the edge of experienceCezar chitac   the edge of experience
Cezar chitac the edge of experienceCodecamp Romania
 

Viewers also liked (16)

Sizing epics tales from an agile kingdom
Sizing epics   tales from an agile kingdomSizing epics   tales from an agile kingdom
Sizing epics tales from an agile kingdom
 
Iasi code camp 12 october 2013 marius ursache - sketching & prototyping
Iasi code camp 12 october 2013  marius ursache - sketching & prototypingIasi code camp 12 october 2013  marius ursache - sketching & prototyping
Iasi code camp 12 october 2013 marius ursache - sketching & prototyping
 
Ecma6 in the wild
Ecma6 in the wildEcma6 in the wild
Ecma6 in the wild
 
The case for continuous delivery
The case for continuous deliveryThe case for continuous delivery
The case for continuous delivery
 
2015 dan ardelean develop for windows 10
2015 dan ardelean   develop for windows 10 2015 dan ardelean   develop for windows 10
2015 dan ardelean develop for windows 10
 
Andrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseAndrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabase
 
Material design screen transitions in android
Material design screen transitions in androidMaterial design screen transitions in android
Material design screen transitions in android
 
Ionut grecu the soft stuff is the hard stuff. the agile soft skills toolkit
Ionut grecu   the soft stuff is the hard stuff. the agile soft skills toolkitIonut grecu   the soft stuff is the hard stuff. the agile soft skills toolkit
Ionut grecu the soft stuff is the hard stuff. the agile soft skills toolkit
 
Diana antohi me against myself or how to fail and move forward
Diana antohi   me against myself  or how to fail  and move forwardDiana antohi   me against myself  or how to fail  and move forward
Diana antohi me against myself or how to fail and move forward
 
Parallel & async processing using tpl dataflow
Parallel & async processing using tpl dataflowParallel & async processing using tpl dataflow
Parallel & async processing using tpl dataflow
 
Stefan stolniceanu spritekit, 2 d or not 2d
Stefan stolniceanu   spritekit, 2 d or not 2dStefan stolniceanu   spritekit, 2 d or not 2d
Stefan stolniceanu spritekit, 2 d or not 2d
 
Agility and life
Agility and lifeAgility and life
Agility and life
 
The bigrewrite
The bigrewriteThe bigrewrite
The bigrewrite
 
Cornel Fatulescu - Kanban
Cornel Fatulescu - KanbanCornel Fatulescu - Kanban
Cornel Fatulescu - Kanban
 
Cloud powered search
Cloud powered searchCloud powered search
Cloud powered search
 
Cezar chitac the edge of experience
Cezar chitac   the edge of experienceCezar chitac   the edge of experience
Cezar chitac the edge of experience
 

Similar to Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...constantadevelopers
 
Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Agora Group
 
Innovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingInnovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingMihai Dan Nadas
 
Dezvoltarea Aplicatiilor Web
Dezvoltarea Aplicatiilor WebDezvoltarea Aplicatiilor Web
Dezvoltarea Aplicatiilor Webdanielnastase
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebSabin Buraga
 
Software_interior_ro.pdf
Software_interior_ro.pdfSoftware_interior_ro.pdf
Software_interior_ro.pdfSamanatiSorin
 
Arhitectura browser-ului Web
Arhitectura browser-ului WebArhitectura browser-ului Web
Arhitectura browser-ului WebSabin Buraga
 
Windows Azure AppFabric - Service Bus, Caching
Windows Azure AppFabric - Service Bus, CachingWindows Azure AppFabric - Service Bus, Caching
Windows Azure AppFabric - Service Bus, CachingMihai Dan Nadas
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebSabin Buraga
 
Microsoft - 30iun2011
Microsoft - 30iun2011Microsoft - 30iun2011
Microsoft - 30iun2011Agora Group
 
Instalare si administrare site grid
Instalare si administrare site gridInstalare si administrare site grid
Instalare si administrare site gridalexstanciu
 
Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențialeSabin Buraga
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Androidmsg4alex
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Sabin Buraga
 

Similar to Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution (20)

Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
 
Axiologic quark
Axiologic quarkAxiologic quark
Axiologic quark
 
Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010
 
Webappdev
WebappdevWebappdev
Webappdev
 
Innovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingInnovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud Computing
 
Dezvoltarea Aplicatiilor Web
Dezvoltarea Aplicatiilor WebDezvoltarea Aplicatiilor Web
Dezvoltarea Aplicatiilor Web
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
 
Software_interior_ro.pdf
Software_interior_ro.pdfSoftware_interior_ro.pdf
Software_interior_ro.pdf
 
Arhitectura browser-ului Web
Arhitectura browser-ului WebArhitectura browser-ului Web
Arhitectura browser-ului Web
 
Windows Azure AppFabric - Service Bus, Caching
Windows Azure AppFabric - Service Bus, CachingWindows Azure AppFabric - Service Bus, Caching
Windows Azure AppFabric - Service Bus, Caching
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
 
Music Finder
Music FinderMusic Finder
Music Finder
 
Microsoft - 30iun2011
Microsoft - 30iun2011Microsoft - 30iun2011
Microsoft - 30iun2011
 
Instalare si administrare site grid
Instalare si administrare site gridInstalare si administrare site grid
Instalare si administrare site grid
 
Remus Cristian CV
Remus Cristian CVRemus Cristian CV
Remus Cristian CV
 
Catalog online
Catalog onlineCatalog online
Catalog online
 
Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențiale
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Android
 
Irina Cureraru
Irina CureraruIrina Cureraru
Irina Cureraru
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5
 

More from Codecamp Romania

Business analysis techniques exercise your 6-pack
Business analysis techniques   exercise your 6-packBusiness analysis techniques   exercise your 6-pack
Business analysis techniques exercise your 6-packCodecamp Romania
 
Bpm company code camp - configuration or coding with pega
Bpm company   code camp - configuration or coding with pegaBpm company   code camp - configuration or coding with pega
Bpm company code camp - configuration or coding with pegaCodecamp Romania
 
Codecamp2015 pimp yourpipeline-saade-jens-1.1
Codecamp2015 pimp yourpipeline-saade-jens-1.1Codecamp2015 pimp yourpipeline-saade-jens-1.1
Codecamp2015 pimp yourpipeline-saade-jens-1.1Codecamp Romania
 
Code camp iasi silviu niculita - machine learning for mere mortals with azu...
Code camp iasi   silviu niculita - machine learning for mere mortals with azu...Code camp iasi   silviu niculita - machine learning for mere mortals with azu...
Code camp iasi silviu niculita - machine learning for mere mortals with azu...Codecamp Romania
 
Business analysis techniques exercise your 6-pack
Business analysis techniques   exercise your 6-packBusiness analysis techniques   exercise your 6-pack
Business analysis techniques exercise your 6-packCodecamp Romania
 
Bpm company code camp - configuration or coding with pega
Bpm company   code camp - configuration or coding with pegaBpm company   code camp - configuration or coding with pega
Bpm company code camp - configuration or coding with pegaCodecamp Romania
 
Andrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseAndrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseCodecamp Romania
 
The case for continuous delivery
The case for continuous deliveryThe case for continuous delivery
The case for continuous deliveryCodecamp Romania
 
Stefan stolniceanu spritekit, 2 d or not 2d
Stefan stolniceanu   spritekit, 2 d or not 2dStefan stolniceanu   spritekit, 2 d or not 2d
Stefan stolniceanu spritekit, 2 d or not 2dCodecamp Romania
 
Sizing epics tales from an agile kingdom
Sizing epics   tales from an agile kingdomSizing epics   tales from an agile kingdom
Sizing epics tales from an agile kingdomCodecamp Romania
 

More from Codecamp Romania (13)

Ccp
CcpCcp
Ccp
 
Business analysis techniques exercise your 6-pack
Business analysis techniques   exercise your 6-packBusiness analysis techniques   exercise your 6-pack
Business analysis techniques exercise your 6-pack
 
Bpm company code camp - configuration or coding with pega
Bpm company   code camp - configuration or coding with pegaBpm company   code camp - configuration or coding with pega
Bpm company code camp - configuration or coding with pega
 
Codecamp2015 pimp yourpipeline-saade-jens-1.1
Codecamp2015 pimp yourpipeline-saade-jens-1.1Codecamp2015 pimp yourpipeline-saade-jens-1.1
Codecamp2015 pimp yourpipeline-saade-jens-1.1
 
Code camp iasi silviu niculita - machine learning for mere mortals with azu...
Code camp iasi   silviu niculita - machine learning for mere mortals with azu...Code camp iasi   silviu niculita - machine learning for mere mortals with azu...
Code camp iasi silviu niculita - machine learning for mere mortals with azu...
 
About leadership
About leadershipAbout leadership
About leadership
 
Business analysis techniques exercise your 6-pack
Business analysis techniques   exercise your 6-packBusiness analysis techniques   exercise your 6-pack
Business analysis techniques exercise your 6-pack
 
Bpm company code camp - configuration or coding with pega
Bpm company   code camp - configuration or coding with pegaBpm company   code camp - configuration or coding with pega
Bpm company code camp - configuration or coding with pega
 
Andrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabaseAndrei prisacaru takingtheunitteststothedatabase
Andrei prisacaru takingtheunitteststothedatabase
 
The bigrewrite
The bigrewriteThe bigrewrite
The bigrewrite
 
The case for continuous delivery
The case for continuous deliveryThe case for continuous delivery
The case for continuous delivery
 
Stefan stolniceanu spritekit, 2 d or not 2d
Stefan stolniceanu   spritekit, 2 d or not 2dStefan stolniceanu   spritekit, 2 d or not 2d
Stefan stolniceanu spritekit, 2 d or not 2d
 
Sizing epics tales from an agile kingdom
Sizing epics   tales from an agile kingdomSizing epics   tales from an agile kingdom
Sizing epics tales from an agile kingdom
 

Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

  • 1. JavaScript, from dark ages to renaissance, the web apps revolution Occasion: CodeCamp Iasi Date: 10-11-2012 Present: Remus Pereni / Software Architect / remus.pereni@tss-yonder.com Public Classification:
  • 2. Vom povesti despre: ● Diferite modalități de a construi aplicații web ● De ce JavaScript? ● Librarii și framework-uri ● BootstrapJS ● EmberJS ● AngularJS 2
  • 3. Un pic de istorie ● 1991 Tim Berner lee @CERN: HTML, HTTP 0.9, WorldWideWeb ● 1993 Mark Andersen & NCSA, Mosaic 1 ● 1994 W3.org (MIT + CERN) / HTML 2 ● 1996 CSS 1, Netscape 2, JavaScript ● 1997 HTML 4 ● 1998 CSS 2 ● 1999 RFC 2616 / IETF + W3, HTTP/1.1 ● 2000 XHTML 1 ● 2002 Tableless Web Design ● 2005 AJAX ● 2009 HTML 5
  • 4. Un pic de istorie ● 1995 Netscape / Brendan Eich ● Rol? o comunicare cu / dinspre Appleti Java o manipulare de continut in pagina ● Netscape 2 / Mocha -> LiveWire-> LiveScript ● Redenumit in JavaScript, miscare de marketing destul de ne- inspirata ● Microsoft raspunde cu VBScript iar in 1996 dupa reverse engineering un port de JavaScript numit Jscript 4
  • 5. Un pic de istorie ● 1996 Netscape + Sun propun standardizarea limbajului la ECMA (European Computer Manufacturers Association) ● 1997 Standardizare aceptata si noua denumire EcmaScript ● Standardizarea acopera doar limbajul in sine. ● API-ul de access la DOM -> W3.org 5
  • 6. Caracteristici și categorii de aplicații Despre ce anume vorbim? ● Aplicații web traditionale (incl. AJAX) (Thick Server) ● Aplicații browser (Single Page)
  • 7. Aplicații web traditionale (Web 2.0) / Thick Page Responsabilități Client Responsabilități Server ● Refresh parțial de conținut ● Asigură datele ● Validări ● Persistență ● Componente usabile ● Continutul / markup-ul o Autocomplete complet sau partial pentru o Date selector client o ... ● Animație
  • 9. Direcții de presiune asupra aplicațiilor conventionale 1. Așteptări crescute din partea UI si UX 2. Așteptări crescute din partea vitezei de reacție 3. Cerințe noi în privința disponibilității aplicațiilor pe platforme noi care implică modificări de arhitectură 9
  • 10. Presiune din partea UI / UX 10
  • 11. Presiune din partea UI / UX 11
  • 12. Presiune din partea UI / UX 12
  • 13. Presiune din partea UI / UX 13
  • 14. Presiune din partea / Vitezei de reacție “According to Harry Shum, a Microsoft computer scientist, computer users will visit a Web site less if its loading time is slower than its competitors by 250 milliseconds, or one- quarter of a second. That is less time than a single eye blink. “( http://www.nytimes.com/interactive/2012/02/29/business/Th e-Blink-of-an-Eye-Oh-Please.html) • 500 ms slower = 20% drop in traffic (Google) • 100 ms slower = 1% drop in sales (Amazon) 14
  • 15. Presiune din partea / Vitezei de reacție 15
  • 16. Presiune din partea / Vitezei de reacție 16
  • 17. Presiune din partea / Vitezei de reacție 17
  • 18. Presiune din partea / Vitezei de reacție 18
  • 19. Presiune din partea / Arhitecturii Platform IOS & Android & Desktop Browser Type Web / HTML5 Runs on IPhone/Ipad Android phones Regular desktop OS version IOS: 4.x, 5.x Android: 2.x Technologies HTML5 JavaScript JQuery Mobile Phone Gap Google Chart API Geolocation Web services JSON 19
  • 21. Aplicații browser / Single Page Responsabilități Client Responsabilități Server ● Continutul / markup-ul ● Asigură datele complet sau partial bazat ● Persistență pe datele de la backend ● Validări ● Componente usabile o Autocomplete o Date selector o ... ● Animație ● Logică aplicație
  • 22. Web Application Framework "A web application framework ("WAF") is a software framework that is designed to support the development of dynamic websites, web applications and web services. The framework aims to alleviate the overhead associated with common activities performed in Web development.” (Wikipedia) 22
  • 23. Web Application Framework Functionalități o Templating o Access la baza de date o Managementul sesiunii (session management) o Decuplare de componente / Pattern-uri (varianta de MVC de obicei) o Mapare URL o Internaționalizare (i18n) o Caching 23
  • 24. Evoluție 24
  • 25. Dezvoltarea de aplicații JavaScript ● multitudine de optiuni ● putine standarde si convenții ● fiecare librarie propria interpretare de MVC ● o data adoptat un stack, devii dependent de el 25
  • 26. Dezvoltarea de aplicații JavaScript Librării Framework-uri Backbone Ember Knockout AngularJS Spine Batman CanJS Meteor Se adauga la proiect, adauga Îți impune / dă o arhitectură functionalitate dar nu impune (structură de fișiere, ….) și arhitectură încearcă să se ocupe de toate aspectele 26
  • 27. Backbone.js ● http://backbonejs.org ● Jeremy Ashkenas and DocumentCloud ● Foarte popular ● Open Source (MIT) ● Model View ● Minimal, doar 800 linii de cod ● Modele persistabile REST cu mecanism simplu de rutare ● Depinde de / se foloseste împreuna cu: o _underscore.js o JQuery o template engine (_.template, Mustache, Handlebars)
  • 28. Backbone.js ● modele obțin procesează și stochează datele ● view-uri, afiseaza datele ● route, navighează, salvează și restaurează starea aplicației folosind url-urile
  • 29. Backbone.js ● Backbone.Model o fetching, processing and storing data o modificari in date -> change events o syncronizare standard via REST
  • 30. Backbone.js Clase de bază ● Backbone.Events o callback registration, event dispatch o methode: on, off, trigger ● Backbone.Collection o liste de modele care publică change events (add, remove, reset)
  • 32. Backbone.js Backbone.View ● tine referintă la un element DOM și face rendering-ul la datele din model ● Știe despre modelul sau respectiv colecțiile de care țin ● Gestioneaza evenimentele DOM (user input) ● Observa evenimentele din modele (binding) ● Apelează metode din modele sau declansează evenimente pe ele
  • 33. Backbone.js Clase de bază ● Backbone.Router o Observă modificările de URL și declanșează evenimente la modificarea lui o Mapează URL-uri pe methode JavaScript o De cele mai multe ori constituie parte din controller (instanțiază modele și view-urile) ● Backbone.History o HTML5 History (pushState / popState) o fallback pe modificarile hash-lui din URI #
  • 35. Backbone.js Aria Responsabilitate OOP & Functional Programming Underscore DOM Scripting JQuery HTML Templating Underscore, Handlebars, … API Communication Backbone* Application Structure Backbone* Routing & History Backbone Model-View-Binding Backbone Modularization & Dependency RequireJS, … management 35
  • 36. Backbone.js ● extrem de configurabil si flexibil o nu in direcția “convențion over configuration” ● abordare intenționat minimalistă ● nu e o soluție completă / independentă 36
  • 37. Eember.js ● http://emberjs.com/ ● Construit De Yehuda Katz of Ruby on Rails ● Tot de ce ai nevoie pentru a construi o aplicație web ambițioasa ● Construit pe JQuery ● Rădăcinile le are in Sproutcore2 / COCOA ● Open Source / MIT ● Approx 40k minimizat si gzipat ● Framework MVC ● Opinionated / “The Ember Way”
  • 38. Ember.js 38
  • 39. Ember.js ● Gândit foarte bine pentru cum să-ți descompui paginile intr-o ierarhie de controale si cum sa le legi intr-un system bazate pe state-uri ● Convention over configuration o elimină deciziile triviale o reduce codul applicației o crește predictibilitatea execuției ● Librărie sofisticată pentru comunicare, access la date (Ember.data) în dezvoltare ● Intenționată pentru a controla intraga pagină nu insulițe de continut dinamic 39
  • 40. Ember.js ● Ember.View o noțiunea de hierarhie • parrent view / child view o delegate events o asigura renderingul o componentele sunt • reutilizabile • compozabile o automatizări la • automatic cleanup la toate binding-urile si observerii registrati de si pe copii • eliminarea automata a referințelor pentru a elimina sursele de probleme de memorie o evenimente de lifecycle • inainte de rendering • inainte de distrugere • … 40
  • 41. Ember.js ● Routele o traditionale nu sunt cele mai fiabile ca mechanism ● Suplinite cu state charts o un obiect / stare o stările sunt modelate hierarhic o raspund la evenimente o poate trece in alta stare ● Beneficii? o Nu poti fii in 2 stari in acelasi timp o Te forteză să gândești ce evenimente sunt valide in care stări o Permite verificări (fail fast, evenimente inregistate pe stări dar netratate) 41
  • 49. Ember.js ● Ember.Application ● Ember.HistoryLocation ● Ember.Array ● Ember.Logger ● Ember.ArrayController ● Ember.Mixin ● Ember.ArrayProxy ● Ember.MutableArray ● Ember.Binding ● Ember.MutableEnumerable ● Ember.Checkbox ● Ember.Namespace ● Ember.CollectionView ● Ember.NativeArray ● Ember.Comparable ● Ember.NoneLocation ● Ember.ComputedProperty ● Ember.Object ● Ember.ContainerView ● Ember.ObjectController ● Ember.Controller ● Ember.ObjectProxy ● Ember.ControllerMixin ● Ember.Observable ● Ember.Copyable ● Ember.RenderBuffer ● Ember.CoreObject ● Ember.Routable ● Ember.Deferred ● Ember.Route ● Ember.Enumerable ● Ember.Router ● Ember.Error ● Ember.Select ● Ember.Evented ● Ember.Set ● Ember.Freezable ● Ember.SortableMixin ● Ember.Handlebars ● Ember.State ● Ember.Handlebars.helpers ● Ember.StateManager ● Ember.HashLocation ● Ember.TargetActionSupport ● Ember.TextArea ● Ember.TextField ● Ember.View 49
  • 50. Ember.js Aria Responsabilitate OOP & Functional Programming Ember DOM Scripting JQuery HTML Templating Handlebars API Communication Ember Application Structure Ember Routing & History Ember Model-View-Binding Ember Modularization & Dependency RequireJS, … management 50
  • 51. Angular.js ● http://www.angularjs.org ● Creat si folosit de către Google ● bazat pe JQuery ● MVW* (Whatever) ● Include propriul templateing system ● approx 500k ● IE8+, Chrome, FF, Safari, Opera ● Databinging (mai naturale) ● Modelele sunt obiecte normale JavaScript ● Dependency Injection ● Conceptual este un polyfill intre ce fac browserele astazi si ce vor face nativ in anii următori ● Nu impune o arhitectură sau layout ● Poate lucra în insulițe mici de pagină 51
  • 54. Angular.js Aria Responsabilitate OOP & Functional Programming Angular DOM Scripting JQuery HTML Templating Handlebars API Communication Ember Application Structure Ember Routing & History Ember Model-View-Binding Ember Modularization & Dependency RequireJS, … management 54
  • 56. Diamond Sponsors Platinum Sponsors Gold Sponsors Training Partners Media Partners Other Partners

Editor's Notes

  1. Amazon / 2011 / 49 Miliarte / 500 mil pierduteEmag / 2011 / 145 mil euro / 1.4 mil pierdute