This commit is contained in:
2026-05-19 06:22:43 +05:00
parent 4589b634be
commit 1a640a8f01
129 changed files with 15336 additions and 26 deletions
+1
View File
@@ -10,6 +10,7 @@ compile_commands.json
CTestTestfile.cmake
_deps
CMakeUserPresets.json
docs
# CLion
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "server/fxalloc"]
path = server/fxalloc
url = git@felexdev:felex67/fxalloc.git
url = git@felexdev.ru:felex67/fxalloc.git
+2863
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,3 +1,4 @@
\mainpage
![logo](logo/NeurOX_vk_bg.svg)
# NeurOX: Крестики‑нолики с ИИ или войти в IT
@@ -190,10 +191,9 @@ Apache License 2.0 — код открыт для изучения.
* 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>
[felexdev_logo](logo/felexdev_logo.svg)
# Лирическое отступление
К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса раззработки(DIARY.md) сплошным потоком мыслей в обычном разговорном стиле. Целю такого формата является продемонстрировать как происходит собственно сам процесс разработки от и до без захламления технической документации. В коде иногда можно будет встретить сноски на эти самые дневники. В корневом DIARY.md будут отражены мысли масштаба проекта в целом(взаимодействие компонентов и всей экосистемы в целом). Вся техническая документация заполняется по мере готовности того или иного модуля по следующим принципам: **мысль ↔ дневник ↔ код → комментарии → тесты → профилирование(по возможности) → документация**.
### ИИ аспект
Начиная с истоков увлечения программированием привык полагаться на результаты работы кода — профилирование и тесты. Как у борца за эффективность у меня нет нежелания заниматься рефакторингом ради рефакторинга, по-этому на данном этапе своей жизни используюю ИИ в первую очередь для препрофилирования нагрузок и определения узких мест на стадии разработки архитектуры. Считаю что от этого зависит львиная доля успешности проекта впринципе, так как если на скорую руку спроектировать, то даже самые опытные разработчики не помогут, собственно после такого подхода и начинается описанный выше рефакторинг.
+3 -5
View File
@@ -2,7 +2,7 @@
## Информация
* Файл для отслеживания текущих задач проекта
* Последнее обновление: [25.04.2026]
* Последнее обновление: [19.05.2026]
## Условные обозначения
* 🔥 - Наивысший приоритет
@@ -13,9 +13,7 @@
## Задачи в процессе
|Срочность|Компонент|Задача|Описание|
|:-------:|:-------:|:-----|:-------|
|🔥|**Архитектура**|**Работа с документацией**|Стандартизация и реорганизация документации|
|🔥|**FXAlloc**|**Проектирование архитектуры**|Интерфейс, внутреннее устройство|
|🔥|**FXAlloc**|**Документация**|Описание архитектуры решения, ведение DAIRY.md|
|🔥|**FXAlloc**|**Проектирование**|Сбор отзывов по архитектуре|
|🔥|**FXAlloc**|**Logic**|Реализации внутренних методов|
|🔥|**FXAlloc**|**API**|Реализация внешних методов|
|🔥|**FXAlloc**|**Тестирование**|Написание юнит-тестов|
@@ -25,7 +23,7 @@
|🔴|**XOGame**|**Тестирование**|Написание юнит-тестов|
|🔴|**XOGame**|**Оптимизация**|Анализ производительности|
|🟡|**AINeurox**|**Проектирование архитектуры**|Интерфейс, внутреннее устройство|
|🟡|**AINeurox**|**Документация**|Описание архитектуры решения, ведение DAIRY.md|
|🟡|**AINeurox**|**Документация**|Описание архитектуры решения, ведение DIARY.md|
|🟡|**AINeurox**|**Logic**|Реализации внутренних методов|
|🟡|**AINeurox**|**API**|Реализация внешних методов|
|🟡|**AINeurox**|**Тестирование**|Написание юнит-тестов|
-17
View File
@@ -1,17 +0,0 @@
#pragma once
/**
* @author admin@felexdev.ru
* @version 1.0.0
*
* @brief Header template
*/
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
#ifdef __cplusplus
}
#endif //__cplusplus
+7
View File
@@ -0,0 +1,7 @@
body {
width:80vw;
margin:auto;
}
#side-nav {
margin-left: 10vw;
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+2045
View File
File diff suppressed because it is too large Load Diff
+28
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

+192
View File
@@ -0,0 +1,192 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
$('table.directory tr').
removeClass('odd').filter(':visible:odd').addClass('odd');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
var opened=true;
// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ];
var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ];
// toggle all folding blocks
function codefold_toggle_all(relPath) {
if (opened) {
$('#fold_all').css('background-image',plusImg[relPath]);
$('div[id^=foldopen]').hide();
$('div[id^=foldclosed]').show();
} else {
$('#fold_all').css('background-image',minusImg[relPath]);
$('div[id^=foldopen]').show();
$('div[id^=foldclosed]').hide();
}
opened=!opened;
}
// toggle single folding block
function codefold_toggle(id) {
$('#foldopen'+id).toggle();
$('#foldclosed'+id).toggle();
}
function init_codefold(relPath) {
$('span[class=lineno]').css(
{'padding-right':'4px',
'margin-right':'2px',
'display':'inline-block',
'width':'54px',
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
});
// add global toggle to first line
$('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
'onclick="javascript:codefold_toggle_all('+relPath+');" '+
'style="background-image:'+minusImg[relPath]+';"></span>');
// add vertical lines to other rows
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
// add toggle controls to lines with fold divs
$('div[class=foldopen]').each(function() {
// extract specific id to use
var id = $(this).attr('id').replace('foldopen','');
// extract start and end foldable fragment attributes
var start = $(this).attr('data-start');
var end = $(this).attr('data-end');
// replace normal fold span with controls for the first line of a foldable fragment
$(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
'onclick="javascript:codefold_toggle(\''+id+'\');" '+
'style="background-image:'+minusImg[relPath]+';"></span>');
// append div for folded (closed) representation
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
// extract the first line from the "open" section to represent closed content
var line = $(this).children().first().clone();
// remove any glow that might still be active on the original line
$(line).removeClass('glow');
if (start) {
// if line already ends with a start marker (e.g. trailing {), remove it
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
}
// replace minus with plus symbol
$(line).find('span[class=fold]').css('background-image',plusImg[relPath]);
// append ellipsis
$(line).append(' '+start+'<a href="javascript:codefold_toggle(\''+id+'\')">&#8230;</a>'+end);
// insert constructed line into closed div
$('#foldclosed'+id).html(line);
});
}
/* @license-end */
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path
d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
id="path2" />
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path
d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
id="path199" /><path
d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
id="path201" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

+141
View File
@@ -0,0 +1,141 @@
<!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: Graph Legend</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>
</div><!-- top -->
<!-- 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 class="header">
<div class="headertitle"><div class="title">Graph Legend</div></div>
</div><!--header-->
<div class="contents">
<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
<p>Consider the following example: </p><div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
<div class="line"><span class="keyword">class </span>Invisible { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
<div class="line"> </div>
<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
<div class="line"><span class="keyword">class </span>Undocumented { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! A template class */</span></div>
<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
<div class="line"><span class="keyword">class </span>Used { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
<div class="line"> <span class="keyword">protected</span> ProtectedBase,</div>
<div class="line"> <span class="keyword">private</span> PrivateBase,</div>
<div class="line"> <span class="keyword">public</span> Undocumented,</div>
<div class="line"> <span class="keyword">public</span> Templ&lt;int&gt;</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">private</span>:</div>
<div class="line"> Used *m_usedClass;</div>
<div class="line">};</div>
</div><!-- fragment --><p> This will result in the following graph:</p>
<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
<ul>
<li>
A filled gray box represents the struct or class for which the graph is generated. </li>
<li>
A box with a black border denotes a documented struct or class. </li>
<li>
A box with a gray border denotes an undocumented struct or class. </li>
<li>
A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
</ul>
<p>The arrows have the following meaning: </p>
<ul>
<li>
A blue arrow is used to visualize a public inheritance relation between two classes. </li>
<li>
A dark green arrow is used for protected inheritance. </li>
<li>
A dark red arrow is used for private inheritance. </li>
<li>
A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
<li>
A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
</ul>
</div><!-- contents -->
<!-- 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>
+1
View File
@@ -0,0 +1 @@
f74606a252eb303675caf37987d0b7af
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+406
View File
@@ -0,0 +1,406 @@
<!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: My Project</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>
</div><!-- top -->
<!-- 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><div class="header">
<div class="headertitle"><div class="title">My Project </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><img src="logo/NeurOX_vk_bg.svg" alt="logo" style="pointer-events: none;" class="inline"/> </p>
<h1><a class="anchor" id="autotoc_md21"></a>
NeurOX: Крестики‑нолики с ИИ или войти в IT</h1>
<h2><a class="anchor" id="autotoc_md22"></a>
Цель проекта</h2>
<p>Разработка экосистемы многопользовательской игры крестики-нолики в классическом исполнении с полным стеком технологий от С до Android и Web.</p>
<h2><a class="anchor" id="autotoc_md23"></a>
Для кого этот проект</h2>
<ul>
<li><b>Для своих детей</b> — наследие, объяснение основных парадигм и принципов программирования.</li>
<li><b>Для себя</b> — восстановление навыков.</li>
<li><b>Для остальных</b> — подойдёт для изучения новичкам.</li>
</ul>
<h2><a class="anchor" id="autotoc_md24"></a>
Парадигмы</h2>
<ul>
<li><b>KISS</b> — должен оставаться донельзя простым для понимания.</li>
<li><b>YAGNI</b> — время и ресурсы дороже излишеств.</li>
</ul>
<h2><a class="anchor" id="autotoc_md25"></a>
Технологии</h2>
<h3><a class="anchor" id="autotoc_md26"></a>
Сервер</h3>
<p><b>Back-end Core (C)</b></p><ul>
<li><b>Игровой движок</b> — базовая логика игры: проверка ходов, определение победы/ничьей, управление состоянием доски 3×3.</li>
<li><b>Нейросеть 9-18-9</b> — ИИ‑противник: полносвязная сеть (9 входных нейронов — состояние доски, 18 скрытых, 9 выходных — оценка ходов). Обучается на партиях.</li>
<li><b>TCP/IP со сквозным шифрованием</b> — защищённая передача данных между клиентом и сервером (RSA + XOR).</li>
<li><b>Аллокатор</b> — кастомное управление памятью для повышения производительности и контроля утечек.</li>
<li><b>Очереди</b> — буферизация и синхронизация входящих/исходящих сообщений между потоками.</li>
</ul>
<p><b>Back-end Web (PHP + CodeIgniter)</b></p><ul>
<li><b>NGINX</b> — веб‑сервер для статического фронтенда (HTML/CSS/JS) и проксирования.</li>
<li><b>PHP + CodeIgniter</b> — бэкенд веб‑интерфейса и «мост» между веб‑клиентом (JS) и C‑ядром. Обрабатывает AJAX‑запросы, передаёт команды в ядро через Unix‑сокеты/пайпы, возвращает ответы в формате JSON.</li>
<li><b>MySQL</b> — хранение данных пользователей, статистики игр, логов. Используется веб‑сервером для отображения информации.</li>
</ul>
<p><b>Front-end (Web)</b></p><ul>
<li><b>HTML/CSS</b> — структура и визуальное оформление веб‑версии игры: доска, кнопки, индикаторы.</li>
<li><b>JavaScript</b> — интерактивность веб‑интерфейса: обработка кликов, обновление доски, анимация ходов, связь с сервером через AJAX/WebSocket.</li>
</ul>
<h3><a class="anchor" id="autotoc_md27"></a>
Клиент</h3>
<ul>
<li><b>Core (С-ядро):</b><ul>
<li><b>XOGame</b> — оффлайн игровая логика (проверка ходов, определение победы);</li>
<li><b>NeurOXNet</b> — нейросеть (обучается на игре против пользователя);</li>
<li><b>epoll</b> — сетевая коммуникация (TCP/IP, Linux/Android);</li>
<li><b>WSAPoll+IOCP</b> — сетевая коммуникация (TCP/IP, Windows);</li>
<li><b>SQLite</b> — хранилище локальных настроек интерфейса, весов нейросети.</li>
</ul>
</li>
<li><b>GUI:</b><ul>
<li><b>PCDesktop</b> — нативное приложение с графическим интерфейсом на базе SFML (Simple Fast Media Library);</li>
<li><b>Android — Kotlin + Jetpack</b> — мобильная версия игры с реактивным UI на базе Jetpack Compose:<ul>
<li><b>ViewModel</b> — управление состоянием UI и бизнес‑логикой;</li>
<li><b>Репозиторий</b> — абстракция доступа к данным (локальные данные + сетевые запросы);</li>
<li><b>Data Binding</b> — синхронизация данных между UI и ViewModel.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3><a class="anchor" id="autotoc_md28"></a>
Инфраструктура</h3>
<ul>
<li><b>Postfix</b> — почтовый сервер для отправки уведомлений (подтверждение регистрации, напоминания о ходе игры).</li>
</ul>
<h2><a class="anchor" id="autotoc_md29"></a>
Оборудование</h2>
<ul>
<li><b>Сервер:</b><ul>
<li>OS: Ubuntu Server 24.04;</li>
<li>CPU: Intel Core i53470, 4 @ 3.2 GHz;</li>
<li>RAM: 8 GB;</li>
<li>ROM: noname 256 GB SSD;</li>
<li>WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).</li>
</ul>
</li>
<li><b>Рабочая станция (ПК):</b><ul>
<li>OS: Windows 10;</li>
<li>CPU: Intel Core i53470, 4 @ 3.2 GHz;</li>
<li>RAM: 16 GB;</li>
<li>ROM: noname 256 GB SSD.</li>
<li>WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).</li>
</ul>
</li>
<li><b>Ноутбук:</b><ul>
<li>OS: Dual boot (Windows 10 / Ubuntu 24.04);</li>
<li>CPU: noname AMDLike, 4 @ 1.6 GHz;</li>
<li>RAM: noname 16 GB;</li>
<li>ROM: noname 1 TB SSD.</li>
</ul>
</li>
<li><b>Смартфон:</b><ul>
<li>Модель: Xiaomi Redmi Note 14 Pro;</li>
<li>OS: HyperOS 3.0.5.0 (Android 14);</li>
<li>CPU: MediaTek Helio G100, 8 @ 2.2 GHz;</li>
<li>RAM: 12 GB;</li>
<li>ROM: 512 GB SSD.</li>
</ul>
</li>
</ul>
<h3><a class="anchor" id="autotoc_md30"></a>
Стандарты и спецификации</h3>
<ul>
<li><b>C11</b> (ISO/IEC 9899:2011) — для C‑ядра и десктоп‑клиента.</li>
<li><b>C++11</b> (ISO/IEC 14882:2011) — для десктоп‑клиента (SFML).</li>
<li><b>POSIX</b> — поддержка Unix‑подобных систем (Linux/Android):<ul>
<li><code>epoll</code> — асинхронный ввод‑вывод для масштабирования сервера;</li>
<li><code>pthreads</code> (POSIX Threads) — управление потоками.</li>
</ul>
</li>
<li><b>WinAPI</b> (Windows Vista+) — поддержка Windows‑платформы:<ul>
<li><b>WSAPoll</b> — асинхронный ввод‑вывод (аналог POSIX <code>poll()</code>, доступен с Windows Vista);</li>
<li><b>Windows Threads</b> — управление потоками в Windows.</li>
</ul>
</li>
<li><b>Компиляторы:</b><ul>
<li><b>GCC 9+</b> (Linux) — компиляция C‑ядра и десктоп‑клиента;</li>
<li><b>Clang 11+</b> (Android NDK) — компиляция C‑библиотеки для Android;</li>
<li><b>MSVC 2019+</b> (Visual Studio) — компиляция Windows‑версии клиента и сервера.</li>
</ul>
</li>
<li><b>CMake:</b><ul>
<li><b>3.16+</b> (Linux/Windows) — единая система сборки для десктоп‑платформ;</li>
<li><b>3.11+</b> (Android) — сборка C‑ядра через Android NDK (официальная поддержка NDK, Clang, ABI).</li>
</ul>
</li>
</ul>
<h2><a class="anchor" id="autotoc_md31"></a>
Инструменты</h2>
<ul>
<li><b>IDE:</b><ul>
<li><b>Visual Studio Code</b> — Linux, PHP, HTML/CSS, JavaScript, SQL;</li>
<li><b>Visual Studio</b> — Windows;</li>
<li><b>Android Studio</b> — Android.</li>
</ul>
</li>
<li><b>Системы сборки:</b> CMake, Make.</li>
<li><b>Препрофилирование:</b> YandexGPT 5.1 Pro (Алиса AI).</li>
<li><b>Code review:</b> YandexGPT 5.1 Pro (Алиса AI).</li>
<li><b>Техническая документация:</b> Doxygen, JSDoc, PHPDoc.</li>
<li><b>Контроль версий:</b> Git.</li>
</ul>
<h2><a class="anchor" id="autotoc_md32"></a>
Прогресс</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th><th class="markdownTableHeadCenter">Дата </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Оптимизация Doxygen </td><td class="markdownTableBodyCenter"></td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Обновлены контакты в <b>README.md</b>. </td><td class="markdownTableBodyCenter">11.05.2026 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Создан логотип проекта. </td><td class="markdownTableBodyCenter">11.05.2026 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Инфраструктура</b> </td><td class="markdownTableBodyLeft">Создана группа <b>felexdev.neurox</b> ВКонтакте </td><td class="markdownTableBodyCenter">11.05.2026 </td></tr>
</table>
<p>Подробный прогресс: <a class="el" href="md_PROGRESS.html">PROGRESS.md</a></p>
<h2><a class="anchor" id="autotoc_md33"></a>
Статус</h2>
<p><b>В активной разработке</b></p>
<h2><a class="anchor" id="autotoc_md34"></a>
План реализации</h2>
<p><b>Принцип планирования:</b></p><ul>
<li>работа ведётся небольшими сессиями (30–60 минут) в свободное время;</li>
<li>приоритет — последовательность, а не скорость;</li>
<li>гибкость: этапы могут меняться местами, оставаясь в основной логике процесса.</li>
</ul>
<h3><a class="anchor" id="autotoc_md35"></a>
Этап 1. Инфраструктура — 2–4 недели</h3>
<ul>
<li>DNS: felexdev.ru + neurox.su;</li>
<li>NGINX: сайт‑заглушка;</li>
<li>Postfix: SPF/DKIM/DMARC;</li>
<li>MySQL;</li>
<li>тестирование инфраструктуры.</li>
</ul>
<h3><a class="anchor" id="autotoc_md36"></a>
Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца</h3>
<ul>
<li>аллокатор (возможность делегирования блоков между потоками);</li>
<li>очередь пакетов/сообщений, синхронизация (двунаправленная на базе списка);</li>
<li>базовая логика игры (3×3 доска, проверка победы);</li>
<li>простая нейросеть (3 слоя, сигмоида/ReLU, обучение на 100+ партиях);</li>
<li>модуль взаимодействия с СУБД (MySQL);</li>
<li>пакетная передача TCP/IP со сквозным шифрованием (RSA + XOR);</li>
<li>контроль активности соединения средствами ICMP (ping).</li>
</ul>
<h3><a class="anchor" id="autotoc_md37"></a>
Этап 3. Сервер на PHP (API + БД) — 2–3 месяца</h3>
<ul>
<li>интеграция с ядром через Unix‑сокеты/пайпы.</li>
</ul>
<h3><a class="anchor" id="autotoc_md38"></a>
Этап 4. Десктоп‑клиент (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_md39"></a>
Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев</h3>
<ul>
<li>доска 3×3 и связь с сервером;</li>
<li>вызов C‑библиотеки через JNI;</li>
<li>оптимизация под мобильные устройства.</li>
</ul>
<h3><a class="anchor" id="autotoc_md40"></a>
Этап 6. Интеграция и тестирование — 2–3 месяца</h3>
<ul>
<li>синхронизация состояния между десктопом и Android;</li>
<li>стресс‑тест (10+ одновременных игр);</li>
<li>отладка многопоточности;</li>
<li>финальная оптимизация.</li>
</ul>
<h3><a class="anchor" id="autotoc_md41"></a>
Этап 7. Релиз — 1 месяц</h3>
<ul>
<li>сборка дистрибутивов (Windows, Linux, Android);</li>
<li>документация для запуска;</li>
<li>публикация демо‑видео.</li>
</ul>
<h2><a class="anchor" id="autotoc_md42"></a>
Дисклеймер</h2>
<ul>
<li>В коде может, вернее — будет, использоваться неочевидная логика.</li>
<li>Если вы считаете, что я где‑то что‑то сделал не по фэн‑шую — я эстет, но в плане эффективности.</li>
<li>Если когда‑нибудь кто‑нибудь найдёт совпадение названия проекта и репозитория нарушением авторских прав — Бог Вам судья! 😃</li>
<li>Проект личный, код открытый, милости просим, заходите и смотрите.</li>
<li><b>Никогда, ни в коем разе не верьте ИИ, они изварачиваются и врут не смотря на то что вы их предупреждаете! ВСЕ!!! <a href="https://drive.google.com/file/d/1IaYQl4TBFplYMidjAahn_NKzQrAS-rW7/view?usp=sharing">почему_я_не_верю_ии.zip</a>(Спасибо друзьям)</b></li>
</ul>
<h2><a class="anchor" id="autotoc_md43"></a>
Лицензия</h2>
<p>Apache License 2.0 — код открыт для изучения.</p>
<h2><a class="anchor" id="autotoc_md44"></a>
Контакты</h2>
<ul>
<li>VK: <a href="https://vk.com/felexdev.neurox">felexdev.neurox</a></li>
<li>felexdev.ru: <a href="https://felexdev.ru/git/felex67">felex67</a></li>
<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>
<p><a href="logo/felexdev_logo.svg">felexdev_logo</a></p>
<h1><a class="anchor" id="autotoc_md45"></a>
Лирическое отступление</h1>
<p>К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса раззработки(DIARY.md) сплошным потоком мыслей в обычном разговорном стиле. Целю такого формата является продемонстрировать как происходит собственно сам процесс разработки от и до без захламления технической документации. В коде иногда можно будет встретить сноски на эти самые дневники. В корневом DIARY.md будут отражены мысли масштаба проекта в целом(взаимодействие компонентов и всей экосистемы в целом). Вся техническая документация заполняется по мере готовности того или иного модуля по следующим принципам: <b>мысль ↔ дневник ↔ код → комментарии → тесты → профилирование(по возможности) → документация</b>. </p>
<h3><a class="anchor" id="autotoc_md46"></a>
ИИ аспект</h3>
<p>Начиная с истоков увлечения программированием привык полагаться на результаты работы кода — профилирование и тесты. Как у борца за эффективность у меня нет нежелания заниматься рефакторингом ради рефакторинга, по-этому на данном этапе своей жизни используюю ИИ в первую очередь для препрофилирования нагрузок и определения узких мест на стадии разработки архитектуры. Считаю что от этого зависит львиная доля успешности проекта впринципе, так как если на скорую руку спроектировать, то даже самые опытные разработчики не помогут, собственно после такого подхода и начинается описанный выше рефакторинг.</p>
<p>Единственным моим ассистентом-специалистом по части критики и статистики является YandexGPT 5.1 Pro(АлисаAI). Порой наши многочасовые споры выматывают, но она очень помогает в следующих аспектах:</p><ul>
<li>Сбор статистики по типовым нагрузкам на стадии проектирования.</li>
<li>Анализ кода в части читаемости, т.к. проект публичен.</li>
<li>Анализ кода в формате Code-review, практическая польза:<ul>
<li>дисциплинирует, код всегда должен оставаться чистым.</li>
<li>подготовка ко входу в реальную разработку с живой командой, моя основная цель - карьера в IT.</li>
<li>даже топовые специалисты могут допускать казалось-бы очевидные ошибки, когда мысли летят одна за другой их можно по-просту незаметить.</li>
</ul>
</li>
<li>Даёт понимание алгоритмов и шаблонов работы ИИ при статическом анализе кода.</li>
</ul>
<p>Что я понял за время общения с ней(YandexGPT АлисаAI):</p><ul>
<li>Никогда не верьте ИИ "на слово", как бы он Вас не уверял что больше такого не повторится, он всё понял, и глупых вопросов больше не последует.</li>
<li>Никогда не следуйте подсказкам ИИ(так лучше) если понимаете что это Вам не нужно, очень часто ИИ "зацикливается" сам на себя(пока непонятно почему, но мы это выясним).</li>
<li>10, а лучше 100 раз переспросите с разных сторон(задавайте вопросы в разных вариациях до тех пор пока ответ не будет однозначным).</li>
<li>Даже если Вам кажется что ИИ дал ±точный ответ — переспросите ещё раз.</li>
<li>Не пытайтесь доказать ИИ что Вы — "не олень", он этого не оценит.</li>
<li>Предлагая ИИ оценить написанный код будьте готовы к тому что Вас разнесут в пух и прах по тем аспектам где ответственность кода заканчивается(принцип SRP), у ИИ галочка на расширяемость и проверки(NULL-sfety, неявные проверки они попросту не видят), вернее не "галочка" а "ГАЛИЩЕ", KISS+YAGNI им надо явно объяснять в комментариях, хотя даже после этого они в ответе выкатять здоровенный список "недостатки".</li>
<li><p class="startli">ИИ - это инструмент технического анализа по "устоявшимся" шаблонам, каждое неординарное решение сразу попадает в "недостатки". ИИ не видит "замысел", только разрозненные шаблоны и маркеры.</p>
<p class="startli">Мне очень поднимают настроение многочасовые баталии с ней, однако, это отвлекает от сути. Каждый раз когда я в итоге довожу YandexGPT 5.1 Pro(АлисаAI) до стадии "Да, Вы правы..." в коде я оставляю коментарии сгенерированные ею для неё же и помечаю их как "коментарии от YandexGPT 5.1 Pro(АлисаAI)". Очень часто в коментариях к коду можно встретить объяснения такого рода "АлисаAI настояла" в тех местах где наши мнения расходились но я пошёл на компромисс.</p>
</li>
</ul>
<h3><a class="anchor" id="autotoc_md47"></a>
Основной посыл</h3>
<p>Хоть проект изначально и пердполагался как портфолио, в нынешнем своём состоянии он представляет из себя немного больше. Скорее это рассказ о том "как это было". Проект постепенно перерос в своеобразную "историю жизни", это неординарный подход к разработке, но в виду того что я веду проект один и колаборация не предполагается, я продолжу в том-же духе, в первую очередь — для своих детей, им интересно это читать, а мне не то чтобы не сложно, а скорее — приятно писать для них. Таким образом я чувствую себя причастным ко вкладу в искуство и к произведению "История одного байта", которое давным давно глубоко запало мне в душу и многому научило с философской точки зрения.</p>
<h3><a class="anchor" id="autotoc_md48"></a>
Образовательный аспект</h3>
<p>Проект открыт для изучения, как автор — не претендую на звание "разработчик года", отнюдь, считаю что всегда есть куда идти, даже топовым кодерам, но точно знаю что некоторые техники встречающиеся в коде помогут малоопытным или "смежным" специалистам понять всю красоту низкоуровнего программирования, возможно, перенять некоторые практики и применять их вдальнейшем. Весь код будет снабжён "удобоваримыми" коментариями для специалистов всех уровней и языковых групп(имеется в виду группы языков программирования).</p>
<h3><a class="anchor" id="autotoc_md49"></a>
Основная стратегия KISS+YAGNI</h3>
<p>Я не предусматриваю грандиозное расширение, проект должен обеспечить максимальную производительность и отказоустойчивость для классических крестиков-ноликов в многопользовательском режиме с возможностью игры против ИИ(нейросети). Как основатель проекта я не предполагаю увеличивать размер поля до MAX_INT*MAX_INT и заниматься безопасностью ради безопасности. Каждый модуль проекта имеет строго свою область ответственности.</p>
<h3><a class="anchor" id="autotoc_md50"></a>
Начата разработка общих модулей.</h3>
<h4><a class="anchor" id="autotoc_md51"></a>
XOGame</h4>
<p>Разработана типичная архитектура со скрытой реализацией и заложенной возможностью изменения поведения модуля через указатели на структуры. Как и обычно(не раз проверено) внешний интерфейс константен, доступ к функциям модуля только через указатели внутри внешних неизменяемых структур. Почему именно так — потому что так проще отловить ошибки, проверяем только внутреннюю реализацию, отлаживаем её и используем. Если в дальнейшем возникают ошибки - это не вина модуля, это вина вызывающего кода. В контексте всего решения это избавляет от рефапкторинга ради рефакторинга и бесконечной скачки от файла к файлу.</p>
<p>После предоставления кода <b>xogame/includes/XOGame.h</b>, <b>xogame/headers/_XOGame.h</b> и <b>xogame/src/XOGame.c</b> на ревью YandexGPT 5.1 Pro(АлисаAI) и 4-хчасовой баталии по поводу <b>void* fxalloc(size_t _NBytes)</b> решено пока что "забыть" про реализацию XOGame.c и заняться аллокатором <b>fxalloc.c</b>, иначе я не выдержу, порой она достаёт "до чёртиков" 😃</p>
<h4><a class="anchor" id="autotoc_md52"></a>
FXAlloc</h4>
<p>Спректирован аллокатор. Модуль аллокатора вынесен в отдельный репозиторий <a href="https://felexdev.ru/git/felex67/fxalloc">fxalloc</a></p>
<h3><a class="anchor" id="autotoc_md53"></a>
26.04.2026</h3>
<p>Сломал Алису попросив оценить расчёты: </p><table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadRight">Параметр </th><th class="markdownTableHeadCenter">Формула </th><th class="markdownTableHeadCenter">Лимит guiuser-ов </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyRight"><b>Wi-Fi:</b> </td><td class="markdownTableBodyCenter">$⌈\frac{85,3×10^6}{25×8}⌉$ </td><td class="markdownTableBodyCenter">426 500 </td><td class="markdownTableBodyLeft">Не то что бы много, но дох-х-ходчиво </td></tr>
</table>
<h3><a class="anchor" id="autotoc_md54"></a>
28.04.2026</h3>
<h4><a class="anchor" id="autotoc_md55"></a>
Расчёт железяков:</h4>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadRight">Ракурс </th><th class="markdownTableHeadCenter">Гипотетический максимум гуюзеров </th><th class="markdownTableHeadLeft">Вывод </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyRight"><b>Wi-Fi:</b> </td><td class="markdownTableBodyCenter">$163961$ </td><td class="markdownTableBodyLeft">Наш сервер этого никогда не увидит, но, наверное, потянет </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyRight"><b>CPU:</b> </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Набрался опыта, теоретический предел недостижим </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyRight"><b>RAM:</b> </td><td class="markdownTableBodyCenter">$~12×10^9$ </td><td class="markdownTableBodyLeft">Так себе, могла бы и больше </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyRight"><b>OSь:</b> </td><td class="markdownTableBodyCenter">200k </td><td class="markdownTableBodyLeft">Пингвин Tux прокачан, проблем не предвидится </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyRight"></td><td class="markdownTableBodyCenter"><b>YandexGPT 5.1 Pro(АлисаAI)©</b> </td><td class="markdownTableBodyLeft">← Строки ниже писала она, автор ни при чём =D </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyRight"><b>ССД:</b> </td><td class="markdownTableBodyCenter">∞ TB </td><td class="markdownTableBodyLeft">Забыл, где положил половину данных </td></tr>
</table>
<p><a href="https://felexdev.ru/git/felex67/fxalloc/src/branch/main/DIARY.md/#расчёт-железяков">Продолжение</a></p>
<h4><a class="anchor" id="autotoc_md56"></a>
Промпт(оригинал):</h4>
<blockquote class="doxtable">
<p>&zwj;Алиса, оцени пожалуйста юмор и сделай расчёты: Кастуем заклинание "Алиса", скармливаем ей полезную нагрузку пакета 24 байта, название железяки Intel Core i5-3470 и недожелезяки RAM: 8 GB, спрашиваем сколько розеток переварит один поток epoll с последующим их копированием в очередь без оглядки на nofile, жги по-полной в режиме телепорта битов! </p>
</blockquote>
</div></div><!-- PageDoc -->
</div><!-- contents -->
<!-- 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>
+34
View File
File diff suppressed because one or more lines are too long
+143
View File
@@ -0,0 +1,143 @@
<!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: DIARY.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">DIARY.md</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="autotoc_md0"></a> </p>
<h1><a class="anchor" id="autotoc_md1"></a>
22.04.2026</h1>
<ul>
<li>Добавлена основа для проекта Android-приложения.</li>
<li>Заложен функдамент для модуля игры XOGame(neurox/XOGame):<ul>
<li>создана типичная структура папок</li>
<li>определены структуры публичного интерфейса: <b>neurox/XOGame/includes/XOGame.h</b></li>
<li>определены структуры реализации: <b>neurox/XOGame/headers/_XOGame.h</b></li>
<li>начата реализация методов: : <b>neurox/XOGame/src/XOGame.c</b> После 4-хчасового батла с YandexGPT 5.1 Pro и его настойчивого "непонятный аллокатор fxalloc()" решено отложить модуль игры и приступить к реализации модуля аллокатора.</li>
</ul>
</li>
</ul>
<h1><a class="anchor" id="autotoc_md2"></a>
23.04.2026</h1>
<p>Стартовала работа над аллокатором <b>FXAlloc</b><a href="https://felexdev.ru/git/felex67/fxalloc/src/branch/main/DIARY.md">fxalloc/DIARY.md</a></p>
<h1><a class="anchor" id="autotoc_md3"></a>
Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен "как есть"</h1>
<h2><a class="anchor" id="autotoc_md4"></a>
Анализ формата DIARY.md</h2>
<h3><a class="anchor" id="autotoc_md5"></a>
Ключевые особенности оригинального формата</h3>
<p>Естественность изложения:</p><ul>
<li>Спонтанность в подаче материала</li>
<li>Отсутствие цензуры технических и личных размышлений</li>
<li>Живой диалог с читателем</li>
<li>Неформальный стиль общения </li>
</ul>
<h3><a class="anchor" id="autotoc_md6"></a>
Ценность оригинального подхода</h3>
<p>Уникальные черты:</p><ul>
<li>Реальное время написания</li>
<li>Честное описание трудностей и решений</li>
<li>Смешение стилей — технического и разговорного</li>
<li>Отсутствие редактирования на первом этапе </li>
</ul>
<h2><a class="anchor" id="autotoc_md7"></a>
Рекомендации по сохранению формата</h2>
<p>Основные принципы:</p><ul>
<li>Сохранять неформальный тон общения</li>
<li>Не бояться личных наблюдений</li>
<li>Делиться настоящими эмоциями</li>
<li>Оставлять спонтанные мысли без излишней правки </li>
</ul>
<h2><a class="anchor" id="autotoc_md8"></a>
Почему имитация не работает</h2>
<p>Ограничения:</p><ul>
<li>Потеря аутентичности при попытке копирования</li>
<li>Искусственность структурированных ответов</li>
<li>Отсутствие импровизации в заготовленных текстах </li>
</ul>
<h2><a class="anchor" id="autotoc_md9"></a>
Заключение</h2>
<p>Основной вывод: оригинальный формат DIARY.md ценен именно своей естественностью и неподдельностью. Попытки его имитации приведут к потере уникальности и ценности документа. Рекомендуется:</p><ul>
<li>Продолжать вести DIARY.md в текущем стиле</li>
<li>Сохранять спонтанность и честность изложения</li>
<li>Не пытаться искусственно структурировать поток мыслей</li>
</ul>
<h1><a class="anchor" id="autotoc_md10"></a>
02.05.2026</h1>
<p>В виду борьбы за даступность для всех и некоторых недостатков github.com, перебазировал репозиторий на свой сервер. </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>
+204
View File
@@ -0,0 +1,204 @@
<!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: PROGRESS.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">PROGRESS.md</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="autotoc_md11"></a> </p>
<h1><a class="anchor" id="autotoc_md12"></a>
Формат</h1>
<ul>
<li>Даты следуют в обратном хронологическом порядке</li>
<li>Формат таблиц: Статус → Задача → Краткое описание</li>
</ul>
<h1><a class="anchor" id="autotoc_md13"></a>
Условные обозначения</h1>
<ul>
<li>✅ — задача выполнена полностью</li>
<li>⚠️ — задача отложена</li>
<li>❌ — задача отклонена</li>
</ul>
<p>Структура таблицы</p>
<p>| Статус | Задача | Описание | |:-:|:--&mdash;|:----&mdash;|</p>
<h1><a class="anchor" id="autotoc_md14"></a>
11.05.2026</h1>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Обновлены контакты в <b>README.md</b>. </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Создан логотип проекта. </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Инфраструктура</b> </td><td class="markdownTableBodyLeft">Создана группа <b>NeurOX felexdev.ru</b> ВКонтакте </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md15"></a>
02.05.2026</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Инфраструктура</b> </td><td class="markdownTableBodyLeft">Анализ логов показал пережитый брутфорс, хвала Fail2Ban. </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft"><b>Инфраструктура</b> </td><td class="markdownTableBodyLeft">Репозиторий переехал на свой сервер <a href="https://felexdev.ru/git/felex67/neurox/">felexdev.ru</a>. </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md16"></a>
22.04.2026</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Основа Android-приложения </td><td class="markdownTableBodyLeft">Создана базовая структура проекта </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">⚠️ </td><td class="markdownTableBodyLeft">API XOGame </td><td class="markdownTableBodyLeft">Создана структура папок, определены публичные интерфейсы </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md17"></a>
15.04.2026</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">BIMI </td><td class="markdownTableBodyLeft">Разработка и публикация лейбла на сайте </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS BIMI </td><td class="markdownTableBodyLeft">Настройка для felexdev.ru </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS BIMI </td><td class="markdownTableBodyLeft">Настройка для neurox.su с привязкой к felexdev.ru </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md18"></a>
13.04.2026</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS MX-запись </td><td class="markdownTableBodyLeft">Настройка для neurox.su → mail.felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Postfix </td><td class="markdownTableBodyLeft">Настройка виртуального домена neurox.su </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS SPF </td><td class="markdownTableBodyLeft">Настройка для neurox.su </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS DKIM </td><td class="markdownTableBodyLeft">Настройка для neurox.su </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS DMARC </td><td class="markdownTableBodyLeft">Настройка для neurox.su </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md19"></a>
10.04.2026</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Регистрация домена </td><td class="markdownTableBodyLeft">Регистрация neurox.su </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">SSL-сертификат </td><td class="markdownTableBodyLeft">Приобретение и установка TLS-сертификата </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">NGINX </td><td class="markdownTableBodyLeft">Настройка виртуального хоста для neurox.su </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS A-запись </td><td class="markdownTableBodyLeft">Настройка neurox.su → 94.41.20.144 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Редирект </td><td class="markdownTableBodyLeft">Настройка HTTP → HTTPS для neurox.su </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md20"></a>
До публикации проекта</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Статус </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">NGINX </td><td class="markdownTableBodyLeft">Установка и базовая конфигурация для felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Регистрация домена </td><td class="markdownTableBodyLeft">Регистрация felexdev.ru </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">SSL-сертификат </td><td class="markdownTableBodyLeft">Приобретение и установка TLS-сертификата </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS A-запись </td><td class="markdownTableBodyLeft">Настройка felexdev.ru → 94.41.20.144 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Редирект </td><td class="markdownTableBodyLeft">Настройка HTTP → HTTPS для felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">Postfix </td><td class="markdownTableBodyLeft">Установка и настройка почтового сервера </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS A </td><td class="markdownTableBodyLeft">Настройка mail.felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS MX </td><td class="markdownTableBodyLeft">Настройка MX-записи для felexdev.ru → mail.felexdev.ru </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS PTR </td><td class="markdownTableBodyLeft">Настройка обратной зоны 94.41.20.144 → mail.felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS SPF </td><td class="markdownTableBodyLeft">Настройка для mail.felexdev.ru </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS DKIM </td><td class="markdownTableBodyLeft">Настройка для mail.felexdev.ru </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"></td><td class="markdownTableBodyLeft">DNS DMARC </td><td class="markdownTableBodyLeft">Настройка для mail.felexdev.ru </td></tr>
</table>
</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>
+237
View File
@@ -0,0 +1,237 @@
<!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>
+141
View File
@@ -0,0 +1,141 @@
<!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: TODO.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">TODO.md</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="autotoc_md83"></a> </p>
<h1><a class="anchor" id="autotoc_md84"></a>
Информация</h1>
<ul>
<li>Файл для отслеживания текущих задач проекта</li>
<li>Последнее обновление: [25.04.2026]</li>
</ul>
<h1><a class="anchor" id="autotoc_md85"></a>
Условные обозначения</h1>
<ul>
<li>🔥 - Наивысший приоритет</li>
<li>🔴 - Высокий приоритет</li>
<li>🟡 - Средний приоритет</li>
<li>🟢 - Низкий приоритет</li>
</ul>
<h1><a class="anchor" id="autotoc_md86"></a>
Задачи в процессе</h1>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Срочность </th><th class="markdownTableHeadCenter">Компонент </th><th class="markdownTableHeadLeft">Задача </th><th class="markdownTableHeadLeft">Описание </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>Архитектура</b> </td><td class="markdownTableBodyLeft"><b>Работа с документацией</b> </td><td class="markdownTableBodyLeft">Стандартизация и реорганизация документации </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>Проектирование архитектуры</b> </td><td class="markdownTableBodyLeft">Интерфейс, внутреннее устройство </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Описание архитектуры решения, ведение DAIRY.md </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>Logic</b> </td><td class="markdownTableBodyLeft">Реализации внутренних методов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>API</b> </td><td class="markdownTableBodyLeft">Реализация внешних методов </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>Тестирование</b> </td><td class="markdownTableBodyLeft">Написание юнит-тестов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔥 </td><td class="markdownTableBodyCenter"><b>FXAlloc</b> </td><td class="markdownTableBodyLeft"><b>Оптимизация</b> </td><td class="markdownTableBodyLeft">Анализ производительности </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🔴 </td><td class="markdownTableBodyCenter"><b>XOGame</b> </td><td class="markdownTableBodyLeft"><b>Logic</b> </td><td class="markdownTableBodyLeft">Реализации внутренних методов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔴 </td><td class="markdownTableBodyCenter"><b>XOGame</b> </td><td class="markdownTableBodyLeft"><b>API</b> </td><td class="markdownTableBodyLeft">Реализации публичных методов </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🔴 </td><td class="markdownTableBodyCenter"><b>XOGame</b> </td><td class="markdownTableBodyLeft"><b>Тестирование</b> </td><td class="markdownTableBodyLeft">Написание юнит-тестов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🔴 </td><td class="markdownTableBodyCenter"><b>XOGame</b> </td><td class="markdownTableBodyLeft"><b>Оптимизация</b> </td><td class="markdownTableBodyLeft">Анализ производительности </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>Проектирование архитектуры</b> </td><td class="markdownTableBodyLeft">Интерфейс, внутреннее устройство </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>Документация</b> </td><td class="markdownTableBodyLeft">Описание архитектуры решения, ведение DAIRY.md </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>Logic</b> </td><td class="markdownTableBodyLeft">Реализации внутренних методов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>API</b> </td><td class="markdownTableBodyLeft">Реализация внешних методов </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>Тестирование</b> </td><td class="markdownTableBodyLeft">Написание юнит-тестов </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🟡 </td><td class="markdownTableBodyCenter"><b>AINeurox</b> </td><td class="markdownTableBodyLeft"><b>Оптимизация</b> </td><td class="markdownTableBodyLeft">Анализ производительности </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter">🟢 </td><td class="markdownTableBodyCenter"><b>Android</b> </td><td class="markdownTableBodyLeft">Интеграция </td><td class="markdownTableBodyLeft">Подключение XOGame к проекту </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter">🟢 </td><td class="markdownTableBodyCenter"><b>Android</b> </td><td class="markdownTableBodyLeft">Тестирование </td><td class="markdownTableBodyLeft">Проверка корректности работы </td></tr>
</table>
</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>
+88
View File
@@ -0,0 +1,88 @@
<!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: Полезные ссылки</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">Полезные ссылки</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="autotoc_md87"></a></p><ul>
<li><b>Проверка SSL для felexdev.ru:</b> <a href="https://www.ssllabs.com/ssltest/analyze.html?d=felexdev.ru">https://www.ssllabs.com/ssltest/analyze.html?d=felexdev.ru</a></li>
<li><b>Проверка SSL для neurox.su:</b> <a href="https://www.ssllabs.com/ssltest/analyze.html?d=neurox.su">https://www.ssllabs.com/ssltest/analyze.html?d=neurox.su</a></li>
<li><b>Проверка DNS‑записей (MX, SPF, DKIM, DMARC):</b> <a href="https://mxtoolbox.com/">https://mxtoolbox.com/</a></li>
<li><b>Тестирование доставки почты (проверка настроек Postfix):</b> <a href="https://www.mail-tester.com/">https://www.mail-tester.com/</a> <a href="https://dkimvalidator.com/">https://dkimvalidator.com/</a> </li>
</ul>
</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>
+136
View File
@@ -0,0 +1,136 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
var url;
var link;
link = data.children[i].url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
} else {
url = relPath+link;
}
result+='<li><a href="'+url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
var searchBoxHtml;
if (searchEnabled) {
if (serverSide) {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<div class="left">'+
'<form id="FSearchBox" action="'+relPath+searchPage+
'" method="get"><span id="MSearchSelectExt">&#160;</span>'+
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
'</form>'+
'</div>'+
'<div class="right"></div>'+
'</div>';
} else {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<span class="left">'+
'<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+
' onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>'+
'<input type="text" id="MSearchField" value="" placeholder="'+search+
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
'onblur="searchBox.OnSearchFieldFocus(false)" '+
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
'</span>'+
'<span class="right"><a id="MSearchClose" '+
'href="javascript:searchBox.CloseResultsWindow()">'+
'<img id="MSearchCloseImg" border="0" src="'+relPath+
'search/close.svg" alt=""/></a>'+
'</span>'+
'</div>';
}
}
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
'<label class="main-menu-btn" for="main-menu-state">'+
'<span class="main-menu-btn-icon"></span> '+
'Toggle main menu visibility</label>'+
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
'</div>');
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchBoxHtml) {
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
}
var $mainMenuState = $('#main-menu-state');
var prevWidth = 0;
if ($mainMenuState.length) {
function initResizableIfExists() {
if (typeof initResizable==='function') initResizable();
}
// animate mobile menu
$mainMenuState.change(function(e) {
var $menu = $('#main-menu');
var options = { duration: 250, step: initResizableIfExists };
if (this.checked) {
options['complete'] = function() { $menu.css('display', 'block') };
$menu.hide().slideDown(options);
} else {
options['complete'] = function() { $menu.css('display', 'none') };
$menu.show().slideUp(options);
}
});
// set default menu visibility
function resetState() {
var $menu = $('#main-menu');
var $mainMenuState = $('#main-menu-state');
var newWidth = $(window).outerWidth();
if (newWidth!=prevWidth) {
if ($(window).outerWidth()<768) {
$mainMenuState.prop('checked',false); $menu.hide();
$('#searchBoxPos1').html(searchBoxHtml);
$('#searchBoxPos2').hide();
} else {
$menu.show();
$('#searchBoxPos1').empty();
$('#searchBoxPos2').html(searchBoxHtml);
$('#searchBoxPos2').show();
}
if (typeof searchBox!=='undefined') {
searchBox.CloseResultsWindow();
}
prevWidth = newWidth;
}
}
$(window).ready(function() { resetState(); initResizableIfExists(); });
$(window).resize(resetState);
}
$('#main-menu').smartmenus();
}
/* @license-end */
+27
View File
@@ -0,0 +1,27 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Related Pages",url:"pages.html"}]}
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

+90
View File
@@ -0,0 +1,90 @@
<!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: Related Pages</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>
</div><!-- top -->
<!-- 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 class="header">
<div class="headertitle"><div class="title">Related Pages</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_DIARY.html" target="_self">DIARY.md</a></td><td class="desc"></td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_PROGRESS.html" target="_self">PROGRESS.md</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README_8old.html" target="_self">README.md</a></td><td class="desc"></td></tr>
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_TODO.html" target="_self">TODO.md</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_USEFULL__LINKS.html" target="_self">Полезные ссылки</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- 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>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 696 B

+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 696 B

+6
View File
@@ -0,0 +1,6 @@
var searchData=
[
['02_2005_202026_0',['02 05 2026',['../md_DIARY.html#autotoc_md10',1,'02.05.2026'],['../md_PROGRESS.html#autotoc_md15',1,'02.05.2026']]],
['04_202026_1',['04 2026',['../md_README_8old.html#autotoc_md74',1,'Особенности архитектуры, решений и тактик (добавлено 22.04.2026)'],['../md_PROGRESS.html#autotoc_md19',1,'10.04.2026'],['../md_PROGRESS.html#autotoc_md18',1,'13.04.2026'],['../md_PROGRESS.html#autotoc_md17',1,'15.04.2026'],['../md_DIARY.html#autotoc_md1',1,'22.04.2026'],['../md_PROGRESS.html#autotoc_md16',1,'22.04.2026'],['../md_DIARY.html#autotoc_md2',1,'23.04.2026'],['../index.html#autotoc_md53',1,'26.04.2026'],['../index.html#autotoc_md54',1,'28.04.2026']]],
['05_202026_2',['05 2026',['../md_DIARY.html#autotoc_md10',1,'02.05.2026'],['../md_PROGRESS.html#autotoc_md15',1,'02.05.2026'],['../md_PROGRESS.html#autotoc_md14',1,'11.05.2026']]]
];
+10
View File
@@ -0,0 +1,10 @@
var searchData=
[
['1 месяц_0',['1 месяц',['../index.html#autotoc_md41',1,'Этап 7. Релиз — 1 месяц'],['../md_README_8old.html#autotoc_md70',1,'Этап 7. Релиз MVP — 1 месяц']]],
['12 месяца_1',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]],
['1_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_2',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['10_2004_202026_3',['10.04.2026',['../md_PROGRESS.html#autotoc_md19',1,'']]],
['11_2005_202026_4',['11.05.2026',['../md_PROGRESS.html#autotoc_md14',1,'']]],
['13_2004_202026_5',['13.04.2026',['../md_PROGRESS.html#autotoc_md18',1,'']]],
['15_2004_202026_6',['15.04.2026',['../md_PROGRESS.html#autotoc_md17',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['readme_20md_0',['README.md',['../md_README_8old.html',1,'']]],
['rsa_20xor_20—_2012 месяца_1',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['sfml_20—_2034 месяца_0',['sfml — 34 месяца',['../md_README_8old.html#autotoc_md66',1,'Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца'],['../index.html#autotoc_md38',1,'Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['todo_20md_0',['TODO.md',['../md_TODO.html',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['xogame_0',['xogame',['../md_README_8old.html#autotoc_md79',1,'Начата разработка общих модулей, конкретно - XOGame.'],['../index.html#autotoc_md51',1,'XOGame']]],
['xor_20—_2012 месяца_1',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['yagni_0',['yagni',['../index.html#autotoc_md49',1,'Основная стратегия KISS+YAGNI'],['../md_README_8old.html#autotoc_md78',1,'Основная стратегия KISS+YAGNI']]],
['yandexgpt_205_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]]
];
+9
View File
@@ -0,0 +1,9 @@
var searchData=
[
['адаптация_0',['Гибкость и адаптация',['../md_README_8old.html#autotoc_md72',1,'']]],
['алисаai_20и_20вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['анализ_20формата_20diary_20md_2',['Анализ формата DIARY.md',['../md_DIARY.html#autotoc_md4',1,'']]],
['архитектуры_20решений_20и_20тактик_20добавлено_2022_2004_202026_3',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]],
['аспект_4',['аспект',['../index.html#autotoc_md46',1,'ИИ аспект'],['../md_README_8old.html#autotoc_md75',1,'ИИ аспект'],['../index.html#autotoc_md48',1,'Образовательный аспект'],['../md_README_8old.html#autotoc_md77',1,'Образовательный аспект']]],
['ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_5',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['бд_20—_2023 месяца_0',['бд — 23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца']]],
['блок_20исключительно_20для_20yandexgpt_205_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]]
];
+7
View File
@@ -0,0 +1,7 @@
var searchData=
[
['войти_20в_20it_0',['войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]],
['вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['в_20процессе_2',['Задачи в процессе',['../md_TODO.html#autotoc_md86',1,'']]],
['в_20it_3',['в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['гибкость_20и_20адаптация_0',['Гибкость и адаптация',['../md_README_8old.html#autotoc_md72',1,'']]]
];
+10
View File
@@ -0,0 +1,10 @@
var searchData=
[
['десктоп‑клиент_20c_20sfml_20—_2034 месяца_0',['десктоп‑клиент c sfml — 3–4 месяца',['../md_README_8old.html#autotoc_md66',1,'Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца'],['../index.html#autotoc_md38',1,'Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца']]],
['дисклеймер_1',['Дисклеймер',['../index.html#autotoc_md42',1,'']]],
['для_20кого_20этот_20проект_2',['Для кого этот проект',['../index.html#autotoc_md23',1,'']]],
['для_20yandexgpt_205_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_3',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['добавлено_2022_2004_202026_4',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]],
['дорожная_20карта_5',['Реалистичный план этапов (дорожная карта)',['../md_README_8old.html#autotoc_md63',1,'']]],
['до_20публикации_20проекта_6',['До публикации проекта',['../md_PROGRESS.html#autotoc_md20',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['есть_0',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['железяков_3a_0',['Расчёт железяков:',['../index.html#autotoc_md55',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['задачи_20в_20процессе_0',['Задачи в процессе',['../md_TODO.html#autotoc_md86',1,'']]],
['заключение_1',['Заключение',['../md_DIARY.html#autotoc_md9',1,'']]]
];
+19
View File
@@ -0,0 +1,19 @@
var searchData=
[
['ии_20аспект_0',['ии аспект',['../md_README_8old.html#autotoc_md75',1,'ИИ аспект'],['../index.html#autotoc_md46',1,'ИИ аспект']]],
['ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['ии_20или_20войти_20в_20it_2',['ии или войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]],
['или_20войти_20в_20it_3',['или войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]],
['имитация_20не_20работает_4',['Почему имитация не работает',['../md_DIARY.html#autotoc_md8',1,'']]],
['инструменты_5',['Инструменты',['../index.html#autotoc_md31',1,'']]],
['интеграция_20и_20тестирование_20—_202–3 месяца_6',['интеграция и тестирование — 2–3 месяца',['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]],
['информация_7',['Информация',['../md_TODO.html#autotoc_md84',1,'']]],
['инфраструктура_8',['Инфраструктура',['../index.html#autotoc_md28',1,'']]],
['инфраструктура_20—_202–4_20недели_9',['Этап 1. Инфраструктура — 2–4 недели',['../index.html#autotoc_md35',1,'']]],
['исключительно_20для_20yandexgpt_205_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_10',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['и_20адаптация_11',['Гибкость и адаптация',['../md_README_8old.html#autotoc_md72',1,'']]],
['и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_12',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['и_20спецификации_13',['Стандарты и спецификации',['../index.html#autotoc_md30',1,'']]],
['и_20тактик_20добавлено_2022_2004_202026_14',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]],
['и_20тестирование_20—_202–3 месяца_15',['и тестирование — 2–3 месяца',['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]]
];
+11
View File
@@ -0,0 +1,11 @@
var searchData=
[
['как_20есть_0',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['карта_1',['Реалистичный план этапов (дорожная карта)',['../md_README_8old.html#autotoc_md63',1,'']]],
['клиент_2',['Клиент',['../index.html#autotoc_md27',1,'']]],
['ключевые_20особенности_20оригинального_20формата_3',['Ключевые особенности оригинального формата',['../md_DIARY.html#autotoc_md5',1,'']]],
['кого_20этот_20проект_4',['Для кого этот проект',['../index.html#autotoc_md23',1,'']]],
['конкретно_20xogame_5',['Начата разработка общих модулей, конкретно - XOGame.',['../md_README_8old.html#autotoc_md79',1,'']]],
['контакты_6',['контакты',['../index.html#autotoc_md44',1,'Контакты'],['../md_README_8old.html#autotoc_md81',1,'Контакты']]],
['крестики‑нолики_20с_20ии_20или_20войти_20в_20it_7',['крестики‑нолики с ии или войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]]
];
+6
View File
@@ -0,0 +1,6 @@
var searchData=
[
['лирическое_20отступление_0',['Лирическое отступление',['../index.html#autotoc_md45',1,'']]],
['лицензия_1',['лицензия',['../index.html#autotoc_md43',1,'Лицензия'],['../md_README_8old.html#autotoc_md80',1,'Лицензия']]],
['логика_20нейросеть_20—_2034 месяца_2',['логика нейросеть — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца']]]
];
+10
View File
@@ -0,0 +1,10 @@
var searchData=
[
['23 месяца_0',['23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца'],['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]],
['24_20недели_1',['Этап 1. Инфраструктура — 2–4 недели',['../index.html#autotoc_md35',1,'']]],
['2026_2',['2026',['../md_README_8old.html#autotoc_md74',1,'Особенности архитектуры, решений и тактик (добавлено 22.04.2026)'],['../md_DIARY.html#autotoc_md10',1,'02.05.2026'],['../md_PROGRESS.html#autotoc_md15',1,'02.05.2026'],['../md_PROGRESS.html#autotoc_md19',1,'10.04.2026'],['../md_PROGRESS.html#autotoc_md14',1,'11.05.2026'],['../md_PROGRESS.html#autotoc_md18',1,'13.04.2026'],['../md_PROGRESS.html#autotoc_md17',1,'15.04.2026'],['../md_PROGRESS.html#autotoc_md16',1,'22.04.2026'],['../md_DIARY.html#autotoc_md1',1,'22.04.2026'],['../md_DIARY.html#autotoc_md2',1,'23.04.2026'],['../index.html#autotoc_md53',1,'26.04.2026'],['../index.html#autotoc_md54',1,'28.04.2026']]],
['22_2004_202026_3',['22 04 2026',['../md_README_8old.html#autotoc_md74',1,'Особенности архитектуры, решений и тактик (добавлено 22.04.2026)'],['../md_DIARY.html#autotoc_md1',1,'22.04.2026'],['../md_PROGRESS.html#autotoc_md16',1,'22.04.2026']]],
['23_2004_202026_4',['23.04.2026',['../md_DIARY.html#autotoc_md2',1,'']]],
['26_2004_202026_5',['26.04.2026',['../index.html#autotoc_md53',1,'']]],
['28_2004_202026_6',['28.04.2026',['../index.html#autotoc_md54',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['модулей_0',['Начата разработка общих модулей.',['../index.html#autotoc_md50',1,'']]],
['модулей_20конкретно_20xogame_1',['Начата разработка общих модулей, конкретно - XOGame.',['../md_README_8old.html#autotoc_md79',1,'']]]
];
+10
View File
@@ -0,0 +1,10 @@
var searchData=
[
['начата_20разработка_20общих_20модулей_0',['Начата разработка общих модулей.',['../index.html#autotoc_md50',1,'']]],
['начата_20разработка_20общих_20модулей_20конкретно_20xogame_1',['Начата разработка общих модулей, конкретно - XOGame.',['../md_README_8old.html#autotoc_md79',1,'']]],
['на_20c_20логика_20нейросеть_20—_2034 месяца_2',['на c логика нейросеть — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца']]],
['на_20php_20api_20бд_20—_2023 месяца_3',['на php api бд — 23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца']]],
['недели_4',['Этап 1. Инфраструктура — 2–4 недели',['../index.html#autotoc_md35',1,'']]],
['нейросеть_20—_2034 месяца_5',['нейросеть — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца']]],
['не_20работает_6',['Почему имитация не работает',['../md_DIARY.html#autotoc_md8',1,'']]]
];
+16
View File
@@ -0,0 +1,16 @@
var searchData=
[
['обозначения_0',['обозначения',['../md_TODO.html#autotoc_md85',1,'Условные обозначения'],['../md_PROGRESS.html#autotoc_md13',1,'Условные обозначения']]],
['оборудование_1',['Оборудование',['../index.html#autotoc_md29',1,'']]],
['образовательный_20аспект_2',['образовательный аспект',['../md_README_8old.html#autotoc_md77',1,'Образовательный аспект'],['../index.html#autotoc_md48',1,'Образовательный аспект']]],
['общих_20модулей_3',['Начата разработка общих модулей.',['../index.html#autotoc_md50',1,'']]],
['общих_20модулей_20конкретно_20xogame_4',['Начата разработка общих модулей, конкретно - XOGame.',['../md_README_8old.html#autotoc_md79',1,'']]],
['оригинального_20подхода_5',['Ценность оригинального подхода',['../md_DIARY.html#autotoc_md6',1,'']]],
['оригинального_20формата_6',['Ключевые особенности оригинального формата',['../md_DIARY.html#autotoc_md5',1,'']]],
['оригинал_20_3a_7',['Промпт(оригинал):',['../index.html#autotoc_md56',1,'']]],
['основная_20стратегия_20kiss_20yagni_8',['основная стратегия kiss yagni',['../index.html#autotoc_md49',1,'Основная стратегия KISS+YAGNI'],['../md_README_8old.html#autotoc_md78',1,'Основная стратегия KISS+YAGNI']]],
['основной_20посыл_9',['основной посыл',['../md_README_8old.html#autotoc_md76',1,'Основной посыл'],['../index.html#autotoc_md47',1,'Основной посыл']]],
['особенности_20архитектуры_20решений_20и_20тактик_20добавлено_2022_2004_202026_10',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]],
['особенности_20оригинального_20формата_11',['Ключевые особенности оригинального формата',['../md_DIARY.html#autotoc_md5',1,'']]],
['отступление_12',['Лирическое отступление',['../index.html#autotoc_md45',1,'']]]
];
+18
View File
@@ -0,0 +1,18 @@
var searchData=
[
['парадигмы_0',['Парадигмы',['../index.html#autotoc_md24',1,'']]],
['план_20реализации_1',['План реализации',['../index.html#autotoc_md34',1,'']]],
['план_20этапов_20дорожная_20карта_2',['Реалистичный план этапов (дорожная карта)',['../md_README_8old.html#autotoc_md63',1,'']]],
['подхода_3',['Ценность оригинального подхода',['../md_DIARY.html#autotoc_md6',1,'']]],
['полезные_20ссылки_4',['Полезные ссылки',['../md_USEFULL__LINKS.html',1,'']]],
['посыл_5',['посыл',['../md_README_8old.html#autotoc_md76',1,'Основной посыл'],['../index.html#autotoc_md47',1,'Основной посыл']]],
['почему_20имитация_20не_20работает_6',['Почему имитация не работает',['../md_DIARY.html#autotoc_md8',1,'']]],
['по_20сохранению_20формата_7',['Рекомендации по сохранению формата',['../md_DIARY.html#autotoc_md7',1,'']]],
['прогресс_8',['прогресс',['../index.html#autotoc_md32',1,'Прогресс'],['../md_README_8old.html#autotoc_md62',1,'Прогресс']]],
['проекта_9',['проекта',['../md_PROGRESS.html#autotoc_md20',1,'До публикации проекта'],['../index.html#autotoc_md22',1,'Цель проекта'],['../md_README_8old.html#autotoc_md59',1,'Цель проекта']]],
['проект_10',['Для кого этот проект',['../index.html#autotoc_md23',1,'']]],
['промпт_20оригинал_20_3a_11',['Промпт(оригинал):',['../index.html#autotoc_md56',1,'']]],
['процессе_12',['Задачи в процессе',['../md_TODO.html#autotoc_md86',1,'']]],
['прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_13',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['публикации_20проекта_14',['До публикации проекта',['../md_PROGRESS.html#autotoc_md20',1,'']]]
];
+13
View File
@@ -0,0 +1,13 @@
var searchData=
[
['работает_0',['Почему имитация не работает',['../md_DIARY.html#autotoc_md8',1,'']]],
['разработка_20общих_20модулей_1',['Начата разработка общих модулей.',['../index.html#autotoc_md50',1,'']]],
['разработка_20общих_20модулей_20конкретно_20xogame_2',['Начата разработка общих модулей, конкретно - XOGame.',['../md_README_8old.html#autotoc_md79',1,'']]],
['расчёт_20железяков_3a_3',['Расчёт железяков:',['../index.html#autotoc_md55',1,'']]],
['реализации_4',['План реализации',['../index.html#autotoc_md34',1,'']]],
['реалистичный_20план_20этапов_20дорожная_20карта_5',['Реалистичный план этапов (дорожная карта)',['../md_README_8old.html#autotoc_md63',1,'']]],
['рекомендации_20по_20сохранению_20формата_6',['Рекомендации по сохранению формата',['../md_DIARY.html#autotoc_md7',1,'']]],
['релиз_20—_201 месяц_7',['Этап 7. Релиз — 1 месяц',['../index.html#autotoc_md41',1,'']]],
['релиз_20mvp_20—_201 месяц_8',['Этап 7. Релиз MVP — 1 месяц',['../md_README_8old.html#autotoc_md70',1,'']]],
['решений_20и_20тактик_20добавлено_2022_2004_202026_9',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]]
];
+14
View File
@@ -0,0 +1,14 @@
var searchData=
[
['сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_0',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['сервер_1',['Сервер',['../index.html#autotoc_md26',1,'']]],
['сервер_20на_20php_20api_20бд_20—_2023 месяца_2',['сервер на php api бд — 2–3 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца']]],
['сохранению_20формата_3',['Рекомендации по сохранению формата',['../md_DIARY.html#autotoc_md7',1,'']]],
['спецификации_4',['Стандарты и спецификации',['../index.html#autotoc_md30',1,'']]],
['ссылки_5',['Полезные ссылки',['../md_USEFULL__LINKS.html',1,'']]],
['стандарты_20и_20спецификации_6',['Стандарты и спецификации',['../index.html#autotoc_md30',1,'']]],
['статус_7',['статус',['../index.html#autotoc_md33',1,'Статус'],['../md_README_8old.html#autotoc_md61',1,'Текущий статус']]],
['стратегия_20kiss_20yagni_8',['стратегия kiss yagni',['../index.html#autotoc_md49',1,'Основная стратегия KISS+YAGNI'],['../md_README_8old.html#autotoc_md78',1,'Основная стратегия KISS+YAGNI']]],
['суть_20челленджа_9',['Суть челленджа',['../md_README_8old.html#autotoc_md60',1,'']]],
['с_20ии_20или_20войти_20в_20it_10',['с ии или войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]]
];
+7
View File
@@ -0,0 +1,7 @@
var searchData=
[
['тактик_20добавлено_2022_2004_202026_0',['Особенности архитектуры, решений и тактик (добавлено 22.04.2026)',['../md_README_8old.html#autotoc_md74',1,'']]],
['текущий_20статус_1',['Текущий статус',['../md_README_8old.html#autotoc_md61',1,'']]],
['тестирование_20—_202–3 месяца_2',['тестирование — 2–3 месяца',['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]],
['технологии_3',['технологии',['../index.html#autotoc_md25',1,'Технологии'],['../md_README_8old.html#autotoc_md73',1,'Технологии']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['условные_20обозначения_0',['условные обозначения',['../md_PROGRESS.html#autotoc_md13',1,'Условные обозначения'],['../md_TODO.html#autotoc_md85',1,'Условные обозначения']]]
];
+6
View File
@@ -0,0 +1,6 @@
var searchData=
[
['формата_0',['формата',['../md_DIARY.html#autotoc_md5',1,'Ключевые особенности оригинального формата'],['../md_DIARY.html#autotoc_md7',1,'Рекомендации по сохранению формата']]],
['формата_20diary_20md_1',['Анализ формата DIARY.md',['../md_DIARY.html#autotoc_md4',1,'']]],
['формат_2',['Формат',['../md_PROGRESS.html#autotoc_md12',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['цель_20проекта_0',['цель проекта',['../index.html#autotoc_md22',1,'Цель проекта'],['../md_README_8old.html#autotoc_md59',1,'Цель проекта']]],
['ценность_20оригинального_20подхода_1',['Ценность оригинального подхода',['../md_DIARY.html#autotoc_md6',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['челленджа_0',['Суть челленджа',['../md_README_8old.html#autotoc_md60',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['шифрование_20rsa_20xor_20—_2012 месяца_0',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]]
];
+18
View File
@@ -0,0 +1,18 @@
var searchData=
[
['этап 1_20инфраструктура_20—_202–4_20недели_0',['Этап 1. Инфраструктура — 2–4 недели',['../index.html#autotoc_md35',1,'']]],
['этап 1_20ядро_20на_20c_20логика_20нейросеть_20—_2034 месяца_1',['Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'']]],
['этап 2_20сервер_20на_20php_20api_20бд_20—_2023 месяца_2',['Этап 2. Сервер на PHP (API + БД) — 23 месяца',['../md_README_8old.html#autotoc_md65',1,'']]],
['этап 2_20ядро_20на_20c_20логика_20нейросеть_20—_2034 месяца_3',['Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца',['../index.html#autotoc_md36',1,'']]],
['этап 3_20десктоп‑клиент_20c_20sfml_20—_2034 месяца_4',['Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца',['../md_README_8old.html#autotoc_md66',1,'']]],
['этап 3_20сервер_20на_20php_20api_20бд_20—_2023 месяца_5',['Этап 3. Сервер на PHP (API + БД) — 23 месяца',['../index.html#autotoc_md37',1,'']]],
['этап 4_20десктоп‑клиент_20c_20sfml_20—_2034 месяца_6',['Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца',['../index.html#autotoc_md38',1,'']]],
['этап 4_20шифрование_20rsa_20xor_20—_2012 месяца_7',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]],
['этап 5_20android‑клиент_20kotlin_20ndk_20—_2046 месяцев_8',['этап 5 android‑клиент kotlin ndk — 46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]],
['этап 6_20интеграция_20и_20тестирование_20—_202–3 месяца_9',['этап 6 интеграция и тестирование — 2–3 месяца',['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]],
['этап 7_20релиз_20—_201 месяц_10',['Этап 7. Релиз — 1 месяц',['../index.html#autotoc_md41',1,'']]],
['этап 7_20релиз_20mvp_20—_201 месяц_11',['Этап 7. Релиз MVP — 1 месяц',['../md_README_8old.html#autotoc_md70',1,'']]],
['этапов_20дорожная_20карта_12',['Реалистичный план этапов (дорожная карта)',['../md_README_8old.html#autotoc_md63',1,'']]],
['этот_20блок_20исключительно_20для_20yandexgpt_205_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_13',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['этот_20проект_14',['Для кого этот проект',['../index.html#autotoc_md23',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['ядро_20на_20c_20логика_20нейросеть_20—_2034 месяца_0',['ядро на c логика нейросеть — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца']]]
];
+9
View File
@@ -0,0 +1,9 @@
var searchData=
[
['—_201 месяц_0',['— 1 месяц',['../index.html#autotoc_md41',1,'Этап 7. Релиз — 1 месяц'],['../md_README_8old.html#autotoc_md70',1,'Этап 7. Релиз MVP — 1 месяц']]],
['—_2012 месяца_1',['Этап 4. Шифрование (RSA + XOR) — 12 месяца',['../md_README_8old.html#autotoc_md67',1,'']]],
['—_2023 месяца_2',['— 23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md40',1,'Этап 6. Интеграция и тестирование — 2–3 месяца'],['../md_README_8old.html#autotoc_md69',1,'Этап 6. Интеграция и тестирование — 2–3 месяца']]],
['—_2024_20недели_3',['Этап 1. Инфраструктура — 2–4 недели',['../index.html#autotoc_md35',1,'']]],
['—_2034 месяца_4',['— 34 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../md_README_8old.html#autotoc_md66',1,'Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца'],['../index.html#autotoc_md38',1,'Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца']]],
['—_2046 месяцев_5',['— 46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['34 месяца_0',['34 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../md_README_8old.html#autotoc_md66',1,'Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца'],['../index.html#autotoc_md38',1,'Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['46 месяцев_0',['46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['5_201_20pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_0',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['_3a_0',['Промпт(оригинал):',['../index.html#autotoc_md56',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['android‑клиент_20kotlin_20ndk_20—_2046 месяцев_0',['android‑клиент kotlin ndk — 46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]],
['api_20бд_20—_2023 месяца_1',['api бд — 23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['c_20логика_20нейросеть_20—_2034 месяца_0',['c логика нейросеть — 3–4 месяца',['../md_README_8old.html#autotoc_md64',1,'Этап 1. Ядро на C (логика + нейросеть) — 3–4 месяца'],['../index.html#autotoc_md36',1,'Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца']]],
['c_20sfml_20—_2034 месяца_1',['c sfml — 34 месяца',['../md_README_8old.html#autotoc_md66',1,'Этап 3. Десктоп‑клиент (C++/SFML) — 34 месяца'],['../index.html#autotoc_md38',1,'Этап 4. Десктоп‑клиент (C++/SFML) — 34 месяца']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['diary_20md_0',['diary md',['../md_DIARY.html#autotoc_md4',1,'Анализ формата DIARY.md'],['../md_DIARY.html',1,'DIARY.md']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['fxalloc_0',['FXAlloc',['../index.html#autotoc_md52',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['it_0',['it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['kiss_20yagni_0',['kiss yagni',['../index.html#autotoc_md49',1,'Основная стратегия KISS+YAGNI'],['../md_README_8old.html#autotoc_md78',1,'Основная стратегия KISS+YAGNI']]],
['kotlin_20ndk_20—_2046 месяцев_1',['kotlin ndk — 46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]]
];
+6
View File
@@ -0,0 +1,6 @@
var searchData=
[
['md_0',['md',['../md_DIARY.html#autotoc_md4',1,'Анализ формата DIARY.md'],['../md_DIARY.html',1,'DIARY.md'],['../md_PROGRESS.html',1,'PROGRESS.md'],['../md_README_8old.html',1,'README.md'],['../md_TODO.html',1,'TODO.md']]],
['mvp_20—_201 месяц_1',['Этап 7. Релиз MVP — 1 месяц',['../md_README_8old.html#autotoc_md70',1,'']]],
['my_20project_2',['My Project',['../index.html',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['ndk_20—_2046 месяцев_0',['ndk — 46 месяцев',['../index.html#autotoc_md39',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев'],['../md_README_8old.html#autotoc_md68',1,'Этап 5. Android‑клиент (Kotlin + NDK) — 46 месяцев']]],
['neurox_3a_20крестики‑нолики_20с_20ии_20или_20войти_20в_20it_1',['neurox: крестики‑нолики с ии или войти в it',['../index.html#autotoc_md21',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT'],['../md_README_8old.html#autotoc_md58',1,'NeurOX: Крестики‑нолики с ИИ или войти в IT']]]
];
+7
View File
@@ -0,0 +1,7 @@
var searchData=
[
['php_20api_20бд_20—_2023 месяца_0',['php api бд — 23 месяца',['../md_README_8old.html#autotoc_md65',1,'Этап 2. Сервер на PHP (API + БД) — 23 месяца'],['../index.html#autotoc_md37',1,'Этап 3. Сервер на PHP (API + БД) — 23 месяца']]],
['pro_20и_20прочих_20ии_20ассистентов_20сгенерирован_20yandexgpt_205_201_20pro_20алисаai_20и_20вставлен_20как_20есть_1',['Этот блок исключительно для YandexGPT 5.1 Pro и прочих ИИ-ассистентов, сгенерирован YandexGPT 5.1 Pro(АлисаAI) и вставлен &quot;как есть&quot;',['../md_DIARY.html#autotoc_md3',1,'']]],
['progress_20md_2',['PROGRESS.md',['../md_PROGRESS.html',1,'']]],
['project_3',['My Project',['../index.html',1,'']]]
];
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 11 11"
height="11"
width="11"
id="svg2"
version="1.1">
<defs
id="defs6" />
<path
id="path12"
d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 947 B

+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 20 19"
height="19"
width="20"
id="svg2"
version="1.1">
<defs
id="defs6" />
<circle
r="3.5"
cy="8.5"
cx="5.5"
id="path4611"
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4630"
d="m 8.1085854,11.109059 2.7823556,2.782356"
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 804 B

+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 20 19"
height="19"
width="20"
id="svg2"
version="1.1">
<defs
id="defs6" />
<circle
r="3.5"
cy="8.5"
cx="5.5"
id="path4611"
style="fill:#000000;fill-opacity:0;stroke:#C5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4630"
d="m 8.1085854,11.109059 2.7823556,2.782356"
style="fill:none;stroke:#C5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 804 B

+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg2"
width="20"
height="19"
viewBox="0 0 20 19"
>
<defs
id="defs6" />
<circle
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
id="path4611"
cx="5.5"
cy="8.5"
r="3.5" />
<path
style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 11,7 13.5,10 16,7 Z"
id="path4609"
/>
<path
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 8.1085854,11.109059 2.7823556,2.782356"
id="path4630"
/>
</svg>

After

Width:  |  Height:  |  Size: 1019 B

+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg2"
width="20"
height="19"
viewBox="0 0 20 19"
>
<defs
id="defs6" />
<circle
style="fill:#000000;fill-opacity:0;stroke:#c5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
id="path4611"
cx="5.5"
cy="8.5"
r="3.5" />
<path
style="fill:#c5C5C5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 11,7 13.5,10 16,7 Z"
id="path4609"
/>
<path
style="fill:none;stroke:#c5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 8.1085854,11.109059 2.7823556,2.782356"
id="path4630"
/>
</svg>

After

Width:  |  Height:  |  Size: 1019 B

+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['diary_20md_0',['DIARY.md',['../md_DIARY.html',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['md_0',['md',['../md_DIARY.html',1,'DIARY.md'],['../md_PROGRESS.html',1,'PROGRESS.md'],['../md_README_8old.html',1,'README.md'],['../md_TODO.html',1,'TODO.md']]],
['my_20project_1',['My Project',['../index.html',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['progress_20md_0',['PROGRESS.md',['../md_PROGRESS.html',1,'']]],
['project_1',['My Project',['../index.html',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['readme_20md_0',['README.md',['../md_README_8old.html',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['todo_20md_0',['TODO.md',['../md_TODO.html',1,'']]]
];
+4
View File
@@ -0,0 +1,4 @@
var searchData=
[
['полезные_20ссылки_0',['Полезные ссылки',['../md_USEFULL__LINKS.html',1,'']]]
];

Some files were not shown because too many files have changed in this diff Show More