Этот документ в первую очередь предназначен для потенциальных работодателей и тех, кому важно быстро понять, чем я занимаюсь как разработчик.
На GitHub я публикую свои открытые инструменты, утилиты и экспериментальные проекты, которые отражают мои технические интересы вне основной работы.
- 12+ open-source проектов
- специализация: C/C++, системное программирование, сборочные системы, OpenGL
- разрабатываю модульный 2D-игровой движок (~18k LOC)
- создал переиспользуемую CMake-инфраструктуру для множества проектов
- написал Unicode-библиотеку с почти 100% покрытием тестами
- разработал инструменты автоматизации для сложных C/C++ окружений
-
Ключевые библиотеки и инструменты
- libuc — библиотека для работы со строками в Unicode‑кодировках
- cmake_barebones — переиспользуемая CMake‑библиотека для настройки сборки
- vgazer — инструмент для развёртывания окружений и зависимостей для C/C++ проектов
-
- gallery — простое Qt‑приложение для просмотра изображений
- match3 — консольная игра Match‑3 на Lua
- slot_machine — прототип игры «слот‑машина» на C++
- angles — настольная игра «Уголки» с AI-оппонентом и OpenGL‑рендером
- test_task_for_radiofid — демонстрация системного программирования в Linux
- test_task_for_dsp_labs_bot — Telegram‑бот с обработкой изображений и голосовых сообщений
Репозиторий: https://github.com/edomin/libuc Категория: Ключевая библиотека
🛠 Технологии: C, GNU Make, CMocka, CMake, Doxygen 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Библиотека утилитарных функций для работы со строками в кодировках UTF-8, UCS-2 и UCS-4 (UTF-32), а также конвертирования строк между этими кодировками.
Зачем: упрощает работу с Unicode-строками в C-проектах, где нельзя тянуть тяжёлые зависимости, но нужна надёжная обработка текста и предсказуемое использование памяти.
⭐ Что интересного / Чем я горжусь
- Почти полное покрытие кода тестами
- Исчерпывающая документация к публичному API библиотеки
🔍 Технические особенности Оптимизирована для лёгкой интеграции, не требует динамической памяти, минимальные зависимости.
📦 Использование в других проектах Использовалась в проектах для подготовки текста в кодировке UTF-8 к выводу на экран PNG-шрифтами.
📝 Состояние проекта Завершён, при необходимости может использоваться как утилитарная библиотека.
📏 Размер / масштаб
- Код + заголовочные файлы: 4 файла, ~430 строк кода
- Юнит-тесты: 26 файлов, ~1150 строк кода
🎓 Чему я научился / что вынес
- Конвертирование строк между различными кодировками
- Поддержка кода, собирающегося различными компиляторами (gcc, clang, mingw, tcc)
- Написание юнит-тестов с использованием фреймворка CMocka
- Написание и генерация документации с использованием Doxygen
- Написание changelog'ов в соответствии с конвенцией "Keep a Changelog"
Репозиторий: https://github.com/Survival-SDK/cmake_barebones Категория: Ключевая библиотека
🛠 Технологии: CMake 👤 Роль: Автор и единственный разработчик
📘 Краткое описание CMake-библиотека, включающая в себя функционал сборки проектов на CMake, который я обычно вручную копировал из проекта в проект.
Зачем: позволяет быстро поднимать единообразную и строгую систему сборки в новых C/C++ проектах, не копируя логику из старых репозиториев.
⭐ Что интересного / Чем я горжусь
- Кастомные build-type:
Coverage(для сборки проекта и отслеживания покрытия кода тестами),Lint(для проверки проекта инструментом clang-tidy) иIWYU(для проверки проекта инструментом Include-What-You-Use) - Проверка флагов компилятора, заголовочных файлов, библиотек и свойств C-типов с акцентом на читаемость configure-логов (по аналогии с тем, как это выглядит в configure-логах инструмента GNU Autotools)
- Проверка всех доступных
-W(warning) флагов, поддерживаемых компилятором, с группировкой по категориям и возможностью подключать все предупреждения категории одной командой
🔍 Технические особенности Отсутствие внешних зависимостей, лёгкость добавления в новый проект.
📦 Использование в других проектах
Перевёл почти все свои проекты, собирающиеся при помощи CMake, на использование этой библиотеки. Теперь доработки логики сборки чаще происходят в cmake_barebones, а не в каждом проекте отдельно.
📝 Состояние проекта Активно используется и поддерживается.
📏 Размер / масштаб
- ~25 файлов
- ~2600 строк кода на CMake
🎓 Чему я научился / что вынес
- Написание переиспользуемой CMake-библиотеки
- Более глубокое понимание работы системы сборки CMake
Репозиторий: https://github.com/Survival-SDK/vgazer Категория: Ключевая библиотека
🛠 Технологии: Python 3, Docker 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Инструмент для быстрого развёртывания окружения, необходимого для сборки проектов на C и C++, имеющих множество внешних зависимостей.
Зачем: уменьшает рутину при подготовке окружений для сборки C/C++ проектов с большим числом зависимостей, снижая риск «it works on my machine».
⭐ Что интересного / Чем я горжусь
- Поиск и установка в изолированное окружение актуальных версий инструментов и библиотек
🔍 Технические особенности Проект выполнен в двух формах:
- библиотека для встраивания в другое ПО (на её основе можно реализовать, например, кастомный пакетный менеджер);
- консольное приложение для развёртывания инструментов и библиотек в изолированном окружении.
📦 Использование в других проектах Используется в проектах, требующих для сборки большое число зависимостей.
📝 Состояние проекта Активно используется / поддерживается, проект остаётся в экспериментальном развитии.
📏 Размер / масштаб
- ~93 файла
- ~6500 строк кода на Python
🎓 Чему я научился / что вынес
- Веб-скрейпинг при помощи библиотек
requestsиBeautifulSoup - Написание скриптов для автоматической установки и развёртывания инструментов и библиотек в Linux-окружении
- Практика автоматизации сборки сложных окружений
Репозиторий: https://github.com/edomin/gallery Категория: Тестовое задание
🛠 Технологии: Qt 5, CMake 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание для работодателя: приложение для просмотра изображений с возможностью переключения между файлами в директории и регулировки яркости изображения.
⭐ Что интересного / Чем я горжусь
- Небольшое аккуратное приложение, решающее задачу в минимальном объёме кода
🔍 Технические особенности Простое настольное приложение на Qt.
🧪 Тестовое задание
- Требовалось написать программу просмотра изображений на Qt с возможностью переключения на предыдущее/следующее изображение в директории и регулировки яркости
- Задание было выполнено в сжатые сроки
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 7 файлов
- ~190 строк кода на C++/Qt
🎓 Чему я научился / что вынес
- Работа с графикой и обработкой изображений в Qt
Репозиторий: https://github.com/edomin/match3 Категория: Тестовое задание
🛠 Технологии: Lua 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание: консольная игра в жанре Match3 с текстовым вводом команд.
⭐ Что интересного / Чем я горжусь
- Реализовал альтернативное представление игрового поля в виде цветных символов, выходя за рамки минимальных требований задания
🔍 Технические особенности Кроссплатформенное консольное приложение без внешних зависимостей.
🧪 Тестовое задание
- Требовалось написать консольную игру Match3 на Lua с управлением через ввод строковых команд
- На выполнение ушло не более двух дней
- В качестве улучшения использовал ASCII escape-последовательности для раскрашивания фигур, чтобы сделать игру визуально приятнее
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 15 файлов
- ~615 строк кода на Lua
🎓 Чему я научился / что вынес
- Работа с ASCII escape-последовательностями для вывода цветного текста в консоль
Репозиторий: https://github.com/edomin/slot_machine Категория: Тестовое задание
🛠 Технологии: C++, CMake, miniaudio, tigr 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание: прототип игры в жанре слот-машина с графикой и корректной симуляцией работы барабанов слот-машины.
⭐ Что интересного / Чем я горжусь
- Освоил библиотеку
miniaudioдля воспроизведения звука и добавил звук, хотя это не требовалось по ТЗ
🔍 Технические особенности Лёгкое графическое приложение, использующее минимальные сторонние библиотеки.
🧪 Тестовое задание
- Требовалось реализовать игру-слот-машину с графикой и корректной симуляцией вращения барабанов
- Работа была выполнена за 4 дня
- В качестве улучшения добавлен звук через
miniaudio, хотя это не входило в требования
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 49 файлов
- ~980 строк кода на C++
🎓 Чему я научился / что вынес
- Использование библиотеки
miniaudioдля воспроизведения звука - Получил подробный разбор кода на собеседовании, что помогло увидеть проект глазами других более опытных разработчиков
Репозиторий: https://github.com/edomin/angles Категория: Тестовое задание
🛠 Технологии: C++, CMake, OpenGL, GLFW, GLEW, GIMP (экспорт изображений в C-массивы) 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание: реализация настольной игры “Уголки” с AI-оппонентом и OpenGL-графикой.
⭐ Что интересного / Чем я горжусь
- Разработал лёгкий рендер на OpenGL с батчингом, оптимизированный для интерактивной графики.
- Полноценный рабочий AI-оппонент
🔍 Технические особенности Собственный рендер на OpenGL, минимальная зависимость от внешних инструментов и ручное управление графикой.
🧪 Тестовое задание
- Требовалось написать игру "Уголки" с работающим AI-оппонентом
- Были ограничения на библиотеки/фреймворки для вывода графики: разрешалось использовать hge, SDL2 или OpenGL
- На выполнение задания потребовалось 11 дней
- В качестве упрощения загрузки ресурсов использовал возможность GIMP экспортировать изображения в C-массивы, что избавило от необходимости писать загрузчик графики
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 70 файлов
- ~2500 строк кода на C++
🎓 Чему я научился / что вынес
- Работа с современным C++
- Написание простого рендера на OpenGL
- Использование паттерна "state machine"
- Реализация простейшего AI
- Практическое использование GIMP для экспорта изображений в C-массивы и дальнейшей работы с ними в коде
Репозиторий: https://github.com/edomin/test_task_for_radiofid Категория: Тестовое задание
🛠 Технологии: C, GNU Make, Linux 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание на демонстрацию владения программированием в Linux: работа с системными вызовами, syslog, сокетами, pipe'ами и потоками.
⭐ Что интересного / Чем я горжусь
- Чёткое выполнение всех требований задания без лишней сложности
🔍 Технические особенности Отсутствие внешних зависимостей, работа напрямую с системным API Linux.
🧪 Тестовое задание
- Текст задания подробно описан в README репозитория
- На выполнение было дано 2 дня
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 4 файла
- ~250 строк кода на C
🎓 Чему я научился / что вынес
- Систематизировал и продемонстрировал уже имеющиеся знания по программированию в Linux
Репозиторий: https://github.com/edomin/test_task_for_dsp_labs_bot Категория: Тестовое задание
🛠 Технологии: Python 3; библиотеки: telebot, face_recognition
👤 Роль: Автор и единственный разработчик
📘 Краткое описание Тестовое задание: Telegram-бот, который отслеживает и сохраняет изображения с лицами и голосовые сообщения из диалога, а затем по команде выгружает накопленные данные.
⭐ Что интересного / Чем я горжусь
- Реализовал рабочего Telegram-бота с обработкой медиа-контента
🔍 Технические особенности Прямое использование библиотек для работы с Telegram API и распознавания лиц.
🧪 Тестовое задание
- Требовалось написать бота, который сохраняет все присланные изображения с лицами и голосовые сообщения, а затем по команде выгружает сохранённые данные
- Задание выполнялось в сжатые сроки
📝 Состояние проекта Завершён, не развивался после выполнения задания.
📏 Размер / масштаб
- 11 файлов
- ~180 строк кода
🎓 Чему я научился / что вынес
- Написание простого Telegram-бота на Python
- Настройка и покупка хостинга
- Развёртывание бота на сервере
Репозиторий: https://github.com/edomin/samples Категория: Эксперимент
🛠 Технологии: C, awk, inih, ketopt, libsir, xmempool 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Сборник небольших экспериментальных подпроектов и примеров, вынесенных в один репозиторий.
⭐ Что интересного / Чем я горжусь
- Реализован работающий обработчик критических ошибок выполнения программы с выводом stacktrace
🔍 Технические особенности Несколько независимых подпроектов, объединённых общим репозиторием.
📝 Состояние проекта Экспериментальный, пополняется по мере появления новых идей.
🎓 Чему я научился / что вынес
- Углубил опыт работы с экосистемой C-инструментов (ini-парсинг, разбор опций командной строки, логирование, memory pools).
- Реализовал обработчик критических ошибок с формированием stacktrace, что повысило диагностируемость программ.
- Попробовал awk и вспомогательные утилиты в более нетривиальных сценариях.
Репозиторий: https://github.com/edomin/ebnf_ini Категория: Эксперимент
🛠 Технологии: C 👤 Роль: Автор и единственный разработчик
📘 Краткое описание Эксперимент по реализации разбора отдельных конструкций грамматики, описанной в нотации EBNF.
Зачем: исследовать подход к построению парсеров на основе формально описанных грамматик и улучшить навыки работы с синтаксическим анализом.
⭐ Что интересного / Чем я горжусь
- Практическая реализация парсера по разбору текста на основе грамматики (EBNF)
🔍 Технические особенности Небольшой проект, сфокусированный на разборе грамматики и тестировании подхода.
📝 Состояние проекта Экспериментальный, не развивался после первоначальной реализации.
📏 Размер / масштаб
- Код: 6 файлов, ~520 строк
- Тесты: 1 файл, ~480 строк
🎓 Чему я научился / что вынес
- Описание грамматики с использованием нотации EBNF
- Реализация разбора грамматики, описанной при помощи EBNF
Репозиторий: https://github.com/Survival-SDK/steroids Категория: Эксперимент
🛠 Технологии: C, GNU Make, CMake, Docker, distrobox, XLib, OpenGL, EGL, линейная алгебра, libpng, stb_image, inih 👤 Роль: Автор и единственный разработчик
📘 Краткое описание 2D-игровой движок с модульной архитектурой, написанный на C.
Зачем: используется как платформа для экспериментов с архитектурой движка, плагинной системой и низкоуровневой графикой, а также как каркас для прототипирования игр (в т.ч. на Ludum Dare).
⭐ Что интересного / Чем я горжусь
- Написанный с нуля рендер на OpenGL
- Создание окон и OpenGL-контекста на базе EGL и XLib без использования высокоуровневых библиотек
- Реализация кастомной объектно-ориентированной модели на C
- Модульная архитектура, построенная на плагинах
🔍 Технические особенности Модульная (плагинная) архитектура, низкоуровневая работа с графикой и окном.
📦 Использование в других проектах Был использован один раз на хакатоне Ludum Dare, но в целом остаётся экспериментальной платформой.
📝 Состояние проекта Поддерживается, остаётся экспериментальным игровым движком.
📏 Размер / масштаб
- 214 файлов
- ~18 300 строк кода на C
🎓 Чему я научился / что вынес
- Построение модульных приложений на основе плагинов
- Создание окна и OpenGL-контекста без высокоуровневых библиотек
- Реализация векторной и матричной 2D-арифметики
- Реализация объектно-ориентированных подходов на C
- Биндинг C-функций в Lua средствами LuaJIT FFI
- Создание Lua-модулей из C
- Использование distrobox для запуска графических приложений в изолированной среде
Рассматриваю роли, связанные с системным программированием на C/C++, разработкой инструментов, инфраструктурой сборки или низкоуровневой графикой.



