238 lines
19 KiB
HTML
238 lines
19 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||
<title>My Project: README.md</title>
|
||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||
<script type="text/javascript" src="jquery.js"></script>
|
||
<script type="text/javascript" src="dynsections.js"></script>
|
||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||
<script type="text/javascript" src="search/search.js"></script>
|
||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||
</head>
|
||
<body>
|
||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||
<div id="titlearea">
|
||
<table cellspacing="0" cellpadding="0">
|
||
<tbody>
|
||
<tr id="projectrow">
|
||
<td id="projectalign">
|
||
<div id="projectname">My Project
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<!-- end header part -->
|
||
<!-- Generated by Doxygen 1.9.8 -->
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||
/* @license-end */
|
||
</script>
|
||
<script type="text/javascript" src="menudata.js"></script>
|
||
<script type="text/javascript" src="menu.js"></script>
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||
$(function() {
|
||
initMenu('',true,false,'search.php','Search');
|
||
$(document).ready(function() { init_search(); });
|
||
});
|
||
/* @license-end */
|
||
</script>
|
||
<div id="main-nav"></div>
|
||
<!-- window showing the filter options -->
|
||
<div id="MSearchSelectWindow"
|
||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||
</div>
|
||
|
||
<!-- iframe showing the search results (closed by default) -->
|
||
<div id="MSearchResultsWindow">
|
||
<div id="MSearchResults">
|
||
<div class="SRPage">
|
||
<div id="SRIndex">
|
||
<div id="SRResults"></div>
|
||
<div class="SRStatus" id="Loading">Loading...</div>
|
||
<div class="SRStatus" id="Searching">Searching...</div>
|
||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><!-- top -->
|
||
<div><div class="header">
|
||
<div class="headertitle"><div class="title">README.md</div></div>
|
||
</div><!--header-->
|
||
<div class="contents">
|
||
<div class="textblock"><p><a class="anchor" id="autotoc_md57"></a></p>
|
||
<h1><a class="anchor" id="autotoc_md58"></a>
|
||
NeurOX: Крестики‑нолики с ИИ или войти в IT</h1>
|
||
<h2><a class="anchor" id="autotoc_md59"></a>
|
||
Цель проекта</h2>
|
||
<p>Разработка экосистемы многопользовательской игры крестики-нолики в классическом исполнении с полным стеком технологий от С до Android и Web.</p>
|
||
<h2><a class="anchor" id="autotoc_md60"></a>
|
||
Суть челленджа</h2>
|
||
<p>Собрать систему «с нуля», в минималистичном стиле с мнимумом инструментов:</p><ul>
|
||
<li>нейросеть на чистом C (без ML‑библиотек);</li>
|
||
<li>ядро игры с ручным управлением памятью;</li>
|
||
<li>NGINX + PHP + CodeIgniter (REST API);</li>
|
||
<li>десктоп‑клиент на C++/SFML;</li>
|
||
<li>Android‑клиент Java/Kotlin;</li>
|
||
<li>сетевая связь по TCP/IP;</li>
|
||
<li>шифрование: RSA (2048 бит) для рукопожатия + динамический XOR для данных.</li>
|
||
</ul>
|
||
<h2><a class="anchor" id="autotoc_md61"></a>
|
||
Текущий статус</h2>
|
||
<p>Проект стартует с чистого листа. На данный момент:</p><ul>
|
||
<li>определена архитектура системы;</li>
|
||
<li>выбран стек технологий;</li>
|
||
<li>начата работа над ядром на C.</li>
|
||
</ul>
|
||
<p><b>Что предстоит:</b></p><ul>
|
||
<li>реализовать базовую логику игры (3×3);</li>
|
||
<li>написать нейросеть на C (обучение на партиях);</li>
|
||
<li>создать REST API на PHP для связи компонентов;</li>
|
||
<li>разработать десктоп‑ и Android‑клиенты;</li>
|
||
<li>внедрить схему шифрования;</li>
|
||
<li>интегрировать все части в единую систему.</li>
|
||
</ul>
|
||
<h2><a class="anchor" id="autotoc_md62"></a>
|
||
Прогресс</h2>
|
||
<p>Весь прогресс отражен в файле <b><a class="el" href="md_PROGRESS.html">PROGRESS.md</a></b></p>
|
||
<h2><a class="anchor" id="autotoc_md63"></a>
|
||
Реалистичный план этапов (дорожная карта)</h2>
|
||
<p><b>Принцип планирования:</b></p><ul>
|
||
<li>работа ведётся небольшими сессиями (30–60 минут) в свободное время;</li>
|
||
<li>приоритет — последовательность, а не скорость;</li>
|
||
<li>каждый этап завершается минимально жизнеспособным результатом (MVP‑подход);</li>
|
||
<li>гибкость: этапы можно менять местами или дробить на подзадачи.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md64"></a>
|
||
Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца</h3>
|
||
<ul>
|
||
<li>базовая логика игры (3×3 доска, проверка победы);</li>
|
||
<li>простая нейросеть (3 слоя, сигмоида, обучение на 100+ партиях);</li>
|
||
<li>консольный режим для тестирования;</li>
|
||
<li>битовые маски для оптимизации доски.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md65"></a>
|
||
Этап 2. Сервер на PHP (API + БД) — 2–3 месяца</h3>
|
||
<ul>
|
||
<li>REST API (<code>/start_game</code>, <code>/make_move</code>, <code>/get_state</code>);</li>
|
||
<li>интеграция с ядром через Unix‑сокеты;</li>
|
||
<li>SQLite для хранения партий и статистики;</li>
|
||
<li>логирование запросов.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md66"></a>
|
||
Этап 3. Десктоп‑клиент (C++/SFML) — 3–4 месяца</h3>
|
||
<ul>
|
||
<li>базовый UI (доска 3×3, кнопки);</li>
|
||
<li>связь с сервером по TCP/IP;</li>
|
||
<li>анимация ходов и победы;</li>
|
||
<li>кэширование состояния для офлайн‑режима.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md67"></a>
|
||
Этап 4. Шифрование (RSA + XOR) — 1–2 месяца</h3>
|
||
<ul>
|
||
<li>RSA‑рукопожатие (2048 бит, OpenSSL);</li>
|
||
<li>динамический XOR (смена ключа по таймеру/счётчику);</li>
|
||
<li>проверка целостности пакетов (CRC32);</li>
|
||
<li>тесты на утечку памяти и производительность.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md68"></a>
|
||
Этап 5. Android‑клиент (Kotlin + NDK) — 4–6 месяцев</h3>
|
||
<ul>
|
||
<li>MVP: доска 3×3 и связь с сервером;</li>
|
||
<li>вызов C‑библиотеки через JNI;</li>
|
||
<li>поддержка шифрования;</li>
|
||
<li>оптимизация под мобильные устройства.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md69"></a>
|
||
Этап 6. Интеграция и тестирование — 2–3 месяца</h3>
|
||
<ul>
|
||
<li>синхронизация состояния между десктопом и Android;</li>
|
||
<li>стресс‑тест (10+ одновременных игр);</li>
|
||
<li>отладка многопоточности;</li>
|
||
<li>финальная оптимизация.</li>
|
||
</ul>
|
||
<h3><a class="anchor" id="autotoc_md70"></a>
|
||
Этап 7. Релиз MVP — 1 месяц</h3>
|
||
<ul>
|
||
<li>сборка дистрибутивов (Windows, Linux, Android);</li>
|
||
<li>документация для запуска;</li>
|
||
<li>публикация демо‑видео.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2><a class="anchor" id="autotoc_md72"></a>
|
||
Гибкость и адаптация</h2>
|
||
<p><b>Если времени меньше:</b></p><ul>
|
||
<li>пропускаю Android‑клиент — фокусируюсь на десктопе;</li>
|
||
<li>заменяю RSA на OpenSSL (готовые функции);</li>
|
||
<li>упрощаю нейросеть до минимакса;</li>
|
||
<li>откладываю динамический XOR на будущее.</li>
|
||
</ul>
|
||
<p><b>Если появляется больше времени:</b></p><ul>
|
||
<li>ускоряю этапы за счёт увеличения сессий;</li>
|
||
<li>добавляю фичи (режим PvP, статистика, темы UI).</li>
|
||
</ul>
|
||
<h2><a class="anchor" id="autotoc_md73"></a>
|
||
Технологии</h2>
|
||
<h2><a class="anchor" id="autotoc_md74"></a>
|
||
Особенности архитектуры, решений и тактик (добавлено 22.04.2026)</h2>
|
||
<h3><a class="anchor" id="autotoc_md75"></a>
|
||
ИИ аспект</h3>
|
||
<p>Начиная с истоков увлечения программированием привык полагаться на результаты работы кода(профилирование) и нежеланием заниматься рефакторингом ради рефакторинга, по-этому на данном этапе своей жизни используюю ИИ в первую очередь для препрофилирования нагрузок и определения узких мест на стадии разработки Архитектуры, считаю что от этого зависит львиная доля успешности проекта впринципе(если на скорую руку сделать архитектуру, даже самые опытные разработчики не помогут, тут и начинается описанный выше рефакторинг). Единственным моим ассистентом и специалистом по части критики и статистики является YandexGPT 5.1 Pro(АлисаAI). Порой наши многочасовые споры выматывают, но она очень помогает в следующих аспектах:</p><ul>
|
||
<li>Анализ кода в части читаемости, т.к. проект публичен.</li>
|
||
<li>Сбор статистики по типовым нагрузкам.</li>
|
||
<li>Понимание алгоритмов и шаблонов работы ИИ при статическом анализе кода.</li>
|
||
</ul>
|
||
<p>Что я понял за время общения с ней:</p><ul>
|
||
<li>Никогда не верьте ИИ "на слово", как бы он Вас не уверял что больше такого не повторится.</li>
|
||
<li>Никогда не следуйте подсказкам ИИ если понимаете что это Вам не нужно.</li>
|
||
<li>10, а лучше - 100 раз переспросите с разных сторон</li>
|
||
<li>даже если Вам кажется что ИИ дал точный ответ - переспросите ещё раз.</li>
|
||
<li>Не пытайтесь доказать ИИ что Вы - "не олень", он этого не оценит</li>
|
||
<li>Предлагая ИИ оценить ИИ написанный код будьте готовы к тому что Вас разнесут в пух и прах по тем аспектам где ответственность кода заканчивается, у ИИ галочка на расширяемость и проверки, вернее не "галочка" а "ГАЛИЩЕ"</li>
|
||
</ul>
|
||
<p>Мне очень поднимают настроение многочасовые баталии с ней, однако, это отвлекает от сути. Каждый раз когда я в итоге довожу YandexGPT 5.1 Pro(АлисаAI) до стадии "Да, Вы правы..." в коде я оставляю коментарии сгенерированные ею для неё же и помечаю их как "коментарии от YandexGPT 5.1 Pro(АлисаAI)". Очень часто в коментариях к коду можно встретить объяснения такого рода "АлисаAI настояла" в тех местах где наши мнения расходились но я пошёл на компромисс. </p>
|
||
<h3><a class="anchor" id="autotoc_md76"></a>
|
||
Основной посыл</h3>
|
||
<p>Хоть проект изначально и пердполагался как портфолио, в нынешнем своём состоянии он представляет из себя немного больше. Скорее это рассказ о том "как это было". Проект постепенно перерос в своеобразную "историю жизни", это неординарный подход к разработке, но в виду того что я веду проект один и колаборация не предполагается, я продолжу в том-же духе, в первую очередь - для своих детей, им интересно это читать, а мне не то чтобы не сложно, а скорее - приятно писать для них. Таким образом я чувствую себя причастным ко вкладу в искуство и к произведению "История одного байта", которое давным давно глубоко запало мне в душу и многому научило с философской точки зрения. </p>
|
||
<h3><a class="anchor" id="autotoc_md77"></a>
|
||
Образовательный аспект</h3>
|
||
<p>Проект открыт для изучения, как автор - не претендую на звание "разработчик года", отнюдь, считаю что всегда есть куда идти, даже топовым кодерам, но точно знаю что некоторые техники встречающиеся в коде помогут малоопытным или "смежным" специалистам понять всю красоту низкоуровнего программирования, возможно, перенять некоторые практики и применять их вдальнейшем. Весь код будет снабжён "удобоваримыми" коментариями для специалистов всех уровней и языковых групп(имеется в виду группы языков программирования). </p>
|
||
<h3><a class="anchor" id="autotoc_md78"></a>
|
||
Основная стратегия KISS+YAGNI</h3>
|
||
<p>Я не предусматриваю грандиозное расширение, проект должен обеспечить максимальную производительность и отказоустойчивость для классических крестиков-ноликов в многопользовательском режиме с возможностью игры против ИИ(нейросети). Как основатель проекта я не предполагаю увеличивать размер поля до MAX_INT*MAX_INT и заниматься безопасностью ради безопасности. Каждый модуль проекта имеет строго свою область ответственности. </p>
|
||
<h3><a class="anchor" id="autotoc_md79"></a>
|
||
Начата разработка общих модулей, конкретно - XOGame.</h3>
|
||
<p>Разработана типичная архитектура со скрытой реализацией и заложенной возможностью изменения поведения модуля через указатели на структуры. Как и обычно(не раз проверено) внешний интерфейс константен, доступ к функциям модуля только через указатели внутри внешних неизменяемых структур. Почему именно так - потому что так проще отловить ошибки, проверяем только внутреннюю реализацию, отлаживаем её и используем. Если в дальнейшем возникают ошибки - это не вина модуля, это вина вызывающего кода. В контексте всего решения это избавляет от рефапкторинга ради рефакторинга и бесконечной скачки от файла к файлу. После предоставления кода <b>server/includes/XOGame.h</b>, <b>server/headers/_XOGame.h</b> и <b>server/src/XOGame.c</b> на ревью YandexGPT 5.1 Pro(АлисаAI) и 4-хчасовой баталии по поводу <b>void* fxalloc(size_t _NBytes)</b> решено пока что "забыть" про реализацию XOGame.c и заняться аллокатором <b>fxalloc.c</b>, иначе я не выдержу, порой она достаёт "до чёртиков" ;)</p>
|
||
<h2><a class="anchor" id="autotoc_md80"></a>
|
||
Лицензия</h2>
|
||
<p>Apache License 2.0 — код открыт для изучения.</p>
|
||
<h2><a class="anchor" id="autotoc_md81"></a>
|
||
Контакты</h2>
|
||
<ul>
|
||
<li>GitHub: <a href="https://github.com/felex67">@felex67</a></li>
|
||
<li>Email: <a href="#" onclick="location.href='mai'+'lto:'+'adm'+'in'+'@fe'+'le'+'xde'+'v.'+'ru'; return false;">admin@felexdev.ru</a>, <a href="#" onclick="location.href='mai'+'lto:'+'fel'+'ex'+'xx6'+'7@'+'yan'+'de'+'x.r'+'u'; return false;">felexxx67@yandex.ru</a></li>
|
||
</ul>
|
||
<hr />
|
||
<p><b>Важно:</b> проект в активной разработке. Сроки ориентировочные — зависят от свободного времени. Это дневник челленджа: фиксация прогресса, решений и находок.</p>
|
||
<p>Спасибо, что следите за ходом! 🍰 Пусть каждая строка кода будет шагом к победе — в своём темпе! 🎉 </p>
|
||
</div></div><!-- contents -->
|
||
</div><!-- PageDoc -->
|
||
<!-- start footer part -->
|
||
<hr class="footer"/><address class="footer"><small>
|
||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||
</small></address>
|
||
</body>
|
||
</html>
|