codefest 2012. Сошников Д. — Разработка мобильных приложений...
DESCRIPTION
TRANSCRIPT
Программирование на платформе Майкрософт v.2012Дмитрий СошниковКоординатор академических программ, евангелистMicrosoft РоссияTwitter: @shwars, [email protected]
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, ФОКУС-ГРУППЫ, КРУГЛЫЕ СТОЛЫ, ВЕЧЕРНЯЯ ПРОГРАММА, СПОРТИВНЫЕ МЕРОПРИЯТИЯ