Типичная проблема, возникающая при разработке распределенных систем, состоит в следующем. Допустим, пользователь посылает системе запрос, и запрос этот обрабатывался очень долго. При этом внутри системы запрос распался на запросы к нескольким внутренним микросервисам, которые в свою очередь могли также превратиться в несколько подзапросов, возможно, даже выполняемых параллельно. Как в такой ситуации выяснить, где тормозит система? Метрики не дают ответа на данный вопрос, поскольку в целом вся система работает нормально, затупил только отдельный запрос конкретного пользователя. Логи могут дать ответ, но они разбросаны по множеству машин, время на которых не синхронизировано. На помощь приходит Jaeger.

Диполь является одной из наиболее популярных коротковолновых антенн. В простейшем случае изготавливается он таким образом. Берется два провода длиной около 1/4 длины волны. Это будут плечи диполя. Один провод подключается к жиле коаксиального кабеля, а второй — к его экрану. Все это хозяйство поднимается как можно выше над землей, после чего плечи антенны расправляются в разные стороны. Диполь готов! Но такой простейший диполь может работать хорошо, а может работать и плохо, как повезет. Вот о том, с чем это связано, и как это исправить, далее и пойдет речь.

Если вдруг после прочтения заметки об антенне OPEK HVT-400B у вас сложилось впечатление, что это прямо супер-антенна, и лучше нее ничего нет, то это совершенно не так. Данная антенна имеет низкую эффективность, что весьма заметно, если сначала поработать на нее, а затем на полноразмерный диполь. Поскольку не всякий начинающий радиолюбитель готов вот так сразу взяться за изготовление собственных антенн, встает вопрос о выборе недорогого готового диполя, желательно сразу на несколько диапазонов. В качестве такого диполя можно порекомендовать антенну D2040 производства компании Радиал.

Badger — это реализация LSM tree на языке Go. Не будет преувеличением сказать, что это как RocksDB, только написанный с нуля на другом языке программирования. Библиотека основана на WiscKey paper [PDF], обмазана кучей всевозможных тестов, неплохо показывает себя на бенчмарках, ну и в целом производит впечатление серьезного проекта. Мне захотелось познакомиться с библиотекой поближе. Поэтому я написал на ней простенькую key-value СУБД с REST-интерфейсом.

Как и многие жители городов, я не обладаю достаточным пространством для развертывания полноценной коротковолновой антенны, такой, как диполь. Доступа на крышу у меня нет. Под окнами растут деревья, на которые можно закинуть каких-нибудь проводов. Но для такого варианта нужен антенный тюнер, которого у меня пока нет. Поэтому, выбирая свою первую антенну, я искал что-то, что можно развернуть на балконе. Оказалось, что подходящих антенн достаточно много, и большинство из них относятся к классу укороченных вертикальных антенн. Изучив доступные варианты, я остановился на антенне OPEK HVT-400B.

В рамках поста Устанавливаем связку из Prometheus и Grafana мы познакомились с Prometheus и разобрались с его настройкой. Теперь давайте выясним, как отправить в него каких-нибудь метрик из нашего собственного приложения. Писать будем на языке Go, но я почти уверен, что для других языков существуют аналогичные библиотеки.

Как вам уже известно из статьи Проходим квест на получение позывного и регистрацию РЭС, в качестве своего первого трансивера я выбрал Yaesu FT-891. Сегодня мне хотелось бы вкратце рассказать о данном устройстве, а также поделиться впечатлениями от его использования.

Если вы давно читаете этот блог, то можете помнить некоторые старые посты, посвященные мониторингу. В частности, была рассмотрена связка из Graphite, StatsD и CollectD, а также, несколько поверхностно, сервис Datadog. Однако мир не стоит на месте. Приходят новые технологии, некоторые из которых даже оказываются лучше своих предшественников. В качестве таких новых технологий можно привести в пример связку из Prometheus и Grafana.

Как мы выяснили в рамках заметки Слушаем коротковолновиков при помощи RTL-SDR, любительское радио живет и процветает. В связи с этим я решил попробовать себя в качестве полноценного оператора, а не только слушателя. Далее будут описаны шаги, необходимые для выхода в эфир.

На первый взгляд, модульные тесты в Go пишутся очень просто. Создаем файл с именем пакет_test.go, в нем объявляем функции с именами TestЧтоТестируем, говорим go test, ну и считай готово. Однако на деле все оказывается чуточку сложнее. Например, оказывается, что из коробки в языке нет ни ассертов, ни моков. А когда ты начинаешь генерировать моки, они внезапно начинают участвовать в подсчете покрытия кода тестами. В общем, давайте разберемся, как все устроено на самом деле.