Files
neurox/html/md_README_8old.html
T
2026-05-19 06:22:43 +05:00

238 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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&amp;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&amp;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) — 46 месяцев</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&#160;<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>