среда, 23 марта 2011 г.

Boostcon 2011

Посмотрел программу boostcon 2011.

Впечатлило, что наконец-то появились темы по Boost.Asio - да еще какие!
Только от автора Boost.Asio Christopher Kohlhoff сразу несколько "вкусностей":
  • Thinking Asynchronously: Designing Applications with Boost.Asio;
  • Why C++0x is the Awesomest Language for Network Programming.

А еще:
  • Cliff Green: Design Journeys with Skoot, a Peer Oriented Generic Networking Library
  • Boris Schaeling: Creating Boost.Asio extensions

И наконец "просто отличные" темы:
  • Joel Falcou, Khaled Hamidouche: Automatic Hybrid MPI+OpenMP Code Generation
  • Justin Gottschlich: Intel's C++ Software Transactional Memory Compiler and the Draft Specification of Transactional Language Constructs for C++
  • Joel Falcou, Lionel Lacassagne, Sebastian Schaetz: Mastering the Cell Broadband Engine architecture through a Boost based parallel communication library
  • Hans Boehm: Threads and Shared Variables in C++0x
Итак, ждем мая.

вторник, 22 марта 2011 г.

WTF: Adobe or Microsoft?

Сегодня обновил Adobe Flash for IE.
Т.е. сначала удалил предыдущую версию, потом перезагрузился, потом установил новую версию и снова перезагрузился.

Вуаля - на большинстве сайтов в IE9 перестали работать вставки с видео 8(
Не впервой проблемы с IE. Youtube в IE9 работает, все неработающие в IE9 видео-вставки, отлично показываются в FF4. Что ж, посмотрел исходный код проблемных сайтов - выявил закономерность: везде ссылка на объект идет не через GUID, а через MIME (application/x-shockwave-flash).
Ага! Запускаем regedit и ищем текст application/x-shockwave-flash.
И вот оно - найден раздел на чтение которого у меня нет прав! Да, я работаю под ограниченной учетной записью. Но чтение-то должно быть доступно! Сравнил права с аналогичными разделами (например, для Silverlight) - действительно - права не те.

Решение: запускаем regedit от имени администратора, удаляем раздел (где-то в HKLM\...MIME\Database\... - искать по application/x-shockwave-flash), переустанавливаем Adobe Flash ActiveX.

Кто виноват? Думаю, кривой инсталлятор от Adobe. Хотя вполне возможно (это же ActiveX), что проблема кроется в регистраторе ActiveX, т.е. "виновата" Microsoft. В общем, FF4 я уже поставил. И так на многих сайтах сижу только через него. Похоже вскоре полностью пересяду на "лису".

Спасибо, Christopher Kohlhoff!

УРРА! (второй раз за день)
Вышедший сегодня Boost.Asio 1.5.3 (dev-ветка) обновил поддержку SSL - теперь асинхронные SSL-операции поддерживают asio custom memory allocation.

Я как раз собирался на днях попробовать изменить существующую реализацию, для поддержки asio custom memory allocation - уже отчаялся и решил, что это неинтересно не только пользователям Boost.Asio (что-то вяло они используют этот поистине великолепный отличительный механизм Boost.Asio), но и самому автору.

И тут такой подарок... Спешу "порыться" в коде - все дружно ищем тяжелые глобальные lock-и и недостаток поддержки move semantic.

async_basics2

Наконец-то! Свершилось! :)

Представлен новый проект "async_basics2", который реализует все тоже самое, что и проект "async_basics", но почти без шаблонов (т.е. совсем без шаблонов в публичной части).

Я давно планировал свести работу с Boost.Asio к традиционным вариантам с интерфейсами и реализацией (неудачные "echo_server2" и "echo_server3").

Теперь (проект "async_basics2") completion callback - это интерфейс (без шаблонов!), async_object - тоже простой интерфейс, не использующий шаблонов. Это дает больше возможностей по разделению кода и несомненно поможет многим, кто по той или иной причине не может использовать шаблоны в публичной части активного объекта.
Поддержка asio custom memory allocation никуда не исчезла - см. код "async_basics2" (main.cpp и класс do_something_handler). Гарантии asio для completion handler и возможность в completion handler "удерживать" сам активный объект тоже "на месте" (это тоже отражено в "async_basics2").

P.S. Вoзможно скорое появление аналогичного проекта "echo_server2".

понедельник, 7 марта 2011 г.

Qt Echo Server introduced

"asio samples" пополнились еще одним проектом - "qt_echo_server".
На данный момент это отражено только в SVN-репозитории.
Поддерживается сборка при помощи MSVS 2010 и Qt Creator.

Несмотря на то, что проект еще не закончен (парсинг конфигурации, задаваемой в GUI), "qt_echo_server" уже собирается и работает в:
1) Windows (Windows XP/Vista: MSVS 2010 + Qt 4.7.0 static build with static C/C++ runtime; Windows 7: MS Visual C++ 2008 + Qt Creator 2.1.0 + Nokia Qt libraries 4.7.2 for Windows);
2) Ubuntu 10.10 (Qt Creator из станд. репозиториев + установленные согласно офиц. документации Boost C++ Libraries 1.46);
3) Kubuntu 10.10 (Qt Creator из станд. репозиториев + установленные согласно офиц. документации Boost C++ Libraries 1.46 + Boost.Asio 1.5.1).

Всем, кому приходило в голову соединять boost::bind или произвольные функторы C++ с "Qt signal/slot", будет весьма интересно то, как это получилось у меня - это является одним из вопросов, решением которых выступает данный "sample" ("qt_echo_server").

пятница, 4 марта 2011 г.

Move semantic supported

Теперь "asio samples" (в основном проект "echo_server" и менее "nmea_client") поддерживают C++0x move semantic (rvalue reference):
1) для тех компиляторов, что не поддерживают еще не законченный стандрат (в части rvalue reference и move semantic) - MS Visual C++ 2008 (9.0) - все остается по-прежнему (хвала "проклятому" препроцессору :)
2) для компиляторов с "достаточной" реализацией move semantic - MS Visual C++ 2010 (10.0), Intel C++ Compiler 12.x, GCC 4.5 - везде, где это допустимо используются rvalue references, std::move и, конечно же, std::forward (спасибо статьям Dave Abrahams в блоге C++Next.

Для Intel C++ Compiler 12.x в build/intel12/boost_1_46_patches/intel_rvalue_ref_on.patch содержится патч, который "включает" поддержку rvalue reference в Boost C++ Libraries 1.46 и, соответсвенно, в "asio samples" (используется boost-вский config.hpp).

Для GCC 4.5 ключ компиляции, ответственный за поддержку rvalue reference, включается непосредственно в *.pro-файлах (проекты для Qt Creator).
Для получения "реальной пользы" от поддержки move semantic необходимо установить Boost.Asio 1.5.1 (developer release) в Boost C++ Libraries 1.46 - только тогда "срабатывает" большинство move-constructor.

P.S. Ну и сами "asio samples", кончено же, лучше брать из SVN-репозитория (trunk).

Linux support included

Начиная с этой недели проект "asio samples" поддерживает Linux.
Если быть точным, то вся поддержка заключается в том, что проекты "echo_server" и "nmea_client" собираются, запускаются и работают (протестирован только "echo_server") на Kubuntu 10.10.

Сборка и отладка производятся при помощи Qt Creator - проекты для него расположены в build/qmake/echo_server/echo_server.pro и build/qmake/nmea_client/nmea_client.pro.

Для сборки указанных проектов необходим не только Qt Creator, но и установленные Boost C++ Libraries. В теории поддерживаются все Boost C++ Libraries 1.4x, но тестирование проводилось на отдельно поставленных (согласно офиц. документации Boost) Boost C++ Libraries 1.46.