SlideShare a Scribd company logo
1 of 78
Windows 8 Development
 PCs, Tablets & Mobile
      Hagit Badash
WINDOWS 8
Windows 8
New desktop design
Start screen
Touch, Keyword and mouse activation in different
 platforms
Roaming profiles
Windows 8 architecture
Windows 8 Desktop
Roaming profiles
• Local settings saving
   var localSettings =
       Windows.Storage.ApplicationData.Current.LocalSettings;
   localSettings.Values["currentPage"] = MyBook.CurrentPage;
• Roaming Settings Saving
   var roamingSettings =
       Windows.Storage.ApplicationData.Current.RoamingSettings;
   roamingSettings.Values["currentPage"] = MyBook.CurrentPage;
   – If there is no roaming profile, It will default to local storage
Architecture
WINRT
WinRT
• WinRT is the Object Oriented Programming
  replacement for Win32.
  – An unmanaged native layer and its API is object
    oriented that can be consumed both from native or
    managed languages
  – Written in C++ and designed from the beginning to
    be object oriented.
  – A COM-based API, relying on an enhanced COM
    that implements the IInspectable interface
Relation between .NET & WinRT
• .NET Client profile (C#,VB.NET applications)
  – Desktop Application development
• .NET Metro profile (Windows 8 application)
  – subset of types from the .NET Framework
• .NET has the ability to directly reference
  WinRT components as if they were .NET
  assemblies.
Advantages
• App Container and Application Permissions
• Overlapping Windows No Longer Exist
WinRT Projections
• New name for ‘Bindings”
• Projections are the process of exposing APIs to
  three environments:
  – Native
  – HTML/JavaScript
  – .NET
• Hide the use of Com
DEMO
C++11 WITH WINRT
ASYNC PROGRAMING
Asynchrony in a Nutshell
• Synchronous  Wait for result before returning
   – string DownloadString(...);


• Asynchronous  Return now, call back with result
   – void DownloadStringAsync(..., Action<string> callback);


• Asynchrony benefits
   – UI responsiveness: Frees UI thread for interaction
   – Server scalability: Thread can be reused for other requests
Asynchronous Methods
   Goal: Just like synchronous programming
   – You can have your cake and eat it too!


• Framework: Use Task<T> for all asynchrony
   – Add Task<T> support to existing .NET and Silverlight APIs
   – Easy for you to do the same


• Languages: Asynchronous Methods
   – “async” modifier marks method or lambda as asynchronous
   – “await” operator yields control until awaited task completes
Task<T>
• Represents “ongoing operation”
  – Could be async I/O, background worker, anything...
  – Single object for status, result and exceptions
• Composable callback model
  – var task2 = task1.ContinueWith(t => … t.Result …);
  – The “await” operator rewrites to continuations
• Combinators
  – WhenAll, WhenAny, Delay, etc.
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcesAsFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }




            
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }




            
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }




                        
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                            }




                        
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                           }




                        
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                           }




                       
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                           }




                                         
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                          }




                                         
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                         }




                                         
Asynchronous Control Flow
async void DoWorkAsync() {
    var t1 =
ProcessFeedAsync("www.acme.com/rss");
    var t2 =
ProcessFeedAsync("www.xyznews.com/rss");
                            async Task ProcessFeedAsync(string
    await Task.WhenAll(t1, t2);
    DisplayMessage("Done"); url) {
}                               var text = await
                            DownloadFeedAsync(url);
                                var doc =
                            ParseFeedIntoDoc(text);
                                await SaveDocAsync(doc);
                                ProcessLog.WriteEntry(url);
                         }




                                         
WINDOWS 8 APPLICATION
DEVELOPMENT
Windows 8 Application Requirements
Logo images: large & small
Splash screen
Privacy policy
State persistency
About
Test screens in 3 main resolutions
Help
Windows 8 Application Requirements
Navigation
Design screens in 3 states:
 landscape, portrait, 1/3, 2/3
Settings
Background tasks
Badge notification
Tiles animations
Windows 8 Application Requirements
Search contract
Push notification
Toast notification
App bar application part
App bar item specific part
Title bar
Pin items
Windows 8 Application Requirements
Extended splash screen
Share contract
Transitions between screens
Animations
DEMO
GRID APPLICATION
UPGRADING EXISTING .NET
APPLICATIONS
UI Changes
• New Features and capabilities should be
  considered as part of the design of the new
  application:
  – Touch first, less chrome, fast, fluid;
  – Live Tiles
  – Application bar
  – Charms
• New namespaces Windows.UI.Xaml vs
  System.Windows
I/O changes

• Asynchronous only using async – await
  keywords
• Functions name changed:
  – System.IO.Stream.BeginRead to
    System.IO.Stream.ReadAsync
Storage Changes?
  • Instead of using the System.IO.IsolatedStorage
    class, use the types in the Windows.Storage
Replace                       With
System.IO.IsolatedStorage.    Windows.Storage.
IsolatedStorageFile           ApplicationData.Current.LocalFolder
System.IO.IsolatedStorage.    Windows.Storage.
IsolatedStorageSettings       ApplicationData.Current.LocalSettings
Threading Changes
Replace                                   With
System.Threading.Thread.MemoryBarrier     Interlocked.MemoryBarrier method in the
method                                    System.Threading namespace
System.Threading.Thread.ManagedThread Environment.CurrentManagedThreadId
Id property                           property in the System namespace
System.Threading.Thread.CurrentCulture    CultureInfo.CurrentCulture property in
property                                  the System.Globalization namespace
System.Threading.Thread.CurrentUICultur   CultureInfo.CurrentUICulture property in
e property                                the System.Globalization namespace
                                          Windows.System.Threading.ThreadPoolTi
System.Threading.Timer class
                                          mer class
                                          Windows.System.Threading.ThreadPool
System.Threading.ThreadPool class
                                          class
Reflection changes
• Most members from the System.Type class
  have been moved to the
  System.Reflection.TypeInfo class.
• Retrieve the TypeInfo object by calling the
  System.Reflection.
   IntrospectionExtensions.GetTypeInfo(System.Type)
Extension methods - converting types
• System.IO.WindowsRuntimeStreamExtensions
  – Converting between managed streams and streams in the
    Windows Runtime.
• System.IO.WindowsRuntimeStorageExtensions
  – Opening Windows Runtime files and folders as managed
    streams.
• System.Runtime.InteropServices.WindowsRuntime.
  WindowsRuntimeBufferExtensions
  – Converting to and from IBuffer.
WINDOWS PHONE 8
ADDITIONAL FEATURES
Features
• Files and Storage
  – Several ways to access the same file
     • Isolated Storage as WP7.1
     • Storage APIs using URI: ms-appdata:///local/myfile.txt
     • Storage APIs
  – Compatibility
     • WP8 Storage is subset of WinRT
     • Not Supporting: Roaming and Temporary data, Local
       and Roaming Settings
Features (Cont.)
• Reserved Folders
  – Shared/Media – album display while playing audio
  – Shared/ShellContent – background images for tiles
  – Shared/Transfers – used by Background File
    Transfer service
Features (Cont.)
• Background Agents
  – Renew often
  – Do not implement critical tasks
  – For more reliable tasks use push notifications
• Tiles and Lock Screen Notifications
• Push Notifications
Features (Cont.)
• Resources
  – Contacts and Calendars in Windows Phone
  – Launchers and Choosers
  – Alarms and reminders
  – The Windows Phone camera
  – The Windows Phone sensors
  – Video content
Features (Cont.)
• App to App communication
  – Auto-launching with File and Protocol associations
  – File associations
  – Protocol associations
• Network Communication
• Proximity Sensors and Bluetooth
Features (Cont.)
•   Speech Input
•   Maps and Location
•   Wallet Support
•   In-App Purchasing
Resources
• Application must inform the user and request
  access to resources
Contacts and Calendar
• Providers
  – Window Live
  – Exchange
  – Facebook
  – Aggregated accounts (Twitter, LinkedIn etc.)
Contacts and Calendar (Sample)
Contacts and Calendar (Sample)
Contacts and Calendar (Sample)
Launchers and Choosers
• Launcher
  – API that launches one of the built-in applications,
    such as the Contacts application
  – When the new application appears, the user can
    choose to complete or cancel the task.
  – When the user closes the new application, the
    calling application is usually reactivated.
Launchers and Choosers
• Chooser
  – API that launches one of the built-in applications,
    such as the Contacts application or the camera,
    through which the user completes a task.
  – When the new application appears, the user can
    choose to complete or cancel the task.
  – When the user closes the new application, the
    calling application is usually reactivated and
    supplied with data and status.
Launchers
•   BingMapsDirectionsTask   •   MarketplaceReviewTask
•   BingMapsTask             •   MarketplaceSearchTask
•   ConnectionSettingsTask   •   MediaPlayerLauncher
•   EmailComposeTask         •   PhoneCallTask
•   MapDownloaderTask        •   SaveAppointmentTask
•   MapsDirectionsTask       •   SearchTask
•   MapsTask                 •   ShareLinkTask
•   MapUpdaterTask           •   ShareMediaTask
•   MarketplaceDetailTask    •   ShareStatusTask
•   MarketplaceHubTask       •   SmsComposeTask
                             •   WebBrowserTask
Choosers
•   AddressChooserTask      • SaveEmailAddressTask
•   AddWalletItemTask       • SavePhoneNumberTask
•   CameraCaptureTask       • SaveRingtoneTask
•   EmailAddressChooserTask
•   GameInviteTask
•   PhoneNumberChooserTask
•   PhotoChooserTask
Camera
• Ways to use Camera
  – CameraCaptureTask chooser
     • Photograph a picture
  – PhotoCamera class
     • Capture photos & video streams
  – PhotoCaptureDevice or AudioVideoCaptureDevice
     • Advance capturing
• Real time video processing app can be
  registered as “Lens”
Sensors Library - WinRT
• Windows.Devices.Sensors – compatible with
  WinRT
  – Accelerometer
  – Inclinometer
  – Gyrometer
  – Compass
  – OrientationSensor
Determine Sensor Availability
Start/Stop Sensor
Summary
TARGETING TO WINDOWS 8
WINDOWS PHONE 8
Differences
• Screen Size
• Controls
• Application Life Cycle
Sharing Strategy
• Separate UI Logic from application logic
  – Use MVVM
• Portable Class Library – for shared code
Sharing Strategy
Windows 8                     Windows
   App                       Phone 8 App
  Views                         Views



            Portable Class
               Library
                 VM
                Model
Conditional Block
• Enable/Disable lines of code based on
  compilation platform
• Constants
  – NETFX_CORE – Windows 8
  – WINDOWS_PHONE – Windows Phone 8
• Use when there are small differences
• Otherwise difficult to maintain the code
Conditional Block sample
Inheritance
• Shared functionality in base class
• Platform specific code in derived class
• Great for separating features
Inheritance sample
Partial Classes & Methods
•   Shared functionality on one code file
•   Platform specific in additional code file
•   Classes are marked as partial
•   Link to shared functionality file in both
    projects
DEMO
CROSS PLATFORM
Contact Information
     Hagit Badash
     hagb@e4d.co.il

More Related Content

What's hot

Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.Mike Brevoort
 
Managing Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchManaging Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchVic Hargrave
 
Logstash: Get to know your logs
Logstash: Get to know your logsLogstash: Get to know your logs
Logstash: Get to know your logsSmartLogic
 
Logstash-Elasticsearch-Kibana
Logstash-Elasticsearch-KibanaLogstash-Elasticsearch-Kibana
Logstash-Elasticsearch-Kibanadknx01
 
Introduction to Node js for beginners + game project
Introduction to Node js for beginners + game projectIntroduction to Node js for beginners + game project
Introduction to Node js for beginners + game projectLaurence Svekis ✔
 
Containers: What are they, Really?
Containers: What are they, Really?Containers: What are they, Really?
Containers: What are they, Really?Sneha Inguva
 
Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd eventKiyoto Tamura
 
Time tested php with libtimemachine
Time tested php with libtimemachineTime tested php with libtimemachine
Time tested php with libtimemachineNick Galbreath
 
ELK stack at weibo.com
ELK stack at weibo.comELK stack at weibo.com
ELK stack at weibo.com琛琳 饶
 
Large Scale Log collection using LogStash & mongoDB
Large Scale Log collection using LogStash & mongoDB Large Scale Log collection using LogStash & mongoDB
Large Scale Log collection using LogStash & mongoDB Gaurav Bhardwaj
 
Rsyslog log normalization
Rsyslog log normalizationRsyslog log normalization
Rsyslog log normalizationRainer Gerhards
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchRafał Kuć
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2Dvir Volk
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimizationxiaojueqq12345
 
Programming language for the cloud infrastructure
Programming language for the cloud infrastructureProgramming language for the cloud infrastructure
Programming language for the cloud infrastructureYaroslav Muravskyi
 
Writing External Rsyslog Plugins
Writing External Rsyslog PluginsWriting External Rsyslog Plugins
Writing External Rsyslog PluginsRainer Gerhards
 
Centralized + Unified Logging
Centralized + Unified LoggingCentralized + Unified Logging
Centralized + Unified LoggingGabor Kozma
 

What's hot (20)

Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Managing Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchManaging Your Security Logs with Elasticsearch
Managing Your Security Logs with Elasticsearch
 
Logstash: Get to know your logs
Logstash: Get to know your logsLogstash: Get to know your logs
Logstash: Get to know your logs
 
Logstash-Elasticsearch-Kibana
Logstash-Elasticsearch-KibanaLogstash-Elasticsearch-Kibana
Logstash-Elasticsearch-Kibana
 
Introduction to Node js for beginners + game project
Introduction to Node js for beginners + game projectIntroduction to Node js for beginners + game project
Introduction to Node js for beginners + game project
 
Containers: What are they, Really?
Containers: What are they, Really?Containers: What are they, Really?
Containers: What are they, Really?
 
Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd event
 
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibanaUsing Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
 
Time tested php with libtimemachine
Time tested php with libtimemachineTime tested php with libtimemachine
Time tested php with libtimemachine
 
ELK stack at weibo.com
ELK stack at weibo.comELK stack at weibo.com
ELK stack at weibo.com
 
Logstash
LogstashLogstash
Logstash
 
Large Scale Log collection using LogStash & mongoDB
Large Scale Log collection using LogStash & mongoDB Large Scale Log collection using LogStash & mongoDB
Large Scale Log collection using LogStash & mongoDB
 
Rsyslog log normalization
Rsyslog log normalizationRsyslog log normalization
Rsyslog log normalization
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
 
Fluentd meetup #2
Fluentd meetup #2Fluentd meetup #2
Fluentd meetup #2
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimization
 
Programming language for the cloud infrastructure
Programming language for the cloud infrastructureProgramming language for the cloud infrastructure
Programming language for the cloud infrastructure
 
Writing External Rsyslog Plugins
Writing External Rsyslog PluginsWriting External Rsyslog Plugins
Writing External Rsyslog Plugins
 
Centralized + Unified Logging
Centralized + Unified LoggingCentralized + Unified Logging
Centralized + Unified Logging
 

Similar to Windows 8 Development

Asynchronous Programming in ASP.NET
Asynchronous Programming in ASP.NETAsynchronous Programming in ASP.NET
Asynchronous Programming in ASP.NETChris Dufour
 
동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍명신 김
 
Asynchronní programování
Asynchronní programováníAsynchronní programování
Asynchronní programováníPeckaDesign.cz
 
Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Rainer Stropek
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio
 
The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)jeffz
 
CTU June 2011 - C# 5.0 - ASYNC & Await
CTU June 2011 - C# 5.0 - ASYNC & AwaitCTU June 2011 - C# 5.0 - ASYNC & Await
CTU June 2011 - C# 5.0 - ASYNC & AwaitSpiffy
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Baruch Sadogursky
 
Windows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async ProgrammingWindows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async ProgrammingOliver Scheer
 
Introduction to Ajax programming
Introduction to Ajax programmingIntroduction to Ajax programming
Introduction to Ajax programmingFulvio Corno
 
Airflow tutorials hands_on
Airflow tutorials hands_onAirflow tutorials hands_on
Airflow tutorials hands_onpko89403
 
Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Raffaele Fanizzi
 
Concurrency - responsiveness in .NET
Concurrency - responsiveness in .NETConcurrency - responsiveness in .NET
Concurrency - responsiveness in .NETMårten Rånge
 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonGeert Van Pamel
 
Introduction to the New Asynchronous API in the .NET Driver
Introduction to the New Asynchronous API in the .NET DriverIntroduction to the New Asynchronous API in the .NET Driver
Introduction to the New Asynchronous API in the .NET DriverMongoDB
 
Getting Started with Real-Time Analytics
Getting Started with Real-Time AnalyticsGetting Started with Real-Time Analytics
Getting Started with Real-Time AnalyticsAmazon Web Services
 

Similar to Windows 8 Development (20)

Asynchronous Programming in ASP.NET
Asynchronous Programming in ASP.NETAsynchronous Programming in ASP.NET
Asynchronous Programming in ASP.NET
 
동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍
 
Asynchronní programování
Asynchronní programováníAsynchronní programování
Asynchronní programování
 
Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0
 
The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)
 
CTU June 2011 - C# 5.0 - ASYNC & Await
CTU June 2011 - C# 5.0 - ASYNC & AwaitCTU June 2011 - C# 5.0 - ASYNC & Await
CTU June 2011 - C# 5.0 - ASYNC & Await
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
 
Windows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async ProgrammingWindows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 3.5 Async Programming
 
Introduction to Ajax programming
Introduction to Ajax programmingIntroduction to Ajax programming
Introduction to Ajax programming
 
Ondemand scaling-aws
Ondemand scaling-awsOndemand scaling-aws
Ondemand scaling-aws
 
Airflow tutorials hands_on
Airflow tutorials hands_onAirflow tutorials hands_on
Airflow tutorials hands_on
 
Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Async Development con Visual Studio 2012
Async Development con Visual Studio 2012
 
Concurrency - responsiveness in .NET
Concurrency - responsiveness in .NETConcurrency - responsiveness in .NET
Concurrency - responsiveness in .NET
 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemon
 
Xml & Java
Xml & JavaXml & Java
Xml & Java
 
Introduction to the New Asynchronous API in the .NET Driver
Introduction to the New Asynchronous API in the .NET DriverIntroduction to the New Asynchronous API in the .NET Driver
Introduction to the New Asynchronous API in the .NET Driver
 
Getting Started with Real-Time Analytics
Getting Started with Real-Time AnalyticsGetting Started with Real-Time Analytics
Getting Started with Real-Time Analytics
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
Async Programming in C# 5
Async Programming in C# 5Async Programming in C# 5
Async Programming in C# 5
 

More from Eyal Vardi

Smart Contract
Smart ContractSmart Contract
Smart ContractEyal Vardi
 
Rachel's grandmother's recipes
Rachel's grandmother's recipesRachel's grandmother's recipes
Rachel's grandmother's recipesEyal Vardi
 
Performance Optimization In Angular 2
Performance Optimization In Angular 2Performance Optimization In Angular 2
Performance Optimization In Angular 2Eyal Vardi
 
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Eyal Vardi
 
Angular 2 NgModule
Angular 2 NgModuleAngular 2 NgModule
Angular 2 NgModuleEyal Vardi
 
Upgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xUpgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xEyal Vardi
 
Angular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationAngular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationEyal Vardi
 
Routing And Navigation
Routing And NavigationRouting And Navigation
Routing And NavigationEyal Vardi
 
Angular 2 Architecture
Angular 2 ArchitectureAngular 2 Architecture
Angular 2 ArchitectureEyal Vardi
 
Angular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xAngular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xEyal Vardi
 
Angular 2.0 Views
Angular 2.0 ViewsAngular 2.0 Views
Angular 2.0 ViewsEyal Vardi
 
Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Eyal Vardi
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0Eyal Vardi
 
Http Communication in Angular 2.0
Http Communication in Angular 2.0Http Communication in Angular 2.0
Http Communication in Angular 2.0Eyal Vardi
 
Angular 2.0 Dependency injection
Angular 2.0 Dependency injectionAngular 2.0 Dependency injection
Angular 2.0 Dependency injectionEyal Vardi
 
Angular 2.0 Routing and Navigation
Angular 2.0 Routing and NavigationAngular 2.0 Routing and Navigation
Angular 2.0 Routing and NavigationEyal Vardi
 
Async & Parallel in JavaScript
Async & Parallel in JavaScriptAsync & Parallel in JavaScript
Async & Parallel in JavaScriptEyal Vardi
 
Angular 2.0 Pipes
Angular 2.0 PipesAngular 2.0 Pipes
Angular 2.0 PipesEyal Vardi
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 formsEyal Vardi
 

More from Eyal Vardi (20)

Why magic
Why magicWhy magic
Why magic
 
Smart Contract
Smart ContractSmart Contract
Smart Contract
 
Rachel's grandmother's recipes
Rachel's grandmother's recipesRachel's grandmother's recipes
Rachel's grandmother's recipes
 
Performance Optimization In Angular 2
Performance Optimization In Angular 2Performance Optimization In Angular 2
Performance Optimization In Angular 2
 
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)
 
Angular 2 NgModule
Angular 2 NgModuleAngular 2 NgModule
Angular 2 NgModule
 
Upgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xUpgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.x
 
Angular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationAngular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time Compilation
 
Routing And Navigation
Routing And NavigationRouting And Navigation
Routing And Navigation
 
Angular 2 Architecture
Angular 2 ArchitectureAngular 2 Architecture
Angular 2 Architecture
 
Angular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xAngular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.x
 
Angular 2.0 Views
Angular 2.0 ViewsAngular 2.0 Views
Angular 2.0 Views
 
Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0
 
Http Communication in Angular 2.0
Http Communication in Angular 2.0Http Communication in Angular 2.0
Http Communication in Angular 2.0
 
Angular 2.0 Dependency injection
Angular 2.0 Dependency injectionAngular 2.0 Dependency injection
Angular 2.0 Dependency injection
 
Angular 2.0 Routing and Navigation
Angular 2.0 Routing and NavigationAngular 2.0 Routing and Navigation
Angular 2.0 Routing and Navigation
 
Async & Parallel in JavaScript
Async & Parallel in JavaScriptAsync & Parallel in JavaScript
Async & Parallel in JavaScript
 
Angular 2.0 Pipes
Angular 2.0 PipesAngular 2.0 Pipes
Angular 2.0 Pipes
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 

Recently uploaded

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"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
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 

Recently uploaded (20)

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
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
 
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.
 
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!
 
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
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
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
 
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
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"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
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 

Windows 8 Development

  • 1. Windows 8 Development PCs, Tablets & Mobile Hagit Badash
  • 3. Windows 8 New desktop design Start screen Touch, Keyword and mouse activation in different platforms Roaming profiles Windows 8 architecture
  • 5. Roaming profiles • Local settings saving var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; localSettings.Values["currentPage"] = MyBook.CurrentPage; • Roaming Settings Saving var roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings; roamingSettings.Values["currentPage"] = MyBook.CurrentPage; – If there is no roaming profile, It will default to local storage
  • 8. WinRT • WinRT is the Object Oriented Programming replacement for Win32. – An unmanaged native layer and its API is object oriented that can be consumed both from native or managed languages – Written in C++ and designed from the beginning to be object oriented. – A COM-based API, relying on an enhanced COM that implements the IInspectable interface
  • 9. Relation between .NET & WinRT • .NET Client profile (C#,VB.NET applications) – Desktop Application development • .NET Metro profile (Windows 8 application) – subset of types from the .NET Framework • .NET has the ability to directly reference WinRT components as if they were .NET assemblies.
  • 10. Advantages • App Container and Application Permissions • Overlapping Windows No Longer Exist
  • 11. WinRT Projections • New name for ‘Bindings” • Projections are the process of exposing APIs to three environments: – Native – HTML/JavaScript – .NET • Hide the use of Com
  • 14. Asynchrony in a Nutshell • Synchronous  Wait for result before returning – string DownloadString(...); • Asynchronous  Return now, call back with result – void DownloadStringAsync(..., Action<string> callback); • Asynchrony benefits – UI responsiveness: Frees UI thread for interaction – Server scalability: Thread can be reused for other requests
  • 15. Asynchronous Methods Goal: Just like synchronous programming – You can have your cake and eat it too! • Framework: Use Task<T> for all asynchrony – Add Task<T> support to existing .NET and Silverlight APIs – Easy for you to do the same • Languages: Asynchronous Methods – “async” modifier marks method or lambda as asynchronous – “await” operator yields control until awaited task completes
  • 16. Task<T> • Represents “ongoing operation” – Could be async I/O, background worker, anything... – Single object for status, result and exceptions • Composable callback model – var task2 = task1.ContinueWith(t => … t.Result …); – The “await” operator rewrites to continuations • Combinators – WhenAll, WhenAny, Delay, etc.
  • 17. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcesAsFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 18. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 19. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 20. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 21. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 22. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 23. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }
  • 24. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); } 
  • 25. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); } 
  • 26. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }  
  • 27. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url); }  
  • 28. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);  }  
  • 29. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);  }   
  • 30. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);  }    
  • 31. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);   }    
  • 32. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);    }    
  • 33. Asynchronous Control Flow async void DoWorkAsync() { var t1 = ProcessFeedAsync("www.acme.com/rss"); var t2 = ProcessFeedAsync("www.xyznews.com/rss"); async Task ProcessFeedAsync(string await Task.WhenAll(t1, t2); DisplayMessage("Done"); url) { } var text = await DownloadFeedAsync(url); var doc = ParseFeedIntoDoc(text); await SaveDocAsync(doc); ProcessLog.WriteEntry(url);    }    
  • 35. Windows 8 Application Requirements Logo images: large & small Splash screen Privacy policy State persistency About Test screens in 3 main resolutions Help
  • 36. Windows 8 Application Requirements Navigation Design screens in 3 states: landscape, portrait, 1/3, 2/3 Settings Background tasks Badge notification Tiles animations
  • 37. Windows 8 Application Requirements Search contract Push notification Toast notification App bar application part App bar item specific part Title bar Pin items
  • 38. Windows 8 Application Requirements Extended splash screen Share contract Transitions between screens Animations
  • 41. UI Changes • New Features and capabilities should be considered as part of the design of the new application: – Touch first, less chrome, fast, fluid; – Live Tiles – Application bar – Charms • New namespaces Windows.UI.Xaml vs System.Windows
  • 42. I/O changes • Asynchronous only using async – await keywords • Functions name changed: – System.IO.Stream.BeginRead to System.IO.Stream.ReadAsync
  • 43. Storage Changes? • Instead of using the System.IO.IsolatedStorage class, use the types in the Windows.Storage Replace With System.IO.IsolatedStorage. Windows.Storage. IsolatedStorageFile ApplicationData.Current.LocalFolder System.IO.IsolatedStorage. Windows.Storage. IsolatedStorageSettings ApplicationData.Current.LocalSettings
  • 44. Threading Changes Replace With System.Threading.Thread.MemoryBarrier Interlocked.MemoryBarrier method in the method System.Threading namespace System.Threading.Thread.ManagedThread Environment.CurrentManagedThreadId Id property property in the System namespace System.Threading.Thread.CurrentCulture CultureInfo.CurrentCulture property in property the System.Globalization namespace System.Threading.Thread.CurrentUICultur CultureInfo.CurrentUICulture property in e property the System.Globalization namespace Windows.System.Threading.ThreadPoolTi System.Threading.Timer class mer class Windows.System.Threading.ThreadPool System.Threading.ThreadPool class class
  • 45. Reflection changes • Most members from the System.Type class have been moved to the System.Reflection.TypeInfo class. • Retrieve the TypeInfo object by calling the System.Reflection. IntrospectionExtensions.GetTypeInfo(System.Type)
  • 46. Extension methods - converting types • System.IO.WindowsRuntimeStreamExtensions – Converting between managed streams and streams in the Windows Runtime. • System.IO.WindowsRuntimeStorageExtensions – Opening Windows Runtime files and folders as managed streams. • System.Runtime.InteropServices.WindowsRuntime. WindowsRuntimeBufferExtensions – Converting to and from IBuffer.
  • 48. Features • Files and Storage – Several ways to access the same file • Isolated Storage as WP7.1 • Storage APIs using URI: ms-appdata:///local/myfile.txt • Storage APIs – Compatibility • WP8 Storage is subset of WinRT • Not Supporting: Roaming and Temporary data, Local and Roaming Settings
  • 49. Features (Cont.) • Reserved Folders – Shared/Media – album display while playing audio – Shared/ShellContent – background images for tiles – Shared/Transfers – used by Background File Transfer service
  • 50. Features (Cont.) • Background Agents – Renew often – Do not implement critical tasks – For more reliable tasks use push notifications • Tiles and Lock Screen Notifications • Push Notifications
  • 51. Features (Cont.) • Resources – Contacts and Calendars in Windows Phone – Launchers and Choosers – Alarms and reminders – The Windows Phone camera – The Windows Phone sensors – Video content
  • 52. Features (Cont.) • App to App communication – Auto-launching with File and Protocol associations – File associations – Protocol associations • Network Communication • Proximity Sensors and Bluetooth
  • 53. Features (Cont.) • Speech Input • Maps and Location • Wallet Support • In-App Purchasing
  • 54. Resources • Application must inform the user and request access to resources
  • 55. Contacts and Calendar • Providers – Window Live – Exchange – Facebook – Aggregated accounts (Twitter, LinkedIn etc.)
  • 59. Launchers and Choosers • Launcher – API that launches one of the built-in applications, such as the Contacts application – When the new application appears, the user can choose to complete or cancel the task. – When the user closes the new application, the calling application is usually reactivated.
  • 60. Launchers and Choosers • Chooser – API that launches one of the built-in applications, such as the Contacts application or the camera, through which the user completes a task. – When the new application appears, the user can choose to complete or cancel the task. – When the user closes the new application, the calling application is usually reactivated and supplied with data and status.
  • 61. Launchers • BingMapsDirectionsTask • MarketplaceReviewTask • BingMapsTask • MarketplaceSearchTask • ConnectionSettingsTask • MediaPlayerLauncher • EmailComposeTask • PhoneCallTask • MapDownloaderTask • SaveAppointmentTask • MapsDirectionsTask • SearchTask • MapsTask • ShareLinkTask • MapUpdaterTask • ShareMediaTask • MarketplaceDetailTask • ShareStatusTask • MarketplaceHubTask • SmsComposeTask • WebBrowserTask
  • 62. Choosers • AddressChooserTask • SaveEmailAddressTask • AddWalletItemTask • SavePhoneNumberTask • CameraCaptureTask • SaveRingtoneTask • EmailAddressChooserTask • GameInviteTask • PhoneNumberChooserTask • PhotoChooserTask
  • 63. Camera • Ways to use Camera – CameraCaptureTask chooser • Photograph a picture – PhotoCamera class • Capture photos & video streams – PhotoCaptureDevice or AudioVideoCaptureDevice • Advance capturing • Real time video processing app can be registered as “Lens”
  • 64. Sensors Library - WinRT • Windows.Devices.Sensors – compatible with WinRT – Accelerometer – Inclinometer – Gyrometer – Compass – OrientationSensor
  • 68. TARGETING TO WINDOWS 8 WINDOWS PHONE 8
  • 69. Differences • Screen Size • Controls • Application Life Cycle
  • 70. Sharing Strategy • Separate UI Logic from application logic – Use MVVM • Portable Class Library – for shared code
  • 71. Sharing Strategy Windows 8 Windows App Phone 8 App Views Views Portable Class Library VM Model
  • 72. Conditional Block • Enable/Disable lines of code based on compilation platform • Constants – NETFX_CORE – Windows 8 – WINDOWS_PHONE – Windows Phone 8 • Use when there are small differences • Otherwise difficult to maintain the code
  • 74. Inheritance • Shared functionality in base class • Platform specific code in derived class • Great for separating features
  • 76. Partial Classes & Methods • Shared functionality on one code file • Platform specific in additional code file • Classes are marked as partial • Link to shared functionality file in both projects
  • 78. Contact Information Hagit Badash hagb@e4d.co.il

Editor's Notes

  1. Windows 8 Development for PCs, Tablets &amp; Mobile Course Description:Learn all about the new app model (Metro style apps) that allows you to create powerful new apps. All while retaining the ability to use your existing apps. Web-connected and web-powered apps built using C# and XAML have access to the power of the PC. This course walks you through creating a complete Metro style app using C# with XAML. Metro style apps are focused, fluid, and elegant. From the new Start screen to new UI layout and controls, the presentation of your app is about showing off what it&apos;s great at. Windows 8 IntroductionWindows is the next version of Microsoft Windows, a series of operating systems produced by Microsoft for use on personal computers, including home and business desktops, laptops, netbooks, tablet PCs, and media center PCs. Windows 8 unified the UX for all the above devices. In this Module you will learn the Windows 8 UX principles and architecture. New desktop design Start screen Touch, Keyword and mouse activation in different platforms Roaming profiles Windows 8 architecture History VaultMetro Style Apps DevelopmentMetro style apps are full screen apps tailored to your users&apos; needs, tailored to the device they run on, tailored for touch interaction, and tailored to the Windows user interface. Windows helps you interact with your users, and your users interact with your app. Controllers Overview Metro Infrastructure Metro style apps built-in controls Visual Studio 2011 and Bled 5 for developed Metro style Apps Developing basic Metro style apps using C# and XAML Metro style apps with OData and WCF RIA Services Debugging Metro style apps Metro Apps Packaging and DeploymentWindows Runtime (WinRT)Windows 8 features many improvements in security and privacy. In this module you will learn how to take advantages of those features and how to write more secure applications. Metro style apps secure environment principles SmartScreen filter Windows Defender Secured boot AppLockerBitLockerUpgrading your existing .NET Framework applicationsWhen converting existing .NET Framework code, you should be aware of the following changes you may need to make in your Metro style app: UI changes I/O changes Storage changes Threading changes Reflection changes Changes in general .NET Framework typesResilient File System (ReFS)ReFS is the next generation file system being introduced in Windows 8 replacing NTFS. In this module you will get an introduction of this new file system. Key goals Key design attributes and features Code reuse and compatibility On-disk structures
  2. Here should be a live demo of Windows 8 operating system
  3. Windows Runtime, or shortly WinRT, is Microsoft’s new programming model that makes the backbone of the new Metro-style apps (also known as Immersive) in the new Windows 8 operating system. WinRT solves many of the problems of Win32, from an apps perspective. Apps created for WinRT are safe, secure, and sandboxed, can’t wreck other apps and all install in just 2-3 seconds. They feature isolated storage, single folder installs (as per the Mac), and require user consent to access the general file system. This is part of it, a modern, truly different app platform that is far more different, and far more capable, than many people understand right now.
  4. The WinRT type system relies strongly on WinRT components, which are COM objects implementing a specific set of interfaces and adhering to a certain ABI (Application Binary Interface). WinRT is essentially a COM-based API, relying on an enhanced COM that implements the IInspectable interface. The IInspectable interface enables projecting Win32 and COM features into JavaScript and other languages, such as C# and Visual Basic. *Implement the IInspectable interface when you want your class to be available in other programming environments. *The IInspectable interface is the base interface for all Windows Runtime classes. All Windows Runtime classes must implement the IInspectable interface. The IInspectable interface inherits from the IUnknown interface. so every WinRT object implements IUnknown and does refcounting (WinRT objects are reference counted like COM for memory management, with weak references to avoid circularity), and builds from there. It does add quite a lot of new concepts in comparison to COM of old, most of which come directly from .NET – for example, WinRT object model has delegates, and events are done .NET-style (with delegates and add/remove subscriber methods, one per event) rather than the old COM model of event sources and sinks. Of other notable things, WinRT also has parameterized (“generic”) interfaces.
  5. WinRT collection interfaces such as IIterable and IVector become IEnumerable and IList; and so on. This goes both ways – if you have a .NET object that implements IEnumerable, and pass it back to WinRT, it’ll see it as IIterable.
  6. What we call &quot;bindings&quot; Microsoft now calls &quot;projections&quot;. Projections are the process of exposing APIs to three environments: Native (C and C++), HTML/JavaScript and .NET. If you author a component in C++ or a .NET language, its API will be stored in a WinMD file and you will be able to consume it from all three environments (Native, JavaScript and .NET). Even in C++ you are not exposed to COM. The use of COM is hidden behind the C++ projection tools. You use what looks and feels like a C++ object oriented API. To support the various constructs of WinRT, the underlying platform defines a basic set of types and their mappings to various environment. In particular, collection objects in WinRT are mapped to constructs that are native to each environment.
  7. C++11 with WinRT: C++ Development A good news for C++ developers is that User interfaces in C++ will be written primarily in XAML for immersive applications. However, this is not available for classical, Win32 applications. This libraries for working with XAML have all been ported to C++ and are compiled to native x86. Metro applications written with XAML and C++ do not run on top of .NET, they get compiled directly to x86 just like any other Visual C++ application. Calling methods on UI controls is just like calling methods on any other object in C++.
  8. Push notification – comes from serverToast notification – displayed on screen
  9. Start grid application from template and explain structure
  10. Add comparison tableShow demo
  11. http://msdn.microsoft.com/en-us/library/windows/apps/br230302.aspx
  12. WP8 course part 19
  13. Examples of Chooser tasks include selecting a contact’s email address, selecting a photo from the phone, and saving a new ringtone.
  14. WP8 course part 19Portable libraryMvvmShare files between projects in order to use partial classNavigation is different need common service
  15. http://blogs.msdn.com/b/b8/archive/2012/01/16/building-the-next-generation-file-system-for-windows-refs.aspxData can get corrupted due to a number of reasons and therefore must be verified and, when possible, corrected automatically. Metadata must not be written in place to avoid the possibility of “torn writes,” which we will talk about in more detail below.Use scalable structures for everything. Don’t assume that disk-checking algorithms, in particular, can scale to the size of the entire file system.Assume that in the event of corruptions, it is advantageous to isolate the fault while allowing access to the rest of the volume. This is done while salvaging the maximum amount of data possible, all done live.