В статье мы разберем пример использования подхода — дробления данных (chunking). В мире разработки полно задач, связанных с обработкой больших объёмов данных. Будь то логи, дампы баз данных или файлы с медиа-контентом — эффективная работа с такими ресурсами становится критичной. В этой статье мы разберём практический пример многопоточной обработки файла в Java, где исходный файл разбивается на небольшие фрагменты (чанки) фиксированного размера. Такой подход лежит в основе многих систем: от торрент-клиентов до распределённых файловых хранилищ.
Читать далее »Замеряем время выполнения в Java.
Замер времени выполнения кода — не редкая задача в разработке. Мы постоянно измеряем, сколько работает запрос к БД, сколько сортируется массив, сколько выполняется тяжёлый алгоритм. Казалось бы, что тут сложного? Написал System.currentTimeMillis() до и после — и готово.
Но на практике всё немного сложнее. В этой статье мы:
- Создадим готовое решение, которое можно сразу скопировать в проект
- Разберём, почему стандартные подходы плохи
- Напишем свой класс
MeasureTimeс нуля - Поймём, как правильно измерять время в разных сценариях
Как полностью затереть локальную ветку и привести её к состоянию из удаленного репозитория
Бывают ситуации, когда локальные изменения в ветке настолько запутались, что проще полностью сбросить всё и начать «с чистого листа» от удаленной версии. В этой статье рассмотрим два надежных способа, как это сделать.
Читать далее »Валидация полей на примере параграфа в Drupal 11 с использованием @Constraint
При разработке на Drupal рутинная необходимость это — добавление кастомной валидации для полей внутри сущностей. Стандартные средства Drupal (например, валидация через hook_form_alter) не всегда подходят, особенно когда нужно, чтобы валидация работала при любом способе сохранения сущности — через форму, REST API, JSON:API или миграции. Кроме того, в hook_form_alter сложно добраться до полей вложенных сущностей, как например, параграфы, чтобы подсветить ошибку именно там, где она произошла.
В этой статье мы рассмотрим, как добавить валидацию к полю внутри параграфа с использованием системы Constraints (ограничений) Drupal 11, например, чтобы она работала при редактировании node, в которой есть поле с параграфами.
В качестве примера мы проверим, что поле field_ticketland в параграфе типа afisha содержит корректный URL на сайт ticketland.ru.
Как узнать количество строк в PostgreSQL без COUNT(*)
В повседневной работе с PostgreSQL иной раз возникает задача оценить или узнать точное число строк в таблице. Классический способ — SELECT COUNT(*) FROM table — работает, но для больших таблиц он может быть медленным, поскольку выполняет полное сканирование таблицы или индекса. К счастью, есть альтернативные методы, которые либо дают мгновенный результат (пусть и приблизительный), либо позволяют оценить селективность сложного запроса без его фактического выполнения.
Как правильно измерить длину строки в Java: от length() до графем
Строки в Java кажутся простыми, из коробки поддерживается UTF-16, но стоит вам добавить эмодзи, и привычный length() выдаёт «магические» числа. В этой статье разберём, как на самом деле устроены строки в Java, почему эмодзи занимают два char, и как корректно подсчитать количество символов, видимых глазом.
Получение списка SQL-запросов через Devel: отладка в нестандартных сценариях
В процессе разработки на Drupal иногда возникает необходимость проанализировать, какие SQL-запросы выполняются при обработке того или иного запроса. Стандартный интерфейс Devel (например, панель внизу страницы) отлично справляется с этой задачей для обычных HTML-страниц.
Однако, что делать, если мы имеем дело с AJAX-запросом, загрузкой файла через file_transfer() или другими нестандартными точками входа, где стандартный вывод недоступен? В этой статье мы рассмотрим программный способ получения лога запросов с помощью API модуля Devel, который работает в любом контексте.
Получить список прав определенной роли
Когда прав очень много, не удобно смотреть через админку, что же там выдано в роли. Особенно, если роль точечно добавляет несколько разрешений.
Читать далее »Выполнение действий после сохранения ноды – обход стандартных ограничений
Поговорим о ситуациях, когда hook_node_insert, hook_node_update гибки не на столько хорошо, и нужны альтернативные способы выполнения кода после полного завершения транзакций или даже после отправки ответа браузеру.
Что происходит с The Elder Scrolls 6

Семь с половиной лет. Ровно столько прошло с того июньского дня 2018 года, когда на сцене E3 загорелся зелёный логотип с горами и небом. Никакого геймплея, никакого названия, никакой даты — просто подтверждение: «TES VI существует». И с тех пор — тишина. Ну, почти.
Читать далее »