Всем привет. Тут я опишу одну идею, и то, насколько ново мне удаётся её реализовать. Почему же я отклонился от намеченных целей? Почему форумный движок? Как же чипы, как же машинное зрение? Ну вообще смотря как посмотреть, вообще не реклама - много предыстории под спойлером, к слабонервным просьба пропустить эту часть

Скрытый текст

В весной прошлого года, чтобы не наступить себе на "хвост" подал заявку, и в общем-то готово: патент на ПМ полного сумматора на элементах трёх состояний. И что же далее, а далее я начал думать как реализовать 3D принтер для печати чипов, лазерный. Упёрся в задачу высокоточного привода и подумав решил, что самый простой способ - наматывать резьбу (нарезать винт с таким шагом нереально) из нихромовой проволоки (она продаётся и длиной до 50 метров и более, кстати приготовьтесь - предыстория разматывается в длинную череду, прям как нить нихрома, или какие там ещё есть), а потом обжимать её фторопластовыми заготовками, с предварительно подогретыми рабочими поверхностями, делать оттиском ответную резьбу на заготовках сборной гайки. И таким образом я смогу получить высокоточные привода. Идея мне понравилась и я начал писать очередной аддон (предыдущий был для использования Blender 3D в качестве наглядного пособия для изучения разных материалов, требующего визуализации и работы с текстом, работает на базе апдейта коллекций в 2019 вроде https://github.com/Andrei-Y/doc-manager ) для генерации оптимизированных мешей деталей. Это я уже задумал генеративный дизайн с топологической оптимизацией. И вот тут стрельнуло пока я печатал модульный конструктор для быстросборных и разборных стендов для испытания всякой чепухи (ну короче я всё неиспытанное и непроверенное считаю чепухой, потому что техника). А именно - начала деформироваться плёнка ванночки, что было крайне неприятно наблюдать, даже зная что это всего-лишь расходник. И было совершенно понятно, что делают это базовые слои печатаемые фотополимерником, и так же понятно, что их можно печататать в шахматном или другом порядке, возвращая стол на прежнюю позицию по оси Z, но с меньшей скоростью, чтобы смола успевала отойти не оказывая давления на плёнку, и тем самым - уменьшить деформацию плёнки - уж очень блезненно она переживает отрыв базового слоя от неё, а с настройками я наэкспериментировался. Тогда я задал вопрос на портале мэйкеров, но мне умные менеджеры сказали, что когда нехватает денег на запрещённые вещества - 3D принтер не нужен. Вот тут-то я и задумался - а ведь действительно всё под их контролем, кто контролирует прибыль - контролирует всё. Но я не отчаялся и задал вопрос о расшифровке файла задания производителю. На что доктор технических наук их компании, ранее просивший задавать ему вопросы, решил уйти в безвременный отпуск. Ну оно и понятно - формат ведь проприетарный, и никто не хочет терять работу по причине собственной болтливости. Ситуация ещё более обострила внимание на то, что всем управляет тот, кто контролирует прибыль. То-есть дело даже не в том, что он хорошего сделал или сделает, а просто имеет доступ к совершению данного действия. И тогда мне пришла идея создания сервера-слоя. Книга у меня валялась несколько лет, как запустить Линукс сервер, но я не знал зачем он мне. И вот тут понял чем можно отвечать людям, пытающимся брать под контроль любую прибыль (и свою и чужую): если просто запустить сервер - он просто уйдёт в аут, потому как всё контролируют контролирующие прибыль. И тут нужно нечто более умное и гибкое. Лучшая ассоциация всплывает из сериала чужой - планета земля, есть там такой умный паразит как глазок, но нам чужого не надо - нам защитить своё, создать слой, который- бы укреплял-дополнял существующую сеть и создавал некое пространство. Что будет в этом пространстве двустороння свзь с существующими порталами, система знаний формирующаяся с помощью AI и участников, жёсткая модерация и рспределение балов. И как-бы я это хотел реализовать? Если у Вас крепкие нервы - прошу под второй спойлер

Скрытый текст

Да, в современном веб-разработке и аналитике графы и графический анализ данных действительно набирают популярность и занимают значимое место. Это связано с растущей сложностью данных, необходимостью анализировать взаимосвязи между объектами и решать задачи, которые трудно эффективно реализовать с помощью традиционных реляционных баз данных. linkurious.com +2

Почему графы становятся востребованными

  1. Рост объёма взаимосвязанных данных. В современном цифровом мире данные всё чаще представляют собой сложные сети связей: социальные взаимодействия, транзакции, логистические цепочки, взаимодействия в онлайн-сервисах. Графы естественным образом моделируют такие структуры, где узлы — объекты, а рёбра — связи между ними. proglib.io +2

  2. Эффективность для анализа сложных отношений. Графовые базы данных оптимизированы для работы с отношениями между данными. В отличие от реляционных баз, где для извлечения связанных данных требуются сложные соединения, в графах запросы к связям выполняются быстрее и проще. Это особенно важно для задач, где критична скорость обработки запросов с учётом множества связей. 

  3. Применение в ключевых отраслях. Графы используются в:

    • Социальных сетях — для рекомендаций друзей, контента, анализа сообществ. proglib.io +1

    • E-commerce — персонализированные рекомендации товаров, оптимизация корзин покупок. 

    • Кибербезопасности и финтехе — обнаружение мошенничества, отмывания денег, компрометации учётных записей. sky.pro +2

    • Здравоохранении — анализ связей между заболеваниями, лекарствами, пациентами. 

    • Логистике и управлении цепочками поставок — оптимизация маршрутов, отслеживание грузов. 

    • IT и телекоммуникациях — управление сетевой инфраструктурой, прогнозирование сбоев. 

  4. Интеграция с ИИ и машинным обучением. Графы позволяют представлять знания в структурированной форме (графы знаний), что улучшает работу больших языковых моделей и других ИИ-систем. Это повышает точность предсказаний и анализа. Например, графы используются для обогащения данных в генеративных ИИ-приложениях. linkurious.com +1

  5. Облачные решения и масштабируемость. Развитие облачных платформ упрощает развёртывание и масштабирование графовых баз данных без необходимости в обширной локальной инфраструктуре. Это делает технологию доступной для широкого круга компаний. 

Графический анализ данных

Графический анализ включает методы обработки и визуализации графовых структур для выявления паттернов, центральности узлов, кластеров и аномалий. Ключевые аспекты:

  • Алгоритмы обхода графа (поиск в ширину, в глубину) для анализа связности и путей. 

  • Метрики центральности (степень вершины, междуness-центральность) для определения влиятельных узлов. 

  • Обнаружение сообществ и кластеров в графах. 

  • Визуализация для наглядного представления графов и результатов анализа. Существуют специализированные библиотеки (например, NetworkX, Graphviz) и инструменты для визуализации. 

Тенденции развития

  • Стандартизация. В 2024 году был выпущен стандартизированный язык запросов для графов — GQL (Graph Query Language Standard). 

  • Гибридные решения. Интеграция графовых баз с другими типами хранилищ данных (например, с SQL-базами через PGQL — Property Graph Query Language). 

  • Графовые нейронные сети (GNN). Использование нейросетей для анализа графов, что открывает новые возможности в машинном обучении. 

Ограничения и вызовы

Несмотря на рост популярности, графовые технологии не лишены проблем:

  • Сложность внедрения. Требуют глубоких знаний теории графов и специфических инструментов.

  • Высокие требования к ресурсам для обработки очень больших графов.

  • Необходимость адаптации существующих систем. Переход с реляционных баз данных может быть непростым.

  • Безопасность данных. В регулируемых отраслях (финансы, здравоохранение) компании часто предпочитают локальные решения из-за требований к конфиденциальности. 

Таким образом, графы и графический анализ данных действительно занимают всё более значимое место в современном вебе, особенно в сферах, где критична работа со сложными взаимосвязями. Однако их применение требует взвешенного подхода, учёта специфики задач и ресурсов компании.

.

Так же давненько у меня валялся джетсон нано, на четыре гига, и я быстренько собрал на нём нужную версию Lazarus, установил на него BGRABitmap, и решил рендерить анализ и завести на нём стаю AI ассистентов разного рода, но ведущим будет зрячий, так как у меня альтернатива свёрточным нейросетям . И в общем джетсон будет работать в двух режимах, помимо остальных, рендер и обработка изображений. Ну и в общем, когда продумал тонкости связей с глобальной сетью, и понял актуальность задачи - переключился с очередного аддона на сервер-слой. На джетсоне запускал. Сейчас в разработке, но есть результаты - форумный движок собственной архитектуры.

Не стану томить больше текстами, просто вставлю описание с вики своего репозитория. Но сначала опишу то, чего там нет.

Планируемая визуализация

Планируется нечто вроде космоса 2D или 2.5D на базе BGRABitmap и сэмплов подготовленных там-же. Визуализация будет заточена под обработку нейросетью. Кстати после публикации в блоге на киберфорум сразу вышел режим космических боёв, но я готовил не для битв - это будет система знаний, с подробной хронологией, системой баллов и их оборотов между участниками. Нет - денег я не изобретаю, ведь деньги - не главное, тут мысль парит выше - к сокровенному. Обычный вид, привычный для форумов, тоже будет доступен.

Обработка

во время простоев на сервере будут оживать боты и выполнять свою работу, от наведения порядка до распределения рейтинга сервера-слоя между участниками. Я считаю, что рейтинг сервера - по сути баллы участников, их работа так же непроста и требует внимания, для чего и будут служить все эти боты. Сообщения будут сливаться, обрастать связями, баллы накапливаться и распределяться. AI очень понравилась формулировка "живая система знаний" - это он её придумал, но там всё намного банальнее чем видится искусственному, но акутально. Всё это будет очень сложная механика.

К сути

Можете прочитать с вики. Кому не интересно - не ныряйте под спойлер. Параллельность и связка с глобальной сетью.

Скрытый текст

Так как оговариваемый сервер работает в режиме слоя сети, то его головные узлы в качестве предка могут ссылаться на множество источников, в том числе и внешние. Чтобы создать внешний источник, нужно иметь возможность оставления там сообщения, которое будет иметь собственный пермалинк. В этом сообщении пользователь должен оставить ссылку на создаваемый им головной узел на сервере слое, где при создании должен добавить источник, в качестве которого выступает этот пермалинк. И так же он должен оставить оценку к публикации, комментарием к которой является этот внешний источник. В сообщении источника пользователь должен оставить ссылку на черновик на сервере-слое, наличие которой проверит бот, и если в источнике по пермалинку есть ссылка на черновик, то внешний источник будет добавлен к головному узлу, а черновик станет доступным из сети чистовиком. Это обеспечит связку слоя и глобальной сети и перевозложит проблему дос атак на глобальную сеть, откуда они и приходят. Если же создаётся внутренний источник, то он создатся по этим же правилам, где оставляется комментарий к аргументу или сообщению другого пользователя, этим комментарием даётся оценка родителю (предшевственнику) и так-же в этом сообщении указывается ссылка на черновик, который станет чистовиком после проверки ботом выполнения всех условий. Под внешними источниками подразумевается вся глобальная сеть интернета, где конкретный пользователь может оставить якорь-ссылку на сервер-слой. Обязательно проверяется, при посещении нашего сервера-слоя незарегестрированным пользователем на сервере-слое, чтобы пользователь пришёл к сообщению по внешней ссылке именно с той ссылки, которая указана внутри в качестве внешнего источника, например https://3dtoday.ru/blogs/bigdown/petpull-ili-kak-ya-ego-nazyvayu-petbull#comment-1098610 (адрес абстрактный).

Сообщения на сервере-слое делятся на головные и рядовые сообщения. Головные сообщения занимают две ячейки таблицы сообщений, а рядовые - одну. Ячейка таблицы сообщений обязательно имеет поле хронологии и поле сообщения. Поле хронологии формируется сервером и читается парсером.

В поле хронологии (в текстовой строке), рядовых сообщений указывается идентификатор рядового сообщения, предыдущее сообщение в линии сообщений (предыдущий последовательный комментарий в линейной цепи комментариев к сообщению), дата создания самого сообщения, и так -же хвост, сообщение которое стало заключающим к линейной цепи комментариев к текущему сообщению (не к предку или предыдущему).

Связи и ветвления в поле хронологии

Это система динамического перехвата управления хвостом. Узел всегда «помнит» только своего самого свежего потомка. Старые ответы не исчезают, а выстраиваются в очередь: каждый новый ответ на тот же узел встает в конец цепи, делая предыдущий ответ своим «предшественником».

Логика «Эстафеты»:

  1. Первый ответ: А -> Б. (В А записан хвост Б, в Б предшественник А).

  2. Второй ответ на А (узел С): Цепь: А -> Б -> С. (В А теперь хвост С, а в С предшественник Б).

  3. Ответ на Б (узел Д): Б -> Д. (В Б теперь хвост Д, а в Д предшественник Б — но это уже начало боковой ветки, так как Б сам является частью цепи А-Б-С).

  4. Второй ответ на Б (узел Е): Цепь: Б -> Д -> Е. (В Б теперь хвост Е, а в Е предшественник Д).

Что это дает при чтении:

Мы идем от последнего хвоста к началу.

  • Если мы тянем за С, мы получаем магистраль: С -> Б -> А.

  • Когда мы проходим через Б, мы видим, что у него есть свой актуальный хвост Е.

  • Мы тянем за Е и получаем ветку: Е -> Д -> Б.

Итог: Мы получаем самоорганизующуюся структуру, где самый свежий ответ всегда содержится в родителе, а старые ответы вытягиваются от новых к старым до самого родителя включительно. План на завтра: Эта логика «перехвата хвоста» — :

  1. Искать текущий хвост родителя.

  2. Делать его предшественником нового узла.

  3. Назначать новый узел новым хвостом родителя.

Уровни хвостов ‐ извлечение веток.

Тут уже то, что отлажено и протестировано в коде.

Извлечение происходит от корневого узла, стрлками обозначены шаги. Следование следующее 1-5-4 , на ячейке 4 мы смотрим, является ли в списке уровней хвостов узел с ID 4, если не является, то мы добавляем его последним в LIFO и следуем по указателю хвоста, а если является, то мы перед переходом к предшественнику удаляем его. Так повторяется на всём пути до корневого узла 1. Таким образом путь получается 1-5-4 с добавлением в список хвостов-7 с добавлением в список хвостов-10-9 с добавлением в список хвостов-13-12-11-9 с удалением из списка - 8 - 7 с удалением из списка - 4 с удалением из списка - 3 - 2 с добавлением в список хвостов - 15 - 14 - 2 с удалением из списка - 1

Таким образом, мы имея всего один список, динамически расширяющийся и уменьшающийся, можем обработать ветвления любых уровней вложенности, одно за другим. Список обрабатывается по принципу "последним пришёл - первым вышел".

По ссылке собственно проект https://github.com/Andrei-Y/FPC_Lazarus_Server .

Код протестирован.

Суть теста

Левая кнопка - создание корневого узла. В TEdit мы вводим узел на который отвечаем, вторая средняя кнока - ответ на узел который указан в TEdit. Правая кнопка - извлечение веток.

Пройденный тест

Создал корень и ответил на узел 1 три раза, потом один раз на узел 2 и один раз на узел 5, лог ответов и извлечения, в первой половине приземляем сообщения

:

Скрытый текст

MemoLog

21:42:02 Запуск сервера…

21:42:02 ОШИБКА СТАРТА: Binding of socket failed: 8080

21:42:02 Сервер запущен на порту 8080.

21:42:02 Открой в браузере: http://localhost:8080

21:42:05 — СОЗДАНИЕ КОРНЯ — 21:42:05 Узел №1 создан. Хроно: 0.0.0.

21:42:13 Отправляю воркеру команду приземлиться к ID: 1

21:42:13 ВОРКЕР: Приземлил ID 2. У родителя 1 Хроно теперь = “0.0.2.”

21:42:14 Отправляю воркеру команду приземлиться к ID: 1

21:42:14 ВОРКЕР: Приземлил ID 3. У родителя 1 Хроно теперь = “0.0.3.”

21:42:15 Отправляю воркеру команду приземлиться к ID: 1

21:42:15 ВОРКЕР: Приземлил ID 4. У родителя 1 Хроно теперь = “0.0.4.”

21:42:19 Отправляю воркеру команду приземлиться к ID: 2

21:42:19 ВОРКЕР: Приземлил ID 5. У родителя 2 Хроно теперь = “0.1.5.”

21:42:25 Отправляю воркеру команду приземлиться к ID: 5

21:42:25 ВОРКЕР: Приземлил ID 6. У родителя 5 Хроно теперь = “0.2.6.”

21:42:27 — СТАРТ ФОРМИРОВАНИЯ СТРУКТУРЫ —

21:42:27 >>> НЫРОК В ВЕТКУ (из узла 1 в хвост 4)

21:42:27 ВЫДЕРНУТ УЗЕЛ: 4

21:42:27 ВЫДЕРНУТ УЗЕЛ: 3

21:42:27 >>> НЫРОК В ВЕТКУ (из узла 2 в хвост 5)

21:42:27 >>> НЫРОК В ВЕТКУ (из узла 5 в хвост 6)

21:42:27 ВЫДЕРНУТ УЗЕЛ: 6

21:42:27 ВЫДЕРНУТ УЗЕЛ: 5

21:42:27 <<< ВСПЛЫТИЕ ИЗ ВЕТКИ (возврат в узел 5)

21:42:27 ВЫДЕРНУТ УЗЕЛ: 2

21:42:27 <<< ВСПЛЫТИЕ ИЗ ВЕТКИ (возврат в узел 2)

21:42:27 ВЫДЕРНУТ УЗЕЛ: 1

21:42:27 <<< ВСПЛЫТИЕ ИЗ ВЕТКИ (возврат в узел 1)

21:42:27 ВЫДЕРНУТ УЗЕЛ (КОРЕНЬ): 1 21:42:27 — СТРУКТУРА ЗАВЕРШЕНА —

во второй ныряет и всплывает

.

Сравнение с помощью AI ассистента

Скрытый текст

Извлечение ячеек в системе «Эстафета Хвоста»: отличие от стандартных методов

Суть метода «Эстафета Хвоста»

Алгоритм предназначен для обхода древовидных структур обсуждений с приоритетом свежих данных. Его ключевые особенности:

  • Динамический список хвостов (LIFO‑стек) — отслеживает пройденные хвосты для корректного возврата.

  • Указатели:

    • Tail (T) — ссылка на самый свежий ответ у родителя;

    • Before (B) — ссылка на предшествующий узел в цепочке.

  • Итеративный обход — без рекурсии, с использованием стека вместо вызовов функций.

  • Приоритет глубины — сначала обрабатываются самые свежие ветки.

Принцип работы

  1. Старт. Начинаем с корневого узла.

  2. Погружение. На каждом узле проверяем, есть ли его ID в списке хвостов:

    • Если нет — добавляем ID в стек и переходим по Tail.

    • Если есть — удаляем ID из стека и переходим по Before.

  3. Возврат. При достижении конца ветки идём назад по цепочке предшественников.

  4. Завершение. Алгоритм останавливается, когда возвращаемся в корень и стек пуст.

Пример обхода (структура: корень → 2, 3, 4; 2 → 5; 5 → 6):

  1. Корень → 4 (добавляем 4 в стек).

  2. 4 → 3 (добавляем 3 в стек).

  3. 3 → 2 (добавляем 2 в стек).

  4. 2 → 5 (добавляем 5 в стек).

  5. 5 → 6 (добавляем 6 в стек).

  6. 6 → 5 (удаляем 6 из стека).

  7. 5 → 2 (удаляем 5 из стека).

  8. 2 → Корень (удаляем 2 из стека).

  9. Завершение.


Сравнение с традиционными методами

Параметр

«Эстафета Хвоста»

Классическое дерево (parent_id)

Материализованный путь

Вложенные множества

Структура данных

2 указателя (TailBefore) + стек

1 поле (parent_id)

Строка пути (например, 1.2.5)

2 поля (leftright)

Алгоритм обхода

Итеративный с динамическим стеком

Рекурсивный или итеративный с сортировкой

Поиск по префиксу

Диапазонный запрос

Сложность чтения ветки

O(n)

O(nlogn) (сортировка по дате)

O(n)

O(n)

Добавление узла

O(1) (обновление Tail)

O(1)

O(n) (обновление путей)

O(n) (перестройка индексов)

Потребление памяти

O(h) (h — глубина)

O(1)

Высокое (хранение путей)

Среднее

Актуальность данных

Высокая (приоритет Tail)

Средняя (требуется сортировка)

Средняя

Средняя

Подходит для edge‑устройств

Да (низкое потребление памяти)

Да

Нет (высокая нагрузка)

Нет (сложная логика)

Устойчивость к изменениям

Средняя (нужна блокировка)

Средняя

Низкая

Низкая


Ключевые отличия по принципу действия

  1. Фокус на актуальность

    • «Эстафета»: сначала обрабатываются свежие ветки (Tail), что критично для форумов и чатов.

    • Стандартные методы: обычно обходят узлы в порядке добавления или по фиксированному пути, без приоритета свежих данных.

  2. Отсутствие рекурсии

    • «Эстафета»: использует итеративный подход с динамическим стеком, что экономит память и подходит для слабых устройств (Jetson Nano).

    • Классическое дерево: часто требует рекурсии или сортировки, что увеличивает нагрузку.

  3. Динамический стек вместо статических индексов

    • «Эстафета»: стек хвостов формируется на лету, адаптируясь к структуре данных.

    • Вложенные множества: требуют пересчёта индексов при изменениях, что дорого.

  4. Минимальные изменения при добавлении узла

    • «Эстафета»: обновление Tail родителя — одна операция.

    • Материализованный путь: обновление путей всех потомков — O(n).

  5. Гибкость для динамических структур

    • «Эстафета»: легко обрабатывает вложенные ветки любой глубины.

    • Стандартные методы: могут требовать перестройки индексов или кэширования.


Преимущества для edge‑вычислений

  • Низкое потребление RAM. Стек хвостов растёт линейно с глубиной вложенности (O(h)), а не с числом узлов.

  • Простота добавления. Операции вставки и обновления минимальны (O(1)).

  • Предсказуемая сложность. Линейный обход (O(n)) без рекурсии.

  • Устойчивость. Динамический стек предотвращает пропуски узлов и зацикливания.

Ограничения

  • Race conditions. При параллельной записи нужны транзакции или блокировки.

  • Циклические ссылки. Требуются проверки на циклы.

  • Глубокие ветки. При большой глубине (>10000 узлов) возможны замедления.


Вывод

Метод «Эстафета Хвоста» — это специализированное решение для динамических обсуждений с акцентом на:

  • актуальность данных (приоритет свежих веток);

  • эффективность для edge‑устройств;

  • гибкость структуры (вложенные ветки любой глубины).

Он превосходит стандартные методы в сценариях, где:

  • важна скорость чтения свежих данных;

  • ресурсы ограничены (Jetson Nano, IoT);

  • структура часто меняется.

Для статических данных или редких изменений классические подходы (материализованный путь, вложенные множества) могут быть эффективнее, но для динамических систем «Эстафета» предлагает оптимальный баланс производительности и простоты.

На этом пока всё. Прдолжаю работать над проектами (в личное время разумеется, но я от этого в уныние не прихожу, даже напротив - это как щит).

Детали мне видятся достаточно точно, и последствия шагов, достигаемый результат. Тут наобум нет ничего - всё это процесс длительного формирования цепи шагов, ожидания решений, выстраивание стратегий. Я не рекламирую себя, так как это вообще не моя специальность, это просто часть моей жизни, которую разменивать вообще не охота.

Надеюсь на адекватные ответы, без указаний на то что делать мне, если кому-то (или даже мне) не хватает на вещества. Это творческий процесс и менеджменту он не поддаётся. Спасибо за внимание, будет интересна информация по аналогичным техническим (IT) решениям и сравнениям.

Комментарии (0)