en English
Добро пожаловать, {{ visitor.username }}, на мою страничку
Примерно 18 лет разрабатываю ПО. В основном, работал над проектами, перемалывающими большие объёмы данных, зачастую в реальном времени. Люблю создавать умное ПО. В частности, в последнем проекте приходилось собирать много текста из сети и извлекать из них сложно структурированную информацию с помощью нейросетей. Много лет работал удалённо, в штате или по контрактам. А потому научился быть дисциплинированным, ибо от результата зависела и оплата. Ценю интересность проектов гораздо выше денег. Mealmind свой проект Когда вы работаете разработчиком программного обеспечения, вам платят за то, что вы умеете делать в данный момент. Это создает порочный круг, когда вы получаете все больше и больше специализированных знаний, а переключение на что-то принципиально новое становится всё более трудным. Вот почему, в 2017 году я оставил свою последнюю удобную работу и решил потратить некоторое время на расширение своих познаний в новых направлениях, которые меня интересовали. Mealmind стал для меня испытательным полигоном, способом догнать новые IT-технологии во множестве областей, включая: Я улучшил свой Rust, который использовал для обработки данных (tokio, SeaORM), а также для backend и frontend. В итоге заменил многие части, написанные на JavaScript и Python, на Yew и Actix. Много занимался Deep Learning (нейронные сети) в целом. Имел возможность поработать с различными архитектурами нейронных сетей, реализуя все своими руками, с нуля: В процессе мне пришлось учиться логированию экспериментов, подстройке гиперпараметров, регуляризации и оптимизации, научиться структурировать такие ML-проекты и использовать предварительное обучение для экономии усилий. Я привык читать, разбирать и воспроизводить сложные научные работы (например, в области Reinforcement Learning и NLP, теории оптимизации). Освоил вычисления на GPU с OpenCL, включая написание собственных ML-ядер. Получил опыт развертывания с помощью контейнеров, их управления и оркестровки, используя Docker, Kubernetes и Ansible. Хотя я не новичок в мониторинге, на этот раз мне пришлось создавать его самостоятельно, используя Eclipse Mosquitto, Grafana и Telegraf. К сожалению, из-за... скажем так, глобальных политических и рыночных изменений, мне пришлось оставить проект. Тем не менее, я благодарен за тот обширный опыт, который он мне дал. IPONWEB BIDSWITCH IPONWEB специализируется на технологии и инфраструктуре программного управления торгами на рынке онлайн-рекламы в реальном времени. Одно из подразделений компании, BidSwitch, было создано, чтобы помочь решить многие из основных технических проблем и трений, которые препятствуют взаимосвязи платформ и торговле на уровне инфраструктуры. Изначально я присоединился к команде как веб-разработчик фронтенда и бэкенда, используя Django и Angular. За время работы в компании я помог запустить несколько внутренних проектов, которые впоследствии переросли в новые продукты или их части: в частности, пользовательский интерфейс BidSwitch, сбор статистики и формирование финансовой отчетности для клиентов, прогнозирование рекламного трафика, автоматической проверки объявлений, некоторые API для клиентов. Последние годы работы в компании я провел, в основном, сосредоточившись на высоконагруженных бэкенд-проектах, занятых как обработкой и анализом больших объемов данных с торговых площадок, так и взаимодействием с другими сервисами. За это время я использовал C++ и Python, имел большой опыт работы с PostgreSQL и нереляционными кластерами Cassandra и MongoDB, а также со многими критическими частями современной ИТ-инфраструктуры, включая автоматический мониторинг, тестирование, сбор сообщений об ошибках через Sentry, непрерывную интеграцию и доставку, сборку Debian-пакетов. Проектировал и разрабатывал сайт онлайн-рынка актеров, играющих роль Деда Мороза и Снегурочки на новогодних праздниках, а также предоставляющих смежные услуги. Интегрировал проект с системой онлайн-платежей QIWI. Smart Links специализируется на показе рекламных объявлений в текстах сайтов-партнёров. Я отвечал за Система была написана на языке C и полагалась на ZeroMQ для обеспечения связности компонентов при масштабировании. Она была способна обрабатывать сотни документов (HTML-страниц) в секунду на русском или украинском языках на обычном домашнем компьютере, нормализовать тексты и определять ключевые части текстов, на которые можно нацелить рекламу. Artela.ru (startup) Отвечал за проектирование и реализацию универсального магазина цифровых услуг, таких как VoIP телефония, веб-домены, хостинг. Здесь я впервые применил в коммерческом проекте познания, почерпнутые из книги Алана Купера "Об интерфейсе" и других подобных отечественных и зарубежных изданий. Получил практику написания пользовательских историй и проектирования цельной структуры пользовательского интерфейса. В процессе реализации, интегрировал магазин с несколькими системами онлайн-платежей: Webmoney, Яндекс.Деньги и Paypal. Новостное агенство Gzt.ru Архитектура и разработка новостного портала - как бэкенда, так и, частично, фронтенда (сильно кастомизированная административная панель Django). Получил хороший опыт использования Django на сложном динамичном ресурсе с большим трафиком, что потребовало кропотливого проектирования модели данных, оптимизации крайне сложных запросов и кэширования на разных уровнях. Domik63.ru Информационный портал по недвижимости Самарской области Разрабатывал серверную и клиентскую часть портала: Интер-М, веб-студия Бэкенд-разработчик на текущие проекты. Unkom, веб-студия Пришёл как Perl-разработчик после университета, позднее мигрировал на PHP. Разработал систему управления контентом для сайтов студии и собственный движок форума, которые были использованы для построения многочисленных сайтов правительственных организаций и бизнесов. Наиболее запоминающимся были сайт и форум развлекательного телеканала МузТВ. Какое-то время участвовал в разработке CRM на Java. Вообще курсов и книг было много, но здесь упомяну только то, что могу подтвердить документами/сертификатами. 4-летний диплом о неоконченном высшем образовании Релевантные курсы Порой, в ходе работы, у меня появлялись кусочки кода, которые могли бы быть полезны кому-то ещё. Я старался делиться таковыми на своём GitHub, где постепенно накопилось некоторое их количество. Я очень люблю садоводство и овощеводство. И стараюсь это делать "по науке". После нескольких месяцев изучения того, как правильно выращивать растения, я создал калькулятор, который использует математическую оптимизацию (самописный симплекс-метод), чтобы убедиться, что моя смесь удобрений всегда соответствует рекомендациям экспертов и содержит все необходимое для хорошего роста роста растений и получения хорошего и полезного урожая. Всё это написано на Rust, используя клиентский веб-фреймворк Yew, компилируется в WebAssembly и работает в любом современном браузере. Калькулятор специально заточен для быстрого составления еженедельных подкормочных смесей для выращивания по методу доктора Джекоба Миттлайдера. используя только доступные в продаже удобрения. Смеси создаются по шагам, и в процессе сразу видно, какой из компонентов не позволяет получить желаемый результат. Хотя Markdown стал де-факто стандартом разметки в комментариях и некоторых блогах, он довольно ограничен в выразительности, особенно когда речь идет о создании насыщенных онлайн-публикаций. "Пиши HTML", - говорит Markdown, а это не всегда приемлемо. Textile, напротив, был создан с учетом особенностей CMS и сложных публикаций. Например, он позволяет создавать нестандартные блоки контента без необходимости прибегать к HTML. Лично я довольно часто использовал Textile в своей практике, и, когда возникла необходимость, я портировал парсер PHP-Textile на Rust. Порт не красив и не идиоматичен Rust'у, поскольку я умышленно старался сохранить оригинальную структуру PHP-кода, чтобы упростить перенос новых функций в будущем (Textile продолжает улучшаться). Но, свою работу порт выполняет :) Пока я возился с CNN и Трансформерами для обработки текста, я решил попробовать их в прогнозировании временных рядов, например, стоимости акций и криптовалют. Поэтому я написал инструмент, который Богатым я не стал, но понял, что WaveNet хорош не только работы с человеческой речью :) Я положил глаз на Transformer сразу после выхода оригинальной публикации "Attention is All you need" в 2017ом, и сразу влюбился в идею. Мой Keras-transformer - это библиотека, реализующая базовый конструктор для построения (универсальных) моделей-Трансформеров с помощью Keras. Она позволяет гибко собирать многоступенчатые модели. Это не "подключи, загрузи веса и используй", а скорее исследовательский инструмент, в котором мне хотелось собрать лучшие идеи и поделиться собственной, хорошо аннотированной реализацией. Судя по большой волне положительных откликов, у меня получилось. Библиотека поддерживает позиционное кодирование и эмбеддинги, маскировку внимания, сжатие внимания в памяти, ACT (адаптивное время вычислений) и другие плюшки. Все части модели (такие как само-внимание, функция активации, нормализация слоев) доступны как слои Keras, так что при необходимости, вы можете построить свою версию Transformer, перекомпоновав их как-то иначе, или вовсе заменив. Для тех, кто не в курсе, (Универсальный) Трансформер - это архитектура глубокого обучения, описанная, пожалуй, в одной из самых впечатляющих DL-статей 2017 и 2018 годов: Attention is All you need и "Universal Transformers" команды Google Brain. Авторы выдвинули идею рекуррентного многоголового само-внимания, которая вдохновила большую волну новых исследовательских моделей, которые продолжают появляться с тех пор, демонстрируя новые передовые результаты во многих задачах обработки естественного языка, включая перевод, синтаксический разбор, ответы на вопросы и даже алгоритмические задачи. В отличие от классических рекуррентных нейронных сетей, Трансформер обучается гораздо быстрее. Он также способен эффективно обрабатывать многочисленные дальние зависимости в текстах. При генерации текстов Transformer создает более связные истории, качество которых не ухудшается с ростом их длины, как это обычно происходит с рекуррентными сетями. Именно Трансформер лежит в основе потрясающих успехов ChatGPT и подобных ИИ моделей последних лет. KERL - это моя коллекция различных алгоритмов Reinforcement Learning и связанных с ними техник, реализованных исключительно с помощью Keras. Цель проекта - создать реализацию современных алгоритмов RL, а также платформу для разработки и тестирования новых алгоритмов, сохраняя при этом простоту и переносимость кода благодаря Keras и его возможности использовать различные бэкенды (код писался до того, как Keras стал частью Tensorflow). Это делает KERL очень похожим на OpenAI Baselines, только с упором на Keras. Что попало в KERL: Все алгоритмы поддерживают адаптивную нормализацию подкреплений Pop-Art, описанную в работе DeepMind "Learning values across many orders of magnitude". Это значительно упрощает обучение, часто позволяя просто бросить алгоритм в задачу и получить достойный результат. С помощью KERL можно быстро обучить различных агентов играть в игры Atari просто по картинке, а затем погрузиться в детали реализации. Вот пример такого агента, обученного с помощью KERL (видео на youtube): A2C-Агент, играющий в Ms. Pacman Ограничения: В настоящее время KERL не поддерживает задачи непрерывного управления и пока что тестировался только на различных играх Atari, поддерживаемых The Arcade Learning Environment через OpenAI Gym. Avalanche - это простой фреймворк для глубокого обучения, вроде Tensorflow или PyTorch, написанный с нуля на C++ и Python. В отличие от большинства существующих инструментов, он основан на OpenCL, открытом вычислительном стандарте. Это позволяет Avalanche работать практически на любом GPU, включая GPU от Intel и AMD, даже на довольно старых моделях. Проект был создан как попытка лучше понять, как работают современные фреймворки глубокого обучения (а построены они на одинаковых принципах), и попрактиковаться в программировании GPU. Avalanche основан на модели вычислительного графа. Он поддерживает автоматическое дифференцирование, широковещательные операции (broadcasting), автоматическое управление памятью, при необходимости может использовать несколько GPU. Фреймворк также работает как бэкенд для Keras, поэтому если вы знаете Keras, вы можете начать использовать Avalanche без необходимости изучать что-либо о нем. Я всегда был большим фанатом генетических алгоритмов. Среди них, Картезианское Генетическое Программирование (в разных формах) много лет остаётся моим самым любимым, за его изящность, эффективность, и подобие во многом реальному поведению биологических геномов. CartGP - это очень простая и минималистичная библиотека C++/Python, реализующая картезианское генетическое программирование (CGP). В настоящее время библиотека поддерживает классическую форму CGP, когда узлы расположены в виде сетки и не допускаются рекуррентные связи. Этот Jupyter-блокнот содержит демонстрацию использования библиотеки из Python. Помимо программирования, я люблю бегать, кататься на велосипеде, моделировать во FreeCAD и печатать свои творения на самодельном 3D-принтере. Также я неплохо знаком с электроникой, на уровне где я могу полностью с нуля спроектировать и спаять собственный импульсный блок питания на несколько сотен ватт или сделать измерительный прибор на микроконтроллере. Ещё я очень люблю растения и выращивать чего-нибудь интересное на своём участке.Навыки
Опыт работы
Software Developer
Senior Software Developer
Senior Software Developer (фрилансер)
Senior Software Developer (фрилансер)
Senior Software Developer (фрилансер)
Senior Software Developer (контрактор)
Software Developer со-основатель
Senior Software Developer
Senior Software Developer
Формальное образование и сертификаты
Deep Learning (Глубокое машинное обучение)
Самарский Государственный Аэрокосмический Университет (СГАУ)
Атырауская школа-лицей № 17 (Казахстан)
Мои проекты
Калькулятор оптимальной смеси удобрений по методу Митлайдера
Rustextile
Trade-archivist
Keras-transformer
KERL
Avalanche
CartGP
Интересы