Личный опыт разработки ПО

Сборник рецептов

Boost Test, юнит-тестирование и CMake

Комментариев: 2

Boost Test

Написанием модульных тестов можно не только повысить скорость разработки за счет экономии времени на отладке, но и повысить качество. Также написание тестов позволяет критично взглянуть на интерфейсы классов и функций, что выливается в создание простых и логичных интерфейсов. Но разработка с применением тестов может не принести ощутимых плодов из-за сложности написания тестов, что выльется в слабое покрытие кода тестами. Поэтому инструмент для тестирования должен быть максимально простым, написание тестов должно происходить с приложением минимального количества усилий. Я пользовался фреймворком для написания тестов UnitTest++ – это очень хороший и удобный инструмент и если вы не используете Boost, я бы порекомендовал обратить на него пристальное внимание. Но в данной заметке речь пойдет не о нем, а о фреймворке Boost Test.

Читать заметку полностью »

24 января 2010
19:09


CMake и Boost

Комментариев: 2

В этой заметке я хочу рассмотреть тему сборки проектов использующих библиотеки Boost. Мы рассмотрим проект из исполняемого файла использующего Boost Thread и двух библиотек использующих Boost Unit Test Framework.

Первым делом необходимо установить значения переменных отвечающих за тип линковки библиотек (статическая или динамическая):

set (Boost_USE_STATIC_LIBS ON)

И использование многопоточности библиотеками:

set (Boost_USE_MULTITHREADED ON)

После этого можно выполнить уже знакомую по заметке о CMake и QT команду find_package:

find_package (Boost COMPONENTS список_нужных_модулей REQUIRED)

Дополнительно можно указать необходимую версию Boost:

find_package (Boost 1.35.0 COMPONENTS список_нужных_модулей REQUIRED)

В случае если Boost корректно установлен, результатом работы команды будет создание переменных содержащих директории с заголовочными файлами Boost и пути к необходимым библиотекам:

include_directories(${Boost_INCLUDE_DIRS})
...
target_link_libraries (${PROJECT} ${Boost_LIBRARIES})

Читать заметку полностью »

23 января 2010
18:48

Рубрика: Разработка, Сборка

Метки: ,


CMake и Qt

Комментариев: 18

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

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

Читать заметку полностью »

16 января 2010
18:36

Рубрика: Разработка, Сборка

Метки: ,


Сборка проектов с CMake. Введение

1 комментарий

Для автоматизации сборки проектов традиционно используют системы сборки, такие как make на Unix подобных системах и nmake для компилятора Microsoft. Также традиционно написание файлов для сборки проекта под эти системы является задачей нетривиальной. Конечно в пользуясь только Mictosoft Visual Studio можно даже не подозревать о существовании этих файлов, так как интегрированная среда разработки достаточно удобно скрывает всю кухню, оставляя снаружи несколько диалоговых окон и кнопку Build. Но для сложных проектов использующих массу сторонних библиотек и кроссплатформенных проектов такой подход часто оказывается неприемлемым.

Кратко говоря make-файл представляет из себя описания последовательности действий необходимых для того чтобы достичь какой либо цели, например скомпилировать программу. На псевдокоде это может выглядеть примерно так:

Что нужно сделать?

Собрать программу hello_world.

Как ее делать?

Взять файлы hello_world.h и hello_world.cpp и запустить компилятор передав их в качестве параметров.

Что делать когда компилятор закончит работать?

Взять получившийся в результате работы компилятора объектный файлы hello_world.o и запустить линковщик передав ему этот файл.

Все.

Причем каждый подпроект может иметь свой файл сборки, а главный make-файл сможет пройти рекурсивно по подпроектам, выполнив его файл сборки, а потом собрать проект из этих компонентов.

Выглядит все просто, проблемы возникают дальше и проблем несколько:

  1. Разрешение зависимостей возникающих между частями проекта
  2. Синтаксическая сложность и неоднозначность классических make-файлов
  3. Привязка к конкретной утилите автоматической сборки и как следствие непереносимость на другие платформы

Для решения части этих проблем или всех сразу были созданы следующие инструменты: Automake (http://sourceware.org/automake/) , CMake (http://www.cmake.org/), SCons (http://www.scons.org/). Список далеко не полный.

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

Читать заметку полностью »

7 января 2010
20:52

Рубрика: Разработка, Сборка

Метки:


Работа с ветвями в SVN

1 комментарий

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

  • Фиксация состояния разработки (например выпуск новой версии) к которому можно будет вернуться в любой момент.
  • Разработка независимо от основной ветви — актуально когда над проектом работают несколько разработчиков.

В этой заметке будут рассмотрены эти возможности, а также подводные камни работы с ветками и о том как их избежать.

Читать заметку полностью »

19 декабря 2009
21:29


Публикация кода online

1 комментарий

Иногда бывает нужно проверить немного кода, а компилятора под рукой нет. Или возникает необходимость обсудить что-либо с человеком доступным в данный момент только через сеть. В этом случае здорово выручит замечательный сайт Codepad. Без регистрации, быстро и удобно можно скомпилировать программу, посмотреть вывод, получить короткую ссылку которой можно поделиться с людьми и даже устроить небольшое обсуждение (вот для этого правда придется зарегистрироваться).

Поддерживаются языки: C, C++, D, Haskell, Lua, OCaml, PHP, Perl, Python, Ruby, Scheme, Tcl.

Немного погонял на C++ — ключевые слова подсвечиваются, сообщения об ошибках адекватные, можно даже использовать Boost! Резюмирую — отличный ресурс!

Повторяю ссылку: codepad.org

1 декабря 2009
20:33


WordPress, myStat и проблемы с RSS

Комментариев: 2

Сегодня прикручивая к блогу подписку по RSS обнаружил, что записи не проходят валидацию. Валидатор ругался на следующий кусок:

<img style='margin:0;padding:0;border:0;' width='1px' height='1px'
src="http://www.devexp.ru/.../plugins/mystat/mystat.php?act=time_load&id=123&rnd=123456789" />

Из чего несложно догадаться, что виновником является плагин myStat. Поиск решения в интернете успехом не увенчался, не удалось связаться и с автором — Смышляевым Евгением, так как на его сайте к сожалению нет ни адреса электронной почты, ни другой контактной информации. Но мы так просто не отступаем и я полез в код. Очевидно, что приведенный фрагмент отвечает за работу счетчика, пользователю показывают невидимую картинку, тем самым накапливая статистику, что в рассылке совершенно не требуется, а значит от этого там можно безболезненно избавиться. Сходу удалось найти место где формируется данный HTML код — это функция myStat_footer() в файле mystat.php:

1
2
3
4
5
function myStat_footer(){
	global $cmn;
	if($cmn->getParam("myStat_debug")==1){$cmn->setDebug('FOOTER LOAD');};
	echo "<img style='margin:0;padding:0;border:0;' width='1px' height='1px' src=\"".WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))."/mystat.php"."?act=time_load&id=".$GLOBALS['myStat_id']."&rnd=".rand()."\" />";
}

Небольшие исправления:

1
2
3
4
5
6
7
function myStat_footer(){
	if(!is_feed()){
		global $cmn;
		if($cmn->getParam("myStat_debug")==1){$cmn->setDebug('FOOTER LOAD');};
		echo "<img style='margin:0;padding:0;border:0;' width='1px' height='1px' src=\"".WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))."/mystat.php"."?act=time_load&id=".$GLOBALS['myStat_id']."&rnd=".rand()."\" />";
	}
}

И проблема решена.

30 ноября 2009
1:11

Рубрика: Интернет

Метки: ,


Как хранить проекты в хранилище кода?

Прокомментировать

Проект состоит как из своего кода, так и из библиотек сторонних разработчиков. Естественно возникает вопрос как хранить это добро. На этот вопрос я попытаюсь дать рекомендации на основании собственного опыта.

Основные требования:

  • Разработчик должен быстро приступить к работе не забивая голову установкой десятка библиотек.
  • Библиотеки должны быть доступны из разных проектов, при этом необходимо избежать дублирования кода в репозиториях.
  • Должна быть возможность сохранять определенные состояния проекта: новые версии, номерные сборки для тестеров и т.д.

Читать заметку полностью »


Системы управления версиями на примере Subversion. Введение

1 комментарий

До моей первой работы в качестве программиста, я решительно ничего не знал о системах управления версиями, даже данный термин был для меня пустым звуком. Объяснить что это такое и для чего оно вообще нужно, никто не посчитал нужным, поэтому пришлось выяснять это самому. Да, на некоторое время я просто возненавидел сам процесс комита, когда мне говорили, что нужно файлы добавить в таг, я бледнел, а уж когда CVS мне сообщала о конфликте в коде, я просто паниковал. На самом деле это просто еще один полезный инструмент, просто нужно понять для чего он и показать пару приемов. Собственно заметка об этом.

Читать заметку полностью »

8 ноября 2009
19:43


Заводим блог

Комментариев: 4

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

Что для этого нужно?

  1. Хостинг
  2. Движок
  3. Все настроить
    1. Настройка движка
    2. Установка темы
    3. Плагины

Читать заметку полностью »

7 ноября 2009
19:52

Рубрика: Интернет

Метки: ,