Сайт для программистов

суббота, 24 октября 2009 г.

Фотоотчет о посещении офиса Microsoft

Утро 23 октября 2009 было мерзким. На улице шел противный дождь. Еще вчера я взял отгул в счет отпуска на работе и мог спокойно спать. Но пришлось вставать. Ведь отгул я брал не просто так. У меня было запланировано посещение офиса мегакорпорации Microsoft. Дело в том, что меня попросили возглавить московское представительство Microsoft. Впрочем, нет, Билл Гейтс и Стив Балмер еще не созрели для такого предложения.

Я поперся туда в такую погоду по другой причине - Microsoft проводила очередной семинар Techdays в Москве.

В прошлом году семинар проходил в Бауманском Доме Культуры (или как он там называется). На этот раз устроители пригласили разработчиков к себе в логово. Упускать такой шанс было нельзя.

Преодолев стойкое желание поспать, я встал и стал собираться. Холодильник был пустой, если не считать замороженного мяса. Мясо предназначалось коту, я не имел права отнимать у него последний кусок. Попил пустой чай и поехал через всю Москву в Крылатское. Вся надежда была на Microsoft, которая не даст умереть с голоду разработчика под платформу Windows.

Мои надежды оправдались - в фойе, где проходила регистрация, были накрыты столы с пирожками, а также стояли термосы с чаем/кофем. Семинар проходил целый день с 10.00 до 19.00. Через каждый час устраивались перерывы - народ ломился из учебного зала, чтобы подкрепиться. Тут Microsoft не подкачал. Молодые девушки и юноши успевали к каждому такому перерыву обновлять содержимое стола. Кроме пирожков, появились также вкусные бутерброды, соки, минеральная вода.

Во время перерыва я изобразил из себя праздношатающего зеваку и стал обследовать офис. Конечно, в закрытые двери ломиться я стал, а просто прошелся по коридору. И, неожиданно, оказался в кафе для сотрудников и посетителей Windows Vista Cafe. В кафе оказалось четыре компа (два не работало), подключенных к интернету. Также имелась пара автоматов XBox. Повсюду были шарики по случаю релиза Windows 7 и Visual Studio 2010 beta.

На семинаре одному из участников достался приз - фирменная банка пива Windows 7. Интересно, можно ее купить где-нибудь?

О самом семинаре рассказывать не буду. Все равно все материалы устроители выложат на сайте.

После окончания семинара всех также угостили пивом и фирменными тортами с надписями MSDN и Windows 7. Решение объединить два продукта мне показалось спорным (я о пиве и торте). Лично я сначала выпил бокал пива, а потом уже стал пить чай с тортом. Рядом со мной находился человек, который совершал обряд в обратном порядке. Не знаю, не знаю.

Заинтересовался также бумажками, вывешенными в туалете. Удивило, что в московском представительстве тексты была набраны на английском и напрочь отсутствовала локализованная версия. Видимо, тексты предназначались только для иностранцев. Вникать в содержание плакатов не было желания, но иллюстрации на первой картинке напоминали азбуку жестов для глухонемых.

По традиции всех участников одарили блокнотами, ручками, брошюрами. А вот футболки стали приятным сюрпризом. Только почему-то всегда дарят белые футболки (ворчу про себя).

Подписывать фотки я не стал. Думаю, что после прочтения данного поста, вы и сами разберетесь, что к чему.

Спасибо, Microsoft. Было очень вкусно.










четверг, 22 октября 2009 г.

WM_APPCOMMAND

Недавно в справочник по функциям Windows API я добавил новый материал - описание сообщения WM_APPCOMMAND. Предлагаю вашему вниманию рассказ об этом интересном сообщении в сжатом виде. Само сообщение объявляется следующим образом:

private const int WM_APPCOMMAND = 0x319;

Сообщение WM_APPCOMMAND уведомляет окно о том, что пользователь создал командное событие прикладной программы, например, щелкнул на кнопке в приложении, используя мышь, или нажал на клавиатуре клавишу управления приложением.

С помощью данного сообщения можно, например, отключить системный микшер, значок которого находится в области уведомлений рядом с часиками.

private const int APPCOMMAND_VOLUME_MUTE = 0x8 * 0x10000;

private void button2_Click(object sender, EventArgs e)
{
// выключаем/включаем микшер
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
}

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

Также можно увеличивать или уменьшать уровень громкости микшера(константы APPCOMMAND_VOLUME_DOWN и APPCOMMAND_VOLUME_UP). Кроме того, среди используемых констант можно найти управление микрофоном, браузером или универсальным проигрывателем. Вот как можно поставить на паузу Windows Media Player из своей программы:

private const int APPCOMMAND_MEDIA_PLAY_PAUSE = 0x14 * 0x10000;

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_MEDIA_PLAY_PAUSE);

Полный список доступных констант вы найдете в справочнике. Хочу обратить ваше внимание, что все значения констант в сообщении WM_APPCOMMAND необходимо умножить на 0x10000, что я и сделал в предыдущих примерах. Используются ли данные константы без умножения в других сообщениях , я не знаю. Кто в курсе - отзовитесь.

Кстати, при изучении документации MSDN, я обнаружил еще одну интересную константу APPCOMMAND_DWM_FLIP3D, который включает режим FLIP 3D в Windows 7 (Кстати, сегодня первый день розничной продажи Windows 7).

Удачного вам программирования!

воскресенье, 23 августа 2009 г.

Кнопка Пуск и панель задач в Windows 7

Недавно я установил себе новую операционную систему Windows 7. Свои первые впечатления о системе я описал в личном блоге. С появлением новой системы приходится пересматривать старые проекты, чтобы убедиться в работоспособности прежних проектов. Один из таких примеров - поведение кнопки Пуск. В своем справочнике по функциям Windows API для .NET Framework я использовал пример скрытия кнопки Пуск, а также панели задач, области уведомлений и часов. Все, кроме кнопки Пуск, работает замечательно. Вот только кнопка Пуск не желает исчезать. Ее можно скрыть только с панелью задач, но никак не отдельно. На сайте CodeProject приводится пример, в котором по утверждению автора, кнопка исчезает. Но тут есть одна проблема - в его коде используется слово Start для кнопки Пуск. Возможно, его пример работает в американской версии Windows, но в русской версии кнопка не исчезает. Я пробовал изменить слово на Пуск в коде, но это тоже не принесло результата.
Также на CodeProject имеется другой пример для работы с кнопкой. Но он также мне ничем не помог.
Сам пример описан в моей книге C#.Советы программистам, поэтому нет смысла его приводить здесь. Просто имейте в виду, что пример с кнопкой Пуск из книги в Windows 7 работать не будет.

суббота, 13 июня 2009 г.

Windows Mobile

Сегодня новости будут посвящены платформе Windows Mobile. Во-первых, недавно был запущен Русский блог Windows Mobile. Материалы для блога готовит команда из нескольких человек. Ребята с энтузиазмом взялись за работу, очень активно переводят статьи из зарубежных блогов. Качество перевода пока оставляет желать лучшего, но, надеюсь, это временные проблемы. Советую занести адрес блога в закладки.
На моем сайте также появилось несколько новых материалов. Например, статья о разработке виджетов для Windows Mobile 6.5. На самом деле, эта тема более обширна, чем изложено в статье. Я также написал расширенный вариант для одного журнала. Посмотрим, опубликуют ли статью.
Кроме того, Андрей Коновалов (кстати, один из лучших участников блога о Windows Mobile) на Хабре стал публиковать статьи Криса Крафта, того самого человека, который обещал за тридцать дней написать тридцать приложений. Я сам подумывал о переводах этого цикла, но времени совсем нет. Поэтому я решил использовать с небольшими сокращениями переводы Андрея, внося свои изменения. Вот, например, вы можете прочитать первую статью Обратный отсчёт до полуночи.
Обратите внимание, кстати, что вышел набор разработчика Windows Mobile 6.5 DTK. В этом наборе появилось несколько новых эмуляторов с различными разрешениями. После установки эмуляторов, вы можете использовать их и для старых проектов. Например, для Windows Mobile 6.1 есть модели с разрешением 800х400. Раньше нельзя было посмотреть в эмуляторе, как выглядит ваше приложение на экране с таким разрешением. Теперь это стало возможным. Сам проект не обязательно компилировать под новую платформу, просто запускайте нужный эмулятор.
И последнее. Как вы знаете, в этому году у меня вышла книга Программирование для мобильных устройств под управлением Windows Mobile. Хочу провести небольшую акцию - за 250 рублей вы можете приобрести эту книгу + получите годовую подписку на мой справочник по Windows API для .NET Framework. В эту цену входит и почтовая доставка. Так как количество книг ограничено, то вам сначала нужно написать мне письмо о своем желании (rusproject@mail.ru) и я вам вышлю свой номер кошелька WebMoney (также можно перечислить Яндекс-деньгами). Акция расчитана на жителей России. Заказывайте!
Удачного вам программирования!

среда, 27 мая 2009 г.

Microsoft Visual C# в задачах и примерах

Новая книга Н.Культина Microsoft Visual C# в задачах и примерах является переработанным вариантом книги C# в задачах и примерах. Изменения оказались в лучшую сторону. Если в раннем варианте для примеров использовался Turbo C#, то в этот раз используется Visual C#. Сами примеры также были переработаны, а также добавлены новые полезные задачи. В книге можно найти примеры различной степени сложности - от простейших программ вычисления курса валют до приложений, связанных с графикой и базами данных, том числе Microsoft Access и Microsoft SQL Server Compact Edition. Также в книге показано использование новой технологии LINQ. Справочник, входящий в книгу, содержит описание базовых компонентов, событий, исключений и наиболее часто используемых функций. К книге прилагается компакт-диск со всеми проектами, представленными в книге.
Книга рассчитана для начинающих программистов, которые хотят повысить свою квалификацию. Автор предлагает практичные примеры, взятые из жизни, и понятные для восприятия. Я с удовольствием почитал эту книжку и, даже, нашел для себя что-то новое. Например, описание функции Windows API TaskDialog, которая появилась в Windows Vista/Windows 7 (на момент покупки книги я еще не был близко знаком с библиотекой Windows Vista Bridge Sample Library).
Рекомендую приобрести и почитать книжку всем, кто только начинает программировать на C#.
Счастливого вам чтения!

суббота, 23 мая 2009 г.

Windows Vista Bridge Sample Library

Долгое время у меня не доходили руки до новой библиотеки Windows Vista Bridge Sample Library, которая позволяет использовать новые возможности Windows Vista и Windows 7 в своих программах. Я видел различные публикации как на американских блогах, так и переведенные статьи. И вот, наконец, я решил изучить эту библиотеку. После небольшого изучения я вновь перечитал статьи и ужаснулся. Насколько все поверхностно описано о возможностях библиотеки, как много осталось недосказанного. Статьи расчитаны на опытных программистов, которые могут самостоятельно изучить исходный код библиотеки и понять о чем идет речь в статьях. Но что делать менее опытным программистам, которые тоже хотят приобщиться к новых технологиям?
Поэтому я решил написать свой вариант статьи на эту тему. Чтобы не начинать работу с нуля, я взял за основу уже имеющиеся статьи и немного поправил их. Предварительный вариант статьи можно прочитать по адресу http://developer.alexanderklimov.ru/articles/vbsl.php. В дальнейшем я переработаю статью и постараюсь сделать ее более понятной. Если у вас есть вопросы по данной библиотеке, то можете обратиться ко мне. Самый лучший способ поделиться своим вопросом - это воспользоваться специальной формой Оставь свой отзыв, которую можно найти в правой части главной страницы http://developer.alexanderklimov.ru. Также можете задать свой вопрос по электронной почте или в комментариях к этому посту.
Удачного вам программирования!

воскресенье, 26 апреля 2009 г.

ToTitleCase

В .NET Framework есть такой интересный метод как ToTitleCase, когда в заданной строке все первые буквы слов становятся большими, а остальные - маленькими. В MSDN можно найти описание и пример использования этого метода. Прочитав, вы узнаете, что у метода есть одна особенность: если все буквы в слове большие, то с этим словом ничего не происходит. Например, это удобно, когда встречаются такие слова как СССР, МГУ, ЗАГС и т.п. Но тем не менее, иногда, хочется обойти это ограничение. Что для этого нужно сделать. Правильно, сначала перевести все слова в нижний регистр, а затем вызвать метод ToTitleCase.


Именно так поступил программист Jan Schreuder, написав функции-обертки для этого метода (блог http://bloggingabout.net/)



private string ToTitleCase(string text, System.Globalization.CultureInfo culture, bool forceCasing)
{
if (forceCasing)
{
return culture.TextInfo.ToTitleCase(text.ToLower());
}
return culture.TextInfo.ToTitleCase(text);
}

private string ToTitleCase(string text)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, false);
}

private string ToTitleCase(string text, bool forceCasing)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, forceCasing);
}

private string ToTitleCase(string text, System.Globalization.CultureInfo culture)
{
return ToTitleCase(text, culture, false);
}

//Вызываем какую-нибудь функцию
label1.Text = ToTitleCase(textBox1.Text, true);


Как видите, в нашем распоряжении четыре перегруженных версий функции. В стандартном случае достаточно вызвать функцию с одним параметром, которая содержит нужную строку. Для других случаев вызываются перегруженные версии.


Вот как будут выглядеть строки после вызова всех вариантов функций.



change this to title case => Change This To Title Case
chanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To Title Case

Возможно, пример покажется не самым полезным в вашей практике, ну, а вдруг пригодится.