Доступ к Kafka из/вне Docker контейнеров

При локальной разработке с Kafka могут возникнуть проблемы с доступом, если она запущена в Docker контейнере, и требуется обращение как изнутри Docker так и снаружи. В Kafka запись и чтение осуществляется в ноду лидера для заданной партиции. Клиент может обратиться к любому узлу Kafka, чтобы узнать по какому адресу нужно делать операцию записи/чтения, даже если
Читать далее…

Бэкапирование базы данных PostgreSQL

Все мы знаем, что нужно периодически делать резервные копии баз данных. И почему-то делаем это только для боевых баз данных, но не для тестовых. Хотя потеря тестовых данных тоже критична, т.к. на восстановление данных может уйти достаточное количество времени. База данных может повредиться по многим причинам. Например, операции update или delete с некорректным условием и
Читать далее…

Создаем Searchable PDF с помощью Tesseract OCR

Недавно на работе столкнулись с задачей разпознавания сканированных документов и поиска по ним. Мною был рассмотрен движок распознавания текста с открытым исходным кодом Tesseract. В данной статье будут рассмотрены основные моменты возможной реализации. Предположим, что у нас есть многостраничный отсканированные документ в формате PDF, но нераспознанный. И наша задача распознать текст с помощью OCR (Optical
Читать далее…

Теги: , , ,

Транзакции в debug-режиме

Транзакции в Hibernate работают не всегда прозрачно. Если для отладки запросов в Hibernate мы используем show-sql: true в application.yml, то для включения логирования транзации нужно переключить уровень логирования на DEBUG для определенного класса. Следующая настройка для Hibernate 5 и системы логирования SLF4J. В файл logback-spring.xml (или logback.xml) добавьте следующую строку: <logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="DEBUG"/><logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="DEBUG"/>
Читать далее…

Во сколько раз Base64 увеличивает размер в байтах

Base64 — стандарт кодирования байтов при помощи только 64 символов (A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации). Одним байтом можно закодировать 256 значений (28 бит), в то время как Base64 только 64 (26 бит). Из этого следует соотношение 28 + 28 + 28 = 26 + 26 +
Читать далее…

Теги: , , ,

Преобразование в сетевой порядок расположения байт (Java)

HtoN (Host to Net) — узловой порядок в сетевой. Функция htons преобразует узловой порядок расположения байтов в сетевой порядок расположения байтов. В short помещаются все возможные порты от 0 до 65535 (фактически от -32768 до 32767, т.к. в Java знаковый short): static short htons(short val) { return (short) ((val & 0xff) << 8 | (val
Читать далее…

Теги: ,

Замер времени bash-скриптом

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

Удаление временно ненужных файлов

В очередной раз у разработчика закончилось место на жестком диске и начинается головоломка: «Что почистить?» В данной заметке предлагается почистить файлы сборок старых проектов. Ведь непонятно, когда понадобятся сборки и понадобятся ли вообще, а место они занимают много. Внимание все операции нужно делать с осторожностью, чтобы не удалить ничего лишнего! Рассмотрим очистку места на примере
Читать далее…

Hibernate Envers проблема с размером приращения последовательности

В проект трехлетней давности не получилось прикрутить Hibernate Envers, возникала ошибка при запуске приложения: Caused by: org.hibernate.MappingException: The increment size of the [hibernate_sequence] sequence is set to [1] in the entity mapping while the associated database sequence increment size is [50]. На том проекте Envers не сильно нужен был, поэтому обошлись без него. На новом
Читать далее…

Полное удаление метрик Prometheus

В один прекрасный день у нас на тестовом сервере поломался Prometheus, возможно, из-за частой смены времени на сервере (это нужно было для целей тестирования основной системы). Удалять метрики можно через API, но в моем случае это почему-то не помогло, поэтому пришлось применить радикальный способ. Способ заключается в удалении содержимого директории базы данных временных рядов /var/lib/prometheus/.
Читать далее…