Смотреть видео докладов

FPCONF — первая конференция
о функциональном программировании в России

Функциональное программирование — тема на острие развития современной разработки ПО. Erlang, Scala, Clojure, F#, Haskell, функциональные подходы в хорошо знакомых Ruby и Java, монады и лямбды, несколько лет назад были делом ученых и экспериментаторов. Сегодня они входят в нашу повседневную жизнь и становятся новым трендом в разработке. Присоединяйтесь, зажжем функциональным напалмом вместе! Любителям Scala и Clojure, Haskell и Erlang есть о чем пообщаться друг с другом.
Конференция однодневная, доклады идут в два параллельных потока.

Спикеры

Эдвард Кметт
Глава Haskell core libraries committee, Haskell программист, математик.
Максим Лапшин
Разработчик масштабируемых веб-сервисов, знаток Erlаng, автор видеостримингового сервера Erlyvideo.
Николай Рыжиков
Технический лидер команды «Health Samurai», активист питерского Ruby & Clojure сообществ и мета-сообщества Piter-united.
Никита Прокопов
Занимается системами автоматизации, распределенными системами и высокими нагрузками на Java, Python, Erlang и Clojure. Ведет блог, выступает на конференциях, занимается open-source проектами.
Александр Гранин
Хаскеллист. Организатор новосибирского сообщества функциональных программистов LambdaNsk. Работает в "Лаборатории Касперского", некоторые задачи решает с помощью ФП.
Михаил Муцянко
Разработчик Scala плагина для Intellij Idea в JetBrains. Участник проекта scala.meta - новой платформы метапрограммирования Scala.
Илья Беда
Тимлид и один из основателей bro.agency. Разрабатывает веб формочки на python в течении 7 лет, продвигает функциональное программирование, проводит воркшопы и мастер классы.
Сергей Тихон
Solution Architect в компании EPAM Systems. F# энтузиаст и автор F# Weekly. Верит в силу комьюнити.
Денис Редозубов
Технический лид в Antorica, гик с бэкграундом разработчика на Python/Ruby, ныне евангелист ФП и Haskell-энтузиаст. В данный момент работает над разработкой тревел-платформы на Haskell и Ruby
Ренат Идрисов
Любит функциональное программирование, является создателем собственного эзотерического диалекта LISP: emojilisp.com, habrahabr.ru/post/237297/. Участвовал в Clojure cup 2014, проект acha-acha.co.
Сергей Лобин
Разработчик команды карт в Sputnik.ru, познакомился со Scala и вот уже 2 года не может жить по-старому.
Роман Гребенников
Большой любитель Scala, разрабатывает распределенные системы в Sociohub.ru. Активист воронежской Scala User Group.
Арсений Жижелев
Руководит группой Scala-разработчиков студии Allods Team компании Мэйл.Ру Геймз. Команда реализует event-sourcing систему наблюдения за игровым миром Аллодов-онлайн.
Алексей Романчук
10 лет опыта разработки backend-ов. Тимлид в 2ГИС. Scala - работа и увлечение.
Антон Холомьёв
Автор книги "Учебник по Haskell" и музыкальной бибилиотеки для Haskell: csound-expression.
Александр Пашков
С 2008-го года занимается, в основном, интернетиками и расслабленно программирует под JVM. До этого 5 лет харкорного C++ в телекоме. Образовавшуюся интеллектуальную пустоту заполняет упарываясь хаскелем.
Михаил Лиманский
Будучи простым С++ разработчиком изучал на досуге Haskell во имя добра. Теперь разрабатывает высоконагруженные системы на Scala в компании ЭСК.

Программа

Первый поток

15 августа, 10:00–19:00, Зал №8

9:00–10:00
Регистрация участников
10:15–11:00
Пишем EDSL на Haskell. Сказ о создании музыкального синтезатора

На примере EDSL для электронной музыки мы:
* посмотрим на общую архитектуру Deep EDSL в Haskell.
* проведём оптимизацию CSE (common subexpression elimination)
* построим свою монаду IO. Справимся с побочными эффектами в EDSL.
* найдём простой способ построения своего FRP.
* посмотрим на плюсы и минусы ФП как инструмента для описания музыкальных идей.
* и послушаем музыку написанную на Haskell.
Проект на Hackage: http://hackage.haskell.org/package/csound-expression
Проект на Github: https://github.com/anton-k/csound-expression

Антон Холомьёв
11:00–11:45
Краткий экскурс в системы типов или как избежать дезинтеграции

Современные программы невероятно сложны и гарантировать их корректность - задача не из простых. Системы типов - инструменты, помогающие программисту в этом.
* Как сделать так, чтобы типы помогали разработчику?
* Какие гарантии мы можем получить?
* Почему языки и программисты разбились на несколько лагерей по отношению к этой теме?
* Почему ФП на гребне волны в плане type programming?
Также в докладе я рассмотрю спектр систем типов в языках функционального программирования от lisp/clojure до haskell/ocaml и мы мельком заглянем в загадочный мир зависимых типов в таких языках как Idris и Agda

Денис Редозубов
Antorica
11:45–12:30
Краткий обзор приёмов параллельного и конкурентного программирования на Haskell

Рассказ о возможностях некоторых инструментов параллельного/конкурентного программирования в современном хаскеле: от форсирования ленивых структур данных при помощи спарков до высокоуровневых примитивов типа Async и STM. Всё на примере нетривиальной прикладной переборной задачи, которую не очень-то просто грамотно распараллелить в императивных языках с мьютексами.

Александр Пашков
12:30–13:30
Время ланча
13:30–14:15
Lenses and Prisms

Functional programming shows us that working with immutable structures makes it easy to reason about parallelism, non-determinism, and other effects, but along the way we lose the familiar notion of a field accessor. "Getters and setters" don't make sense as such in an immutable world. Lenses provide us a way to regain that lost functionality and more besides, acting as a form of "functional reference".
On the flip side, in the process of constructing the lenslibraryfor Haskell, I've found a related notion, that of a Prism, to be equally useful for working with case matching on ADTs, handling extensible exceptions, as well as working with semi-structured data such as JSON, XML and the like. However, surprisingly little has been said about them before now.
This talk will explore the roles each of these abstractions play and why you as a developer should care about them.

Эдвард Кметт
Chair of the Haskell Core Libraries Committee
14:15–15:00
Дизайн больших приложений в ФП

Как проектировать большие приложения на традиционных языках - мы знаем. Inversion of Control, SOLID, GRASP, шаблоны проектирования, high cohesion, low coupling, абстракции, интерфейсы, бывает даже - UML. Но хочется-то использовать функциональные языки!
В докладе я расскажу, что:
* многие практики - справедливы и в ФП-мире;
* в ФП имеются свои изящные решения тех же проблем;
* многие шаблоны проектирования - искусственные и становятся не нужны;
* вместо шаблонов проектирования ФП предлагает новые подходы проектирования - функциональные идиомы.

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

Александр Гранин
Лаборатория Касперского
15:00–15:45
F# Type Providers: The Current State

F# Type Providers это механизм позволяющий упростить интеграцию кода и данных и является альтернативой подходу кодо-генерации. В докладе будут рассмотрены:
* Code Quotations и принципы работы type provider'ов.
* Обзор существующих type provider'ов.
* Особенности разработки собственных type provider'ов.
* Нововведения F# 4.0 для type provider'ов.

Сергей Тихон
EPAM Systems
15:45–16:45
Перерыв на кофе
16:45–17:30
Clojure Data DSL's для web разработки

Сеанс live coding!
Код и данные, как Инь и Янь, и граница между ними при пристальном взгляде начинает исчезать. На примере web стэка для clojure мы познакомимся c Data DSL - hiccup, honeysql, prismatic schema, в режиме реального времени попробуем написать свои DSL и познать Дао.

Николай Рыжиков
Health Samurai
17:30–18:15
Распределённое измерение производительности распределённых приложений

На сегодняшний день количество пользователей интернет составляет около трёх миллиардов, любой потенциально популярный сервис может сломаться завтра, став популярным по причине того, что просто не хватит мощности обслуживающих серверов. Полезно знать заранее, как это произойдёт и насколько скоро наступит тот день, когда ваш сервис перестанет работать нормально. Мобильные игры, такие как Game of War, поддерживают миллионы пользователей и состоят из большого количества компонентов на различных языках. Практически каждый день код игры обновляется, и каждый день увеличивается количество пользователей.
В Machine Zone мы используем свой собственный инструмент MZBench — это распределённое приложение на Erlang, которое автоматически разворачивается на кластере, создаёт необходимую нагрузку, собирает результаты и оформляет их для дальнейшего использования людьми или системами Continuous Integration. Для описания различных сценариев используется собственный DSL, который позволяет создать необходимую модель и профиль нагрузки на основе модулей и статистических примитивов.
В докладе планируется рассмотреть основные особенности нашего инструмента, а также сравнить MZBench с tsung и basho bench.

Ренат Идрисов
Machine Zone
18:15–19:00
Erlang в продакшне

В своём докладе я хочу поглубже рассказать о нашем опыте использования Erlang в компании Эрливидео. Мы делаем сверхвысоконагруженное ПО, работающее на критических для компьютера нагрузках и Erlang нам в этом очень помогает.
Почему мы выбрали Erlang и какие его концепции помогают программировать. Какие паттерны и антипаттерны мы видим при построении надежного и производительного ПО.
Будут освещены такие тонкости, как отладка ПО на Erlang, борьба с утечками ресурсов, интеграция с библиотеками на C и работа с ограниченными внешними ресурсами типа диска.

Максим Лапшин
Erlyvideo

Второй поток

15 августа, 10:00–19:00, Зал №9

9:00–10:00
Registration
10:15–11:00
Самурайский Путь молодого Scala-программиста

История о том:
* Как в "Спутнике" появилась Scala.
* Как написать функциональный поиск.
* Какие мы набили шишки на пути в бой.
* Правда ли что Scala такая прожорливая.
* Плюсы и минусы разработки на Scala.

Сергей Лобин
Sputnik.ru
11:00–11:45
Макросы Scala

В докладе я постараюсь сделать введение в тему макросов для людей не знакомых с темой, расскажу какие возможности появляются благодаря макросам: генерация термов, типов, имплисит макросы, материализаторы, создание DSL. Расскажу про проблемы при поддержке макросов в IDE.
Сделаю небольшой обзор будущего макросов в Scala.

Михаил Муцянко
JetBrains
11:45–12:30
Встраивание языка в строковой интерполятор

Общеизвестно, что создание предметно-ориентированых языков (DSL) -- одна из сильных сторон Scala. Однако бывают ситуации когда DSL получается не совсем таким каким хотелось бы. Если язык уже существует и менять его не хочется, но его синтаксис не ложится на DSL, можно попробовать использовать строковые интерполятор.
В своем докладе я расскажу как я, разрабатывая MongoQuery, засовывал BSON в интерполятор, с какими трудностями я столкнулся и что из этого вышло. Будет показано как заставить интерполятор работать во время компиляции, учитывать информацию о типах и как все это протестировать.

Михаил Лиманский
ЭСК
12:30–13:30
Время ланча
13:30–14:15

14:15–15:00
Архитектура UI на основе функциональных линз

Иммутабельные структуры данных пришли к нам из мира функционального программирования. Они принесли нам профит в виде безопасного разделения ссылок между потоками, простотой тестирования и возможностью писать чистые функции. Но вместе с этим они принесли и немного боли.
Если описывать ваше приложение единым иммутабельным состоянием - как изменить элемент на произвольном уровне вложенности ? Ведь для изменения состояния нужно создать новый объект с измененным значением. А если объект сложный и состоит из других объектов - это реальная проблема, нужно копировать все уровни вложенности объекта.
Один из способов решения этой проблемы - предложенная Эдвардом Кметтом концепция линз. В своем докладе я расскажу что такое линзы. Как работает композиция линз. Как их применить в реальных задачах для работы с иммутабельными данными.
Предполагаемая аудитория: Фронтенд программисты использующие react.js узнают о новом инструменте для работы со стейтом приложения.
Кому будет интересен доклад: Scala программисты увидят как можно использовать привычную им из Java точечную нотацию для работы с иммутабельными данными. Программисты увлекающиеся функциональным программирование узнаю об одной из интересных абстракций позволяющей работать с иммутабельными данными в императивном стиле.

Илья Беда
Bro.agency
15:00–15:45
Фронтэнд без грусти

Писать веб-приложение — то еще занятие: медленно, сложно, да и платформа скорее мешает, чем помогает. В докладе мы ответим:
* Как функциональный подход помогает делать веб-приложения?
* Может ли база данных быть иммутабельной?
* Зачем вообще на фронте база данных?
* Что интересного можно сделать с такими инструментами?
Причем не вообще, а на конкретных примерах ClojureScript и DataScript.

Никита Прокопов
15:45–16:45
Перерыв на кофе
16:45–17:30
Реактивные потоки в backend-е

Реактивные потоки это стандарт асинхронной обработки потоковых данных от Netflix, Twitter, Pivotal и других. Я расскажу зачем и как использовать реактивные потоки для построения backend-ов:
* в чем проблемы построения современных асинхронных backend-ов
* что такое реактивные потоки и как они помогают строить backend-ы
* принципы работы реактивных потоков
* основы работы с реактивными потоками на примере Akka Stream

Алексей Романчук
2ГИС
17:30–18:15
Распределённые функциональные системы на Scala

В докладе рассматривается библиотека SynapseGrid, относящаяся к классу FRP (functional reactive programming/data flow programming).
В первой части описывается простой элегантный DSL для конструирования систем на основе SynapseGrid. Приводится пример простой системы.
Во второй части описываются имеющиеся варианты исполнения готовой системы:
* превращение системы в обычную функцию;
* использование RX-интерфейса;
* запуск в параллельном режиме на пуле потоков (как в parallel collections);
* запуск на системе экторов Akka на одном хосте;
* запуск на системе экторов Akka на нескольких хостах.
В третьей части рассказывается о модульной архитектуре библиотеки и возможностях её расширения.
В заключении описывается класс систем, реализуемых с помощью библиотеки. А именно, системы потоковой обработки данных с ветвлением. Приводятся примеры применения библиотеки в реальных проектах.

Арсений Жижелев
Мэйл.Ру Геймз
18:15–19:00
Scala performance для сомневающихся

Язык Scala нынче модный: тут вам и паттерн матчинг, и рекурсия, и коллекции, обильно приправленные лямбдами, а также много других страшных слов из мира функционального программирования, для понимания которых не нужна ученая степень по математике. И все эти плюшки органично переплетены в такой язык, начав писать на котором, очень тяжело перестать.
Но волшебство функциональной легкости заканчивается с фразой "а почему я переписал 100 строк лапши на Java в однострочник на Scala, но оно стало работать в 3 раза медленнее?", и мечта о прекрасном языке превращается в тыкву. Суровая реальность грязным сапогом как бы говорит нам, что абстракции языков высокого уровня могут скрывать монстров и всё удобство имеет свою цену. И если вы делаете на Scala не простое CRUD-приложение, а что-то, хоть отдаленно связанное с нагрузкой, необходимо хорошо понимать, во что именно вам обходятся все вот эти монады-шмонады.
Доклад может открыть глаза на возможные подводные камни производительности людям, практикующим программирование на Scala. В процессе будет рассказано:
* об интеграции jmh и sbt;
* о том, как заставить scalac рассказывать о том, что он там наоптимизировал;
* о тайнах паттерн-матчинга, хвостовой рекурсии и scala-коллекций;
* об умном HotSpot, который геройски все это оптимизирует.

Роман Гребенников
Sociohub.ru.

Партнеры

Контакты

Место проведения
Москва, Отель Альфа, Измайловское шоссе, д. 71, корп. А.