пятница, 22 октября 2010 г.

Главное - чистота и порядок!

Возвращаюсь. Буду писать (надеюсь) всякие мелочи, возникающие по ходу. Вот сегодня вспоминал, и не вспомнил :). Нашлось в гугле естественно.

Для того, чтобы всякое нестандартное не расползалось по системе есть CheckInstall. Просто и надежно, например:
sudo checkinstall make install_package

среда, 26 мая 2010 г.

Howto print floating point numbers quickly.

Совершенно неожиданно столкнулся с тем, что вывод (печать) чисел с плавающей точкой дорогая операция. Замеров не проводил, объективных данных нет, но по тому что выдает гугл видно, что проблема действительно существует. Выход простой - определиться с точностью и выводить отдельно целую и дробную части как целые. Ну и ссылка для тех что хочет углубиться (сорри, не помню где нашел).

понедельник, 30 ноября 2009 г.

Google Wave инвайты

Порядком поднадоела эта суета сует вокруг распухающего гиганта. И я, наверное, один из немногих, кто не испытавает хоть какого-то восторга от нового сервиса. Посему предлагаю: в обмен на дозу вау-эффекта отдаю инвайты. Тот, кому они нужны, навярняка знает, зачем они ему ;) . Ничего не жалко, усё отдам.

понедельник, 7 сентября 2009 г.

Boost::normal_distribution example

Этот пост для больших любителей типа меня читать документацию по диагонали десять раз одно и то же не замечая искомого, ну и себе в записную книжку естественно ;)

// create the random number generator N(0,0.1) 
boost::mt19937 randomness;
typedef boost::normal_distribution<double> dist_type;
dist_type norm_dist(0.0, 0.1);
boost::variate_generator< boost::mt19937, dist_type > noise(randomness,
norm_dist);

...
noise()
...

Подсмотрел здесь.

суббота, 8 августа 2009 г.

Assert vs Breakpoint

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

Последнее время заметил одну особенность, возникла она как-то сама собой, но потом, стала очевидно простой и понятной. Я как-то совершенно внезапно перестал пользоваться точками останова в процессе отладки кода. Не скажу, что до этого я пользовался ими часто, как правило первое что я делал, начиная разбираться в незнакомом и/или некорректно работающем коде - искал возможность воспользоваться существующими в проекте средствами журналирования или встроить свои собственные (элементарный stdout меня как правило более чем устраивал).
И вот разбираясь в новом коде, практически на автомате пишу.. assert(0). Оказалось, такой подход, по крайней мере лично для меня, имеет некоторые преимущества:
  • полностью сохраняется модель отладки приложения: расстановка точек останова, запуск, пошаговое выполнение;
  • возможность в явной форме записать условие продолжения выполнения (инвариант) кода;
  • особо важные утверждения относительно корректности выполнения кода могут служить основой написания тестов и/или проверок корректности данных.

Второй пункт возможно расценивать и таким образом - использование assert(..) вместо точек останова принуждает к более осмысленному поведению: формулировка гипотезы, эксперимент, анализ результатов.

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