-
Недавно был опубликован доклад Сергея Звездина, посвященный разработке контекстно-зависимых систем с помощью Windows 7 Sensor and Location Platform.
Посмотреть…
-
Professional Developers Conference (PDC) – это мероприятие, которое все разработчики, использующие технологи Microsoft, просто обязаны посетить хотя бы раз в жизни. Это флагманское событие, предлагающее всесторонний, обращенный в будущее, технически углубленный, плотный набор сессий от представителей Microsoft. И PDC в этом году – не исключение, и вы вправе ожидать очень волнующее мероприятие.
Моим первым PDC был PDC’08, проходивший в прошлом ноябре в LA Convention Center. Как одному из тех, кто работал над Windows 7 в Microsoft, мне очень повезло войти в тот узкий круг лиц, связанных с Windows 7 на PDC 2008, и внести свой вклад (хоть он был и невелик) в одно из выступлений. В выступлении второго дня Стивен Синофски (Steven Sinofsky) представил Windows 7 миру и впервые люди вне Microsoft увидели новую панель задач, Windows Ribbon, стали свидетелями демонстрации технологии одновременного нажатия. Посетители получили жесткий диск объемом 160 ГБ (что заставляет задуматься о том, что они получат в этом году…) с Windows 7 build 6801 (кто-нибудь помнит эту сборку?). Команда разработчиков Windows представила множество своих технологий в ряде впечатляющих сессий. И с тех пор, на протяжении различных версий Windows – Beta, RC и RTM – мы продолжали выпускать новые материалы, чтобы помочь разработчикам подготовиться к Windows 7.
Windows 7 выйдет на рынок 22 октября, а PDC в этом году пройдет сразу же после релиза Windows 7. Теперь без тумана секретности, окутавшего предварительные версии, на PDC в этом году мы сможем углубиться (очень углубиться) в Windows 7, чтобы развернуть наше понимание того, как работает Windows 7 и, что куда более важно, какие преимущества могут получить разработчики от всех тех улучшений и возможностей, предлагаемых Windows 7.
Для начала, за день до начала PDC’09, состоится БЕСПЛАТНЫЙ семинар Windows 7 Boot Camp, проводимый ведущими экспертами Microsoft, такими, как Марк Руссинович (Mark Russinovich), Лэнди Вонг (Landy Wang) и Арун Кишан (Arun Kishan). Затем, в течение самого PDC, пройдет несколько более углубленных сессий, посвященных Windows 7.
Что ж, вот первый набор сессий Windows 7, который мы анонсируем:
Первая сессия затрагивает, пожалуй, мою любимую тему (я фанатик, что еще можно сказать). Что может быть важнее, чем быстродействие, особенно, когда оно касается Windows 7 и приложений, запущенных на Windows 7? Эта сессия должна стать обязательной к посещению для любого разработчика, пишущего любое программное обеспечение (с неуправляемым кодом или .NET-совместимое) для Windows (и не только для Windows 7) – это действительно уникальная возможность.
Повышая быстродействие при помощи Windows Performance Tookit
Команда разработчиков Windows 7 использует Windows Performance Toolkit (WPT) для оптимизации операционной системы. Приходите и узрите, как команда разработчиков Windows Performance использовала WPT в течение цикла разработки Windows 7 для оптимизации под сценарии клиентов, и как вы можете использовать многие из его функций и возможностей, которые помогут создать более быстрые приложения для Windows. Во время этой сессии будут показаны учебные примеры, которые продемонстрируют, как использовать этот набор инструментов для выявления областей, нуждающихся в улучшении в вашем приложении, и будут предложены принципы, которым необходимо следовать для создания приложений с оптимальной производительностью.
Следующие две сессии также в числе моих любимых (вы не можете осудить меня за любовь к Windows 7), поскольку я думаю, что эти технологии представляют новый уровень пользовательского взаимодействия и адаптивных пользовательских интерфейсов:
Создавая контекстно-зависимые приложения с Windows 7 и .NET
Сколько раз вы про себя думали: «Моему приложению было бы намного лучше, если бы оно знало, где находится пользователь»? Благодаря Windows 7 и .NET Framework 4.0 теперь в ваших руках есть инструменты для определения местоположения в ваших приложениях. Используя новую платформу Location and Sensor в Windows 7, API местоположения в .NET Framework 4.0 предлагает единый, последовательный API для получения географической широты и долготы, не обращая внимания на лежащую в основе технологию, позволяя вас сфокусироваться на создании превосходных, разнообразных контекстно-зависимых приложений.
Погружение в Windows Touch
Windows предлагает приложения со стандартным набором возможностей взаимодействия жестами и прикосновениями. Ваши приложения могут выйти за пределы обычных возможностей благодаря мощной платформе, которую они теперь способны задействовать. Эта сессия нацелена на разработчиков, заинтересованных в создании решений, оптимизированных под прикосновения. Мы ближе рассмотрим некоторые из наиболее важных составных частей платформы Touch, такие, как управление и бездействие процессоров, а также рассмотрим насущные проблемы, которые нашли и успешно обошли разработчики.
Еще одна очень рекомендуемая к посещению сессия посвящена Windows Ribbon. Прежде, чем вы откажетесь от Ribbon, я рекомендую вам взглянуть на него еще раз и прочитать между строк неуправляемого API Windows Ribbon. В текущем API представлена очень интересная архитектура программного обеспечения, которая дает первое представление об инфраструктуре будущего.
Технические аспекты Windows Ribbon
Это выступление покроет некоторые из наиболее острых и сложных аспектов реализации ленточного интерфейса, таких, как проектирование галерей (важнейшая задача любой ленты), добавление внешних MRU и т.д. Мы будем отталкиваться от конкретных примеров Windows Live и других партнеров, и расскажем о том опыте, который накопили эти команды разработчиков, как подопытные кролики Windows Ribbon.
Очень многое было сказано об обновлении в Windows 7 графического стека. Этот стек играет важную роль в повышении производительности Windows 7. Вы, как разработчик, можете воспользоваться этими изменениями и задействовать разнообразные современные графические технологии, которые используют максимум ресурсов графических процессоров.
Современная 3D-графика в Windows 7 и оборудовании Direct3D
Окунитесь в возможности Direct3D 11 и Windows 7, чтобы получить практические навыки, которые помогут использовать графику на всю катушку. Узнайте о новом этапе тесселяции в Direct3D 11, который обеспечивает беспрецедентное качество рендеринга, динамично генерируя геометрию в ГП. К тому же вы увидите, как улучшения поддержки многоядерности в среде выполнения Direct3D 11 могут помочь в масштабировании приложения, чтобы задействовать все ядра на компьютере. Наконец, узнайте о возможностях DirectCompute (вычислительной технологии общего назначения, использующей аппаратное ускорение) в контексте графических приложений.
Передовые графические возможности с DirectX
Число конфигураций ПК растет. С нетбуками и передовыми настольными системами, использующими последнее графическое оборудование, создание приложений, удовлетворяющих всем этим системам, становится все сложнее с каждым годом. Приходите, и мы расскажем о многих опциях, доступных в Windows 7 и служащих для упрощения графической разработки для всех видов аппаратных конфигураций, от маломощных встроенных ГП до топовых линеек дискретных карт. Узнайте о Direct3D 10 Level 9, который позволяет приложениям Direct3D 10 работать на практически всех компьютерах, доступных сегодня на рынке. Узнайте о WARP, новой программной прорисовке, которая позволяет приложениям использовать высококачественную графику, даже при отсутствии видеокарты. Наконец, узнайте о Direct2D, DirectWrite, WIC и возможности взаимодействия технологий Windows 7 для создания искусной, высококачественной графики в ваших приложениях.
Последняя сессия, которую я рассмотрю в этой статье, но далеко не последняя по важности, посвящена Windows API Code Pack for Microsoft .NET. Это платформа, в которой у меня есть личная заинтересованность и о которой я довольно часто пишу. С Visual Studio 2010 и .NET 4, жизнь разработчиков .NET станет проще. Тем не менее, остается огромное количество важных Windows API, которые не входят в состав пакета .NET. Эта библиотека открытого кода предлагает отличное промежуточное решение.
Разработка с помощью Windows API Code Pack for .NET Framework
Windows API Code Pack for Microsoft .NET Framework включает библиотеку исходных кодов, которую вы можете использовать для доступа к некоторым новым возможностям Windows 7 (и некоторым замечательным функциям предыдущих версий операционной системы Windows) из управляемого кода. Эти функции Windows сегодня недоступны разработчикам из .NET Framework. Эта сессия расскажет, как вы можете получить доступ к таким возможностям, как интеграция с панелью задач, списки переходов, библиотеки, сенсорная платформа, Direct2D и другие.
-
Никому из нас не нравится, когда не вовремя садится аккумулятор мобильного телефона или компьютера. Ни для кого не секрет, что новая версия Windows 7, которая недавно стала доступна для скачивания MSDN подписчикам, позволяет создавать энергоэффективные приложения. Статья позволит узнать Windows разработчикам новые полезные методы, техники и средства, которые помогут увеличить время работы мобильных устройств.
Энергопотребление
Давайте для начала посмотрим на тенденцию развития современных вычислительных процессоров. Исследователи лаборатории Microsoft Research проанализировали множество параметров современных процессоров (количество транзисторов, мощность, производительность и т.д.). Особое внимание обращалось на потребляемую мощность процессоров. Ниже представлен обзор процессоров Intel за последние 20 лет.
Как мы видим, согласно исследованиям Microsoft Research, количество потребляемой энергии процессорами стремительно растет. Процессор Intel 80386SX почти не потребляет энергии, но и не обладает высокой производительностью. Если мы посмотрим на топ процессоры последних лет, обладающие высокой производительностью, Core 2 Extreme QX6700 и другие, то становится очевидным, какое большое количество энергии потребляют эти процессоры (около 100Вт). Данная тенденция наблюдается не только у современных процессоров, но и у многих других комплектующих современных компьютеров (GPU, Ethernet и т.д.), что становится серьезной проблемой.
Если изучить проблему глубже, причиной высокого потребления энергии являются не только комплектующие (Процессор, GPU, Ethernet) и операционная система, но и дополнительное программное обеспечения. Команда разработчиков Windows 7 сравнила продолжительность работы компьютера от батареи при чистой установке и с предустановкой программного обеспечения OEM производителей.
Налицо большой разброс значений, но в большинстве случаев чистая установка позволяет компьютеру работать от батареи дольше. Отсюда мы можем сделать вывод – разрабатываемые нами приложения оказывают сильное влияние на энергопотребление нашего устройства. Энергоэффективное приложение позволит увеличить время работы мобильного устройства, например, ноутбука, и сократить расходы на электроэнергию в случаи серверной станции.
Разработки в области энергоэффективных решений
Энергопотребление стремительно растет, что вызывает активные разработки в данном направлении. Одна из них концепция “Батарея на весь день”, которая позволит использовать мобильные устройства 6,9 и более часов. Таким образом, мы сегодня говорим о тех возможностях, которые мы можем использовать для увеличения времени работы нашего мобильного устройства от батареи. Многие OEM производители ведут разработки в области энергоэффективных устройств. Мы можем наблюдать тенденции по оптимизации решений не только для мобильных устройств, но и для десктоп, и серверных станций. Компании хотят сократить энергопотребление их офисов и дата центров. Сегодня я хотел поговорить о методах разработки именно таких энергоэффективных приложений и о средствах диагностики решений, которые помогут сделать эти приложения лучше.
Схема разработки энергоэффективного приложения
1) Осознать причины высокого энергопотребления
2) Понизить использование ресурсов
3) Обратить внимание на простой
4) Адаптировать программное обеспечение под системное окружение
5) Использовать правильные средства и технологии
6) Обратить внимание в приложении на изменение состояний ОС (рестарт, завершение работы, сон и т.д.)
7) Проверить с помощью средств диагностики
8) Повторить все заново (вернуться к шагу 2)
Обратим внимание на простой
Когда мы говорим о продолжительности работы мобильного устройства от батарейки, важно обратить внимание на тип работы. 2 часа просмотра DVD? 2 часа офисной работы или 2 часа простоя? В каждом из случаев устройство расходует разное количество энергии. Но важно то, что все они связаны с простоем. В режиме простоя процессор расходует малое количество энергии. Поэтому главной задачей является, наибольшее сокращение расхода энергии на базовом слое ”Простое”.
Сократить потребление энергии можно, выполняя какие-то операции менее часто или отрисовывая меньшее количество графики. Хорошим примером является цветовая схема в Windows Vista. При переходе в режим “Power saver”, Windows меняет цветовую схему на более простую (не прозрачную), позволяю компьютеру работать чуть дольше. Другим примером является то, как команда оптимизировала проигрывание DVD в Windows 7. Скорость проигрывания была уменьшена с 60fps до 30fps. Для пользователя данное изменение не заметно, но, представьте, насколько меньше потребляет теперь наша система.
Другой метод уменьшения потребления энергии – оптимизация кода, которая позволяет на каждом этапе добавить лишнее время работы от аккумулятора. Все эти техники являются инструментом сокращения количества потребляемой энергии в режиме работы процессора.
Еще одним трюком уменьшения потребления энергии является метод, при котором мы пытаемся выполнить нашу работу, как можно быстрее, тем самым, попадая в состояния простоя на максимально возможное количество времени. Т.е. мы пытаемся находиться в состоянии простоя, как можно чаще и как можно дольше. Порой выгоднее подняться на более высокий уровень потребления энергии, выполнить задачу, как можно быстрее и вернуться в состояние простоя. Хорошим примером является менеджер управления питанием процессора в Windows, который сильно пульсирующий.
Техники оптимизации
Если мы посмотрим на современные мобильные процессоры, то увидим, что они обладают большим динамическим диапазоном потребляемой мощности. Они практически ничего не потребляют в режиме простой, с другой стороны они съедают большое количество энергии при предельной производительности. Поэтому очень важно сфокусироваться на простое!
Использование процессора
Исключите в своих программах опросы, используйте события! В Vista и более новых версиях ОС существует специальный API (RegisterPowerSettingNotification), построенный на событиях, которые позволяют отслеживать состояние питания вашего устройства (См. код ниже). В примере я использую Windows API Code Pack for .Net Framework. Пример работающего приложения можно закачать по ссылке в конце поста.
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
PowerManager.PowerSourceChanged += new EventHandler(PowerManager_PowerSourceChanged);
}
private void PowerManager_PowerSourceChanged(object sender, EventArgs e)
{
lab1.Content = PowerManager.PowerSource;
}
}
В случае если опрос в вашей программе всё-таки необходим, постарайтесь делать его, как можно реже. Я рекомендую вам воспользоваться новым Объединяющим программным интерфейсом (Сoalescing API), который позволяет увеличить интервалы простоя.
Когда команда разрабатывала Windows 7, она обратила внимание на то, что многие системные процессы имеют периодический характер. Хорошим примером является Диспетчер питания процессора, который изменяет напряжение на процессоре, тем самым, регулируя вычислительную мощность. Он изменяет напряжение процессора на основании данных о предыдущем состояние, и для этого он использует периодический опрос.
Еще раз повторюсь, современные процессоры потребляют невероятно малое количество энергии в режиме простоя. И нашей главное задачей является – сделать так, чтобы процессор находился в этом состоянии, как можно дольше. Хочу обратить ваше внимание на то, что на смену режима процессор расходует дополнительную энергию. Поэтому не исключен вариант, когда вы потратите больше энергии на переключения, чем сохраните в режиме простоя. В связи с этим нам требуется находиться в режиме простоя, как можно дольше.
Windows timer coalescing API
Идея Сoalescing API в объединении повторяющихся активностей. На графике снизу представлен пример активностей в системе (нереальные данные). Как мы видим, на графике Windows управляется периодическим таймером, который выполняется раз в 15.6 мс +. У нас в системе происходят периодически события по таймеру, этих событий много, и они разбросаны случайным образом по временной оси. Новый API позволяет их группировать, обеспечивая состояние простоя максимально продолжительный период времени.

Вы можете применить данную возможность в приложениях и сервисах, используя функцию пользовательского уровня SetWaitableTimerEx. Тем не менее, я рекомендую использовать события. Если же вы не можете отказаться от периодических таймеров, “Windows timer coalescing API”поможет вам сделать это наиболее эффективно.
Прототип функции SetWaitableTimerEx:
BOOL
WINAPI
SetWaitableTimerEx(
__in HANDLE hTimer,
__in const LARGE_INTEGER *lpDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in_opt PREASON_CONTEXT WakeContext,
__in ULONG TolerableDelay
);
Функция SetWaitableTimerEx очень похожа на функцию SetWaitableTimer, которая используется для определения периода, за который таймер должен истекать. Во многих ситуациях можно просто заменить функцию SetWaitableTimer на SetWaitableTimerEx. У SetWaitableTimerEx появились два новых параметра: WakeContext и TolerableDelay. Параметр WakeContext нужно использовать только, если вы хотите установить таймер, который может вывести систему из состояния сна. Параметр TolerableDelay определяет допустимое отклонение от заданного временного интервала в мс.
Вы должны использовать значение не меньшее чем 32 мс (2 интервала прерывания platform timer’а) для параметра TolerableDelay. Оптимально, когда значение допустимого отклонения увеличивается вместе со значением интервала. Например, если период между прерываниями равен 1ой секунде, то подходящее значение отклонения будет равно 50 мс. Тем не менее, если длина периода равна 30 секундам, значение отклонения должно быть не менее 1,000 мс.
Таблица требований функции SetWaitableTimerEx.
| SetWaitableTimerEx требования | |
| Header | Winbase.h |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |
| Поддерживаемые ОС | Windows 7 или Windows Server 2008 R2 или более новые |
Вы должны использовать “Windows Timer Coalescing API” для оптимизации энергопотребления ваших приложений и драйверов устройств. Тем не менее, группирование активностей не может заменить разумного использования ресурсов. В первую очередь нужно постараться ограничить периодическую активность в приложении и постараться использовать модель событий.
Когда вы используете “Windows Timer Coalescing API”, обратите внимание:
· Период между прерываниями не гарантирован. Однако он всегда выполняется с учетом погрешности (TolerableDelay).
· Используйте значение параметра TolerableDelay не менее 32 мс, что соответствует двум прерываниям platform таймера, которое происходит каждые 15.6 мс.
· Используйте в качестве значения параметра TolerableDelay значение кратное 50, например 50,100, 250, 500 мс и т.д.
[DllImport("kernel32.dll")]
static extern bool SetWaitableTimerEx(IntPtr hTimer, [In] ref long ft, int lPeriod, TimerCompleteDelegate pfnCompletionRoutine, IntPtr pArgToCompletionRoutine, bool fResume, REASON_CONTEXT wakeContext, ulong tolerableDelay);
Пример, использующий данную технологию, можно скачать в конце поста.
Жесткий диск
Современные жесткие диски потребляют около 8% энергии от общего потребление, и поэтому очень важно обратить внимание на все дисковые активности в вашей системе. Как мы видим на графике, наиболее ресурсоемкими являются операции чтения и записи, для достижения которых диску нужно раскрутиться и потратить много энергии. Используйте жесткий диск только тогда, когда это действительно требуется, постарайтесь исключить все периодические дисковые активности.
Изменение состояния
В Windows 7 команда разработчиков сделал новый API, который позволяет им не только сохранять состояние компьютера (пример Media Center, который позволяет часами проигрывать видео, не уходя в sleep; для этого он постоянно сообщает системе, что ему требуется находиться в рабочем состоянии), но и сообщать, какое приложение, и почему сохраняет или изменяет текущее состояние.
/// Создаем контекст
var powerRequestContext = new POWER_REQUEST_CONTEXT();
powerRequestContext.Version = POWER_REQUEST_CONTEXT_VERSION;
powerRequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
powerRequestContext.SimpleReasonString = "App is doing job";
/// Создаем запрос
IntPtr powerRequest = PowerCreateRequest(ref powerRequestContext);
/// Устанавливаем запрос
PowerSetRequest(powerRequest, PowerRequestType.PowerRequestSystemRequired);
/// Выполняем работу
Console.WriteLine("Press any key");
Console.ReadLine();
/// Очищаем запрос
PowerClearRequest(powerRequest, PowerRequestType.PowerRequestSystemRequired);
Средства диагностики
Команда разработчиков Windows 7 включила в новую версию ОС новые средства для диагностики ваших приложение. Одна из таких утилитов PowerCFG, которую можно вызвать из консоли и получить небольшой отчет о текущем состоянии энергопотребления.
Давай теперь посмотрим полученный HTML.
Данный документ обеспечивает быстрое получение информации и рекомендации к оптимизации о процессах в системе.
Для более подробного анализа стоит воспользоваться пакетом Windows Performance Tools Kit (XPerf), который позволяет получить полный спектр данных по всем параметрам и процессам.
Резюме
Современное программное обеспечение оказывает огромное влияние на потребляемую электроэнергию. Находясь как можно чаще и дольше в простое, мы можем сохранить значительное количество энергии. Надеюсь, данная короткая статья поможет вам лучше понять техники и методы оптимизации вашего приложения с точки зрения энергопотребления.
Скачать примеры
-
Оригинал: http://blogs.msdn.com/windowsmobile/archive/2009/01/16/developing-location-aware-applications-for-windows-mobile.aspx
Автор оригинального поста: Джошуа Партлоу (Joshua Partlow)
Оригинальный пост опубликован 16 января 2009 года
Хотя я раньше уже писал в блог команды Windows Mobile, у меня не хватало времени представиться. На этот раз я хочу исправиться – меня зовут Джошуа Партлоу (Joshua Partlow), и я, так же, как и Джим Кози (Jim Causey), занимаюсь разработкой документации для Windows Mobile. Мое образование и опыт работы связаны с вычислительной техникой, и я страстно увлечен мобильными технологиями.
Несколько дней назад Джим рассказывал о новой версии Live Search Mobile и о некоторых функциях этого приложения, использующих GPS. Я решил последовать примеру Джима и в этом посте показать некоторые интересные ресурсы, которые помогут вам разработать собственное приложение с поддержкой GPS. Не так давно в журнале MSDN была опубликована статья Кристофера Митчелла (Christopher Mitchell) – “Use GPS And Web Maps For Location-Aware Apps” («Использование GPS и web-карт в приложениях, определяющих местоположение устройства»). Это статья – отличная пошаговая инструкция по созданию приложения «список задач» с поддержкой GPS.

Еще один отличный источник информации – это вебкаст, который создали координатор сообщества Windows Mobile Community Констанц Роман (Constanze Roman) и MVP Маартен Страйз (Maarten Struys). Одну из частей своей 24-часовой серии о разработке приложений для Windows Mobile, Констанц и Маартен посвятили приложениям, определяющим местоположение устройства. Авторы рассказывают, как использовать промежуточный драйвер GPS для доступа к GPS-информации из управляемого кода, и о тестовой утилите FakeGPS, которой не требуется реальный GPS-приемник. Самое замечательное, что весь код, о котором идет речь в трансляции, можно загрузить из MSDN Code Gallery.
Если вам нужна более подробная информация, я советую вам посетить Windows Mobile Developer Center и взглянуть на документацию. Начать можно с темы Creating Applications that Utilize GPS («Создание приложений, использующих GPS»).
Перевод: Светлана Шиблева
-
Оригинал: http://blogs.msdn.com/robcamer/archive/2009/01/22/windows-mobile-unified-sensor-api.aspx
Коуш (Koush) выложил на CodePlex свой API для работы с датчикам. Исходный код и релиз можно загрузить тут. Унифицированный интерфейс позволяет разработчикам получить доступ к датчикам, встроенным в различные телефоны с Windows Mobile.
Типы датчиков:
- Датчики освещения
- Емкостные сенсорные панели
- Датчики вибраций
Устройства:
- HTC Touch *
- Samsung Omnia/Instinct
Все это выглядит как отличное дополнение к сообществу разработчиков Windows Mobile на CodePlex
Перевод: Светлана Шиблева
-
Приветствую, коллеги!
Мы хранили молчание последние несколько месяцев. Это связано с тем, что мы были заняты проектом по объединению концепций контекстно-зависимых систем и расширенной реальности: нам интересно, как можно объединить эти две новых области технологии?
Хотя я и не могу рассказать больше, позвольте мне поделиться с вами несколькими ссылками на проекты, связанные с расширенной реальностью (Augmented Reality), которые были представлены на MSR TechFest 2009 на этой неделе в Редмонде!
Демо:
Sticky Notes in AR
http://research.microsoft.com/en-us/events/techfest2009/demos.aspx (pre-last demo)
к сожалению, нет видео :(
Видео проектов:
|  | Core Tools for Augmented Reality Michael Cohen, Principal Researcher from Microsoft Research Redmond explains his TechFest 2009 treasure hunt demonstration using Core Tools for Augmented Reality. |
|  | Situated Interaction Researcher Dan Bohus introduces the virtual receptionist, a research project designed to improve human-computer interaction based on conversational behavior. |
Надеюсь, вам будут интересны эти проекты! :) А если у вас уже появились идеи, как объединить контекстно-зависимые системы и расширенную реальность, пишите в комментариях к этому блогу! :)
-
Мне бы хотелось поделиться с вами радостью, которую мы испытываем в Microsoft от того, что Крис Карр, исследователь из Northwestern University, IL, US, выпустил первую версию контекстно-зависимой платформы, Jarvis, для Windows сегодня!
Крис Карр работает в лаборатории The Laboratory for Understanding Collaborative Technology в Northwestern University, IL, US. Его работа сосредоточена вокруг проблем контекстно-зависимых систем и где-то около полугода тому назад он разработал и опубликовал контекстно-зависимую систему Pennyworth для Mac OS X. Pennyworth – это система, которая получает данные о состоянии различных подсистем, к примеру, ваш жесткий диск, ваши приложения и т.д., создается некоторое консолидированное представление о том контексте, в котором вы находитесь, т.е. система пытается из информации получить знание – факты. Эта система – реальное воплощение идей, о которых мы рассказывали вам на World Usability Day в Москве в ноябре 2008-го года. Pennyworth имеет самообучающуюся подсистему, которая следит за действиями пользователя (смена контекстов, которую инициирует пользователь) и строит предположения о паттернах в его поведении, что позволяет системе определять, в каких контекстах оказывается пользователь, чем он занимается. Силу, которую мы получаем в наши руки благодаря этой системе, сложно недооценить:компьютер знает, как может помочь вам в ваших повседневных делах.
Итак, позвольте мне представить вам эту новую контекстно-зависимую платформу, , Jarvis. Jarvis построен на .NET платформе, UI написан на WPF. Использует Coding4Fun для получения информации о сетевых подключениях и некоторой другой служебной информации. В системе есть несколько сенсоров:
Как вы видите, Jarvis знает, в каком приложении я сейчас работаю, знает, подключен ли мой ноутбук к системе электропитания или ноутбук работает от батарей, знает, к каким сетям подключен мой компьютер и т.д. Это то, как Jarvis “слушает” нас.
А вот пример того, как мы можем уточнить, прав ли Jarvis в своих предположениях о нашем текущем контексте:
а вот как выглядит предупреждение Jarvis о том, что контекст изменился:
а вот как Jarvis предполагает, в каком контексте мы находимся:
Что особенно интересно, мы в будущем сможем настроить правила для Jarvis (как в Pennyworth для Mac OS X):
Несколько простых сценариев, которые мне приходят в голову, для Jarvis – это определение моего онлайн-статуса (Presence), показ релевантных контактов в оболочке Windows (для текущего проекта было бы логично показать только релевантные контакты, а не весь список в 1000 человек :)), показ релевантных сообщений и т.д.
Позвольте мне также добавить, что в Windows 7 у нас есть специальная Sensor and Location Platform, которая предоставляет интегрированный интерфейс для взаимодействия с разнообразными логическими и реальными сенсорами для определения аспектов контекста физической среды. Как вам идея использовать сенсоры для расширения знаний о контексте в Jarvis?
Узнать больше о нашем видении контекстно-зависимых систем можно здесь.
Ну и конечно, загрузить Jarvis и попробовать работать с ним вы можете здесь: Jarvis site.
Крис, это отличная работа! Ждем новостей!
-
Приветствую!
В прошлом году, когда я только-только приехал в Редмонд из знойного Лос-Анжелеса, с легендарной выставки Microsoft PDC 2008, мне захотелось написать простое контекстно-зависимое приложение для Windows 7. У меня был в руках Windows 7 build 6801, который раздавали на PDC, несколько свободных вечеров, и я решил это таки сделать. :)
В этом оригинальном посте вы можете узнать, как это все начиналось. Этот пост был написан на английском на моем американском блоге, спасибо TheVista.ru за перевод поста на русский язык.
С помощью новой Location Platform в Windows 7 можно легко разработать контекстно-зависимые приложения. Одним из классов таких приложений являются общеизвестные навигационные приложения, которые обычно используют GPS для того, чтобы на экране устройства показать текущее местоположение пользователя на карте местности. Я решил попробовать разработать такое приложение, используя Windows 7, Location Platform и Virtual Earth 3D.

В чем особенность этого приложения?
- Приложение получает данные из Windows 7 Location Platform, что делает его независимым от конкретных поставщиков данных о местоположении пользователя, будь то GPS, WiFi или IP. Т.е. если у вас есть GPS с Location Platform-compatible драйвером для Windows 7, то приложение будет получать данные от него. Если вы загрузили виртуальный сенсор, определяющий ваше приблизительное местоположение на основе вашего IP-адреса, то приложение будет использовать его данные, и т.д. Вообще приложение будет использовать тот источник данных, который доступен в системе.
- Приложение подписывается на изменения данных о местоположении пользователя, данные показываются через Virtual Earth 3D, благодаря чему вы можете видеть ваши перемещения на земном шаре Virtual Earth
- Приложение можно использовать с помощью стилуса или пальцев, Ribbon-интерфейс помогает легко нажимать на кнопки, а элемент управления Virtual Earth 3D позволяет увеличивать/уменьшать расстояние до карты с помощью Multi-touch взаимодействия
Требования
- Windows 7 Beta
- .NET Framework 3.5 SP1
- Virtual Earth 3D Control (идите на maps.live.com и нажмите на 3D, чтобы установить этот элемент управления)
- Windows 7-compatible Location Provider (скажем, GPS)
Загрузить
Download from MSDN Code Gallery
Сайт (EN)
Windows 7 Navigation Application @ MSDN Code Gallery
Вся дополнительная информация об этом приложении будет размещена на этом же сайте.
-
Друзья и коллеги, с наступившим Новым Годом!!
Теперь, когда Windows 7 уже доступна всем, самое время начинать разрабатывать контекстно-зависимые приложения для Windows 7!
Поэтому теперь мы, вместе с коллегами из команды разработчиков Windows 7 (создателей платформы Windows Sensor and Location Platform), будем вести отдельный блог по разработке контекстно-зависимых систем на русском языке!
Адрес блога: http://blogs.msdn.com/wincontext/
Старые посты из моего блога на http://blogs.msdn.com/danielko/ по контекстно-зависимым системам я перенес в этот блог, и новые посты будут теперь в этом, новом блоге!
Кроме того, я веду общий блог по разработке контекстно-зависимых систем, а также семантических систем на английском языке по адресу http://blogs.msdn.com/semantics/. Посты из этого блога также будут появляться в этом новом русском блоге!
-
Начинаем цикл публикаций, призванных помочь начинающим программистам в создании контекстно-зависимых приложений для Windows 7. Об этом много говорили на PDC да и мы неоднократно писали о этом новом классе приложений. Пользователи Windows 7 build 6801 могли заметить появление в гаджете погоды опции автоматического определения местоположения компьютера. И сегодня у вас появилась уникальная возможность попробовать себя в создании подобных приложений.
Я решил немного поиграть с Windows Location Platform, входящей в состав Windows 7 build 6801, которая была роздана посетителям конференции PDC 2008, и решил попробовать создать свое WPF-приложение, которое показывало бы карту Virtual Earth и мое местоположение на ней.
В сборке 6801 всем СОМ-классы Location API обозначены как ThreadingModel = Free (MTA). Поэтому, для того чтобы вызвать их из другой потоковой модели (STA), придется прибегнуть к промежуточным классам. Похоже, что сборка, генерируемая VS (LocationDispLib.dll), не включает в себя эти самые промежуточные классы для COM-распределения. Таким образом, для получения доступа к Location API нам необходимо использовать другой поток, который позволит использовать эти данные в нашем WPF-приложении.
Что нужно для создания приложения
Сценарии, которые позволяет реализовать приложение - Показывать карту на базе местоположения пользователя
- Показывать схему движения, автоматически обновляя данные
- Очищать карту
Запускаем приложение: 
Нажимаем на кнопку Show Me on Map, Windows Location Platform получает координаты, приложение отмечает текущее местоположение на карте.

Приложение отслеживает перемещения и ежесекундно отмечает их:

Как это реализовано
Windows Location Platform API представлены COM- и Win32-объектами. Для упрощения программирования мы воспользуемся COM-версией API, которая внедрена в файл LocationDisp.dll в папке %Windir%\System32\ (в x86-версии). Для использования данного API нам необходимо добавить в проект ссылку на эту библиотеку.
1. Так как API запускаются в режиме MTA, а основное WPF-приложение в STA, нам нужно использовать отдельный поток для того, чтобы наше приложение могло получить информацию от API.
- BackgroundWorker m_worker предназначен для обработки изменения местоположения, а второй BackgroundWorker m_workerStatus добавляем в определение Window1:
Code:
BackgroundWorker m_worker = new BackgroundWorker();
BackgroundWorker m_workerStatus = new
BackgroundWorker();
private LatLongReport m_report = new LatLongReport();
private LocationPlatformStatus m_status = new LocationPlatformStatus();
DispatcherTimer m_timerAutoTracking = new DispatcherTimer();
DispatcherTimer m_timerLocPlatformStatus = new DispatcherTimer();
bool m_useAutoTracking = false;
Таймеры будут использоваться для обработки изменения местоположения (m_timerAutoTracking). LatLongReport - .NET упаковщик для класса DispLatLongReport из Interop.LocationDisp.dll, которая была создана из LocationDisp.dll силами Visual Studio. Она необходима для того, чтобы несколько упростить COM-функцию, вызываемую в .NET-приложении.
- В конструкторе Window1 мы инициализируем и фоновые исполнители, и таймеры:
Code:
public Window1()
{
InitializeComponent();
m_worker.DoWork += new DoWorkEventHandler(worker_DoWork);
m_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
m_workerStatus.DoWork += new DoWorkEventHandler(m_workerStatus_DoWork);
m_workerStatus.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(m_workerStatus_RunWorkerCompleted);
m_timerAutoTracking.Interval = new TimeSpan(0, 0, 0, 0, 1000);
m_timerAutoTracking.Tick += new EventHandler(m_timer_Tick);
m_timerLocPlatformStatus.Interval = new TimeSpan(0, 0, 0, 0, 1000);
m_timerLocPlatformStatus.Tick += new EventHandler(m_timerLocPlatformStatus_Tick);
// enabling Status Timer
m_timerLocPlatformStatus.Start();
}
Здесь мы просто инициализировали асинхронные обработчики событий DoWork и RunWorkerCompleted для обоих исполнителей Background Worker, настров интервал в 1 секунду для таймеров и обработчиков их событий.
- Вызов Windows Location Platform API
Нажав кнопку Show Me On Map, пользователь инициализирует в приложении соответствующую команду и она запускает асинхронный исполнитель Background Worker m_worker: Code:
public void ShowMeOnMapCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
try
{ m_worker.RunWorkerAsync();
} catch
{
// some times it can't do the job at 1 sec
}
}
Тут, однако, есть маленькая проблема. Так как мы не подписываемся на события через Location API, но при этом вызываем их, используя таймеры, исполнители Background Worker могут столкнуться с проблемой, при которой они не успели завершить свою работу. Чтобы не усложнять приложение, я решил добавить здесь блок.
RunWorkerAsync() включает событие DoWork() из фонового исполнителя m_worker:
Code:
void worker_DoWork(object sender, DoWorkEventArgs e)
{
LatLongReportFactoryClass factory = new LatLongReportFactoryClass();
m_report = new LatLongReport(factory.LatLongReport);
}
Именно здесь происходит реальное обращение к Windows Location API. То есть нам необходимо сослаться на LatLongReportFactoryClass и получить от него LatLongReport, который и будет использоваться в приложении. В действительности, первое, что нам необходимо сделать - проверить поле LatLongFactoryClass.Status, чтобы убедится, что сенсоры доступны и работают.
- Когда фоновый исполнитель m_worker завершит получение LatLongReport, нам нужно создать на карте новый PushPin, дать ему текущие координаты и показать на карте.
Code:
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
//Cancelled
}
else if (e.Error != null)
{
//Exception Thrown }
else
{
//Completed
PushPin pushPin = new PushPin();
pushPin.Latitude = m_report.Latitude;
pushPin.Longitude = m_report.Longitude; t
his.VirtualEarth.PushPins.Add(pushPin);
pushPin.CenterInMap();
}
}
В данном методе мы центрируем карту, чтобы созданная отметка показывалась по центру Virtual Earth. В случае если сенсоры присутствуют, включены и доступны, нажатие кнопки Show Me on Map покажет в центре карты Virtual Earth нашу позицию.
2. Для реализации автоматического обновления местоположения мы используем таймер Dispatcher Timer m_timer, который автоматически будет запускать Background Worker m_worker для получения информации о местоположении.
Для этого мы просто добавим в обработчик вызова кнопки Show/Stop showing My Trip on Map Automatically вызов Start/Stop m_timer, а для отметки на карте - m_worker.RunWorkerA.
3. Чтобы очистить карту, требуется вызвать метод “Clear” из коллекции контролов “PushPins”.
Теперь вы знаете, как вызывать Windows 7 Location Platform API с целью получить информацию о местоположении пользователя, и использовать ее в WPF-приложении.
Вот, собственно, и все. В следующий раз мы поговорим о том, как проверить статус платформы, о том, что делать в случае, если доступ запрещен, и что делать с провайдером, используемым по умолчанию.
-
Рад сообщить, что только что были опубликованы видео записи с нашего выступления о контекстных технологиях на сайте мероприятия World Usability Day Russia 2008:
15:50-16:30
Михаил Матвеев, Данила Корнев | Microsoft Россия
Использование контекстной информации при проектировании пользовательских интерфейсов
Видео (часть 1 | часть 2 | часть 3)
Презентация
В рамках доклада вы познакомитесь с мировыми трендами в области контекстных систем и узнаете о платформах разработки контекстных приложений, создаваемых в компаниях Intel и Microsoft. В выступлении будут освещены уже существующие индустриальные решения, использующие контекстную информацию, - мобильные устройства для конечных пользователей, медицинские системы, гео-информационные сервисы и др.
Пользуясь случаем, хочу поблагодарить RusCHI и ACM за возможность выступления на World Usability Day Russia 2008!
-
Приветствую, коллеги,
Новости с полей. В последний четверг мы сделали третье объявление о Windows Sensor and Location Platform, о нашем стремлении и обещании сделать context awareneess ключевым аспектом при разработке программного обеспечения для создания дружелюбных по отношению к пользователям приложений, оценки роста рынка контекстно-зависимых систем, а также, главное, роли Контекста в User Experience.
Позвольте мне представить Российскую часть нашей группы:
- Михаил Матвеев, Директор технологической политики, Microsoft Russia
- Данила Корнев, Менеджер программ, Microsoft Russia
- Александр Попов, Лаборатория технологий Microsoft, Московский Государственный Университет
Мы сделали наше объявление на Our announcement was made on World Usability Day 2008, которая была проведена в Москве в последний четверг, 13 ноября 2008 года. Михаил Матвеев начал наш доклад, рассказывая про существующие контекстно-зависимые системы типа iPhone, HTC Touch Pro, Office 2007 с новым интерфейсом “Fluent”, объясняя, что все эти решения имеют единую основу – они являются контекстно-зависимыми; Михаил рассказал также про рост рынка и оценку продолжения роста рынка на ближайшие 5 лет, сделанную мировыми агенствами. Я же рассказал про новую Windows 7, нашу новую платформу Sensor and Location Platform, показал, как работают акселерометр и другие сенсоры на reference плате, которую мне дали коллеги из PC|3 команды, показал игру Marble, а также модифицированное WPF приложение (MSDN Reader), использующее сенсор определения яркости света для изменения размеров шрифта текста в приложении.
Ниже вы найдете несколько фотографий с мероприятия:
 |  |
| Михаил Матвеев рассказывает о существующих контекстно-зависимых системах | Данила – ждет своей очереди выступать :) |
 | |
| Михаил объясняет, почему необходимо использовать контекст при создании приложении и как этот контекст можно определить | |
Было задано несколько интересных вопросов – безопасность платформыб защита личной информации, как реализовывать Light-aware UI, какие сенсоры будут в устройствах, когда мы вместе с нашими партнерами выпустим Windows 7! :)
Это было замечательное мероприятие и мы гордимся, что нас пригласили рассказать о контекстно-зависимых системах лучшим UX-экспертам России.
Видео с записью нашего выступление будет опубликовано в ближайшие несколько недель.
Я приложил нашу презентацию с мероприятия – на английском и русском языках, посмотрите и дайте свои комментарии, поделитесь вашим мнением.
-
Приветствую, коллеги,
В этот раз я решил продублировать пост на русском языке в этом блоге.
Сегодня мне хочется поделиться с вами отличной новостью – Windows 7 будет нашим первым и флагманским продуктом, который будет предоставлять технологию для построения контекстно-зависимых систем на основе персональных и мобильных компьютеров.
Просто взгляните на сессии PDC Sessions, посвященные Windows 7, и вы найдете несколько сессий, так или иначе посвященных этой тематике:
| 1. Windows 7: Building Great Communications Applications Presenter: Larry Osterman Larry Osterman Larry started working at Microsoft back in the dark ages back when computers shipped with kilobytes of memory and a 10 megabytes of disk space. Over his 24 year career he has worked on networking, email servers, embedded controllers for home automation and most recently he works as a developer on the Windows Sound team. TBD Advanced, Windows 7 |
| 2. Windows 7: Extending Battery life with Energy Efficient Applications Presenter: Pat Stemen A single application can accidentally halve battery life for the average laptop. This session demonstrates best practices for designing energy efficient applications and shows utilities for diagnosing common application battery life problems. Learn about how Windows 7 makes it easier for developers to design energy-efficient applications which do not negatively impact mobile PC battery life. Expert, Windows 7 |
| 3. Windows 7: New APIs for Building Context-Aware Applications Presenter: Dan Polivy TBD Expert, Windows 7 |
Конечно же, наиболее интригующая сессия - #3 в этом списке – Windows 7: New APIs for Building Context-Aware Applications. Рассказывать будет Дэн Поливи, Senior Program Manager в подразделении PC|3 (часть COSD, под руководством CVP Bill Mitchell, знаменитого проектом Tablet PC в Microsoft). Я не могу, к сожалению, публично сказать больше о том, что же расскажет Дэн, но когда вернусь с конференции, обязательно поделюсь новостями :))))
По поводу Energy-Saving/Energy Efficient Software – это общая проблема для всей индустрии – во главе исследований здесь стоит Intel и другие наши OEMs и мы все надеемся, что контекстно-зависимые системы позволят сэкономить на использовании электроэнергии, благодаря чему продолжительность жизни мобильных компьютеров, телефонов будет значительно увеличена.
Сессия про Communications Applications – Ларри Остерман, разработчик из группы Windows Sound Team, расскажет о новшествах в звуковой подсистеме Windows 7 и о том, как разрабатывать контекстно-зависимые системы, используя эту подсистему.
Больше новостей на эту тему будет уже на PDC – приезжайте к нам!
P.S. Да, кстати – Каждый, КАЖДЫЙ участник PDC получит 160GB жесткий диск с Windows 7, SDK, и прочими вкусностями – не пропустите!