En

Половина ClojureCup позади

Хатник

Как можно догадаться, в этом году я участвую в ClojureCup. Мы (я и Максим) работаем над проектом под названием Хатник. Это веб приложение для отслеживания релиза библиотек. Идея весьма проста: настроить действия, которые будут выполняться как только библиотека зарелизилась. Действие состоит из 2 частей: названия библиотеки и инструкции, что сделать, когда она зарелизится. Например: послать письмо на me@nbeloglazov.com, когда org.clojure/clojurescript зарелизит новую версию. Проект немного сходен с IFTT (наш более специализирован) и очень похож на Artifact Listener (но наш конечно будет круче!). Мы собираемся реализовать следующия действия: емейл, создание баги на гитхабе, создание пул реквеста на гитхабе, изменения вики на гитхабе. Изначально будет только емейл, а остальное будем делать как будем успевать до конца контекста.

Организаторы предоставили достаточно много дополнительных сервисов: приватный репо на гитхабе, сервер для хостинга приложения, CI сервера, какая-то штука для отслеживания ошибок, командный чат и другие. Но мы используем только пару из них: репо на гитхабе, сервер для приложения и командный чат: в нём есть интеграция с гитхабом и трелло, так что достаточно удобно видеть активность в репозитории и таск листе. Хоть остальные сервисы и выглядят интересно - мы решили их не трогать, т.к. их настройка заняла бы больше времени, чем принесло бы пользы.

Архитектура

Приложение состоит из 3 частей:

  • Веб клиент - то, что видит юзер и с чем он взаимодействует.
  • Веб сервер - предоставляет API для клиента и сохраняет всё в БД.
  • Воркер сервер - периодически проверяет версии всех зареганых библиотек и выполняет действия.

Я работаю над серверами, а Максим над клиентом. Для клиента мы решили использовать ClojureScript + Om и Twitter Bootstrap для модненьких кнопочек и всего остального. Серверные библиотеки весьма стандартные: ring, compojure, monger и несколько остальных для работы гитхабом, емейлами и всего остального. Больше деталей можно найти в нашем дизайн доке, который мы подготовили заранее, чтобы сконцетрироваться на кодинге!

Что у нас есть на данный момент

Я бы сказал, у нас есть достаточно много:

Веб клиент

Клиент может загружать и показывать проекты вместе с действиями. Можно добавлять новые проекты. Что осталось: добавления/модификацию действий, логин (всё уже готово, осталось добавить кнопки) и красивую "About" страницу, которая описывает как-зачем-и-почему.

Веб сервер

Веб сервер практически весь сделан. REST API реализовано, всё сохраняется в БД. БД представлена протоколом с 2 реализациями: в памяти и на монге. Может это и оверкил было делать 2 реализации, но весьма удобно запускать всё в памяти локально. Тогда не надо обоим членам команды мучаться с установкой монги и всем таким. Я даже написал тесты для БД! Так же я использовал Postman (плагин для хрома) для тестирования REST API. Он достаточно крут, т.к. позволяет сохранять запросы и переиспользовать их потом. В идеале я должен был написать тесты вместо этого, но из-за ограниченного времения я выбрал Postman: он проще настраивается и используется.

Воркер сервер

На данный момент сервер может только посылать емейлы по запросу пользователя: когда на клиенте создаёшь действие, то можно его протестировать, тогда запрос на тест уходит на воркер сервер и тот его выполняет. Что осталось: добавить логику для проверки версий всех зарегистрированных библиотек, выполнение действий для изменившихся, и настроить периодический вызов этого всего счастья.

Заключение

Я получаю кучу удовольствия от соревнования! Я не помню, когда в последний раз писал так много кода. В последнее время я кожу/кодю на работе гораздо меньше, так что ClojureCup очень кстати. Особенно, когда есть отмазка, чтобы не писать кучу тестов, а кодить просто ради кодинга. Если интересно посмотреть на то, что у нас есть на данный момент - гитхаб репо, там конечно всё без комментов, так что наверное непонятно. И конечно не забудьте проверить наше приложение после окончания контеста!

Опубликовано 27 Sep 2014

comments powered by Disqus