Русская языковая локаль в docker-контейнере с Alpine

К сожалению, система локали в musl libc неполная. В Alpine нет инструментов для генерации локалей или настройки переменной MUSL_LOCPATH. По этой причине приходится искать варианты. Один из них предлагает проект локализации musl libc под названием rilian-la-te. На данный момент поддерживается 7 локалей, в том числе: ch_DE, de_CH, de_DE, en_GB, en_US, fr_FR и ru_RU.

Читать дальше

Как обновить объекты внутри массива JSONB с помощью PostgreSQL

Допустим, вы решили сохранить данные в базе данных в виде JSON или JSONB и обнаружили, что только что создали себе новые проблемы. Вы в этом не одиноки.

JSONB — мощный инструмент, но он требует дополнительных затрат, поскольку нужно адаптировать способ запроса и обработки данных. И нередко загружать весь объект JSONB в память, преобразовывать его, используя любимый язык программирования, и затем сохранять его обратно в базу данных. И вы только что создали еще одну проблему: узкие места в производительности и перерасход ресурсов.

В этой статье мы рассмотрим, как обновить конкретное значение объекта внутри массива одним запросом.

Читать дальше

Три действенных совета о том, как избежать заброшенных, незаконченных проектов

Почему «замороженный проект» — невероятно распространенное явление? Мы все придумали прекрасные идеи, а затем с азартом потратили часы на написание / программирование / планирование / отчетность / {вставьте глагол, относящийся к завершению проекта}, только чтобы усомниться в собственных силах, потерять мотивацию, или просто передумали, и по какой-то причине закрадывается чувство слабости. Что может очень деморализировать.

Читать дальше

Как быстро удалить большие файлы, пароли или личные данные из истории Git?

Как очистить историю Git, если вы допустил ошибку, передав большие файлы в репозиторий, который теперь начинает расти в геометрической прогрессии? А что если произошла утечка конфиденциальных данных? Очевидно, что файлы не могут быть легко удалены из репозитория. Нельзя просто зайти в хранилище, отметить ненужное и нажать <delete>

Читать дальше

Локальный LRU-кэш

Разделяемое состояние, если оно обладает признаками изменяемости, должно настоятельно нуждаться в ошибке, такова общепризнанная истина.

— с извинениями к Джейн Остин

Как учили нас г-жа Остин и Хенрик Айхенхардт, разделяемое изменяемое состояние является корнем всего зла. Тем не менее, официальная документация functools предлагает нам писать код наподобие следующего…

Читать дальше

Использование реверсного SSH для загрузки файлов с удаленной машины на локальную

Работая с некоторым файлом на удаленном сервере, может понадобится загрузить его на локальную машину (например, лог, бэкап или файл конфигурации). Это легко сделать, если открыть обратный SSH-порт в соединении с сервером.

Читать дальше

Параллельные вычисления в Python с Dask

Структуры данных в NumPy и Pandas основополагающие, но они ограничены размером ОЗУ и одним ядром процессора. Dask позволяет производить параллельные вычисления на данных, размер которых превышает доступный объем памяти, на нескольких ядрах или нескольких машинах. Можно даже сконфигурировать Dask для использования ресурсов тысячи машин — каждой с несколькими ядрами.

Читать дальше

Что нужно знать о логировании в Docker перед запуском проекта в продакшен

Экспериментировать — с Docker в небольших проектах, конечно, увлекательно, но перенос приложения в продакшен сопряжен с рядом важных задач. Что вам точно понадобится — логирование. Здесь не без подводных камней…

Читать дальше

Ежедневный бэкап Postgres и медиафайлов Django из Docker-контейнеров

Скриптами бэкапов никого не удивить, но даже в этой понятной задаче есть нюансы, которые от проекта к проекту важно не забывать. Делюсь решением для Django-приложения, работающего в среде Docker.

Особенности скрипта:

  • Получает сжатый дамп Postgres и GZIP-архив медиафайлов Django из запущенных контейнеров.
  • Вычищает устаревшие бэкапы по метке проекта.
  • Сохраняет только успешно сформированные бэкапы.
Читать дальше

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

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

Читать дальше

Использование DNS-резольвера Docker в nginx для балансировки нагрузки между контейнерами

Если использовать nginx в качестве проксирующего фронтенда к контейнерам с бэкендом, возникает вопрос, как распределять равномерно запросы к ним. Нельзя просто так определить блок upstream, т. к. контейнеры создаются динамически docker-compose, мы не знаем, сколько и какие будут IP.

Читать дальше

Вычисление расстояния Левенштейна с использованием массивов NumPy

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

Читать дальше

Как быстро загрузить HTTP-лог Kerio Control размером 6Гб в MariaDB с помощью Python?

В лог-файле HTTP шлюза Kerio Control больше 41 млн строк (формат Apache). Нужно получить возможность применить фильтр по IP, дате или URL. Также было бы здорово извлечь полный список доменов или IP, к которым пользователь обращался в рассматриваемый период времени. SQL удачно подходит для этой задачи.

Читать дальше

Конвейеры в Python

Конвейер позволяет передавать результат выполнения выражения первым параметром в другое выражение. Хорошо знаком системным администратором — помогает передать вывод предыдущей команды на ввод следующей или на вход командного интерпретатора. В Python конвейеры реализуются довольно сложно и вообще поощряется более императивный подход с промежуточными переменными. Но есть интересные эксперименты на эту тему.

Читать дальше

JavaScript: суперсила нового RegExp

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

Неудивительно, что JavaScript с корнями в веб-программировании имеет одну из самых надежных на сегодняшний день библиотек регулярных выражений (или, что более точно, regex), и недавнее развитие ECMAScript значительно расширило эту возможность. В этой статье я рассчитываю рассказать о некоторых наиболее любопытных шаблонах разработки регулярных выражений, которые открывает ES2015+, а также о нескольких, которые появятся в ближайшем будущем в среде JavaScript.

Читать дальше