SlideShare a Scribd company logo
1 of 60
From UX to Finish
Anže Vodovnik
Software Architect @ Studio Pešec d.o.o.
Kdo sem?
 Programski arhitekt
 10+ let izkušenj
 http://www.linkedin.com/in/avodovnik
 Twitter: @avodovnik
 http://lab.studiopesec.com
AGENDA
 Proces razvoja web aplikacije – metro:Wife
 Načrtovanje
 Uporabniška izkušnja – kaj, kdaj, kako?
 Implementacija – kaj, kdaj, kako?
 Diskusija
PROCES RAZVOJA (WEB) APLIKACIJE
  Razvoj (spletne) aplikacije je težaven
  Različne in spreminjajoče se zahteve
    Skalabilnost
    Performanse
    Robustnost
    Povezljivost
  Različni razvojni procesi
    Waterfall
    Agile
PROCES

                               Razvojna
 Ideja   Analitik   Arhitekt              Tester
                                ekipa
PROCES

                                    Razvojna
 Ideja   Analitik   UX   Arhitekt              Tester
                                     ekipa
PROCES

                                    Razvojna
 Ideja   Analitik   UX   Arhitekt              Tester
                                     ekipa
KAJ PA „UX“ SPLOH JE?

 „A person's perceptions and
 responses that result from the use or
 anticipated use of a product, system
 or service“
          - ISO 9241-210; Ergonomics of human system interaction
KAJ PA „UX“ SPLOH JE?

 „A person's perceptions and
 responses that result from the use or
 anticipated use of a product, system
 or service“
         - ISO 9241-210; Ergonomics of human system interaction
UPORABNIŠKA IZKUŠNJA, 2 1/2. del
  Več posvečanja izkušnji kot uporabnosti
    Efektivnost
    Efikasnost
    Subjektivno zadovoljstvo
                               }   Tipični faktorji
                                   uporabnosti
UPORABNIŠKA IZKUŠNJA, 2 2/2. del
Spletne strani & aplikacije


                                          Marketing &
                                           Branding
                        Oblikovanje




                                      Uporabnost




                      Uporabniška izkušnja
KAKO RAZUMETI UPORABNIKOVA ČUSTVA?

  Analiza
    Kaj ljudem pomeni „address book“?
    Kaj so problemi, ki jih imajo?
    Konkurenca na področju
      Analiza prisotnosti
  Določimo story-e (+ persone)
  Izris Wireframe-ov
  Design
Primer
Sara & telefonski imenik
•   UX ekspert & Informacijski Arhitekt
•   (pozabljiva) lastnica iPhone-a




         PROBLEM: izgubljeni kontakti
Sara & telefonski imenik
•    UX ekspert & Informacijski Arhitekt
•    (pozabljiva) lastnica iPhone-a




        PROBLEM: izgubljeni kontakti
    IDEJA: aplikacija za upravljanje s kontakti!


                       UX arhitekt              Razvojna
              Ideja                  Arhitekt              Tester
                        / analitik               ekipa
UX arhitekt              Razvojna
Ideja                 Arhitekt              Tester
         / analitik               ekipa
UX arhitekt              Razvojna
Ideja                 Arhitekt              Tester
         / analitik               ekipa
UX arhitekt              Razvojna
Ideja                 Arhitekt              Tester
         / analitik               ekipa
Implementacija



           UX arhitekt              Razvojna
   Ideja                 Arhitekt              Tester
            / analitik               ekipa
UX in UPORABNIŠKI VMESNIK
 Uporabniki so vedno zahtevnejši
 Pričakovanja vedno višja

 Klienti so neizkoriščeni
 Brskalniki so vedno hitrejši
KLIENTI
 JavaScript podprt na glavnih platformah
   Mobilno
   Desktop (Windows, Mac)
 Prvi (edini) stik uporabnika z aplikacijo
   Čustveno dojemanje
 Klient postaja svoja aplikacija
KLIENTI
 JavaScript podprt na glavnih platformah
   Mobilno
   Desktop (Windows, Mac)
 Prvi (edini) stik uporabnika z aplikacijo
   Čustveno dojemanje
 Klient postaja svoja aplikacija, ki teče na
 eni strani in je na voljo tudi offline
PROBLEM
 Razvijalci odkrivajo toplo vodo
   Različne implementacije UI-ja
 Prvo srečanje z jQueryem
   Novo kladivo
   DOM = žebelj
CILJI
Ali „kako si arhitekt želi, da bi aplikacija delovala“
    1. Stanje & modeli morajo živeti na enem mestu
    2. Spremembe modela se morajo odražati na
       vseh mestih vmesnika, kjer se pojavlja
    3. Enostavna struktura kode za vzdrževanje
    4. Čim manj „framework“ & „glue“ kode
REŠITEV
BACKBONE.JS
 „Backbone supplies structure to JavaScript-heavy
 applications by providing models with key-value binding
 and custom events, collections with a rich API of
 enumerable functions, views with declarative event
 handling, and connects it all to your existing application
 over a RESTful JSON interface. “
                            - http://documentcloud.github.com/backbone
BACKBONE.JS
 Osnovni objekti
   Modeli (Model)
   Zbirke (Collection)
   Pogledi (View)
   Usmerjevalnik / aplikacija (Router)
   Dogodki (Events)
   Sinhronizacija
 Kvazi JavaScript MVC
BACKBONE.JS
 Malo zunanjih odvisnosti
   Underscore.js
   Json2.js (za sinhronizacijo)
   jQuery (za View)
 Enostavna uporaba
 Vrhunska dokumentacija
Modeli
  Poljubni atributi
  Podatkovna struktura
var Contact = Backbone.Model.extend({});

var myContact = new Contact();
myContact.set({
         firstName: 'Anze',
         lastName: 'Vodovnik‚
});
Modeli, 2. del
 var myContact = new Contact({
          firstName: 'Anze',
          lastName: 'Vodovnik‚
 });

 myContact.get(‚firstName‘);
Modeli, 3. del
 var Contact = Backbone.Model.extend({
        initialize: function(contact) {
                if(!contact || !contact.firstName) {
                       throw „MissingRequiredData“;
                }
        },
        validate: function(attrs) {
                if(attrs.email) {
                       if(!_.isString(attrs.email) ||
                       attrs.title.length > 100) {
                               return „Email not valid.“
                       }
                }
        }
 });
Zbirke
  Več kot le array
  Sinhronizacija, eventi...
 var AddressBook = Backbone.Collection.extend({
      model: Contact,
      initialize: function() {}
 });

 var myAddressBook = new AddressBook();
 myAddressBook.add(myContact);
Pogledi
  EDINA vez med UI in modelom
  Manipulacija HTML-ja
Usmerjevalnik / aplikacija
  Aplikacija = več povezanih pogledov
  Poti (routes), akcije
var Workspace = Backbone.Router.extend({
     routes: {
      „details/:id“   : „details“,
      „search/:query/p:page“ : „search“
     },
     details: function(id) { ... }
     search: function(query, page) { ... }
});
M V C
Model
      odel      iew
             View
                          ontroller
                      Router
Collection
Demo 1-6
Uvod v Backbone.js
Backbone.Sync
 Out-of-the-box sinhronizacija
 CRUD over REST
   Create > POST /collection
   Read > GET /collection[/id]
   Update > PUT /collection/id
   Delete > DELETE /collection/id
Backbone.Sync & ASP.NET MVC
 MVC je prinesel RESTful URL-je
 Od MVC 2.0 FUTURES dalje, podpora za
 JSON serializacijo objektov v requestu
Demo 7
Backbone.Sync & ASP.NET MVC
Backbone.Sync
 je funkcija
    lahko jo prepišemo
    lahko jo spremenimo


 LocalStorage adapter                     -   Jérôme Gravel-Niquet
 https://github.com/jeromegn/localtodos
CILJI – PONOVNI PREGLED
Ali „kako si arhitekt želi, da bi aplikacija delovala“
    1. Stanje & modeli morajo živeti na enem mestu
            MODELI – Model, Collection
    2. Spremembe modela se morajo odražati na
       vseh mestih vmesnika, kjer se pojavlja
            VIEW MODEL - Views
    3. Enostavna struktura kode za vzdrževanje
            MVC je dokaj poznan, uveljavljen
    4. Čim manj „framework“ & „glue“ kode
FRAMEWORK & GLUE KODA
Ali „nočna mora vseh razvijalcev“
   Pisanje lastnega ogrodja se ne splača
   Ogromno obstoječih, dobrih
      Nuget je vaš najboljši prijatelj
   Diagnostika
   Odvisnosti
   Eventi
   Komunikacija med widget-i
RequireJS
Module & odvisnosti
   Asinhrono nalaganje
   Nadzor odvisnosti
   Moduli
   Podpira jQuery (require-jquery.js)

   http://requirejs.org/
PubSub
Razklop funkcionalnosti
   „lastni“ dogodki, brez relacije z DOMom
   Kopija iz DOJO ogrodja (Pete Higgins)
   $.publish, $.subscribe

   https://gist.github.com/826794
Underscore.js
Utility belt
     ~60 „utility“ funkcij
     „Je kravata k jQuery obleki“

    Object-oriented ali funkcijski stil
      _.map([1, 2, 3], function(n){ return n * 2; });
      _([1, 2, 3]).map(function(n){ return n * 2; });

    http://documentcloud.github.com/underscore/
Underscore.js
Utility belt
    each, map, reduce, any, min, sortBy,
    groupBy

    _.each([1, 2, 3], function(n){ console.log(n); });

    _.reduce([5, 10, 15], function(memo, n) { return memo +
    n; }, 0);
       30


    _.map([1, 2, 3], function(n) { return n * 5; });
       [5, 10, 15]
Underscore.js
  Map/Reduce – štetje besed
var lyrics = [
       {line : 1, words : "I'm a lumberjack and I'm okay"},
       {line : 2, words : "I sleep all night and I work all day"},
       {line : 3, words : "He's a lumberjack and he's okay"},
       {line : 4, words : "He sleeps all night and he works all day"}
        ];
_(lyrics).chain()
       .map(function(line) { return line.words.split(' '); })
       .flatten()
       .reduce(function(counts, word) {
                counts[word] = (counts[word] || 0) + 1;
                return counts; }, {})
       .value(); => {lumberjack : 2, all : 4, night : 2 ... }
Underscore.js & Predloge (templates)
  Out-of-the-box funkcionalnost
  _.template();
  Loči HTML od JavaScript/logike
Underscore.js & Predloge (templates)
Underscore.js & Predloge (templates)
Sestava „JavaScript“ aplikacije
Seznam kontaktov     Prikaz kontakta      Iskalnik        ...

                   Application Framework (Backbone...)

             Diagnostics, Events, core moduli (JSON...)

                             jQuery / Ogrodje
Demo 8
RequireJS & PubSub
http://www.metrowife.net
POVZETEK
 Razvoj je podrejen čustvom uporabnika in
 izkušnji pri uporabi (UX)
 Procesi so spremenjeni
 Vedno večja pomembnost JavaScript
 aplikacij
   Arhitektura
   Code reuse
POVZETEK
 Razvoj je podrejen čustvom uporabnika in
 izkušnji pri uporabi (UX) [good thing]
 Procesi so spremenjeni [good thing]
 Vedno večja pomembnost JavaScript
 aplikacij [semi-good thing]
   Arhitektura
   Code reuse
HVALA

More Related Content

Viewers also liked

Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonAEM HUB
 
Decoupled web applications (with AppFabric)
Decoupled web applications (with AppFabric)Decoupled web applications (with AppFabric)
Decoupled web applications (with AppFabric)Studio Pešec
 
Effectively Scale and Operate AEM with MongoDB by Norberto Leite
Effectively Scale and Operate AEM with MongoDB by Norberto LeiteEffectively Scale and Operate AEM with MongoDB by Norberto Leite
Effectively Scale and Operate AEM with MongoDB by Norberto LeiteAEM HUB
 
Preparing for the Internet Zombie Apocalypse
Preparing for the Internet Zombie ApocalypsePreparing for the Internet Zombie Apocalypse
Preparing for the Internet Zombie ApocalypsePantheon
 
When dispatcher caching is not enough by Jakub Wądołowski
When dispatcher caching is not enough by Jakub WądołowskiWhen dispatcher caching is not enough by Jakub Wądołowski
When dispatcher caching is not enough by Jakub WądołowskiAEM HUB
 
Touching the AEM component dialog by Mateusz Chromiński
Touching the AEM component dialog by Mateusz ChromińskiTouching the AEM component dialog by Mateusz Chromiński
Touching the AEM component dialog by Mateusz ChromińskiAEM HUB
 
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...AEM HUB
 
Microservices for AEM by Maciej Majchrzak
Microservices for AEM by Maciej MajchrzakMicroservices for AEM by Maciej Majchrzak
Microservices for AEM by Maciej MajchrzakAEM HUB
 
Agile Project Manager - na serio?
Agile Project Manager - na serio?Agile Project Manager - na serio?
Agile Project Manager - na serio?Michal Raczka
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalAcquia
 
From Monolithic to Microservices in 45 Minutes
From Monolithic to Microservices in 45 MinutesFrom Monolithic to Microservices in 45 Minutes
From Monolithic to Microservices in 45 MinutesMongoDB
 
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...Jeffrey McGuire
 
Why Drupal 8? Why now? APR/MAY 2015
Why Drupal 8? Why now? APR/MAY 2015Why Drupal 8? Why now? APR/MAY 2015
Why Drupal 8? Why now? APR/MAY 2015Jeffrey McGuire
 
From 0 to MVP in 40 minutes: decoupled Drupal for startups
From 0 to MVP in 40 minutes: decoupled Drupal for startupsFrom 0 to MVP in 40 minutes: decoupled Drupal for startups
From 0 to MVP in 40 minutes: decoupled Drupal for startupsJeffrey McGuire
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniAEM HUB
 
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...AEM HUB
 
Building Quality into the AEM Publication Workflow with Active Standards by D...
Building Quality into the AEM Publication Workflow with Active Standards by D...Building Quality into the AEM Publication Workflow with Active Standards by D...
Building Quality into the AEM Publication Workflow with Active Standards by D...AEM HUB
 
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM HUB
 
Bringing Interactivity to Your Drupal Site with Node.js Integration
Bringing Interactivity to Your Drupal Site with Node.js IntegrationBringing Interactivity to Your Drupal Site with Node.js Integration
Bringing Interactivity to Your Drupal Site with Node.js IntegrationAcquia
 
UX Pillars: A guide for enterprise success
UX Pillars: A guide for enterprise successUX Pillars: A guide for enterprise success
UX Pillars: A guide for enterprise successInVision App
 

Viewers also liked (20)

Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin Edelson
 
Decoupled web applications (with AppFabric)
Decoupled web applications (with AppFabric)Decoupled web applications (with AppFabric)
Decoupled web applications (with AppFabric)
 
Effectively Scale and Operate AEM with MongoDB by Norberto Leite
Effectively Scale and Operate AEM with MongoDB by Norberto LeiteEffectively Scale and Operate AEM with MongoDB by Norberto Leite
Effectively Scale and Operate AEM with MongoDB by Norberto Leite
 
Preparing for the Internet Zombie Apocalypse
Preparing for the Internet Zombie ApocalypsePreparing for the Internet Zombie Apocalypse
Preparing for the Internet Zombie Apocalypse
 
When dispatcher caching is not enough by Jakub Wądołowski
When dispatcher caching is not enough by Jakub WądołowskiWhen dispatcher caching is not enough by Jakub Wądołowski
When dispatcher caching is not enough by Jakub Wądołowski
 
Touching the AEM component dialog by Mateusz Chromiński
Touching the AEM component dialog by Mateusz ChromińskiTouching the AEM component dialog by Mateusz Chromiński
Touching the AEM component dialog by Mateusz Chromiński
 
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...
How to build a Social Intranet with Adobe Sites and 3rd Party products ... us...
 
Microservices for AEM by Maciej Majchrzak
Microservices for AEM by Maciej MajchrzakMicroservices for AEM by Maciej Majchrzak
Microservices for AEM by Maciej Majchrzak
 
Agile Project Manager - na serio?
Agile Project Manager - na serio?Agile Project Manager - na serio?
Agile Project Manager - na serio?
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless Drupal
 
From Monolithic to Microservices in 45 Minutes
From Monolithic to Microservices in 45 MinutesFrom Monolithic to Microservices in 45 Minutes
From Monolithic to Microservices in 45 Minutes
 
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...
Development based on Drupal's Fundamental Particles - Brad Czerniak for jam's...
 
Why Drupal 8? Why now? APR/MAY 2015
Why Drupal 8? Why now? APR/MAY 2015Why Drupal 8? Why now? APR/MAY 2015
Why Drupal 8? Why now? APR/MAY 2015
 
From 0 to MVP in 40 minutes: decoupled Drupal for startups
From 0 to MVP in 40 minutes: decoupled Drupal for startupsFrom 0 to MVP in 40 minutes: decoupled Drupal for startups
From 0 to MVP in 40 minutes: decoupled Drupal for startups
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
 
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...
Adobe Managed Services: Complicated Cloud Deployments by Adam Pazik, Mike Til...
 
Building Quality into the AEM Publication Workflow with Active Standards by D...
Building Quality into the AEM Publication Workflow with Active Standards by D...Building Quality into the AEM Publication Workflow with Active Standards by D...
Building Quality into the AEM Publication Workflow with Active Standards by D...
 
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
 
Bringing Interactivity to Your Drupal Site with Node.js Integration
Bringing Interactivity to Your Drupal Site with Node.js IntegrationBringing Interactivity to Your Drupal Site with Node.js Integration
Bringing Interactivity to Your Drupal Site with Node.js Integration
 
UX Pillars: A guide for enterprise success
UX Pillars: A guide for enterprise successUX Pillars: A guide for enterprise success
UX Pillars: A guide for enterprise success
 

Similar to Developing a Web App from UX to Finish

Novi val učinkovitosti - Windows 7
Novi val učinkovitosti - Windows 7Novi val učinkovitosti - Windows 7
Novi val učinkovitosti - Windows 7Matjaz Sircelj
 
Toshl.com - Od ideje do končnega izdelka
Toshl.com - Od ideje do končnega izdelka Toshl.com - Od ideje do končnega izdelka
Toshl.com - Od ideje do končnega izdelka NokiaAppForum
 
Entity framework code first migrations
Entity framework code first migrationsEntity framework code first migrations
Entity framework code first migrationsAndrej Tozon
 
Silverlight in WCF RIA Services
Silverlight in WCF RIA ServicesSilverlight in WCF RIA Services
Silverlight in WCF RIA ServicesAndrej Tozon
 
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOA
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOADušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOA
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOAGenis d.o.o.
 
Inject your dependencies
Inject your dependenciesInject your dependencies
Inject your dependenciesStudio Pešec
 
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...Andrej Tozon
 
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...Bojan Merela
 
Profili ključnih kadrov: INFORMATIKA
Profili ključnih kadrov: INFORMATIKAProfili ključnih kadrov: INFORMATIKA
Profili ključnih kadrov: INFORMATIKARadovan Kragelj
 
Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Tomislav Rozman
 
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformiMatic Kunaver
 
WPTASKCRM - predstavitev na Dnevi slovenske informatike
WPTASKCRM - predstavitev na Dnevi slovenske informatike WPTASKCRM - predstavitev na Dnevi slovenske informatike
WPTASKCRM - predstavitev na Dnevi slovenske informatike Jurij Cvikl
 
Poslovna informatika 4: Razvoj in management informatike
Poslovna informatika 4: Razvoj in management informatikePoslovna informatika 4: Razvoj in management informatike
Poslovna informatika 4: Razvoj in management informatikeTomislav Rozman
 
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...Ljiljana Babič
 
Prava pot za industrializacijo 4.0 v gradbeništvu
Prava pot za industrializacijo 4.0 v gradbeništvuPrava pot za industrializacijo 4.0 v gradbeništvu
Prava pot za industrializacijo 4.0 v gradbeništvuIvan Rus
 
Front-end web development - moje izkušnje WCLJ
Front-end web development - moje izkušnje WCLJFront-end web development - moje izkušnje WCLJ
Front-end web development - moje izkušnje WCLJLouDk
 
Web2.0 tools sl
Web2.0 tools slWeb2.0 tools sl
Web2.0 tools slmvrtacnik
 
Subversion in Redmine implementacija
Subversion in Redmine implementacijaSubversion in Redmine implementacija
Subversion in Redmine implementacijaOto Brglez
 

Similar to Developing a Web App from UX to Finish (20)

Novi val učinkovitosti - Windows 7
Novi val učinkovitosti - Windows 7Novi val učinkovitosti - Windows 7
Novi val učinkovitosti - Windows 7
 
Toshl.com - Od ideje do končnega izdelka
Toshl.com - Od ideje do končnega izdelka Toshl.com - Od ideje do končnega izdelka
Toshl.com - Od ideje do končnega izdelka
 
Entity framework code first migrations
Entity framework code first migrationsEntity framework code first migrations
Entity framework code first migrations
 
Silverlight in WCF RIA Services
Silverlight in WCF RIA ServicesSilverlight in WCF RIA Services
Silverlight in WCF RIA Services
 
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOA
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOADušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOA
Dušan Rot, Mitja Šturm - Interoperabilnost na osnovi SOA
 
Inject your dependencies
Inject your dependenciesInject your dependencies
Inject your dependencies
 
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
 
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...
63990272-BOJAN MERELA-Razvojno okolje za uporabniške vmesnike v vgrajenih sis...
 
Profili ključnih kadrov: INFORMATIKA
Profili ključnih kadrov: INFORMATIKAProfili ključnih kadrov: INFORMATIKA
Profili ključnih kadrov: INFORMATIKA
 
Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)
 
Test
TestTest
Test
 
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi
63080008-MATIC_KUNAVER-Samodejno_prepoznavanje_obraznih_izrazov_na_iOS_platformi
 
WPTASKCRM - predstavitev na Dnevi slovenske informatike
WPTASKCRM - predstavitev na Dnevi slovenske informatike WPTASKCRM - predstavitev na Dnevi slovenske informatike
WPTASKCRM - predstavitev na Dnevi slovenske informatike
 
Poslovna informatika 4: Razvoj in management informatike
Poslovna informatika 4: Razvoj in management informatikePoslovna informatika 4: Razvoj in management informatike
Poslovna informatika 4: Razvoj in management informatike
 
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...
LJILJANA_BABIC-Razvoj_interaktivnega_graficnega_urejevalnika_za_oznaevanje_po...
 
Projektni Teden
Projektni TedenProjektni Teden
Projektni Teden
 
Prava pot za industrializacijo 4.0 v gradbeništvu
Prava pot za industrializacijo 4.0 v gradbeništvuPrava pot za industrializacijo 4.0 v gradbeništvu
Prava pot za industrializacijo 4.0 v gradbeništvu
 
Front-end web development - moje izkušnje WCLJ
Front-end web development - moje izkušnje WCLJFront-end web development - moje izkušnje WCLJ
Front-end web development - moje izkušnje WCLJ
 
Web2.0 tools sl
Web2.0 tools slWeb2.0 tools sl
Web2.0 tools sl
 
Subversion in Redmine implementacija
Subversion in Redmine implementacijaSubversion in Redmine implementacija
Subversion in Redmine implementacija
 

Developing a Web App from UX to Finish

  • 1.
  • 2. From UX to Finish Anže Vodovnik Software Architect @ Studio Pešec d.o.o.
  • 3. Kdo sem? Programski arhitekt 10+ let izkušenj http://www.linkedin.com/in/avodovnik Twitter: @avodovnik http://lab.studiopesec.com
  • 4. AGENDA Proces razvoja web aplikacije – metro:Wife Načrtovanje Uporabniška izkušnja – kaj, kdaj, kako? Implementacija – kaj, kdaj, kako? Diskusija
  • 5. PROCES RAZVOJA (WEB) APLIKACIJE Razvoj (spletne) aplikacije je težaven Različne in spreminjajoče se zahteve Skalabilnost Performanse Robustnost Povezljivost Različni razvojni procesi Waterfall Agile
  • 6. PROCES Razvojna Ideja Analitik Arhitekt Tester ekipa
  • 7. PROCES Razvojna Ideja Analitik UX Arhitekt Tester ekipa
  • 8. PROCES Razvojna Ideja Analitik UX Arhitekt Tester ekipa
  • 9. KAJ PA „UX“ SPLOH JE? „A person's perceptions and responses that result from the use or anticipated use of a product, system or service“ - ISO 9241-210; Ergonomics of human system interaction
  • 10. KAJ PA „UX“ SPLOH JE? „A person's perceptions and responses that result from the use or anticipated use of a product, system or service“ - ISO 9241-210; Ergonomics of human system interaction
  • 11. UPORABNIŠKA IZKUŠNJA, 2 1/2. del Več posvečanja izkušnji kot uporabnosti Efektivnost Efikasnost Subjektivno zadovoljstvo } Tipični faktorji uporabnosti
  • 12. UPORABNIŠKA IZKUŠNJA, 2 2/2. del Spletne strani & aplikacije Marketing & Branding Oblikovanje Uporabnost Uporabniška izkušnja
  • 13. KAKO RAZUMETI UPORABNIKOVA ČUSTVA? Analiza Kaj ljudem pomeni „address book“? Kaj so problemi, ki jih imajo? Konkurenca na področju Analiza prisotnosti Določimo story-e (+ persone) Izris Wireframe-ov Design
  • 15. Sara & telefonski imenik • UX ekspert & Informacijski Arhitekt • (pozabljiva) lastnica iPhone-a PROBLEM: izgubljeni kontakti
  • 16. Sara & telefonski imenik • UX ekspert & Informacijski Arhitekt • (pozabljiva) lastnica iPhone-a PROBLEM: izgubljeni kontakti IDEJA: aplikacija za upravljanje s kontakti! UX arhitekt Razvojna Ideja Arhitekt Tester / analitik ekipa
  • 17. UX arhitekt Razvojna Ideja Arhitekt Tester / analitik ekipa
  • 18. UX arhitekt Razvojna Ideja Arhitekt Tester / analitik ekipa
  • 19. UX arhitekt Razvojna Ideja Arhitekt Tester / analitik ekipa
  • 20. Implementacija UX arhitekt Razvojna Ideja Arhitekt Tester / analitik ekipa
  • 21. UX in UPORABNIŠKI VMESNIK Uporabniki so vedno zahtevnejši Pričakovanja vedno višja Klienti so neizkoriščeni Brskalniki so vedno hitrejši
  • 22.
  • 23. KLIENTI JavaScript podprt na glavnih platformah Mobilno Desktop (Windows, Mac) Prvi (edini) stik uporabnika z aplikacijo Čustveno dojemanje Klient postaja svoja aplikacija
  • 24. KLIENTI JavaScript podprt na glavnih platformah Mobilno Desktop (Windows, Mac) Prvi (edini) stik uporabnika z aplikacijo Čustveno dojemanje Klient postaja svoja aplikacija, ki teče na eni strani in je na voljo tudi offline
  • 25. PROBLEM Razvijalci odkrivajo toplo vodo Različne implementacije UI-ja Prvo srečanje z jQueryem Novo kladivo DOM = žebelj
  • 26.
  • 27.
  • 28. CILJI Ali „kako si arhitekt želi, da bi aplikacija delovala“ 1. Stanje & modeli morajo živeti na enem mestu 2. Spremembe modela se morajo odražati na vseh mestih vmesnika, kjer se pojavlja 3. Enostavna struktura kode za vzdrževanje 4. Čim manj „framework“ & „glue“ kode
  • 30. BACKBONE.JS „Backbone supplies structure to JavaScript-heavy applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface. “ - http://documentcloud.github.com/backbone
  • 31. BACKBONE.JS Osnovni objekti Modeli (Model) Zbirke (Collection) Pogledi (View) Usmerjevalnik / aplikacija (Router) Dogodki (Events) Sinhronizacija Kvazi JavaScript MVC
  • 32. BACKBONE.JS Malo zunanjih odvisnosti Underscore.js Json2.js (za sinhronizacijo) jQuery (za View) Enostavna uporaba Vrhunska dokumentacija
  • 33. Modeli Poljubni atributi Podatkovna struktura var Contact = Backbone.Model.extend({}); var myContact = new Contact(); myContact.set({ firstName: 'Anze', lastName: 'Vodovnik‚ });
  • 34. Modeli, 2. del var myContact = new Contact({ firstName: 'Anze', lastName: 'Vodovnik‚ }); myContact.get(‚firstName‘);
  • 35. Modeli, 3. del var Contact = Backbone.Model.extend({ initialize: function(contact) { if(!contact || !contact.firstName) { throw „MissingRequiredData“; } }, validate: function(attrs) { if(attrs.email) { if(!_.isString(attrs.email) || attrs.title.length > 100) { return „Email not valid.“ } } } });
  • 36. Zbirke Več kot le array Sinhronizacija, eventi... var AddressBook = Backbone.Collection.extend({ model: Contact, initialize: function() {} }); var myAddressBook = new AddressBook(); myAddressBook.add(myContact);
  • 37. Pogledi EDINA vez med UI in modelom Manipulacija HTML-ja
  • 38. Usmerjevalnik / aplikacija Aplikacija = več povezanih pogledov Poti (routes), akcije var Workspace = Backbone.Router.extend({ routes: { „details/:id“ : „details“, „search/:query/p:page“ : „search“ }, details: function(id) { ... } search: function(query, page) { ... } });
  • 39. M V C Model odel iew View ontroller Router Collection
  • 40. Demo 1-6 Uvod v Backbone.js
  • 41. Backbone.Sync Out-of-the-box sinhronizacija CRUD over REST Create > POST /collection Read > GET /collection[/id] Update > PUT /collection/id Delete > DELETE /collection/id
  • 42. Backbone.Sync & ASP.NET MVC MVC je prinesel RESTful URL-je Od MVC 2.0 FUTURES dalje, podpora za JSON serializacijo objektov v requestu
  • 43. Demo 7 Backbone.Sync & ASP.NET MVC
  • 44. Backbone.Sync je funkcija lahko jo prepišemo lahko jo spremenimo LocalStorage adapter - Jérôme Gravel-Niquet https://github.com/jeromegn/localtodos
  • 45. CILJI – PONOVNI PREGLED Ali „kako si arhitekt želi, da bi aplikacija delovala“ 1. Stanje & modeli morajo živeti na enem mestu MODELI – Model, Collection 2. Spremembe modela se morajo odražati na vseh mestih vmesnika, kjer se pojavlja VIEW MODEL - Views 3. Enostavna struktura kode za vzdrževanje MVC je dokaj poznan, uveljavljen 4. Čim manj „framework“ & „glue“ kode
  • 46. FRAMEWORK & GLUE KODA Ali „nočna mora vseh razvijalcev“ Pisanje lastnega ogrodja se ne splača Ogromno obstoječih, dobrih Nuget je vaš najboljši prijatelj Diagnostika Odvisnosti Eventi Komunikacija med widget-i
  • 47. RequireJS Module & odvisnosti Asinhrono nalaganje Nadzor odvisnosti Moduli Podpira jQuery (require-jquery.js) http://requirejs.org/
  • 48. PubSub Razklop funkcionalnosti „lastni“ dogodki, brez relacije z DOMom Kopija iz DOJO ogrodja (Pete Higgins) $.publish, $.subscribe https://gist.github.com/826794
  • 49. Underscore.js Utility belt ~60 „utility“ funkcij „Je kravata k jQuery obleki“ Object-oriented ali funkcijski stil _.map([1, 2, 3], function(n){ return n * 2; }); _([1, 2, 3]).map(function(n){ return n * 2; }); http://documentcloud.github.com/underscore/
  • 50. Underscore.js Utility belt each, map, reduce, any, min, sortBy, groupBy _.each([1, 2, 3], function(n){ console.log(n); }); _.reduce([5, 10, 15], function(memo, n) { return memo + n; }, 0);  30 _.map([1, 2, 3], function(n) { return n * 5; });  [5, 10, 15]
  • 51. Underscore.js Map/Reduce – štetje besed var lyrics = [ {line : 1, words : "I'm a lumberjack and I'm okay"}, {line : 2, words : "I sleep all night and I work all day"}, {line : 3, words : "He's a lumberjack and he's okay"}, {line : 4, words : "He sleeps all night and he works all day"} ]; _(lyrics).chain() .map(function(line) { return line.words.split(' '); }) .flatten() .reduce(function(counts, word) { counts[word] = (counts[word] || 0) + 1; return counts; }, {}) .value(); => {lumberjack : 2, all : 4, night : 2 ... }
  • 52. Underscore.js & Predloge (templates) Out-of-the-box funkcionalnost _.template(); Loči HTML od JavaScript/logike
  • 55. Sestava „JavaScript“ aplikacije Seznam kontaktov Prikaz kontakta Iskalnik ... Application Framework (Backbone...) Diagnostics, Events, core moduli (JSON...) jQuery / Ogrodje
  • 58. POVZETEK Razvoj je podrejen čustvom uporabnika in izkušnji pri uporabi (UX) Procesi so spremenjeni Vedno večja pomembnost JavaScript aplikacij Arhitektura Code reuse
  • 59. POVZETEK Razvoj je podrejen čustvom uporabnika in izkušnji pri uporabi (UX) [good thing] Procesi so spremenjeni [good thing] Vedno večja pomembnost JavaScript aplikacij [semi-good thing] Arhitektura Code reuse
  • 60. HVALA