Пишем на C++ свою агрегационную функцию для HP Vertica

Предыстория В проекте возникла необходимость отобразить товары, которые поставляются или могут поставляться в определенные регионы Казахстана. У каждого поставщика есть перечень товаров с указанием регионов поставки. Есть таблица товаров, назовем ее product. Регионов в Казахстане всего 17, поэтому я решил хранить данные о регионах поставки в одном числовом поле c помощью битов. Таблица product выглядит
Читать далее…

Оптимизация Grok (Logstash)

Повествование о том, как неэффективный разбор grok забил процессоры на 100%. Немного предыстории. С начала года у нас было настроено расширение к PostgreSQL под названием pg_audit (см. https://github.com/pgaudit/pgaudit) для аудита доступа к таблицам и колонкам таблиц. Логи pg_audit отправляются filebeat’ом в logstash, где разбираются через grok. На тот момент grok-выражение было следующим: %{TIMESTAMP_ISO8601:pg_aud_log_date} %{DATA:pg_aud_time_zone} %{DATA:pg_aud_db_name}
Читать далее…

Просмотр привилегий пользователей к таблицам

Сегодня возникла необходимость просмотреть права доступа всех пользователей. Быстрого и подходящего решения не получилось найти. В итоге нашел пример запроса выводящего привилегии для одной таблицы, а дальше соединил этот запрос с запросом всех таблиц. В итоге получился следующий запрос. SELECT rtg.grantee, rtg.privilege_type, t.table_name FROM information_schema.tables t JOIN information_schema.role_table_grants rtg ON t.table_name = rtg.table_name ORDER BY
Читать далее…

Установка PostgreSQL из исходников на Ubuntu 16.04

Склонируйте репозиторий PostgreSQL git clone https://github.com/postgres/postgres.git После окончания загрузки файлов перейдите в созданную директорию cd postgres Переключитесь на ветку REL_10_STABLE git checkout REL_10_STABLE Перед непосредственно сборкой проект нужно установить вспомогательно ПО. sudo apt-get install libreadline-dev sudo apt-get install bison sudo apt-get install flex Сконфигурируйте проект ./configure Соберите проект make Установить postgres sudo make install Переключитесь
Читать далее…

Установка Kubuntu c установочной флешки

Делаем на Kubuntu установочную флешку для установки Kubuntu (простите за тавтологию). Для начала устанавливаем UNetbootin на странице https://unetbootin.github.io/linux_download.html можно его скачать, там же есть инструкция по установке. Вот так выглядит главное окно программы: Записываемый на флешку образ можно скачать либо по сети, либо выбрать iso на вашем компьютере. Первая проблема, которую можно поймать: /dev/sdb1 не
Читать далее…

Target lists can have at most 1664 entries в PostgreSQL

Давно не писал… На прошлой неделе поймал такую ошибку: ERROR: target lists can have at most 1664 entries Данная ошибка возникла из-за того, что появилось много зависимостей между сущностями(Entity). Когда идет запрос данных через Hibernate, то JOIN’ится много таблиц, и общее количество получаемых полей начинает превышать 1664. В нашем случае это было около 1700 полей.
Читать далее…

Удаление числа из строки

Иногда мы пользуемся трюком, сохраняя числа (ID из базы данных) в строке через запятую. Например: «1024,15,8,0,55». И теперь, допустим, какое-то число из этого списка не нужно, и его необходимо убрать из исходной строки. Как это реализовать? Первый вариант: 1) разбить строку по запятой 2) отфильтровать удаляемое число 3) собрать строку заново Второй вариант (допустим, удаляем
Читать далее…

Некоторые вещи про закачку файлов

В любом web-проекте в определенное время возникает вопрос как загружать/скачивать файлы. В этой статье рассмотрим важные аспекты этих процедур: Можно загружать файлы не только в виде байт, но и формате base64. Файл загружается на веб-сервер и сохраняется как временный файл При передаче файла на сервер используется кодирование multipart/form-data Из временного файла можно получить оригинальное название
Читать далее…

Бинарный алгоритм вычисления НОД

Наибольшим общим делителем (НОД) для двух целых чисел называется наибольший из их общих делителей. Например: для чисел 8 и 12 наибольший общий делитель равен 4. Ранее мы уже рассматривали нахождение НОД с помощью Алгоритма Евклида: long gcd(long a,long b){ return b == 0 ? a : gcd(b,a % b); }long gcd(long a,long b){ return b
Читать далее…

Как из Java обратиться к сервису по протоколу HTTPS

Это юбилейная 100-я статья!!! Уже не знаю в какой раз приходится обращаться к сервису по протоколу HTTPS, и каждый раз уходит время, чтобы воспроизвести шаги. Сегодня решил все-таки написать шпаргалку и больше не тратить время на такую проблему. Для начала открываем сайт в браузере: В адресной строке браузера рядом с текстом https:// есть иконка, нажав
Читать далее…

Блог программиста: базы данных, Java, инфраструктура

Я пишу этот блог с 2013 года. Без редакторов, без контент-плана и без цели набрать аудиторию. Просто когда решаю что-то нетривиальное — записываю, чтобы самому не искать потом. Получилось больше 100 статей про PostgreSQL, Java, Spring, Logstash, Linux и кучу всего рядом. Если вы сюда попали из поиска — скорее всего, нашли то, что нужно.

Базы данных

Большую часть рабочего времени я провожу с PostgreSQL. Отсюда и большинство статей: установка из исходников, управление привилегиями, pg_audit, специфические ошибки движка. Однажды поймал "target lists can have at most 1664 entries" — оказалось, Hibernate джойнил столько таблиц, что суммарное количество полей перевалило за 1664. Такое не гуглится быстро, поэтому написал.

PostgreSQL

Актуальная версия сейчас — PostgreSQL 18, там появилась нативная асинхронная I/O-подсистема с поддержкой io_uring, что даёт до 3x прироста на чтении с диска. Мои статьи про более ранние версии, но синтаксис запросов, работа с привилегиями через information_schema и настройка pg_audit — всё это работает без изменений. PostgreSQL поддерживает каждую мажорную версию 5 лет. PostgreSQL 14 уходит в EOL в ноябре 2026 — если у вас он на проде, пора планировать апгрейд.

HP Vertica и написание UDAF на C++

Был проект, где нужно было хранить данные о регионах поставки товаров в битовом поле — 17 регионов Казахстана, по одному биту на регион. Стандартных агрегатных функций Vertica для этого не хватило, пришлось писать свою на C++. Это один из немногих русскоязычных материалов по теме пользовательских агрегационных функций в Vertica — если вы с этим столкнулись, статья должна помочь.

MySQL, SQLite, DB2

PostgreSQL не всегда нужен. MySQL и SQLite появляются в блоге там, где задача проще или стек был задан заранее. DB2 — это уже корпоративные проекты с другой документацией и совершенно другим поведением в edge-кейсах.

Java и фреймворки

Java — основной язык в большинстве моих проектов. Spring Boot, JBoss, Keycloak — не в теории, а в контексте конкретных задач. Написал шпаргалку по HTTPS-соединениям из Java, потому что каждый раз заново тратил время на воспроизведение шагов. Это буквально 100-я статья в блоге.

Spring и Spring Boot

Spring Boot 4.0 вышел в ноябре 2025, строится на Spring Framework 7 и требует минимум Java 17. Если на вашем проекте ещё Java 8 или 11 — на Boot 4.x не перейдёте, только 2.x или 3.x. Мои статьи относятся к более ранним версиям стека, но принципы работы с контекстом и конфигурацией не поменялись принципиально. Разве что Jakarta EE вместо javax — но это отдельная история.

JBoss, EAP и Seam Framework

Seam и JBoss EAP встречаются в блоге потому, что я с ними работал. Новых проектов на Seam не делают — но легаси никуда не делось, и иногда нужен конкретный пример, а не ссылка на документацию 2009 года.

Scala и Play2

Был период, когда я плотно работал со Scala и Play2. Несколько статей оттуда. Если вы с этим стеком — возможно, пригодится.

Безопасность и аутентификация

Keycloak, OAuth2, OpenID Connect, ЭЦП — всё это появилось в блоге из реальных задач на проектах. Настройка Keycloak как IdP, HTTPS-соединения с клиентскими сертификатами, работа с ЭЦП в казахстанских госсистемах. Последнее — тема отдельная, и материалов на русском по ней немного.

Инфраструктура: Linux, Logstash, Apache

Настройка окружения — это та часть работы, которую не любят документировать. Я стараюсь записывать: установка Kubuntu с флешки, настройка Apache, работа с Virtual Box. Мелочи, но каждый раз отнимают время, если не записать.

Logstash, Grok и история про 100% CPU

Однажды неэффективный Grok-паттерн забил все процессоры на сервере до 100%. Причина — патологический backtracking в регулярном выражении при разборе pg_audit-логов через filebeat и Logstash. В статье разобран конкретный паттерн, показано почему он плохой и как переписать. Если вы столкнулись с чем-то похожим — скорее всего, проблема там же.

Мобильная разработка: Android

Несколько статей про Android SDK и CyanogenMod. Плюс два приложения в Google Play, которые я написал сам: "Неизвестный пасьянс" и "Программистские способности" — тест на алгоритмическое мышление, который используется в реальном найме. Ссылки в боковой панели.

Алгоритмы и TopCoder

Отдельная рубрика с алгоритмическими задачами. Бинарный алгоритм вычисления НОД, удаление числа из строки, битовые операции. Часть материала появилась из участия в TopCoder SRM — на сайте есть отдельная страница с моей статистикой решённых задач. Полезно, если готовитесь к техническому интервью или просто не помните, как работает алгоритм Евклида.

Утилиты, которые я сделал для себя

Кроме статей, на сайте есть несколько небольших инструментов, которые я написал под конкретные нужды:

  • Генератор паролей
  • Утилита для стирания кавычек из текста
  • Перемешивание букв в словах — для тестирования читаемости
  • Статистика TopCoder SRM

Всё это живёт здесь уже больше 10 лет. Часть инструментов я до сих пор использую сам.