CodeFest 2012. Сошников Д. — Разработка мобильных приложений...

Post on 29-Nov-2014

813 views 2 download

description

 

Transcript of CodeFest 2012. Сошников Д. — Разработка мобильных приложений...

Программирование на платформе Майкрософт v.2012Дмитрий СошниковКоординатор академических программ, евангелистMicrosoft РоссияTwitter: @shwars, dmitryso@microsoft.com

3

Connecting People

4

По настоящему Connecting People

Soft

ware

+

Serv

ices

.NET

Silverlight

Browser Application Phone App Game

XNA

C# / VB.NET F#

HTML5

I II

I II

• Windows Phone 7• Windows 8• Kinect & NUI

• ASP.NET• ASP.NET MVC• Windows Azure

• C#, F#• HTML5/JavaScript• XAML• DirectX / XNA

Windows Phone 7

Windows Phone 7

Особенности Windows Phone 7

12

ДИЗАЙН: ОРИЕНТИРОВАН НАКОНЕЧНОГО ПОЛЬЗОВАТЕЛЯ

ПЛАТФОРМА: НАСЫЩЕННЫЕ ИПРОСТЫЕПРИЛОЖЕНИЯ

ОБОРУДОВАНИЕ:ЕДИНЫЕ СТАНДАРТЫ

Для пользователя:• Революция в

дизайне• Приложения• Единые стандарты

оборудования~10000 р.

Для программиста:• Marketplace• Низкий порог

вхождения• Здесь и сейчас

Windows Phone – это круто!

Прогноз долей рынка в 2014 году

Операционная система IDC Gartner

Android 45% 49%

Symbian 0% 0%

Windows Phone 21% 20%

iOS 15% 17%

BlackBerry OS 14% 11%

Other (Linux, webOS, Maemo/MeeGo) 5% 3%

Grand Total 100% 100%

Как разрабатывать

Игры

и приложения

Приложения

и игры

Silverlight = XAML + C#/VB

Шаг 1. Прототипируем дизайн

<Grid x:Name="LayoutRoot" Background="Transparent"> <StackPanel x:Name="TitlePanel" Grid.Row="0"> <TextBlock x:Name="ApplicationTitle" Text="MY APP"/> <TextBlock x:Name="PageTitle" Text="Предсказатель"/> </StackPanel> <Grid x:Name="ContentPanel" Grid.Row="1"> <TextBlock Name="textBlock1" Text="Нажмите кнопку"/> <Button Content="Предсказать" Name="button1" Click="button1_Click" /> </Grid> </Grid>

Шаг 2. Программируем

private void button1_Click(object sender, RoutedEventArgs e)

{ Random R = new Random(); textBlock1.Text = "Моя оценка будет: "+ R.Next(2,5).ToString(); }

Шаг 3. Привлекаем дизайнера

XNA = умный программист

Шаг 1. Делаем контент

Шаг 2. Загружаем контент в памятьprotected override void LoadContent()

{ ship = Content.Load<Texture2D>("Ship"); rocket = Content.Load<Texture2D>("Rocket"); explosion = Content.Load<Texture2D>("Explode");

font = Content.Load<SpriteFont>("GameFont");

music = Content.Load<Song>("Music"); laser = Content.Load<SoundEffect>("Laser");}

Шаг 3. Программируем игровой циклprotected override void

Draw(GameTime gameTime){ GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(ship, ship_pos, Color.White); spriteBatch.End(); base.Draw(gameTime);}

protected override void Update(GameTime

gameTime){

ship_pos += ship_speed;

var tc = TouchPanel.GetState();

base.Update(gameTime);}

Windows Phone 7 @ MSDN

http://msdn.com/windowsphone

Delight

Utility

Functionality

Отличные приложенияСделано в стиле самого Windows Phone 7

Полезные – ожидаемые функции, визуально красивые, часто используется

Работает как ожидалось, включая качесттво контента и легкость использования

Отличные приложения начинаются с нужной функциональностью, продолжается использованием устройств и заканчивается привлекательным пользовательским интерфейсом

Идеальное приложение

Windows 8 

Платформа Windows 8

Metro style Apps

HTMLJavaScri

pt

CC++

C#VB

Desktop Apps

Win32

.NET / SL

Internet Explore

r

Communication

& Data

Application Model

Devices & Printing

WinRT APIsGraphics &

Media

Syst

em

Serv

ices

JavaScript(Chakra)

CC++

C#VB

XAML HTML / CSSVie

wM

od

el

Contr

olle

r

Windows Core OS ServicesCore

Windows всегда предоставляла разработчикам богатые возможности для создания приложений

Эти возможности Windows не всегда было просто использовать в C# или VB

[DllImport("avicap32.dll", EntryPoint="capCreateCaptureWindow")]static extern int capCreateCaptureWindow( string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);

[DllImport("avicap32.dll")] static extern bool capGetDriverDescription( int wDriverIndex, [MarshalAs(UnmanagedType.LPTStr)] ref string lpszName, int cbName, [MarshalAs(UnmanagedType.LPTStr)] ref string lpszVer, int cbVer);

// и ещё много такого же кода

C# код, который пишут сейчас…

Управляемый код

Обычный Windows API

Вручную написанные обёртки

C# код для Windows 8

using Windows.Media.Capture;

var ui = new CameraCaptureUI();ui.PhotoSettings.CroppedAspectRatio = new Size(4, 3);

var file = await ui.CaptureFileAsync(CameraCaptureUIMode.Photo);

if (file != null) { var bitmap = new BitmapImage() ; bitmap.SetSource(await file.OpenAsync(FileAccessMode.Read)); Photo.Source = bitmap;}

Управляемый код

Windows 8 API

Windows Runtime

Metro-приложенияСпроектированы в стиле Metro

Быстрые и подвижныеПрекрасны при «парковке» и масштабированииИспользуют правильные контракты

Реализуют интерактивные плитки

Живые, всегда на связи

Хранят данные в облаке

Реализуют принципы Metro

Что интересного? WinRT API — native

XAML может использоваться из C++

Портируемый C++ код

WinRT API — асинхронные

WinRT API обеспечивают доступ к устройствам, операционной системе и сервисам

WinRT API — native для C#, JavaScript и C++

Асинхронное программирование

Асинхронное программирование становится нормой в современных взаимосвязанных (connected) приложениях

Синхронно vs. асинхронноvar data = DownloadData(...);ProcessData(data);

var future = DownloadDataAsync(...); future.ContinueWith(data => ProcessData(data));

DownloadDataAsync ProcessData

STOP

ProcessDataDownloadData

Модели асинхронной разработкиWindows Runtime: IAsyncOperation<T>

.NET Framework: Task<T>

Javascript: Promises

Все объекты представляют “текущие действия”

Все используют обратные вызовы для сообщения о завершении действийПроблема: Обратные вызовы «выворачивают код наизнанку»Решение: Возможна автоматическая трансформация в обратные вызовы

Асинхронные методы автоматически трансформируют обычный код в конечный автомат для обратных вызовов

Асинхронные методыpublic async Task<XElement> GetXmlAsync(string url) { var client = new HttpClient(); var response = await client.GetAsync(url); var text = response.Content.ReadAsString(); return XElement.Parse(text);}

public Task<XElement> GetXmlAsync(string url) { var tcs = new TaskCompletionSource<XElement>(); var client = new HttpClient(); client.GetAsync(url).ContinueWith(task => { var response = task.Result; var text = response.Content.ReadAsString(); tcs.SetResult(XElement.Parse(text)); }); return tcs.Task;}

API Metro-приложений

FundamentalsApplication

Services Threading/Timers Memory Management Authentication Cryptography Globalization

Devices

Geolocation Portable Sensors NFC

User Interface

SVG Tiles Input Accessibility Printing

HTML5/CSS XAML DirectX Controls Data Binding

Communications & Data

Memory Management XML Networking SMS

Notifications Streams

Contracts Local & Cloud Storage Web

Media

Playback Capture PlayTo Visual Effects

Переходы между состояниями процесса

RunningApp

suspending

resuming

Suspended

AppLow Resources

Terminated

App

Изоляция процессов

OS

User data Devices Communications Handlers Tiles Cryptography … …

Брокеры

Process1Local context

Web contextAppData

Local Temp Roaming

Контракты

Process2Local context

Web contextAppData

Local Temp Roaming

Dire

ct A

PIs

Данные приложений и пользователей

User data

Documents Photos Music Videos

App data

Settings FilesSession State

Local Cache

Роуминг

Приложение использует данные в нормальном режиме

Данные синхронизируются с Microsoft account

Локальное

хранилище

Исполнение приложений

Данные

Прозрачный доступХранение в облаке

Мощность

Произво-дительностьNative-доступ

Надежность

Декларация возможностейВысокая изоляция

Почему надо что-то делать сейчас

Для получения $10 миллионов прибылиЦена: $4.99

~2,500,000 продаж0.5% пользователей Windows

Итоги Windows 8 изобретена заново для пользователей Удобство использования Производительность Уверенность

Windows 8 изобретена заново для разработчиков Выбор языка программирования Инструменты Монетизация

Visual Studio 11 Beta и.NET Framework 4.5 Beta Доступны для загрузкис 29 февраля 2012

vs2010.ru

Подмосковье

DevCon•12developers developers developers

23-24 маяЗАГОРОДНЫЙ ФОРМАТ

23–24 мая

С++

http://msdevcon.ru #msdevcon

Ежегодная конференция по разработкеи тестированию программного обеспечения

Йонас Перссонглавный операционный директор департамента стратегических технологий на международном уровне

Скотт Хансельманглавный архитектор по проектам с сообществами в команде, создающей веб-технологии

50 СЕССИЙ, BOOT CAMPS, МАСТЕР-КЛАССЫ, NIGHT OF CODING, ФОКУС-ГРУППЫ, КРУГЛЫЕ СТОЛЫ, ВЕЧЕРНЯЯ ПРОГРАММА, СПОРТИВНЫЕ МЕРОПРИЯТИЯ