Category : golang

golang
YPtun

Xray, sing‑box, WireGuard и DNS‑туннель в одном процессе: как устроен YPtun изнутриПроект начинался как Olcbox, маленький конфигуратор для одного экспериментального транспорта. Следы того времени до сих пор живут в коде: версия передаётся в Gradle флагом -Polcbox.version, пакеты называются org.olcbox.app, а главный сервис называется OlcboxVpnService. Переименовывать всё это ни у кого не поднимается рука, и ниже будет понятно почему: одно только переименование applicationId заняло два релиза.Сей…

  • понедельник, 19 октября 2026 г. в 00:00:12
golang
Возвращение в прошлое, которого у нас ещё не было

Интернет когда-то выглядел иначе. До бесконечных лент, рекомендательных алгоритмов и личных брендов существовали BBS, локальные сети, IRC, форумы и имиджборды. Пользователь приходил туда не ради собственного профиля, а ради темы, разговора или случайной встречи с незнакомым человеком.У этих систем было много ограничений. Соединение могло быть медленным, интерфейс — текстовым, а навигация — целиком клавиатурной. Но именно ограничения часто делали общение более прямым. На экране не было десятка у…

  • понедельник, 19 октября 2026 г. в 00:00:11
golang
ccswap: переключаю Claude Code между своими подписками без прокси и перезапуска

У меня несколько своих подписок Claude, и Claude Code работает почти весь день: я пишу сам, параллельно крутятся агенты. Пятичасовой лимит заканчивается в самый неудобный момент, недельный — задолго до конца недели. Дальше всё одинаково: открыть терминал, выйти, залогиниться другим аккаунтом в браузере, вернуться в сессию и вспомнить, на чём остановился. В какой-то момент мне надоело делать это руками.Так появился ccswap — демон на Go для macOS и Linux. Когда текущий аккаунт подходит к лимиту (…

  • воскресенье, 18 октября 2026 г. в 00:00:08
golang
GoOS: от любопытства к собственному ядру

Ещё в школе, когда я впервые начал писать на Pascal, меня заинтересовал вопрос: что именно происходит, когда запускается программа? Программа читает клавиатуру, выводит текст, выделяет память. Но кто её запускает? Кто выделяет ей процессорное время? Почему она не может прочитать память другого процесса? Как нажатие клавиши превращается в событие для приложения? И что происходит между включением компьютера и первым приглашением командной строки? Вместо того чтобы ограничиться прикладным программ…

  • суббота, 17 октября 2026 г. в 00:00:16
golang
Доставка пива, алгоритм «Октагон» и поиск компании в EDGE: какие архитектуры придумали на Avito Gri…

Обычно на митапах всё довольно предсказуемо: доклады, слайды, кофе-брейк и немного общения между ними. Но в прошлом году мы решили перевернуть привычный формат — собрать Go-сообщество и побрейнштормить архитектуру. Активность была похожа на System Design, но с фаном и мясом!Так появился Avito Grill & Go. Формат зашёл настолько, что участники попросили повторить. И мы подумали: а почему бы не привезти его в Петербург?В этот раз собрали 130 Go-разработчиков во дворике Union Bar и разделили их…

  • суббота, 17 октября 2026 г. в 00:00:16
golang
Genoas — ещё один генератор OpenAPI 3.1 для Go

Всем привет!Меня зовут Егор, и я уже несколько лет пишу на Go.Сегодня я хотел бы представить свой небольшой проект по генерации свагера для Go‑проектов.С чего всё началосьКогда я работал в банке, у нас были жёсткие требования: API бэкенда должно быть досконально описано. Паттерны для строк, максимальная/минимальная длина и так далее. Но главное — спецификация должна была быть версии не ниже 3.0.К сожалению, подходящих библиотек на тот момент было не то чтобы много. Я уже не говорю о том, подход…

  • суббота, 17 октября 2026 г. в 00:00:13
golang
В 39% игр в Тайного Санту двое дарят друг другу. Считаем жеребьёвку как следует

Раздать имена в Тайном Санте — задача на пять строк: перемешал список, проверил, что никто не достался сам себе, готово. Я так и думал, пока не посчитал. При таком способе почти в четырёх играх из десяти найдутся двое, которые дарят друг другу, и это не баг реализации, а свойство случайных перестановок.Я делаю сервис для Тайного Санты (My Santa), и жеребьёвка в нём — те самые пять строк, которые разрослись до ста тридцати. Ниже — почему разрослись, как устроены и какой перекос я нашёл в собстве…

  • суббота, 17 октября 2026 г. в 00:00:12
golang
Расписание ИТМО жило в приложении, а мне нужен был календарь. Поэтому я сделал сервис

Расписание живёт в приложении ИТМО, а вся моя жизнь — в календаре: работа, секции, встречи, поездки. Каждую неделю я сверял одно с другим и почти каждый раз находил расхождение. В итоге сделал сервис, который превращает расписание в подписку: одна ссылка, и пары появляются в календаре сами. Сервис неофициальный: у ИТМО такой подписки нет, поэтому её сделал я.Как былоПроще всего объяснить на примере. Однажды я приехал на пару на Кронверкский, а она оказалась перенесена на Ломоносова. Уведомлени…

  • суббота, 17 октября 2026 г. в 00:00:11
golang
Fairway: балансировщик корпоративных прокси, который сам выясняет, какой выход лучше для какого сай…

В компании редко бывает один прокси. Обычно это пара Squid в основном ЦОДе, свои прокси в филиалах и отдельные внешние выходы для облачных сервисов. Клиенты при этом настроены просто: PAC‑файл с двумя адресами по порядку, и всё.Беда в том, что «какой прокси лучше» зависит от сайта. Партнёрский банк пускает в API только с согласованных адресов, и выход питерского филиала в этот список не попал. Зеркало пакетов через европейский выход отдаёт втрое быстрее, чем через московский. Канал в филиале уз…

  • суббота, 17 октября 2026 г. в 00:00:09