SlideShare une entreprise Scribd logo
1  sur  33
HTML, CSS, JavaScript &
                                Windows 8


                                      christopher.bennage
                                             @microsoft.com

patterns & practices symposium 2013
bennage
@bennage
 bennage
dev.bennage.com
    bennage
Welcome to

 WonderL
 and
“Curiouser and curiouser!”
Cried Alice (she was so
much surprised, that for the
moment she quite forgot how
Living in a

 SandBox
Understanding the Application

 LifeCycle
Navigating the

 Landscape
                    Windows Runtime
                    Windows Library for JavaScript
                    DOM
                    JavaScript
                    Visual Studio Templates
Fascinating & Mesmerizing Bits Regarding

JavaScript
Responsivene
Strange Things Affecting



 ss                  JavaScript is Single Thread
                     Everything Blocks the UI
                     Even Unexpected Things
function blocking() {

    var items = getBigArrayOfItems();

    for(var i = items.length - 1; i >= 0; i--) {
        doExpensiveComputationOn(items[i]);
    }

}
function not_blocking() {

    var items = getBigArrayOfItems();
    var i = items.length - 1;

    function processNext() {
        doExpensiveComputationOn(items[i]);
        i--;
        if(i >= 0) {
             setImmediate(processNext);
        }
    }

    processNext();
}
A very useful thing is

 bind
  Partial Application        function add(x, y) {
                                  return x + y;
  Returns a Function         }
  1st arg resolves to this
                              var add7 = add.bind(null, 7);

                              var sum =add7(3); // sum is 10
function pretendToBeAsync(adder) {
    var sum = adder();
    console.log(sum);
}

var someObject = {

     someNumber: 10,

     add: function() {
         return this.someNumber + 1;
     },

     problem: function() {
         pretendToBeAsync(this.add);
     }

};

someObject.problem();
Did I miss

 jQuery?
              document.querySelector()
              WinJS.xhr()
              WinJS.Utilities.addClass()
Wat? This is JavaScript…

 Memory Leaks
  apps are long running
  higher chance of memory
   leaks
  URL.createObjectURL(blob)
Things to Know about the

Windows
Library for
JavaScript
Understand

 Promises
  Objects represent a task
  Composable
  Cancellable
Be sure to Cancel

 Async
  Be aware of what’s happening
  A common scenario is
   Navigating Away
  Custom promises probably need to
   be cancelled too
WinJS.UI.Pages.define("some/page", {

    ready: function(element, options) {
        this.promise =
kickOffAsynProcess();
    },

      unload: function() {
          this.promise.cancel();
      }

});
_createViewModels: function (files) {
    var count = files.length;
    var results = new Array(count);
    var index = count - 1;
    var proceed = true;

   function onCancellation() {
       proceed = false;
   }

    return new WinJS.Promise(function
(complete, error) {

       function processNextFile() {
           var file = files[index];
           results[index] = new Hilo.Picture(file);
           index--;

           if (index < 0) {
               complete(results);
           } else if (!proceed) {
               error("Cancel");
           } else {
               setImmediate(processNextFile);
           }
       }

       processNextFile();

   }, onCancellation);
Understand the built-in

 Navigation
  WinJS.Navigation
  WinJS.UI.Pages
  navigator.js
Various & Sundry

 miscellania
                use a single AppBar
                built-in message queue
                manually create two-way binding
A few things about the

Windows Runtime
WinRT
They are not JavaScript, those



 Objects                 Objects originating within
                         WinRT are not mutable like
                         plain ol’ JavaScript objects.

                          WinJS.Binding.as()
var fileQuery =
Windows.Storage.KnownFolders.picturesLibrary.createFileQuery();
fileQuery.getFilesAsync(0, 2).then(function (results) {
    var storageFile = results[0];
    var observable = WinJS.Binding.as(storageFile); // sad panda
});
Tips about the

 File System
  some queries behave differently
   for different folders
  Advanced Query Syntax
  file properties

  queryOptions.applicationSearchFilter =
  "System.ItemDate:2013-01-01T00:00:00Z..2013-01-
  01T00:00:00Z";
Some of the Properties Available
    System.AcquisitionID           System.FindData                           System.IsRead
    System.ApplicationName         System.FlagColor                          System.IsSearchOnlyItem
    System.Author                  System.FlagColorText                      System.IsSendToTarget
    System.Capacity                System.FlagStatus                         System.IsShared
    System.Category                System.FlagStatusText                     System.ItemAuthors
    System.Comment                 System.FreeSpace                          System.ItemClassType
    System.Company                 System.FullText                           System.ItemDate
    System.ComputerName            System.Identity                           System.ItemFolderNameDisplay
    System.ContainedItems          System.Identity.Blob                      System.ItemFolderPathDisplay
    System.ContentStatus           System.Identity.DisplayName               System.ItemFolderPathDisplayNarrow
    System.ContentType             System.Identity.IsMeIdentity              System.ItemName
    System.Copyright               System.Identity.PrimaryEmailAddress       System.ItemNameDisplay
    System.DateAccessed            System.Identity.ProviderID                System.ItemNamePrefix
    System.DateAcquired            System.Identity.UniqueID                  System.ItemParticipants
    System.DateArchived            System.Identity.UserName                  System.ItemPathDisplay
    System.DateCompleted           System.IdentityProvider.Name              System.ItemPathDisplayNarrow
    System.DateCreated             System.IdentityProvider.Picture           System.ItemType
    System.DateImported            System.ImageParsingName                   System.ItemTypeText
    System.DateModified            System.Importance                         System.ItemUrl
    System.DueDate                 System.ImportanceText                     System.Keywords
    System.EndDate                 System.IsAttachment                       System.Kind
    System.FileAllocationSize      System.IsDefaultNonOwnerSaveLocation      System.KindText
    System.FileAttributes          System.IsDefaultSaveLocation              System.Language
    System.FileCount               System.IsDeleted                          System.LayoutPattern.ContentViewModeForBrowse
    System.FileDescription         System.IsEncrypted                        System.LayoutPattern.ContentViewModeForSearch
    System.FileExtension           System.IsFlagged                          System.MileageInformation
    System.FileFRN                 System.IsFlaggedComplete                  System.MIMEType
    System.FileName                System.IsIncomplete                       System.Null
    System.FileOwner               System.IsLocationSupported                System.OfflineAvailability
    System.FileVersion             System.IsPinnedToNameSpaceTree            System.OfflineStatus
An application’s

 Structure
  standard, historical
  modules (AMD)
  something new &
   magical
Sundry Means of Accomplishing

 Unit Tests
  how to structure
  frameworks
  functional style makes it easier



  chutzpah.codeplex.com
  visionmedia.github.com/mocha
The End
•   hilojs.codeplex.com
•   github.com/NobleJS/WinningJS

Contenu connexe

Tendances

JQuery New Evolution
JQuery New EvolutionJQuery New Evolution
JQuery New EvolutionAllan Huang
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidRodrigo de Souza Castro
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQueryachinth
 
ZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODMZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODMJonathan Wage
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the TrenchesJonathan Wage
 
Symfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMSymfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMJonathan Wage
 
Doctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperDoctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperJonathan Wage
 
Selenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkSelenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkDavid Rajah Selvaraj
 
Utopia Kindgoms scaling case: From 4 to 50K users
Utopia Kindgoms scaling case: From 4 to 50K usersUtopia Kindgoms scaling case: From 4 to 50K users
Utopia Kindgoms scaling case: From 4 to 50K usersJaime Buelta
 
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web TestingBDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web TestingJohn Ferguson Smart Limited
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)shubhamvcs
 
Intro to HTML5 Web Storage
Intro to HTML5 Web StorageIntro to HTML5 Web Storage
Intro to HTML5 Web Storagedylanks
 
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code Example
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code ExampleMaven + Jsf + Richfaces + Jxl + Jdbc - Complete Code Example
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code ExampleNikhil Bhalwankar
 
09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WPNguyen Tuan
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Rabble .
 
Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database JonesJohn David Duncan
 

Tendances (19)

JQuery New Evolution
JQuery New EvolutionJQuery New Evolution
JQuery New Evolution
 
PHP with MYSQL
PHP with MYSQLPHP with MYSQL
PHP with MYSQL
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no android
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
ZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODMZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODM
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the Trenches
 
Symfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMSymfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODM
 
Doctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperDoctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document Mapper
 
Selenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkSelenium Webdriver with data driven framework
Selenium Webdriver with data driven framework
 
Utopia Kindgoms scaling case: From 4 to 50K users
Utopia Kindgoms scaling case: From 4 to 50K usersUtopia Kindgoms scaling case: From 4 to 50K users
Utopia Kindgoms scaling case: From 4 to 50K users
 
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web TestingBDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)
 
Intro to HTML5 Web Storage
Intro to HTML5 Web StorageIntro to HTML5 Web Storage
Intro to HTML5 Web Storage
 
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code Example
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code ExampleMaven + Jsf + Richfaces + Jxl + Jdbc - Complete Code Example
Maven + Jsf + Richfaces + Jxl + Jdbc - Complete Code Example
 
09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP
 
Bonjour, iCloud
Bonjour, iCloudBonjour, iCloud
Bonjour, iCloud
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007
 
Single Sign-On with Waffle
Single Sign-On with WaffleSingle Sign-On with Waffle
Single Sign-On with Waffle
 
Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database Jones
 

En vedette

Worse is better, for better or for worse - Kevlin Henney
Worse is better, for better or for worse - Kevlin HenneyWorse is better, for better or for worse - Kevlin Henney
Worse is better, for better or for worse - Kevlin HenneyJAX London
 
introduction to logistic
introduction to logisticintroduction to logistic
introduction to logisticRitesh Jain
 
Gardner's 9 Tasks adapted for Christian Leadership
Gardner's 9 Tasks adapted for Christian LeadershipGardner's 9 Tasks adapted for Christian Leadership
Gardner's 9 Tasks adapted for Christian Leadershipmgjohnson23
 
Supplier And Service Provider Governance
Supplier And Service Provider GovernanceSupplier And Service Provider Governance
Supplier And Service Provider GovernanceAlan McSweeney
 
Data Governance Best Practices
Data Governance Best PracticesData Governance Best Practices
Data Governance Best PracticesBoris Otto
 
The Responsive Organisation: A Framework for Changing How Your Organisation W...
The Responsive Organisation: A Framework for Changing How Your Organisation W...The Responsive Organisation: A Framework for Changing How Your Organisation W...
The Responsive Organisation: A Framework for Changing How Your Organisation W...responsiveorg
 
Business ethics and Corporate Governance
Business ethics and Corporate GovernanceBusiness ethics and Corporate Governance
Business ethics and Corporate Governancesaadiakh
 

En vedette (7)

Worse is better, for better or for worse - Kevlin Henney
Worse is better, for better or for worse - Kevlin HenneyWorse is better, for better or for worse - Kevlin Henney
Worse is better, for better or for worse - Kevlin Henney
 
introduction to logistic
introduction to logisticintroduction to logistic
introduction to logistic
 
Gardner's 9 Tasks adapted for Christian Leadership
Gardner's 9 Tasks adapted for Christian LeadershipGardner's 9 Tasks adapted for Christian Leadership
Gardner's 9 Tasks adapted for Christian Leadership
 
Supplier And Service Provider Governance
Supplier And Service Provider GovernanceSupplier And Service Provider Governance
Supplier And Service Provider Governance
 
Data Governance Best Practices
Data Governance Best PracticesData Governance Best Practices
Data Governance Best Practices
 
The Responsive Organisation: A Framework for Changing How Your Organisation W...
The Responsive Organisation: A Framework for Changing How Your Organisation W...The Responsive Organisation: A Framework for Changing How Your Organisation W...
The Responsive Organisation: A Framework for Changing How Your Organisation W...
 
Business ethics and Corporate Governance
Business ethics and Corporate GovernanceBusiness ethics and Corporate Governance
Business ethics and Corporate Governance
 

Similaire à Windows 8 JavaScript (Wonderland)

WebApps e Frameworks Javascript
WebApps e Frameworks JavascriptWebApps e Frameworks Javascript
WebApps e Frameworks Javascriptmeet2Brains
 
Local data storage for mobile apps
Local data storage for mobile appsLocal data storage for mobile apps
Local data storage for mobile appsIvano Malavolta
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Shakir Majeed Khan
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWAREFIWARE
 
A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETA Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETJames Johnson
 
Ajax tutorial
Ajax tutorialAjax tutorial
Ajax tutorialKat Roque
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of JavascriptTarek Yehia
 
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeSummit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeAngel Borroy López
 
Ajax for dummies, and not only.
Ajax for dummies, and not only.Ajax for dummies, and not only.
Ajax for dummies, and not only.Nerd Tzanetopoulos
 
J Query The Write Less Do More Javascript Library
J Query   The Write Less Do More Javascript LibraryJ Query   The Write Less Do More Javascript Library
J Query The Write Less Do More Javascript Libraryrsnarayanan
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WAREFermin Galan
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...SPTechCon
 
A to Z about JQuery - Become Newbie to Expert Java Developer
A to Z about JQuery - Become Newbie to Expert Java DeveloperA to Z about JQuery - Become Newbie to Expert Java Developer
A to Z about JQuery - Become Newbie to Expert Java DeveloperManoj Bhuva
 
jQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterprisejQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterpriseDave Artz
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
Designing REST API automation tests in Kotlin
Designing REST API automation tests in KotlinDesigning REST API automation tests in Kotlin
Designing REST API automation tests in KotlinDmitriy Sobko
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchMats Bryntse
 

Similaire à Windows 8 JavaScript (Wonderland) (20)

WebApps e Frameworks Javascript
WebApps e Frameworks JavascriptWebApps e Frameworks Javascript
WebApps e Frameworks Javascript
 
Local data storage for mobile apps
Local data storage for mobile appsLocal data storage for mobile apps
Local data storage for mobile apps
 
Real World MVC
Real World MVCReal World MVC
Real World MVC
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...
 
Local Storage
Local StorageLocal Storage
Local Storage
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
 
A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETA Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NET
 
Ajax tutorial
Ajax tutorialAjax tutorial
Ajax tutorial
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of Javascript
 
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeSummit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
 
Ajax for dummies, and not only.
Ajax for dummies, and not only.Ajax for dummies, and not only.
Ajax for dummies, and not only.
 
J Query The Write Less Do More Javascript Library
J Query   The Write Less Do More Javascript LibraryJ Query   The Write Less Do More Javascript Library
J Query The Write Less Do More Javascript Library
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WARE
 
WinRT Holy COw
WinRT Holy COwWinRT Holy COw
WinRT Holy COw
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
 
A to Z about JQuery - Become Newbie to Expert Java Developer
A to Z about JQuery - Become Newbie to Expert Java DeveloperA to Z about JQuery - Become Newbie to Expert Java Developer
A to Z about JQuery - Become Newbie to Expert Java Developer
 
jQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterprisejQuery in the [Aol.] Enterprise
jQuery in the [Aol.] Enterprise
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
Designing REST API automation tests in Kotlin
Designing REST API automation tests in KotlinDesigning REST API automation tests in Kotlin
Designing REST API automation tests in Kotlin
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
 

Plus de Christopher Bennage

Modern Cloud Fundamentals: Misconceptions and Industry Trends
Modern Cloud Fundamentals: Misconceptions and Industry TrendsModern Cloud Fundamentals: Misconceptions and Industry Trends
Modern Cloud Fundamentals: Misconceptions and Industry TrendsChristopher Bennage
 
Performance optimization and Cloud applications
Performance optimization and Cloud applicationsPerformance optimization and Cloud applications
Performance optimization and Cloud applicationsChristopher Bennage
 
Semantic Logging: Avoiding the Logging Chaos
Semantic Logging: Avoiding the Logging ChaosSemantic Logging: Avoiding the Logging Chaos
Semantic Logging: Avoiding the Logging ChaosChristopher Bennage
 
CQRS: high availability, scabaility, and maintainability
CQRS: high availability, scabaility, and maintainabilityCQRS: high availability, scabaility, and maintainability
CQRS: high availability, scabaility, and maintainabilityChristopher Bennage
 
Exploring CQRS and Event Sourcing
Exploring CQRS and Event SourcingExploring CQRS and Event Sourcing
Exploring CQRS and Event SourcingChristopher Bennage
 
Getting Started with Test-Drive Development
Getting Started with Test-Drive DevelopmentGetting Started with Test-Drive Development
Getting Started with Test-Drive DevelopmentChristopher Bennage
 

Plus de Christopher Bennage (9)

Modern Cloud Fundamentals: Misconceptions and Industry Trends
Modern Cloud Fundamentals: Misconceptions and Industry TrendsModern Cloud Fundamentals: Misconceptions and Industry Trends
Modern Cloud Fundamentals: Misconceptions and Industry Trends
 
Azure Reference Architectures
Azure Reference ArchitecturesAzure Reference Architectures
Azure Reference Architectures
 
Performance optimization and Cloud applications
Performance optimization and Cloud applicationsPerformance optimization and Cloud applications
Performance optimization and Cloud applications
 
Semantic Logging: Avoiding the Logging Chaos
Semantic Logging: Avoiding the Logging ChaosSemantic Logging: Avoiding the Logging Chaos
Semantic Logging: Avoiding the Logging Chaos
 
CQRS: high availability, scabaility, and maintainability
CQRS: high availability, scabaility, and maintainabilityCQRS: high availability, scabaility, and maintainability
CQRS: high availability, scabaility, and maintainability
 
Exploring CQRS and Event Sourcing
Exploring CQRS and Event SourcingExploring CQRS and Event Sourcing
Exploring CQRS and Event Sourcing
 
Source Control Concepts
Source Control ConceptsSource Control Concepts
Source Control Concepts
 
An Introduction to WPF
An Introduction to WPFAn Introduction to WPF
An Introduction to WPF
 
Getting Started with Test-Drive Development
Getting Started with Test-Drive DevelopmentGetting Started with Test-Drive Development
Getting Started with Test-Drive Development
 

Dernier

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Dernier (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Windows 8 JavaScript (Wonderland)

  • 1. HTML, CSS, JavaScript & Windows 8 christopher.bennage @microsoft.com patterns & practices symposium 2013
  • 4. dev.bennage.com bennage
  • 5. Welcome to WonderL and “Curiouser and curiouser!” Cried Alice (she was so much surprised, that for the moment she quite forgot how
  • 6. Living in a SandBox
  • 8. Navigating the Landscape  Windows Runtime  Windows Library for JavaScript  DOM  JavaScript  Visual Studio Templates
  • 9. Fascinating & Mesmerizing Bits Regarding JavaScript
  • 10.
  • 11. Responsivene Strange Things Affecting ss  JavaScript is Single Thread  Everything Blocks the UI  Even Unexpected Things
  • 12. function blocking() { var items = getBigArrayOfItems(); for(var i = items.length - 1; i >= 0; i--) { doExpensiveComputationOn(items[i]); } }
  • 13. function not_blocking() { var items = getBigArrayOfItems(); var i = items.length - 1; function processNext() { doExpensiveComputationOn(items[i]); i--; if(i >= 0) { setImmediate(processNext); } } processNext(); }
  • 14. A very useful thing is bind  Partial Application function add(x, y) { return x + y;  Returns a Function }  1st arg resolves to this var add7 = add.bind(null, 7); var sum =add7(3); // sum is 10
  • 15. function pretendToBeAsync(adder) { var sum = adder(); console.log(sum); } var someObject = { someNumber: 10, add: function() { return this.someNumber + 1; }, problem: function() { pretendToBeAsync(this.add); } }; someObject.problem();
  • 16. Did I miss jQuery?  document.querySelector()  WinJS.xhr()  WinJS.Utilities.addClass()
  • 17. Wat? This is JavaScript… Memory Leaks  apps are long running  higher chance of memory leaks  URL.createObjectURL(blob)
  • 18. Things to Know about the Windows Library for JavaScript
  • 19. Understand Promises  Objects represent a task  Composable  Cancellable
  • 20. Be sure to Cancel Async  Be aware of what’s happening  A common scenario is Navigating Away  Custom promises probably need to be cancelled too
  • 21. WinJS.UI.Pages.define("some/page", { ready: function(element, options) { this.promise = kickOffAsynProcess(); }, unload: function() { this.promise.cancel(); } });
  • 22. _createViewModels: function (files) { var count = files.length; var results = new Array(count); var index = count - 1; var proceed = true; function onCancellation() { proceed = false; } return new WinJS.Promise(function (complete, error) { function processNextFile() { var file = files[index]; results[index] = new Hilo.Picture(file); index--; if (index < 0) { complete(results); } else if (!proceed) { error("Cancel"); } else { setImmediate(processNextFile); } } processNextFile(); }, onCancellation);
  • 23. Understand the built-in Navigation  WinJS.Navigation  WinJS.UI.Pages  navigator.js
  • 24. Various & Sundry miscellania  use a single AppBar  built-in message queue  manually create two-way binding
  • 25. A few things about the Windows Runtime
  • 26. WinRT They are not JavaScript, those Objects Objects originating within WinRT are not mutable like plain ol’ JavaScript objects. WinJS.Binding.as()
  • 27. var fileQuery = Windows.Storage.KnownFolders.picturesLibrary.createFileQuery(); fileQuery.getFilesAsync(0, 2).then(function (results) { var storageFile = results[0]; var observable = WinJS.Binding.as(storageFile); // sad panda });
  • 28. Tips about the File System  some queries behave differently for different folders  Advanced Query Syntax  file properties queryOptions.applicationSearchFilter = "System.ItemDate:2013-01-01T00:00:00Z..2013-01- 01T00:00:00Z";
  • 29. Some of the Properties Available  System.AcquisitionID  System.FindData  System.IsRead  System.ApplicationName  System.FlagColor  System.IsSearchOnlyItem  System.Author  System.FlagColorText  System.IsSendToTarget  System.Capacity  System.FlagStatus  System.IsShared  System.Category  System.FlagStatusText  System.ItemAuthors  System.Comment  System.FreeSpace  System.ItemClassType  System.Company  System.FullText  System.ItemDate  System.ComputerName  System.Identity  System.ItemFolderNameDisplay  System.ContainedItems  System.Identity.Blob  System.ItemFolderPathDisplay  System.ContentStatus  System.Identity.DisplayName  System.ItemFolderPathDisplayNarrow  System.ContentType  System.Identity.IsMeIdentity  System.ItemName  System.Copyright  System.Identity.PrimaryEmailAddress  System.ItemNameDisplay  System.DateAccessed  System.Identity.ProviderID  System.ItemNamePrefix  System.DateAcquired  System.Identity.UniqueID  System.ItemParticipants  System.DateArchived  System.Identity.UserName  System.ItemPathDisplay  System.DateCompleted  System.IdentityProvider.Name  System.ItemPathDisplayNarrow  System.DateCreated  System.IdentityProvider.Picture  System.ItemType  System.DateImported  System.ImageParsingName  System.ItemTypeText  System.DateModified  System.Importance  System.ItemUrl  System.DueDate  System.ImportanceText  System.Keywords  System.EndDate  System.IsAttachment  System.Kind  System.FileAllocationSize  System.IsDefaultNonOwnerSaveLocation  System.KindText  System.FileAttributes  System.IsDefaultSaveLocation  System.Language  System.FileCount  System.IsDeleted  System.LayoutPattern.ContentViewModeForBrowse  System.FileDescription  System.IsEncrypted  System.LayoutPattern.ContentViewModeForSearch  System.FileExtension  System.IsFlagged  System.MileageInformation  System.FileFRN  System.IsFlaggedComplete  System.MIMEType  System.FileName  System.IsIncomplete  System.Null  System.FileOwner  System.IsLocationSupported  System.OfflineAvailability  System.FileVersion  System.IsPinnedToNameSpaceTree  System.OfflineStatus
  • 30. An application’s Structure  standard, historical  modules (AMD)  something new & magical
  • 31.
  • 32. Sundry Means of Accomplishing Unit Tests  how to structure  frameworks  functional style makes it easier  chutzpah.codeplex.com  visionmedia.github.com/mocha
  • 33. The End • hilojs.codeplex.com • github.com/NobleJS/WinningJS

Notes de l'éditeur

  1. Just like Alice’s adventure, my adventure will feature many items of different size.Some topics will be small and some large. We ramble shall between seemingly disconnected episodes, yet in the end we will arrive at a happy place.Let me begin by assuming that you don’t know a lot about developing Windows Store Apps. Oh, BTW, that’s what they are called.
  2. Wonderland is a special place, and so are Windows Store Apps.WSAs cannot do everything that traditional desktop apps can do there. There is a limit to the API. These limits are there in order to provider a better experience.Example of a really good restaurant with a limited selection, as opposed to the mediocre one that tries to serve everything.More trust, less dangerConsistencyMy dad wondered if tablets were inherently “more safe” with respected to viruses. Sand boxed environments are.
  3. http://blogs.msdn.com/b/windowsappdev/archive/2012/04/10/managing-app-lifecycle-so-your-apps-feel-quot-always-alive-quot.aspx
  4. WinRT is common across platforms. It’s the core Windows API.WinJS is a library built in JavaScript. It provides some wrappers for WinRT, controls, html+js specific utilities, helpers for async in js.DOM or Document Object Model, is the same one (more or less) that you are familiar with in IE10. It’s a JS API that allows you to query and manipulate all of the elements that result from your markup + css. We can use newer APIs without fear of browser compatibility.JavaScript in Windows 8 is liberated since we’d don’t have to worry about browser compatibility. Newer language features can be used freely.There is functionality implemented in the VS templates that you can use if you like.Newer DOM/JS features:XHR2Web WorkersTyped ArraysWeb SocketsFileReaderPointer events (IE only currently)Blob URLsrequestAnimationFrameindexedDBcss grid layout
  5. There are wonders and dangers unique to JavaScript.What should we look for and what should we avoid?
  6. Books to consider:JavaScript: The Good Parts by Douglas CrockfordJavaScript Patterns by StoyanStephanovHigh Performance JavaScript by Nicholas C. Zakas
  7. This never yields . It is unrelenting!
  8. Read “High Performance JavaScript” by Nicholas C. ZakassetImmediate is currently an IE-only functionhttps://developer.mozilla.org/en-US/docs/DOM/window.setImmediateif (!window.setImmediate) {window.setImmediate = function(func, args){ return window.setTimeout(func, 0, args); };window.clearImmediate = window.clearTimeout;}
  9. Demonstrate from a Node consolehttp://msdn.microsoft.com/en-us/library/ff841995(v=VS.94).aspxhttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
  10. Personally, I mostly use jQuery for selecting elements, also some ajax requests.Given that, I didn’t really miss jQuery all that much. Of course, you can use jQuery.
  11. http://msdn.microsoft.com/en-us/library/ie/hh772302(v=vs.85).aspxhttps://developer.mozilla.org/en-US/docs/DOM/window.URL.createObjectURL
  12. http://msdn.microsoft.com/en-us/library/windows/apps/hh700330.aspxhttp://dev.bennage.com/blog/2012/08/21/winjs-unpacking-promises/Promises are important for when you are dealing withasync operations. They are aptly named.Cancellable, except when they are not.
  13. I found this to be a source of confusion, both for myself and other experienced devs.Out of the box, WinJS includes WinJS.Navigation.It providers “navigation” methods such as back, forward, and navigate.As well as “state” members such as history, canGoBack, canGoForward.It also includes WinJS.UI.Pages.It primarily provides a way to define page controls. A page control is an object implementing IPageControlMembers. The interface is mostly about defining steps in a lifecycle.The Pages object also provides a way to “render” a defined page by providing its id (uri) and a DOM element.navigator.js comes in new project templates (not all of them). It listens to the event emitted from Navigation, handles the DOM manipulation, and invokes the related Pages bits.
  14. http://code.msdn.microsoft.com/windowsapps/App-bar-sample-a57eeae9WinJS.Application.queueEvent({ type: &quot;custom-event-name&quot; });WinJS.Application.addEventListener(“custom-event-name&quot;, function(){ });For info about custom bindings, lookup binding initializers
  15. varboolean = storageFolder.areQueryOptionsSupported(queryOptions);new Date().toISOString();You can use AQS to query the file system. Great. So what is AQS?http://msdn.microsoft.com/en-us/library/windows/desktop/bb266512(v=vs.85).aspx
  16. The list of system properties (partially displayed above):http://msdn.microsoft.com/en-us/library/ff521735(v=vs.85).aspxTable of Properties, arranged into groups:http://msdn.microsoft.com/en-us/library/dd561977(v=vs.85).aspx
  17. standard/historical,what you get with file | new projectsimple &amp; straight forward, but takes some continued manual effortdirectly linked files are cached bytecodehttp://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh849088.aspxAMD – asynchronous module definitionusing requireJSsimilar to NodeJS or CommonJS modulesOther options for modularityrequires a bootstrapper (or compiler)This space is growing, changing, maturing.