Улучшение серверов и оптимизация psql ускорили ядро Тотума в 4 раза за 6 лет. У нас есть один проект шестилетней давности, в котором считается таблица табеля, на которой мы придумывали подходы к оптимизации расчётных таблиц типа...
Если контрольное значение не изменилось, то не надо повторно выполнять код, который там что-то считает (в случае если этот код реально много считает):
Тогда в этой таблице время составляло 2 секунды на открытие таблицы, сейчас — 0,45 сек (это 17-й psql; 18-й будет ещё на 5 % быстрее, и это без JIT — с ним тоже будет на 5 % быстрее).
Это результат на медленных процессорах 2,6 ГГц; на высокочастотных, соответственно, вдвое быстрее.
Раздумываем ещё ускориться, заодно всё запаковать в один бинарник при помощи FrankenPHP.
Так как это будет бинарник — скорость возрастёт, установка и обновления упростятся.
Если контрольное значение не изменилось, то не надо повторно выполнять код, который там что-то считает (в случае если этот код реально много считает):
=: if(condition: #old.control = #control; then: $#onfv; else: $calc)
Тогда в этой таблице время составляло 2 секунды на открытие таблицы, сейчас — 0,45 сек (это 17-й psql; 18-й будет ещё на 5 % быстрее, и это без JIT — с ним тоже будет на 5 % быстрее).
Это результат на медленных процессорах 2,6 ГГц; на высокочастотных, соответственно, вдвое быстрее.
Раздумываем ещё ускориться, заодно всё запаковать в один бинарник при помощи FrankenPHP.
Так как это будет бинарник — скорость возрастёт, установка и обновления упростятся.
🔥3
Для действующих платный лицензий подключили прокси к OpenAI и Perplexity cо списанием со счета TotumAI с подключением к нашему верифицированному акку.
Эндпойнты:
https://license.totum-online.ru/Remotes/openai/v1/chat/completions
https://license.totum-online.ru/Remotes/openai/v1/embeddings
https://license.totum-online.ru/Remotes/perplexity/chat/completions
Ключ для всех указывается одинаковый — активный ключ Totum AI (в формате запроса openai).
Оплата за токены списывается с баланса Totum AI в течение 1-10 минут
Стоимости и доступные модели (доступны только перечисленные модели, потом расширим): https://license.totum-online.ru/Table/30/76
Приоритетный tier openai (быстрое выполнение запроса за двойную стоимость) — недоступен.
Лог запросов: https://license.totum-online.ru/Table/30/75 (тело запроса и ответа не записываем, только мета-инфу для расчета биллинга).
Ничего сверхестесственного, просто допудобство для платных лицензий (есть и другие сервисы предоставляющие в РФ доступ к API с оплатой за рубли — обычно х3 к стоимости, здесь х1.5)
ps: курс не ЦБ, а тот, по которому мы реально смогли перевести бабки
ps2: суммы больше чем 200 баксов согласовывайте плиз с техподдержкой (мы не банк и не криптообменник, свободных средств на балансе нет)
Эндпойнты:
https://license.totum-online.ru/Remotes/openai/v1/chat/completions
https://license.totum-online.ru/Remotes/openai/v1/embeddings
https://license.totum-online.ru/Remotes/perplexity/chat/completions
Ключ для всех указывается одинаковый — активный ключ Totum AI (в формате запроса openai).
Оплата за токены списывается с баланса Totum AI в течение 1-10 минут
Стоимости и доступные модели (доступны только перечисленные модели, потом расширим): https://license.totum-online.ru/Table/30/76
Приоритетный tier openai (быстрое выполнение запроса за двойную стоимость) — недоступен.
Лог запросов: https://license.totum-online.ru/Table/30/75 (тело запроса и ответа не записываем, только мета-инфу для расчета биллинга).
Ничего сверхестесственного, просто допудобство для платных лицензий (есть и другие сервисы предоставляющие в РФ доступ к API с оплатой за рубли — обычно х3 к стоимости, здесь х1.5)
ps: курс не ЦБ, а тот, по которому мы реально смогли перевести бабки
ps2: суммы больше чем 200 баксов согласовывайте плиз с техподдержкой (мы не банк и не криптообменник, свободных средств на балансе нет)
🔥3
В execSSH() добавлен параметр stdin, который запускает SSH-скрипт в дочернем процессе и передаёт ему содержимое параметра в стандартный ввод. Это нужно из-за ограничения длины командной строки в Linux и необходимости экранирования управляющих символов. В общем, файл так не передать, а через stdin — можно.
Например, у вас есть скриптик на Python, который там что-то доброе делает. Можно сохранить его в Totum в файл и передавать путь к файлу для обработки, а можно взять fileGetContent() и кинуть в stdin (что сильно удобнее, особенно когда это какие-то временные файлы или нужно процессить данные на лету):
Со стороны скрипта при таком подходе нужно читать из стандартного ввода (в конце передачи Totum сообщает, что всё — все данные переданы):
Например, у вас есть скриптик на Python, который там что-то доброе делает. Можно сохранить его в Totum в файл и передавать путь к файлу для обработки, а можно взять fileGetContent() и кинуть в stdin (что сильно удобнее, особенно когда это какие-то временные файлы или нужно процессить данные на лету):
= : linkToDataText(title: "*"; text: $proc_open)
proc_open: execSSH(ssh: "/home/totum/pyvenv/bin/python /home/totum/pyvenv/strCount.py"; stdin: $some_file_data)
some_file_data: fileGetContent(...)
Со стороны скрипта при таком подходе нужно читать из стандартного ввода (в конце передачи Totum сообщает, что всё — все данные переданы):
import sys
# Читаем весь ввод из stdin
data = sys.stdin.read()
# Просто выводим длину полученного текста (можно заменить на любую логику)
print(f"Получено {len(data)} символов.")
# Например, можно что-то вернуть в stdout — это увидит Тотум
👍2🔥1
Теперь при загрузке файлов (только новых, уже загруженные не участвуют) сразу определяется MIME-type средствами Linux (в структуре поля «файл» он кладётся в ключ mime):
Благодаря этому Тотум научился распознавать JPEG’и, которые притворяются PNG’шками, и наоборот — и вместо ошибки стал исправлять им расширение.
Также доработали linkToFileDownload, чтобы можно было просто передать в него содержимое поля файл, без возни с получением бинарников:
[
{
"file": "99_h_file.pdf",
"size": 60130,
"ext": "pdf",
"mime": "application/pdf",
"name": "some_name.pdf"
}
]
Благодаря этому Тотум научился распознавать JPEG’и, которые притворяются PNG’шками, и наоборот — и вместо ошибки стал исправлять им расширение.
Также доработали linkToFileDownload, чтобы можно было просто передать в него содержимое поля файл, без возни с получением бинарников:
= : linkToFileDownload(files: #h_some_file)
👍3🔥1
Нам 100500 человек за последний год сказали, что формулировка «для не-программистов» — это отстой. И вообще сайт помойка (можно посмотреть на EN/ES-версии).
Так вот — конверсия у нового бананового, который без «не программистов» на 30% хуже
Так вот — конверсия у нового бананового, который без «не программистов» на 30% хуже
🤔3🙈1
Самая сложная задача — архитектурная. Именно её пока что AI не решает.
Если выбирать между одной таблицей с разделением по категориям и несколькими отдельными таблицами для каждой категории — то единая сквозная таблица всегда предпочтительнее как с точки зрения нагрузки, так и для дальнейшего расширения.
💯2👌1🤷1
Ubuntu затронута, так как это эксплойт ядра linux
CVE-2026-31431 «Copy Fail» 7.8 (HIGH)
Это критическая уязвимость локального повышения привилегий (LPE) в ядре Linux, получившая название «Copy Fail». Она позволяет любому аутентифицированному пользователю с обычными правами получить root-доступ к системе.
Вектор атаки: Локальный (требуется учётная запись в системе)
Сложность: Низкая
Привилегии: Требуются обычные права пользователя
Влияние: Полная компрометация: чтение, запись, выполнение
Уязвимость включена в каталог известных эксплуатируемых уязвимостей CISA с дедлайном применения мер до 15 мая 2026
CVE-2026-31431 «Copy Fail» 7.8 (HIGH)
Это критическая уязвимость локального повышения привилегий (LPE) в ядре Linux, получившая название «Copy Fail». Она позволяет любому аутентифицированному пользователю с обычными правами получить root-доступ к системе.
Вектор атаки: Локальный (требуется учётная запись в системе)
Сложность: Низкая
Привилегии: Требуются обычные права пользователя
Влияние: Полная компрометация: чтение, запись, выполнение
Уязвимость включена в каталог известных эксплуатируемых уязвимостей CISA с дедлайном применения мер до 15 мая 2026
😱2👍1
В итоге аяй нашел в тотуме реальный вектор атаки — обновление на GIT, всем рекомендуем обновиться.
👌5❤2
Короче, кто активно юзает демонов в связке с execSSH (как мы), то супер важно знать, что у демона стартовая точка не /home/totum/totum-mit/http как у всего Тотума, а /home/totum/totum-mit (без http)
Так как демоны запускаются бинарником на GO и у него точка входа — корневая директория.
Поэтому если в execSSH используется относительны путь ../interfaces/bitum..... то для выполнения через демона это будет ./interfaces/bitum (с одной точкой вместо двух)
Соответственно что бы отличить демон это или пользователь ручками жмет — для демона ставится процессная переменная procVar и ее перед определением пути читаете и из этого путь строите.
Еще вариант — в execSSH совать только полные пути от корня сервера, но это может быть неспортивно чтоль
Так как демоны запускаются бинарником на GO и у него точка входа — корневая директория.
Поэтому если в execSSH используется относительны путь ../interfaces/bitum..... то для выполнения через демона это будет ./interfaces/bitum (с одной точкой вместо двух)
Соответственно что бы отличить демон это или пользователь ручками жмет — для демона ставится процессная переменная procVar и ее перед определением пути читаете и из этого путь строите.
Еще вариант — в execSSH совать только полные пути от корня сервера, но это может быть неспортивно чтоль
❤2
Totum AI — все, RIP.
У кого остатки на балансе не подарочные, а которые вы дополнительно оплачивали — напишите на totum@totum.online мы их вернем.
У кого остатки на балансе не подарочные, а которые вы дополнительно оплачивали — напишите на totum@totum.online мы их вернем.
😢6
Итак, добро пожаловать уязвимость PHP — уровень опасности Князь Тьмы (выполнение произвольного shell на вашем серваке).
Атакующий НЕ ДОЛЖЕН БЫТЬ АВТОРИЗОВАН ни в тотуме ни на сервере!
там 3 уязвимости
+ CVE-2026-109619 через сессии (подтверждённая RCE на FPM): закрывается session.upload_progress.enabled = off.
+ CVE-2026-109619 через backtraces: на 8.3 отсутствует.
+ CVE-2026-109618 (OOM): OOM при старте запроса на FPM действительно просто убивает воркер. Но если довести до OOM уже работающий скрипт, то есть в коде приложения, сценарий для FPM считается опасным. Рабочего эксплойта пока нет, но и «безопасно» никто не утверждает.
Нормальная защита — обновление php, но там нужна версия не ниже 8.3.36 (ее пока в репо нет и еще некоторое время она будет идти до хостеров тк они держат кэши).
Что сделать на сервере Тотум (команды написаны от root):
Редачим (если он есть, если его нет значит совсем старая установка и надо в PHP.INI отключить, смотреть сл.сообщение тогда):
Добавляем:
Сохраняем рестартуем FPM:
Атакующий НЕ ДОЛЖЕН БЫТЬ АВТОРИЗОВАН ни в тотуме ни на сервере!
там 3 уязвимости
+ CVE-2026-109619 через сессии (подтверждённая RCE на FPM): закрывается session.upload_progress.enabled = off.
+ CVE-2026-109619 через backtraces: на 8.3 отсутствует.
+ CVE-2026-109618 (OOM): OOM при старте запроса на FPM действительно просто убивает воркер. Но если довести до OOM уже работающий скрипт, то есть в коде приложения, сценарий для FPM считается опасным. Рабочего эксплойта пока нет, но и «безопасно» никто не утверждает.
Нормальная защита — обновление php, но там нужна версия не ниже 8.3.36 (ее пока в репо нет и еще некоторое время она будет идти до хостеров тк они держат кэши).
Что сделать на сервере Тотум (команды написаны от root):
Редачим (если он есть, если его нет значит совсем старая установка и надо в PHP.INI отключить, смотреть сл.сообщение тогда):
nano /home/totum/totum-mit/FPM.totum.php.ini
Добавляем:
session.upload_progress.enabled = off
Сохраняем рестартуем FPM:
service php8.3-fpm restart
👍2
Если у вас древняя установка то у вас не будет вынесенного файла настроек ini для FPM воркеров FPM.totum.php.ini
Далее команды от root:
В этом случае выполняем:
Проверка (должно быть OFF):
Рестартуем FPM:
Далее команды от root:
В этом случае выполняем:
sed -i.bak 's/^;\?session\.upload_progress\.enabled = On$/session.upload_progress.enabled = Off/' /etc/php/8.3/fpm/php.ini
Проверка (должно быть OFF):
php-fpm8.3 -i | grep upload_progress.enabled
Рестартуем FPM:
service php8.3-fpm restart
Это временная защита от уязвимости (понижение уровня с Князь Тьмы до Всадник Апокалипсиса) – полная только обновление до PHP 8.3.36 и выше
Обновления PHP в репо! Напоминаю, что речь идет про PHP, а не про Totum
apt update
apt upgrade
выполнять должен человек, который видел хоть раз как консоль работает!
apt update
apt upgrade
выполнять должен человек, который видел хоть раз как консоль работает!
😁5❤2
V8 на GitHub
- Ubuntu 26.04
- PHP 8.5
- Только PRO (MIT-репозиторий в архиве, и больше никаких движений по нему не будет)
- PHP-репозиторий через зеркало Yandex
- Базовый поиск через расширение
- Всякие штуки для подключаемых интерфейсов, которые нам нужны для платформы интернет-магазинов и по которым пока не будет инструкций
- Исправление ошибок с сессиями
АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ УТИЛИТОЙ `bin/totum git-update` НЕВОЗМОЖНО!
ТОЛЬКО ЧЕРЕЗ РАЗВЁРТЫВАНИЕ НОВОГО СЕРВЕРА И ПЕРЕНОС БД И ФАЙЛОВ.
Тотум как платформа останется на GitHub, и его по-прежнему можно будет устанавливать отдельно. У нас нет времени модифицировать лицензии, поэтому при использовании Тотума как платформы для разработки все лицензии останутся прежними.
ПС: да, теперь устанавливается в /home/totum/totum-pro (учитывайте, если наткнетесь где в старых инструкциях на пути с -mit)
- Ubuntu 26.04
- PHP 8.5
- Только PRO (MIT-репозиторий в архиве, и больше никаких движений по нему не будет)
- PHP-репозиторий через зеркало Yandex
- Базовый поиск через расширение
pg_trgm для PostgreSQL- Всякие штуки для подключаемых интерфейсов, которые нам нужны для платформы интернет-магазинов и по которым пока не будет инструкций
- Исправление ошибок с сессиями
АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ УТИЛИТОЙ `bin/totum git-update` НЕВОЗМОЖНО!
ТОЛЬКО ЧЕРЕЗ РАЗВЁРТЫВАНИЕ НОВОГО СЕРВЕРА И ПЕРЕНОС БД И ФАЙЛОВ.
Тотум как платформа останется на GitHub, и его по-прежнему можно будет устанавливать отдельно. У нас нет времени модифицировать лицензии, поэтому при использовании Тотума как платформы для разработки все лицензии останутся прежними.
ПС: да, теперь устанавливается в /home/totum/totum-pro (учитывайте, если наткнетесь где в старых инструкциях на пути с -mit)
❤3👎1
Сервисы также обновлены на 8.5
Упрощена структура, библиотеки подняты до актуальных версий, короче 🍬
Мы тестировали только с новыми установками Тотум v8 ‹-› New services
Упрощена структура, библиотеки подняты до актуальных версий, короче 🍬
Мы тестировали только с новыми установками Тотум v8 ‹-› New services
❤1👍1