Много лет я был невероятно замотивирован рисовать, я хотел рисовать все время, но с пеленок мне твердили, что я не умею рисовать, я не должен этого делать иначе стану нищим и несчастным. Шли годы и у меня сформировался блок, когда мне хотелось рисовать я делал что угодно: уборку квартиры, стирку, готовку и на рисование "времени не оставалось".
Сейчас ситуация в корне изменилась, мне больше не нужна мотивация, я замотивирован на более глубоком уровне и рисую в любое время и в любом месте, дел стало значительно больше, но я всегда нахожу время на рисование.
Рисование стало фундаментальной ценностью, если я не буду рисовать то зачем мне всё остальное?
В голове все чаще тишина и нет никаких идей, но я все равно просто беру и начинаю делать, вдохновение приходит во время работы. Теперь я пытаюсь поскорее закончить другие дела, чтобы урвать минутку рисования, а не наоборот.
Если ты хочешь рисовать, хочешь показать миру свое видение - просто рисуй все время. Рисование это не редкий праздник, когда ты озарен лучами творчества из космоса и случился прекрасный беззаботный день. Рисование это работа, как занятия в тренажерном, ты не должен хотеть идти в тренажерный, но ты идешь. В какой-то день ты отлично позанимался, в другой не выспался, плохо поел и не можешь жать даже тот вес который раньше легко давался, но ты все равно должен продолжать, ты знаешь, что тогда будет результат и ты гордишься собой даже в плохой день.
Так что да, самое худшее это рисовать редко, ждать подходящего момента, в этом случае точно будут проблемы с мотивацией. Но если рисуешь постоянно, мотивация больше не нужна, рисование становится частью жизни и результаты становятся лучше и лучше.
Едва набравшее силу солнце пригревало сверху, словно положив мне на плечи пару горячих дружеских ладоней. Тепло мягко разливалось по промёрзшим после долгой зимы костям, а порывистый, но не слишком суровый ветерок ласкал лицо и перемешивал влажный воздух, напитанный медовым запахом цветущих деревьев и просыхающей земли.
Сразу ответим на самый вероятный первый комментарий:
«Это нейросетевое говно».
Возможно. Но давайте сначала разберёмся, что именно перед нами, зачем оно сделано и почему вообще работает.
Это не очередной «убийца 1С». Не огромная корпоративная платформа. Не конструктор сайтов с тысячей кнопок. И не архив со случайными файлами, которые нейросеть сгенерировала за один вечер.
Это небольшой standalone-фреймворк для создания персональных ERP-систем.
Проще говоря: у вас есть сайт, база данных и какая-то реальная работа. Например, нужно учитывать людей, вещи, заявки, питание, пропуска, машины или деньги. Вы кладёте в корень сайта папку `erp`, добавляете файл `erp.php`, указываете доступ к базе — и получаете отдельную админку.
А потом описываете нужный рабочий процесс обычными словами и создаёте для него модуль.
Кодт в лесу
Что такое персональная ERP
ERP принято представлять как страшную дорогую систему для завода, банка или торговой сети.
В действительности ERP — это просто программа, которая помогает управлять работой:
кто приехал;
кому что выдали;
сколько осталось на складе;
кто поел;
кто оплатил;
какая заявка выполнена;
кто отвечает за задачу;
что произошло сегодня.
Большинство маленьких организаций решает эти вопросы с помощью таблиц, бумажек, сообщений в Telegram и памяти одного уставшего человека.
Персональная ERP не пытается заранее знать, как устроена ваша жизнь. Она собирается под конкретную задачу.
Нужно учитывать склад — подключаем модуль склада. Нужно сканировать QR-коды на кухне — подключаем сканер. Нужен редактор участников — добавляем редактор. Не нужно — не устанавливаем.
Почему standalone
Современная разработка иногда выглядит странно. Чтобы показать таблицу из базы, предлагают установить Node.js, Docker, Redis, десятки тысяч npm-пакетов и небольшой Kubernetes.
Наш подход проще:
PHP;
нативный JavaScript;
CSS;
MySQL или MariaDB;
обычный недорогой хостинг.
Система не требует отдельного сервера приложений, сложной сборки или постоянного фонового процесса.
Главный сайт может быть каким угодно: старым, новым, самописным или собранным на CMS. ERP живёт отдельно и обращается к нужной базе данных.
Это не плагин для конкретной платформы. Это переносимая административная среда.
Почему «генеративный фреймворк»
Обычно фреймворк даёт программисту классы, функции и документацию.
Генеративный фреймворк дополнительно даёт контракт для нейросети.
В нём написано:
куда положить файлы;
как устроен API;
как проверяются права;
как делать запросы;
как оформлять интерфейс;
как работать без связи;
как не создавать дубликаты;
как очищать таймеры и обработчики;
как безопасно загружать файлы;
как писать SQL;
какие технологии запрещены.
После этого новый модуль можно описать человеческим языком:
Создай модуль склада. В нём есть предметы, остатки, выдача и возврат. Предметы выдаются участникам из таблицы chains. Администратор редактирует склад. Обычный пользователь оформляет выдачу. Интернет может пропадать. Операции нельзя терять и нельзя записывать дважды. Интерфейс предназначен в первую очередь для смартфона.
Модель получает это описание вместе с контрактом и создаёт совместимые файлы:
При необходимости она также создаёт SQL-миграцию и фрагмент конфигурации.
Это не означает, что нейросеть теперь волшебным образом стала программистом, бухгалтером и директором склада. Она остаётся инструментом. Результат нужно проверять на реальных данных и реальных сценариях.
Но большая часть скучной технической работы уже формализована.
Живая Машина
Почему проект русский
Не потому, что PHP изобрели в Рязани. И не потому, что в коде должны быть берёзы.
Проект русский по своей практической среде:
обычный shared-хостинг;
старый сайт, который нельзя переписать целиком;
ограниченный бюджет;
нестабильный мобильный интернет;
работа со смартфона;
необходимость запустить всё быстро;
реальные люди, которые не хотят читать инструкцию на сто страниц;
интерфейс, который должен работать в поле, в палатке, на складе или в лесу.
Это не попытка повторить дорогое западное корпоративное решение в уменьшенном виде. Это попытка сделать полезный инструмент из того, что доступно почти везде.
Русский здесь — это не про изоляцию. Это про язык, условия и инженерный подход: меньше церемоний, больше работающего результата.
Почему open source
Потому что систему нельзя честно называть персональной, если её хозяин не может посмотреть код, изменить его и забрать свои данные.
Открытый проект должен позволять:
установить систему на своём сервере;
подключить собственную базу;
написать свои модули;
изменить существующие;
не платить за каждого пользователя;
не зависеть от исчезновения чужого облачного сервиса;
хранить данные там, где решил владелец.
Работа там, где интернет работает плохо
Один из главных сценариев проекта появился не в красивом офисе, а в лесу.
Там связь может быть такой:
интернет появился;
человек нажал кнопку;
интернет исчез;
запрос вроде бы ушёл;
ответ не пришёл;
человек нажал ещё три раза.
Если обычная система не готова к этому, она теряет операцию или создаёт четыре одинаковых записи.
Поэтому важные полевые модули используют локальную очередь. Каждая операция получает уникальный идентификатор. Если запрос отправится повторно, сервер узнает его и не создаст дубль.
Так работают:
QR-сканирования;
сообщения;
выдача имущества;
отметки присутствия;
другие операции, которые нельзя просто забыть.
Интерфейс может сразу дать человеку визуальный и звуковой ответ. Когда связь восстановится, очередь синхронизируется с сервером.
Но сервер всё равно остаётся последним источником истины. Именно он окончательно проверяет права, остатки и лимиты.
Что уже умеет система
Базовая редакция включает несколько живых модулей.
Люди - Таблица участников, слои, поиск, статусы и быстрое редактирование.
Редактор участника - Контакты, даты, питание, фотография, комментарии и назначение QR-ключа.
Сканер - Работа с камерой смартфона, локальная очередь событий, допуски, лимиты и последующая синхронизация.
Пользователи - Управление учётными записями, ролями, доступными модулями и типами сканеров.
Чат и ИИ - Общий и приватные чаты, файлы, изображения, автономная очередь сообщений и серверные вызовы языковых моделей.
а так-же, канбан, блог, ежедневник, интергации с внешними АПИ и парсерами... и всё что придёт вам в голову.
Новый функционал не вшивается в одно огромное ядро. Он добавляется отдельными модулями.
ERP для организации лесных мероприятей
А нейросеть здесь всё-таки пишет код?
Да.
Как когда-то код стали писать с автодополнением, библиотеками, Stack Overflow и поисковиками.
Разница в том, что языковая модель может получить не один вопрос, а целый технический договор. Если договор хороший, результат становится заметно предсказуемее.
Плохой подход:
«Нейросеть, сделай мне ERP».
Хороший подход:
«Вот архитектура, ограничения хостинга, API-контракт, правила безопасности, схема данных, жизненный цикл модуля и требования к плохой связи. Теперь реализуй конкретный модуль».
Нейросеть не заменяет архитектуру. Наоборот: без архитектуры она особенно быстро производит кашу.
Генеративный фреймворк — это не фреймворк, который сам мечтает и программирует по ночам. Это система, подготовленная к тому, чтобы человек мог использовать генерацию кода контролируемо.
Это уже готовая корпоративная платформа?
Нет.
Проекту ещё нужны:
автоматические тесты;
установщик и миграции;
нормальная документация;
аудит безопасности;
стабильная система обновлений;
демонстрационная сборка;
больше универсальных модулей;
проверка на разных версиях PHP и MariaDB.
финансирование и покровительство
Но он уже решает реальные задачи. А это важнее красивой презентации, в которой пока не работает ни одна кнопка.
Главное
Идея проекта очень простая:
Не человек должен полностью перестраивать свою работу под огромную ERP. Небольшая ERP должна собираться вокруг реальной работы человека.
Для этого необязательно начинать многолетнюю разработку и покупать серверную стойку.
Иногда достаточно:
папки `erp`;
одного роутера;
доступа к базе;
нескольких модулей;
хорошо составленного контракта;
внимательной проверки результата.
Да, часть кода (и эта статья) создана при помощи нейросетей.
Но лопату тоже сделал не тот человек, который сейчас копает ею яму. Вопрос не в том, каким инструментом пользовались. Вопрос в том, понимает ли автор, что он строит, может ли это проверить и помогает ли результат людям.
Если помогает — значит, это уже не «нейросетевое говно».
Это инструмент.
А хороший инструмент можно открыть, разобрать, починить и приспособить под себя.
Едва набравшее силу солнце пригревало сверху, словно положив мне на плечи пару горячих дружеских ладоней. Тепло мягко разливалось по промёрзшим после долгой зимы костям, а порывистый, но не слишком суровый ветерок ласкал лицо и перемешивал влажный воздух, напитанный медовым запахом цветущих деревьев и просыхающей земли. Весенние сны одни из лучших, хотя бы потому что в моих снах весна всегда проявляет себя со своих наилучших сторон: всегда теплая, нежно-солнечная, приветливая и нарядная словно белоснежный свадебный торт, щедро украшенный взбитыми сливками! И никогда прохладная, дождливо-серая, блёклая. А ещё есть в каждом весеннем сне своя удивительная изюминка, была и в этом. Спешным шагом я вошла в парк, где меня ждала подруга. Мы договорились встретиться что бы вместе полюбоваться на мероприятия в честь праздника весны, который проходил в этот день в город, и я не хотела заставлять её ждать, потому как она пришла раньше меня. Так что у меня не было времени внимательно рассматривать цветущие растения и всё же это был тот самый случай, когда даже беглого взгляда достаточно что бы удивиться. Переступая за ворота, я уже ожидала увидеть белые и, если повезёт, розоватые кружева весенних цветущих деревьев: яблонь, каштанов с их кремовыми свечками или сладко пахнущих акаций и прочих. И не то что бы я их не увидела, парк действительно встретил меня большим разнообразием цветущих культур, кустарников, пышных цветочных композиций на клумбах и было там всё что ожидалось, вот только не белого и не розового цвета. За парковыми воротами оказался сокрыт удивительный голубой сад. Да, все цветы что здесь были, начиная от тех что красовались на высоких гордых каштановых и более изящных плодовых деревьях, заканчивая теми что стелились по земле или ютились на клумбах, будь то тюльпаны или розы, все они имели оттенки от ярко-синего до нежно голубого цвета. Я не остановилась, но замедлила шаг, чтобы внимательнее всмотреться в окружающую меня картину, продолжая углубляться в парк по дорожке, пока не наткнулась наконец на свою подругу. Едва мы успели обменяться объятиями и любезностями, я поспешила задать вопрос, от чего же всё здесь такое голубое, даже то что совсем не должно быть таковым. - Неужели они покрашены? ... – С сомнением в голосе предположила я. Девушка усмехнулась моему замешательству и объяснила: - Ну вообще-то почти так и есть. Это садовники постарались, чтобы удивить всех к празднику весны. Едва сошёл снег, они целый месяц поливали все растения здесь синей водой. Корни впитали её и вот результат. Мои брови ещё больше поползли вверх, нечего было и ответить. А подруга лишь улыбнулась и пригласила меня пройти ещё дальше по дорожке на звуки танцев и песен, где нас ждало ещё больше удивительных вещей.