Дни разработчика 2013
Feb 25, 2016
Дни разработчика 2013
Программа конференции• 09:30 – 09:35 Открытие конференции. Анонс программы• 09:35 – 09:45 Программа BizSpark для разработчиков• 09:45 – 10:00 Анонс курсов и конкурсов для разработчиков• 10:00 – 11:00 Новые возможности при разработке Windows 8.1 приложений• 11:00 – 12:00 Управление процессом разработки программного обеспечения с
помощью Team Foundation Server 2013• 12:00 – 12:30 Кофе• 12:30 – 13:30 Разработка игр для Windows 8• 13:30 – 14:30 Активируй возможности Windows Azure• 14:30 – 15:30 Обед• 15:30 – 16:30 Новые возможности С++
Наша команда
Виктор Цикунов, DPE Lead
Татьяна Зубец, AMM
Евгений Вакульчик, Win8&WP Top Apps
Сергей Байдачный, Win8&WP Total Apps и многое другое …
Сергей Поплавский,Главный по Azure
Елена Харченко,Помощник DPE Lead
Андрей Шоханов, IT Pro
BizSpark
BizSpark• Программа, ориентированная на стартапы:• Все программное обеспечение Microsoft, бесплатно, на три года• Специализированные события• Покрытие команды до 10 человек• Windows Azure• Дополнительное visability
BizSpark• Требования и условия:• Компания или индивидуальный разработчик должны разрабатывать
собственный продукт• Иметь оборот менее 1 миллиона в год• Компания не должна быть старше 3 лет• Нет необходимости выпускать продукт • Плата не взымается
Анонсы событий и конкурсов
http://www.microsoft.ua/nebotan
http://www.microsoftvirtualacademy.com• Язык программирования C#• Разработка Windows 8 приложений• Разработка Windows Phone приложений• Windows Azure
Курсы для участников BizSpark• Разработка приложений с использованием Windows Azure
Windows 8 APIsUser interface
Fundamentals
Devices Graphics and media Communications and data Services
Geo-location
Proximity
Direct3D Direct2D Direct Write
PlayTo
Contracts
Bing
Azure Mobile
HTML5/CSS XAMLInput Controls
Authentication
Portable
Sensors Playback Capture
Printing
SVGCanvas
Local storage SMS
Streams Background transfer
Syndication Networking
XML and JSON
Skydrive
Live tiles and toastAccessibility Data binding
Application services Threading/timers Memory
management Globalization Cryptography
Xbox Live
Windows 8.1 APIsUser interface
Fundamentals
Devices Graphics and media Communications and data Services
Geo-location
Proximity
Direct3D Direct2D Direct Write
PlayTo
Contracts
Bing
Azure Mobile
HTML5/CSS XAMLInput Controls
Authentication
Portable
Sensors Playback Capture
Printing
SVGCanvas
Local storage SMS
Streams Background transfer
Syndication Networking
XML and JSON
Skydrive
Live tiles and toastAccessibility Data binding
Application services Threading/timers Memory
management Globalization Cryptography
Xbox Live
Windows 8.1 APIsUser interface
Fundamentals
Devices Graphics and media Communications and data Services
Geo-location
Proximity
Direct3D Direct2D Direct Write
PlayTo
Contracts
Bing
Azure Mobile
HTML5/CSS XAMLInput Controls
Authentication
Bluetooth
USB
HID WiFi direct
Point of service
3Dprinting Scanning
WebGL
HTTP
Contacts
Appoint-ments
Speech synthesis
Diagnostics
Portable
Sensors Playback Capture
Printing
SVGCanvas
Local storage SMS
Streams Background transfer
Syndication Networking
XML and JSON
Skydrive
Live tiles and toastAccessibility Data binding
Application services Threading/timers Memory
management Globalization Cryptography
Xbox Live
WebView• Корректная работа с XAML UI• Поддержка Opacity и RenderTransform• Поддержка механизмов навигации (Back, Forward,…)• NavigateToLocalStreamUri• Поддержка загрузки контента из локальной директории• Поддержка внешнего resolver
• И многое другое
ДемонстрацияWebView
DatePicker и TimePicker• Рассуждения об индусах• Немного о контролах:• Поддерживаются два разных элемента управления DatePicker и
TimePicker • Различные форматы• Поддерживается объект типа Calendar• Форматирование осуществляется с помощью DateTimeFormatter
ДемонстрацияDatePicker и TimePicker
RichTextBlock<RichTextBlock Width="200" Style="{StaticResource BasicRichTextStyle}"> <Paragraph>Hyperlinks let you give readers a visual hint that certain text links to other content. <Hyperlink NavigateUri="http://dev.windows.com">Read more on the Windows Dev Center</Hyperlink> ... Text in a Hyperlink element is treated like the rest of the text and participates in line breaking. </Paragraph></RichTextBlock>
ДемонстрацияRichTextBlock
Дерево в XAML в изображениеvar renderTargetBitmap = new RenderTargetBitmap();await renderTargetBitmap.Render(myElementTree);var pixels = await renderTargetBitmap.GetPixelsAsync();
var picker = new FileSavePicker();// Picker setupvar file = await picker.PickSaveFileAsync();// File validation
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite){ var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream); encoder.SetPixelData(BitmapPixelFormat.Rgba8, 100, 0, 96, 96, await renderTargetBitmap.GetPixelsAsync()); await encoder.FlushAsync();}
Flyout• SettingsFlyout – элемент для ленивых• Flyout• Всплывающее окошко, которое связано с
одним из элементов интерфейса
• MenuFlyout• Обычный пункт• Сепаратор• Переключатель
• Зачем оно нужно?
ДемонстрацияSetting Flyout
Hub• Создание главного хаба приложения в соответствии с дизайном• Поддержка семантического зума• Последовательное размещение элементов с помощью HubSection
ДемонстрацияHub
AppBar• Поддержка свойств Label и Icon• Иконки могут быть одного из типов: Font, Bitmap, Path, Symbol
• Поддержка компактного размера• AppBarButton можно использовать вне AppBar• Поддержка кнопок, переключателей и разделителей• Интеграция с элементом управления CommandBar
Другие изменения в элементах управления• Заголовки для ComboBox, TextBox, PasswordBox и др.• PlaceholderText для текстовых элементов управления• Поддержка RequestTheme на уровне элемента• Событие на вставку текста из буфера• И многое другое
Новые режимы отображения• 500 пикселей – новая минимальная ширина приложения• 320 пикселей – старая ширина, но может поддерживаться• Может быть несколько окон, открытых из одного приложения• Более чем два приложения на экране• Работает ли оно?
Поддержка устройств• HID• PoS• Bluetooth• USB• 3D Printers
Новые типы тайлов• 70 на 70• 310 на 310
Синтез голоса// The media object for controlling and playing audio.MediaElement mediaElement = this.media;
// The object for controlling the speech-synthesis engine (voice).var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Generate the audio stream from plain text.SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Hello World");
// Send the stream to the media object.mediaElement.SetSource(stream, stream.ContentType);mediaElement.Play();
DirectX• Динамические шейдера:• Unity• Marmalade• Ogre• И др.
Windows Game Developer Features• Windows 8• Direct3D 11.1• XAudio2• PointerPoint• MouseLook• XInput• C++
• Windows 8.1• Direct3D11.2• Tiled Resources• Scalers & Overlays• HLSL Shader linker• 8-25GB packages• Multi-mon• Wi-Fi Direct
И многое другое• Поддержка PDF• Wi-Fi Direct• Smart Card security• …
Вопросы?
Разработка игр для Windows 8
Сергей Байдачный[email protected]
Communication and data
Devices and printing
WinRT APIsDirectX
graphics and media
Desktop apps
CC++
Win32
C#VB
.NET Silverlight
HTMLJavaScript
Internet Explorer
Windows Store apps
Application model
JavaScriptCC++
Windows kernel services
Syst
em se
rvic
esVi
ewM
odel
co
ntro
ller
Kern
elXAML
C#VB
HTML/CSS
Где тут
DirectX?
2D graphics 3D graphics
Segoe UIFonts, text analysis, layout Image & video decoding
HTML5, CSS3 & Direct2D Direct3D
Segoe UIHTML5, CSS3 & DirectWrite HTML5, Direct2D effects,
WIC & Media Foundation
DirectCompute & C++AMP
Архитектура графической подсистемы в Windows 8
DXGI
VideoDirect3DDirectCompute
Direct2DC++ AMP Media Foundation
HTML, CSS, and XAML graphics
Graphics Processing Unit (GPU)
Немного о DirectX
Версии DirectX• Windows XP DirectX 9 hardware DirectX 9 API• Windows Vista DirectX 10 hardware DirectX 10 API• Windows 7 DirectX 11 hardware DirectX 11 API
Feature levels• DirectX11 API предлагает унифицированный механизм разработки
приложений• Feature levels по отношению к оборудованию
• Feature level 9 DirectX 9 hardware (ARM/power efficient machines)• Feature level 10 DirectX 10 hardware (many laptops)• Feature level 11 DirectX 11 hardware (high end gaming machines)
DirectX 11.1• DirectX11.1 это DirectX 11 для Windows 8• Интеграция в стек технологий платформы
C++
C++ Component Extensions (C++/CX)Key Bindings Feature Summary
1. Data Types ref class Reference type
value class Value type
interface class Interface
property Property with get/set
event “Delegate property” with add/remove/raise
delegate Type-safe function pointer
generic Type-safe generics
2. Allocation gcnew Garbage-collected allocation
ref new Reference-counted allocation
3. Pointer & Reference
^ Strong pointer (“hat” or “handle”)
% Strong reference
Поговорим о фреймворках
• Physics of objects in a 2-D plane• Ballistics, collisions, rotation, friction, joints,
constraints, motors, ray-queries, etc. of• Circles, rects, polygons, chains, ropes, etc.
•Used in:• Angry Birds, Tiny Wings, Cut The Rope, Crayon Physics
Deluxe, Limbo, Rolando, Fantastic Contraption, Incredibots, Transformice, Happy Wheels, Cocos2D, etc.
Box2D
• Physics of 3D objects• Ballistics, collisions, rotation, friction, joints,
constraints, motors, ray-queries, etc.
•Used in: Hydro Thunder: Hurricane, Trials HD
•Has had GPU-accelerated fabric simulation using DirectCompute for years
Bullet Physics
•Open source OpenGL ES2 API wrapper• Enables easy transition from iOS or Android•Used by many popular products•Originally built on Direct3D9, •Now updated to Direct3D11 for Windows Store•Runtime shader compiles work in Windows 8.1• http://code.google.com/p/angleproject
ANGLE – Almost Native GL Engine
• Popular engine for sprite games on phones• 1000s of games already shipped
•Runs on Windows 8 phone, Windows RT, Windows 8, etc.
• http://www.cocos2d-x.org
Cocos2D-x
• Full 3D rendering engine•Rich shader capabilities for photorealism• Includes native Direct3D module since starting
•Used in: Ankh by Deck13, and Torchlight by Runic, etc.
•Runs on Windows Phone and Windows 8
OGRE - OO Graphics Rendering Engine
• SharpDX• Efficient C# bindings to DirectX APIs• Low-level Direct3D access for best C# performance• Includes basic input, audio, file loading, etc.
Using C#?
•MonoGame• OSS implementation of the full XNA 4.0 API spec• which Microsoft contributed to the community• Used in Armed, Skulls of the Shogun, Galactic Reign
• http://channel9.msdn.com/posts/From-XNA-game-to-Windows-8
Using C#?
Коммерческие решения
Commercial Middleware
• http://channel9.msdn.com/Events/Windows-Camp/Building-Windows-Games-with-Unity
Unity 3D
•Authentication & Identity• Friends List• Player Stats, Leaderboards, Achievements•Matchmaking -Real-time and Asynchronous• Synchronous (real-time) Multiplayer• Supports Windows Phone too• http://hydra.agoragames.com/windows
Agora Hydra
• Popular physics library•Now includes Vision 3D rendering engine,
destruction, AI, and cloth modules
• Supports the whole Microsoft ecosystem
•Havok for Windows 8 and Windows Phone 8
Havok
• Commercial implementation of OpenGL ES on Direct3D
• Includes a full native C++ game API set
•Runs on Windows Phone too
• https://www.madewithmarmalade.com/windows8
Marmalade
• Full IDE for game creation•Asset marketplace
• http://gamesalad.com/creator/windows-8
Game Salad
Вопросы?
Новые возможности С++
Сергей Байдачный[email protected]
С++ настолько сложный для изучения, что мы расширили его
дополнительными командами
You arehere
http://isocpp.org
98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
C++98(major)
Library TR1 (aka TS) Performance TR
C++03(TC, bug fixes only)
C++11(major)
C++17(major)
C++14(minor)
FileSysTSNetTS1Concepts
TS
14
C++ и Visual Studio 2013• Некоторые возможности С++ 11 (C++0x) уже были в Visual Studio
2010• Многие возможности С++ 11 были реализованы в Visual Studio
2012• В Visual Studio 2013 продолжена работа над реализацией С++ 11 и
некоторых возможностей С++ 14• С++ 14 дополняет и завершает С++ 11
Перейдем к возможностям C++
Инициализация: раньше• Инициализация массива возможна с помощью {}• Но инициализация других типов отличается между собой• int i=0;• int k(2);• Person p;• Person p();• Person p(“Sergey”, “Baydachnyy”);
Инициализация: сейчас• int i{2};• Person p{};• Person p{“Sergiy”,”Baydachnyy”};• std::vector<int> v{1,2,3,4};
ДемонстрацияИнициализация
Конструкторы• Компилятор способен генерировать конструкторы «по
умолчанию»• Default, Copy, Move• Как только Вы пишите хотя бы один конструктор, то теряете все «по
умолчанию»
• Невозможность вызова одного конструктора из другого приводит к дублированию кода• С++ 11 позволяет вызывать один конструктор из другого
=default• Возвращает авто сгенерированный конструктор по умолчаниюclass Person
{
public:
Person()=default;
Person(char* firstname, char* lastname);
~Person();
};
=delete• Применимо к методам и конструкторам• Позволяет запретить перегрузку метода
class type {public: type( const type& ) = delete; type& operator=( const type& ) = delete; type() = default; // restore suppressed default constructor};void bar( long long ); // accept long long…void bar( long ) = delete; // … but nothing elseclass custom_regex_iterator {// stores a pointer to its regexpublic: // … custom_regex_iterator( const regex& ); // lvalues only please custom_regex_iterator( const regex&& ) = delete; // no rvalues need apply};
ДемонстрацияКонструкторы
usingC++98 кодtemplate<class T> struct Vec { typedef vector<T, MyAlloc<T>> type; };Vec<int>::type v; // sample usagetemplate<class T> void f( typename Vec<T>::type& ); // non-deduciblef<int>( v );
C++11 codetemplate<class T> using Vec = vector<T, MyAlloc<T>>;Vec<int> v; // sample usagetemplate<class T> void f( Vec<T>& ); // deduciblef( v );
Draft C++14 Алиасы для стандартных типов• remove_reference_t<T> vs. typename remove_reference<T>::type• make_unsigned_t<T> vs. typename make_unsigned<T>::type
Демонстрацияusing
Умные указатели• Что такое delete?• std::shared_ptr• std::unique_ptr• Использовать заголовочный файл memory
• C++ 11 представляет make_shared• C++ 14 представляет make_unique• Ключевое слово auto еще больше упрощает процесс создания
умных указателей• Помним о nullptr
ДемонстрацияУмные указатели
Строковые литералы• В С++ два вида строк: std::string, char *• Любые спецсимволы нужно задавать с помощью обратной косой
черты (\”, \\, \n, \r,…)• С++ 11 позволяет упростить запись строковых литералов• R”(все, что \Вы “ хотите )”• Сохраняются все разделители в строке (включая переход на другую
строку)• В случае, если строка содержит круглые скобки, то можно использовать
свой разделитель• Имеет смысл только для )”• R”MyS(…………….)MyS”
ДемонстрацияСтроковые литералы
Изменения в шаблонных функциях• Параметры по умолчанию могли присутствовать в шаблонных
классах• В шаблонных функциях параметров по умолчанию не было• С++ 11 позволяет писать что-то подобное• template <typename T, int n=1> T& increment (T& val)
ДемонстрацияПараметры шаблонных функций
Явное приведение типов• Ключевое слово explicit доступно:• При создании конструкторов• При создании функций приведения типов
• Явное приведение типов можно выполнить с помощью static_cast<>
ДемонстрацияЯвное преобразование
Variadic templates• Рассмотрим make_shared• auto p = make_shared<Person>(“Sergiy”,”Baydachnyy”);
• Количество параметров не определено заранее• Типы могут быть совершенно разные• Примером может служит std::tuple
Variadic template• Создание классаtemplate <class… Ts> class MyClass{ //class declaration};
• Создание функцииtemplate <class… Ts> void f(Ts… vals){//method definition }
Вопросы?