Category: it

Category was added automatically. Read all entries about "it".

birds

Haskell developer wanted

И снова мы ищем таланты :) А именно Haskell-программиста в киевский офис EPAM Systems/Barclays.

Если вы любите функциональное программирование, имеете опыт в Haskell (можно на уровне персональных проектов), знаете толк в алгоритмах, и вам интересно попробовать свои силы в разработке интересных коммерческих проектов, присылайте резюме на Ivan_Veselov@barclays.com. Ещё нужно неплохо знать английский (как минимум intermediate).

Проект действительно интересный - разработка семейства DSL-ей (domain specific languages) для описания финансовых контрактов. По полной применяются всякие катаморфизмы, "моноиды в категории эндофункторов" и прочий хаскелльный стафф, то есть это не просто веб-странички на хаскелле клепать. Работы много, проект развивается, можно научиться разным полезным вещам. Работа бывает разная: как и весьма интеллектуальная (типа написать с нуля компилятор чего-то во что-то), так и инфраструктурная, скорее всего придётся заниматься и тем, и тем. Подробнее о проекте можно почитать здесь: http://arbitrary.name/papers/fpf.pdf Статья немного устарела, но даёт примерное представление о том, чем мы занимаемся.

Касательно зарплаты: она, как обычно, по итогам собеседования, на работать "за идею" не придётся, оплата достойная.

И напоследок, ещё раз мой контакт для отправления резюме, ссылок на open source проекты, ваши github-аккаунты и прочих релевантных вещей: Ivan.Veselov@barclays.com
birds

Ищем Haskell-программистов в Киеве

Всем привет!

У нас в EPAM Systems/Barclays Capital снова открыта вакансия Haskell-программиста (да не одна, а целых две!). Мы работаем в Киеве, возможна помощь компании при релокации.

Если вы любите функциональное программирование, имеете опыт в Haskell (можно на уровне персональных проектов), знаете толк в алгоритмах, и вам интересно попробовать свои силы в разработке интересных коммерческих проектов, присылайте резюме на Ivan.Veselov@barclays.com. Ещё нужно неплохо знать английский (как минимум intermediate).

Проект действительно интересный - разработка семейства DSL-ей (domain specific language) для описания финансовых контрактов. По полной применяются всякие катаморфизмы, "моноиды в категории эндофункторов" и прочий хаскелльный стафф, то есть это не просто веб-странички на хаскелле клепать. Работы много, проект развивается, можно научиться разным полезным вещам. Работа бывает разная: как и весьма интеллектуальная (типа написать с нуля компилятор чего-то во что-то), так и инфраструктурная, скорее всего придётся заниматься и тем, и тем. Подробнее о проекте можно почитать здесь: http://arbitrary.name/papers/fpf.pdf Статья немного устарела, но даёт примерное представление о том, чем мы занимаемся.

Касательно зарплаты: она, как обычно, по итогам собеседования, на работать "за идею" не придётся, оплата достойная.

С официальной вакансией и требованиями можно ознакомиться на сайте EPAM, там всё подробнее расписано:

http://www.epam-group.ru/career/vacancies/ukraine/kiev/jo/6819.html

И напоследок, ещё раз мой контакт для отправления резюме, ссылок на open source проекты, ваши github-аккаунты и прочих релевантных вещей: Ivan.Veselov@barclays.com
birds

Уроки Typeclassopedia

В хаскелле есть довольно много стандартных классов типов (type classes), ноги у которых растут изо всяких теоретических источников (в основном из теории категорий), например Functor, Monad, Applicative, Arrow и прочие. Чтобы немного в них разобраться, я недавно начал читать отличную статью "Typeclassopedia", написанную Brent Yorgey и опубликованную ещё в тринадцатом номере "The Monad Reader".

Standard type classes

Пока я прочёл небольшую часть статьи, которая описывает такие классы типов:

  • Functor
  • Pointed (его нет в стандартной библиотеке, но он полезен для понимания)
  • Applicative
  • Monad

Раздел о каждом классе состоит из собственно его описания, примеров и части, посвящённой "выработке интуиции". Часть про интуицию, пожалуй, наиболее интересна, но для того, чтобы действительно начать интуитивно понимать суть классов нужно попрактиковаться и, возможно, почитать статьи из подразделов "Further reading". Для практики есть упражнения, в духе "выразить join через return и >>=", весьма уместно размещённые по ходу изложения.

Collapse )
birds

Как я готовил презентацию. Часть 1. LaTeX.

Когда наступила надобность сверстать слайды для следующей презентации — я наконец решил воспользоваться LaТеХ-ом (это уже далеко не первый мой подход, но пока самый продуктивный). В процессе работы у меня возникали различные мелкие задачи: нарисовать диаграмму, нарисовать синтаксическое дерево, нарисовать несколько деревьев "в разных позах", раскрасить исходный код, ну и наконец всё это представить в виде более или менее симпатичных слайдов.

Поскольку часто полученные знания были достойны того, чтобы ими делиться, а весь этот подход по сравнению с традиционным WYSIWYG (в лице Open или Microsoft Office) весьма любопытный и просветляющий — я решил написать на эту тему несколько постов. Они не будут претендовать на роль учебных, т.к. я постараюсь быть кратким и выражать самую суть, чтобы позволить прочувствовать эту атмосферу, заинтересовать и дать толчок к дальнейшему изучению. Кроме того, я сам только изучаю LaTeX, потому не могу служить авторитетом в данной области.

Collapse )
birds

xmonad

Роман Чепляка выложил в HTML нашу статью о xmonad, весьма хорошем оконном менеджере, написанном на haskell.
Ранее она публиковалась в журнале Open Source, выпуски 27, 28, 29.
Можно смело сказать, что статья является самой подробной из всего написанного про xmonad на русском :)
birds

Вторая встреча SpbHUG

Сегодняшняя встреча SPb Haskell user group прошла просто замечательно - услышал много нового и интересного, да и сам что-то хорошее рассказал :)

В программе было три доклада:
  • "Комбинаторы сериализации" (слайды) - мой доклад.

  • "Свободные теоремы" (или "Теоремы нахаляву" - вольный перевод Theorems for free) (слайды) - доклад deni_ok

  • "Функциональные структуры данных (часть вторая)" (слайды) - доклад antilamer

(чуть позже возможно появятся фотографии и аудиозапись)

Я получил свой первый опыт чтения докладов широкой (да ещё и весьма интеллектуальной) публике, получив при этом массу fun-a. Смею надеяться - первый блин не вышел комом :)

Остальные доклады тоже весьма порадовали - и интересные результаты, получающиеся в результате вывода этих самых "халявных" теорем, и полезные и интересные техники, описанные Женей, вместе с его замечательными иллюстрациями :) и последующая мини-лекция о realtime-вычислениях и проблемах, с этим связанных, рассказанная Иваном Тарасовым (_navi_), так сказать, в кулуарах.

Что же, с нетерпением жду следующих встреч! :)
birds

SPJ "The implementation of functional programming languages"

Сегодня, просматривая свою коллекцию книжек и paper-ов по функциональному программированию, решил посмотреть, что там пишет Simon L. Peyton Jones в своей книге "The implementation of functional programming languages". И был приятно удивлён - как же классно он пишет! Хотел всего лишь прочесть вступление и зачитался! :) Меньше чем за 30 первых страниц книги получаем чёткое, сжатое, понятное и хорошо иллюстрированное описание таких тем:


  • синтаксис лямбда-исчисления (в дальнейшем ЛИ)

  • карринг

  • операционная семантика ЛИ

  • бета-редукция, альфа- и эта-преобразования и что они значат

  • порядок редукции, его оптимальность

  • нормальный порядок редукции

  • теоремы Чёрча-Россера

  • пример выражения, у которого нет нормальной формы

  • как выражать рекурсивные функции в ЛИ

  • Y-комбинатор

  • денотационная семантика ЛИ, отличие денотационной семантики от операционной

  • bottom _|_

  • строгость и ленивость функций



Конечно, почти все эти темы и ЛИ в общем являются классикой, так сказать ядром функционального программирования, и я про них неоднократно читал раньше в разных источниках. Но столь хорошее описание встречаю, наверное, впервые.

Collapse )
birds

QuickCheck

Вчера, с подачи antilamer (спасибо за вдохновляющий поток эмоций! :)), поразбирался с QuickCheck - средством для тестирования функционального кода, которое основывается на проверках неких свойств, которые задаются относительно определённых функций и проверяются на случайно сгенерированных данных.

Классический пример: есть функция reverse для обращения списков. Тогда можно придумать такие достаточно ярко её характеризующие свойства:
propReverseUnit x       = reverse [x] == [x]                             
-- (то есть, обращая список из одного элемента - получаем тот же список)

propReverseAppend xs ys = reverse (xs++ys) == reverse ys ++ reverse xs
-- (обращая конкатенацию списков, получаем конкатенацию обращений частей 
-- в обратном порядке)

propReverseReverse xs   = reverse (reverse xs) == xs
-- (обращая обращение списка - получаем тот же список)

Теперь из-под ghci запускаем QuickCheck:
Main> quickCkeck propReverseReverse
OK, 100 tests passed

и - вот он, момент истины! - QuickCheck сгенерил 100 случайных списков, на которых проверил данное свойство и поскольку оно всегда выполнилось - выдал OK.

При этом свойства могут быть и посложнее нежели описанные выше - в них могут присутствовать необходимые для выполнения свойства условия, генерируемые данные могут быть определённым образом классифицированы, кроме этого можно создавать свои генераторы значений, в том числе для рекурсивных типов (легко!) и даже генераторы случайных функций!

Для того, чтобы дополнительно управлять случайными значениями, которые генерятся и направлять эти значения в нужное русло - существуют понятие "генератор", которые можно (и иногда нужно) описывать для своих и стандартных типов данных, а также некоторый небольшой фрэймворк, который позволяет эти генераторы комбинировать с помощью стандартных, довольно удобных и отлично продуманных комбинаторов - получая при этом новые необходимые генераторы.

На предстоящей встрече Spb Haskell User Group , как раз ожидается доклад по QuickCheck от Дмитрия Тимофеева (dtim), который, думаю, будет весьма интересно послушать, при этом уточнив пока неясные для меня моменты.

В общем, весьма любопытная штука и немного необычный (по крайней мере для меня) подход к тестированию, который отлично работает в условиях отсутствия побочных эффектов и превращает процесс тестирования в весьма увлекательный процесс размышления над свойствами своей программы. Изначально QuickCheck был написан для Haskell и активно там используется, но поиск в гугле выдал и порт для Erlang .
birds

Haskell: комбинаторные парсеры Parsec.

Что же, в прошлый раз мы вспомнили формы записи операторов и рассмотрели написание простого вычислителя постфиксных выражений на Haskell. Следующим шагом является создание транслятора выражений из инфиксной формы - в префиксную. Однако, перед этим нам необходимо улучшить разбор выражения на токены, поэтому в данной статье мы рассмотрим монадические комбинаторные парсеры на примере модуля Parsec, а также использование их на практике.

Collapse )