SlideShare una empresa de Scribd logo
1 de 85
jARV.US
SPOTLIGHT
 Chris Alfano & Ryon Coleman
    @themightychris @ryon55
Overview
Overview
 SENCHA TOUCH                EXTJS 4

Eagles Draft 2011            Jarv.us

Consumer Reports        DynamicWear

    Christie’s              GoLive.TV
Philadelphia Eagles Draft 2011
Insta-style
<!DOCTYPE html>
<html lang="en">
<head>

  <style>body{background-color:#033}</style>

  <link rel="stylesheet" href="css/eagles-init.css+eagles-sencha.css
+eagles-fonts.css+eagles-overrides.css" type="text/css">

  <!-- ... -->
</head>
<body></body>
</html>
Stretchy backgrounds
body {

  background: url(../img/backgroundLogo.jpg)
    no-repeat center center #033;

  -webkit-background-size: cover;
}

                                /* OR */

.storeCard {

   background: url(../img/storeCard.jpg)
      no-repeat center top;

   -webkit-background-size: contain;
}
On-the-fly CSS & JS minifier
<link rel="stylesheet" type="text/css"
  href="css/eagles-init.css+eagles-sencha.css+eagles-fonts.css+eagles-
overrides.css" />

<link rel="stylesheet" href="css/eagles2x.css" media="only screen and (-
webkit-min-device-pixel-ratio: 1.5)" />

<script type="text/javascript" src="js/sencha-touch.js+app.js+views/*
+models/TwitterProxy.js+models/*"></script>
<link rel="stylesheet"   href="css/eagles-init.css?debug=1" type="text/css">
<link rel="stylesheet"   href="css/eagles-sencha.css?debug=1" type="text/
css">
<link rel="stylesheet"   href="css/eagles-fonts.css?debug=1" type="text/css">
<link rel="stylesheet"   href="css/eagles-overrides.css?debug=1" type="text/
css">

<link rel="stylesheet" href="css/eagles2x.css" media="only screen and (-
webkit-min-device-pixel-ratio: 1.5)" />

<script   type="text/javascript" src="js/sencha-touch.js?debug=1"></script>
<script   type="text/javascript" src="js/app.js?debug=1"></script>
<script   type="text/javascript" src="js/views/AppViewport.js?debug=1"></
script>
<script   type="text/javascript" src="js/views/ArticleCard.js?debug=1"></
script>
<script   type="text/javascript" src="js/views/DraftCard.js?debug=1"></
script>
<script   type="text/javascript" src="js/views/LandingCard.js?debug=1"></
script>
<script   type="text/javascript" src="js/views/ProspectCard.js?debug=1"></
script>
<script   type="text/javascript" src="js/views/StoreCard.js?debug=1"></
,startAutoRefresh: function() {

   this.autoRefreshInterval = setInterval(

   
   Ext.createDelegate(this.picksStore.load, this.picksStore)

   
   ,this.autoRefreshSeconds * 1000

   );
}

,onPicksLoaded: function(store, records, success){
 

   if(this.isVisible() && this.liveDraft.isVisible())

   
    this.seenPicks = records.length;

   else

   
    this.updateUnseen(records.length);
}

,onDraftCardActivated: function() {

     this.markSeen();
}
     
,markSeen: function() {

     this.seenPicks = this.picksStore.getCount();

     this.updateUnseen(this.seenPicks);
}
Challenges




Lessons Learned
Challenges
Learn Sencha Touch and SASS theming :)




Lessons Learned
Challenges
Learn Sencha Touch and SASS theming :)
Get and display live updates




Lessons Learned
Challenges
Learn Sencha Touch and SASS theming :)
Get and display live updates
Adapt static images to different screen ratios




Lessons Learned
Challenges
Learn Sencha Touch and SASS theming :)
Get and display live updates
Adapt static images to different screen ratios




Lessons Learned
Destroy DOM when you’re done with it
Challenges
Learn Sencha Touch and SASS theming :)
Get and display live updates
Adapt static images to different screen ratios




Lessons Learned
Destroy DOM when you’re done with it
Establish clear parameters for post-launch content
Challenges
Learn Sencha Touch and SASS theming :)
Get and display live updates
Adapt static images to different screen ratios




Lessons Learned
Destroy DOM when you’re done with it
Establish clear parameters for post-launch content
-webkit-background-size
Barcode scanning
,onScanPress: function() {

   if(window.device) {

   
    window.plugins.barcodeScanner.scan(

   
    
   Ext.createDelegate(this.onBarcodeSuccess, this)

   
    
   ,Ext.createDelegate(this.onBarcodeFailure, this)

   
    );

   } else {

   
    alert('barcode scanning is currently only available in native builds');

   }
}

,onBarcodeSuccess: function(upc) {

   CR.views.viewport.executeBarcodeSearch(upc);
}
StackPanel viewport
CR.views.viewport.loadCard({

   xtype: 'aboutpanel'

   ,prevCard: this
},{

   // optional animation controls

   animate: 'slide'

   ,direction: 'left'

   ,reverse: false

   ,cover: false

   ,reveal: false


   // optional stack management

   ,clearStack: false // true to erase history stack

   ,clearAfter: false // pass a panel instance to clear any forward history
});
                                    https://github.com/JarvusInnovations/Jarvus.mobile.StackPanel
DOM destruction
this.on('beforeactivate', function() {

     this.setLoading(true);
}, this, {delay: 10});

this.on('activate', function() {

     if(this.loaded) {

     
     this.setLoading(false);

     
     this.list.refresh(); // redraw existing store contents

     } else {

     
     this.list.store.load({

     
     
     scope: this

     
     
     ,callback: function() {

     
     
     
     this.setLoading(false);

     
     
     }

     
     });

     }
}, this);

this.on('beforedeactivate', function() {

     this.list.update('');
}, this);
.x-list-item {

   .product {

   
    -webkit-box-align: stretch;

   
    -webkit-box-orient: horizontal;

   
    display: -webkit-box;

   
    overflow: hidden;

   

   
    & > div { -webkit-transition: -webkit-transform 250ms; }


   
    .delete-button-ct {

   
    
   -webkit-box-align: center;

   
    
   display: -webkit-box;

   
    
   margin-right: -85px;

   
    
   width: 85px;

   
    

   
    
   .x-button { -webkit-box-flex: 1; }

   
    }

   }


   &.confirm-delete .product > * {
    -webkit-transform: translate3d(-85px, 0, 0)
  }
}
Challenges




Lessons Learned
Challenges
Access native APIs for barcode scanner




Lessons Learned
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view




Lessons Learned
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking




Lessons Learned
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking
Aggregation of disparate data sources in a single view




Lessons Learned
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking
Aggregation of disparate data sources in a single view
Animated swipe-to-delete



Lessons Learned
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking
Aggregation of disparate data sources in a single view
Animated swipe-to-delete



Lessons Learned
Don’t use tabpanel
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking
Aggregation of disparate data sources in a single view
Animated swipe-to-delete



Lessons Learned
Don’t use tabpanel
Wrap card layout for history
Challenges
Access native APIs for barcode scanner
Locked grid for comparison view
Complex history tracking
Aggregation of disparate data sources in a single view
Animated swipe-to-delete



Lessons Learned
Don’t use tabpanel
Wrap card layout for history
-webkit-box and -webkit-transform3d
Make it pop!
@mixin background-gradient($bg-color, $type: $base-gradient) {
...
    } @else if $type == 'supergloss' {
      @include background-image(
        linear-gradient(color_stops(
           lighten($bg-color, 40%),
           lighten($bg-color, 15%) 50%,
           $bg-color 51%,
           lighten($bg-color, 5%)
        ))
      );
    }
...

@include sencha-button-ui('action', darken($christies-red, 10%),
'supergloss');
Challenges




Lessons Learned
Challenges
Random access thumbnail gallery




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling
Zoomable image carousel




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling
Zoomable image carousel
(https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel)




Lessons Learned
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling
Zoomable image carousel
(https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel)




Lessons Learned
Defer loading data until after screen is rendered
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling
Zoomable image carousel
(https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel)




Lessons Learned
Defer loading data until after screen is rendered
Override mixins
Challenges
Random access thumbnail gallery
Third-party SOAP backend
Custom gradient types
Form styling
Zoomable image carousel
(https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel)




Lessons Learned
Defer loading data until after screen is rendered
Override mixins
Reusable list tpls and box layout
Challenges




Lessons Learned
Challenges
Performance on a HEAVY page full of images




Lessons Learned
Challenges
Performance on a HEAVY page full of images
Make an animated dataview appear & init quickly




Lessons Learned
Challenges
Performance on a HEAVY page full of images
Make an animated dataview appear & init quickly




Lessons Learned
Stack JS builds to minimize load times, avoid dupes
Challenges
Performance on a HEAVY page full of images
Make an animated dataview appear & init quickly




Lessons Learned
Stack JS builds to minimize load times, avoid dupes
“Stunt double” hack
Challenges
Performance on a HEAVY page full of images
Make an animated dataview appear & init quickly




Lessons Learned
Stack JS builds to minimize load times, avoid dupes
“Stunt double” hack
Lazy loading via data- attributes
Challenges




Lessons Learned
Challenges
Realtime node.js integration




Lessons Learned
Challenges
Realtime node.js integration
Make page render immediately, then update with latest info




Lessons Learned
Challenges
Realtime node.js integration
Make page render immediately, then update with latest info




Lessons Learned
Socket.IO is fun!
Challenges
Realtime node.js integration
Make page render immediately, then update with latest info




Lessons Learned
Socket.IO is fun!
Old-school progressive enhancement = good practice
Use iconCls for buttons
.x-btn-icon {

   background-position: center center;

   background-repeat: no-repeat;


   &.shirts
{
    background-image: url(/img/icons/nav/shirts.png); }

   &.orders
 {
    background-image: url(/img/icons/nav/orders.png); }

   &.settings
 {
    background-image: url(/img/icons/nav/settings.png); }
}
Toolset & Workflow
Toolset & Workflow
   Emergence framework

      TotalTerminal

        Dropbox

          Coda
DOs and DON’Ts
Wrangling Dependencies
   DO           DON’T
Wrangling Dependencies
            DO                 DON’T
Define requirements as close
  to their use as possible
Wrangling Dependencies
            DO                  DON’T
Define requirements as close
  to their use as possible

Use Ext.create for all object
       instantiation
Wrangling Dependencies
            DO                            DON’T
Define requirements as close    Define requirements as close
  to their use as possible        to their use as possible

Use Ext.create for all object
       instantiation
Wrangling Dependencies
            DO                            DON’T
Define requirements as close    Define requirements as close
  to their use as possible        to their use as possible

Use Ext.create for all object   Use Ext.create for all object
       instantiation                   instantiation
Custom Builds
DO           DO!
Custom Builds
             DO                   DO!
Load your whole site on ext-
core.js (sans manifest) for the
       auto-build script
Custom Builds
             DO                   DO!
Load your whole site on ext-
core.js (sans manifest) for the
       auto-build script

Separate your classes from Ext
 classes into different builds
Custom Builds
             DO                               DO!
Load your whole site on ext-      Create builds on top of ext.js
core.js (sans manifest) for the   at milestones to reduce load
       auto-build script                      times

Separate your classes from Ext
 classes into different builds
Custom Builds
             DO                               DO!
Load your whole site on ext-      Create builds on top of ext.js
core.js (sans manifest) for the   at milestones to reduce load
       auto-build script                      times

Separate your classes from Ext      Mix compiled and static
 classes into different builds    loading during development
                                       for quick iteratoin
Page Loading
DO              DON’T
Page Loading
            DO                 DON’T
Create a minimal CSS file to
   load first—show that
  something is happening
Page Loading
            DO                 DON’T
Create a minimal CSS file to
   load first—show that
  something is happening

Load modernizr and any font
  loaders in the <head>
Page Loading
            DO                            DON’T
Create a minimal CSS file to   Load all of your JavaScript in
   load first—show that                 the <head>
  something is happening

Load modernizr and any font
  loaders in the <head>
Working with SASS
 DO          DON’T
Working with SASS
              DO                    DON’T
Explore Ext’s default .scss files
Working with SASS
              DO                    DON’T
Explore Ext’s default .scss files

 Enjoy mixins, variables, color
      functions, nesting
Working with SASS
              DO                    DON’T
Explore Ext’s default .scss files

 Enjoy mixins, variables, color
      functions, nesting

  Be OCD about indentation!
Working with SASS
              DO                    DON’T
Explore Ext’s default .scss files

 Enjoy mixins, variables, color
      functions, nesting

  Be OCD about indentation!

 Use Compass for CSS3 and
      tricky techniques
Working with SASS
              DO                             DON’T
Explore Ext’s default .scss files   Go too crazy with nesting

 Enjoy mixins, variables, color
      functions, nesting

  Be OCD about indentation!

 Use Compass for CSS3 and
      tricky techniques
Working with SASS
              DO                              DON’T
Explore Ext’s default .scss files    Go too crazy with nesting

 Enjoy mixins, variables, color     Battle defaults; instead work
      functions, nesting             with the variables provided

  Be OCD about indentation!

 Use Compass for CSS3 and
      tricky techniques
Working with SASS
              DO                              DON’T
Explore Ext’s default .scss files    Go too crazy with nesting

 Enjoy mixins, variables, color     Battle defaults; instead work
      functions, nesting             with the variables provided

  Be OCD about indentation!          Overdo it with ‘ui’ configs
                                    when regular classes will do
 Use Compass for CSS3 and
      tricky techniques
Working with SASS
              DO                               DON’T
Explore Ext’s default .scss files    Go too crazy with nesting

 Enjoy mixins, variables, color     Battle defaults; instead work
      functions, nesting             with the variables provided

  Be OCD about indentation!          Overdo it with ‘ui’ configs
                                    when regular classes will do
 Use Compass for CSS3 and
      tricky techniques              Be afraid to line-by-line it
tHANK YOU!
 Chris Alfano & Ryon Coleman
    @themightychris @ryon55

Más contenido relacionado

La actualidad más candente

Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & Tricks
Hjörtur Hilmarsson
 

La actualidad más candente (20)

Sane Async Patterns
Sane Async PatternsSane Async Patterns
Sane Async Patterns
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explained
 
Before there was Hoop Dreams, there was McDonald's: Strange and Beautiful
Before there was Hoop Dreams, there was McDonald's: Strange and BeautifulBefore there was Hoop Dreams, there was McDonald's: Strange and Beautiful
Before there was Hoop Dreams, there was McDonald's: Strange and Beautiful
 
JavaScript for Flex Devs
JavaScript for Flex DevsJavaScript for Flex Devs
JavaScript for Flex Devs
 
AngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsAngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.js
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & Tricks
 
Dependency management & Package management in JavaScript
Dependency management & Package management in JavaScriptDependency management & Package management in JavaScript
Dependency management & Package management in JavaScript
 
DrupalCon jQuery
DrupalCon jQueryDrupalCon jQuery
DrupalCon jQuery
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5
 
AngularJS Animations
AngularJS AnimationsAngularJS Animations
AngularJS Animations
 
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
 
Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
 
Web internship Yii Framework
Web internship  Yii FrameworkWeb internship  Yii Framework
Web internship Yii Framework
 
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasFrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular js
 

Destacado

Assemblea informativa jornada escolar pw
Assemblea informativa jornada escolar pwAssemblea informativa jornada escolar pw
Assemblea informativa jornada escolar pw
AMPA INS Bellvitge
 
05 koude nagerechten
05 koude nagerechten05 koude nagerechten
05 koude nagerechten
Paul Laaper
 
II republica
II republicaII republica
II republica
pserrano1
 
Modelul biblioteconomic încastrat dinamism evolutiv al ştiinţei biblioteco...
Modelul biblioteconomic încastrat    dinamism evolutiv al ştiinţei biblioteco...Modelul biblioteconomic încastrat    dinamism evolutiv al ştiinţei biblioteco...
Modelul biblioteconomic încastrat dinamism evolutiv al ştiinţei biblioteco...
Vasilica Victoria
 
New work order system
New work order systemNew work order system
New work order system
maintenx
 

Destacado (20)

Shipra's Capital City Chandigarh
Shipra's Capital City ChandigarhShipra's Capital City Chandigarh
Shipra's Capital City Chandigarh
 
Social Media's Role in Cost-Effective Digital Communications
Social Media's Role in Cost-Effective Digital CommunicationsSocial Media's Role in Cost-Effective Digital Communications
Social Media's Role in Cost-Effective Digital Communications
 
Pintura de piel
Pintura de pielPintura de piel
Pintura de piel
 
E learning utilizando software libre
E learning utilizando software libreE learning utilizando software libre
E learning utilizando software libre
 
IT-BPO Situationer and ICT Industry Development Programs
IT-BPO Situationer and ICT Industry Development ProgramsIT-BPO Situationer and ICT Industry Development Programs
IT-BPO Situationer and ICT Industry Development Programs
 
Assemblea informativa jornada escolar pw
Assemblea informativa jornada escolar pwAssemblea informativa jornada escolar pw
Assemblea informativa jornada escolar pw
 
05 koude nagerechten
05 koude nagerechten05 koude nagerechten
05 koude nagerechten
 
Arangkada Philippines forum January 26, 2012
Arangkada Philippines forum January 26, 2012Arangkada Philippines forum January 26, 2012
Arangkada Philippines forum January 26, 2012
 
II republica
II republicaII republica
II republica
 
GovDelivery at the City of Raleigh by Beth Stagner
GovDelivery at the City of Raleigh by Beth StagnerGovDelivery at the City of Raleigh by Beth Stagner
GovDelivery at the City of Raleigh by Beth Stagner
 
SPN Ogilvy DI Borjomi Blogger Tour Case
SPN Ogilvy DI Borjomi Blogger Tour CaseSPN Ogilvy DI Borjomi Blogger Tour Case
SPN Ogilvy DI Borjomi Blogger Tour Case
 
09 verdikkingsmiddelen
09 verdikkingsmiddelen09 verdikkingsmiddelen
09 verdikkingsmiddelen
 
Modelul biblioteconomic încastrat dinamism evolutiv al ştiinţei biblioteco...
Modelul biblioteconomic încastrat    dinamism evolutiv al ştiinţei biblioteco...Modelul biblioteconomic încastrat    dinamism evolutiv al ştiinţei biblioteco...
Modelul biblioteconomic încastrat dinamism evolutiv al ştiinţei biblioteco...
 
18 granen
18 granen18 granen
18 granen
 
Global outlook q1 2013
Global outlook q1 2013Global outlook q1 2013
Global outlook q1 2013
 
NCC-State of Competitiveness
NCC-State of CompetitivenessNCC-State of Competitiveness
NCC-State of Competitiveness
 
National Weather Service & Digital Communication Management
National Weather Service & Digital Communication ManagementNational Weather Service & Digital Communication Management
National Weather Service & Digital Communication Management
 
Tugas bistel
Tugas bistelTugas bistel
Tugas bistel
 
New work order system
New work order systemNew work order system
New work order system
 
2009 2010 memória curs
2009 2010 memória curs2009 2010 memória curs
2009 2010 memória curs
 

Similar a Jarv.us Showcase — SenchaCon 2011

Private slideshow
Private slideshowPrivate slideshow
Private slideshow
sblackman
 
After max+phonegap
After max+phonegapAfter max+phonegap
After max+phonegap
yangdj
 
混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver
yangdj
 

Similar a Jarv.us Showcase — SenchaCon 2011 (20)

Private slideshow
Private slideshowPrivate slideshow
Private slideshow
 
Rails 6 frontend frameworks
Rails 6 frontend frameworksRails 6 frontend frameworks
Rails 6 frontend frameworks
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
After max+phonegap
After max+phonegapAfter max+phonegap
After max+phonegap
 
混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
Aplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com BackboneAplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com Backbone
 
Javascript in Plone
Javascript in PloneJavascript in Plone
Javascript in Plone
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the World
 
前端概述
前端概述前端概述
前端概述
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
 
Cheap frontend tricks
Cheap frontend tricksCheap frontend tricks
Cheap frontend tricks
 
Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the Web
 
jQuery Foot-Gun Features
jQuery Foot-Gun FeaturesjQuery Foot-Gun Features
jQuery Foot-Gun Features
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 

Jarv.us Showcase — SenchaCon 2011

  • 1.
  • 2. jARV.US SPOTLIGHT Chris Alfano & Ryon Coleman @themightychris @ryon55
  • 4. Overview SENCHA TOUCH EXTJS 4 Eagles Draft 2011 Jarv.us Consumer Reports DynamicWear Christie’s GoLive.TV
  • 6. Insta-style <!DOCTYPE html> <html lang="en"> <head> <style>body{background-color:#033}</style> <link rel="stylesheet" href="css/eagles-init.css+eagles-sencha.css +eagles-fonts.css+eagles-overrides.css" type="text/css"> <!-- ... --> </head> <body></body> </html>
  • 7. Stretchy backgrounds body { background: url(../img/backgroundLogo.jpg) no-repeat center center #033; -webkit-background-size: cover; } /* OR */ .storeCard { background: url(../img/storeCard.jpg) no-repeat center top; -webkit-background-size: contain; }
  • 8. On-the-fly CSS & JS minifier <link rel="stylesheet" type="text/css" href="css/eagles-init.css+eagles-sencha.css+eagles-fonts.css+eagles- overrides.css" /> <link rel="stylesheet" href="css/eagles2x.css" media="only screen and (- webkit-min-device-pixel-ratio: 1.5)" /> <script type="text/javascript" src="js/sencha-touch.js+app.js+views/* +models/TwitterProxy.js+models/*"></script>
  • 9. <link rel="stylesheet" href="css/eagles-init.css?debug=1" type="text/css"> <link rel="stylesheet" href="css/eagles-sencha.css?debug=1" type="text/ css"> <link rel="stylesheet" href="css/eagles-fonts.css?debug=1" type="text/css"> <link rel="stylesheet" href="css/eagles-overrides.css?debug=1" type="text/ css"> <link rel="stylesheet" href="css/eagles2x.css" media="only screen and (- webkit-min-device-pixel-ratio: 1.5)" /> <script type="text/javascript" src="js/sencha-touch.js?debug=1"></script> <script type="text/javascript" src="js/app.js?debug=1"></script> <script type="text/javascript" src="js/views/AppViewport.js?debug=1"></ script> <script type="text/javascript" src="js/views/ArticleCard.js?debug=1"></ script> <script type="text/javascript" src="js/views/DraftCard.js?debug=1"></ script> <script type="text/javascript" src="js/views/LandingCard.js?debug=1"></ script> <script type="text/javascript" src="js/views/ProspectCard.js?debug=1"></ script> <script type="text/javascript" src="js/views/StoreCard.js?debug=1"></
  • 10. ,startAutoRefresh: function() { this.autoRefreshInterval = setInterval( Ext.createDelegate(this.picksStore.load, this.picksStore) ,this.autoRefreshSeconds * 1000 ); } ,onPicksLoaded: function(store, records, success){ if(this.isVisible() && this.liveDraft.isVisible()) this.seenPicks = records.length; else this.updateUnseen(records.length); } ,onDraftCardActivated: function() { this.markSeen(); }     ,markSeen: function() { this.seenPicks = this.picksStore.getCount(); this.updateUnseen(this.seenPicks); }
  • 12. Challenges Learn Sencha Touch and SASS theming :) Lessons Learned
  • 13. Challenges Learn Sencha Touch and SASS theming :) Get and display live updates Lessons Learned
  • 14. Challenges Learn Sencha Touch and SASS theming :) Get and display live updates Adapt static images to different screen ratios Lessons Learned
  • 15. Challenges Learn Sencha Touch and SASS theming :) Get and display live updates Adapt static images to different screen ratios Lessons Learned Destroy DOM when you’re done with it
  • 16. Challenges Learn Sencha Touch and SASS theming :) Get and display live updates Adapt static images to different screen ratios Lessons Learned Destroy DOM when you’re done with it Establish clear parameters for post-launch content
  • 17. Challenges Learn Sencha Touch and SASS theming :) Get and display live updates Adapt static images to different screen ratios Lessons Learned Destroy DOM when you’re done with it Establish clear parameters for post-launch content -webkit-background-size
  • 18.
  • 19. Barcode scanning ,onScanPress: function() { if(window.device) { window.plugins.barcodeScanner.scan( Ext.createDelegate(this.onBarcodeSuccess, this) ,Ext.createDelegate(this.onBarcodeFailure, this) ); } else { alert('barcode scanning is currently only available in native builds'); } } ,onBarcodeSuccess: function(upc) { CR.views.viewport.executeBarcodeSearch(upc); }
  • 20. StackPanel viewport CR.views.viewport.loadCard({ xtype: 'aboutpanel' ,prevCard: this },{ // optional animation controls animate: 'slide' ,direction: 'left' ,reverse: false ,cover: false ,reveal: false // optional stack management ,clearStack: false // true to erase history stack ,clearAfter: false // pass a panel instance to clear any forward history }); https://github.com/JarvusInnovations/Jarvus.mobile.StackPanel
  • 21. DOM destruction this.on('beforeactivate', function() { this.setLoading(true); }, this, {delay: 10}); this.on('activate', function() { if(this.loaded) { this.setLoading(false); this.list.refresh(); // redraw existing store contents } else { this.list.store.load({ scope: this ,callback: function() { this.setLoading(false); } }); } }, this); this.on('beforedeactivate', function() { this.list.update(''); }, this);
  • 22. .x-list-item { .product { -webkit-box-align: stretch; -webkit-box-orient: horizontal; display: -webkit-box; overflow: hidden; & > div { -webkit-transition: -webkit-transform 250ms; } .delete-button-ct { -webkit-box-align: center; display: -webkit-box; margin-right: -85px; width: 85px; .x-button { -webkit-box-flex: 1; } } } &.confirm-delete .product > * { -webkit-transform: translate3d(-85px, 0, 0) } }
  • 24. Challenges Access native APIs for barcode scanner Lessons Learned
  • 25. Challenges Access native APIs for barcode scanner Locked grid for comparison view Lessons Learned
  • 26. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Lessons Learned
  • 27. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Aggregation of disparate data sources in a single view Lessons Learned
  • 28. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Aggregation of disparate data sources in a single view Animated swipe-to-delete Lessons Learned
  • 29. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Aggregation of disparate data sources in a single view Animated swipe-to-delete Lessons Learned Don’t use tabpanel
  • 30. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Aggregation of disparate data sources in a single view Animated swipe-to-delete Lessons Learned Don’t use tabpanel Wrap card layout for history
  • 31. Challenges Access native APIs for barcode scanner Locked grid for comparison view Complex history tracking Aggregation of disparate data sources in a single view Animated swipe-to-delete Lessons Learned Don’t use tabpanel Wrap card layout for history -webkit-box and -webkit-transform3d
  • 32.
  • 33. Make it pop! @mixin background-gradient($bg-color, $type: $base-gradient) { ... } @else if $type == 'supergloss' { @include background-image( linear-gradient(color_stops( lighten($bg-color, 40%), lighten($bg-color, 15%) 50%, $bg-color 51%, lighten($bg-color, 5%) )) ); } ... @include sencha-button-ui('action', darken($christies-red, 10%), 'supergloss');
  • 35. Challenges Random access thumbnail gallery Lessons Learned
  • 36. Challenges Random access thumbnail gallery Third-party SOAP backend Lessons Learned
  • 37. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Lessons Learned
  • 38. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Lessons Learned
  • 39. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Zoomable image carousel Lessons Learned
  • 40. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Zoomable image carousel (https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel) Lessons Learned
  • 41. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Zoomable image carousel (https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel) Lessons Learned Defer loading data until after screen is rendered
  • 42. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Zoomable image carousel (https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel) Lessons Learned Defer loading data until after screen is rendered Override mixins
  • 43. Challenges Random access thumbnail gallery Third-party SOAP backend Custom gradient types Form styling Zoomable image carousel (https://github.com/JarvusInnovations/Jarvus.mobile.PinchCarousel) Lessons Learned Defer loading data until after screen is rendered Override mixins Reusable list tpls and box layout
  • 44.
  • 46. Challenges Performance on a HEAVY page full of images Lessons Learned
  • 47. Challenges Performance on a HEAVY page full of images Make an animated dataview appear & init quickly Lessons Learned
  • 48. Challenges Performance on a HEAVY page full of images Make an animated dataview appear & init quickly Lessons Learned Stack JS builds to minimize load times, avoid dupes
  • 49. Challenges Performance on a HEAVY page full of images Make an animated dataview appear & init quickly Lessons Learned Stack JS builds to minimize load times, avoid dupes “Stunt double” hack
  • 50. Challenges Performance on a HEAVY page full of images Make an animated dataview appear & init quickly Lessons Learned Stack JS builds to minimize load times, avoid dupes “Stunt double” hack Lazy loading via data- attributes
  • 51.
  • 54. Challenges Realtime node.js integration Make page render immediately, then update with latest info Lessons Learned
  • 55. Challenges Realtime node.js integration Make page render immediately, then update with latest info Lessons Learned Socket.IO is fun!
  • 56. Challenges Realtime node.js integration Make page render immediately, then update with latest info Lessons Learned Socket.IO is fun! Old-school progressive enhancement = good practice
  • 57.
  • 58. Use iconCls for buttons .x-btn-icon { background-position: center center; background-repeat: no-repeat; &.shirts { background-image: url(/img/icons/nav/shirts.png); } &.orders { background-image: url(/img/icons/nav/orders.png); } &.settings { background-image: url(/img/icons/nav/settings.png); } }
  • 60. Toolset & Workflow Emergence framework TotalTerminal Dropbox Coda
  • 63. Wrangling Dependencies DO DON’T Define requirements as close to their use as possible
  • 64. Wrangling Dependencies DO DON’T Define requirements as close to their use as possible Use Ext.create for all object instantiation
  • 65. Wrangling Dependencies DO DON’T Define requirements as close Define requirements as close to their use as possible to their use as possible Use Ext.create for all object instantiation
  • 66. Wrangling Dependencies DO DON’T Define requirements as close Define requirements as close to their use as possible to their use as possible Use Ext.create for all object Use Ext.create for all object instantiation instantiation
  • 68. Custom Builds DO DO! Load your whole site on ext- core.js (sans manifest) for the auto-build script
  • 69. Custom Builds DO DO! Load your whole site on ext- core.js (sans manifest) for the auto-build script Separate your classes from Ext classes into different builds
  • 70. Custom Builds DO DO! Load your whole site on ext- Create builds on top of ext.js core.js (sans manifest) for the at milestones to reduce load auto-build script times Separate your classes from Ext classes into different builds
  • 71. Custom Builds DO DO! Load your whole site on ext- Create builds on top of ext.js core.js (sans manifest) for the at milestones to reduce load auto-build script times Separate your classes from Ext Mix compiled and static classes into different builds loading during development for quick iteratoin
  • 72. Page Loading DO DON’T
  • 73. Page Loading DO DON’T Create a minimal CSS file to load first—show that something is happening
  • 74. Page Loading DO DON’T Create a minimal CSS file to load first—show that something is happening Load modernizr and any font loaders in the <head>
  • 75. Page Loading DO DON’T Create a minimal CSS file to Load all of your JavaScript in load first—show that the <head> something is happening Load modernizr and any font loaders in the <head>
  • 76. Working with SASS DO DON’T
  • 77. Working with SASS DO DON’T Explore Ext’s default .scss files
  • 78. Working with SASS DO DON’T Explore Ext’s default .scss files Enjoy mixins, variables, color functions, nesting
  • 79. Working with SASS DO DON’T Explore Ext’s default .scss files Enjoy mixins, variables, color functions, nesting Be OCD about indentation!
  • 80. Working with SASS DO DON’T Explore Ext’s default .scss files Enjoy mixins, variables, color functions, nesting Be OCD about indentation! Use Compass for CSS3 and tricky techniques
  • 81. Working with SASS DO DON’T Explore Ext’s default .scss files Go too crazy with nesting Enjoy mixins, variables, color functions, nesting Be OCD about indentation! Use Compass for CSS3 and tricky techniques
  • 82. Working with SASS DO DON’T Explore Ext’s default .scss files Go too crazy with nesting Enjoy mixins, variables, color Battle defaults; instead work functions, nesting with the variables provided Be OCD about indentation! Use Compass for CSS3 and tricky techniques
  • 83. Working with SASS DO DON’T Explore Ext’s default .scss files Go too crazy with nesting Enjoy mixins, variables, color Battle defaults; instead work functions, nesting with the variables provided Be OCD about indentation! Overdo it with ‘ui’ configs when regular classes will do Use Compass for CSS3 and tricky techniques
  • 84. Working with SASS DO DON’T Explore Ext’s default .scss files Go too crazy with nesting Enjoy mixins, variables, color Battle defaults; instead work functions, nesting with the variables provided Be OCD about indentation! Overdo it with ‘ui’ configs when regular classes will do Use Compass for CSS3 and tricky techniques Be afraid to line-by-line it
  • 85. tHANK YOU! Chris Alfano & Ryon Coleman @themightychris @ryon55

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n