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 проводить зустрічі кожен місяць. У Києві теж проходять зустрічі функціональщіков, але менш регулярно (вони зазвичай анонсуються в «Подіях» на ДОП). Нарешті, наприкінці місяця відбудеться конференція , де буде окремий потік, присвячений функціональному програмуванню.

Опубліковано: 15/05/13 @ 01:37
Розділ Блоги

Рекомендуємо:

Дайджест : Google "кидає" співробітників , творці ngnix про опенсорсе , небезпеки Go
Дайджест цікавих вакансій № 85
Індійський масштаб
Оптимізація і просування сайтів.
Чи легко знайти в інтернеті інформацію про те , як змінити технічні умови виробництва?