2026-05-24 14:02:14 +05:00
2026-05-19 06:22:43 +05:00
2026-05-24 14:02:14 +05:00
2026-05-24 13:41:02 +05:00
2026-05-19 06:22:43 +05:00
2026-05-24 13:41:02 +05:00
2026-03-23 03:46:57 +05:00
2026-05-19 06:22:43 +05:00
2026-04-15 23:45:49 +05:00

\mainpage logo

NeurOX: Крестики‑нолики с ИИ или войти в IT

Документация: https://neurox.su
Блог: https://felexdev.ru

Цель проекта

Разработка экосистемы многопользовательской игры крестики-нолики в классическом исполнении с полным стеком технологий от С до Android и Web.

Для кого этот проект

  • Для своих детей — наследие, объяснение основных парадигм и принципов программирования.
  • Для себя — восстановление навыков.
  • Для остальных — подойдёт для изучения новичкам.

Парадигмы

  • KISS — должен оставаться донельзя простым для понимания.
  • YAGNI — время и ресурсы дороже излишеств.

Технологии

Сервер

Back-end Core (C)

  • Игровой движок — базовая логика игры: проверка ходов, определение победы/ничьей, управление состоянием доски 3×3.
  • Нейросеть 9-18-9 — ИИ‑противник: полносвязная сеть (9 входных нейронов — состояние доски, 18 скрытых, 9 выходных — оценка ходов). Обучается на партиях.
  • TCP/IP со сквозным шифрованием — защищённая передача данных между клиентом и сервером (RSA + XOR).
  • Аллокатор — кастомное управление памятью для повышения производительности и контроля утечек.
  • Очереди — буферизация и синхронизация входящих/исходящих сообщений между потоками.

Back-end Web (PHP + CodeIgniter)

  • NGINX — веб‑сервер для статического фронтенда (HTML/CSS/JS) и проксирования.
  • PHP + CodeIgniter — бэкенд веб‑интерфейса и «мост» между веб‑клиентом (JS) и C‑ядром. Обрабатывает AJAX‑запросы, передаёт команды в ядро через Unix‑сокеты/пайпы, возвращает ответы в формате JSON.
  • MySQL — хранение данных пользователей, статистики игр, логов. Используется веб‑сервером для отображения информации.

Front-end (Web)

  • HTML/CSS — структура и визуальное оформление веб‑версии игры: доска, кнопки, индикаторы.
  • JavaScript — интерактивность веб‑интерфейса: обработка кликов, обновление доски, анимация ходов, связь с сервером через AJAX/WebSocket.

Клиент

  • Core (С-ядро):
    • XOGame — оффлайн игровая логика (проверка ходов, определение победы);
    • NeurOXNet — нейросеть (обучается на игре против пользователя);
    • epoll — сетевая коммуникация (TCP/IP, Linux/Android);
    • WSAPoll+IOCP — сетевая коммуникация (TCP/IP, Windows);
    • SQLite — хранилище локальных настроек интерфейса, весов нейросети.
  • GUI:
    • PCDesktop — нативное приложение с графическим интерфейсом на базе SFML (Simple Fast Media Library);
    • Android — Kotlin + Jetpack — мобильная версия игры с реактивным UI на базе Jetpack Compose:
      • ViewModel — управление состоянием UI и бизнес‑логикой;
      • Репозиторий — абстракция доступа к данным (локальные данные + сетевые запросы);
      • Data Binding — синхронизация данных между UI и ViewModel.

Инфраструктура

  • Postfix — почтовый сервер для отправки уведомлений (подтверждение регистрации, напоминания о ходе игры).

Оборудование

  • Сервер:

    • OS: Ubuntu Server 24.04;
    • CPU: Intel Core i53470, 4 @ 3.2 GHz;
    • RAM: 8 GB;
    • ROM: noname 256 GB SSD;
    • WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).
  • Рабочая станция (ПК):

    • OS: Windows 10;
    • CPU: Intel Core i53470, 4 @ 3.2 GHz;
    • RAM: 16 GB;
    • ROM: noname 256 GB SSD.
    • WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).
  • Ноутбук:

    • OS: Dual boot (Windows 10 / Ubuntu 24.04);
    • CPU: noname AMDLike, 4 @ 1.6 GHz;
    • RAM: noname 16 GB;
    • ROM: noname 1 TB SSD.
  • Смартфон:

    • Модель: Xiaomi Redmi Note 14 Pro;
    • OS: HyperOS 3.0.5.0 (Android 14);
    • CPU: MediaTek Helio G100, 8 @ 2.2 GHz;
    • RAM: 12 GB;
    • ROM: 512 GB SSD.

Стандарты и спецификации

  • C11 (ISO/IEC 9899:2011) — для C‑ядра и десктоп‑клиента.
  • C++11 (ISO/IEC 14882:2011) — для десктоп‑клиента (SFML).
  • POSIX — поддержка Unix‑подобных систем (Linux/Android):
    • epoll — асинхронный ввод‑вывод для масштабирования сервера;
    • pthreads (POSIX Threads) — управление потоками.
  • WinAPI (Windows Vista+) — поддержка Windows‑платформы:
    • WSAPoll — асинхронный ввод‑вывод (аналог POSIX poll(), доступен с Windows Vista);
    • Windows Threads — управление потоками в Windows.
  • Компиляторы:
    • GCC 9+ (Linux) — компиляция C‑ядра и десктоп‑клиента;
    • Clang 11+ (Android NDK) — компиляция C‑библиотеки для Android;
    • MSVC 2019+ (Visual Studio) — компиляция Windows‑версии клиента и сервера.
  • CMake:
    • 3.16+ (Linux/Windows) — единая система сборки для десктоп‑платформ;
    • 3.11+ (Android) — сборка C‑ядра через Android NDK (официальная поддержка NDK, Clang, ABI).

Инструменты

  • IDE:
    • Visual Studio Code — Linux, PHP, HTML/CSS, JavaScript, SQL;
    • Visual Studio — Windows;
    • Android Studio — Android.
  • Системы сборки: CMake, Make.
  • Препрофилирование: YandexGPT 5.1 Pro (Алиса AI).
  • Code review: YandexGPT 5.1 Pro (Алиса AI).
  • Техническая документация: Doxygen, JSDoc, PHPDoc.
  • Контроль версий: Git.

Прогресс

Статус Задача Описание Дата
UX-исследование Оптимизация Doxygen
CI/CD Опубликован блог felexdev.ru(автодеплой). 21.05.2026
CI/CD Опубликована документация на neurox.su(автодеплой). 21.05.2026
Документация Оптимизация Doxygen 15.06.2026

Подробный прогресс: PROGRESS.md

Статус

В активной разработке

План реализации

Принцип планирования:

  • работа ведётся небольшими сессиями (30–60 минут) в свободное время;
  • приоритет — последовательность, а не скорость;
  • гибкость: этапы могут меняться местами, оставаясь в основной логике процесса.

Этап 1. Инфраструктура — 2–4 недели

  • DNS: felexdev.ru + neurox.su;
  • NGINX: сайт‑заглушка;
  • Postfix: SPF/DKIM/DMARC;
  • MySQL;
  • тестирование инфраструктуры.

Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца

  • аллокатор (возможность делегирования блоков между потоками);
  • очередь пакетов/сообщений, синхронизация (двунаправленная на базе списка);
  • базовая логика игры (3×3 доска, проверка победы);
  • простая нейросеть (3 слоя, сигмоида/ReLU, обучение на 100+ партиях);
  • модуль взаимодействия с СУБД (MySQL);
  • пакетная передача TCP/IP со сквозным шифрованием (RSA + XOR);
  • контроль активности соединения средствами ICMP (ping).

Этап 3. Сервер на PHP (API + БД) — 2–3 месяца

  • интеграция с ядром через Unix‑сокеты/пайпы.

Этап 4. Десктоп‑клиент (C++/SFML) — 3–4 месяца

  • базовый UI (доска 3×3, кнопки);
  • связь с сервером по TCP/IP;
  • анимация ходов и победы;
  • игра с локальным ИИ (нейросеть).

Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев

  • доска 3×3 и связь с сервером;
  • вызов C‑библиотеки через JNI;
  • оптимизация под мобильные устройства.

Этап 6. Интеграция и тестирование — 2–3 месяца

  • синхронизация состояния между десктопом и Android;
  • стресс‑тест (10+ одновременных игр);
  • отладка многопоточности;
  • финальная оптимизация.

Этап 7. Релиз — 1 месяц

  • сборка дистрибутивов (Windows, Linux, Android);
  • документация для запуска;
  • публикация демо‑видео.

Дисклеймер

  • В коде может, вернее — будет, использоваться неочевидная логика.
  • Если вы считаете, что я где‑то что‑то сделал не по фэн‑шую,— я эстет, но в плане эффективности.
  • Если когда‑нибудь кто‑нибудь найдёт совпадение названия проекта и репозитория нарушением авторских прав — Бог Вам судья! 😃
  • Проект личный, код открытый, милости просим, заходите и смотрите.
  • Никогда, ни в коем разе не верьте ИИ, они изворачиваются и врут несмотря на то что вы их предупреждаете! ВСЕ!!! почему_я_не_верю_ии.zip(Спасибо друзьям)

Лицензия

Apache License 2.0 — код открыт для изучения.

Контакты

Лирическое отступление

К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса разработки(DIARY.md) сплошным потоком мыслей в обычном разговорном стиле. Целью такого формата является продемонстрировать как происходит собственно сам процесс разработки от и до без захламления технической документации. В коде иногда можно будет встретить сноски на эти самые дневники. В корневом DIARY.md будут отражены мысли масштаба проекта в целом(взаимодействие компонентов и всей экосистемы в целом). Вся техническая документация заполняется по мере готовности того или иного модуля по следующим принципам: мысль ↔ дневник ↔ код → комментарии → тесты → профилирование(по возможности) → документация.

ИИ аспект

Начиная с истоков увлечения программированием привык полагаться на результаты работы кода — профилирование и тесты. Как у борца за эффективность у меня нет нежелания заниматься рефакторингом ради рефакторинга, по-этому на данном этапе своей жизни используюю ИИ в первую очередь для препрофилирования нагрузок и определения узких мест на стадии разработки архитектуры. Считаю что от этого зависит львиная доля успешности проекта в принципе, так как если на скорую руку спроектировать, то даже самые опытные разработчики не помогут, собственно после такого подхода и начинается описанный выше рефакторинг.

Единственным моим ассистентом-специалистом по части критики и статистики является YandexGPT 5.1 Pro(АлисаAI). Порой наши многочасовые споры выматывают, но она очень помогает в следующих аспектах:

  • Сбор статистики по типовым нагрузкам на стадии проектирования.
  • Анализ кода в части читаемости, т.к. проект публичен.
  • Анализ кода в формате Code-review, практическая польза:
    • дисциплинирует, код всегда должен оставаться чистым.
    • подготовка ко входу в реальную разработку с живой командой, моя основная цель - карьера в IT.
    • даже топовые специалисты могут допускать казалось бы очевидные ошибки, когда мысли летят одна за другой их можно попросту не заметить.
  • Даёт понимание алгоритмов и шаблонов работы ИИ при статическом анализе кода.

Что я понял за время общения с ней(YandexGPT АлисаAI):

  • Никогда не верьте ИИ "на слово", как бы он Вас не уверял что больше такого не повторится, он всё понял, и глупых вопросов больше не последует.
  • Никогда не следуйте подсказкам ИИ(так лучше) если понимаете что это Вам не нужно, очень часто ИИ "зацикливается" сам на себя(пока непонятно почему, но мы это выясним).
  • 10, а лучше 100 раз переспросите с разных сторон(задавайте вопросы в разных вариациях до тех пор пока ответ не будет однозначным).
  • Даже если Вам кажется что ИИ дал ±точный ответ — переспросите ещё раз.
  • Не пытайтесь доказать ИИ что Вы — "не олень", он этого не оценит.
  • Предлагая ИИ оценить написанный код будьте готовы к тому что Вас разнесут в пух и прах по тем аспектам где ответственность кода заканчивается(принцип SRP), у ИИ галочка на расширяемость и проверки(NULL-sfety, неявные проверки они попросту не видят), вернее не "галочка" а "ГАЛИЩЕ", KISS+YAGNI им надо явно объяснять в комментариях, хотя даже после этого они в ответе выкатят здоровенный список "недостатки".
  • ИИ - это инструмент технического анализа по "устоявшимся" шаблонам, каждое неординарное решение сразу попадает в "недостатки". ИИ не видит "замысел", только разрозненные шаблоны и маркеры.

Мне очень поднимают настроение многочасовые баталии с ней, однако, это отвлекает от сути. Каждый раз когда я в итоге довожу YandexGPT 5.1 Pro(АлисаAI) до стадии "Да, Вы правы..." в коде я оставляю комментарии сгенерированные ею для неё же и помечаю их как "комментарии от YandexGPT 5.1 Pro(АлисаAI)". Очень часто в коментариях к коду можно встретить объяснения такого рода "АлисаAI настояла" в тех местах где наши мнения расходились но я пошёл на компромисс.

Основной посыл

Хоть проект изначально и предполагался как портфолио, в нынешнем своём состоянии он представляет из себя немного больше. Скорее это рассказ о том "как это было". Проект постепенно перерос в своеобразную "историю жизни", это неординарный подход к разработке, но ввиду того что я веду проект один и коллаборация не предполагается, я продолжу в том-же духе, в первую очередь — для своих детей, им интересно это читать, а мне не то чтобы не сложно, а скорее — приятно писать для них. Таким образом я чувствую себя причастным ко вкладу в искусство и к произведению "История одного байта", которое давным давно глубоко запало мне в душу и многому научило с философской точки зрения.

Образовательный аспект

Проект открыт для изучения, как автор — не претендую на звание "разработчик года", отнюдь, считаю что всегда есть куда идти, даже топовым кодерам, но точно знаю что некоторые техники встречающиеся в коде помогут малоопытным или "смежным" специалистам понять всю красоту низкоуровнего программирования, возможно, перенять некоторые практики и применять их в дальнейшем. Весь код будет снабжён "удобоваримыми" коментариями для специалистов всех уровней и языковых групп(имеется в виду группы языков программирования).

Основная стратегия KISS+YAGNI

Я не предусматриваю грандиозное расширение, проект должен обеспечить максимальную производительность и отказоустойчивость для классических крестиков-ноликов в многопользовательском режиме с возможностью игры против ИИ(нейросети). Как основатель проекта я не предполагаю увеличивать размер поля до MAX_INT*MAX_INT и заниматься безопасностью ради безопасности. Каждый модуль проекта имеет строго свою область ответственности.

Начата разработка общих модулей.

XOGame

Разработана типичная архитектура со скрытой реализацией и заложенной возможностью изменения поведения модуля через указатели на структуры. Как и обычно(не раз проверено) внешний интерфейс константен, доступ к функциям модуля только через указатели внутри внешних неизменяемых структур. Почему именно так — потому что так проще отловить ошибки, проверяем только внутреннюю реализацию, отлаживаем её и используем. Если в дальнейшем возникают ошибки - это не вина модуля, это вина вызывающего кода. В контексте всего решения это избавляет от рефакторинга ради рефакторинга и бесконечной скачки от файла к файлу.

После предоставления кода xogame/includes/XOGame.h, xogame/headers/_XOGame.h и xogame/src/XOGame.c на ревью YandexGPT 5.1 Pro(АлисаAI) и 4-хчасовой баталии по поводу void fxalloc(size_t _NBytes)* решено пока что "забыть" про реализацию XOGame.c и заняться аллокатором fxalloc.c, иначе я не выдержу, порой она достаёт "до чёртиков" 😃

FXAlloc

Спректирован аллокатор. Модуль аллокатора вынесен в отдельный репозиторий fxalloc

26.04.2026

Сломал Алису попросив оценить расчёты:

Параметр Формула Лимит guiuser-ов Описание
Wi-Fi: ⌈\frac{85,3×10^6}{25×8}⌉ 426 500 Не то что бы много, но дох-х-ходчиво

28.04.2026

Расчёт железяков:

Ракурс Гипотетический максимум гуюзеров Вывод
Wi-Fi: 163961 Наш сервер этого никогда не увидит, но, наверное, потянет
CPU: Набрался опыта, теоретический предел недостижим
RAM: ~12×10^9 Так себе, могла бы и больше
OSь: 200k Пингвин Tux прокачан, проблем не предвидится
YandexGPT 5.1 Pro(АлисаAI)© ← Строки ниже писала она, автор ни при чём =D
ССД: ∞ TB Забыл, где положил половину данных

Продолжение

Промпт(оригинал):

Алиса, оцени пожалуйста юмор и сделай расчёты: Кастуем заклинание "Алиса", скармливаем ей полезную нагрузку пакета 24 байта, название железяки Intel Core i5-3470 и недожелезяки RAM: 8 GB, спрашиваем сколько розеток переварит один поток epoll с последующим их копированием в очередь без оглядки на nofile, жги по-полной в режиме телепорта битов!

S
Description
Full-stack multipplayer tic-tac-toe with Neuro AI (C++, SFML, PHP/CodeIgniter, SQL, HTML/CSS/JavaScript).
https://neurox.su
Readme Apache-2.0 4 MiB
Languages
C 58%
C++ 14.7%
JavaScript 14.1%
CMake 5.8%
Kotlin 4.7%
Other 2.7%