Pull to refresh
2

User

3
Subscribers
Send message

WebSocket на C++11 и Rust: сравнительный анализ библиотек и двух реализаций одного протокола

Level of difficultyMedium
Reading time9 min
Reach and readers9.2K

WebSocket — один из самых распространенных транспортов для обмена данными в реальном времени: чаты, биржевые котировки, игровые серверы, IoT. На практике выбор библиотеки редко сводится к вопросу «кто быстрее парсит заголовок фрейма». Важнее сочетание совместимости со старым набором инструментов сборки, поддержки TLS, сжатия per-message-deflate, модели асинхронности или блокировки, размера бинарника и способа обработки ошибок.

Читать далее

«У меня работает»: десять способов узнать, что нет

Level of difficultyMedium
Reading time11 min
Reach and readers12K

Я думал, проект готов к релизу. CI думал иначе — и оказался прав десять раз. История про то, что видно только на чистом раннере.

«Полностью готовый» и локально зелёный проект — а первый же полный прогон CI вскрыл десяток скрытых проблем: версия CMake на Ubuntu 22.04, строгий GCC 11, артефакты с 403 от CDN, ASan под valgrind, недоступный из сети реестр и другие. Показываю каждую проблему с настоящим сообщением об ошибке и решением, а заодно — как поднял свой раннер, выпустил релиз руками без раннеров и ускорил пайплайн с 53 до 15 минут. Мораль: CI ловит ровно то, что невидимо на машине разработчика, — версии инструментов, окружение и сеть.

Читать далее

COM-порт из ничего: PTY, epoll и немного RS485-боли

Level of difficultyMedium
Reading time14 min
Reach and readers11K

Демон «ничего не делал» — а одно ядро было загружено на 100%. История про виртуальный COM-порт для Linux/WSL2: PTY, epoll и эмуляция RS485, с кодом и граблями.

Рассказываю, как сделал vseriald — демон, который создаёт виртуальный последовательный порт /dev/ttyV0 в Linux и WSL2 и выводит его в сеть, FIFO или очередь сообщений. Разбираю три неочевидных места: псевдотерминал, после закрытия которого одно ядро уходит в 100%; притормаживание источника в однопоточном epoll-цикле без блокировок; эмуляцию полудуплексного RS485 как конечного автомата с таймингами и коллизиями. Плюс честный ответ на вопрос «зачем это, если есть socat и /dev/pts» — и код из реального проекта.

Читать далее

Как я отучил оракула молоть околесицу про ГОСТы: сказ о doc-rag без единого (почти) заморского слова

Level of difficultyMedium
Reading time16 min
Reach and readers11K

Дело моё — программы писать, а сходиться им положено с мастеровой грамотой: ГОСТами, СТО, спецификациями. Хочу спросить оракула в писарне про точный пункт — получаю складную околесицу со ссылками на то, чего никто не писал. Тогда я сложил себе doc-rag: местную снасть для извлечения премудрости из собственных свитков. Внутри — устройство, грабли, история про утраченный указатель и попытка рассказать всё это без единого заморского слова.

Распахнуть свиток

Rust + C++ через FFI: как подружить два мира и не сойти с ума

Level of difficultyMedium
Reading time5 min
Reach and readers7.9K

Сегодня Rust активно используется не только как язык для написания приложений, в том числе системных, но и как язык для написания библиотек, которые подключают к существующим проектам на C и C++. Это удобно: новую функциональность можно писать на Rust, но при этом не переписывать весь код на нём.

В омут FFI

Information

Rating
Does not participate
Registered
Activity