Недавно я выложил на GitHub ZSON, расширение к PostgreSQL для сжатия JSONB. Сжатие происходит путем анализа существующих в базе документов и создания словаря с наиболее часто встречающимися в документах строками. Притом строки могут быть не только именами ключей, но и значениями в массивах, и так далее. В этой статье на примере ZSON мы разберемся, как вообще пишутся расширения к PostgreSQL, как они покрываются тестами, как происходит их установка и удаление, и так далее.

Иногда при отладке программы бывает удобно посмотреть, что она передает по сети. Для решения этой задачи существует множество программ-снифферов. Проблема в том, что иногда они бывают не совсем удобны. Так, tcpdump всегда выводит IP- и TCP-заголовки пакетов, а мне они не всегда интересны. Этого недостатка лишен tcpflow, однако он не работает с UDP и имеет больно уж широкий вывод в консоль. Столкнувшись со всем этим в очередной раз, я решил написать наконец свой маленький основанный на libpcap сниффер, который был бы удобен лично мне. Как оказалось, пишутся такие снифферы очень просто.

CouchDB (не путать с Couchbase!) — документо-ориентированная СУБД, написанная на языке Erlang. В вышедшей недавно версии 2.0 в CouchDB добавили Riak-подобное шардирование, что наконец-то делает эту СУБД кому-то интересной. К тому же, в отличие от Riak, в CouchDB всегда была совершенно бесплатная (не в enterprise edition версии и т.д.) кросс-датацентровая master-slave и master-master репликация. Давайте попробуем разобраться, как же этим хозяйством вообще пользоваться, и подходит ли оно уже для продакшена.

Мотивация пользоваться вместо обычных почтовых клиентов, таких, как Thunderbird, или, скажем, Claws Mail, консольным почтовым клиентом Mutt сродни мотивации пользоваться irssi вместо HexChat. Консольные приложения, как правило, намного проще своих GUI-аналогов, а значит не так сильно жрут батарею и более безопасны. Также они управляются исключительно при помощи клавиатуры, могут быть запущены на сервере в screen, и вот это все. К сожалению, конкретно Mutt совершенно незаслуженно пользуется репутацией программы, очень сложной в настройке. Сегодня мы убедимся, что в действительности настройка Mutt не сильно отличается от настройки любого другого почтового клиента.

В наше время шифровать нужно все. Перед тем, как залить бэкапы в облако Amazon’а, они должны быть зашифрованы. Ваш домашний каталог в системе должен быть зашифрован на случай кражи ноутбука. Даже базу данных нередко имеет смысл хранить в зашифрованном разделе на случай, если вы не доверяете вашему ДЦ, или допускаете, что кто-то может прийти и забрать из стойки ваш сервер. Сегодня мы рассмотрим одно из возможных решений подобных проблем во FreeBSD.

Как это всегда бывает в мире Linux, нормальной документации нет. Когда мне захотелось разобраться, как в это время суток разработчики отлаживают модули ядра Linux, а также само ядро, мне пришлось прочитать, наверное, около двадцати статей, разбросанных по всему интернету. А также две книги (книга раз, книга два), вскользь упоминающих этот вопрос, притом одна из них была посвящена непосредственно разработке ядра Linux! Из этих источников половина содержала устаревшую информацию в стиле «Линус запретил использовать отладчики, смиритесь». Еще половина освещала вопрос где-то на 1/10. В итоге, скорее вопреки, чем благодаря, мне все-таки удалось более-менее разобраться в вопросе и собрать всю информацию в одном месте. Не благодарите.

Irssi — это кроссплатформенный консольный IRC-клиент, написанный на чистом C. Консольные утилиты имеют неоспоримое преимущество перед всякой там GUI’ней вроде HexChat. Например, можно один раз настроить в терминале шрифты и (темную!) цветовую гамму, а все консольные приложения автоматически их подхватят. Да, у GUI приложений в третьем тысячелетии с этим все еще есть проблемы. Qt и разные версии GTK берут свои настройки немного из разных мест. Плюс к этому консольные приложения можно легко запускать на сервере в screen. Кроме того, в консольных приложениях практически никогда не используется мышь, что я лично нахожу очень удобным. Наконец, обычно они жрут меньше памяти и заряда батареи.

Ранее в заметке Профилирование кода на C/C++ в Linux и FreeBSD вскользь упоминалось, что аналогом perf из мира Linux во FreeBSD является утилита pmcstat. Однако не сообщалось, как именно этим pmcstat пользоваться, просто потому что на тот момент я этого и не умел. Не так давно, благодаря помощи со стороны Федора Сигаева, мне все-таки удалось осилить pmcstat. А теперь, благодаря помощи с моей стороны, осилить удастся и вам!

Поговорим о системах сборки, а конкретнее — одной из них, Autotools (также известной под названием GNU Build System). Если вы когда-нибудь собирали программу при помощи волшебной последовательности команд ./configure && make && sudo make install, значит вы использовали Autotools. Откровенно говоря, в новых проектах я бы рекомендовал использовать CMake, ну или хотя бы SCons. Но по историческим причинам многие проекты все еще используют Autotools. Также некоторые люди ошибочно считают Autotools чем-то типа стандарта де-факто. А значит, было бы неплохо примерно понимать, как им пользоваться.

Некоторое время назад мы с вами научились пользоваться DTrace. SystemTap представляет собой нечто похожее, но сильно заточенное под Linux и с рядом важных отличий. Во-первых, SystemTap не требует ручного добавления пробов в код ядра или приложений. Он работает и так, правда, требуя взамен знания исходников. Во-вторых, скрипты SystemTap транслируются в язык C и загружаются в ядро в виде модулей. За это приходится платить временем компиляции скриптов. Зато скриптовый язык SystemTap намного мощнее, чем у DTrace.