Skip to content
View edomin's full-sized avatar

Organizations

@Survival-SDK

Block or report edomin

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
edomin/README.md

| English |

Мои проекты на GitHub

Этот документ в первую очередь предназначен для потенциальных работодателей и тех, кому важно быстро понять, чем я занимаюсь как разработчик.

На GitHub я публикую свои открытые инструменты, утилиты и экспериментальные проекты, которые отражают мои технические интересы вне основной работы.

TL;DR:

  • 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‑бот с обработкой изображений и голосовых сообщений
  • Эксперименты и учебные проекты

    • samples — набор экспериментальных подпроектов и примеров
    • ebnf_ini — разбор грамматики на основе нотации EBNF
    • steroids — 2D‑игровой движок с модульной архитектурой

Ключевые библиотеки и инструменты

libuc

Репозиторий: 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"

cmake_barebones

Репозиторий: 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

vgazer

Репозиторий: https://github.com/Survival-SDK/vgazer Категория: Ключевая библиотека

🛠 Технологии: Python 3, Docker 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Инструмент для быстрого развёртывания окружения, необходимого для сборки проектов на C и C++, имеющих множество внешних зависимостей.

Зачем: уменьшает рутину при подготовке окружений для сборки C/C++ проектов с большим числом зависимостей, снижая риск «it works on my machine».

⭐ Что интересного / Чем я горжусь

  • Поиск и установка в изолированное окружение актуальных версий инструментов и библиотек

🔍 Технические особенности Проект выполнен в двух формах:

  • библиотека для встраивания в другое ПО (на её основе можно реализовать, например, кастомный пакетный менеджер);
  • консольное приложение для развёртывания инструментов и библиотек в изолированном окружении.

📦 Использование в других проектах Используется в проектах, требующих для сборки большое число зависимостей.

📝 Состояние проекта Активно используется / поддерживается, проект остаётся в экспериментальном развитии.

📏 Размер / масштаб

  • ~93 файла
  • ~6500 строк кода на Python

🎓 Чему я научился / что вынес

  • Веб-скрейпинг при помощи библиотек requests и BeautifulSoup
  • Написание скриптов для автоматической установки и развёртывания инструментов и библиотек в Linux-окружении
  • Практика автоматизации сборки сложных окружений

Тестовые задания

gallery

Репозиторий: https://github.com/edomin/gallery Категория: Тестовое задание

🛠 Технологии: Qt 5, CMake 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Тестовое задание для работодателя: приложение для просмотра изображений с возможностью переключения между файлами в директории и регулировки яркости изображения.

⭐ Что интересного / Чем я горжусь

  • Небольшое аккуратное приложение, решающее задачу в минимальном объёме кода

🔍 Технические особенности Простое настольное приложение на Qt.

🧪 Тестовое задание

  • Требовалось написать программу просмотра изображений на Qt с возможностью переключения на предыдущее/следующее изображение в директории и регулировки яркости
  • Задание было выполнено в сжатые сроки

📝 Состояние проекта Завершён, не развивался после выполнения задания.

📏 Размер / масштаб

  • 7 файлов
  • ~190 строк кода на C++/Qt

🎓 Чему я научился / что вынес

  • Работа с графикой и обработкой изображений в Qt

match3

Репозиторий: https://github.com/edomin/match3 Категория: Тестовое задание

🛠 Технологии: Lua 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Тестовое задание: консольная игра в жанре Match3 с текстовым вводом команд.

⭐ Что интересного / Чем я горжусь

  • Реализовал альтернативное представление игрового поля в виде цветных символов, выходя за рамки минимальных требований задания

🔍 Технические особенности Кроссплатформенное консольное приложение без внешних зависимостей.

🧪 Тестовое задание

  • Требовалось написать консольную игру Match3 на Lua с управлением через ввод строковых команд
  • На выполнение ушло не более двух дней
  • В качестве улучшения использовал ASCII escape-последовательности для раскрашивания фигур, чтобы сделать игру визуально приятнее

📝 Состояние проекта Завершён, не развивался после выполнения задания.

📏 Размер / масштаб

  • 15 файлов
  • ~615 строк кода на Lua

🎓 Чему я научился / что вынес

  • Работа с ASCII escape-последовательностями для вывода цветного текста в консоль

slot_machine

Репозиторий: https://github.com/edomin/slot_machine Категория: Тестовое задание

🛠 Технологии: C++, CMake, miniaudio, tigr 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Тестовое задание: прототип игры в жанре слот-машина с графикой и корректной симуляцией работы барабанов слот-машины.

⭐ Что интересного / Чем я горжусь

  • Освоил библиотеку miniaudio для воспроизведения звука и добавил звук, хотя это не требовалось по ТЗ

🔍 Технические особенности Лёгкое графическое приложение, использующее минимальные сторонние библиотеки.

🧪 Тестовое задание

  • Требовалось реализовать игру-слот-машину с графикой и корректной симуляцией вращения барабанов
  • Работа была выполнена за 4 дня
  • В качестве улучшения добавлен звук через miniaudio, хотя это не входило в требования

📝 Состояние проекта Завершён, не развивался после выполнения задания.

📏 Размер / масштаб

  • 49 файлов
  • ~980 строк кода на C++

🎓 Чему я научился / что вынес

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

angles

Репозиторий: 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-массивы и дальнейшей работы с ними в коде

test_task_for_radiofid

Репозиторий: https://github.com/edomin/test_task_for_radiofid Категория: Тестовое задание

🛠 Технологии: C, GNU Make, Linux 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Тестовое задание на демонстрацию владения программированием в Linux: работа с системными вызовами, syslog, сокетами, pipe'ами и потоками.

⭐ Что интересного / Чем я горжусь

  • Чёткое выполнение всех требований задания без лишней сложности

🔍 Технические особенности Отсутствие внешних зависимостей, работа напрямую с системным API Linux.

🧪 Тестовое задание

  • Текст задания подробно описан в README репозитория
  • На выполнение было дано 2 дня

📝 Состояние проекта Завершён, не развивался после выполнения задания.

📏 Размер / масштаб

  • 4 файла
  • ~250 строк кода на C

🎓 Чему я научился / что вынес

  • Систематизировал и продемонстрировал уже имеющиеся знания по программированию в Linux

test_task_for_dsp_labs_bot

Репозиторий: https://github.com/edomin/test_task_for_dsp_labs_bot Категория: Тестовое задание

🛠 Технологии: Python 3; библиотеки: telebot, face_recognition 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Тестовое задание: Telegram-бот, который отслеживает и сохраняет изображения с лицами и голосовые сообщения из диалога, а затем по команде выгружает накопленные данные.

⭐ Что интересного / Чем я горжусь

  • Реализовал рабочего Telegram-бота с обработкой медиа-контента

🔍 Технические особенности Прямое использование библиотек для работы с Telegram API и распознавания лиц.

🧪 Тестовое задание

  • Требовалось написать бота, который сохраняет все присланные изображения с лицами и голосовые сообщения, а затем по команде выгружает сохранённые данные
  • Задание выполнялось в сжатые сроки

📝 Состояние проекта Завершён, не развивался после выполнения задания.

📏 Размер / масштаб

  • 11 файлов
  • ~180 строк кода

🎓 Чему я научился / что вынес

  • Написание простого Telegram-бота на Python
  • Настройка и покупка хостинга
  • Развёртывание бота на сервере

Эксперименты и учебные проекты

samples

Репозиторий: https://github.com/edomin/samples Категория: Эксперимент

🛠 Технологии: C, awk, inih, ketopt, libsir, xmempool 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Сборник небольших экспериментальных подпроектов и примеров, вынесенных в один репозиторий.

⭐ Что интересного / Чем я горжусь

  • Реализован работающий обработчик критических ошибок выполнения программы с выводом stacktrace

🔍 Технические особенности Несколько независимых подпроектов, объединённых общим репозиторием.

📝 Состояние проекта Экспериментальный, пополняется по мере появления новых идей.

🎓 Чему я научился / что вынес

  • Углубил опыт работы с экосистемой C-инструментов (ini-парсинг, разбор опций командной строки, логирование, memory pools).
  • Реализовал обработчик критических ошибок с формированием stacktrace, что повысило диагностируемость программ.
  • Попробовал awk и вспомогательные утилиты в более нетривиальных сценариях.

ebnf_ini

Репозиторий: https://github.com/edomin/ebnf_ini Категория: Эксперимент

🛠 Технологии: C 👤 Роль: Автор и единственный разработчик

📘 Краткое описание Эксперимент по реализации разбора отдельных конструкций грамматики, описанной в нотации EBNF.

Зачем: исследовать подход к построению парсеров на основе формально описанных грамматик и улучшить навыки работы с синтаксическим анализом.

⭐ Что интересного / Чем я горжусь

  • Практическая реализация парсера по разбору текста на основе грамматики (EBNF)

🔍 Технические особенности Небольшой проект, сфокусированный на разборе грамматики и тестировании подхода.

📝 Состояние проекта Экспериментальный, не развивался после первоначальной реализации.

📏 Размер / масштаб

  • Код: 6 файлов, ~520 строк
  • Тесты: 1 файл, ~480 строк

🎓 Чему я научился / что вынес

  • Описание грамматики с использованием нотации EBNF
  • Реализация разбора грамматики, описанной при помощи EBNF

steroids

Репозиторий: 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++, разработкой инструментов, инфраструктурой сборки или низкоуровневой графикой.

Pinned Loading

  1. vgazer vgazer Public archive

    Library for tracking and installing new versions of software

    Python 1

  2. libuc libuc Public

    Library for working with text in various encodings

    C 2

  3. samples samples Public

    Samples of using various techniques, language/stdlib features, libraries etc

    C

  4. Survival-SDK/cmake_barebones Survival-SDK/cmake_barebones Public

    Some common CMake code copypasted between my projects

    CMake