Fan-Out/Fan-InПаттерн Fan-Out/Fan-In — это подход к параллельной обработке задач в Go с использованием горутин и каналов. Он позволяет распределить работу между несколькими исполнителями (Fan-Out) и затем собрать результаты в одном месте (Fan-In). Паттерн Fan-Out/Fan-In очень похож на паттерн Worker Pool. Более того, в большинстве практических случаев Worker Pool можно считать частным (специальным) случаем паттерна Fan-Out/Fan-In. По сути, принципиальная разница заключается в том, что Fan-Out/F…
Привет всем! Хочу поделиться небольшим личным проектом, который родился из чистой бытовой необходимости. Я давно хотел иметь возможность удаленно поглядывать на свою дачу, особенно когда уезжаю на несколько недель. Готовые решения в духе "умных камер" меня не совсем устраивают: то подписки дорогие, то Privacy Policy сомнительная, то функционал избыточный. В итоге я решил, что проще и надежнее будет написать свою собственную утилиту.Идея проста: поставить на даче маломощный неттоп, подкл…
Предыдущая часть Предисловие. Спасибо за тёплые отзывы о предыдущих статьях цикла. Ваша поддержка – настоящий стимул продолжать дальнейшую работу! Оставляйте мнение и вопросы по пройденному материалу в комментариях – я буду рад любой обратной связи.Если вы читали предыдущую часть – вы помните, какой серьезный фундамент мы заложили для нашего сервиса. DeadDrop уже научлся: Принимать и обрабатывать POST-запросы Парсить файлы Защищаться от DoS-атак Хранить данные в потоко-безопасном in-memory х…
Думаю, многие разработчики, которые используют Docker, согласятся с тем, что он предоставляет обширные возможности для контроля прав контейнеров. Тут есть инструменты на любой вкус: хочешь открывай порты наружу, хочешь меняй права контейнера через cap_add / cap_drop, хочешь показывай контейнеру все процессы, а хочешь - можешь разрешить использовать девайсы или сеть хоста, ну и так далее.Погружение в проблемуОднако, работая с Docker вот уже более 7 лет, я заметил, что я часто сталкиваюсь с одним…
Если вы являетесь Go-разработчиком, то вне зависимости от того, из какого языка программирования пришли в Go, наверняка когда-то задавались вопросами «А есть ли тут тернарный оператор? Нет? А почему?»Конечно, можно заглянуть в секцию FAQ документации Go и найти там ответ авторов. Но останавливаться на этом — удел слабых, так?) Иногда ведь так хочется удобно написать присвоение результата в зависимости от условия... Без заведения лишних временных переменных, и может быть даже в одну строчку...А …
Статья посвящена низкоуровневой работе с сетевым стеком Linux на языке Go. Разберем, как создать и настроить виртуальные TUN-интерфейсы для перехвата и модификации IP-трафика в userspace. Напишем минимальную программу, реализующую логику NAT: подмена адресов в заголовках пакетов и инкрементальный пересчет контрольных сумм для IP и TCP.Программа написана на Go и создает на одной машине два виртуальных TUN-интерфейса. Схема работы выглядит так: tun0 -> go app -> tun1 -> inet. Первый инте…
В этой статье мы перенесем разработанный инструмент на macOS. Логика работы с трафиком в userspace сохраняется, но интеграция с системой требует иных решений. Разберем особенности создания utun-интерфейсов, настройки маршрутизации через ifscope и использования pf для NAT. По итогу запустим цепочку tun0 -> go app -> tun1 -> inet на новой платформе.Принципиальных изменений в коде нет, но туннели создаются и настраиваются иначе. В Linux-варианте я открывал туннель без сторонних библиотек,…
Привет, Хабр! Я — Владимир Балун, и это — вторая часть материала о пакете с отпугивающим названием «unsafe» в Go и том, чем он может быть реально полезен. В первой части мы рассмотрели его содержимое, особенности и нюансы, оптимизации кода с использованием unsafe — все это вы можете освежить в памяти по ссылке.Сегодня перейдем непосредственно к той самой «магии»: трюки, хаки, советы и лучшие практики с моей стороны. Трюки и хакиВажно понять: я не говорю, что вы должны делать именно так на работ…
Проблема: тяжёлые AI-агенты на маленьком железеПоследнее время я экспериментировал с AI-агентами на Raspberry Pi 5.И довольно быстро столкнулся с проблемой: большинство существующих агентных фреймворков оказываются слишком тяжёлыми для небольшого железа.Типичная архитектура таких решений включает:Python-фреймворкнесколько фоновых сервисовorchestration слойиногда векторную базудовольно сложную конфигурациюНа сервере это нормально работает. Но на Raspberry Pi всё начинает ощущаться иначе:долгий с…