Всем привет! Проекту уже более трех лет, и количество звездочек на GitHub перевалило за 500 штук при нулевом маркетинге — поэтому я решил написать про обновления, которые у нас произошли.
В этой статье не будет каких-то зубодробительных технических подробностей, так-как под капотом у Totum — PostgreSQL и PHP. Все это упаковано в Totum для пользователей, которые, может быть, когда-то и программировали, но это было давно и уже неправда.
Киллер-фича (она же киллер-проблема для этого проекта) — это собственный DSL для непрограммистов и особая структура решения, позволяющая людям, имеющим поверхностное представление о программировании, создавать весьма сложные проекты, затратив немного времени по вечерам, после основной работы (проверено на людях).
Основная часть проекта open source с MIT-лицензией, есть продвинутая PRO с ограниченной лицензией, но тоже бесплатно — смотрите на https://ru.totum.online — и есть скрипт установки с которым справится даже школьник.
Ссылки
Предыдущие статьи
И здесь про наш DSL рассказывал
Краткий пересказ предыдущих серий
Идея была в том, что бы сделать конструктор внутренних информационных систем для задач, которые перестали помещаться в таблички excel:
-
стало много данных
-
с автоматическим взаимодействием всего со всем
-
в том числе, с другими проектами в web
-
с жестким и динамическим разделением прав доступа
-
логами
-
и чтобы это все был код, а не штука с квадратиками и стрелочками
-
но такой, чтоб не надо было учить SQL
-
и рисовать шаблоны представления данных — т.е., чтобы данные и были шаблоном
Так как мы видим, что на Totum набралось уже более 100 проектов, сделанных не нами (причем иногда очень сложных), можно сказать, что это работает.
Какие проекты делают люди
ERP, системы учета товаров или денег, системы приема заказов или сбора информации. Системы взаимодействия: производство-дилеры или поставщик-клиент. Учет чего-то экзотического, для чего не нашли готовых решений. Или в случаях, когда сознательно отказываются от каких-то коробочных решений, чтобы реализовать свой собственный путь движения данных в компании и получить преимущество перед конкурентами.
Про сделанные проекты мы просим написать на форуме, но это очень плохо работает — не пишут.
Готовые проекты в эксплуатации выглядят как-то так:
Как выглядит Totum-код и что там с архитектурой решений
Архитектура
Сначала расскажу немного про архитектуру. Основой являются таблицы, а в них — поля. Здесь все также как в БД, поэтому такой тип таблиц мы называем Простые. Помимо них есть таблицы, где каждая строка внутри себя содержит виртуальные таблицы. И есть отдельно виртуальные таблицы, которые не имеют следа в базе данных (точнее имеют, но временный).
Принципиально Простые и различного рода Виртуальные отличаются одним центральным параметром — что в них вычисляется, когда происходит изменение.
В Простых таблицах — вычисляется только та строка, в которой произошло изменение, в Виртуальных — вся таблица. Таким образом можно регулировать нагрузку на сервер, двигая точку затрат вычислительной мощности.
Код
Поля в таблицах содержат изолированный код. Код — это такой аналог формул в excel, его можно задать в конкретном поле и он вычисляет значение этого поля. Выглядит как-то так:
Он может брать данные из текущей таблицы или из других таблиц и производить над ними различные операции. Поля при пересчете рассчитываются слева направо и сверху вниз, и таким образом коды в последующих полях, могут брать значения расчета в предыдущих. Простое решение можно сделать, используя только коды. SQL знать не нужно.
У нас есть подсказки по набору, подсветка синтаксиса и ошибок, поиск названий полей и таблиц. Конечно, это не дотягивает до уровня навороченных IDE, но здесь это не нужно. Обычно в Totum коды маленькие — 5-10 строк. Код в Тотуме длиной в 50 строк — это уже монстр. Рекордные примеры — 100 строк, и, как правило, это реально что-то не то делали.
Еще коды функциональные, поэтому пишутся наоборот, отчего скилловый разраб на императивных языках страдает — но Тотум не для скилловых ребят, поэтому расслабьтесь :)
Помимо таких кодов есть еще коды-действия — выглядят так же, но выполняют действия после вычисления значений в полях по одному из четырех триггеров: изменение, добавление строки, удаление строки или клик в заблокированном поле.
Действия уже менее изолированные чем коды, так-как могут менять значения за пределами поля в котором выполняются, а так-же открывать контекстные окошки или подключатся к сторонним серверам. Выглядят так же, только функции используются другие. SQL по прежнему знать не нужно.
Третий тип кодов — это форматирование поля по условиям, подсветить красным или заблокировать. И еще всякое разное. Здесь SQL тоже знать не нужно :)
Можно совершенно спокойно использовать одинаковые переменные, повторять куски кода, писать что-то неаккуратное и т.п. Особенно в Кодах и в Форматировании — так как если что-то и убьется, то локально в конкретном поле.
Комбинация кодов, кодов действия и использования разных типов таблиц дает возможность как очень быстро создать что-то простенькое, так и, подумав, сделать оптимизированное решение.
Для тех, кому нужен хардкор: есть и обращение напрямую к БД и подключение кастомных функций и вызов
.py
скриптов через консоль сервера.
Обучение
Можно самому научиться, используя документацию и бесплатный учебный курс. Искать здесь: https://ru.docs.totum.online/training-course
Если в чем-то затык — можно спросить помощь зала: https://github.com/totumonline/totum-ru-issues-and-discussions/discussions/20
Почему код, есть же no-code и это очень модно
Мы специально не стали это использовать. Да, таблицы, поля и их параметры набираются мышкой визуально. Но дальше нам хотелось, что бы платформа могла реализовывать сложную логику и с кодом — это делать существенно проще. Приходится чуть больше, чем в no-code, потратить времени на старте, но зато, при реализации сложной логики не так сильно растут затрачиваемые усилия, как это происходит в no-code системах.
Конечно, мы знаем про системы, в которых какие-то базовые блоки, натыканные мышкой, преобразовываются в код на полноценном языке и потом их можно доработать. Но для этого надо иметь квалификацию в том языке, в который этот готовый блок преобразовывается, а мы ориентировались на людей, имеющих квалификацию в чем-то другом — в инженерии или серверах, например, но не в хардкорном программировании.
Для иллюстрации нарисовал такую картинку:
Хотелось, короче, добиться более сглаженного роста сложности при небольшом пороге на вход. В Тотум он, по-честному, выше чем в Airtable или аналогичных проектах, но многократно ниже, чем у 1С.
В качестве эксперимента моя супруга проходила базовый курс по 1С на 250 часов. После этого курса она могла делать в половину меньше, чем люди c минимальным бэкграундом в программировании, потратившие на изучение Тотум около 30 часов.
Сейчас же, в эпоху chatGPT, я бесконечно рад, что у нас все-таки код (ибо были сомнения). Мы провели несколько экспериментов и у нас получается научить GPT программировать на Тотум. Это даже легче, чем я ожидал. Так что к концу лета будет чат-бот, встроенный в систему, который еще больше понизит порог входа для новичков. И станет совсем хорошо.
Размещение
Любой
SaaS сервисы
Мы не все смогли запихнуть в дистрибутив. Теми функциями, которые не запихнулись, можно пользоваться через наш центральный сервер.
Список сервисов будет пополнятся. Сейчас доступны:
-
выгрузка таблиц в .xlsx
-
генерация документов в .xlsx и .docx по шаблону (например шаблон счета или договора)
-
создание .pdf на основе html-шаблона (вместо печати) или на основе .xlsx/.docx документа (чтобы сразу можно было отправить клиенту письмо с файлами, минуя окно печати браузера, или вообще это делать автоматически в фоне)
-
[через пару недель] загрузка данных в таблицу из .xlsx документа с указанием диапазона и преобразованиями формата даты и чисел.
-
[через пару недель] просмотр .xlsx и .docx документов, загруженных в систему в браузере, через их автоматическое преобразование в .pdf
Чуть позже в этом году:
-
миллион всяких разных вариантов с GPT
-
геосервисы на основе open street map
-
генераторы различных кодов (штрих, qr и т.п.)
-
обработчик картинок
-
что-то еще, что мы пока не придумали
Подключить можно как к MIT-версии, так и к PRO: https://ru.docs.totum.online/srv_connection
Если вы только-только начинаете использовать Тотум, то скорее всего вам еще не нужны Сервисы, но знайте, что они есть :)
Что еще в планах проекта
Проект развивается, но теперь не так быстро, как раньше, так как кодовая база большая и у нас уходит много времени на встраивание почти любого нового функционала в систему.
Из того, что мне прям хочется закончить в ближайшее время, это:
-
Различные улучшения с файлами
-
Версионирование
-
Разделение по папкам на сервере (чтобы можно было хранить большие архивы)
-
Интеграция с Only Office (открытие и редактирование офисных форматов прямо из системы)
-
Расшаривание файлов с защищенным доступом
-
-
Авторизация через Gmail, Twitter и Github
-
Интеграция с Rocket Chat
-
Чтение IMAP из коробки и кастомные SMTP для пользователей (чтобы можно было вести переписку непсредствено из системы)
Послесловие
Если вдруг вы большой корпорат, вы прочитали и вам понравилась идея — сравните количество звезд в нашем репо на GitHub с количеством сотрудников в вашей корпорации. Если сотрудников больше, чем у нас звезд — Тотум вам не подходит (опыт 100%).
Если вам что-то хочется спросить лично — ловите слот на коротенькую личную консультацию (бесплатно): https://control.demoru.totum.online/Forms/free-consultation (20 минут — это реально пара вопросов).
Также вопросы можно написать мне в Телеграм: https://t.me/alexeypolunin
Только сразу дисклеймер: хвалебная ода любой длины, отправленная нам, не означает, что мы подорвемся бесплатно разрабатывать следующий за ней длинный список ваших пожеланий :)
Также сразу отвечаю на вопрос про дизайн: если вас интересует дизайн и его переработка (типа проект ок, дизайн ***но) — вам не подходит. У всех, кто переделывал дизайн, проект не пошел. То ли карма, то ли что, но скорее всего просто не на то акцент ставили!
Если захотите добавится в список партнеров, разрабатывающих проекты, то велкам. Никаких супер требований.
Всем крутых проектов!
Автор: Алексей Полунин