Мой опыт

  • Разработка форка PostgreSQL

    Доработки в ядре СУБД PostgreSQL и разработка расширений в рамках импортозамещения и перехода с MS SQL Server. Важные доработки в планировщике, оптимизация кеширования запросов, шардирование.
    Чистый C, PostgreSQL.

    Q.DataBase.


    Профит для компании

    • мои доработки ядра являются критически важными для всей компании, без них миграция продуктов на PostgreSQL была невозможна
    • закрыл большое количество сложных задач
    • показ для клиентов, к которому готовились полгода, прошел успешно, поскольку я успел сделать все важные доработки к дедлайну
    • много помогал менее опытным коллегам, когда они застревали со своими непростыми задачами
    • сыграл важную роль в проекте для банка из топ-5, связанном с шардированием БД на PostgreSQL


    Мой профит

    • стал разработчиком ядра СУБД
    • попробовал роль техлида и успешно с этим справился
    • еще раз убедился, что умею быстро разбираться с ранее незнакомыми технологиями и большими объемами кода


    Причина ухода

    • изменение глобальных планов компании на продукт
    • компания в одностороннем порядке изменила изначальные договорённости


    Задачи

    • доработки в планировщике: запросы, которые работали по 20 минут и вываливались по таймауту, стали работать как в MS SQL Server, за несколько секунд (подробности)
    • решил проблему с деградацией работы Postgres через несколько часов работы при высокой нагрузке
    • участвовал в доработках, связанных с оптимизацией инвалидации кеша
    • большие доработки pg_hint_plan
    • доработка Patroni для Astra Linux 1.6
    • доработки расширений для контроля целостности дистрибутива, целостности хранимок
    • эксперименты по использованию Tarantool в качестве in-memory кеша для Postgres
    • аналитическая работа по шардированию, предложил вариант решения
    • в кратчайшие сроки реализовал прототип балансировщика, который в зависимости от запроса посылает его на тот или иной шард, для клиента балансировщик выглядит обычным сервером PostgreSQL
    • доработка расширения sr_plan для PostgreSQL 15, реализация функционала для миграции сохраненных планов между БД
    • доработки ядра по поводу 64-битного счетчика транзакций
    • успешные эксперименты со сжатой файловой системой (аналог CFS от Postgres Pro)
  • Разработка торгового графика

    Разработка кроссплатформенной библиотеки торгового графика под веб, Android, десктоп, iOS. Использовал Java, GWT, React, TypeScipt, WebGL, Swing, немного Kotlin, MetaTrader (mq5), TradingView (Pine Script), WebAssembly.

    FinamTrade.


    Профит для компании

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


    Причина ухода

    • договаривались, что буду разрабатывать новый график на Kotlin, в реальности этого не было


    Задачи

    • поддержка и развитие очень крутой библиотеки, в которой код пишется один раз и работает на многих платформах, включая рендеринг


    Мой профит

    • стал полноценным Java-программистом (раньше были только собственные проекты)
    • получил много опыта в TypeScript/React и Android/Kotlin
    • в боевых условиях проверил, что я по-прежнему очень быстрый программист и могу долго работать в режиме кранча
    • получил знания в новой предметной области - трейдинг и теханализ
  • ПО для нефтяников, бэкенд + фронтенд

    Занимался бэкендом на C# и фронтендом на React/TypeScript. Нефтяная отрасль.

    OIS Terra - цифровая модель продуктивного пласта.

    OIS iField - интеллектуальное месторождение.

    Задачи

    • участие в разработке крутого софта для нефтяников на C#, ASP.NET, TypeScript, React
    • 3D-визуализация геологических данных на WebGL в браузере, модуль с нуля создан на основе Three.js
    • разработка модулей в стеке JavaScript/ExtJS и C++ (для legacy-проекта)
    • множество других задач


    Мой профит

    • прокачал скиллы как backend-программист на C#, ASP.NET
    • прокачал скиллы как frontend-программист на чистом JavaScript, TypeScript, React
    • внезапно прокачал скиллы в написании сложнейших SQL-запросов на тысячу строк, под Oracle, SAP HANA, PostgreSQL, написании хранимок, проектировании БД
    • сделал модуль 3D-визуализации геологических данных как в Petrel, но в браузере
  • Программный комплекс для геологического моделирования месторождений углеводородов

    Нефтяная отрасль. C++, Qt, прикладная математика, алгоритмы, современный OpenGL, GLSL, разработка под Linux, OpenSceneGraph.

    Задачи

    • построение сетки трёхмерной геологической модели
    • с нуля создан модуль 3D-визуализации (как в Petrel, cделал в одиночку на OpenGL/OpenSceneGraph)
    • алгоритмы фильтрации ячеек 3d-модели
    • построение трёхмерной сетки с разломами (жесточайше сложная задача, чуть не надорвался)
    • алгоритмы интерактивного редактирования поверхностей (мышкой) как в Petrel


    Мой профит

    • прокачался в Qt, современном OpenGL, кроссплатформенной разработке
    • хорошо потренировался в математике и сложнейших алгоритмах
  • zTimer3 (wxWidgets version)

    zTimer, переписанный на C++/wxWidgets.

    Использую его под Linux.

    GitHub

  • Баспро

    Нефтяная отрасль. C++, STL, Boost, MFC, C#, Oracle SQL, прикладная математика, OpenGL. Официальный сайт.

    Задачи

    • много математики и алгоритмов
    • модули “схема корреляции”, “геологический разрез”, отображение и редактирование данных
    • оптимальное отображение фотографий керна, с учётом гигантских размеров фотографий
    • очень крутой редактор ресурсов (rc-файлов), с возможностью динамической локализации
    • доработка и оптимизация модуля 3D-визуализации (старый OpenGL)
    • перевод всего кода на 64-бита
    • множество других задач


    Мой профит

    • в команде был плюсовик-олимпиадник очень высокого уровня, многому от него научился
    • прокачался в STL, Boost, новых стандартах C++, немного в C#
  • zTimer

    Небольшое приложение для отслеживания времени. Написано на C# (.NET Framework) под Windows.

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

    GitHub

  • Генератор человекоподобных текстов

    ПО для генерации текстов, почти не отличимых от написанных человеком. Писал для себя, много использовал. Написано под Windows на C++03, Boost, Lua, SQLite, curl.

    GitHub

    Процесс был примерно такой.

    1) Все книги библиотеки Флибуста перегнал в собственный бинарный формат. Остались данные только о порядке слов и концах предложений. Каждое слово хранится в виде целого числа. Отдельно хранится словарь слов, единый для всех книг. Это пока еще “грязный словарь”. В результате скорость работы с базой книг существенно ускорилась и уменьшилось место на HDD.

    2) Каждое слово в бинарном формате занимает 2 или 3 байта. Первый бит обозначает, сколько байтов занимает слово: 0 - 2 байта, 1 - 3 байта. Второй бит обозначает, стоит ли перед словом точка.

    Архив Флибусты занимал более 100GB в zip-архивах. После распаковки текстовые файлы занимали в 3-4 раза больше. После преобразования в собственный формат вся библиотека стала занимать около 10GB в незапакованном виде.

    3) Дальше можем быстро и просто проводить статистические исследования с базой. Собирается статистика частот слов. Находим слова, которые популярны потому что встречаются только в небольшом перечне книг. Таким образом исключаются книги в нишевых тематиках - юридические, медицинские, религиозные, и т.п, одна болгарская книга. Из словаря исключаются имена собственные и редкоиспользуемые слова. Получается “чистый словарь” с частотами слов.

    4) Cтандартные std::map и std::hash_map мне не подошли по скорости и памяти для хранения словаря с частотами. Сделал свою структуру данных. Которая помимо того, что работала быстро, хранила все свои данные в одной последовательной области памяти. Поэтому загрузка с диска была почти мгновенной - бинарный файл просто загружался в память.

    5) Собирается статистика частот словосочетаний. Какие слова могут быть третьими после каждой пары слов. Какие слова могут быть в конце предложения. Всё хранится в собственном бинарном формате.

    6) На основе полученных данных при помощи функции rand() написан генератор человекоподобных текстов. На всё это у меня ушло примерно 3 недели работы по вечерам.

  • Другие шутеры в стиле Alien Shooter

    Разрабатывал много других шутеров на движке Alien Shooter и Alien Shooter 2.

    Zombie Shooter. Подробнее в Wikipedia и Steam.

    Alien Shooter 2: Reloaded. Подробнее в Steam.

    Zombie Shooter 2. Подробнее в Wikipedia и Steam.

    Theseus – Return of the Hero. Подробнее в Wikipedia.

    Alien Shooter - The Experiment. Подробнее в Steam.

  • Казуальные игры в Sigma Team

    Мы много экспериментировали с казуалками, до релиза было доведено 2 игры.

    Chak’s Temple. Подробнее на YouTube и YouTube.

    Crazy Lunch. Подробнее на YouTube.

  • Игра "Alien Shooter 2"

    Компьютерная игра, аркадный изометрический шутер с элементами RPG. C++, DirectX 9.0, свой движок, собственный скриптовый язык. Информация в Wikipedia. Выпущена компаниями 1С (СНГ) и CDV на CD, переиздана в Steam.

    Уникальность проекта в том, что его сделали три человека, из них всего два программиста. Разработка длилась примерно 2.5 года в невероятно высоком темпе. Глядя с высоты моего текущего опыта, понимаю, что для выполнения моих задач требовалось 3-4 программиста.

    Задачи

    • огромнейшее количество разнообразных задач, в том числе касающихся внутреннего игрового движка
    • программирование большого числа геймплейных фич
    • программирование RPG-системы
    • создание большого числа инструментов для геймдизайнеров
    • создание/программирование квестового движка и редактора квестов
    • весь игровой HUD, в том числе магазин, инвентарь, экран героя
    • физика автомобиля, система проверка целостности данных игры, использование защиты от пиратства, система логгирования, система профилей, load/save, движок для локализации
    • много всего другого


    Мой профит

    • Alien Shooter 2 - моё главное достижение в жизни
    • прокачал программистские скиллы в разнообразных областях
    • развил скиллы в геймдизайне, в том числе придумал режим GunStand
    • узнал, что могу хорошо работать в режиме кранча в течение многих месяцев
  • Программный комплекс приближения функций на нерегулярных сетках (диплом, ТюмГУ, 2003)

    В дипломной работе рассматривается задача приближения функций двумерными кубическими сплайнами на нерегулярной сетке.

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

    Текст

    GitHub

  • Студенческие соревнования

    Окончил ТюмГУ в 2003 г с красным дипломом (математик-программист), средний балл - 5.0, признавался лучшим студентом факультета.

    Победитель областной олимпиады по программированию в 2001 г, полуфиналист командного чемпионата мира по программированию ACM. На компьютерном туре чемпионата России по термеху занял 7 место. Многократный победитель и призёр внутривузовских олимпиад по программированию, математике, термеху.

    Читать дальше →
  • Игра "Дорога на Хон-Ка-Ду"

    Компьютерная игра, стратегия в реальном времени. Написана на C++ и DirectX. Информация в Wikipedia.

    Выпущена компанией Бука на CD и переиздана в Steam.

    Поучаствовал в разработке в роли С++ программиста.

    Задачи

    • программирование игровой логики на C++
    • в сложный для команды период взял на себя обязанности главного программиста проекта
    • за несколько дней разобрался в коде и начал закрывать задачи


    Мой профит

    • прокачка скиллов в C++
    • в боевых условиях познал, что использование интерпретируемых скриптов в связке с C++ невероятно ускоряет процесс разработки
    • почувствовал вкус геймдева
  • Распределяющая поразрядная сортировка Змановского

    Придумал сортировку, которая работает быстрее QuickSort Хоара и распределяющей поразрядной Сьюворда.

    В те времена мне казалось, что это очень круто.

    Текст статьи

    GitHub

  • Мультимедиа учебник "Политология" (и другие)

    Мультимедиа учебники на C++/MFC, с использованием Adobe Flash.

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

    Мы использовали MFC, но по-особенному. Абсолютно все виджеты (комбобоксы, кнопки, листбоксы и т.д) были порождены от CWnd и вся их логика была полностью реализована с нуля.

    Задачи

    • разработка GUI
    • разработка кастомных виджетов
    • разработка инструментов для редактирования данных


    Мой профит

    • прокачался в C++, MFC, ООП и design patterns
    • научился делать кастомные виджеты, в том числе очень сложные
    • почувствовал скорость: за два месяца сделал объем работ, который планировался для меня на год.
  • Soccer97

    Простая игра, написанная в 11 классе на Borland Pascal.

    Не представляет никакой ценности кроме исторической.

    Можно поиграть через DOSBox.

    В этой версии геймплей разбалансирован, компьютер играет слишком хорошо.

    GitHub

  • Школьные соревнования

    Победитель и призёр областной олимпиады по математике.

    Многократный победитель и призёр городских олимпиад по физике и математике.

    Окончил школу в 1998 г с золотой медалью.

    Читать дальше →

subscribe via RSS