\mainpage
![logo](logo/NeurOX_vk_bg.svg)
# [NeurOX](https://neurox.su): Крестики‑нолики с ИИ или войти в IT

## Цель проекта

Разработка экосистемы многопользовательской игры крестики-нолики в классическом исполнении с полным стеком технологий от С до 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.

## Прогресс
| Статус | Задача             | Описание                                        | Дата       |
|:------:|:-------------------|:------------------------------------------------|:----------:|
|   ➤    | **Документация**   | Оптимизация Doxygen                             |            |
|   ✅   | **Документация**   | Обновлены контакты в **README.md**.             | 11.05.2026 |
|   ✅   | **Документация**   | Создан логотип проекта.                         | 11.05.2026 |
|   ✅   | **Инфраструктура** | Создана группа **felexdev.neurox** ВКонтакте    | 11.05.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: <a href="mailto:admin@felexdev.ru">admin@felexdev.ru</a>, <a href="mailto:felexxx67@yandex.ru">felexxx67@yandex.ru</a>

# Лирическое отступление
К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса разработки(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, жги по-полной в режиме телепорта битов!

