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

Специализация и профессиональные навыки: Ruby, большую часть времени в связке с ruby on rails.

Haskell использовался в бэкенде веб приложения, автоматизирующего работу коллцентра.

Coffescript/javascript и пачка библиотек для построения сложного интерфейса типа knockout.js, backbone и т.п.

Профессиональные навыки
Опыт работы
Специализированный провайдер в сфере управления бизнес-процессами
Senior software engineer
Июнь 2018 — По настоящее время (1 год и 6 месяцев)

Разработка софта для оценки качества портфельных инвестиций.

Защита от ddos-атак, хостинг, IP-транзит
Ростов-на-Дону
Software engineer
Июнь 2017 — Июнь 2018 (1 год и 1 месяц)

Построил инфраструктуру для анализа, хранения и обработки HTTP/HTTPS трафика.

Технологии: Apache Kafka, Apache Flink, Scala, Rust, Python, Protobuf, Docker, Ansible, Mongodb.

Достижения: 

  • Ввел в эксплуатацию Apache Kafka
  • Ввел в эксплуатацию Apache Flink
  • Релизовал на Rust метод статистического анализа трафика
  • Организовал сбор метрик на базе Prometheus и Grafana
  • Организовал управление инфраструктурой на базе Docker и Ansible
  • Написал несколько разных экспериментальных сервисов для фильтрации трафика
Developing casino games and virtual sports products.
Software engineer
Февраль 2015 — Декабрь 2016 (1 год и 11 месяцев)

Технологии: Ruby on rails, Mysql, Redis, Docker.

Поддержка и разработка платежного шлюза, сервиса который служит для ввода и вывода денег пользователями и как прокси для взаимодействия с внешними платежными системами.

Достижения:

- Активно продвигал унификацию внутренних интерфейсов и рефакторинг в целом

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

- Унифицированный пользовательский интерфейс для доступа к платежам

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

- Легкое в использовании и разворачивании окружение для разработчиков на базе Docker

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

- Сделал прототип следующей версии проекта на Elixir

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

Formal methods
Москва
Software engineer
Март 2012 — Январь 2015 (2 года и 11 месяцев)

Технологии: Haskell, Javascript, Postgresql, Redis

Основной продукт компании - система автоматизации колл-центра. Она позволяет автоматизировать прием звонков, сопровождать решение проблем клиента и показывать эффективоность работы колл-центра как в целом так и с детализацией по отдельным сотрудникам.

Бэкенд был сделан на Haskell, Postgresql и Redis для кэширования. Фронтенд был реализован на Javascript и knockout.js как single-page приложение.

Я учавствовал в проекте практически с самого начала и занимался практически всеми частями в разное время.

Достижения:

- Типобезопасный DSL для генерации запросов в Postgres для реализации поиска

Модели (набор полей с указаными типами и отношений с другими моделями) описаны типами данных в хаскеле. Они позволи генерировать маршруты для CRUD, описания необходимые для генерации UI и использовать код синхронизации UI и данных в бэкенде. Но помимо CRUD необходимо было каким-то образом осуществлять поиск по имеющимся данным, по возможности малой кровью. Такми образом появился этот DSL. Для описания поиска использовались те же модели и связи с другими моделями, тип поля определял допустимые критерии поиска по нему в оригинальной модели (например для целого числа допустим поиск по диапазону значений или точное совпадение, для строки только точное совпадение или поиск подстроки и т.п.), также возможно было использовать тот же код рендеринга и синхронизации.

- Синхронизация моделей фронтенда и бэкенда

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

- Средство проверки схемы базы данных

Имея описание моделей в коде, мы всегда могли проверить соответствует ли это описание той схеме, которая имеется в базе и сообщить о проблемах (например если забыли запустить миграцию или кто-то что-то поправил в консоли)

- Ввел в проект использование Requirejs модулей

До этого весь код лежал в одном глобальном неймспейсе. Я добавил модульность, аккуратно разнеся то что есть на слабо связанные части.

- Перенес шаблонизацию в Jade

Для рендеринга интерфейса использовались HTML шаблоны, которые комбинировались с описанием в виде json объектов, сгенерированных из хаскелевых моделей. Эти шаблоны изначально были написаны в виде кучи кусков HTML кода, проблема с таким подходом в том, что HTML не имеет втроенных средств для композиции отдельных частей, что привело к огромному колличеству повторяющегося кода, Jade устранил эту проблему.

Ruby on rails developer
Октябрь 2011 — Март 2012 (6 месяцев)
Высшее образование
Южный федеральный университет
Ростов-на-Дону
Факультет: Математики, механики и компьютерных наук
Январь 2004—Январь 2010 (6 лет)