Videos

FPCONF is the first functional
programming conference in Russia.

It's a place for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. It is focused on learning the functional approach, understanding in which scenarios it is better to use FP, discovering what can be done with current languages and technologies and exploring current best practices. Erlang, Scala, Clojure, F#, Haskell and other interesting things on the frontier of software development.

Speakers

Edward Kmett
Chairs the Haskell core libraries committee, Haskell programmer, mathematician, lapsed graphics guru and demo scener.
Nikolay Rizhikov
Tech Lead of Health Samurai
Max Lapshin
Founder at ErlyVideo
Nikita Prokopov
Developer of distributed systems & Web Apps. Clojure, Erlang, Python, Java. From Novosibirsk
Mikhail Mutcianko
Developer of Scala plugin for Intellij Idea in JetBrains. ScalaMeta project member.
Alex Granin
Kaspersky Lab
Sergey Tihon
Solution Architect at EPAM Systems. F# enthusiast and author of F# Weekly.
Denis Redozubov
Technical Lead in Antorica.
Renat Idrisov
Functional programming enthusiast, creator of LISP dialect emojilisp.com
Ilya Beda
Bro.agency.
Sergey Lobin
Roman Grebennikov
Arseny Zhizhelev
Alexey Romanchuk
Anton Kholomiov
Pashkov Alex
Mike Limansky

Program

First stream

15th of August, 10:00–19:00, Room №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

Second stream

15th of August, 10:00–19:00, Room №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.

Sponsors

Сontacts

Venue
Moscow, Izmailovskoe shosse, 71, building A
EMAIL
elena@evrone.ru