Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

OdHac: международный Haskell-хакатон в Одессе

С 3 по 5 мая в офисе одесской компании Provectus IT прошел международный Haskell-хакатон — OdHac. Событие уникальное для наших краев — впервые Haskell-хакатон такого уровня проводится в Восточной Европе.

История Haskell-хакатонов

Первый Haskell-хакатон состоялся в 2006 году в Портленде (США). Его целью было привлечь новых разработчиков к работе над главным компилятором Haskell, GHC. GHC — большой и сложный проект, и, несмотря на детально комментированный код, новичку может быть сложно в нем разобраться. Поэтому Simon Marlow и Simon Peyton Jones, главные разработчики GHC, провели экскурсию по внутренностям GHC для участников хакатона.

Идея всем понравилась, и с тех пор хаскельные хакатоны проводятся регулярно — в среднем по 1-2 раза в год в Европе, Америке и Австралии. В Европе хакатоны проходили в Оксфорде (Англия), Фрайбурге (Германия), Гётеборге (Швеция), Утрехте (Нидерланды), Эдинбурге (Шотландия), Цюрихе (Швейцария), Генте (Бельгия) и Кембридже (Англия)

OdHac

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

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

В итоге, на хакатон приехало 27 человек из Украины, России, Англии, Швейцарии, Голландии, Венгрии и Бельгии.

Формат

Хакатоны в Украине были популяризированы командой ДОУ под именем ДОУ хакатонов. Интересно сравнить форматы ДОУ- и Haskell-хакатонов.

Haskell-хакатон длится не два дня, а три. Это связано с тем, что участники преодолевают большие расстояния чтобы попасть на мероприятие, и хотят получить больше отдачи за потраченное время и деньги. Многие остаются еще на один день до или после хакатона, чтобы познакомиться с городом, в котором он проходит.

Мы не пытаемся работать ночью. На OdHac мы начинали работать около девяти утра, и заканчивали в пол-восьмого вечера. После «рабочего дня» мы шли в один из одесских пабов, чтобы ближе познакомиться, обсудить проекты и планы на следующий день. Социализация — важный элемент хакатона, и она лучше происходит за бокалом пива, чем за компьютерами. Ближе к полуночи мы расходились по отелям и домам, чтобы на следующий день приступить к работе с новыми силами.

Проекты, над которыми работают на Haskell-хакатоне, отличаются не только языком программирования, но и целью. На ДОУ хакатонах основная масса проектов — это продукты, веб-приложения. На Haskell-хакатонах мы стараемся работать над open source библиотеками и инструментами для Haskell. Не всегда это — «клевые» штуки, которые можно продемонстрировать в красивых демках. Это может быть долгожданный рефакторинг кода, фикс багов, написание документации. Одним словом, задачи, которыми сложно заставить себя заниматься в свободное время. Но на хакатоне все меняется — есть время, есть цели, и, самое главное, есть очень сильная поддержка коллег.

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

Проекты

Hakyll

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

Идея Hakyll в том, что сайт описывается на Haskell. Hakyll предоставляет комбинаторы (т.е. функции высших порядков), которые превращают Haskell в DSL для описания сайтов.

На хакатон приехал Jasper Van der Jeugt — автор и главный разработчик Hakyll, который и возглавил команду Hakyll-хакеров на OdHac.

Иван Веселов реализовал поддержку teasers — коротких отрывков постов, которые показываются на главной странице блога и ведут к полным текстам постов. По ходу дела он также добавил в шаблонизатор Hakyll поддержку условных операторов.

Антон Дубовик реализовал pagination — разбивку контента на страницы.

Павел Поух работал над автоматическим обновлением контента в браузере с использованием WebSockets.

Ребята также исправили несколько багов в Hakyll, связанных с производительностью, разрешением зависимостей и работой под Mac OS X.

Jasper написал о работе над Hakyll на OdHac в своем блоге.

Fay

Сегодня доступно большое число языков, компилирующихся в JavaScript. Это и новые языки (CoffeeScript, TypeScript, Dart), и JavaScript-бекенды для существующих языков (ClojureScript, Opal, pyjs).

Haskell не отстает от тренда. Уже несколько лет существуют JavaScript-бекенды для компиляторов UHC и GHC. Но они используют JavaScript как ассемблер, в следствие чего сгенерированный JavaScript-код трудночитаем и объемен.

Fay — это более «интеллектуальный» компилятор Haskell в JavaScript. Он старается по возможности транслировать Haskell в похожий по смыслу, идиоматичный JavaScript.

Команду Fay на OdHac возглавил Adam Bergmark, один из главных разработчиков и текущий мейнтейнер Fay.

Наибольшей популярностью пользовались проекты по созданию байндингов для Fay к существующим JavaScript-библиотекам. Так, Андрей Лелеченко занимался связыванием с Raphael.js, Макс Талдыкин — с Knockout.js, Алексей Леван — с Backbone.js.

Дмитрий Вьяль и Александр Лебедев экспериментировали с функциональным реактивным программированием (FRP) на Fay.

Сергей Бушняк начал работу по портированию Fay с собственного резолвера имен на haskell-names.

Cabal

Cabal — инструмент для сборки Haskell-пакетов и приложений. Это один из ключевых элементов инфраструктуры Haskell. К сожалению, количество человеко-часов, уделяемых Cabal, не соответствуют его важности для сообщества.

На хакатоне образовалась группа энтузиастов, желающих поработать над Cabal и сократить число открытых багов: Dominic Steinitz, Bram Schuur и Александр Манзюк.

Cabal-команда сделала прогресс по около 12 багам. Dominic детально задокументировал работу команды в своем блоге.

Bram также реализовал очень полезную фичу для тестирования Haskell-пакетов. Пакет может указать минимальную совместимую версию для каждой зависимости. Поскольку, как правило, пакеты компилируются с относительно свежими версиями зависимостей, нижние границы редко проверяются и, как следствие, устаревают. Bram добавил опцию сборки --lowest-dependencies, которая пытается скомпилировать пакет с минимальными версиями всех зависимостей и таким образом протестировать актуальность ограничений на версии.

Halberd

Halberd — новый проект, начатый на OdHac. Его идея в том, чтобы автоматически импортировать необходимые модули, если текущий файл содержит неопределенные идентификаторы.

Например, если в программе встречается не определенное ранее имя try, Halberd найдет его в модуле Control.Exception и добавит в начало файла строчку

import Control.Exception

Со временем Halberd будет интегрирован в основные редакторы, используемые для Haskell, такие как vim и emacs.

Над Halberd на хакатоне работали Erik Hesselink и Simon Meier, используя библиотеку для разрешения имен haskell-names, написанную автором этой статьи.

Другие проекты

Martijn van Steenbergen и Sjoerd Visscher работали над json-grammar — комбинаторами для построения сериализаторов и десериализаторов в/из JSON. Главное отличие этой библиотеки от аналогов состоит в том, что у пользователя есть возможность описать свой собственный JSON-формат, но при этом парсер и принтер описываются одновременно, и автоматически будут совместимы друг с другом. Библиотека основана на частичных изоморфизмах и использует идеи из стекового (concatenative) программирования.

Sebastiaan Visser и Tom Lokhorst экспериментировали с представлением абстрактного синтаксического дерева (AST) Haskell, в надежде сделать Haskell-код более удобным для программного редактирования.

Владимир Кириллов разбирался с внутренностями GHC с целью добавить некоторые фичи из Erlang — такие, как сбор статистики (например, использование памяти) по потокам. В настоящее время такая статистика доступна только для процесса в целом.

Jasper Van der Jeugt помимо руководства командой Hakyll еще работал над своим дипломным проектом. В Haskell широко используется foldr/build fusion — оптимизация, которая позволяет превратить цепочку преобразований списков в одно преобразование, тем самым избегая создание промежуточных списков. На данный момент эта оптимизация применяется только лишь к преобразованиям, которые выражены через высокоуровневые комбинаторы, такие как map или filter. Идея Jasper’а состоит в том, чтобы делать эту оптимизацию для функций, написанных в рекурсивном стиле.

Заключение

Хакатон в Одессе был, вероятно, самым масштабным Haskell-мероприятием, которое когда-либо проводилось в Украине.

Мы очень благодарны компании Provectus IT, которая приютила хакатон в своем замечательном офисе.

Возможно, кто-то после прочтения этой статьи заинтересуется языком Haskell. Odessa Haskell User Group проводит встречи каждый месяц. В Киеве тоже проходят встречи функциональщиков, но менее регулярно (они обычно анонсируются в «Событиях» на ДОУ). Наконец, в конце месяца состоится конференция HotCode, где будет отдельный поток, посвященный функциональному программированию.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



3 коментарі

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Ребята — а есть где посмотреть презентации с Хакатона?
Спасибо

Видеозапись презентаций, к сожалению, не велась.

Слайды вступительных презентаций можно попросить у Яспера и Адама, если интересно.

Спасибо! Было интересно почитать. Отличное мероприятие!

Підписатись на коментарі