В пакете стандартной библиотеки slices есть функция Backward — итератор по элементам среза в обратном порядке:// Backward returns an iterator over index-value pairs in the slice, // traversing it backward with descending indices. func Backward[Slice ~[]E, E any](s Slice) iter.Seq2[int, E] Если вы не сильно погружены в тему дженериков и итераторов, то естественная реакция при взгляде на сигнатуру этой функции (и других из пакета slices) — «а что, нельзя попроще как-то было?».Чтобы ответить на эт…
Привет, Хабр! Меня зовут Костя, я десять лет занимаюсь коммерческой Android-разработкой. Давно хотелось попробовать себя в вебе, а эксперименты с LLM давали некоторую уверенность в том, что по крайней мере есть шанс написать агентами поддерживаемый код и задеплоить.Что же можно сделать? Конечно тамагочи! Текстовая браузерная игра: герой живёт в мире мрачного будущего. Непрямое управление, возможность предлагать миссии, а также тюнинг предпочтений героя. Эдакий Годвилль, но на новый лад.Оглавлен…
Привет, Хабр! Я делаю execai — терминальный AI-агент на Go (bubbletea), в духе Claude Code. Он читает файлы, гоняет shell-команды, ходит в kubernetes и стримит ответы в TUI.В какой-то момент выяснилось, что пользователям нужен не «агент с одной моделью», а мультитул: у кого-то подписка Kimi Code за $19, у кого-то GLM Coding Plan за $18, у кого-то корпоративный ключ Anthropic, а кто-то хочет гонять Ollama локально и не платить вообще. И всё это — в одном чате, с общей историей, с переключением н…
Алертинг у нас построен на правилах Grafana. Сами правила описаны в Terraform, хранятся в Git и применяются через CI/CD-пайплайн. Такой подход даёт review, историю изменений и воспроизводимую конфигурацию вместо ручного редактирования правил в интерфейсе.Дальше Grafana Alertmanager маршрутизирует уведомления по labels в несколько каналов внутреннего Mattermost. За этими каналами следит дежурная смена. В Grafana также есть отдельная доска, которая выводит активные алерты списком. Она помогла вид…
В прошлой статье про корпоративного AI-ассистента был абзац о том, что мцп серверов у меня много, поэтому пришлось написать прослойку, которая раздаёт тулзы дозированно. Расскажу, как я к этому пришел, потому что на самом деле не все так очевидно.Как это начиналосьПрослойку я написал, когда мцп серверов было штук пять, и написал скорее на упреждение. Уже тогда было понятно, что будет много кубовых кластеров, несколько гитлабов плюс всякие мониторинги прометеусы и тд. То есть однотипных серверов…
Всё началось с обычной бытовой боли. У меня был сайт, и сайту иногда нужно было сказать мне что-то важное: «заказ оплачен», «диск на 91%», «пришёл ответ от банка». Классические варианты доставки этой мысли до моего глаза выглядели так:Почта. Работает, пока не работает. Письмо уезжает в спам, в промоакции, в «Обновления», в никуда. Ты узнаёшь о падении продакшна через сутки, разгребая папку с рассылками про скидки на матрасы.Telegram-бот. Прекрасно. До первого «мессенджер недоступен в вашей стра…
Всем привет! Меня зовут Рома, я бэкенд‑инженер в Банки.ру. Мы перевели мобильное API на KrakenD, и сейчас через него идёт весь трафик приложения.Начиналось всё не с выбора шлюза, а с довольно неприятного открытия: логика, обслуживающая мобильное приложение, потихоньку расползлась по монолиту — причём в те его места, где её никто не ждал. Дальше расскажу, как мы туда пришли, что делали, чтобы выбраться, и во что нам обошлось внедрение новой технологии в уже работающую инфраструктуру.Содержание д…
В предыдущих частях мы разобрались с тем, во что превращается Go‑код, как процессор работает с памятью и каким образом реализуются примитивные атомарные операции.Но всё это порождает закономерный вопрос.Если CPU умеет выполнять только машинные инструкции, а операционная система знает лишь о процессах и системных потоках, то кто вообще знает о существовании горутин?Кто увеличивает их стеки?Кто решает, какую из них сейчас выполнять?Кто собирает мусор?Ответ на всё это один — Go runtime.Но runtime …
Первая работающая beta за две календарные недели по вечерам и один вывод: AI создаёт код, но продукт создаёт harness.Когда Atlassian объявила о завершении продаж Opsgenie, я сначала отреагировал как нормальный инженер: решил ничего не переписывать. Потом календарь напомнил, что нормальность имеет срок действия. Продажи Opsgenie прекратились 4 июня 2025 года, а поддержка завершится 5 апреля 2027 года. После этого сервис станет недоступен, а немигрированные данные будут удалены. Это не слух из ра…