More issues

Boost.ASIO coroutines. Event.

В этот раз реализую простейший примитив синхронизации двух короутин. Его назначение довольно просто: одна короутина приостанавливается на ожидании сигнала, другая этот сигнал отправляет. По сути это аналог пары std::future<void>/std::promise<void>. Короутины могут выполняться в разных потоках, ожидать сигнала может только одна короутина.
2 min read

NixOS on Raspberry Pi 4

Установка NixOS на малинку. Основная статья Для упрощения все операции выполняются под root sudo -i. UART console Для того, чтобы работала UART-консоль исправляем командную строку ядра в файле (на SD-карте с развернутым образом) boot/extlinux/extlinux.conf, вставляем настройки 8250.nr_uarts=1 console=ttyS0,115200 console=tty0 loglevel=7.
4 min read

Boost.ASIO coroutines. Scheduler.

Для реализации примитивов синхронизации короутин (например sequence_barrier) нужен механизм для приостановки короутины до следующей итерации цикла событий. По сути это аналог функции pthread_yield для синхронного кода. Пример использования выглядит как-то так: do { co_await schedule(executor); do_some_thing(); } while(condition); а типовая реализация так: struct Awaiter { boost:
1 min read

WireGuard VPN

WireGuard хоть и называется VPN-ом, но по сути это просто туннель между двумя узлами. Ключи и адреса нужно указывать на обоих сторонах туннеля, т.к. функционала передачи параметров и ключей в нем нет. Дальше маршрутизацией на клиентской стороне трафик заворачивается в туннель, а на серверной стороне включается маскарадинг сетевых адресов
4 min read

Docker UID/GID

По умолчанию внутри Docker-контейнера процесс запускается с UID/GID 0:0, что соответствует пользователю и группе root:root. Из этого вытекает два свойства: 1. Владелец создаваемых в примонтированых директориях файлов root. Для изменения/удаления этих файлов приходиться использовать sudo. 2. Нет возможности использовать внутри контейнера SSH-ключи простым монтированием директории ~/.ssh.
1 min read

Recently used

Автоматическое добавление файлов в список недавних. Это актуально для быстрого доступа к скриншотам (например для публикации). Добавление осуществляется при помощи вот этого скрипта. Для автоматического добавления используется инструмента lsyncd, который мониторит указанную директорию (в частности $HOME/Pictures) и при обнаружении нового файла добавляет в список недавних. Конфигурация lsyncd: convert = { delay
1 min read

Газоанализатор Online. Асинхронность.

Что-то пошло не так. Для явной обработки ошибок ввода/вывода и таймаутов реализовать взаимодействие с газовыми датчиками я планировал при помощи state-машин. Машина состояний для перевода датчика в режим запрос-ответ и чтение данных была разработана такая: Но на Python библиотеки state-машин оказались какими-то совсем беззубыми. Они и близко ни поддерживают
3 min read

Инъекция зависимостей: Boost.DI

В книге Чистый код Роберт Мартин сравнивает модульное тестирование с серебряной пулей. Инъекция зависимостей это винтовка для этой пули, из которой почти любое legacy можно расстрелять и превратить в поддерживаемую  систему. Legacy В качестве примера будет использована следующая система (исходники тут). Есть вычислитель (Executer), обсчитывающий входные данные в параллельном потоке
7 min read

Танчики 1990. Играем в проектирование.

Условия задачи. Разработать игру “танчики” на языке С++. * Игра состоит из игрового поля. На поле располагаются танки и препятствия. * Танки делятся на два вида: игровые и танки противника. * Игровые танки управляются игроком при помощи клавиатуры. Их может быть не более двух. * Танки противника передвигаются по полю в произвольном порядке и
3 min read

Дистанционная коллективная работа с whiteboard.

Берем Half-Life: Alyx, выпиливаем из него всю сюжетную модель, физику для облегчения тоже удаляем. По-сути оставляем просто облегченный движок. В качестве модели мира берем UML и добавляем мультиплеер. И вот, можем с коллегами из любой точки мира заниматься проектированием. Но что-то мне подсказывает, что я далеко не первый, кто до
1 min read

Subscribe to Заметочки

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe