Бывают ситуации, когда локальные изменения в ветке настолько запутались, что проще полностью сбросить всё и начать «с чистого листа» от удаленной версии. В этой статье рассмотрим два надежных способа, как это сделать.
Читать далее »Как полностью затереть локальную ветку и привести её к состоянию из удаленного репозитория
Валидация полей на примере параграфа в 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 существует». И с тех пор — тишина. Ну, почти.
Читать далее »Шпаргалка: извлечь текст из поля bytea (binary) в PostgreSQL
Cитуация: поле в таблице имеет тип bytea (бинарные данные), но вы точно знаете, что внутри него хранится обычный текст (например, из-за ошибки проектирования или legacy-системы).
Как обновить ветку в Git без переключения на неё
Предположим, вы работаете в ветке feature, а коллеги обновили master. Вам нужно подтянуть свежие изменения в локальный master, но не хочется терять контекст и переключаться туда-обратно. Стандартный git pull работает только с текущей веткой. Что делать?