Дни разработчика 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.1 приложений Сергей Байдачный Sergiy.Baydachnyy@Microsoft.com Windows 8 APIs Accessibility Data binding Live tiles and toast Input Controls HTML5/CSS XAML Portable Geo-location Direct3D Direct2D Direct Write Local storage SMS Skydrive Sensors Proximity Playback Capture PlayTo Streams Background transfer Bing Canvas SVG Syndication Networking Azure Mobile XML and JSON Contracts Xbox Live Printing Application services Threading/timers Memory management Globalization Cryptography Authentication Windows 8.1 APIs Accessibility Data binding Live tiles and toast Input Controls HTML5/CSS XAML Portable Geo-location Direct3D Direct2D Direct Write Local storage SMS Skydrive Sensors Proximity Playback Capture PlayTo Streams Background transfer Bing Canvas SVG Syndication Networking Azure Mobile XML and JSON Contracts Xbox Live Printing Application services Threading/timers Memory management Globalization Cryptography Authentication Windows 8.1 APIs Accessibility Data binding Live tiles and toast Input Controls HTML5/CSS XAML Speech synthesis Portable Geo-location Point of service Direct3D Direct2D Direct Write Local storage SMS HTTP Skydrive Sensors Proximity USB Playback Capture PlayTo Streams Background transfer Contacts Bing HID WiFi direct Bluetooth Canvas SVG WebGL Syndication Networking Appointments Azure Mobile Printing 3D printing Scanning XML and JSON Contracts PDF Xbox Live Application services Threading/timers Memory management Globalization Cryptography Authentication Diagnostics 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 setup var 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 Сергей Байдачный Sergiy.Baydachnyy@Microsoft.com Segoe UI Fonts, text analysis, layout 2D graphics Image & video decoding 3D graphics Segoe UI HTML5, CSS3 & DirectWrite HTML5, Direct2D effects, WIC & Media Foundation HTML5, CSS3 & Direct2D Direct3D DirectCompute & C++AMP Архитектура графической подсистемы в Windows 8 Немного о 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 • Feature level 10 • Feature level 11 DirectX 9 hardware (ARM/power efficient machines) DirectX 10 hardware (many laptops) DirectX 11 hardware (high end gaming machines) DirectX 11.1 • DirectX11.1 это DirectX 11 для Windows 8 • Интеграция в стек технологий платформы C++ 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 gcnew Garbage-collected allocation ref new Reference-counted allocation ^ Strong pointer (“hat” or “handle”) % Strong reference 2. Allocation 3. Pointer & Reference Поговорим о фреймворках Open Source Technologies Box2D ANGLE Box2D • 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. Bullet Physics • 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 ANGLE – Almost Native GL Engine • 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 Cocos2D-x • 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 OGRE - OO Graphics Rendering Engine • 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 Using C#? • 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 Коммерческие решения Commercial Middleware Unity 3D • http://channel9.msdn.com/Events/WindowsCamp/Building-Windows-Games-with-Unity Agora Hydra • 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 Havok • 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 Marmalade • 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 Game Salad • Full IDE for game creation • Asset marketplace • http://gamesalad.com/creator/windows-8 Вопросы? Новые возможности С++ Сергей Байдачный Sergiy.Baydachnyy@Microsoft.com С++ настолько сложный для изучения, что мы расширили его дополнительными командами 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++ и 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 else class custom_regex_iterator {// stores a pointer to its regex public: // … custom_regex_iterator( const regex& ); // lvalues only please custom_regex_iterator( const regex&& ) = delete; // no rvalues need apply }; Демонстрация Конструкторы using template<class T> struct Vec { typedef vector<T, MyAlloc<T>> type; }; Vec<int>::type v; // sample usage template<class T> void f( typename Vec<T>::type& ); // non-deducible f<int>( v ); template<class T> using Vec = vector<T, MyAlloc<T>>; Vec<int> v; template<class T> void f( Vec<T>& ); f( v ); _t _t typename typename // sample usage // deducible ::type ::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 } Вопросы?