Alex Takes Notes

Добрый день! Я делаю заметки о технологиях, с которыми имею дело. Возможно, они пригодятся и Вам!

Обновления

14.01.2025 Я в несколько заходов пару дней возился, чтоб настроить возможность коммитить с 1 системы сразу в github и gitlab с помощью двух разных ssh-сертов. Оказалось, это не самое тривиальное дело, потому как у git нет ключа-указателя на нужный сертификат и имя пользователя. По итогам у меня получилась важная добавка к статье про git

09.01.2025 Новый год я начинаю постепенно, с замены инструмента отслеживания изменений в коде и запуска перекомпиляции. Ранее с задачей справлялся cargo watch, но автор проекта написал, что более не будет развивать его. Поэтому я опробовал и переехал на bacon, и добавил заметку о его использовании.

30.12.2024 Для анализа данных о системе из прошлой статьи нужно отфильтровать всё лишнее с помощью регулярных выражений.

26.12.2024 В качестве пробного приложения я пробую container runtime. Такое приложение сразу порождает кучу практичных вопросов. Например, вопрос подходящего ядра Linux. Чтобы узнать его версию, нужно быстро опросить систему, для этого я добавил кусочек библиотеки sysinfo. Есть и другой способ узнать версию ядра и тип ОС: uname -a && cat /etc/issue. Для этих целей можно запустить команду в STDIN поток ОС.

25.12.2024 Сегодня день посвящён работе с ошибками в Rust. У меня ранее уже была статья об этом, пора в её неё добавить деталей, а также разобрать специализированную библиотеку Anyhow для упрощения работы с ошибками.

24.12.2024 Механизм логгирования и трассировки позволяет отслеживать работу приложения максимально плотно. Есть несколько инструментов для сбора логов, но наиболее эффективный из них tokio tracing, так как корректно обрабатывает трассировку потоков многопоточных и многоканальных приложений. Разбор работы с ним теперь в статье про tracing. Общий посыл в том, что можно писать лог с функций любым логгером, и это вполне подходит - до тех пор, пока не начать писать многопоточное, многоканальное приложение. Как только появляется вязанка потоков, каждый из которых создаёт события, типовой логгер начинает сбоить, т.к лог события с одного потока перекрывает лог с другого потока. И вот, чтобы корректно с этим работать, логгер уже не пишет просто события, а создаёт “промежуток потоковой трассы событий”, т.е набор событий в контексте работы каждого потока, при этом запись этих событий должна быть как неблокирующее поток вывода действие, и отправляться оно должно необязательно в файл, а есть поддержка сразу отправки в SIEM, анализатор типа Datadog и т.д. в режиме дозаписи (rolling). Т.е логгер одновременно делает трассировку, отдачу телеметрии - с заворачиванием в стандарт OpenTelemetry по желанию, и многопоточную передачу этих данных в один или несколько приёмников: одновременно в файл с ротацией, SIEM, облако и т.д. Круто же!

23.12.2024 Долго я не понимал прелести работы библиотеки Rust clap по работе с аргументами командной строки. А потом как понял! Всему виной громоздкие документация и примеры. Начинать надо с малого, что я и сделал в своей статье про clap.

21.12.2024 Наконец-то я залезаю в многопоточность приложений. Тема непростая, интересная. Я добавил статью про работу с процессорными потоками в Rust, буду дополнять её далее.

19.12.2024 Немного обновил я данные там и сям:

02.12.2024 Наконец-то, массовый апдейт сайта! После обновления движка Hugo у меня были проблемы с занесением сюда новых заметок, но теперь это в прошлом.

06.08.2024 Я делаю новый подход к снаряду с Kubernetes. Попутно я заметил, что не сделал заметок по пространствам имён - исправляю этот недочёт.

24.04.2024 Недавно я разбирался с хабом для умного дома на базе OpenWRT и озадачился кросс-компиляцией утилит под него. А следом у меня возник вопрос о кросс-компиляции проектов Rust. Оказалось, для этого есть модуль Cross, который через контейнер Docker/Podman +Wine способен скомпилировать код на моём макбуке под Windows. Заметку об этом я добавил по ссылке.

30.03.2024 Множество мелких добавок-правок не попадают в новости, но что-то я периодически дописываю на портале. Из недавнего-интересного - чтение файлов в Rust. Чтение в строку, через буфер, в вектор из байт для бинарных файлов. В перспективе я думаю разобрать парсинг спец-форматов: XML, JSON, YAML, TOML.
03.02.2024 Ещё один элемент стиля Rust - повсеместное использование замыканий в самых разных хитрых комбинациях. Это сокращает количество кода, при этом сохраняет скорость выполнения. Прицепом я добавил в тему словарей инициализацию со значениями. В Python аналог defaultdict был полезной штукой, местный аналог в Rust тоже нужно было записать.

01.02.2024 В процессе решения задачек я потихоньку прихожу к пониманию, что такое “смена мышления” при работе с Rust относительно других языков: это упор на типы данных и конструкции языка заместо привычных общепринятых. Например, использовать перечисления (enum) и match всегда и везде заместо if-else. Попутно я дополнил статью о векторах темой перевода туда-обратно в строки. Для составных типов данных это наиболее актуальный вопрос: как собрать в такой тип данные, а потом отдать данные назад в правильном формате.

28.01.2024 Этот год я решил вернуться к Rust после перерыва и научиться решать задачки с ним в codewars. В процессе я потихоньку осваиваю расширенную библиотеку, например, модуль itertools тут есть, как и в Python, даёт возможность делать полезные преобразования и сортировку строк.