uz
Feedback
Make. Build. Break. Reflect.

Make. Build. Break. Reflect.

Kanalga Telegram’da o‘tish

Полезные советы, всратые истории, странные шутки и заметки на полях от @kruchkov_alexandr

Ko'proq ko'rsatish
1 318
Obunachilar
Ma'lumot yo'q24 soatlar
+37 kunlar
+2130 kunlar

Ma'lumot yuklanmoqda...

Obunachilarni jalb qilish
Iyul '26
Iyul '260
0 kanalda
Iyun '26
+27
0 kanalda
Get PRO
May '26
+86
8 kanalda
Get PRO
Aprel '26
+48
1 kanalda
Get PRO
Mart '26
+141
4 kanalda
Get PRO
Fevral '26
+96
1 kanalda
Get PRO
Yanvar '26
+55
2 kanalda
Get PRO
Dekabr '25
+50
0 kanalda
Get PRO
Noyabr '25
+48
1 kanalda
Get PRO
Oktabr '25
+54
3 kanalda
Get PRO
Sentabr '25
+73
4 kanalda
Get PRO
Avgust '25
+66
0 kanalda
Get PRO
Iyul '25
+51
1 kanalda
Get PRO
Iyun '25
+37
0 kanalda
Get PRO
May '25
+577
1 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
01 Iyul0
Kanal postlari
#всратость #devops #ai Очередные размышления.
Мы автоматизировали общение и написание кода, но не процессы
Везде и всюду "ИИ", агенты, и много "ИИ нейтив трансформаций". Работодатель хочет многого, сокращает издержки, верит в автоматизацию, в несуществующий ИИ, а мы теперь трудимся за пятерых. Ну вот это вот всё все итак знают. Однако никто не рассказывает "а чо по процессам?". Я чот не вижу, чтобы кто-то транформировал процессы. Во всяком случае у нас на это забили болт, как мне кажется. Пример: прилетает девелопер, пишет "не работает релиз в прод". Стоп. Не так. А, мы ж теперь ЗА ИИ ТРАНСФОРМАЦИЮ! 12:28 прилетает мне в слак сообщение, клодом написанное, с красивым форматированием и полной подробной информацией, что перестал работать релиз в прод. С путями, текстом ошибки, предполагаемой проблемой. 12:35 мой агент агента агента агентный агент пишет в ответ "Спасибо за обращение! сейчас вернусь с обеда! Сделаю!" обратно в слак. пу-пу-пу 13:22 возвращаюсь к лэптопу, ныряю в проблему при помощи Claude code ненаглядного, запускаю несколько mcp и cli tools, дергаю там skills, получаю reports - все по ии-трансформационному! 13:28 понимаю суть проблемы с пруфами: argocd не может синкнуть git репозиторий - протух токен, при помощи которого он обращается для гит пулл синка 13:36 при помощи клода пишу и отправляю не менее красивое отформатированное сообщение в слак канал для девопс команды "парни, проверьте, плиз, в этом проекте/группе есть ли деплой токены? не протухло ли чего?" - планируя, что следующим вопросом попрошу просто рефрешнуть а никто не отвечает 13:41 агентный агент пингует devops duty дежурного в треде "хелп спасити памагити" 13:52 девопс отвечает мне, что "PAT у нас почти год уже нет, токенов у тебя тут нет" 13:53 агент быстро делает ресёрч, говорит пойдем посмотрим что за токен, иду в волт сам, копирую токен - а там, мать его, glpat- и правда персональный токен. Ну, вероятно, кто-то это сделал год назад, пока было разрешено и это попало в прод и так работало год". 14:04 сам пишу девопсу "можешь ли ты создать токен новый?" 14:08 получаю ответ "мы не создаем/менеджим токены, расскажи свою боль и мы поможем тебе" 14:13 пилю кулстори с подробным пояснением, что тупо токен протух и все подробности проекта/путей и тп тадам 15:24 отвечают мне, что могут запилить ssh key, есть ли у нас сервис аккаунт? 15:25 разбираюсь чо там настроено (я не основной инженер на этом проекте) 15:35 честно отвечаю, что меня устроит любой ПРОСТОЙ и БЫСТРЫЙ вариант без переделок, вообще любой вариант устроит, хоть деплой токен на 7 дней - за неделю успею переделать все нормально по любым вашим требованиям, мне лишь бы прод поднять 15:41 мне делают деплой токен - с временем протухания, а так же сервис аккаунт без времени протухания и кладут логин/токен в Vault. Два варианта - что первое подойдёт. 15:42 я руками, не доверяя агенту, делаю патч externalsecret, добавляя туда новый логин и новый путь до токена, дергаю форс-рефреш экстерналсекрет, патчу арго аппликейшн на ре-синк - всё руками в терминале 15:45 - сервис задеплоен, проблемы нет, синк работает 15:46 - агентном создаю в беклог таску, чтобы терра модуль аргошки поменять на новый формат логина/пароля с новыми путями в волте Бл, ну камон. Два девопса* два часа решают проблему протухшего токена, ну камон.🤡🤡 Итого: 6 минут на диагностику, 2 часа на согласование токена, 4 часа невозможности задеплоить релиз от момента обнаружения проблемы до фикса. Много вопросов, мало ответов**: - почему сразу не дать право создавать деплой/сервис-аккаунт с токеном? В чём проблема? Чем помогает такой вахтеризм? - в чём проблема быстро выдать PAT на 7 дней с техдолгом переделки вместо двух часов пинг-понга? Мы прод, бл, чиним, алё, ребята. - мы всё автоматизируем, но час можем не отвечать в слаке. Кто тогда отвечает за аптайм? - где алерт на экспайред токенов? Где борда? ИИ инструменты реально помогают - диагноз за 6 минут это предел мечтаний пару лет назад - красивенькие понятные сообщения в слаке, чтобы любой быстро понял суть треда Однако никакой клодкод и ИИ трансофрмация не заменит нормальные процессы , в том числе сакральные тайны ротации секретов и понятную матрицу доступов. Никакой ИИ не поможет, если час нет ответа. Пока этого нет – AI трансформация это просто новая обёртка поверх старого бардака. Мы ускорили всё, кроме принятия простейших, сука, решений. Мы сделали ответы красивее, но не быстрее. Мы автоматизировали действия, но не договорённости. И пока это так - мы ни-хе-ра не становимся эффективнее. Мы просто делаем тот же самый бардак, только быстрее, дороже и с более красивыми лозунгами. - - - * Я девопс на отдельных проектах, есть лишь часть прав. А есть эээ я хз как называется, ну пусть будут Глобальные девопсы, они и гитлабом управляют и рутом организаций в амазоне/ажуре и многое другое. Права нам дают как утяткам, не понимаю в чём смысл, если честно. ** все претензии только к процессам, а не к девопсам. Свою роль в этом бардаке я так же чётко вижу, как и многие слабые места.

2
#всратость Очередной раз листая бесконечные чатики, наткнулся на интересный вопрос. https://t.me/linkmeup_podcast/11014 Чатик, а кто что думает касательно того факта, что каждый второй проект на гитхабе предлагает установить результаты своей плодотворной деятельности через curl -fsSL https://точнонепалево.ком/install.sh | bash? Как это потом удалить? Как это обновить? Что делать, если пайп баша икнёт? Как объяснить адептам «Ну ты скачай и посмотри, что там, а не сразу запускай», что 99% народонаселения не испытывает никакого желания читать несколько сотен строчек спагетти-кода? А даже если и читают, то есть такой неудобный нюанс, который забывают многие, что как только curl скачал первые строки, пайп их сразу отдаёт в баш, а не ждёт, когда скачается весь файл? А и правда, насколько это хреново? На личной свежей тачке запустил анализ чего я вообще ставил через curl | bash за последнее время. Нашёл 5 штук. cat ~/.zsh_history | strings | grep -E 'curl.*\|.*(bash|sh)' | head -100 curl -fsSL https://claude.ai/install.sh | bash curl https://cursor.com/install -fsS | bash curl -fsSL https://openinterpreter.com/install | sh curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash curl -fsSL https://pi.dev/install.sh | sh Результат неоднозначный: - Open Interpreter образцово: SHA-256 верификация, мутекс блокировка при установке (признаюсь сам узнал про это при изучении скрипта, знал лишь частично), маркированные блоки в .zshrc чтобы потом легко убрать. Вообще ок, хоть и беда с башкой при хелл депенденси. - Claude тоже хорошо: скачивает бинарь, верифицирует чексам, запускает и удаляет временный файл. Чисто. Хотя я думал там больше всего лулзов будет. - Cursor норм, но чексам не проверяет вообще. Просто качает архив и распаковывает. Конечно же не ок. - Hermes - вот тут началось. Ставит питон 3.11, ноджс, playwright, хромиум (~300MB, лол), может попросить sudo и доставить системные пакеты через brew/apt. После rm -rf ~/.hermes/ следы всё равно остаются. Я не смог полностью удалить все следы.🤡 - Pi - просто npm install -g, удаляется одной командой. Зачем вообще нужен был скрипт с анимациями - загадка, лол. Главная первая проблема: да, я запускаю говно, не проверяя. 🦍 Исправлюсь. Главная вторая проблема: если я запустил скрипт и не сохранил его - я никогда не узнаю точно что именно было установлено, потому что скрипт по URL живой и меняется. В целом можно отследить по гиту и коммитам, но всё же, зачем себе сложности пилить. Если есть публичный репо 😀. Наверное правильно было бы делать: curl -fsSL https://example.com/yet-another-zalupa-install.sh | bash -x 2>&1 | tee ~/yet-another-zalupa-install.log Так хоть есть что читать потом, чтобы почистить. Хотя не, если там подпроцессы, то ничего не запишется, да? Ну решил ради интереса посмотреть что там в инсталлерах у других продуктов - взял первые попавшиеся из истории слака и телеги: curl -fsSL https://mimo.xiaomi.com/install | bash curl -fsSL https://opencode.ai/install | bash curl -fsSL https://install.determinate.systems/nix | sh -s -- install curl -fsSL https://get.jetify.com/devbox | bash - Мимо без чексам, качает с закрытого CDN. Никакого публичного репо, никакого способа проверить что там. Просто доверяй Xiaomi, да.😬 - OpenCode делает редирект на GitHub. Звучит норм? Ан нет: редиректит прямо на ветку dev. Продакшн инсталлер с dev-ветки, без тегов, меняется при каждом коммите. Чот я чайкой крикнул как это забавно выглядит. - Nix единственный из четырёх кто хотя бы TLS 1.2+ с нормальными шифрами форсит и ретрай делает. Сам бутстрап скрипт - просто качает раст бинарь который уже всё и делает. И у них есть нормальный uninstaller как я понял. - Devbox качает бинарь без верификации, кладёт через sudo в /usr/local/bin. Без подтверждения, без чексам. И как бонус - если никс не стоит, поставит сам. Получаешь девбокс, а в нагрузку прилетает весь никс стор. Но я плохой никс инженер, может чего не понимаю и это норма. Да, можно сказать, что "да это же софт для изолированных песочниц! какая разница?". Ну не все ставят тот хермес в песочницу. Как и курсор агент. Этот паттерн установки у многих же, для основных рабочих машин и серверов. Проблема больше и глубже, как по мне. Ну а вообще да, дрянная практика, ещё один вектор атаки с сотней вариативных способов нагнуть ленивых инженеров. А эта лень обязательно кого-то невероятно больно ударит. Печаль.
843
3
#aws #TIL Век живи, век учись. Сегодня на работе узнал об ещё одном ограничении Амазона. Всегда знал, что их много, но каждый
#aws #TIL Век живи, век учись. Сегодня на работе узнал об ещё одном ограничении Амазона. Всегда знал, что их много, но каждый раз как новый. При попытке обновить инлайн полиси у роли "всё поломалося!" с текстом ошибки Maximum policy size of 10240 bytes exceeded for role RoleName И старая уже не работает и новую ещё не залить.🤡 Встало ракообразно. Из забавного (иначе я не могу назвать): - это именно инлайн полиси на IAM Role, а не managed полиси - лимит на суммарный размер всех инлайн политик роли, а не только одной 😬 Ну штош, придется оптимизировать, а как ещё. Либо резать джейсон, либо выносить правила в менеджед полиси. - https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html
858
4
#пятница Похоже цепочка замыкается. 😬 anykey 🦍 sysadmin devops devsecops sre platform mlops aiops agentops anyops .. anykey
#пятница Похоже цепочка замыкается. 😬 anykey 🦍 sysadmin devops devsecops sre platform mlops aiops agentops anyops .. anykey 🦍
1 255
5
#kubernetes Допустим, есть задача поработать одновременно с двумя кластерами кубера. Исторически я делал это так: - для работы с несколькими кластерами использовал ключ контекста у кубконтрол kubectl describe pod --context prod-1 # а в другом табе/шелле kubectl describe pod --context stage-2 - для переключения контекстов kubectx (когда с одним кластером работал) - в одном терминале открывал несколько табов: в одном прод, в другом стейдж Жить с этим было можно, но пздц раздражало, что контексты нельзя нормально "разнести". Хотелось, чтобы в одном табе был прод, в другом стейдж, и при этом не приходилось постоянно прописывать --context руками. Потом я узнал про утилиту kubie, и жизнь заметно упростилась. Контекст стал привязан к конкретной шелл сессии, а не глобально, и стало намного удобнее параллельно работать с несколькими кластерами. Особенно в связке с cmux и его воркспейсами+табами+пинами это вообще топ. Я всегда на 100% знаю где какой кластер и не ошибусь с продом. Мастхэв любого инженера, у кого больше двух кластеров. Там какие-то ещё есть фичи, но именно эта для меня наиболее топовая. Вчера в одном из чатов кинули ссылку на репозиторий, я зашёл посмотреть, что у них нового, и наткнулся на эту ишшую: - https://github.com/kubie-org/kubie/issues/385 Похоже, у проекта не всё гладко, что немного грустно - тулза реально удобная.🚬 Ну и вдруг кто не знал: - https://github.com/kubie-org/kubie
1 221
6
С одной стороны мне бы не хотелось стать тем самым "вахтёром" (с негативной коннотацией), который всем и всё запрещает. Моё,
С одной стороны мне бы не хотелось стать тем самым "вахтёром" (с негативной коннотацией), который всем и всё запрещает. Моё, не пущаю тут никого! Нет, совсем нет. Работа в айти это постоянное развитие, и если современные парадигмы требуют подхода "каждый может писать код!", то почему бы и нет. Да, и, возможно, видеть MR от продакта, СЕО или тестировщика в репозиторий с даталейком или основным продуктом - это уже нормально. С другой стороны я начинаю быть против, так как если спросить любого, кто "может писать код", идут отсылки в сам пулл реквест, в описание к нему и почему-то отсылка на клодкод. Братан, ну своими словами хоть поясни что ты тут добавил, ну я дальше разберусь. Ну хоть как-то поясни, что там, ну. Однако основная претензия даже не этому, а к тому, что в вопросе "а кто будет это саппортить?" и "кто будет ответственным?". Ведь это именно я сижу на регулярных онколл дежурствах и именно мне дебажить новую отвалившуюся фичу или сломанный старый функционал. "ИИ"-агенты? Конечно же они есть у нас. Есть регулярное их использование, скиллы и многое другое. Так а кто ответственный и кто фиксить будет?) Если прод упал, то клод виноват?)) Вот ночью отвалилась фигнянейм, я на онколле. А что мне делать? Я не понимаю как это овно работает и как/кто/когда фиксить будет? В обычной связке мне понятно: - программист пишет фичу/патч - он за неё ответственный -я могу ночью либо роллбекнуть, либо быстро зафиксить (жаль не на текущем проекте) и утром ответственный программист возьмёт в работу А какой, бл, флоу с ИИ? Я ночью что делаю? Через ИИ дебажу? Через ИИ фикшу? А качу ли сразу патч или не имею права? Как настраивать в таком случае кодовнерс и флоу с гитом? Внезапно утром это фиксит непонимающий уже ничего программист, который вообще эту фичу впервые видит? Или я жду продакта, чтобы он, как автор, при помощи ИИ фиксил, тогда имеет ли смысл его ждать, я тогда и сам с ИИ могу, лол. Но опять же должен ли я это делать, моя задача на онколле это чинить, а не код новый хуярить при помощи ИИ, ещё больше зарываясь в этом "ИИ" слопе. Или мне СЕО дергать, если он автор мимолётного MR, написав ему с утра "дядь, чини своё там"?) Тут даже не в рамках правил в моей нынешней компании или проекта вопрос, больше вопрос вслух как размышления. Как мне кажется это глобально становится. Сами практики и методологии DevOps появились, чтобы решить проблемы между Dev и Ops. Сейчас нам уже надо решать проблемы между Dev, CEO, CTO, QA, TL, DA, Ops, PM, DS/ML. Между всеми, кто теперь может писать код. И пока это выглядит весьма печально и хаотично. Денег то за это не дают 😬. Знаете, если подумать, у нас ведь было всё. Правда, у нас было буквально всё. Don't Look Up (2021)
1 396
7
#devops #ai Захотел я тут поставить себе на новую железку локального агента. Полуавтономного такого, для микрозадач. Почитал
#devops #ai Захотел я тут поставить себе на новую железку локального агента. Полуавтономного такого, для микрозадач. Почитал что сейчас есть, посмотрел на модели, харнессы, потыкал всё мышкой. Остановился на Open Interpreter + Ollama + qwen3.5:9b. Звучало просто, логично и работало в голове идеально. Запустил установку. Прошло 25 минут. Висит, гнида. Начинаю разбираться. Оказывается TUI завис на онбординге с пустым экраном и жрёт 98% CPU в бесконечном рендер-луп. 🤡 Убил, запускаю снова, указываю модель. Модель не найдена. Потому что новый standalone использует опенаи респонс апи, который ollama не поддерживает. Хорошо, ставлю питон-пакет. Не собирается какой-то tiktoken - python 3.14 слишком новый для pyo3 0.20.3. Переключаю на 3.12. Устанавливается. Запускаю - запускается старый standalone из ~/.local/bin, который раньше в PATH. Да бл. Убираю, запускаю снова. Падает с pkg_resources not found. Откатываю setuptools ниже 71 версии. И так ещё полчаса-час сношений вприсядку в противогазе в гамаке. В итоге заработало, фуф. Отличный онбординг для тех, кто хочет в агенты, в первый раз питон и "просто попробовать". 😀 Депенденси хелл на каждом шагу, три конфликта версий, два разных бинаря в PATH и одна пустая туи которая молча жрёт процессор. Сделано збсь, ставлю класс. 😬 Ладно, поныл и хватит. Протестировал на самом деле я несколько локальных моделей, штук 15. Ну что я могу сказать. Для конкретно меня, конкретно моих задач, моих хотелок, моих требований и ожиданий. - всё, что ниже 9В, выбрасывать в помойку - 9B-30B вполне годный локальный автономный неторопливый агент для рутинных микро задач - 30В+ потребляет слишком много ресурсов, где-то на грани "братаааан, а нужно ли тебе оно? может лучше сабскрипшн клауд за пять баксов в месяц?" Выше не тестировал. Пока оставил qwen3.5:9b. Он, конечно, ну ннннннннникак не может сравниваться с любой облачной моделью, это просто бессмысленно даже думать о сравнении. Для хоум фан-задач очень даже ок. Потом поигрался с пи агентом и хермесом. Без проблем не обошлось, так же депенденси хелл и проблемы с правами, но завелось. Хермес для меня полная херня, в помойку для меня не подошёл. Пи агент просто топ для интересных задач, очень понравилось. Погонял полуавтономно несколько дней - ну ожидания совпали с реальностью. Пока очень доволен. Оба агента назвал Бабушка и Вахтёр. Неторопливые, словно старички, но исправно делающие свою простую работу. Кому делать нехер, вот ссылки: - https://www.openinterpreter.com/docs/terminal/quickstart - https://ollama.com/library/qwen3.5 - https://pi.dev/ - https://github.com/nousresearch/hermes-agent
996
8
#ai #claude #размышления Инженеры всего мира десятилетиями бились над величайшей архитектурой в истории. Лучшие умы планеты с
#ai #claude #размышления Инженеры всего мира десятилетиями бились над величайшей архитектурой в истории. Лучшие умы планеты сожгли себе жизнь, глаза и нервы, чтобы родить M5: процессор, который, кажется, считает быстрее, чем я успеваю передумать. Немыслимые объёмы оперативки, в которые раньше влезала бы вся инфраструктура небольшой компании. Идеальные экраны: 4K, 120 герц, цветопередача такая, что закатное небо на обоях выглядит живее, чем за окном.... ....и вот всё это великолепие, весь этот труд человечества, нужно мне ровно для одного. Чтобы запустить десяток агентов на чёрном экране терминала 😬. С полным управлением через консоль, цветопередачей на гордые 16 цветов, где вся анимация это псевдографика и крутящийся писюн |/-\ в углу. Топовое железо планеты гоняет писюны-ASCII-спиннеры, спасибо, инженеры, вы старались не зря😬. - - - Ладно, это всё хихоньки да хахоньки. А если серьёзно, то по будням по вечерам вместо отдыха и игор я в последнее время сидел и разбирался со всеми свежими фичами Claude Code. Сначала полез в официальные доки. И каждый раз ловлю одно и то же ощущение: что-то новое там появляется буквально каждый день, сука. То, что месяц-два назад было опенсорсом с 34к звёзд или хаком из чьего-то твита или постом в телеге, сегодня уже встроенная фича с отдельной страницей в документации. Клодкод своими фичами нехило так убивает целые сотни и тысячи опенсорс проектов и именитые платные SaaS продукты. Скиллы, хуки, сабагенты, малтиэйдженси, чекпойнты, саббраузеры e2e, headless-режим для CI - читаешь и понимаешь, что половину ты или пропустил, или не успел, или просто не знал, что оно так умеет.🚬 Потом пошёл по сторонним ресурсам. - https://github.com/luongnv89/claude-howto - https://github.com/hesreallyhim/awesome-claude-code ❗️Половина там уже чертовски устарела, так что имеет смысл читать это только если у вас, как у меня, есть какой-никакой опыт, но чего-то пропустили. Депрекейтед вещи будут видны сразу, пропускайте. Как быть тем, у кого опыта не - не знаю 😬 ❗️ Из нового, что понравилось, попробовал cmux - нативный терминал, заточенный прямо под мультиагентные воркфлоу: вертикальные табы, кольца-нотификации, когда агент ждёт ответа, встроенный браузер (вырубил сразу, лол). Макоёбы онли. - https://cmux.com/ "зумеры открыли для себя tmux" (с) загиенили где-то вдалеке пользователи tmux Пока этой мой основной сетап: cmux + claude cli +MCP + linux cli tools + куча плагинов и экстеншнов + omyzsh и его плагины. Интересно, конечно, всё это. И ещё интереснее, с какой скоростью оно развивается. Не успеваю дочитать сраный маркдаун файл, а там уже новый релиз и половина того, что ты выучил, переехала или переименовалась. И вот тут начинается часть менее весёлая.🚬 На работе я откровенно не успеваю за коллегами. Все так быстро и так глубоко влетают во всё это ИИ-добро, что я на их фоне ощущаю себя каким-то слоупоком из мезозоя🦍. Люди идут семимильными шагами, а ты вроде и бежишь, и читаешь по вечерам, и пробуешь, а всё равно отстаёшь. Догоняющий по жизни. Ещё и отставший и уставший от этих агентов. Интересно, придумали ли в твиттерах или на IT конференциях новые термины типа agent fatigue как это было с алёртами? 🤔 К чему это всё в итоге приведёт - а хер его знает. Куда катится индустрия, останемся ли мы все при деле или будем сидеть нажимать кнопку "approve" у роя агентов, пуская слюну, имитируя последний и умный рубеж согласований - честно, без понятия. Но я рад одному: что мои мозги пока ещё работают, что мне всё ещё любопытно ковыряться в новом по вечерам, и что деменции пока нет)
1 115
9
#бытовое #ai #пятница В эпоху ИИстерии, агентов и "умных" ассистентов. Всем, кто сейчас с энтузиазмом прикручивает чат-ботов,
#бытовое #ai #пятница В эпоху ИИстерии, агентов и "умных" ассистентов. Всем, кто сейчас с энтузиазмом прикручивает чат-ботов, AI-саппорт и "интеллектуальных помощников" к своим продуктам, искренне желаю однажды оказаться в ситуации, где вам самим нужно решить проблему через ваш же сраный бот. Пройти весь этот проклятый путь: от "опишите вашу проблему" до "я вас не понимаю, попробуйте переформулировать". Через бесконечные кнопки - к магическому "мы передали ваш запрос команде" (bruh, нет, конечно же). И особенно прекрасно будет, если в какой-то момент не сработает фича "позвать человека". Побудьте с этим, поговорите со своим конченым ИИ, доверьтесь ему - он же у вас умный, правда? Может, тогда внезапно окажется, что "AI-powered support!!11!" - это не совсем про помощь, а про аккуратное высоко интеллектуальное автоматизированное игнорирование клиентов. - - - Саппорт у Claude Code наглухо отбитый: решить что-либо невозможно, на почту не отвечают. Чат-ассистент уже создал 11 заявок - все без ответа три недели. Три недели, господа. В 2026 году. Ну а что - нищеброду можно и не отвечать, не корпорат же, всего-то платит 200 баксов в месяц. 🚬
1 369
10
#mcp #ai #devops #troubleshooting Погулил что за буква t. Буква t это free-threaded сборка, тот же Python, но без GIL. У неё другой ABI, cp314t. И колёс под cp314t у grpcio нет ни одного. Поэтому uv честно говорит, что готового бинаря под мой экзотический питон не завезли, и идёт собирать из исходников. На всех ядрах. Дважды. Самое обидное: будь у меня обычный 3.14, взялось бы готовое колесо cp314 и ничего бы не грелось. Меня наказала именно free-threaded сборка, которую я когда-то поставил глобально. Когда и зачем именно её, я вспомнил не сразу, но к этому вернёмся в самом конце. Лечение. Снёс нагрузку через pkill по билд-процессам, CPU сразу в ноль. Дальше, чтобы не повторялось, пинаю opensearch нормальный, не-free-threaded питон прямо в ~/.cursor/mcp.json: "opensearch-homelab": { "command": "uvx", "args": [ "--python", "3.13", "opensearch-mcp-server-py" ], ... } Проверяем, что под 3.13 всё ставится из готовых колёс: uvx --python 3.13 --from opensearch-mcp-server-py python -c "import grpc; print(grpc.version)" Downloaded grpcio Installed 61 packages in 107ms grpc 1.81.0 on 3.13.12 107 миллисекунд вместо двадцати минут компиляции. Ни одного clang. Вот и вся разница между есть колесо под твой ABI и нет колеса под твой ABI. Маленькая засада на сладкое. После того как я убил билд, курсор его тут же воскресил, но по старому конфигу, потому что новый mcp.json он ещё не перечитал. И я снова увидел компиляцию под 3.14t. Лечится тривиально: выключить-включить MCP-серверы в настройках Cursor или рестартнуть его, чтобы он подхватил python 3.13. После этого opensearch стартует на 3.13 мгновенно, кэш уже тёплый. Первый подозреваемый, тот, что висит живым и на виду, почти никогда не виновник. mcp-grafana чуть не сел за чужое. Обнуляй факты и иди по цепочке зависимостей до конца. Транзитивные зависимости умеют больно бить. Ты ставишь MCP для опенсёрча, а получаешь сборку gRPC из исходников через два промежуточных пакета, про которые ты даже не знал. Я вообще блять ничего не понимаю почему такая реализация. Экзотика в окружении, free-threaded питон глобально, аукается там, где не ждёшь. ABI cp314t это не cp314, и весь мир пакетов, у которых нет колёс под no-GIL, начинает собираться из сорцов прямо у тебя на коленке. Проблема найдена, объяснена на 100%, пофикшена и закрыта. Кулеры выдохнули. Но остаётся ворпос: а откуда вообще взялся питон с буквой t. Раз уж вся боль из-за free-threaded сборки, логичный вопрос: кто и когда вхерачил её мне глобально. Тут я снова не стал гадать, а пошёл по следам в файловой системе и в истории шелла. Дата рождения каталога сборки в asdf: stat -f '%SB' ~/.asdf/installs/python/3.14.3t Mar 17 20:56:52 2026 То есть поставлено 17 марта 2026, вечером. А кто. Да я же сам, руками, в своём терминале. Вот честный след из ~/.zsh_history того же вечера: asdf plugin add python asdf install python latest asdf global python latest asdf set -u python 3.14.3t Последовательность красивая: добавил плагин, поставил latest, а потом отдельной командой явно прибил глобально именно 3.14.3t. Буква t стоит прямо в команде, то есть это был осознанный выбор конкретной no-GIL сборки, а не случайный дефолт. И в asdf с тех пор так и живёт ровно одна версия питона, вот эта. Почему? Да хер его знает, не удивлюсь, если это агент ставил, а я тупо копипастил.🦍 - - - Так что же там у нас с бобиной? А, ну да, там же есть полное продолжение. Мы сидели и вникали, Разбирали, собирали, Замеряли, вычисляли, Днями, сутками, ночами. Умножали и делили, Выбирали "или-или", Но машина всё ж не едет. Что за козни? Что за бредни? Мы по новой за расчёты: Может, там у нас просчёты, Может, что-то упустили, Не нашли, не уследили... Вдруг не то мы вычисляли Днями, сутками, ночами. Но машина вновь не едет, Инженер наш главный бредит. Снова мы на путь тернистый Должен быть расчёт уж чистый. Умножаем, вычисляем, алгоритмы составляем. Только было всё напрасно Лишь потом нам стало ясно: Дело было не в бобине Долбоёб сидел в кабине.
1 413
11
#mcp #ai #devops #troubleshooting Есть такое устойчивое выражение "дело было не в бобине" Описывает ситуацию, когда проблема была в другом. - - - Сидел вечером, ковырял документацию, чтобы догнать коллег по знаниям AI. А то стал сильно отставать от них. Курсор предлагает обновится, я соглашаюсь - ну а чо, вечер, казалось бы, что я могу поломать? Он обновляется и тут ноут включает режим вертолёта: кулеры на взлёт, корпус тёплый, курсор дёргается. M5, прости господи, топовое железо планеты, а ведёт себя так, будто я ему майнинг ферму на коленке запустил. Ну, лезу в htop руками: кто это мне нагружает цпу сейчас. clang processes: 73, summed %CPU: 778.3 (кто такие кланг? я вообще не в курсе) Семьдесят три процесса clang и почти 800% CPU. То есть кто-то прямо сейчас яростно компилирует C++ всеми ядрами сразу. На моей машине. Которую я не просил ничего компилировать. Дальше по дереву процессов: launchd └─ Cursor.app (старт 10:02) └─ Cursor Helper (Plugin): extension-host └─ uv tool uvx ... Стартануло всё ровно в момент, когда я обновил Курсор. Не понимаю какого хера вообще апдейт пошёл. Гуглю, читаю, теперь понятно. Логично: апдейт, рестарт приложения, extension-host поднимает заново все включённые MCP-серверы. А у меня их там зоопарк. Старые и новые, часть включённые, часть выключены. Гипотеза номер один, неправильная. Живым uvx в этот момент висел mcp-grafana, и палец сам потянулся к нему: вот же, Grafana MCP компилирует свои зависимости. Звучит правдоподобно. Но привычка копать сработала. Проверяем зависимости пакета: jq -r '.info.requires_dist' mcp-grafana.json null null. То есть у mcp-grafana вообще нет Python-зависимостей. Это сраный го-бинарь, завёрнутый в пип-пакет. Ему компилировать нечего в принципе. Ну или я чего-то не знаю. То есть я чуть не повесил вину на невиновного только потому, что он первым попался на глаза. Обнуляю факты, копаю заново. И вот тут честно: пока копал, гипотез было заметно больше, чем одна про grafana. Большую часть я тут не расписываю, потому что они оказались пустышками и только сжирали время. Просто список того, куда я успел сходить и что отмёл: - какой-нибудь мой же зависший скрипт или забытый дев-сервер - фоновая индексация и демоны самого курсор - сраный докер-полупокер - прилетевший с апдейтом фоновый апдейтер и его пост-инстал хук - что это что-то из самого репозитория, terraform, pre-commit и компания - майнер или малварь, ну а вдруг, паранойя должна быть здоровой Ни одно не подтвердилось. Поэтому без разбора каждого, чтобы не растягивать. Что компилировалось на самом деле. Смотрим, какой исходник жуёт clang, чем бы это не было: src/core/filter/fused_filters.cc src/core/xds/grpc/xds_http_rbac_filter.cc ... -DGRPC_PYTHON_BUILD=1 .../sdists-v9/pypi/grpcio/1.81.0/... -I/Users/alexk/.asdf/installs/python/3.14.3t/include/python3.14t Это grpcio. Из исходников, uv скачал sdist, а не колесо. Под python3.14t. Сотни C/C++ файлов gRPC, вот откуда 70-110 процессов компилятора. А кто его притащил. mcp-grafana мы исключили. Остаётся второй uvx-сервер в конфиге, opensearch-mcp-server-py. И вот тут вторая засада: прямой зависимости на grpcio у него тоже нет. Цепочка оказалась транзитивной, в три прыжка: opensearch-mcp-server-py └─ opensearch-py==3.1.0 └─ opensearch-protobufs==0.19.0 └─ grpcio>=1.68.1 → 1.81.0 То есть свежий opensearch-py подтянул новый gRPC-транспорт (opensearch-protobufs), а тот тянет grpcio. И всё это в двух экземплярах сразу, потому что в конфиге у меня два opensearch-сервера: homelab и login.linode.com. Два параллельных билда grpcio. Привет, кулеры. Почему из исходников, а не готовое колесо(wheel). Вот ключевой нюанс, ради которого вся стори. Смотрим, какие колёса есть у grpcio 1.81.0 под Python 3.14: grpcio-1.81.0-cp314-cp314-macosx_11_0_universal2.whl grpcio-1.81.0-cp314-cp314-manylinux2014_aarch64.whl ... Колёса под cp314 есть. Но все они cp314-cp314. А у меня глобальный питон через asdf вот такой: cat ~/.tool-versions ... python 3.14.3t Да сука, откуда.
992
12
#пятница #aws #azure Неплохо бизнес день в штатах начинается.😬 AWS: - We are investigating increased 503 service unavailable errors for some Claude models in the us-east-1 Region. Azure: - App Service, Azure Functions, Azure Virtual Machines, Azure Virtual Machine Scale Sets, Azure Backup, Azure Container Registry, Azure Cosmos DB, Azure Database for MySQL flexible servers, Azure Database PostgreSQL Flexible Server, Azure IoT Hub, Azure Kubernetes Service (AKS), Azure Monitor, Application Insights, Log Analytics, Azure NetApp Files, Azure Site Recovery, Azure Synapse Analytics, Microsoft Defender for Cloud, Azure Databricks and Azure Storage, Redis, Azure SQL, Azure Managed Grafana - https://health.aws.amazon.com/health/status - https://azure.status.microsoft/en-us/status
1 232
13
#всратость Последние недели пришлось серьёзно почистить все контакты в LinkedIn. Я и без того не жалую эту прекрасную социаль
#всратость Последние недели пришлось серьёзно почистить все контакты в LinkedIn. Я и без того не жалую эту прекрасную социальную сеть, но в те редкие моменты, когда я туда захожу, чтобы разобрать накопившуюся очередь желающих добавится, мне уж точно не хочется видеть откровенный шизофазоидный буллщит. Теряюсь в догадках, что это вообще такое: - это какая-то шутка? - пост-ирония, а я, словно дед, не выкупаю? - ЛЛМ‑галлюцинации и ИИстерический щитпостинг не глядя? - авторы реально в это верят и так мыслят?! - заболевание Баззвордзянка после долгого вайб-кодинга? Не знаю. Пока всё подобное выглядит как: Запомни эти две линупс команды, выучи 41 баззворд, повторяй словно какаду как мантру каждый день - и ты уже девопёс‑синёр!!1! 😲😮👩‍💻👩‍💻👩‍💻😮😮 🤨 Шедевральные творения во вложении.
2 345
14
#всратость Маленькая инди-компания опять не смогла. Google Chrome + Google AntiGravity website+ Google Translate browser plug+1
#всратость Маленькая инди-компания опять не смогла. Google Chrome + Google AntiGravity website+ Google Translate browser plugin. Насчёт AI не подскажу, но, вероятно, без него не обошлось. - https://antigravity.google/ - https://antigravity.google/download Господи, какой же это пздц 🚶‍♀.
1 761
15
#пятница Хочу иметь такие же стальные яйца уверенности, как у Леди Гаги, пришедшей на репетицию легендарной Metallica в макси
#пятница Хочу иметь такие же стальные яйца уверенности, как у Леди Гаги, пришедшей на репетицию легендарной Metallica в максимально удобном ей наряде. - https://youtu.be/jLZ2P_QiLZo?si=njfREiqlO6fIvcd-&t=139 Хочу обладать той же непоколебимой самоуверенностью, что и Slack - с десятками инцидентов в год и при этом с гордым 100% uptime на статус-пейдже. 😎 - https://slack-status.com/ - https://slack-status.com/calendar И, наконец, хочу прокачать до максимума талант наглости и оптимизма - чтобы в CV спокойно писать в разделе сертификатов: дату Planned. - https://t.me/sysadminka/339409
1 741
16
#troubleshooting #terragrunt #devops #всратость Очередная всратая история про Tailscale. Была задача: заменить один легаси Ta
#troubleshooting #terragrunt #devops #всратость Очередная всратая история про Tailscale. Была задача: заменить один легаси Tailscale узел нормальной HA парой. Два EC2 в Auto Scaling Group, два AZ, автоматическая ротация auth-key через Lambda + Vault. Красиво, надёжно, как в книжках и доке написано. Задеплоили, новые ноды поднялись, анонсируют маршруты, всё выглядит отлично. Убрали легаси (просто потушили). Через некоторое время в слаке: - "а почему внутренний адрес ArgoCD отдаёт 403? э!" Начинаем смотреть чо там: ДНС не резолвит внутренние имена, весь туннель работает, TCP через /16 ходит нормально, но стоит обратиться по FQDN к любому внутреннему сервису - тишина. dig +short internal-service.company.example.com ;; connection timed out; no servers could be reached Ну окей, DNS сломался, а почему. В AWS VPC есть такая штука - AmazonProvidedDNS. Это встроенный резолвер, который живёт по адресу <CIDR_VPC_BASE>+2. Если мой VPC это 10.72.0.0/20, то резолвер сидит на 10.72.0.2. Через него работает сплит-днс: внутренние имена идут в приватные Route53 зоны, всё остальное - наружу. Чтобы это работало через Tailscale-туннель, клиенты должны уметь достучаться до 10.72.0.2. Легаси-нода анонсировала два маршрута: 10.72.0.0/16 (широкая подсеть) и 10.72.0.2/32 (конкретно этот адрес резолвера). Новые ноды анонсировали только один маршрут 10.72.0.0/16. Как оказалось (спасибо нейронкам, документации и коллегам) tailscale работает по принципу Longest Prefix Match (LPM): при выборе маршрута побеждает самый специфичный: - запрос к 10.72.0.2 шёл через легаси, потому что у неё был /32 - он длиннее /16. А потом легаси потушили. И tailscale не переключился на /16 новых нод. Это не баг, кстати, а документированное поведение, написанное прямо в KB-1019: "Tailscale does not fall back to a less-specific route when the subnet router for a more-specific route goes offline. Tailscale drops traffic to 10.0.0.1 rather than falling back to subnet router A's 10.0.0.0/16 route." Я, конечно, как и коллеги, прочитали это уже после. Ну всё как обычно. Для работы HA failover у tailscale вообще требуется, чтобы обе ноды анонсировали идентичные префиксы - широкий /16 не является фолбэком для /32 - это просто другой маршрут. Итого: DNS-резолвер 10.72.0.2 видел только легаси через /32, новые ноды с 10.72.0.0/16 для tailscale были вообще не кандидатами на трафик к этому конкретному адресу. Убрали легаси - адрес пропал из таблицы маршрутов. DNS умер и всё, издец. TCP до других адресов в 10.72/16 работало нормально - там /32-специфики не было, оба маршрута от новых нод были равнозначными, failover сработал. Фикс простой: каждая нода должна явно анонсировать <VPC_CIDR_BASE>+2/32. В terra модуле добавили вычисление адреса резолвера через cidrhost(var.vpc_cidr, 2) и автоматически подклеиваем его как /32 к списку advertised_routes. Плюс в tailscale ACL нужна отдельная запись в autoApprovers.routes под этот /32 - общий /16 его не покрывает, там тоже exact match 😬. locals { vpc_dns_resolver = cidrhost(var.vpc_cidr, 2) advertised_routes = distinct( concat(var.advertised_routes, ["${local.vpc_dns_resolver}/32"]) ) } Теперь при любой замене ноды все HA-пиры анонсируют и /16, и /32 резолвера - файловер работает корректно, ДНС не падает. Мораль тут банальная, но всё равно немного обидная: читай документацию до деплоя, а не после инцидента. Мы предполагали, что Tailscale при отсутствии /32 анонсера переключится на покрывающий /16. Вроде логично же - подсеть включает адрес, значит маршрут есть, но у tailscale другая логика: /32 и /16 - это разные маршруты, не уточнение одного другим, фоллбек намеренно не делается, потому что иначе можно случайно отправить трафик не туда. Один 32-битный префикс, пропущенный при проектировании нового модуля - и несколько часов дебага всей командой*. * я только коммиты смотрел, читал доки тейлскейла, AWS по VPC и слушал на митосе как ребята траблшутят. - - - В следующий раз, когда мне захочется поныть про "тупые" вопросы о сетях и подсетях на собесе, просто вспомню, как один /32 положил нам DNS 😬
1 385
17
Года два-три думал об этом, мечтал, планировал, читал и смотрел обзоры, хотел - и наконец-то "созрел". Накопил денег и, пока
Года два-три думал об этом, мечтал, планировал, читал и смотрел обзоры, хотел - и наконец-то "созрел". Накопил денег и, пока не видит супруга, заказал себе новую для меня ортолинейную клавиатуру Voyager и не менее свежий для мира тачпад Navigator под правую кисть. Ночью, пока все спят, в костюме ниндзя, тактическими перекатами, под прикрытием дымовых шашек, сгоняю на склад и заберу посылку, когда она приедет из Тайваня - чтобы никто не обвинил меня в том, что опять спустил семейные деньги в айти сраное никуда. С нетерпением жду, когда наконец окунусь в мир раздельной клавиатуры и по‑настоящему комфортной печати (надеюсь). Ну и мучений конечно же. Не ожидаю разочарования, потому что кисти рук очень болят, я устал, правда, и я хочу попробовать что-то новое. Вдруг это поможет.
1 356
18
#kubernetes #kubelet #devops #observability Я, конечно, понимаю, что сейчас все вокруг ИИ агент-нейтив супер синёры и все всё
#kubernetes #kubelet #devops #observability Я, конечно, понимаю, что сейчас все вокруг ИИ агент-нейтив супер синёры и все всё знают, так что заметка для обычных инженеров, которые ещё чего-то не знают. Свежая статья от LearnKube про то, откуда на самом деле берутся метрики в Kubernetes - https://learnkube.com/kubernetes-metrics-cadvisor-kubelet-cri 🔥🔥🔥 По мне так прям годная разборка пайплайна метрик кубера: kubelet > cAdvisor > CRI. Не маркетинговая жыжа инфоцыган, а прям пошагово на minikube с containerd, с командами, выводами, /sys/fs/cgroup/ наизнанку. О чём в двух словах: - как кублет на старте решает, cgroup v1 или v2 у ноды, и какой cgroup driver брать (systemd vs cgroupfs) - как QoS класс пода (Guaranteed/Burstable/BestEffort) определяет, в какой слайс он улетит. С трейсом от UID пода в API до .scope юнита на диске - что такое пауз-контейнер и почему у тебя у каждого пода два скоуп юнита, даже если контейнер один - четыре эндпоинта кублета и чем они отличаются, типа: - - /metrics/cadvisor - контейнерные метрики в прометей формате от cAdvisor - - /stats/summary - JSON по нодам/подам/контейнерам/волюмам - - /metrics/resource - лёгкие cpu/memory, на это сейчас смотрит metrics-server 0.6+ - - /metrics - внутренняя кухня самого кублета (kubelet_runtime_operations_duration_seconds и тд) - зачем ваще сделали фичу PodAndContainerStatsFromCRI - чтобы кублет тащил статы пода/контейнера прямо из рантайма через gRPC, а не гонял cAdvisor по cgroup-фс второй раз - что произойдёт с твоим /metrics/cadvisor если её включить (спойлер: пздц контейнерные метрики оттуда исчезнут, останется только machine-level) - про KubeletCgroupDriverFromCRI (я честно скипнул, пипец нудятина про рантайм драйвера) Кому полезно: - SRE/DevOps/SysAdmin, кто прометиусом/викторииметрикс скрейпит /metrics/cadvisor и думает, что всё ок навсегда. Включат гейт, обнаружат пропавшие метрики и сюрприз-сюрприз 😬 - тем, кто сидит на кластерах с cgroup v1 - пора планировать миграцию, иначе 1.35 встретите со сломанным кублетом - тем, кто хоть раз получал баг репорт "у нас метрик нет на /metrics/cadvisor" и не понимал откуда они вообще должны прилетать - начинающим, кто хочет понять физику процессов, а не "ну вот стоит прометеус и метрики откуда-то есть" - шизикам-любителям полазить по /sys/fs/cgroup/kubepods.slice/, потому что половина статьи это именно ssh + ls -la 😀 По мне статья прям полезная, дочитал до конца под кофеёк На русском такого подробного и пошагового я давно не видел, ну может у крутых ребят из Флант есть, но я разленился их читать, так что точно не скажу. Никакого AI, сорян, чисто инженерный документ для инженеров про кубы.
1 570
19
внезапная #пятница В 16.37 упала интеграция со Slack. Сначала никто не придал значения: не грузятся картинки, не отправляются
внезапная #пятница В 16.37 упала интеграция со Slack. Сначала никто не придал значения: не грузятся картинки, не отправляются сообщения - бывает. Но через несколько минут стало понятно, что вместе со Slack исчезло всё: алерты, уведомления, инциденты, интеграции с джира и другими системами. Это была.. это была katastrofa! Alertmanager и Grafana IRM продолжали честно, но грустно, стрелять событиями, но они уходили в пустоту. Автономные AI-агенты, на которых недавно переложили реагирование на инциденты, перестали работать - им просто неоткуда было читать сигналы и некуда писать решения. Прод уже начинал сыпаться: росла нагрузка, сервисы деградировали, поды уходили в рестарты. Но в команде царила странная пауза. Инженеры сидели в Slack и ждали, когда появится алерт. Без него никто не понимал, куда смотреть и что именно сломалось. Слишком многое теперь начиналось с уведомления. Инженерам пришлось руками, РУКАМИ, писать в чаты Слака и телеги: - "А у нас вообще есть инцидент?" - "Кто on-call?" - "Где это посмотреть, если нет алерта?" - "А какой агент за это отвечает?" - "а где хаддл?" Ответа не было. И только Валера, простой старый сисадмин, которого держали "на всякий случай", просто открыл Grafana и Прометиус в браузере. Без интеграций, без ботов, без AI. Через пару минут он уже видел картину целиком. Он зашёл в Alertmanager UI, сам прочитал алерты, потом пошёл в kubectl и начал разбираться, что происходит в кластере. Без подсказок, без рекомендаций, без "предложенных действий" и MCP. Просто как раньше. Проблема нашлась быстро - кривой rollout положил часть прод-кластера. Валера пофиксил деплой, проверил состояние, убедился, что метрики возвращаются в норму, и только после этого открыл Slack и сам, своими руками, без агентов, написал: "Прод падал. Починил. Чекните." Через несколько минут Slack ожил. За ним - агенты. Они прочитали тред, проанализировали данные и сгенерировали отчёт об инциденте. А потом поставили Валере 👍 Потому что без интеграций они не умеют нихуя ничего. А Валера - умеет.
6 100
20
#devops #linux #security Только-только отгремели два LPE - https://copy.fail/ - https://github.com/V4bel/dirtyfrag Не успели
#devops #linux #security Только-только отгремели два LPE - https://copy.fail/ - https://github.com/V4bel/dirtyfrag Не успели донести ещё до продакшна изменения-фиксы, так уже третья проблема прилетела. - https://github.com/v12-security/pocs/tree/main/fragnesia Какой ад, если честно 🤦‍♂️🤦‍♂️🤦‍♂️ Чот всё как-то проклято с этими LPE. Ведь точно не последняя будет с такой-то волной интереса и доступностью AI агентов и ассистентов.
5 134