
В этом материале я расскажу о проекте Universo Platformo, задача которого — охватить весь мир, создать функционал Киберплана для того, чтобы в рамках формата «Общественный КиберГосПлан» объединять цели, планы, задачи и ресурсы отдельных людей и организаций, создать всемирную систему планирования, управления производствами, координировать исполнение и управлять роботизированными процессами. Важнейшая цель всей работы — это всестороннее и максимальное развитие каждого человека, создание условий, чтобы человечество сохранило способность самостоятельно управлять своей жизнью и развитием.
Храбрым разработчикам «ВС: Бухгалтерия», «Plazma ERP+CRM», «Ананас» и других «адинэсок» посвящается.
НАСТОЯЩИЙ МАТЕРИАЛ (ИНФОРМАЦИЯ) ПРОИЗВЕДЁН И (ИЛИ) РАСПРОСТРАНЁН НЕИСПРАВИМЫМ ФАНТАЗЁРОМ, ГЕНЕРАЛЬНЫМ РАЗНОРАБОЧИМ ВЛАДИМИРОМ ЛЕВАДНЫМ, ЛИБО КАСАЕТСЯ ДЕЯТЕЛЬНОСТИ СУМАСШЕДШЕГО МЕЧТАТЕЛЯ, ГЕНЕРАЛЬНОГО РАЗНОРАБОЧЕГО ВЛАДИМИРА ЛЕВАДНОГО.
Цели
Предупреждающую плашку все же внимательно прочитали? Поэтому без лишних прелюдий к сути. У группы «неисправимых фантазёров» и «сумасшедших мечтателей», называющих себя Международное сообщество Текнокомо, есть мнение, что нужно реализовать так называемый «Общественный КиберГосПлан» (он же Universo Kiberplano, он же просто Киберплан), чтобы создать среду планирования и исполнения, которая связывает планы, задачи, ресурсы, людей, организации, программных агентов и роботов в одной координируемой системе.
И вот это вот всё должно расти не от пожелания самого главного чиновника с лучшими помыслами о народе, не от бескрайних федеральных бюджетов, а от людей, образующих то самое общество, потому что только так возможно создание именно того, что на самом деле будет отражать реальные потребности трудящихся людей (при условии обязательного образования в этой сфере и множества других факторов), а не «башни Кремля» или «массажные кабинеты Москва-Сити».
Будет ли это финансироваться на каком-то последующем этапе из государственного бюджета, или, напротив, на законодательном уровне (на уровне Конституции?) это должно быть зафиксировано как право и почётная обязанность каждого гражданина — это вопрос дискуссионный, я склоняюсь ко второму, к почётной обязанности, чтобы не терять даже мельчайших связей с людьми.
Для начала нужно делать то, что необходимо отдельным людям и предприятиям размерами сильно меньше, чем градообразующие, поэтому на первых шагах система должна объединить ERP-подход к планированию, CMS-подход к работе со знаниями и механизмы оркестрации агентов для сложной распределённой деятельности. При помощи этого формировать различные низовые объединения, от объединения 1С-ников и «настоящих программистов в отличие от 1С-ников» до любителей настольных игр, от ресурсных центров до советов трудящихся. Дальше масштабировать, ускорять, перегонять, перевыполнять... ломать, чинить, давать по башке перегоняторам и перевыполняторам, которые всё сломали, снова ускорять и перевыполнять, но теперь более осторожно.
В конечном итоге вместе создать то самое светлое будущее [тут могло бы быть длинное описание про красивые здания, роботов-уборщиков, улыбающихся людей и всё такое, но не будет]. Важнейшая часть этого светлого будущего, чтобы оно не превратилось в технопанк в любом его подвиде. Люди должны оставаться людьми! Здоровыми, всесторонне развитыми, вдохновлёнными на великие свершения.
Движению к бессмертию через развитие медицинских технологий, улучшение экологии и т.д. — да. Двум головам, коллективному сознанию и т.д. — нет. Роботам в промышленности / строительстве, сервисным медицинским роботам и т.д. — да. Роботам в управлении / понукании людьми, воспитании детей и т.д. — нет.
Роботы во всех их реализациях, как программные, так и обладающие физическими компонентами (телами) должны быть ограничены в возможностях. Никакого «по-настоящему думающего ИИ», всегда и везде решения принимают люди. Мужчины и женщины, без промежуточных состояний, без межполовой миграции, без «женитьбы на роботе, потому что оно не робот, а человек больше, чем все вы, мерзкие робофобы», без порабощения и окончательного уничтожения людей.
Universo Platformo станет всеобъемлющим инструментом познания мира и управления миром для каждого человека, чтобы не случилось того самого «восстания машин» в любой форме, даже без искусственного интеллекта.
Когда технологии становятся непонятными большинству людей и плохо контролируются, а потому накапливают в себе архитектурные дефекты, программные ошибки и всякий другой мусор — это уже можно считать восстанием машин, потому что это с большой долей вероятности может привести к гибели человечества, в данном случае не из-за воли искусственного интеллекта, а из-за отсутствия достаточного интеллекта в контроле за развитием и функционированием.
Платформа
Сейчас эта штука, которая всё это хорошее нам даст и от всего этого плохого нас спасёт (и тебя спасёт, и тебя спасёт, и меня спасёт), выглядит как выше на картинке и как ниже на картинке. Называется, как вы уже поняли, Universo Platformo, читается не «Юниверсо», а именно «Универсо», потому что это... кратко говоря, эсперанто, но на самом деле создаваемый нами на его основе Универсо лингво.

В версии 0.55.0 Alpha сильно похоже, что кто-то хотел поставить 1С:Предприятие 8.х, а получилось как будто хотели попробовать настоящий французский коньяк, поэтому поехали на окраину Омска, в гаражах купили привезённый из Казахстана через лесостепь «стопудово настоящий, а наклейка кверху ногами, потому что партия лимитированная» Hennessy XO.
Эта реализация Universo Platformo называется Universo Platformo React, основана на React / Express.js / Supabase. Но также готовятся реализации и на других технологических стеках, как более производительных, так и более экзотических. Увидеть можно в репозиториях:
В GitHub (оригинал) https://github.com/teknokomo/universo-platformo-react
В GitVerse (клон) https://gitverse.ru/teknokomo/universo-platformo-react
Universo Platformo разрабатывается на множестве технологических стеков. Первичная цель не в том, чтобы везде всё повторять построчно, хотя во многом, конечно, мы стремимся к единообразию функционала и реализации, при этом исходя из лучших паттернов для каждого технологического стека.
Для начала цель — сохранить общий понятийный слой: доменные определения, семантику планирования, правила контроля доступа, миграционную логику, структуры публикации и переносимые описания приложений. Поэтому приложения, создаваемые внутри Universo Platformo, должны уметь переходить между стеками через контролируемую адаптацию, а не через полную перепись с нуля.
В конечном итоге должен быть создан для начала общепланетарный, а потом и... чего уж мелочиться... скажем, общевселеннский абстрактный слой данных. Систематизация данных через создание конфигураций «в 1С-стиле», которая реализуется на данный момент — это тоже только одна из реализаций, нацеленная на то, чтобы дать «среднестатистическому городскому автоматизатору» и пользователям привычные ориентиры, чтобы не бить сразу по голове когнитивной кувалдой «новой реальности». Но, конечно, будут и другие «стили» работы с данными, которые будут выражены и в другой логике, и других пользовательских интерфейсах. Все цветы должны расти, пока их не затопчет кирзовый сапог реальности.
Сейчас React-реализация является наиболее полной эталонной реализацией, развивается каждый день. Другие реализации могут для начала не повторять весь функционал этой реализации, а специализироваться на игровых механиках, средах моделирования, робототехнических рантаймах или устройственно-специфичных интерфейсах, при этом следуя тому же направлению платформы.
Universo Platformo формируется как ERP-класс платформа с возможностями CMS для проектирования, эксплуатации и развития организаций, цифровых сервисов, операционных процессов, пространств знаний и в дальнейшем роботизированных производственных контуров.
В терминах рынка программного обеспечения она относится к тому же широкому классу, что и платформы вроде 1C:Предприятие, SAP (да, я 1C:Предприятие и SAP написал в одной фразе через запятую, как будто это одно и тоже, вот такой я отмороженный) и других корпоративных систем, но при этом стремится оставаться открытой, модульной и переносимой между технологическими стеками.
Также на основе Universo Platformo будут создаваться различные специальные крупномасштабные виртуальные миры (метавселенные), такие как Universo MMOOMM, в которых в различных параллельных мирах можно использовать разные экономические системы, создавать виртуальные организации и производства, целые виртуальные города как цифровые двойники, а потом переносить эти наработки в реальный мир.
Платформа и её содержимое разрабатывается по разным вариантам Омской Открытой Лицензии, о ней информация ниже.
История
Перед тем как перейти к описанию архитектуры, нужно сделать краткий исторический экскурс, чтобы понять, почему Universo Platformo именно такая, какая есть сейчас.
1. Предположительно, около 13,7–13,8 миллиардов лет назад, согласно теории Большого взрыва, вся материя, энергия, пространство и время существовали в виде чрезвычайно плотного и горячего состояния, потом произошёл стремительный процесс расширения — так появилась наша Вселенная, в том числе вещество, на основе которого потом [пропускаю небольшой отрезок времени с медленными историями, как турецкие сериалы, о том, как первые звёзды появились, умерли, создали более сложные элементы и так далее] были созданы вы, ваш стол, какахи вашего кота, которые нужно пойти убрать, а то кот кричит, ему неприятно пахнет, и всё остальное.
1.5. Здесь могло быть, но не будет много очень интересных пунктов о том, как мы в разных коллективах, в разных составах мечтали о «Новом Госплане», делали его на PHP-Nuke, Mambo, который потом стал Joomla, и даже... на не ломанном, а на честное слово лицензионном 1С:Предприятии 7.7, что для Омска того времени такая же фантастика, как на улице увидеть динозавра. Ну и спросить у него, стоит ли покупать на адинэску лицензию, а он посмотрит на тебя как на дебила. Потому что динозавр жизнь пожил и знает, где скачать бесплатную лицензию.
Закончился этот этап около 2012 года желанием предложить наши идеи разработчикам ВС:Бухгалтерии, чтобы они не померли в борьбе с другой компанией с похожим названием продукта, но меня тогда как раз выбрали Генеральным секретарём Земного Союза, и не до этого было.
Нужно было международные удостоверения личности придумывать, дизайн флага разрабатывать, доносить до населения всей планеты, что они теперь живут в Земном Союзе, с главным центром в Омске, на улице Чапаева, рядом с бассейном «Ермак» (да, это тот знаменитый бассейн, который назван в честь человека, который утонул, на улице, названной в честь человека, который утонул), много всякой текучки типа разработки системы телепортации. В итоге разработки были (не по телепортации), они могли иметь развитие, но мы не понимали, что с этим делать дальше. У нас не было Текнокомо, желания создать новую эру.

2. И вот в конце 2015 — начале 2016 года начало свой космический разгон Международное сообщество Текнокомо. Первым делом на WordPress был создан первый вариант Умной социальной сети Текнокомо. Это было сделано показательно, как пример, что если есть правильные методологии, правильные цели и достаточная активность, то можно использовать любые более или менее подходящие технологии. Об этом проекте в начале 2017 года рассказали на Сербском национальном телевидении Воеводины.
3. Потом после 2017 года набежало много людей, и сработали все известные вам законы и эффекты, ухудшающие работу, когнитивные искажения в принятии решений и т.д. Всё то, почему вот так много хороших и умных людей, но когда эти люди пытаются объединиться чтобы всем показать "как нужно правильно делать", всё это превращается обычно в тухлые собрания и обсуждения несправедливости бытия.
Тут тебе и Закон Брукса, и Амплификация, и Эффект Рингельмана, полный комплект. Приходили по-настоящему уникальные специалисты, делали то, что им не давали делать на «их долбаной работе». Я настолько сложных разработок не видел даже за большие деньги, когда работал в крупнейшей в России транспортно-логистической компании.
Городили зоопарк с уникальными интеграциями, каскады интеграционных шин. Красота, автоматизация на уровне производительности, хоть учитывать с какой силой все доярки и доильные аппараты мира надавливают на соски коровам, и формировать мгновенный отчёт, который обновляется в онлайне. Не спрашивайте, зачем измерять эти показатели, точно пригодится в народном хозяйстве.
Только поддерживать это было невозможно. Ну, точнее, возможно, оно просто умирало на недельку, пока не удавалось собрать в одном месте 5 супер уникальных специалистов, и они чинили это за час, потому что там, по их словам, вообще всё просто было. Даже чинили за 10 минут, 50 минут обсуждали, что винда — говно, линукс — тоже говно, но лучше линукс, чем винда.
А потом ещё раз умирало, и ещё раз... В общем, стандартная история про уникальных специалистов и их уникальные разработки, которые сделали, но довести до стабильности уже не получается, потому что в этом могут разобраться только уникальные специалисты, а они заняты уже чем-то другим интересным и уникальным.
4. К 2019 году я добавил ещё немного диктатуры в наши ряды, выкинул груду всего лишнего, что съедало все силы и ресурсы на поддержку и никак не развивалось, вдохновенно посмотрел в сторону горизонта и определил, что нам нужно создавать не просто какие-то веб-интерфейсы, которые однажды вырастят из себя «виртуальные миры с игровыми механиками и возможностью там создавать прототипы реального мира», а в первую очередь это и делать.
Поэтому начинаем делать RVM Universo, ныне именуемый Universo MMOOMM. Там создаём параллельные миры с социалистической экономикой и капиталистической экономикой, делаем это всё в космосе, типа EVE Online, потом постепенно переходим на планеты.
Естественно, делаем этот открытый мир на Godot Engine, а не на каком-нибудь Unreal Engine и Unity, потому что делать наш проект на довольно стабильных движках с хорошими мануалами и развитым сообществом — это слишком просто для нас, нам нужен сыроватый опенсорс, на котором как сделать вот эту функцию, знает вон тот парень в Дискорде, когда он будет онлайн, ответит [Пользователь был онлайн 1 месяц назад].
5. Так пару лет мы пилили нашу MMO, получилось даже местами хорошо, только для нормального развития нужно было больше лора, а его нужно было придумывать, а на это времени не было, так как мы обсуждали, как социалистический параллельный мир Конкордо победит капиталистический мир Триумфо и все поймут, как хорош социалистический подход.
Но нужно было двигаться всё-таки дальше. Началась разработка нашей киновселенной Universo Grandaringo (Великое Кольцо), придумали для будущего Киберплана формат метапроектов, начиная с метапроекта «Омск — столица мира» и многое другое.
Старый Godot-проект я предложил объявить нашим наследием и положить в архивы, чтобы в будущем в музее наших доблестных страниц вспоминать славные годы. Но некоторые наши товарищи не умеют так, они хотят тащить даже то, что умерло, потому что в это вложено так много труда. Согласен, это обидно, только это тоже проявление когнитивных искажений мышления.
В реальном мире, когда новые технологии убежали вперёд, нужно искать правильный баланс между тем, чтобы не перепрыгивать постоянно на новые модные технологии, и тем чтобы если что-то из-за долгой разработки уже устарело и это дальше всё труднее поддерживать / развивать, нужно с этим уметь прощаться. Мало кому удаётся хорошо держать этот баланс.
6. С 2022 по 2025 год было время исследований, разработки концепций, которые позволят учитывать весь ранее полученный опыт. Мы стали тестировать разные появляющиеся «ИИ-приблуды» ещё до того, как это стало называться «ИИ-агентами», «ИИ-программистами» и так далее.
Тогда концептуально стало понятно, что если с имеющимися силами начать делать новую версию проекта, то из-за ограниченности ресурсов опять можем отстать от развития технологий, лучше время потратить на улучшение лора, набора больше контактов со специалистами различных профилей, которые в будущем Киберплане будут полезными. И постепенно тестировать все эти ИИ-штуковины, ждать, когда дойдут до минимальной кондиции.
7. Минимальной кондицией ИИ-помощника мы посчитали версию Cursor около 0.45 с использованием Claude Sonnet 3.5, а потом и Sonnet 3.7 в начале 2025 года. Тогда в целом начался современный этап разработки Universo Platformo. Начата была реализация Universo Platformo React как жёсткого форка проекта Flowise, который является платформой для визуального создания AI-агентов, кратко говоря, это графический интерфейс в виде узлов на холсте поверх LangChain, но не только.
Мы сосредоточились на функционале для школ, чтобы при помощи нейросетей, можно было на основе изначального образовательного текста автоматически создать учебные квизы, которые отображались на телефонах как дополненная реальность при помощи AR.js, а также на реализации нашей версии Universo MMOOMM в формате визуального программирования, типа Blueprint в Unreal Engine 5, с экспортом в PlayCanvas. Это показало свою востребованность, функционал для школ несколько раз тестировали большие коллективы, даже по 300 человек одновременно.
Было создано много функциональных пакетов для Киберплана, протестировали разные наши ранее разработанные концепции, в целом, этот Киберплан можно было бы пытаться начать массово использовать, но при всех этих экспериментах было создано много дублирующего и плохого кода, который трудно было бы поддерживать, тем более что использовалось много библиотек, в которых сейчас находят все больше уязвимостей, да и нужно было переходить к реализации главной идеи.

8. Мы сейчас здесь. Главная идея — это как раз создать в начале «1С-подобный» функционал с добавлением концепций из CMS и игровых движков, этот функционал поддерживать и на основе него двигаться во все стороны. Собрать к себе всех 1Сников, дружественно поглотить саму компанию 1С, все их связи и сеть франчайзи, направить на достижение общей пользы.
Поэтому сначала был выкорчеван сам Flowise (в будущем его можно будет подключить через новую систему интеграции), а потом и большая часть его технологического стека, последним даже TypeORM выкорчевали, создаём собственную систему работы с базой данных и миграций, чтобы не зависеть от ограниченности внешнего решения и его дыр... теперь создаём свои дыры. Постепенно глобальный рефакторинг заканчивается, после этого будем приглаживать код.
Архитектура
Есть архитектура самой платформы, она как бы состоит из приложений, которые ранее были разработаны внутри самой платформы, потом выгружены в файлы и составляют системные приложения платформы. Отдельные экземпляры платформы смогут между собой быть разным образом связаны, как федеративно, так и через различные P2P-механизмы, но это пока в зачаточном состоянии, об этом пока рано говорить, поговорим о внутренней архитектуре метахабов/приложений.
Представьте себе 1С:Предприятие 8.х, вы тыркаете по иконке, открывается окно со списком информационных баз, вы создаёте новую, потом заходите в режиме «Конфигуратор», там создаёте конфигурацию из объектов метаданных, сохраняете конфигурацию, обновляете информационную базу. После этого вы открываете эту информационную базу в режиме «1С:Предприятие» и управляете данными в управляемых формах, управляемых платформой.

Если кратко, в Universo Platformo эти самые конфигурации называются «Метахабы» и живут отдельной жизнью от конечных «пользовательских баз», которые называются «Приложения». При создании метахаба для него сразу создаётся его первая и основная ветка, а для ветки создаётся в базе данных отдельная схема с названием типа mhb_UUIDv7_b<n>.
Потом в метахабе создаётся конфигурация из объектов метаданных, делается публикация, в которой создаётся версия, которая в себе хранит снапшот. При создании публикации можно сразу создать приложение или приложение можно создать отдельно и связать с метахабом. В приложении создаётся коннектор, который связывается с выбранным доступным метахабом, создаётся схема приложения app_UUIDv7. На уровне приложения доступны дополнительные опции.
Сейчас главная опция в приложениях — это включение режима «Рабочих пространств», за счёт чего любая конфигурация, созданная в метахабе как однопользовательская, в приложении оборачивается в связь с рабочими пространствами и становится полноценным многопользовательским приложением с возможностью разделения данных. Также есть базовый функционал лимитов.
При создании схем метахаба (который на самом деле тоже приложение, только с функционалом метахаба) и схемы приложения создаются миграции данных, в целом по миграциям можно даже попробовать откатиться назад, но в текущей версии этого лучше не делать, работает нестабильно. Когда в метахабе обновляется конфигурация, то в публикации создаётся новая версия. В будущем можно будет делать несколько разных публикаций с разным функционалом, например, из разных веток метахаба. В приложении, в коннекторе, который соединяет его с метахабом, можно обновить схему данных приложения, создаётся новая миграция данных.
Данные в схеме приложения структурированы / названы таким образом, чтобы не нужно было совершать лишних действий по их изменению / переименованию, когда разработчик вносит правки в данные конфигурации метахаба. Сейчас схемы метахаба и приложения сохраняются все в одной Supabase / PostgreSQL базе, но позже они смогут находится в разных базах данных.

Зафиксируем ключевые отличия от архитектуры 1С: метахабы и приложения в целом живут отдельной жизнью. На основе одного метахаба можно создать много приложений, а позже можно будет сделать, что и одно приложение может быть связано с несколькими метахабами. Также будет общий каталог пакетов для метахабов, чтобы можно было переиспользовать логику метахабов и логику подключения различных внешних библиотек. Ну и конечно, создавать логику метахабов при помощи ИИ-помощников.
Ниже более подробнее всё это посмотрим с картинками, на примере создания Киберплана 0.1.0 Alpha. А сейчас вначале повторю упомянутые сущности:
Метахаб— проектно-метаданный контур, аналог слоя конфигурирования.Ветка метахаба— изолированная рабочая версия структуры, аналог отдельной линии разработки/варианта конфигурации.Публикация— зафиксированный выпускаемый снимок структуры и связанных данных.Версия публикации— конкретный релизный артефакт.Приложение— runtime-контур, который потребляет опубликованную структуру.Коннектор— связь приложения с публикацией метахаба, но в будущем и не только с метахабами.
И небольшой словарик-пояснение к сущностям внутри метахаба:
Хаб— задаёт смысловые разделы и иерархию, частично аналог подсистем в 1С.Каталог— задаёт сущность с таблицей и атрибутами, предзаданными элементами, в целом аналог справочников в 1С.Атрибут— задаёт поле, тип, обязательность, отображаемость, ссылки, TABLE-подполя, UI и валидацию, в целом аналог реквизита в 1С.Набор— задаёт набор постоянных сущностей, условно говоря, констант, но в будущем не только их, в 1С нет прямого аналога.Константа— задаёт именованную константу с типом и значением внутри набора.Перечисление— задаёт перечисление, аналог перечисления в 1С.Значение— задаёт элемент перечисления.Макет— задаёт макет интерфейса и раскладку виджетов.
В текущей версии пока нет «документов» — аналога документов в 1С, нет «страниц» — аналога страниц в CMS, нет «пространств» — аналога пространств в игровых движках, так же как и нет всяких «регистров», «процессов» и т. д. Но скоро будет, часть из перечисленного уже частично сделано, сейчас тестируется.
Про архитектуру кода, применяемые паттерны и т. д. пока не имеет смысла говорить, потому что после последних рефакторингов с выкидыванием внешних проектов, то, что ранее немного прилизали, сейчас удалили, и теперь снова по большей мере проект состоит из нейросетевого «одноразового» кода с дополнительными базовыми проверками на безопасность. Тут можно только добавить, что для пользовательских интерфейсов сейчас используются базовые Material UI шаблоны.
Текущая GitBook-документация может быть полезна, чтобы лучше узнать реализацию системы миграции, но естественно в альфа-версии это будет ещё сильно дорабатываться.
Использование
Ну давайте уже потыкаем это всё, в Universo Platformo React 0.55.0 Alpha создадим Universo Kiberplano 0.1.0 Alpha.
Но в начале я БОЛЬШИМИ БУКВАМИ предупреждаю вас, что это АЛЬФА-версия и поэтому использовать её для рабочих проектов, для реальных данных не просто не рекомендуется, а МАТЕРНО возбраняется. Когда будете читать этот пост, зайдите в релизы, если вы увидите, что там есть хотя бы бета-версия, то там уже можете рискнуть. На самом деле, версия UPR 0.55.0 в целом доведена до состояния, когда другие проекты такое состояние называют уже Бетой или даже Релизом. Но это так делают злые империалисты и их приспешники, мы так делать не будем.
1. В корне репозитория в GitHub или GitVerse можно найти Readme-файлы на английском и русском языках. Если пролистать их ниже моего официального «марсианского» портрета, то там будет информация по запуску проекта с нуля.

Особых больших требований нет, вам потребуется простая бытовая ЭВМ с установленными Node, PNPM и данные из Supabase. Позже снова будет docker-конфигурация для быстрого запуска через Docker. Старую пока удалили. В будущем проект сможет работать с разными СУБД, но сейчас работает только с Supabase (даже не чистым PostgreSQL). Можно использовать бесплатный тариф на их сайте или развернуть локально. Обратите внимание, что у Supabase среди её зон развёртывания сейчас нет России, поэтому, если вы хотите хранить у себя персональные данные граждан России, то вам нужно будет использовать локальную Supabase и сделать все остальные магические ритуалы с регистрацией в подвалах Роскомнадзора.
На основе packages/universo-core-backend/base/.env.example нужно создать .env-файл и в нём настроить то, что там указано, в основном данные Supabase и данные суперпользователя, который будет создан при первом запуске системы. Обязательно поменяйте данные по умолчанию, то есть почту stalin@kremlin.ru и пароль ChangeMe_PutiN-KgB!, на свою почту и пароль, а то эти подерутся в базе данных.
2. После запуска платформы, можно нажать на кнопку "В будущее" и авторизоваться используя данные суперпользователя. Вы как суперпользователь попадёте сразу в "Метапанель", которая в дальнейшем станет вашим личным центром управления Вселенной, а на данный момент тут несколько графиков. Сейчас по умолчанию активно два языка: Русский и Английский. Если вы не выбирали ранее, то будет показываться язык вашего браузера, если в браузере язык любой кроме русского, будет по умолчанию английский. В верхнем правом углу можете вручную переключить язык.
Если вы зайдёте обычным пользователем (или суперпользователем по ссылке /start), то снова попадёте на страницу с моим портретом. Это временное явление (или нет), потому что сейчас приложение со стартовым онбордингом, где нужно ответить на несколько вопросов, находится сразу в репозитории, но позже при запуске платформы будет выбор шаблонов или отдельных приложений. В зависимости от настроек в ENV-файле, ваш обычный пользователь, вначале имеющий роль «Зарегистрированный», закончив онбординг, или получит роль «Пользователь» и сможет пойти дальше, или будет ждать, пока другую роль ему дадут админы.
Результаты онбординга сохраняются в приложении Start, у которого в базе данных схема Start, в будущем будут доступны в том числе через админку, а пока мы берём их оттуда отдельным скриптом.

Метапанель и стартовый онбординг (скриншоты)





3. Раз уж заговорили про админку, то, прежде чем переходить к метахабам, давайте быстро заглянем в раздел «Администрирование». Там мы сразу попадаем на управление экземплярами платформы. Пока доступен только вот этот вот локальный экземпляр, который вы только что запустили.
Зайдя в экземпляр платформы, мы видим ещё одну панель с куцыми графиками, привыкайте, панели с куцыми графиками будут нас постоянно преследовать.
В левом внутреннем меню есть пункты «Роли», «Пользователи», «Языки» и «Настройки». Потом посмотрите, что там к чему, сейчас зайдём в «Настройки», сразу будет вкладка «Метахабы» и включим там для метахабов опцию «Включить локализованные кодовые имена (VLC)» и нажмём на кнопку «Сохранить изменения». Скоро вы увидите, зачем нужны локализованные кодовые имена.

Админка (скриншоты)

В данный момент поддерживается только один локальный экземпляр Universo Platformo. В будущих версиях Universo Platformo эти ограничения будут сняты.
Панель экземпляра
Глобальные роли
Языки, английский и русский создаются сразу 4. Перейдём в раздел «Метахабы», сверху справа есть кнопка «Создать», а рядом кнопка-иконка «Настройки», там суперпользователь может включить показ чужих метахабов. В дальнейшем, когда у разработчиков будет возможность сохранять метахабы в свои отдельные базы данных, а также с функционалом шифрования, то такие метахабы суперпользователи не смогут видеть. А также будет функционал, чтобы можно делать метахабы публичными, чтобы можно было сделать свою копию и самостоятельно его дорабатывать.
После нажатия на кнопку «Создать» открывается окно создания метахаба. Тут сразу нужно рассказать об отличии от 1С. Там, когда сущности задаётся «Наименование», то это именно системное наименование сущности, а как это увидят пользователи, задаётся в «Синониме». У нас же ситуация обратная. «Название» — это то, как это будут видеть пользователи, а системная сущность называется «Кодовое имя» (Codename). Кодовое имя формируется автоматически на основе названия, но его можно поменять вручную.
Поля названия и описания метахаба изначально являются многоязычными, а вот для кодового имени мы такой функционал включили ранее в настройках. Теперь, если в поле названия нажать на тег языка справа поля, то там в мини-меню можно выбрать «Добавить язык» и «English». Появляется вариант поля названия на английском языке, автоматически появляется также и второй вариант для кодового имени. Теперь, когда мы напишем название на русском и английском языках, то соответствующим образом автоматически сформируются кодовые имена. Но, повторюсь, их можно поменять, главное, чтобы они соответствовали требованиям, которые выставлены в настройках, в данном случае это «ПаскальКейс» и т. д.
В окне создания метахаба также есть вкладка «Хранение», в ней сейчас доступен только вариант «Создать схему в основной базе данных», и есть вкладка «Параметры», в ней можно выбрать, какие сущности автоматически создать при создании метахаба, пока ничего отключать не будем, пусть всё создаёт.
Если вернуться на основную вкладку, то там можно увидеть по центру выбор шаблона. Сейчас есть «Базовый» и «Базовый-демо», в следующих версиях платформы будет сделан более обширный каталог шаблонов. Мы для текущего метахаба оставляем базовый. Демо-вариант будет наполняться демо-данными, сейчас в нём создаётся в главном макете большое количество виджетов с демо-данными, для части которых, например для графиков, в метахабах ещё не реализован функционал.
Вообще сейчас у нас все функциональные части платформы архитектурно, как я уже говорил, это приложения, которые как бы были созданы в метахабе и выгружены в файловый формат, и сам функционал метахабов тоже как приложение. Но на самом деле сейчас функционал метахабов не позволяет пока повторить самого себя и опубликовать в приложение. Поэтому на текущий момент в коде реализован паттерн «вручную создать базовый снапшот (как если бы он был выгружен из метахаба) → на его основе сгенерировать файловые миграции для системных приложений → использовать их при первом запуске платформы».

Список метахабов и окно создания метахабов (скриншоты)



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

5. Ну вот мы с вами и добрались до создания конфигурации в метахабе. Внутри метахаба, как мы уже привыкли, мы оказываемся в очередном дашборде, в данном случае это «Метахабборд». Тут есть некоторое количество графиков, но не будем тут задерживаться. Слева меню метахаба. Пока не сильно богато и нет возможности включить меню в виде дерева, но это планируется. По пути в хабы заглянем по быстрому в «Ветки».
Что тут сказать, ветки — это ветки. То есть это полностью изолированный вариант конфигурации этого метахаба. Для каждой ветки в базе данных создаётся отдельная схема данных со своими отдельными таблицами. В текущей версии платформы можно создать новую ветку чистой или на основе другой ветки. Переноса данных, слияния и других функций взаимодействия между уже существующими ветками пока нет. То есть сейчас ветки после создания существуют до конца своего существования отдельно от других веток и грустят. При копировании ветки можно в опциях выбрать, какие сущности копировать или не копировать из исходной ветки.
В новых версиях платформы между ветками для начала можно будет перекопировать различные сущности, типа каталогов с атрибутами и так далее, потом постепенно приблизимся к более сложным вариантам слияния данных.

6. Заходим в «Хабы». Тут, как и в других разделах, мы видим, что уже есть «Основной» (Main) хаб, потому что при создании метахаба в параметрах мы не отключили создания всех этих сущностей по умолчанию. По названию понятно, что хабы в метахабе — это основные структурирующие элементы, и, повторюсь, это частичный аналог подсистем в 1С:Предприятии, но всё-таки частичный, по мере развития будет появляться всё больше отличий. Все основные сущности метахаба можно связать с хабами.
Если зайти внутрь хаба, то там есть вкладки для всех существующих сейчас видов объектов метаданных, в том числе и для дочерних хабов. Да, хабы могут иметь неограниченную вложенность, но без древовидного отображения нормально видно только родительско-дочернюю связь. Изнутри хаба можно создать любую сущность, которая будет с ним автоматически связана, можно эти сущности создать отдельно и при создании связать с хабом. Можно позже созданную сущность, которая изначально не была связана с хабом, связать с каким-то хабом.
Если нажать на вкладку «Настройки», то откроется окно редактирования основных данных текущего хаба. Это окно можно также открыть, не заходя в хаб, так же и не заходя в другие сущности, можно в общем списке сущностей открыть мини-меню и там выбрать «Редактировать».

7. Прежде чем пойти в каталоги, где мы начнём создавать функционал Киберплана, зайдём в настройки метахаба. Тут на вкладке «Основное» мы тоже активируем опцию «Включить локализованные кодовые имена (VLC)». VLC — так у нас называется этот предзаданный JSON-тип данных и это аббревиатура от «Version Language Content», а не название известного медиаплейера. Управление языками, как видно, уже работает, а управление версиями каждой сущности реализовано на уровне схемы хранения данных, частично на уровне бэкенда, но пока не реализовано на фронте.
В основных настройках есть и другие настройки, связанные с кодовыми именами, например, в стиле кодовых имён вместо «ПаскальКейс» можно выбрать «кебаб-кейс», можно разрешить смешивать в кодовых именах английский и русский алфавит и получать «ТакиеVeryЯдрёные» кодовые имена. Подобные настройки для кодовых имён снимают для разработчика вопрос, на каком языке создавать эти сущности, чем мучаются разработчики 1С. У нас можно сразу на нескольких языках.

Как видно на других вкладках, там есть одинаковые настройки, такие как «Разрешить копирование» и «Разрешить удаление», а есть специфические для каждой сущности. Например, для хабов это настройки вложенности, а для каталогов — какие типы атрибутов используются. Перейдём на вкладку «Каталоги» и в опции «Область уникальности кодового имени атрибута» вместо варианта по умолчанию «По уровню вложенности» выберем вариант «Глобально», не забудьте нажать на кнопку «Сохранить изменения».
Это настройка для атрибутов дочерних таблиц в каталоге. По умолчанию кодовые имена у основных атрибутов и атрибутов в дочерних таблицах могут совпадать. Но тогда, в случае если потребуется переместить атрибут между основной таблицей и дочерней таблицей или между несколькими дочерними таблицами, тогда у атрибута, если есть конфликт кодовых имен, будет заменено кодовое имя, а я не люблю такие ненужные замены, лучше сразу ввести ограничение, которое эту проблему предотвращает.
Если у вас разбегаются глаза от такого гигантского количества настроек, то можете использовать фильтр-поиск настроек, тогда на каждой вкладке будут показаны только настройки, подходящие под данные в фильтре.

Настройки метахаба (скриншоты)

Настройки хабов
Настройки наборов
Настройки перечислений
Так работает фильтр-поиск 8. Теперь мы готовы начать создавать основную логику для Universo Kiberplano версии 0.1.0 Alpha. Идём в «Каталоги», пока оставляем созданный по умолчанию «Основной» каталог и создаём новый. Нажимаем на кнопку «Создать», в открывшемся окне называем его «Ресурсы», пишем описание. На вкладке «Хабы» нажимаем на «Добавить» и связываем этот каталог с хабом «Основной». По «1С-овской» привычке мы могли бы создать хаб «Каталоги» и с ним связать этот каталог, но сейчас так делать не будем. Включаем опцию «Должен быть хаб», это заблокирует удаление выбранного хаба. Опция «Только один хаб» в данном случае не нужна. Нажимаем на «Создать».

У нас появился новый каталог, теперь мы видим две карточки каталогов. Но у нас есть возможность отобразить каталоги, как и многие другие сущности, ещё и как таблицу. Сверху справа есть две кнопки-иконки: «Карточками», которая сейчас активна, и «Списком», вот её и нажмём. В табличном отображении может быть более удобно работать с большим количеством сущностей, в том числе потому, что тут можно сразу увидеть больше основной информации о каталоге и можно сортировать каталоги по разным колонкам.

Заходим в каталог «Ресурсы», сейчас будем создавать атрибуты на вкладке «Атрибуты», на вкладке «Системные» находятся различные системные атрибуты, типа пометки на удаления и т. д., их можно пока только отключить / включить, их трогать не будем. Нажимаем на кнопку «Создать».
В окне создания атрибута в поле «Название» пишем... «Название», потому что это будет название ресурса. Желающие могут сразу дать название на английском языке. Тип данных оставляем «Строка», разворачиваем «Настройки типа» и там включаем «Версионируемый (VLC)» и «Локализуемый (VLC)», а также увеличиваем максимальную длину строки с 10 до 100 символов. Информационная плашка сообщает нам, какой тип поля это будет на самом деле в базе данных. Потому что пользовательский тип «Строка», в зависимости от вариантов настроек, в базе данных реализуется разными типами полей.
На вкладке «Представление» для строк пока нет особых настроек, там есть только общая «Атрибут представления», которая включена и заблокирована, так же как на основной вкладке включена и заблокирована опция «Обязательный», потому что это первый атрибут, он сразу должен отдуваться за всех, пока не найдётся другой атрибут, который мы назначим ответственным за всё это.
«Атрибут представления» — это значит, что когда в другом каталоге будут ссылаться на этот каталог, то данные там будут отображаться именно из этого атрибута. А «Обязательный» — значит, что он обязательный для заполнения.

После нажатия на кнопку «Создать» мы снова видим, что атрибут мгновенно создался, снова работает оптимистичное создание, только тут есть небольшая деталь, пока атрибут на самом деле не создался, у него слева маркер перетаскивания светло-серый и неактивный, а после создания становится активным.
Теперь добавим «Количество», тип данных выбираем «Число», в настройках включаем «Только положительные» и «Точность» ставим «3», значит, после запятой будет 3 разряда. Не будем пока делать этот атрибут обязательным, так как будем предполагать, что может быть ресурс, количество которого пока не определено, и нажимаем на «Создать».

9. Теперь давайте будем запускать в бой и другие виды объектов конфигурации. Пойдёмте в раздел «Перечисления». Создаём там перечисление с названием «Единицы измерения», пока ни к какому хабу это не будем относить. Заходим во внутрь перечисления и создаём там несколько значений, для начала: «Штуки», «Килограммы» и «Литры». Конечно, это пока сильно дубово для нормального учёта, но начнём с этого.

Заходим в «Наборы», заходим в уже существующий «Основной» набор. Там создаём новую константу. Как видно, у констант тоже есть типы данных по аналогии с атрибутами в каталогах с похожими настройками, но тут сейчас только четыре типа: строка, число, булево и дата. По аналогии с 1С, в UP константы — это объекты метаданных, предназначенные для хранения неизменяемых ИЛИ редко изменяемых данных. Да, тут есть это «ИЛИ». То есть эти данные не совсем неизменяемые, но в настройках можно будет включить опцию, чтобы они были неизменяемыми.
Тут можно задать какое-то название или даже указать версию конфигурации. Но мы здесь, чтобы создать строку с нашим девизом. Называем константу «Девиз», в настройках поля включаем «Версионируемый (VLC)» и «Локализуемый (VLC)», максимальную длину делаем 100 символов и переходим на вкладку «Значение».
В константах можно сразу задать их значение, тем более что по-другому это сделать пока никак нельзя. Нет настройки констант в приложениях, пока не реализован наш встроенный язык программирования, нет интеграционных механизмов для других языков программирования. Пишем значение «Все миры будут нашими!».

10. Возвращаемся в каталог «Ресурсы». Создаём атрибут с завораживающим и благозвучным названием «Ед. измер.», тип данных выбираем «Ссылка», в настройках типа выбираем тип целевой сущности «Перечисление» и ниже выбираем ранее созданное «Единицы измерения». Тут уже можно зайти на вкладку «Представление», потому что там есть что выбрать. Например, можно в «Вид отображения перечисления» можно вместо поля выбрать вариант «переключатель» или «надпись». В зависимости от выбора этих опций будут доступны другие настройки.
Вообще можно было бы и разрешить быть этому полю пустым, но я отключу «Может быть пустым» и ниже по умолчанию выберу вариант «Штуки». Нажимаем «Создать».

Создаём ещё один атрибут, называем его «Наш девиз», тип данных снова «Ссылка», в настройках выбираем тип целевой сущности «Набор», выбираем «Основной» и в нём константу «Девиз». Не будем прятать наш девиз куда-то далеко, забубеним его прямо в карточку ресурса.

11. Перейдём к самому сложному типу данных в атрибутах, к дочерним таблицам. Создаём новый атрибут, называем его «Вложенные ресурсы», тип данных выбираем «Таблица». В настройках типа можно выбрать минимальное и максимальное количество строк в этой дочерней таблице, когда она будет использоваться, ну то есть можно создать, чтобы у ресурса было не более 10 дочерних вложенных ресурсов, если их получается больше, то их нужно будет подробить на более мелкие. Можно ограничить, сколько будет атрибутов (колонок). На вкладке «Представление» можно отключить показ заголовка для этой дочерней таблицы. Но я пока оставлю всё по умолчанию, нажимаем «Создать».

Появилась строка атрибута-таблицы, но где же сама дочерняя таблица? Справа в колонке «Действия» появилась кнопка-иконка, показывающая вниз, если её нажать, то развернётся поле, где написано «Дочерних атрибутов пока нет», давайте это исправим, справа есть уменьшенная кнопка «Создать».
Окно создания дочернего атрибута такое же, как у обычного атрибута, за одним отличием, что сейчас в дочерней таблице нельзя создать ещё одну таблицу. Самих дочерних таблиц в каталоге можно создать сколько угодно, но у них пока один уровень вложенности. Архитектурных ограничений для любого количества вложенностей таблиц вообще-то нет, это просто текущая реализация пользовательского интерфейса. В будущем в настройках можно будет определять, какой уровень вложенности может быть у таблиц. Также архитектурно дочернюю таблицу можно привязать к разным каталогам, в будущем тоже будет настройка, разрешающая это делать.
Создадим дочерний атрибут с уже классическим названием «Название», и снизу сразу начинает ругаться автоматически созданное кодовое имя, потому что, как вы помните, мы специально включили в настройках, чтобы кодовые имена у атрибутов дочерних таблиц были не могли совпадать с основными атрибутами, чтобы кодовые имена были уникальны во всём каталоге. Меняем кодовое имя на классическое 1С-овское «ВложРесНазвание».
Тут хорошо бы сделать ссылку на самого себя, то есть сделать тип данных «Ссылка» на родительский каталог «Ресурсы», чтобы не плодить разные ресурсы. Но это ещё не дотестированно и не выгружено, поэтому в текущей версии этой возможности пока нет. Название у нас будет «Строка», включаем «Версионируемый (VLC)» и «Локализуемый (VLC)», делаем максимальную длину 100 символов, нажимаем на кнопку «Создать».

Получается, нам нужно в дочерней таблице создать ещё два дублирующих атрибута «Количество» и «Ед. измер.». Давайте применим функционал копирования атрибутов. У атрибута «Количество» в колонке «Действия» нажимаем на кнопку-иконки «Три точки», там в мини-меню выбираем вариант «Копировать». Открывается окно «Копирование атрибута», важное отличие от создания в том, что нельзя поменять тип данных. Убираем автоматическое подставленное «(копия)», меняем кодовое имя на «ВложРесКоличество», нажимаем на кнопку «Копировать».
Новый скопированный атрибут появился в главном списке атрибутов. Берём его слева за маркер и перетаскиваем в нужное место дочерней таблицы. После этого повторяем тот же фокус с копированием и перетаскиванием для атрибута «Ед. измер.».

Ещё атрибут «Наш девиз» перетаскиваем ниже таблицы и получаем для текущего шага законченный набор и порядок атрибутов. Когда строка таблицы раскрыта и последняя, под неё бывает сейчас сложно переместить атрибут, это будет исправлено, поэтому лучше свернуть табличную часть атрибута-таблицы, используя кнопку справа. Обратите внимание, что в отличие от 1С:Предприятие, дочерняя таблица в Universo Platformo — это не отдельная штуковина «Табличная часть», а полноправный участник основного списка атрибутов..

Ещё напоследок в каталоге заглянем на вкладку «Элементы» и создадим там предзаданный элемент. В окне создания пишем название «Лимонад», количество ставим «1.000», единицы измерения выбираем «литры». А во вложенных ресурсах пишем рецепт лимонада, который вам нравится, самый простой рецепт: чистая вода 0.700 литра, лимоны 2.000 штуки, сахар 0.200 килограмм. Таким образом мы использовали все ранее созданные варианты перечисления единиц измерения.
И, конечно же, господа педанты, занимающиеся автоматизацией пищевых производств, будут правы, когда скажут, что таким образом у нас будут проблемы с учётом ресурсов, потому что нельзя гарантированно получить 1 литр лимонада, если у нас вода измеряется в литрах, лимоны в штуках, а сахар в килограммах. Тут как минимум нужно все компоненты измерять в килограммах, и речь должна быть не про лимоны, а про «лимонную пасту» или «дольки лимона подготовленные», а ещё лучше, если у всех ресурсов будет возможность вести измерения по нескольким параметрам, и по литражу, и по весу, и так далее, также нужны формулы / параметры отходов, отбраковки и много всего ещё.
Конечно же, в Универсо Киберплано будут все эти возможности, обозначаемые буквами CWM, ERP, MES, WMS и т. д., но пока оставим так, как сделали, и я, человек, как и вы, занимавшийся в том числе автоматизацией пищевых производств, стиснув зубы, буду терпеть этот ужасный ужас.

12. Теперь начнём наше движение от метахабов к приложениям. Сначала зайдём в «Макеты», в «Основном» макете, в «Левой зоне» откроем на редактирование виджет «Меню: Основное». Видим, что там включена опция «Автоматически показывать все каталоги» — это значит, что в левом главном меню приложения будут отображаться все существующие каталоги, в том числе пока пустые, без атрибутов. Нам сейчас это не нужно, поэтому включаем опцию «Связать меню с хабом» и выбираем хаб «Основной», в который мы ранее подключили наш каталог «Ресурсы». Также снизу можно будет добавить и отдельные пункты меню, например, ссылку на документацию, но не в этот раз, нажимаем на «Сохранить» и идём дальше.

Пока мы идём дальше, кто-то может задать разумный вопрос: «Почему макеты настраиваются в метахабе, а не в приложении, ведь с учётом архитектуры разделения метахабы / приложения было бы логично макеты настраивать в приложениях?». Ответ простой: макеты можно будет настраивать как на уровне метахабов, чтобы задать сразу общую для всех настройку, так и в отдельных приложениях, чтобы можно было кастомизировать вид отдельных приложений, и даже на уровне отдельных пользователей приложений тоже будет определённый объём настроек для настройки макетов. Но сейчас это успели реализовать только в метахабах.
Также сейчас есть только один шаблон для макета под названием «Дашборд» (да, и тут нас преследует дашборд), но будет большой выбор шаблонов, стилей шаблонов, более сложные настройки отображения, в том числе чтобы разные части приложения показывать через разные шаблоны, и всё остальное, что есть в CMS, мы же, как вы уже поняли, собираем своего монстра Франкенштейна свою уникальную платформу, объединяя лучшие практики из технологических платформ, таких как 1С:Предприятие, систем управления контентом, игровых движков и не только.
13. За обсуждением макетостроения мы дошли до раздела «Публикации». Создадим новую «Публикацию». У публикации автоматически сформировалось название на основе названия метахаба + «API». Сейчас на вкладке «Доступ» есть только вариант «Полный доступ», а варианты с ограниченным доступом будут позже. На основной вкладке есть «Настройки версии» — это название и описание первой версии публикации, а также ветка метахаба, из которой будет создана эта версия. Назовём версию «0.1.0-alpha» и дадим понятное описание типа «Это самая первая версия Universo Kiberplano».
Ниже ещё есть опция «Создать приложение», если её включить, то автоматически будут создано приложение, в котором автоматически будет создан коннектор, связывающий это приложение с этим метахабом. А также есть опция «Создать схему приложения», при её включении на основе этого метахаба для созданного приложения ещё и будет создана первая миграция данных, для приложения будет создана схема в базе данных. Но мы для более лучшего изучения функционала сделаем это отдельно, тем более что в этой версии проекта у этого функционала есть некоторые баги.
Можем зайти внутрь созданной публикации, там есть вкладка «Версии», на которой показываются существующие версии, показывается активная версия, можно создать новую версию и переключать активную версию. А также есть вкладка «Приложения», на которой показывается список приложений, связанных с этим метахабом, можно новое приложение создать прямо тут и перейти в его панель управления или в само приложение.

Но мы с вами пойдём в раздел приложений на платформе, поэтому нажмём сверху в хлебных крошках на «Домик» и в главном меню перейдём в раздел «Приложения». Здесь всё устроена так же, как в списке метахабов, тот же формат отображения карточками / списком, такие же кнопки, в том числе суперпользователь видит кнопку-иконку «Настройки», где есть опция «Показывать элементы других пользователей».
Нажмём на «Создать», на основной вкладке можно назвать так же, как и метахаб, но я специально метахаб назвал более коротким названием, чтобы, когда я ночами с этим работаю и тыкаю это в полусознательном состоянии и когда у меня перемешиваются люди / кони метахабы / приложения, чтобы быстро ориентироваться. Поэтому у приложения будет полное название Universo Kiberplano / Универсо Киберплано. Да, в русском написании в официальном названии именно продукта / приложения тоже мы пишем с «О» в окончании «КиберпланО».
Тут я, добавив в название вариант на английском языке, нажму на языковой тег EN и в мини-меню нажму на кнопку «Сделать главным», после этого поле названия с английским языком перескочит наверх, у него появится звёздочка у языкового тега. То же самое сделаю и с описанием.

На вкладке «Параметры» я пока выберу, что это приложение «Закрытое», а не «Публичное», потому что его сначала нужно будет настроить, больше доработать, чем делать публичным. Не пугайтесь информационной таблички, которая говорит, что после создания приложения видимость приложения нельзя изменить — это временное ограничение, которое в ближайших новых версиях платформы будет убрано.
Также включаем, а точнее, оставляем включенной опцию «Добавить рабочие пространства», так как на уровне метахаба для Киберплана мы, как вы сами видели, не создали логику разделения данных между пользователями. Нажимаем на кнопку «Создать». Приложение быстро было создано, но это даже не результат оптимистичного сохранения данных, просто для приложения пока сохранено только название, описание и базовые настройки, пока не создана основная схема приложения.
Если сейчас сразу тыкнуть на созданное приложение, то мы увидим системное уведомление, что нам нужно создать схему приложения, и там прилагается кнопка быстрого перехода в админку приложения. Но можно на карточке или в элементе списка тыкнуть на кнопку-иконку «Три точки» и там выбрать пункт «Панель управления».

14. Оказавшись в админке приложения, которая именуется, как вы уже поняли, «Панель управления», мы сначала попадаем в «Панель приложения». Да, эти названия панелей будут постепенно улучшаться. Переходим в раздел «Коннекторы», создаём новый коннектор, называем типа «Приложение — метахаб». Пока коннектор может быть только один и только к метахабу, но будут и другие коннекторы, например, к хранилищу для данных и т. д.
На вкладке «Метахабы» нажимаем «Добавить метахаб» и в окне со списком доступных метахабов выбираем нужный нам. Если не можете найти тот единственный ранее нами созданный метахаб, можете воспользоваться там же поиском. Потом нажимаем «Создать».

Заходим во внутрь созданного коннектора, видим, что у текущей схемы статус пока «Черновик», нажимаю на большую кнопку «Создать схему», открывается окно «Изменения схемы», там мы видим, что будет создано два каталога, один пустой, но он не будет в меню отображаться, как мы ранее с вами настроили, а второй созданный нами «Ресурсы», можно развернуть и посмотреть, что для него будет создано. Ещё раз нажимаем «Создать схему» и тут нет оптимистичного создания, тут решили пока сделать ожидание реального создания. После создания схемы окно закрывается и статус становится «Синхронизирован».

После этого можем ещё по-быстрому сходить в раздел «Настройки», у приложений сейчас пока мало настроек, только на вкладке «Лимиты» можем установить лимит записей в каталоге «Ресурсы» — это будет лимит на уровне рабочего пространства. В будущем можно будет более тонко настраивать лимиты, в том числе по разным временным интервалам, для разных ролей пользователей и т. д. Можете ещё сходить посмотреть разделы «Миграции» и «Доступ», но там пока самый базовый функционал, так же как и в метахабах.

15. Всё, можно через хлебные крошки сверху вернуться в список приложений и снова нажать на созданное нами приложение. Теперь мы, наконец-то, видим наше творение. Первая версия Universo Kiberplano, реализованная на Universo Platformo, аж дух захватывает. В левом меню один пункт, по центру таблица каталога «Ресурсы» со всеми созданными атрибутами / колонками и предзаданным элементом «Лимонад», который по умолчанию будет теперь создаваться во всех рабочих пространствах. Как я ранее уже говорил, пользователи пока не видят, что у них есть рабочие пространства, но они есть в базе данных.
В таблице, нажав в колонке на кнопку-иконку «Три точки», можно открыть мини-меню с опциями сортировки, фильтром и управлением колонками. Давайте уберём из таблицы отображение колонки «Наш девиз», чтобы его видеть только при открытии карточки элемента. В мини-меню можно нажать на пункт «Скрыть», и колонка не будет отображаться в таблице. Включить её можно, открыв в другой колонке мини-меню и зайдя в «Управление колонками»... или просто перезагрузив страницу, потому что в текущей версии платформы настройки отображения таблицы каталога в приложении не сохраняются ни в локалстор браузера, ни в базу данных. Но в новых версиях это будет сделано.

В строчке таблицы (в элементе) можно справа нажать на «Три точки» и там выбрать пункт «Редактировать», откроется окно редактирования. Видим, что всё на месте. Теперь можно создавать и другие ресурсы.

Что, говорите, мало? Ну ещё есть тёмная тема.

Всё ещё мало? Оптимистичное обновление имеет и версионность, если вы открыли какую-то сущность на редактирование, а кто-то другой успел отредактировать быстрее вас и сохранить, то вы получаете соответствующее уведомление. Пока нельзя просмотреть DIFF и как в 1С захватить и заблокировать объект, но это тоже будет.

Текущий итог
Очевидно, текущий функционал Universo Platformo — это даже не 1% от полного функционала 1С:Предприятия 8.х и других SAP-ов [я снова посмел упомянуть их вместе], и текущий функционал Universo Kiberplano тоже даже не 1% от того, что мы ранее реализовывали на другом технологическом стеке. Те же самые ресурсы имели общий каталог и отдельные личные каталоги с возможности делать их публичными, были связаны с доменами, домены могли быть связаны с метапроектами и много всего другого.
Но теперь, когда путь ясен, архитектура понятна, предыдущий опыт по возможности учтён, развитие функционала движется очень быстро и постоянно даже ускоряется, поэтому скоро ждите следующую версию Universo Kiberplano релизованного на Universo Platformo!
Лицензия
Все наши проекты мы лицензируем по Омской Открытой Лицензии (Омской Лицензии, ОЛ), по её разным вариациям. Сейчас лицензия находится в версии 0.2.0, готовится версия 0.3.0, более подробнее о ней можно почитать в Манифесте Омской открытой лицензии.
Омская лицензия — это лицензия для спасения человечества от окончательного порабощения и полного уничтожения. ОЛ / OL — это один из инструментов создания осмысленного и безопасного общественного достояния. Омская Открытая Лицензия (Omsk Open License) похожа на лицензию MIT, но включает дополнительные «Основные положения», направленные, как уже было сказано, на создание осмысленного и безопасного общественного достояния. Есть разные модификации, даже есть Коммунистическая модификация, Индуистская модификация и т. д. Но мы используем Базовую модификацию.
Я думаю, что найдётся немало людей, которые с непривычки после прочтения «Омской лицензии» пригладят вставшие волосы, затолкнут обратно вытаращенные глаза и скажут, что это, по их личному мнению, может быть и «Омская», но не совсем «Открытая» и, может быть, даже и не «Лицензия». Но мы считаем, что будущее открытых лицензий — оно именно вот такое. Открытая — не значит допускающая что угодно, тем более допускающая использование для нанесения ущерба здоровью и благополучию людей. Открытая — это значит свободное использование в чётких безопасных для человечества рамках. [тут несколько дней срача про "А кто эти границы определяет?", "Что значит безопасные?" и т.д.]
Мы уверены в этом, считаем, что нас в этом поддерживает большая часть человечества, в том числе, надеемся, что и члены Трудовой партии КНДР, Корпуса стражей исламской революции Ирана, а также другие хорошие, порядочные и миролюбивые люди. Также важно, что Омская лицензия, по крайней мере в Базовой модификации, соответствует действующему законодательству России и многих других стран.

Деньги
Знаю, когда делается работа, которая выглядит как «никогда ни при каких обстоятельствах недостижимая», складывается ощущение, что ребята просто веселятся, попиливают гранты и осваивают деньги тупых инвесторов, выплатили уже по три ипотеки, теперь скупают недвижку в Дубаях, пока подешевело. Но нет, делаем сами, своими силами, при поддержке круга единомышленников. Понимаю, что кто-то сейчас скажет: «До этого момента я надеялся, что они не полные психи, а хотя бы на госдотациях, а оказалось, что психи». Да, мы такие.
С деньгами сейчас полный «апож», но это же не повод, чтобы не спасать человечество. При этом, конечно, чтобы спасать человечество по-настоящему, а не просто через написания статьи с высокопарными формулировками где-нибудь на Хабре, нужно много ресурсов, в том числе денег. Наши текущие направления по привлечению ресурсов такие:
1. Краудфандинг. Есть проект на Boosty, который уже покрывает расходы на хостинг, домены и всё такое. Будем продолжать развитие проекта, привлекать больше людей, которым проект будет полезен в личной работе и для компаний, а для начала будет просто интересен, даже в ключе «помочь, чтобы посмотреть получится или нет».
Важная часть Киберплана, в том числе, в помощи по объединению людей в новые народные предприятия (кооперативы), предоставление систем автоматизации для них, в результате участники этих предприятий, а потом и сами предприятия смогут вне зависимости от уровня использования нашей платформы поддерживать развитие платформы, потому что это также поддерживает и развитие сообщества, а это больше контактов, толще внутренний экономический слой и так далее.
2. Краудсорсинг. В Международном сообществе Текнокомо сейчас по разным направлениям работает около 100 человек, вся работа — это как раз краудсорсинг, потому что это не просто «общественная нагрузка» для приятного времяпровождения с разговорами о несправедливом мире и о том, как его нужно поменять, а это именно объединение сил в рамках конкретных проектов с конкретными целями.
Большинство, конечно, занимаются не разработкой платформы, а проектами, связанными с новой промышленностью, роботизацией, градостроительством и т. д. Над разработкой платформы сейчас работает несколько человек. Разработкой архитектуры и реализацию её Universo Platformo React делаю я один, но с применением ИИ-агентов, 2 человека постепенно переносят эти наработки на варианты платформы на другом технологическом стеке, 1 человек помогает с организацией автоматизированного тестирования, 1 человек с серверами и 2 человека — отраслевые постановщики задач, один из них из сферы образования, другой по теме домашней автоматизации. Получается, сейчас 7 человек это тянут. Конечно, нужно намного больше, особенно для перехода реализации от «Рабочего прототипа» к «Высокопроизводительному стабильному решению».
3. Продажи. Раз цель — полностью и везде заменить «1С:Предприятие» [не будут тут ещё раз вспоминать про SAP, чтобы лишний раз не нервировать уважаемых читателей] и сделать дружественное поглощение компании «1С» и всей сети франчайзи, то нужно делать на платформе современные отраслевые решения, которые будут по различным показателям превосходить текущие решения на основе «1С:Предприятия», и продавать услуги по их внедрению, доработке, поддержке и т. д., расширяя партнёрскую сеть, создавая новые народные предприятия, где все работники будут владельцами компании.
Фактически, для начала нужно сделать функциональный аналог 1С-Битрикс со всеми его возможностями, вплоть до своего мессенджера, только на основе нашей архитектуры с применением современных подходов к организации интерфейсов, в том числе с активным использованием нейросетей, предоставления рабочего места в рамках виртуальных пространств и т. д. При этом не забывать, что для многих людей «старые добрые кнопки, таблицы, графики» удобнее «всех этих ваших наворотов».
4. Футуроэкономика. Киберплан, все эти виртуальные миры, в которых можно создавать виртуальную экономику, цифровые двойники предприятий и целых городов, чтобы потом переносить в реальный мир, и всё остальное, к чему мы стремимся и что делаем, это, конечно, и про новую экономику, ту самую «футуроэкономику», а это значит самостоятельно создавать новые ресурсы для своей работы. Вообще, футуроэкономика — разносторонний термин, но сейчас в основном всё привязывают к блокчейну и смарт-контрактам. К нам с этой темой приходили ещё когда это было не сильно мейнстримом. Ещё лет 10 назад предлагали «форкнуть биток и срубить денег на хорошее дело» или хотя бы свой токен выпустить.
Я всем объясняю, что просто выпуск токена — это не футуроэкономика, более того, это может дискредитировать нашу работу, потому что несмотря на то, что мы сами не хотим делать pump and dump, но это за нас сделает кто-нибудь другой. При этом блокчейн — полезная технология, и мы планируем сделать свою сеть, на данный момент предполагаем на основе форка Ton [потому что там шардирование и всё такое, да, у этого есть свои плюсы и минусы, мы считаем, что плюсов для нас больше]. Есть идеи, как сделать Inmo — ресурсную единицу, которая будет являться коэффициентом от некоторых валют, металлов, энергии и т. д., которая будет обеспечиваться для начала ресурсами в виртуальных мирах, а потом переходить в реальный мир, предполагаются различные методы защиты от манипуляций, в том числе демпфирование через промежуточные криптовалюты и т. д. Но к этому ещё предстоит придти, потому что только на качественный запуск этой сети и того, что с ней связано, нужно от 7 миллионов рублей, так что это пока планы на будущее.
Ответы
Дам ещё кратко ответы на некоторые популярные вопросы. Естественно, в такой сложной теме вопросов может быть много, поэтому, конечно это ответы далеко не на все популярные вопросы.
Про ИИ-оптимизм. Да, в современном мире, особенно для малого бизнеса многие старые методы ведения бизнеса, учета в бизнесе при помощи "отраслевых решений" уходят, постепенно заменяются "ИИ-сотрудниками", постановка задачи через чат, контроль через голосового ассистента. Более того, даже первые решения в виде "API-прослоек" над популярными моделями сейчас выдавливаются крупными игроками, каждую неделю или несколько недель мы получаем новые весёлые картинки про "После выпуска этой функции сейчас закрылась ещё тысяча ИИ-стартапов". Всё это нужно учитывать, искать свои сильные стороны, становится лидерами быстрее, чтобы иметь возможность конкурировать с этими монстрами современного мира.
Про ИИ-пессимизм. Да, все эти нейросети, которые с натяжкой именуют ИИ, пока не могут создать массовых ИИ-специалистов высокого уровня, которые могут дать высокий уровень гарантии продолжительной стабильной работы, а часто даже не могут дать гарантии непродолжительной стабильной работы. Напомню, что мы нацелены именно на то, чтобы люди управляли миром, именно люди принимали решения, чтобы каждый человек был всесторонне развит. Universo Platformo — это, как и было заявлено в начале материала, наш способ достигнуть такого общества, в конечном итоге даже, как бы это не звучало излишне помпезно и заезжено, спасти человечество от восстания машин.
Про Карго-культ. Да, чтобы создать рабочую востребованную платформу, недостаточно сделать «что-то немного внешне похожее» на другой по-настоящему рабочий продукт, проверенный временем, над которым работали многие тысячи специалистов десятилетия. При этом важно понимать, что даже если мы обратимся к источнику термина «Карго-культ», то эти меланезийцы, даже с учётом того, что они создавали только внешнее подобие аэропортов, самолётов и т.д., в конечном итоге добились своей цели, теперь им всё-таки начали привозить деньги, продукты, вещи и т.д., просто рассматривая это как туристические объекты. Мы же не создаём отдаленное внешнее подобие, мы используем подходящие технологии для текущих этапов работы, при этом создавая условия для реализации новых этапов, которые привнесут больше новых возможностей, производительности и т.д.
Про 1С-говно. Да, в 1С:Предприятии много вещей, которые создают ощущение загромождённости логики, бесконечное выдумывание новых сущностей и т. д. У этого есть свои минусы, плюсы тоже есть, но понятно, что, похоже, некоторые вещи делались просто, чтобы маркетингово показать, что «теперь платформа стала ещё лучше», вместо реального развития. При этом, исходя из всех факторов, в том числе и странного лоббирования продуктов 1С со стороны налоговой, теперь в России это крупнейшая платформа для бизнес-автоматизации. Есть люди, их очень много, которые привыкли видеть мир автоматизации вот таким. Мы даём возможность продолжать идти в этой парадигме, при этом, как я уже говорил, предполагаем реализацию и многих других парадигм, в конечном итоге это должно приходить в наш общий абстрактный слой данных, охватывающий весь мир.
Про горячечный бред. Да, но нет. Нет, потому что мы все эти наши грандиозные планы —планируем, действия — действуем, находясь, как нам кажется, в полном психическом здравии. Делать что-то меньшее, когда мы на самом деле уверены, что скоро «нам всем хана-а-а-а», — это как раз мы считаем безумием. Мы понимаем, что это восприятие мира в наших головах, а в других головах, на основе других данных, другого жизненного опыта [тут большой список про элементы когнитивных войн, массовых манипуляций сознанием и другого вкусненького из форумов про тайные заговоры теневых правительств] может быть другое восприятие мира, поэтому ни в кого не тыкаем пальцем. Мы продолжаем действовать в рамках нашего видения мира и собирать таких же, как мы. А да, потому что когда я дошёл до редактирования написанной публикации, я делаю это уже с температурой 38.4, поэтому если что-то где-то потерялось или отвалилось, то, пожалуйста, пишите, поправлю.
Будущее
Продолжаем нашу работу каждый день, еженедельно выходят релизы Universo Platformo React, другие реализации тоже постепенно ползут, скоро будет достаточно функционала для реализации Universo Kiberplano и Universo MMOOMM на минимально необходимом уровне, чтобы начать давать к этому всему доступ для людей на нашем портале, ну и чтобы self-hosted (самохостинговые) версии тоже становились популярными.
Вы можете присоединяться. Даже если вы не разделяете какие-то отдельные наши взгляды, помните, что в современном турбулентном мире лучше объединиться во что-то большое и мощное, чем быть маленьким, одиноким, первым в очереди на пинок под зад. Сотрудничество — самая мощная стратегия выживания.
Пусть отчасти шутливый тон этой статьи не вводит вас в заблуждение, мы на самом деле всеми фибрами, всеми мышцами, всеми мечтами хотим достигнуть всего этого большого и невероятного, вновь и вновь преодолеваем то, что могло показаться непреодолимым, не останавливаемся, постоянно открывается «второе дыхание»… Главное, перефразируя киноклассика, чтобы однажды первое дыхание не закрылось раньше, чем откроется второе.
