Mikhail Grachev

Грачёв Михаил

Rust Developer / Team Lead / Dev Advocate

workmgrachev.com
mgrachev
grachevm

TL;DR (EN | RU)

Backend-разработчик и Team Lead. Опыт профессиональной разработки 16 лет.
В основном пишу код на Rust, но так же знаю Go, Ruby и Elixir.
DevOps инженер. Могу поднять и настроить Kubernetes кластер с нуля.
Выступаю на митапах / конференциях9
Вхожу в состав ПК RustCon.
Open Source активист и контрибьютор290
Core-контрибьютор: dotenv-linterrust, datanymizerrust, goreleasergo, reviewdoggo
Работаю удалённо более 11 лет.
Уровень английского — B1.

Содержание:

Профессиональный опыт

Foxford

Backend разработчик (Rust)
Февраль 2022 — По настоящее время

Foxford — онлайн-школа для учеников 1−11 классов, дошкольников, учителей и родителей.

Мое участие в проекте:

  • Разработка и поддержка собственной платформы для проведения вебинаров в реальном времени (Live Streaming), транскодинга и распространения записей прошедших мероприятий (VoD), мгновенного обмена сообщениями и событиями;
  • Реализация сервиса присутствия - предоставление информации об онлайн-пользователях, участвующих в вебинарах посредством WebSocket соединений, а также пересылка сообщений из внутренних сервисов наружу через Nats.

Код всех проектов открыт и доступен на GitHub: github.com/foxford


Evrone

Backend разработчик (Rust, Go, Ruby, Elixir), Team Lead, DevOps-инженер
Февраль 2016 — Январь 2022

Помимо разработки, я так же принимал участие в:

  • Развитие OSS направления — популизация open source в компании, помощь коллегам с их контрибьютами;
  • Развитие Rust направления — популизация языка, менторство коллег;
  • Написание статей для open source проектов и их продвижение;
  • Проведение собеседований на позиции Rust, Go, Ruby и Elixir разработчиков.

Список проектов, в которых я принимал участие:

Jiseki Health (Elixir) — медицинский консьерж-сервис, который помогает клиентам следить за своим здоровьем и улучшать качество жизни.

Мое участие в проекте:

  • Разработка проекта на Elixir с использованием фреймворка Phoenix;
  • Реализация скрипта трехступенчатого парсинга данных с расписанием доступности врачей;
  • Реализация конвейера процессов для загрузки новых пользователей с использованием фреймворка Broadway (Amazon SQS);
  • Реализация библиотеки для работы с API Box.com (загрузка/скачивание больших файлов по кускам);
  • Реализация аутентификации пользователей через API и GraphQL с использованием библиотеки Guardian;
  • Реализация парсинга больших CSV файлов и их хранения на Amazon S3.

Cryptopay (Rust, Go, DevOps) — многофункциональный сервис по оплате криптовалютой.

Мое участие в проекте:

  • Управление командой, планирование спринтов, постановка задач, контроль качества исполнения;
  • Разработка микросервисов на Rust и Go для обработки транзакций через сервисы ClearBank и Clear Junction;
  • Реализация CLI приложения на Rust для автоматизации тестирования QA-отделом;
  • Настройка CI/CD и Kubernetes кластера, написание helm-чартов.

OpenUrban (Rust, Ruby, DevOps) - сервис отслеживания движения транспорта в Санкт-Петербурге (аналог Яндекс.Транспорт).

Мое участие в проекте:

  • Настройка и развертывание Kubernetes кластера с нуля на bare metal;
  • Настройка CI/CD, миграция на Docker-образы, написание helm-чартов;
  • Развертывание большого кол-ва сервисов на Ruby и Node.js и настройка их взаимодействия;
  • Реализация сервиса по работе с данными в формате GTFS и GTFS Realtime;
  • Интеграция проектов с Kafka для обмена сообщениями (с использованием Schema Registry и Avro);
  • Реализация сервиса по прогнозированию движения транспорта на Rust.

Внутренняя ERP система (Rust, Ruby, Go, DevOps) — внутренний проект компании для автоматизации рабочих процессов.

Мое участие в проекте:

  • Управление командой, планирование спринтов, постановка задач, контроль качества исполнения;
  • Менторство новых разработчиков в рамках этого проекта;
  • Распиливание большого монолита на микросервисы;
  • Разработка gem-библиотек на Ruby для обмена сообщениями между сервисами;
  • Разработка сервиса уведомлений (slack, mail) на Go с использованием RabbitMQ и Protocol Buffers;
  • Реализация сервиса произодственного календаря на Rust;
  • Настройка CI/CD, Kubernetes кластера, написание helm-чартов.

Mystery Mentor (Go, Node.js, Ruby, DevOps) — маркетплейс для менторов, обеспечивающий полную автоматизацию всего процесса ревью кода.

Мое участие в проекте:

  • Разработка проекта с нуля, от проектирования и написание ТЗ до полной сдачи проекта в эксплуатацию;
  • Планирование спринтов, декомпозиция задач, контроль качества работы, управление командой;
  • Реализация клиент-серверной архитектуры проекта;
  • Реализация полноценного CLI приложения на Go;
  • Автоматизация процесса дистрибуции CLI приложения на ОС: macOS, Windows, Linux;
  • Реализация микросервиса подстветки синтаксиса на Node.js и фреймворке Express.

Hunamiq (Go, DevOps) — децентрализованный банк нового поколения на базе блокчейна Ethereum.

Мое участие в проекте:

  • Разработка микросервисов на Go для:
    • Аутентификации/авторизации пользователей;
    • Работы с блокчейном Ethereum;
    • Распознавания лиц;
    • Сокращения ссылок;
    • Работы реферальной программы;
    • Обработки внутренних транзакций (без комиссии);
    • Отправки уведомлений через Firebase Cloud Messaging (FCM).
  • Настройка и поддержка Kubernetes кластеров на Google Cloud Platform;
  • Настройка CI/CD, написание helm-чартов для развертывания сервисов в Kubernetes кластеры.

Invendor (Ruby) — агрегатор сервисных центров.

Мое участие в проекте:

  • Разработка проекта с нуля, от проектирования и написание ТЗ до полной сдачи проекта в эксплуатацию;
  • Управление командой, планирование спринтов, постановка задач, контроль качества исполнения;
  • Реализация ЛК пользователей и сервисных центров;
  • Реализация двухфакторной аутентификации (TFA);
  • Реализация поиска ближайших сервисных центров с использованием PostGIS;
  • Настройка CI/CD.

Cofoundit (Ruby) — онлайн-сервис поиска работы в стартапах под инициативой ФРИИ.

Мое участие в проекте:

  • Разработка проекта с нуля, от проектирования и написание ТЗ до полной сдачи проекта в эксплуатацию;
  • Планирование спринтов, декомпозиция задач, контроль качества работы, управление командой;
  • Реализация сервиса по подбору персонала;
  • Реализация тесной интеграции с другими проектами ФРИИ.

BS Limousine (Ruby) — сервис заказа автомобилей бизнес-класса в Москве (аналог Uber).

Мое участие в проекте:

  • Управление командой, планирование спринтов, постановка задач, контроль качества исполнения;
  • Реализация сервис по заказу автомобилей;
  • Реализация оплаты заказов через банк Русский Стандарт;
  • Построение маршрутов поездки через Google Maps API;
  • Генерация отчетов о поездках в формате PDF.

MDK

Team Lead (Ruby, Rails)
Август 2015 — Февраль 2016

Основные обязаности:

  • Построенние рабочего процесса с нуля;
  • Выбор инструментов для командой разработки;
  • Удаленное управление командой разработчиков;
  • Планирование спринтов, постановка задач, контроль качества исполнения;
  • Установка и настройка серверов.

Основной проект — сервис ставок на свои игры в Counter-Strike: Global Offensive и Dota.

Мое участие в проекте:

  • Разработка проекта с нуля, от проектирования и написание ТЗ до полной сдачи проекта в эксплуатацию;
  • Внутри проекта мной было реализовано:
    • Интеграция со Steam (аутентификация, прием/вывод платежей);
    • Разработка своей внутренней валюты;
    • Внутренний API для работы с сервисом;
    • Мониторинг результатов игры;
    • Написание библиотек для работы с API сторонних сервисов;
    • Написание Telegram-ботов для внутренних нужд проекта.

Лаборатория Электронных Учебников

Team Lead (Ruby, Rails)
Июль 2014 — Август 2015

Электронная Образовательная Среда — это единое образовательное поле, в котором размещены различные идеи:

  • планшет учащегося синхронизирован с интерактивной доской и может выступать в качестве пульта для голосования, учебника, интерактивного пособия или справочника;
  • планшет учителя — это инструмент создания урока, его проведения, заполнения сведений об образовательных достижениях учащихся;
  • интерактивная доска — она позволяет отображать не только учебный материал, результаты экспресс-опросов или содержание планшетов учащихся, но и дает возможность активно моделировать процессы окружающего мира, характерные для предметного направления;
  • электронный дневник — с его помощью учащиеся могут просматривать домашние задания и расписание занятий в режиме онлайн, а их родители всегда в курсе успеваемости детей;
  • информационная система «Посещение и питание» — в школах, оснащенных данной системой, ученики проходят в здание по электронной карте — своеобразный эквивалент визитки школьника и удобный платёжный инструмент.

Проект разделен на несколько подпроектов:

1/ Система управления обучением — сердце проекта «Электронная Образовательная Среда», содержит в себе логику по созданию расписания, работе с пользователями, проведению уроков и многое другое.

Мое участие в проекте:

  • Планирование разработки, декомпозиция задач, контроль качества работы;
  • Разработка логики и API, покрытие кода тестами (acceptance, unit, views), написание документации;
  • Оптимизация API, запросов к БД, систем авторизации и кэширования, тестов (более 9000), перенос логики из моделей в сервисы и фоновые задачи, перенос логики из представлений в декораторы;
  • Настройка развертывания и непрерывная интеграция приложения через TeamCity.

2/ Система управления контентом — проект по управлению электронными учебниками и созданию пользовательского контента с помощью редактора.

Мое участие в проекте:

  • Разработка проекта с нуля, проектирование, декомпозиция задач, контроль качества работы, управление командой;
  • Создание нескольких микросервисов, настройка их взаимодействия между собой через API;
  • Разработка библиотеки для хранения пользовательских материалов в формате XML и дальнейшей их компиляции в бинарный формат;
  • Написание библиотек для работы с API сторонних сервисов. Полное тестирование проекта и взаимодействия между микросервисами;
  • Реализация фоновой обработки материалов содержащих видео. Разработка менеджера очереди для компиляции материалов;
  • Настройка развертывания и непрерывная интеграция приложения через TeamCity.

Вольтекс Технолоджи

Team Lead (Ruby, Rails)
Ноябрь 2013 — Июль 2014

Doka.Box — программно-аппаратный комплекс, который позволяет за считанные минуты организовать работу малого офиса, включая беспроводную локальную сеть, доступ в интернет, телефон и программное обеспечение для коллективной работы сотрудников.

Мое участие в проекте:

  • Управление командой разработчиков (Backend/Frontend): постановка задач, выставления сроков выполнения, контроль качества работы, обучение команды, написание технической документации;
  • Помимо управления командой, основную часть времени занимался разработкой веб-интерфейса Doka.Box: реализация API для работы с аппаратной частью, доработка сторонних библиотек под нужды проекта, полное тестирование проекта с помощью RSpec и Capybara;
  • Написание внутренних библиотек для работы с железом, с использованием протокола AMQP для передачи сообщений.

BlueFox

Ведущий backend-разработчик (Ruby, Rails)
Июль 2013 — Октябрь 2013

Mercury — внутренний проект для французской компании BlueFox. Основные функции проекта — CRM, Billing, Stock Management. Проект построен на основе Active Admin.

Мое участие в проекте:

  • Интеграция Rails Money, разработка дополнительных решений, для работы с разными валютами, автоматическое обновление курса валют через Eu Central Bank;
  • Работа с фоновыми задачами с использованием Sidekiq, контроль их выполнения;
  • Генерация и парсинг Excel файлов;
  • Разработка решений для интеграции проекта с сервисом Amazon S3 и Heroku.

Ivory Interactive

Backend-разработчик (Ruby, Rails)
Январь 2013 — Июль 2013

BusStop — проект по разработке системы “Digital Signage” для информационных терминалов на остановках общественного транспорта города Москвы. Проект состоит из двух частей — клиентская часть (терминалы) и серверная (API, интерфейс управления для клиентов, интерфейс администратора).

Мое участие в проекте:

  • Создание интерфейса управления терминалами;
  • Разработка решений для сбора и отображения статистики, генерация тепловой карты кликов по терминалам;
  • Написание парсера новостных лент и генератора PDF-отчетов.

FeedMan

Backend-разработчик (Ruby, Rails)
Октябрь 2012 — Январь 2013

FeedMan - сервис отложенных публикаций в социальные сети.

Мое участие в проекте:

  • Разработка биллинг системы, подключение оплаты через Robokassa.
  • Написание RSS и FeedBurner парсеров для автоматического сбора пользовательких статей и публикации их в социальные сети;
  • Настройка автоматического развертывания и резервного копирования проекта.

Cafe Digital

Backend-разработчик (Ruby, Rails)
Июль 2012 — Октябрь 2012

Диета Инны Воловичевой — проект по распространению диеты, посредством смс-подписок. Одновременно с этим проектом разрабатывалась платформа, для работы с контент-провайдерами. Проект включает в себя API, систему биллинга, сервис статистики, личный кабинет. Работа с подписками осуществлялась через API сторонних сервисов — Platinot, A1 Sms Market, МосКомСвязь, 7hlp.

Мое участие в проекте:

  • Написание библиотек для работы с API сторонних сервисов, тестирование кода;
  • Разработка сервиса статистики (Backend/Frontend) и системы биллинга.

Lebrand Creative Russia

Веб-разработчик (PHP/1С-Битрикс, JavaScript)
Ноябрь 2011 — Июль 2012

Разработка проектов:

  • Интернет-магазин мебели Столплит;
  • Портал о топливных картах Топкарта;
  • Несколько проектов для банка 2TBank;
  • Агрегатор CPA-сетей и рекламная платформа ARBOOST.

4TE

Веб-разработчик (PHP, JavaScript)
Июль 2010 — Ноябрь 2011

Разработка и поддержка внутренних проектов компании:

  • Мерчендайзинг товаров для компании LG;
  • Система Тайный покупатель для компаний Роснефть и Газпром нефть.

Masterhost

Системный администратор
Ноябрь 2009 — Июль 2010

Установка, настройка, админинстрирование и мониторинг:

  • Серверов на базе Linux/FreeBSD;
  • Почтовых кластеров(Exim, Qmail).

Написание shell-скриптов для автоматизации рабочих процессов.


ТрансТелеКом

Системный администратор
Сентябрь 2008 — Октябрь 2009

Настройка и администрирование:

  • Серверов на базе ОС Linux/Windows;
  • Офисной локальной сети;
  • Почтовых серверов;
  • Сайтов и хостингов.

Профессиональные навыки

Backend

Хорошее знание Rust, Go, Ruby (Rails, Hanami, Sinatra), Elixir (Phoenix).

Есть опыт написания как микросервисов, так и полноценных CLI приложений.

А также опыт разработки на Node.js с использованием фреймворка Express.

Базы данных

С 2012 года, в качестве СУБД использую PostgreSQL, до этого работал с MySQL.

Из NoSQL решений предпочитаю использовать Redis, есть опыт работы с MongoDB и Memcached.

Брокеры сообщений

Больше всего работал с RabbitMQ и Nats.

У меня также есть небольшой опыт работы с Apache Kafka.

DevOps

Docker и Docker Compose использую на всех проектах.

Большой опыт настройки и развертывания с нуля Kubernetes кластеров, как на Google Cloud Platform, так и на bare metal.

В качестве CI/CD предпочитаю использовать GitHub Actions, но есть опыт работы и с другими сервисами.

Так же есть большой опыт работы с ОС семейства Unix: Gentoo, Debian, RHEL, Ubuntu, FreeBSD.

Open Source активность

Core-контрибьютор:

Мои коммиты можно найти в таких проектах: rails, hanami, micro, intellij-rust, etc290

Мои OSS проекты

  • dotenv-linter — линтер для .env файлов, написанный на Rust. В рамках этого проекта я так же выступаю в роли ментора и помогаю всем желающим начать контрибьютить в open source проекты на Rust;
  • update-informer - библиотека на Rust для проверки обновлений в CLI приложениях;
  • brevity — сокращалка ссылок на Go с готовым helm-чартов для развертывания в Kubernetes кластере;
  • gastly — библиотека на Ruby для создания скриншотов сайтов. Под капотом используется Phantom.js и MiniMagick;
  • capistrano-hanami — библиотека на Ruby для развертывания проектов на Hanami через Capistrano;
  • mina-hanami — библиотека на Ruby для развертывания проектов на Hanami через Mina;
  • queue_manager — менеджер очереди уникальных задач на Ruby. Под капотом Redis Sorted Sets. Поддерживает ActiveJob и Global ID;
  • pivotal_tracker_telegram_bot — телеграм бот на Ruby для получения уведомлений из Pivotal Tracker. Под капотом Sinatra и Redis PubSub.

В рамках проекта reviewdog создал несколько GitHub Actions для запуска популярных линтеров:

Образование

2008 - 2012, МГУ им. Н.П. Огарёва, АСОиУ