Easy Singleton in Groovy

Рубрика: Development, Groovy | 30 August 2007, 11:32 | Vadim Voituk

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

Приведу пример реализации шаблона Singleton на Groovy. [Далее...]

Как пасти котов

Рубрика: Книги | 29 August 2007, 13:32 | juriy

Наставление для программистов, руководящих другими программистами.

Herding Cats

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

Отсюда и название книги: “Как пасти котов” – другими словами, как заставить зверей, которые гуляют сами по себе, идти в одном направлении. То есть, целевая аудитория книги – это _начинающие_ Team Leader’ы, бывшие программисты, которые доросли до повышения и чувствуют себя на новом месте крайне некомфортно.

Автор книги – J. Hank Rainwater, в прошлом проповедник. Может, именно из-за этого книга написана в формате наставления (на путь истинный). Автор обожает метафоры и цитаты. Цитирует все: от Мастера Йоды до Искусства войны.

Книга разбита на главы: каждая глава посвящена одному из аспектов работы лидера команды: подбор команды и взаимопонимание с разработчиками, проведение совещаний, самоорганизация, и т.д. Сказать что советы блещут новизной нельзя – любой, кто руководил хоть кем-то в своей жизни, должен их знать. К примеру: “хвалить сотрудников нужно публично, а порицать – с глазу на глаз”.

Не могу сказать, что книга – очень полезна, но читать ее приятно. Перевод почти не хромает (если не считать “эталоны” проектирования вместо “шаблонов”). Самая основная мораль, которую лично я для себя почерпнул: хватит читать техническую литературу по специальности, надо почитать что-нибудь из других областей, там тоже много интересного.

Мой вывод – книга, конечно, не “must-read”, но при наличии свободного времени прочесть стоит. Тем более, есть перевод.

P.S. Как непривычно читать по-русски!

Groovy работа с базой

Рубрика: Development, Groovy, Java | 28 August 2007, 16:27 | juriy

Сегодня возникла простая задачка: необходимо было выбрать из базы фрагменты строк, которые соответствовали некоторым признакам. Коллега засучив рукава принялся писать громоздкий SQL запрос, который то и дело работал не так как надо. В таких случаях я пишу небольшие Java программки, которые решают проблему.

Сегодня у меня возникло желание научить коллегу писать подобные решения, но объяснять человеку как скомпилировать класс, подключить в classpath JDBC драйвера, почему нужно ловить исключения, открывать и закрывать потоки для записи файла, использовать промежуточный объект Statement не было времени. [Далее...]

Agile Project Management with Scrum

Рубрика: Development, Книги | 27 August 2007, 08:06 | juriy

scrum_manage_cover

На выходных (благо, их целых три было) дочитал книгу “Agile Project Management with Scrum”. В этой небольшой заметке я поделюсь своими впечатлениями.

Книга, естественно, о SCRUM. Вернее не о самом SCRUM, как о процессе, а о применении и адаптации SCRUM в самых разных ситуациях. Вся книга составлена на основе пары десятков “кейсов”, т.е. примеров и ситуаций, которые предстоит решить. Некоторые из кейсов показались мне уж слишком “наигранными”: сначала все в них плохо, потом приходит SCRUM и все сразу очень хорошо – менеджмент рад, шерсть программистов сияет здоровьем, ну и.т.д. Но этот маленький нюанс не мешает чтению.

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

Еще один нюанс: формальный обзор самого процесса представлен только в первой главе, то есть материала совсем мало. Где-то до середины книги мне было тяжело уловить суть SCRUM: наверное нужно было вначале прочесть “Agile Software Development with SCRUM”.

Резюме – книгу стоит прочесть. Даже если вы не работаете по методологии Scrum материал полезен “для общего развития”.

Как всегда напоследок о “языке” (о том, который English). Книжечка читается несколько сложнее, чем обычная статья по какой-нибудь технологии, так что если чувствуете себя неуверенно – IMHO лучше держать под рукой словарик.

Simple HTTP server in 10 lines of Groovy code [En]

Рубрика: Development, Groovy | 26 August 2007, 11:35 | Vadim Voituk

There was a simple task to get all HTTP-headers, sent by my mobile browser to web-server.
I have no time to setup some additional software to “catch” HTTP-headers, so i have write such tiny (10 lines only) Groovy script:

if (init)
	data = "";

if (line.size() > 0) {
	data += line + "\n"
} else {
	println "HTTP/1.0 200 OK\n"
	println data
	return "success"
}

Run this code in a TCP listener mode:
$ groovy -l 8000 Web2.groovy
groovy is listening on port 8000

And point your browser to http:///myserver:8000

Разбор дат в Java

Рубрика: Java, Юмор | 23 August 2007, 10:32 | juriy

Как известно, самый простой способ проверить в Java возможность выполнения некоторой операции, это попробовать ее выполнить в блоке try-catch и посмотреть что будет. До недавнего времени я использовал эту нехитрую методику для проверки корректности даты, записанной в виде строки. Получался приблизительно такой код:

[java]

try {
	DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
	dateFormat.parse("01.08.2007");
} catch (ParseException e) {
	// Дата введена некорректно
}

[/java]
Каково же было мое удивление, когда абсолютно безобидная с виду дата: “40.40.2000″ отлично пропарсилась ;) Попробуйте, если интересно, исполнить у себя такой код:

[java]

try {
	DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
	System.out.println(dateFormat.format(dateFormat.parse("40.40.2000")));
} catch (ParseException e) {

}

[/java]
У меня в консоли: 10.05.2003. Интересно, это баг или фича?

Напоследок, улыбнуло: [Далее...]

Using Groovy instead of Ant…

Рубрика: Development, Groovy, Java | 17 August 2007, 09:26 | Vadim Voituk

… or flexible build process using Groovy

Consider you need to create 30-40 build artifacts (depending of some params) during build process.
Or maybe to embed some static data, gathered from remote servers using network protocols into your application.
Or fill-in your test database before starting unit/functional testing with data in a non-trivial way.

The classic way to solve this issue is to create a-thousands-line-long build script that is hardly readable and impossible to support.
[Далее...]

HTTP-ECHO server in 10 lines of code

Рубрика: Development, Groovy | 16 August 2007, 16:11 | Vadim Voituk

Нужно было быстро определить http-заголовки которые отправляет мой web/wap-браузер на сервер при запросе.
Написал такой 10-ти строчный скрипт на Groovy:

[java]
if (init)
	data = "";

if (line.size() > 0) {
	data += line + "\\n"
} else {
	println "HTTP/1.0 200 OK\\n"
	println data
	return "success"
}
[/java]

Запустил в режиме “listener”:
$ groovy -l 8000 Web2.groovy
groovy is listening on port 8000

Перешел в браузере на http:///myserver:8000 и вижу все заголовки, которые прислал мой браузер при запросе. Вуаля!

PHP pre-interview from Yahoo

Рубрика: Development, Работа | 14 August 2007, 08:43 | Vadim Voituk

Nick Halstead опубликовал в своем “The Programming and Management Blog” список из 22 вопросов, которые задавались кандидату на должность PHP-разработчика в Yahoo.

C разрешения Ника, публикую их здесь.
[Далее...]

Не ant-ом единым…

Рубрика: Development, Groovy, Java | 10 August 2007, 08:52 | Vadim Voituk

… или гибкая сборка проекта с помощью Groovy

English version of this article

Предположим, что в пrроцессе сборки вам нужно собрать под 30-40 билдов с разными параметрами.
Или внедрить в приложение статистические данные удаленных серверов.
Или нетривиальным образом заполнить тестовую базу перед началом модульного/функционального тестирования
Ко всем прочему не хотелось в итоге вместо сценария сборки, получить кучу “хаков” больше похожих на лапшу из псевдо-кода и Ant-xml, не поддающихся модификации. [Далее...]

Страница 1 из 212