SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

JQuery New Evolution
JQuery New EvolutionJQuery New Evolution
JQuery New Evolution
Allan Huang
 
ZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODMZendCon2010 Doctrine MongoDB ODM
ZendCon2010 Doctrine MongoDB ODM
Jonathan Wage
 
Symfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMSymfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODM
Jonathan Wage
 
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 Storage
dylanks
 

Was ist angesagt? (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
 

Andere mochten auch

Business ethics and Corporate Governance
Business ethics and Corporate GovernanceBusiness ethics and Corporate Governance
Business ethics and Corporate Governance
saadiakh
 

Andere mochten auch (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
 

Ähnlich wie Windows 8 JavaScript (Wonderland)

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 FIWARE
FIWARE
 
Ajax tutorial
Ajax tutorialAjax tutorial
Ajax tutorial
Kat Roque
 
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
rsnarayanan
 
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
Fermin 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
 

Ähnlich wie 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
 

Mehr von Christopher Bennage

Getting Started with Test-Drive Development
Getting Started with Test-Drive DevelopmentGetting Started with Test-Drive Development
Getting Started with Test-Drive Development
Christopher Bennage
 

Mehr von 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
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

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

Hinweis der Redaktion

  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.