Создаём умного Telegram-бота на Kotlin: асинхронная архитектура с корутинами и обработкой медиа-групп

Мир Telegram-ботов гораздо глубже, чем кажется на первый взгляд. Если вы создаёте что-то большее, чем «бот, отвечающий /start», рано или поздно столкнётесь с: параллельной обработкой входящих сообщений; групповыми медиа-сообщениями; синхронизацией доступа к базе; необходимостью ограничения времени выполнения команд. В этой статье мы пройдём путь от базовой архитектуры до реализации производительного, отказоустойчивого Telegram-бота на Kotlin, использующего корутины, асинхронную агрегацию медиа-групп и безопасные транзакции в базе данных.

Профессиональное оповещение об ошибках в Apache NiFi

Ранее в моем блоге уже публиковалось несколько статей об Apache NiFi, сейчас же мы обратим внимание на то, как можно организовать процесс оповещения об ошибках, возникших в результате работы потока обработки данных.

Дрессировка парнокопытных, или как дообучить LLAMA3 с минимальными жертвами

Каждый первый человек, имеющий минимальное представление об интернет пространстве и его состоянии на текущий момент, уже слышал такие странные слова, как ChatGPT, Deepseek и прочие искусственно-интелектуальные штуки.

Шпаргалка по keycloakify

Сегодня хочу рассказать, как спокойно начать проект на Keycloakify для создания темы для Keycloak. Версия первого — 11.8.24, а второго — 26 соответственно. Если останутся вопросы по каким-то моментам, идем в документацию.

Colima: бесплатная Open-Source альтернатива Docker для macOS и Linux

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

Пара важных заметок об импорте пользователей LDAP в Liferay

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

Как тестировать локальный фронт на данных с прода

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

CSS нового поколения: свежие возможности, которые сделают вашу верстку эффективнее и элегантнее

CSS уже давно вышел за рамки простого языка оформления — теперь это мощный инструмент, способный управлять логикой и динамикой интерфейсов. Многие задачи, которые раньше можно было решить только с помощью JavaScript, сегодня реализуются средствами самого CSS. Особенно заметен этот прогресс в последние год-два: язык обогатился новыми функциями, расширенными возможностями анимации, инструментами для повышения производительности и даже встроенной математикой. В этой статье мы собрали ключевые и наиболее полезные нововведения CSS последних лет, которые уже поддерживаются большинством современных браузеров.

Использование type mapping при передаче Kafka сообщений между сервисами

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

Nix: как я заменил кучу менеджеров версий пакетов одним

Во время разработки программного обеспечения часто приходится сталкиваться с необходимостью использования разных версий языков программирования и их пакетов в зависимости от проекта. Наличие же кучи менеджеров версий пакетов для этого утомляет: каждый из них имеет свои особенности, команды и конфигурации. В этой статье мы рассмотрим, как инструмент nix-shell из пакетного менеджера Nix может стать универсальной альтернативой.

Нововведения в CSS. :has(), @container, scroll-driven анимации и другие фишки для эффективной разработки

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

Аутентификация через Keycloak в сценариях нагрузочного тестирования с JMeter

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

Ускорение разработки Liferay-модулей с помощью Docker Compose

Введение Разработка модулей для Liferay может сталкиваться с рядом технических трудностей на этапе настройки окружения. Среди них: отсутствие нужных системных пакетов или Java в ОС; сложность очистки портала или базы данных; нестабильность среды после неудачного деплоя модуля.

Автоматизация импорта шаблонов публикаторов контента в Liferay 7.3

В Liferay публикаторы контента (Content Display Templates) используются для визуализации и форматирования данных, полученных из различных источников. Как правило, они реализуются с помощью шаблонов на FreeMarker (FTL) и применяются для вывода списков сущностей, результатов поиска, фильтров и прочих визуальных компонентов.

Немного про Coroutines в Kotlin

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

Стоит ли использовать Netdata в 2025 году?

Стильный, модный, молодежный. Встречайте Netdata: инструмент мониторинга, который может всё и сразу. Он простой, быстрый, визуально приятный и почти не требует настройки. Но так ли это на самом деле? В этой статье разберёмся, что такое Netdata, где он мега хорошо, а где мега плох, и кому он действительно подойдёт.

Составные индексы и INCLUDE в PostgreSQL

Индексы в СУБД существенно ускоряют поиск и фильтрацию данных. Если запрос использует несколько колонок в WHERE или ORDER BY, обычные одноколоночные индексы могут оказаться неэффективными. В таких ситуациях стоит рассмотреть составные индексы (Composite Index).

5 полезных свойств CSS, которые стоит попробовать в своих проектах

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

Семантометрия как способ оценки научных исследований

Сегодня поговорим о такой малоизвестной мере оценки деятельности ученого как семантометрия. Семантометрия – это метод оценки научного исследования, построенный на предположении, что для оценки значимости публикации нужен полный текст.

Эйлеров путь в реальности: семимостье Санкт-Петербурга и семь мостов Кёнигсберга

Мосты Кёнигсберга стали источником вдохновения для одной из первых задач теории графов. В Санкт-Петербурге тоже есть место, связанное с семью мостами — Семимостье.   Задача о семи мостах Кёнигсберга     Задача заключалась в следующем: можно ли пройти по всем семи мостам Кёнигсберга, не проходя по одному и тому же мосту дважды? Эйлер доказал, что такое путешествие невозможно, положив тем самым начало теории графов.

Bind-монтирование vs Docker Volume

При работе с Docker у вас есть два способа хранения данных: bind-монтирование (bind mount) и Docker Volume. Оба позволяют контейнерам сохранять данные между перезапусками, но работают по-разному. В этой статье мы разберем их отличия, плюсы и минусы, а также рассмотрим, как изменить директорию для хранения Docker Volume.

Интеграция Gitea и Jenkins: автоматизация CI/CD для ваших проектов

В современной разработке программного обеспечения автоматизация играет ключевую роль. Она позволяет ускорить процессы сборки, тестирования и развертывания, минимизировать ошибки и повысить качество кода. Если вы используете Gitea для хостинга своих Git-репозиториев и Jenkins для автоматизации CI/CD, то интеграция этих инструментов станет мощным шагом к оптимизации вашего рабочего процесса. В этой статье мы подробно разберём, как настроить интеграцию Gitea и Jenkins, чтобы автоматически запускать сборки и тесты при изменениях в определённых ветках. Даже если вы новичок, вы сможете легко разобраться в процессе и применить его в своих проектах.

\p{C}: как охватить все служебные символы одним регулярным выражением

Не так давно, разрабатывая поток обработки данных в Apache NiFi, мы столкнулись с необходимостью очистки результата конвертации в base64 от всех служебных символов, переносов строк и прочих "невидимых" символов, которые, однако, мешали целевому сервису принять наши данные в теле POST-запроса. Нам на помощь пришло Unicode-based регулярное выражение \p{C}

Scratches файлы в Intellij Idea

В работе иногда может понадобиться создать временные заметки или набросать код вне контекста проекта. Вместо того, чтобы переключаться на другое приложение, вы можете использовать scratches файлы.  Что они умеют: 1.

Реализация своего сервлета рядом с Dispatcher Servlet

Введение Очень редко, но иногда бывает необходимо использовать дополнительный сервлет рядом со стандартным Dispatcher servlet-ом Spring Web MVC. В данной статье будет рассмотрено подключение сервлета рядом с dispatcher servlet, а также настройка Spring Security.

Еще один способ подключения common модуля для микросервисов

Ранее в одной из статей в нашем блоге был рассмотрен один из возможных способов подключения разделяемого между микросервисами common модуля при помощи ImportBeanDefinitionRegistrar Spring-а. Он обладает существенным недостатком: инструменты статического анализа кода не могут понимать такую “уличную магию”. Поэтому в данной статье рассмотрен другой способ решения этой же задачи при помощи классического Spring starter-а.

Optimistic VS pessimistic locking в SQL

Пессимистическая и оптимистическая блокировки в SQL При работе с высоконагруженными системами нередко возникает задача организовать безопасное изменение данных, чтобы избежать конфликтов при выполнении параллельных запросов.

Зачем Реакту понадобился компилятор?

React используется для создания интерактивных пользовательских интерфейсов (UI). Под интерактивностью подразумевается то, что когда пользователь взаимодействует с UI, мы обычно хотим обновить страницу новой информацией, полученной в результате этого взаимодействия.
RSS (Открывает новое окно)(Открывает новое окно)
thumbnail Vadim Mikhu
Записи: 1
Дата: 03.07.25
thumbnail Никита Рогаленко
Записи: 15
Дата: 01.07.25
thumbnail Arseny Antonovich Konovalov
Записи: 1
Дата: 25.06.25
thumbnail Алексей Кондратьев
Записи: 1
Дата: 07.06.25
thumbnail Romo Fedoroff
Записи: 44
Дата: 05.06.25
thumbnail Александр Аксёнов
Записи: 9
Дата: 07.05.25
thumbnail Ольга Денисовна Смирнова
Записи: 6
Дата: 24.03.25
thumbnail Daria Zuban
Записи: 12
Дата: 07.03.25
thumbnail Marina Pashnina
Записи: 35
Дата: 03.03.25
thumbnail Тимофей Перцев
Записи: 36
Дата: 07.02.25
thumbnail Алексей Егошин
Записи: 17
Дата: 13.01.25
thumbnail Дмитрий Сазонов
Записи: 61
Дата: 06.12.24
thumbnail Александра Пирс
Записи: 30
Дата: 29.11.24
thumbnail Nikolay Emchenko
Записи: 19
Дата: 27.11.24
thumbnail Jonathan F. Keker
Записи: 6
Дата: 07.11.24
thumbnail Andrey Karabanov
Записи: 2
Дата: 31.10.24
thumbnail Dmitry Afanasiev
Записи: 63
Дата: 04.10.24
thumbnail Evgenij Tsopa
Записи: 52
Дата: 02.10.24
thumbnail Dmitry Sheshukov
Записи: 17
Дата: 26.09.24
thumbnail Владимир Карташев
Записи: 1
Дата: 17.09.24
thumbnail Михаил Алексеевич Нягин
Записи: 1
Дата: 29.08.24
thumbnail Sviatoslav Osipov
Записи: 4
Дата: 04.08.24
thumbnail Егор Александрович Стуков
Записи: 1
Дата: 01.06.24
thumbnail Лоликонщик Отбитый
Записи: 3
Дата: 31.05.24
thumbnail Антон Семёнович Макаренко
Записи: 3
Дата: 28.05.24
thumbnail Danil Khanalainen
Записи: 3
Дата: 08.05.24
thumbnail Alexey Weiss
Записи: 17
Дата: 07.05.24
thumbnail Денис Серянкин
Записи: 2
Дата: 18.12.23
thumbnail Anna Ershova
Записи: 2
Дата: 30.10.23
thumbnail Erik Karapetyan
Записи: 12
Дата: 09.09.23
thumbnail Pavel Danilov
Записи: 12
Дата: 09.09.23
thumbnail Maxim Zhukov
Записи: 152
Дата: 20.06.23
thumbnail Vladislav Sivirin
Записи: 1
Дата: 22.05.23
thumbnail Vadim Kholoshnia
Записи: 1
Дата: 17.04.23
thumbnail Andrei Maksimov
Записи: 19
Дата: 21.03.23
thumbnail И Горь
Записи: 27
Дата: 20.02.23
thumbnail Dmitry Komarov
Записи: 2
Дата: 02.06.22
thumbnail Semyon Gruzdev
Записи: 1
Дата: 17.11.21
thumbnail Victor Scherbakov
Записи: 3
Дата: 03.09.21
thumbnail Ivan Kayukov
Записи: 10
Дата: 17.08.21
thumbnail Alexander Zhermal
Записи: 8
Дата: 16.04.21
thumbnail Alexander Yarkeev
Записи: 42
Дата: 23.12.20
thumbnail Alexey Pismak
Записи: 2
Дата: 09.12.20
thumbnail Александр Исаев
Записи: 5
Дата: 15.09.20
thumbnail Александр Пашнин
Записи: 25
Дата: 10.09.20
thumbnail Danil Sinitskiy
Записи: 3
Дата: 02.09.20
thumbnail Valeriy Urrievich Kireev
Записи: 26
Дата: 15.01.20
thumbnail Vladimir Nikolaev
Записи: 14
Дата: 30.12.19
thumbnail Ivan Uskov
Записи: 23
Дата: 16.12.19
thumbnail Андрей Дьяков
Записи: 25
Дата: 27.06.19
thumbnail Sergey Zhmylove
Записи: 45
Дата: 14.03.18
thumbnail Lev Koznov
Записи: 18
Дата: 14.07.17
thumbnail Никита Валерьевич Акентьев
Записи: 1
Дата: 29.06.17
thumbnail DEADBEEF
Записи: 1
Дата: 16.01.17
thumbnail Никита Патрахин
Записи: 2
Дата: 15.08.16
thumbnail Vladimir Berlev
Записи: 3
Дата: 26.11.15
thumbnail Sergey Klyaus
Записи: 58
Дата: 21.06.15
thumbnail Олег Олегович Кулаченко
Записи: 1
Дата: 28.01.15
thumbnail Pakhom Golynga
Записи: 20
Дата: 03.03.14
thumbnail Vladislav Sovinskiy
Записи: 11
Дата: 10.01.14
thumbnail Илья Валентинович Перминов
Записи: 19
Дата: 04.09.13
thumbnail Konstantin Borzov
Записи: 7
Дата: 20.06.13
thumbnail Anthony Dmitriev
Записи: 4
Дата: 19.02.13
thumbnail Nicolay Smirnov
Записи: 6
Дата: 02.05.12
thumbnail Alexander Deiter
Записи: 16
Дата: 08.09.11
thumbnail Serge Klimenkov
Записи: 8
Дата: 26.07.11
thumbnail Roman Ambrosenko
Записи: 3
Дата: 18.01.11
thumbnail Sergey Shilin
Записи: 9
Дата: 05.11.10
thumbnail Ruslan F. Isbarov
Записи: 1
Дата: 31.03.10
thumbnail Алексей Сергеевич Лемешев
Записи: 1
Дата: 22.03.10