Обо мне

Мне интересны алгоритмы, структуры данных, эффективные архитектуры приложений и компьютерных систем, машинное обучение.
Имею опыт использования различных SQL и NoSQL БД, AMQP очередей сообщений, worker pool-ов, ZeroMQ,  алгоритмов ML.
Моё хобби — столярное дело и деревообработка.
Люблю вело-походы, нетронутую природу, дикие пляжи, тишину и отсутствие суеты.

Участие в профессиональных сообществах
Опыт работы
Крупная интернациональная ИТ-компания, предоставляющая своим клиентам надежные, высококачественные решения
Ростов-на-Дону
Software Engineer
Сентябрь 2018 — По настоящее время (2 года и 1 месяц)
GolangGitLinuxSQL
nCrawler
Подольск
Программист, backend-разработчик
Июль 2015 — Июль 2018 (3 года и 1 месяц)

Разработка различных backend-сервисов.
Разработка и реализация алгоритмов детекции продуктов на неизвестных заранее HTML страницах.

Digital Flex
Харьков
Разработчик специализированного ПО
Июнь 2015 — Апрель 2016 (11 месяцев)

Передо мной была поставлена задача создания нескольких управляющих программ для спец. оборудования, включающего в себя мини-компьютер Raspberry Pi 2/3 и телеграфное устройство. Необходимо было в реальном времени с помощью амплитудно-частотной модуляции кодировать/раскодировать произвольные текстовые данные в/из аудио-файлов .WAV, ЦАП/АЦП, телеграфного устройства через порты GPIO.
Прототип был разработан на Python, а затем переписан на Go для увеличения производительности.

Genesys
Сан-Франциско и район залива
Software engineer
Январь 2014 — Декабрь 2014 (1 год)

Передо мной была поставлена задача разработки и замены архитектуры web-сервиса по классификации текста (ML технология Solariat/SocialOptimizr) на более эффективную.Я провёл работу по определению узких мест текущей системы, использовавшей uWSGI + Celery. Затем подготовил и испытал 3 различных варианта новой архитектуры кластера.Результатом явилась система, в которой worker-машины могли эффективно выполнять как CPU-bound задачи классификации текста используя все доступные ядра процессора, так и I/O-bound задачи (web, REST API, slow clients и т.д.) используя Green-threads.При назначении задач использовалась умная балансировка (в отличии от простой round-robin стратегии). В добавок новая архитектура позволяла динамически расширять и сужать кластер машин, обслуживающих web-сервис.Технологии:- Python- Gunicorn (web server)- Gevent (green threads, async networking)- ZeroMQ (ZMQ routing, ZMQ devices)- worker discovery- load balancing- RPC- MongoDB- SciPy / Scikit-learn (ML, classification)

Solariat / SocialOptimizr
Сан-Франциско и район залива
Software architect
Ноябрь 2012 — Август 2013 (10 месяцев)

Стартап Solariat (впоследствии был переименован в SocialOptimizr) построил технологию машинного обучения для real-time классификации текстовых сообщений в социальных сетях и интерактивного анализа накопленной статистики.Я провёл масштабный рефакторинг и чистку кода, затрагивающую, без преувеличения, все компоненты большой системы. Оптимизировал и распараллелил процесс подготовки, обучения и сравнения классификаторов, что кардинально (как минимум в 10 раз) сократило время тренировки и проверки результатов. В несколько раз увеличил скорость прохождения тестов.Так же мне удалось значительно улучшить качество классификации путём перебора и сравнения всевозможных feature-extractor функций и классификаторов (ML).Кроме того я участвовал в разработке online-классификатора и оригинальных индексов для эффективного поиска по множеству критериев.Технологии:- Python- NumPy- SciPy / Scikit-learn (ML, классификаторы, sparse-матрицы)- NLTK (RegexGrammarParser, Tagger, ...)- Pandas- Matplotlib- Multiprocessing (OS process pool)- MongoDB (sharding, replication)- ElasticSearch(позже стартап SocialOptimizr был приобретён компанией Genesys, где я и продолжил работать)

City Chatter
Сан-Франциско и район залива
Backend architect
Июнь 2012 — Октябрь 2012 (5 месяцев)

В 2012 году я был приглашён в стартап CityChatter для создания горизонтально-масштабируемой серверной архитектуры дополняющей мобильное чат-приложение.В рамках этой работы я активно участвовал в тестировании всевозможных реализаций websocket, результаты которого доступны здесь: http://eric.themoritzfamily.com/websocket-demo-...Полученная архитектура позволяла динамически расширять и сужать кластер серверов в облаке (в зависимости от загрузки системы). При этом соответствующие DNS записи автоматически обновлялись для бесшовной интеграции/деградации.Технологии:- Python / PyPy- Tornado- Fabric- Pub/Sub- Websocket- Redis- Amazon Web Services (EC2, Route53)- Linode- DNS based load-balancing- Linux TCP/IP tuning- load testing

Datafly.net
Портленд
Fullstack web-developer
Январь 2007 — Июнь 2012 (5 лет и 6 месяцев)

Долгое время я сотрудничал с компанией Datafly.net создавая различные web-сайты.Пожалуй, самым крупным и сложным из которых был web-сайт для японской принтинговой компании KingPrinters. При помощи этого сайта компания не только получает львиную долю заказов, но и ведёт весь сопутствующий учёт, а так же отслеживает всю технологическую цепочку.Нужно сказать, что дневной оборот у компании порядка нескольких десятков тысяч долларов – заказы и медиа-данные приходят как горячие пирожки.Технологии:- Python, C- Apache, Nginx, Gunicorn, uWSGI- Web technologies: HTML, CSS, JS, MVC, etc.- DB: MySQL, PostgresSQL, NoSQL, ORM- Memcached, Redis- Metaprogramming- Linux, FreeBSD- rsync, scp, ssh, autossh

Высшее образование
Таврический национальный университет им. Вернадского
Симферополь
Факультет: Математики и информатики
Сентябрь 1997—Май 2001 (3 года и 8 месяцев)
Программист