пятница, 29 августа 2008 г.

Mallocator или как написать свой аллокатор

В блоге Visual C++ Team рассказывается как писать собственный аллокатор. Там сказано, что наследование от std::allocator будет не лучшей идеей и приводится пример аллокатора на основе malloc() и free(). В примере достаточно много комментариев и показано, что поменять, чтобы получить аллокатор на свой вкус. Это хорошая отправная точка, если собираетесь написать свой аллокатор.

вторник, 19 августа 2008 г.

disabled warnings in BaseClasses

Сегодня при компиляции конструкции вида
do {
// some code
} while (false);

обнаружилось, что не выдается предупреждении об использовании константы в выражении. Небольшое расследование показало, что виноваты разработчики Microsoft. В одном из файлов BaseClasses обнаружился такой криминал:
// disable some level-4 warnings, use #pragma warning(enable:###) to re-enable
#pragma warning(disable:4100) // warning C4100: unreferenced formal parameter
#pragma warning(disable:4127) // warning C4127: conditional expression is constant
#pragma warning(disable:4189) // warning C4189: local variable is initialized but not referenced
#pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
#pragma warning(disable:4511) // warning C4511: copy constructor could not be generated
#pragma warning(disable:4512) // warning C4512: assignment operator could not be generated
#pragma warning(disable:4514) // warning C4514: unreferenced inline function has been removed
#pragma warning(disable:4710) // warning C4710: 'function' not inlined

Вывод тут можно сделать только один - нужно проверять файлы даже от доверенных поставщиков кода и, вообще, быть внимательнее.

Чтобы застраховаться в дальнейшем от таких неожиданностей, нужно сохранить состояние по предупреждениям следующим образом:
#pragma warning( push )
// include external stuff
#pragma warning( pop )

четверг, 14 августа 2008 г.

HD video & Ubuntu

Наконец произошло то, чего я совсем не ждал. NVIDIA выпустила драйвер ветки 173 под Linux, который работает с моим HD телевизором так, как мне того всегда хотелось.

Сначала немного истории... Суть проблемы была в том, что мне подарили телек HD и тут же встал вопрос как его подкючить к компу, чтобы смотреть фильмы. Для начала я тут же поменял свою видеокарту GF6800GT на GF9600GT, т.к. в последней был HDMI выход, что дает всего один кабель, по которому можно передавать звук и видео. Один кабель — это гораздо лучше, чем два. Как купить в России HDMI кабель длинной больше 2 метров — это отдельная история (мне нужен был длиной 7.5 метров). Все было подключено и спрятано в кабельканал плинтуса — просто красота. Но тут же обнаружилась одна проблема — в Ubuntu не заработал звук по S/PDIF (а у NVIDIA именно так он передается на видеокарту). Поиск по форумам дал одну надежду — ждать драйвера ветки 177 и они появились с выходом GeForce 2xx. Все вроде работало неплохо, за одним исключением — звук был очень тихим даже с вывернутым навсю регулятором громкости на компе.

И вот вчера я проверил что новенького на сайте NVIDIA по поводу драйверов. Оказалось, что появились новые рекомендуемые для GF9600GT173.14.12. Я по привычке скачал их и уже хотел поставить, как спомнил про проблему со звуком. Но попробовать все равно решил. И тут случилось то, чего я совсем не ожидал — звук не только работал с этими драйверами, но и был настолько громким, что мог бы разбудить соседей :)

Таким образом, на данный момент проблему звука можно считать оканчательно решенной. Ну разве что, кроме одной мелочи — в проигрователе Totem звук не выводится на телевизор, поэтому приходится пользоваться VLC. Пока не разбирался с этим, но думаю как-нибудь решу и эту проблему — тут хотя бы сорсы есть ;)