SlideShare una empresa de Scribd logo
1 de 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

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Destacado

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
 

Destacado (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
 

Similar a 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
 

Similar a 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
 

Más 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
 

Más 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
 

Último

Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTopCSSGallery
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform EngineeringMarcus Vechiato
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewDianaGray10
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptxFIDO Alliance
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsLeah Henrickson
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxFIDO Alliance
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon
 
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?Paolo Missier
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandIES VE
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightSafe Software
 
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfFrisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfAnubhavMangla3
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Skynet Technologies
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPTiSEO AI
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024Stephen Perrenod
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingScyllaDB
 
Generative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfGenerative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfalexjohnson7307
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityVictorSzoltysek
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxFIDO Alliance
 

Último (20)

Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development Companies
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfFrisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
Generative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfGenerative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdf
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 

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

Notas del editor

  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.