Friday, May 27, 2011

QA-Club

Вчера прошел мой доклад в рамках QA-club. Спасибо организаторам за предоставленную возможность выступить. Итак все материалы по докладу:

Презентация

Пример
Для работы проекта необходима подтянуть следующие библиотеки ScalaMate (позволяет использовать dependency injection в scala test), webelement-wrappers (позволяет убодно работать с html элементами).

Ссылки для дальнейшего ознакомления
BDD:

Dependency Injection:
Рекомендую посмотреть видео

Code Review
Удобная система для Code Review rietveld
Видео от разработчика

DVCS

Saturday, May 14, 2011

To GWT or not to GWT

Прошло время, когда web-разработка заключалась в обработке HTTP запросов и рендеринге соответсвующей html странички. Сейчас, куда не плюнь, везде требуется Rich UI. У java разработчика есть выбор: либо писать rich ui на javascript'e, либо воспользоватся GWT платформой, и писать на родимой жаве.

В последнее время мне удалось поработать с GWT, итак за и против.

За GWT:

1. Не нужно учить javascript. Если вы гуру и не одну собаку съели педаля на жабе и принципиально не хотите учить javascript, то gwt в самый раз.

2. Все приимущества java. Статическая типизация, IDE, дебаггер, рефакторинги, анализаторы кода -- все к вашим услугам.

3. Один код на сервере и на клиенте. Код написанный для сервера может быть скомпилирован в javascript и работать на клиенте.

4. Google. GWT разрабатывается, не командой волосатых программистов из гаража, а корпорацией google и используется в проектах компании.

5. Кросс-браузерность. Разрабатывая с помощью GWT можно не беспокоится про кросс-браузерность, клиент компилируется в поддерживаемый современными браузерами код.

Против GWT:

1. Java == No fun. Писать на жаве UI неудобно. Количество строк кода в результате -- огромно.

2. Медленно. Скорость разработки на GWT на порядок меньше чем с помощью javascript'a. В большинстве из-за количества кода, которое приходится писать. Скорость работы GWT-овского компилятора уничтожает желание использовать GWT.

3. Отсутсвие подходов к написанию программ с помощью GWT. Best practices и подходы по написанию программ с помощью GWT постоянно меняются. RequestFactory и Activity Framework до сих пор сырые.

Wednesday, May 11, 2011

ZooKeeper Intro

Любое распределенное приложение не может обойтись без центрального сервиса, который координирует процессы в нем. Реализовывать координацию можно, однако разработка отказоустйчивой системы координации без deadlock'ов и race conditions -- задача не из тревиальных. Проект Apache ZooKeeper призван избавить нас от решения этой проблемы.

ZooKeeper -- это распределенный, open-source сервис координнации для расспределенных приложений. Он предоставляет низкоуровневый API, с помощью которого приложения могут реализовать высокоуровневые сервисы для координации и синхронизации процессов в расспредеелнной системе.

API ZooKeeper'a черезвычайно прост. Распределенные процессы могут координироваться между собой с помощью расшаренной на всех клиентов иерархии znode'ов, организация которых по структуре похожа на файловую систему. Как и в файловой системе каждый znode идентифицируется своим уникальным путем, вида /node1/stuff/logs. В отличии от привычной файловой системы, каждый znode может быть корневым узлом для других znode'ов. Если говорить в терминах файловой системы: файл может выступать в роли директории. Znode'ы версионируются и ZooKeeper позволяет "смотреть"(watch) за изменениями в ноде. Как только znode'a изменяется, клиент, смотрящий за нодой, получает пакет, который говорит что в ноде произошло измение.


ZooKeeper
 реплицируемый и обрабатывает команды в строгой последовательности. Первое намного повышает его надежность, второе дает возможность пользователям разрабатывать примитивы синхронизации для распределенных систем. Все данные ZooKeeper держит в памяти, что позволяет ему работать черезвычайно быстро. Разработчики дауют нам следующие гарантии:
  • Sequential Consistency - Обновления от клиента будут применены в порядке в котором они были отправены
  • Atomicity - Изменения от клиента атомарны, они либо исполняются либо нет
  • Single System Image - Клиент получет одинаковый набор znode'ов вне зависимости от того к какому серверу он подключен
  • Reliability - Как только измение было применено, состояние будет неизменно до тех пор пока клиент не перетрет его
  • Timeliness - Состояние системы для клиент гарантированно up-to-date с некоторой погрешностью по времени

Wednesday, May 4, 2011

Почему Scala?

Выразительный синтаксис

Скала позволяет писать код без избыточных символов и дает возможность создавать DSL-подобный код:
  • Необязательно ставить точки с запятой в конце строки
  • object.doSomething() равнозначен object doSomething()
  • Инфиксные операторы
Поддержка функционального программирования

Scala предоставляет мощь объектно-ориентированного программирования, добавляя к нему изящные подходы из функционального
  • Поддержка функций высокого порядка
  • Поддержка замыканий

Улучшенное ООП

Скала добовляет поддерживает ОО парадигму Java-мира, расширяя ее систему типов
  • Trait (mixin) -- интерфейсы, которые могут включать логику и позволяют реализовать множественное наследованиеBulleted List
  • Case классы для быстрого создания value object'ов. В скале можно не писать getter'ов, setter'ов, equals и hashCode
  • Duck typing со статической типизацией