воскресенье, 4 октября 2009 г.

Чак Норрис и Continuos Integration

Что общего может быть у Чака Норриса и Continuos Integration ?
Я тоже думал что ничего общего нет, пока не открыл для себя Hudson. Hudson - это open source continuos integration and build management server, аналог Cruise Control и Apache Continuum. Для него написано много плагинов, один из них - Чак Норрис плагин. Этот плагин рисует Чака Норриса в разных эмоциональных состояниях в зависимости от статуса билда. Если билд прошел - то Чак улыбается, иначе Чак стоит в боевой стойке готов надавать звиздюлей тому, кто поломал билд.



До Гудзона я работал с CruiseControl и Apache Continuum. Cruise Control это наверное самый популярный CI Server, если его правильно настроить то работает как часы. Я был разочарован Apache Continuum, это сырой продукт, версия 1.2.3 по качеству скорее beta чем release, хотя можно его настроить и тоже будет работать.

Я считаю что Hudson лучший из этой тройки потому что:
  • удобный GUI интерфейс для администрирования
  • система аутентификации пользователей может использовать как свою базу данных ролей и юзеров, так и аккаунты Linux или Windows
  • Можно создать кластер и распределять билды по нодам
  • Много разных плагинов
  • Уникальная фича - можно по артефакту найти номер билда в котором он был создан
  • Инкрементальный билд для многомодульных билдов Maven'а
  • Hudson отслеживает выход новых версий (в том числе плагинов) и сам предлагает обновиться через GUI
  • Распространяется как war
  • Чак Норрис плагин :)

четверг, 17 сентября 2009 г.

Новая фича в Apache Maven - инкрементальный билд

В новой версии 2.2.1 Мавена появилась возможность делать инкрементальный билд. Инкрементальный билд - это когда при изменении одного модуля мы пересобираем не весь проект, а только те модули, которые используют код измененного модуля.

Например, зависимости выглядят так:

A
/ \
B C
/ \
D E

Модуль A зависит от B и С, а B зависит от D и E.

Допустим, в код модуля D внесли изменения.

набираем mvn -amd -pl D сlean install

В результате будут пересобраны три модуля - D, B и A. Модули C и E не будут собраны потому что они не зависят от D напрямую или косвенно.

четверг, 27 августа 2009 г.

Локальный SMTP и POP3 сервер для development mode

Сейчас я работаю над системой одной из функций которой является рассылка пользователям e-mail'ов (aka мыла), серверную часть мы пишем на java. Когда система работает в production mode, она отсылает мыло на реальные адреса пользователей. В процессе разработки мы все запускаем наш java сервер на воркстейшенах, и конечно, нужен SMTP сервер на который система отсылала бы мыло в development mode, и нужен POP3 cервер чтобы читать это мыло. К счастью, в Ubuntu Jaunty появился новый пакет - dovecot-postfix. Он содержит POP3 и SMTP сервер. При инсталляции спрашивает тип установки - я выбрал local. После установки на воркстейшене появляются SMTP и POP3 серверы готовые к использованию. В настройках java сервера указываю что SMTP сервер находится на localhost. Теперь нужно поправить конфиг файл для SMTP сервера (Postfix) чтобы он редиректил всю почту на мой аккаунт на локальном POP3 сервере. Для этого нужно прописать в файле /etc/postfix/virtual-regexp правило
# Rewrite all addresses to sgr@localhost
/.+@.+/ sgr@localhost

и добавить в /etc/postfix/main.cf строку
virtual_maps = regexp:/etc/postfix/virtual-regexp

Готово. Перезапускаем Postfix чтобы он перечитал конфиг файл.
Теперь вся почта, которая посылается java сервером, редиректится на мой аккаунт. Осталось настроить почтовый клиент ( я использую evolution) чтобы он забирал почту с локального аккаунта на POP3 сервере, логин и пароль тот же что и для входа в Ubuntu.

пятница, 14 августа 2009 г.

Как смотреть прогресс восстановления базы данных MySQL из дампа

Недавно открыл для себя чрезвычайно полезную утилиту pv. Раньше я импортировал дамп базы данных MySQL так:

mysql my_database < dump.sql

Я не указываю для команды mysql хост, логин и пароль, потому что эти настройки хранятся в файле my.cnf. Если дамп достаточно большой, он может импортироваться несколько часов. Чтобы увидеть прогресс импорта нужно сделать так:

pv dump.sql | mysql my_database

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

Как работает Ubuntu Support Team

У меня возникла проблема, впервые за два года использования Ubuntu я не смог найти решение в интернете, пришлось писать на форум Ubuntu. Я запостил вопрос и думал что мне ответят на следующий день в лучшем случае. Я был приятно удивлен когда через 10 минут после того, как я запостил мой вопрос, я получил на e-mail нотификацию про ответ. Возвращаюсь на форум, там написано что у меня есть новое личное сообщение. Читаю (вольный перевод с английского)

Дорогой юзер,

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

Дальше ссылка на топик форума как решить проблему.

Что тут можно еще добавить? 10 минут это отличный результат.

YAML is XML for human beings

Недавно я скачал себе Google App Engine SDK для питона, и один из конфиг файлов назывался config.yaml. Я заинтересовался, что за YAML, и оказалось что YAML это такой язык, альтернатива XML. Как и XML, YAML создан для описания данных, но предназначен для чтения людьми, а XML как мы знаем, предназначен для чтения компьютерами. Действительно, YAML визуально воспринимается намного лучше чем XML. В этом читатель может легко убедиться, зайдите на Official YAML Web Site, главная страница написана на YAML.

Я предпочитаю использовать YAML для конфиг файлов вместо XML. Еще одно возможное применение - данные для юнит тестов.

суббота, 25 июля 2009 г.

Mercurial для сисадмина

Я уже пол-года как спрыгнул с Subversion и использую Mercurial для разработки, оказывается что эта чудесная система контроля версий может быть использована не только программистами, но и сисадминами. Очень удобно ( и полезно) положить конфиг - файлы в Mercurial. К примеру, мне приходится править конфиг файл для Cruise Control, и хочется иметь возможность отслеживать историю изменений файла. Задача решается просто. Заходим в папку где лежит конфиг файл для Cruise Control

hg init // создаем репозиторий
hg add config.xml // добавляем в репозиторий конфиг файл для Cruise Control
hg ci -m 'initial commit' // коммитим конфиг файл

Теперь наш конфиг файл в репозитории Mercurial

Допустим, я (или другой человек) внес измненения в конфиг файл.

Делаем hg ci -m 'Added e-mail notification for nighty build'

Новая версия файла попадает в репозиторий.

Чтобы посмотреть историю изменений в файле набираеем hg log


Можно трекать изменения в папке /etc

cd /etc
sudo hg init // создаем репозиторий для папки etc
cd X11
sudo hg add xorg.conf // трекаем изменения в файле xorg.conf
sudo hg ci -m 'initial commit'

В этом случае я использую Mercurial как своеобразное расширение функциональности файловой системы которое позволяет трекать историю изменения файлов в папке.

Еще одна причина почему Linux рулит

Я занимался разработкой на Java под Linux два года на моем прошлом месте работы, в октябре 2008 года перешел в другой проект, cменив OS на Windows. Поработав пару месяцев я понял что на Windows мне работается хуже чем на Linux, не потому что Windows плохой а Linux хороший, а потому что я принадлежу к Unix culture, и мне многие вещи быстрее и проще делать в командной строке. Поэтому я поставил себе Ubuntu и вроде бы все хорошо, но free -m
показывает что в системе только 3.2 гигабайта RAM, хотя физически установлено 2 модуля по 2 GB, тоесть 800 MB не доступно.
Оказывается что обычный kernel в 32- разрядном ядре, которое инсталируется при установке Ubuntu, не может адресовать больше чем 3.2 GB, но можно (и нужно) поставить server kernel который скомпилирован таким образом что видит больше чем 3.2 GB памяти. Теперь 32- разрядное ядро Ubuntu видит 4 GB памяти и все в порядке :)

пятница, 17 июля 2009 г.

Практическое применение Ubuntu One в разработке

Ubuntu One это бесплатный online storage service который предоставляет Сanonical. После инсталляции клиента на Убунту у вас появляется папка содержимое которой синхронизируется с сервером. Бесплатно дают 2 GB. Также есть доступ к файлам через web интерфейс. В Википедии написано что Ubuntu One использует Amazone S3. Это очень удобная вещь если вы работаете с разных компьютеров над одним проектом. Мне часто приходится переключаться с ноутбука на workstation и обратно (на обоих стоит Ubuntu), поэтому я храню конфиг файлы для приложений в папке которая синхронизируется с сервером. Например, я работаю над web application которое читает конфиги из папки ${CATALINA_HOME}/data. Есть папка ${HOME}/Cloud_Storage на воркстейшене и ноутбуке которая шарится через Ubuntu One.

На воркстейшене делаю

mv ${CATALINA_HOME}/data ${HOME}/Cloud_Storage
ln -s ${HOME}/Cloud_Storage/data  {CATALINA_HOME}/data

теперь кликаю мышей на меню "сonnect" Ubuntu One, файлы записываются на сервер

на ноутбуке
ln -s ${HOME}/Cloud_Storage/data  ${CATALINA_HOME}/data


теперь конфиг файлы на ноутбуке и воркстейшене одинаковы. Закончил работать с ноутбуком, опять кликаю мышей на меню "сonnect" Ubuntu One. Потом прихожу на работу, синхронизирую папку и вижу последние измненения в конфигах.

воскресенье, 5 июля 2009 г.

Билдим Flex используя Maven

Год назад я начал работать над RIA, клиент - flex, сервер - java. Решил использовать maven для билда, java билдилась без проблем, а вот с flex пришлось повозиться. Тогда я нашел единственный maven плагин для flex, Israfil Mojo. С ним были проблемы, потому что плагин не поддерживает все опции для компилятора, поэтому часть опций я вынес в конфиг файл, и указал плагину что нужно использовать конфиг файл. Вторая задача которую нужно было решать - это запаковать flex приложение в war. Задача решилась просто, Israfil Mojo позволяет копировать flex-артефакты из репозитория maven в указанную папку.

Месяц назад случайно нашел еще один maven плагин для flex, mvnflexplugin. Этот плагин мне нравится намного больше, потому что он поддерживает больше опций компилятора и поддерживает rsl, поэтому я перевел мой проект на этот плагин. Mvnflexplugin не копирует flex-артефакты из репозитория в war, но эта задача решается с помощью maven-dependency-plugin.

суббота, 4 июля 2009 г.

Вышел Review Board 1.0

Недавно вышел Review Board 1.0. Это замечательный code review tool, я использую на работе beta версию и очень доволен. Рекомендую всем кто хочет улучшить code review процесс. Review Board намного лучше чем Codestriker о котором я писал раньше.