\mainpage ![logo](logo/NeurOX_vk_bg.svg) # NeurOX: Крестики‑нолики с ИИ или войти в IT ||| |-:|:-| |**Документация:** | [https://neurox.su](https://neurox.su) | | **Блог:** | [https://felexdev.ru](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:** * **PC‑Desktop** — нативное приложение с графическим интерфейсом на базе 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 i5‑3470, 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 i5‑3470, 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 AMD‑Like, 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](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) — 4–6 месяцев * доска 3×3 и связь с сервером; * вызов C‑библиотеки через JNI; * оптимизация под мобильные устройства. ### Этап 6. Интеграция и тестирование — 2–3 месяца * синхронизация состояния между десктопом и Android; * стресс‑тест (10+ одновременных игр); * отладка многопоточности; * финальная оптимизация. ### Этап 7. Релиз — 1 месяц * сборка дистрибутивов (Windows, Linux, Android); * документация для запуска; * публикация демо‑видео. ## Дисклеймер * В коде может, вернее — будет, использоваться неочевидная логика. * Если вы считаете, что я где‑то что‑то сделал не по фэн‑шую,— я эстет, но в плане эффективности. * Если когда‑нибудь кто‑нибудь найдёт совпадение названия проекта и репозитория нарушением авторских прав — Бог Вам судья! 😃 * Проект личный, код открытый, милости просим, заходите и смотрите. * **Никогда, ни в коем разе не верьте ИИ, они изворачиваются и врут несмотря на то что вы их предупреждаете! ВСЕ!!! [почему_я_не_верю_ии.zip](https://drive.google.com/file/d/1IaYQl4TBFplYMidjAahn_NKzQrAS-rW7/view?usp=sharing)(Спасибо друзьям)** ## Лицензия Apache License 2.0 — код открыт для изучения. ## Контакты * Сайт разработчика: [felexdev.ru](https://felexdev.ru) * VK: [felexdev.neurox](https://vk.com/felexdev.neurox) * felexdev.ru: [felex67](https://felexdev.ru/git/felex67) * GitHub: [felex67](https://github.com/felex67) * Email: admin@felexdev.ru, felexxx67@yandex.ru # Лирическое отступление К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса разработки(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](https://felexdev.ru/git/felex67/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 | Забыл, где положил половину данных | [Продолжение](https://felexdev.ru/git/felex67/fxalloc/src/branch/main/DIARY.md/#расчёт-железяков) #### Промпт(оригинал): > Алиса, оцени пожалуйста юмор и сделай расчёты: > Кастуем заклинание "Алиса", скармливаем ей полезную нагрузку пакета 24 байта, название железяки Intel Core i5-3470 и недожелезяки RAM: 8 GB, спрашиваем сколько розеток переварит один поток epoll с последующим их копированием в очередь без оглядки на nofile, жги по-полной в режиме телепорта битов!