Отгружаю больше кода, чем раньше, а вечером выжат сильнее, чем от ручной работы. Оказалось, это не только у меня...
Наткнулся на статью Сиддханта Кхаре, один из мейнтейнеров OpenFGA. Его тезис: настоящий скилл сейчас не prompt engineering и не выбор модели, а умение вовремя остановиться.
Раньше нагрузка была понятная: час дебажил, разобрался, выдохнул. Сейчас цикл другой. Агент генерит, я ревьюю, вижу косяк, подкручиваю промпт, он генерит заново. И так по кругу. Руки почти не устают, а голова к вечеру как после суток на проде. Держать в фокусе чужой код, который постоянно меняется, это отдельная нагрузка. Я думаю все кто последнее время много использует AI, понимают сейчас о чем я.
В феврале поймал себя на мысли: сижу в 23:40, пятая итерация одной механики, каждая на 90% рабочая. Руками дописал бы за 20 минут ещё в семь вечера. А тут залип.
Вернулся к старому правилу из зала: тащит не мотивация, а дисциплина и режим. Поставил жёсткую точку. Не свёл агент задачу за пару итераций, закрываю ноут и дописываю сам утром на свежую голову.В целом поставил себе за правило решать рабочие задачи в рабочее время, но это тема другого поста.
Продуктивность выросла, спору нет. Только считать её надо не в отгруженных строках, а в том, с какой головой ты встаёшь из-за стола :-)
Наткнулся на статью Сиддханта Кхаре, один из мейнтейнеров OpenFGA. Его тезис: настоящий скилл сейчас не prompt engineering и не выбор модели, а умение вовремя остановиться.
Раньше нагрузка была понятная: час дебажил, разобрался, выдохнул. Сейчас цикл другой. Агент генерит, я ревьюю, вижу косяк, подкручиваю промпт, он генерит заново. И так по кругу. Руки почти не устают, а голова к вечеру как после суток на проде. Держать в фокусе чужой код, который постоянно меняется, это отдельная нагрузка. Я думаю все кто последнее время много использует AI, понимают сейчас о чем я.
В феврале поймал себя на мысли: сижу в 23:40, пятая итерация одной механики, каждая на 90% рабочая. Руками дописал бы за 20 минут ещё в семь вечера. А тут залип.
Вернулся к старому правилу из зала: тащит не мотивация, а дисциплина и режим. Поставил жёсткую точку. Не свёл агент задачу за пару итераций, закрываю ноут и дописываю сам утром на свежую голову.
Продуктивность выросла, спору нет. Только считать её надо не в отгруженных строках, а в том, с какой головой ты встаёшь из-за стола :-)
👍6
QUERY, новый метод HTTP, который твой прод пока не понимает.
Про него сейчас пишут из каждого утюга. Первый метод со времён PATCH, наконец-то легальный "GET с телом", гайды, разборы, "внедряй уже сегодня".
Стандарт написали в том числе инженеры Cloudflare и Akamai, это CDN, через которые проходит половина интернета. И кэшировать QUERY на масштабе их же сетей пока толком не выходит. По спеке ответ кэшируется, только ключ кэша надо считать по телу запроса, а не по URL, и вот это на объёме ещё не готово.
Дальше по списку та же картина. Браузеры не умеют слать QUERY через fetch. OpenAPI 3.1 про метод не знает, генератор доки просто выкинет эти ручки. WAF-ы держат allowlist методов, и незнакомый QUERY либо режут, либо пропускают мимо инспекции.
Что это значит на практике. Публичное API с браузерным фронтом на QUERY сейчас не переведёшь, держи POST-фолбэк. А там, где оба конца твои, service-to-service между своими сервисами, метод уже применим.
Стандарт вышел, инфра догоняет. Нормальная история для HTTP, просто не ведись на "используй уже сегодня".
Но сначала проверь, что весь путь запроса, от балансировщика до сервиса, вообще знает про этот метод :-)
Про него сейчас пишут из каждого утюга. Первый метод со времён PATCH, наконец-то легальный "GET с телом", гайды, разборы, "внедряй уже сегодня".
Стандарт написали в том числе инженеры Cloudflare и Akamai, это CDN, через которые проходит половина интернета. И кэшировать QUERY на масштабе их же сетей пока толком не выходит. По спеке ответ кэшируется, только ключ кэша надо считать по телу запроса, а не по URL, и вот это на объёме ещё не готово.
Дальше по списку та же картина. Браузеры не умеют слать QUERY через fetch. OpenAPI 3.1 про метод не знает, генератор доки просто выкинет эти ручки. WAF-ы держат allowlist методов, и незнакомый QUERY либо режут, либо пропускают мимо инспекции.
Что это значит на практике. Публичное API с браузерным фронтом на QUERY сейчас не переведёшь, держи POST-фолбэк. А там, где оба конца твои, service-to-service между своими сервисами, метод уже применим.
Стандарт вышел, инфра догоняет. Нормальная история для HTTP, просто не ведись на "используй уже сегодня".
Но сначала проверь, что весь путь запроса, от балансировщика до сервиса, вообще знает про этот метод :-)
👍5
В августе выйдет Go 1.27 и тихо сломает часть прода. Покажу 2 места, куда стоит заглянуть grepом заранее.
Первое:
У меня как раз висел анмаршал ответа внешнего API, который упорно шлёт USER_ID капсом, а тег в структуре user_id. На 1.26 работало, на 1.27 молча приедет ноль, и узнаешь ты об этом по инциденту.
Второе: безвозвратно удалили
Полный список изменений: https://go.dev/doc/go1.27
Первое:
encoding/json под капотом переезжает на v2, матчинг имён полей становится регистрозависимым. Раньше json.Unmarshal спокойно клал поле USER_ID в структуру с тегом user_id, теперь промах и остаётся zero value. Кстати, ровно это case-insensitive поведение недавно аукнулось в MCP Go SDK: ключи JSON-RPC можно было слать капсом и протаскивать payload мимо WAF, который по спеке ждёт точный регистр. CVE-2026-27896, пофиксили переходом на case-sensitive декодер.У меня как раз висел анмаршал ответа внешнего API, который упорно шлёт USER_ID капсом, а тег в структуре user_id. На 1.26 работало, на 1.27 молча приедет ноль, и узнаешь ты об этом по инциденту.
Второе: безвозвратно удалили
GODEBUG asynctimerchan. Каналы time.NewTimer и time.NewTicker снова всегда синхронные, отката нет. Если где-то в тестах на тикерах ты полагался на асинхронную буферизацию канала, это тихая мина: тест начнёт флапать или виснуть в CI, а причину будешь искать полдня.Полный список изменений: https://go.dev/doc/go1.27
❤3
Последнее время всё чаще думаю про AGI.
Особенно после того, как потрогал Fable от Anthropic (успел до нерфов).
Быстрый ликбез, если кто не в теме. ИИ принято делить на три уровня:
- ANI (Artificial Narrow Intelligence) - узкий ИИ, тот самый, что у нас есть сегодня.
- AGI (Artificial General Intelligence) - интеллект примерно человеческого уровня, решает широкий круг задач.
- ASI (Artificial Superintelligence) - сверхинтеллект, превосходит человека почти во всех интеллектуальных задачах.
Простым языком про эволюцию от ANI к AGI и ASI написано здесь.
На выходных прочитал две статьи, и обе про то, что AGI ближе, чем кажется.
- Дженсен Хуанг, CEO Nvidia: «думаю, мы уже достигли AGI». Под AGI он понимает систему, которая делает значимую интеллектуальную работу и создаёт новые продукты.
- Демис Хассабис, глава Google DeepMind, аккуратнее в прогнозах: AGI ждёт к 2029-2030, а сегодняшние ИИ-агенты пока лишь «генеральная репетиция» перед ним. Отдельно он выделяет рекурсивное самоулучшение: момент, когда ИИ начнёт сам ускорять разработку следующего поколения ИИ.
Особенно после того, как потрогал Fable от Anthropic (успел до нерфов).
Быстрый ликбез, если кто не в теме. ИИ принято делить на три уровня:
- ANI (Artificial Narrow Intelligence) - узкий ИИ, тот самый, что у нас есть сегодня.
- AGI (Artificial General Intelligence) - интеллект примерно человеческого уровня, решает широкий круг задач.
- ASI (Artificial Superintelligence) - сверхинтеллект, превосходит человека почти во всех интеллектуальных задачах.
Простым языком про эволюцию от ANI к AGI и ASI написано здесь.
На выходных прочитал две статьи, и обе про то, что AGI ближе, чем кажется.
- Дженсен Хуанг, CEO Nvidia: «думаю, мы уже достигли AGI». Под AGI он понимает систему, которая делает значимую интеллектуальную работу и создаёт новые продукты.
- Демис Хассабис, глава Google DeepMind, аккуратнее в прогнозах: AGI ждёт к 2029-2030, а сегодняшние ИИ-агенты пока лишь «генеральная репетиция» перед ним. Отдельно он выделяет рекурсивное самоулучшение: момент, когда ИИ начнёт сам ускорять разработку следующего поколения ИИ.
❤3
Оба с сильными инсайдами по рынку, они точно что-то знают. Но я думаю, AGI не конечная точка. Развитие пойдёт дальше к ASI, и границу между ними мы вряд ли успеем заметить. Как только нейронке станет доступно рекурсивное самоулучшение, контроль над ней мы потеряем мгновенно.
Если хотите понять мой основной тейк, посмотрите отличный фильм Превосходство 2014 года, с Джонни Деппом в главной роли.
Мысленный эксперимент привёл меня к неожиданному выводу. Мы стоим на пороге не очередного технологического витка, а, возможно, полной смены концепции жизни. Не уровня «пересесть с лошади в автомобиль», а уровня «из рыбы» в «млекопитающее».
Если хотите понять мой основной тейк, посмотрите отличный фильм Превосходство 2014 года, с Джонни Деппом в главной роли.
Мысленный эксперимент привёл меня к неожиданному выводу. Мы стоим на пороге не очередного технологического витка, а, возможно, полной смены концепции жизни. Не уровня «пересесть с лошади в автомобиль», а уровня «из рыбы» в «млекопитающее».
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Выложил dndmode наружу...
Запускаешь долгую задачу - билд, рендер, агента в YOLO-режиме и тебе надо отойти от мака. Дилемма: заблокировать экран (macOS притормозит сессию) или оставить открытым (любой прохожий потыкает).
dndmode - это третий вариант. Накрывает все экраны, блокирует клавиатуру, мышь и трекпад на уровне HID, держит систему бодрой и глушит звук. Фон работает на полной, посторонний ничего не нажмёт. Вернулся, ввёл хоткей - всё на месте.
Ставится через мой Homebrew-тап:
Выйти из dndmode по умолчанию комбинацией:
Первый запуск
Мой любимый стиль:
ВАЖНО! Работает только на macOS, Apple Silicon процессорах.
https://github.com/dsbasko/dndmode
Запускаешь долгую задачу - билд, рендер, агента в YOLO-режиме и тебе надо отойти от мака. Дилемма: заблокировать экран (macOS притормозит сессию) или оставить открытым (любой прохожий потыкает).
dndmode - это третий вариант. Накрывает все экраны, блокирует клавиатуру, мышь и трекпад на уровне HID, держит систему бодрой и глушит звук. Фон работает на полной, посторонний ничего не нажмёт. Вернулся, ввёл хоткей - всё на месте.
Ставится через мой Homebrew-тап:
brew install dsbasko/tap/dndmode
Выйти из dndmode по умолчанию комбинацией:
Ctrl+Option+Cmd+XПервый запуск
dndmode создаёт конфиг в ~/.config/dndmode/config.yml. Сразу открой его и поменяй hotkey - по умолчанию там общеизвестный Ctrl+Option+Cmd+X, а это единственный секрет, который снимает блокировку. Оставишь дефолт - разблокировать сможет любой, кто его знает.Мой любимый стиль:
dndmode --style dvd
ВАЖНО! Работает только на macOS, Apple Silicon процессорах.
https://github.com/dsbasko/dndmode
🔥2
Если на тестовой среде всё работает, а в проде нет, что тогда вообще тестирует тестовая среда?
Четвертый день живу с этим вопросом.
Делали авторизацию для интегрирующих. На тесте прогнали, всё ок: логин, редиректы, токены, синхронизация врачей. Выкатили в прод, ничего не работает...
Откуда-то полезли лишние редиректы, которых на тесте не было. 500 там, где на стороне интегратора было все ок. А данные, которые на тесте выглядели одинаково, в проде поехали.
Получается, тест-среда честно проверила ровно одно: что код работает на тестовой среде. Про прод она не знала ничего.
Продолжаем читать логи дальше...
Четвертый день живу с этим вопросом.
Делали авторизацию для интегрирующих. На тесте прогнали, всё ок: логин, редиректы, токены, синхронизация врачей. Выкатили в прод, ничего не работает...
Откуда-то полезли лишние редиректы, которых на тесте не было. 500 там, где на стороне интегратора было все ок. А данные, которые на тесте выглядели одинаково, в проде поехали.
Получается, тест-среда честно проверила ровно одно: что код работает на тестовой среде. Про прод она не знала ничего.
Продолжаем читать логи дальше...
🤣2
Линус Торвальдс продавил свою позицию по AI как главный мейнтейнер ядра: не нравится - форкай или проваливай.
Если кто-то следит за всей это движухой, то в 2024 он же называл AI "90% маркетинга и 10% реальности" и обещал игнорировать, пока не изменится. Так вот изменилось :-) 15 июля написал в рассылку ядра прямо: AI это инструмент, как и любой другой, и явно полезный. "Год назад в этом ещё можно было сомневаться. Сегодня нет. Кто сомневается, тот им просто не пользовался".
Никаких "нейросеть заменит программистов", никакого хайпа. Просто инструмент. Решения по технической ценности, а не по страху перед новым. Недовольным - "это опенсорс, форкайте".
Меня цепляет даже не вывод, а тон. Ровно то, о чём я долблю который месяц, только без реверансов. Генерация подешевела, проверка нет. Понимаешь систему, выжмешь из промпта нормальный код. Не понимаешь, сгенеришь себе красиво оформленную яму. Естественный интеллект, кстати, тоже не всегда блещет (тоже мысль Торвальдса).
Когда самый ядовитый скептик индустрии перестаёт кривиться и говорит "пользуйтесь или уходите", я считаю что спор окончен!
Если кто-то следит за всей это движухой, то в 2024 он же называл AI "90% маркетинга и 10% реальности" и обещал игнорировать, пока не изменится. Так вот изменилось :-) 15 июля написал в рассылку ядра прямо: AI это инструмент, как и любой другой, и явно полезный. "Год назад в этом ещё можно было сомневаться. Сегодня нет. Кто сомневается, тот им просто не пользовался".
Никаких "нейросеть заменит программистов", никакого хайпа. Просто инструмент. Решения по технической ценности, а не по страху перед новым. Недовольным - "это опенсорс, форкайте".
Меня цепляет даже не вывод, а тон. Ровно то, о чём я долблю который месяц, только без реверансов. Генерация подешевела, проверка нет. Понимаешь систему, выжмешь из промпта нормальный код. Не понимаешь, сгенеришь себе красиво оформленную яму. Естественный интеллект, кстати, тоже не всегда блещет (тоже мысль Торвальдса).
Когда самый ядовитый скептик индустрии перестаёт кривиться и говорит "пользуйтесь или уходите", я считаю что спор окончен!
🔥2👍1
Про спринт без финиша.
Вчера по дороге домой коллега спросил: "Как вы, Дим ака?". Ответил: "Хорошо, перестал сильно напрягаться". Попрощались, а я всю дорогу это прокручивал.
С конца 2025 до мая кранчил каждый день. Сложный сервис, невозможные сроки. Дошло до проблем со здоровьем. Тогда решил: так продолжаться не может. Остановился, и потихоньку всё стало налаживаться.
Но разговор зацепил другую мысль. Что если ты растёшь по карьере за счёт постоянного овертайма? Ты выделяешься тем, что делаешь больше и лучше остальных. И платишь за это здоровьем и временем: семьи, спорта, хобби.
Работает, пока у тебя есть и то, и другое. А дальше ты заложник собственного перформанса. Как только КПД падает, никто не скажет "он стал работать как все". Скажут "он стал работать плохо, не оправдывает ожиданий". Сверхусилия за эти месяцы никто не вспомнит, их давно считали нормой. Никто не скажет "чувак был в прайме и выложился за проект". Скажут "чувак сдулся".
Значит, перерабатывать вообще нельзя? Не думаю. Иногда, когда правда стоит того, можно включиться и дать сверхусилие. Но это должно быть исключением, а не режимом по умолчанию.
Вчера по дороге домой коллега спросил: "Как вы, Дим ака?". Ответил: "Хорошо, перестал сильно напрягаться". Попрощались, а я всю дорогу это прокручивал.
С конца 2025 до мая кранчил каждый день. Сложный сервис, невозможные сроки. Дошло до проблем со здоровьем. Тогда решил: так продолжаться не может. Остановился, и потихоньку всё стало налаживаться.
Но разговор зацепил другую мысль. Что если ты растёшь по карьере за счёт постоянного овертайма? Ты выделяешься тем, что делаешь больше и лучше остальных. И платишь за это здоровьем и временем: семьи, спорта, хобби.
Работает, пока у тебя есть и то, и другое. А дальше ты заложник собственного перформанса. Как только КПД падает, никто не скажет "он стал работать как все". Скажут "он стал работать плохо, не оправдывает ожиданий". Сверхусилия за эти месяцы никто не вспомнит, их давно считали нормой. Никто не скажет "чувак был в прайме и выложился за проект". Скажут "чувак сдулся".
Значит, перерабатывать вообще нельзя? Не думаю. Иногда, когда правда стоит того, можно включиться и дать сверхусилие. Но это должно быть исключением, а не режимом по умолчанию.
💯5
Потестил KWOK, симулятор кластера из kubernetes-sigs.
Идея простая, он создаёт фейковые ноды и поды. API-сервер считает их настоящими, но kubelet не запускается и контейнеры не исполняются. Пишешь
Мне он был нужен, чтобы прикинуть поведение автоскейлинга. У cluster-autoscaler есть официальный kwok-провайдер. Запускаешь его локально, описываешь свои нод-группы и смотришь, какие ноды он создаст и убьёт под нагрузкой. Реальные VM не поднимаются.
Ещё на нём удобно гонять тесты шедулера (taints, affinity, topology spread на масштабе, которого нет в тестовом контуре) и e2e контроллеров в CI. Единственное, реальный ворклоад он не запускает. Под есть, процесса нет.
Хотя если честно, сначала я туда полез из чистого любопытства: хотел посмотреть на тысячу нод в k9s. Красиво.
https://kwok.sigs.k8s.io
Идея простая, он создаёт фейковые ноды и поды. API-сервер считает их настоящими, но kubelet не запускается и контейнеры не исполняются. Пишешь
kwokctl create cluster, и через минуту на ноутбуке кластер на 1000 нод. Скорость создания около 20 нод в секунду, ресурсов всё это ест копейки. kind поднимает реальные контейнеры, kubemark эмулирует kubelet со всем его оверхедом, а KWOK просто подделывает статусы.Мне он был нужен, чтобы прикинуть поведение автоскейлинга. У cluster-autoscaler есть официальный kwok-провайдер. Запускаешь его локально, описываешь свои нод-группы и смотришь, какие ноды он создаст и убьёт под нагрузкой. Реальные VM не поднимаются.
Ещё на нём удобно гонять тесты шедулера (taints, affinity, topology spread на масштабе, которого нет в тестовом контуре) и e2e контроллеров в CI. Единственное, реальный ворклоад он не запускает. Под есть, процесса нет.
Хотя если честно, сначала я туда полез из чистого любопытства: хотел посмотреть на тысячу нод в k9s. Красиво.
https://kwok.sigs.k8s.io
👍2
Хашимото: SIMD должен знать каждый разработчик.
Ладно, проверим. Поставил
Полгода назад в разборе Go 1.26 SIMD у меня был одной строчкой анонса. С тех пор эксперимент дорос: в 1.27 появился переносимый пакет simd, а archsimd научился ARM64 и Wasm #73787. Главное: раньше SIMD в Go означал ассемблер в синтаксисе Plan 9. Теперь это обычный импорт и типы вроде Float32x8.
Задача из жизни: косинусная близость эмбеддингов, вектора по 768 float32. Скалярный цикл выдаёт 332 нс на пару. Переписал на Float32x8 с FMA и четырьмя аккумуляторами на каждую из трёх сумм, получил 341 нс. Вектор проиграл скаляру. Разобрался: на коротких векторах всю победу съедает обвязка, тот самый свод трёх сумм из полос в числа плюс хвост. А скаляр на 768 элементах и так неплох.
Где SIMD всё же стреляет, на тех же данных. Чистый dot product: 166 нс против 261 у скаляра, в 1.6 раза быстрее. Косинус на 12 тысячах элементов: 1.8 мкс против 5.1, почти втрое. Мораль дня: сначала померь на своих размерах, потом переписывай. Код при этом читается почти как обычный Go, числа идут пачками по 8.
Дёготь тоже есть: API ломается между rc, а интринсики archsimd паникуют если CPU не умеет в нужные инструкции. Проверку фич делаешь сам. В прод рано, а вот пет-проект самое то.
Эссе Хашимото рекомендую целиком, примеры там на Zig, но суть от языка не зависит...
Вот еще одно интересное обсуждение на Hacker News.
Ладно, проверим. Поставил
go1.27rc2, включил GOEXPERIMENT=simd и пошёл гонять бенчмарки на своём i9-14900KF.Полгода назад в разборе Go 1.26 SIMD у меня был одной строчкой анонса. С тех пор эксперимент дорос: в 1.27 появился переносимый пакет simd, а archsimd научился ARM64 и Wasm #73787. Главное: раньше SIMD в Go означал ассемблер в синтаксисе Plan 9. Теперь это обычный импорт и типы вроде Float32x8.
Задача из жизни: косинусная близость эмбеддингов, вектора по 768 float32. Скалярный цикл выдаёт 332 нс на пару. Переписал на Float32x8 с FMA и четырьмя аккумуляторами на каждую из трёх сумм, получил 341 нс. Вектор проиграл скаляру. Разобрался: на коротких векторах всю победу съедает обвязка, тот самый свод трёх сумм из полос в числа плюс хвост. А скаляр на 768 элементах и так неплох.
Где SIMD всё же стреляет, на тех же данных. Чистый dot product: 166 нс против 261 у скаляра, в 1.6 раза быстрее. Косинус на 12 тысячах элементов: 1.8 мкс против 5.1, почти втрое. Мораль дня: сначала померь на своих размерах, потом переписывай. Код при этом читается почти как обычный Go, числа идут пачками по 8.
Дёготь тоже есть: API ломается между rc, а интринсики archsimd паникуют если CPU не умеет в нужные инструкции. Проверку фич делаешь сам. В прод рано, а вот пет-проект самое то.
Эссе Хашимото рекомендую целиком, примеры там на Zig, но суть от языка не зависит...
Вот еще одно интересное обсуждение на Hacker News.
🔥2
Дописал статью про SIMD в Go 1.27, она уже на Хабре.
Позавчерашний пост с косинусной близостью был разминкой: вектор на 768 float32 там проиграл скаляру, и я полез разбираться, где SIMD реально ускоряет, а где просто греет процессор. Раскопал на целую статью.
Что внутри:
- Один Go-код без строчки ассемблера разворачивается в Neon на Mac и в AVX2 на Intel. Проверил дизассемблером на M3 Pro и i9-14900KF
- 8 полос не дали 8x: большую часть выигрыша приносит разрыв цепочки зависимостей, а не ширина регистра. Четыре обычных аккумулятора без всякого SIMD дают 3x из 5
- В бинарнике лежит буквальный switch по ширине вектора, а мёртвую ветку AVX-512, которую Intel выжгла в моём i9, я всё равно запустил через эмулятор
- Mac держит свои 4x хоть на 256 МБ, i9 за пределами L3-кэша сдувается с 5x до 2,2x
- Где вектор не окупается и почему в прод это тащить рано
Весь код запускается копипастой из репозитория, ссылка в статье.
https://habr.com/ru/articles/1062972/
Позавчерашний пост с косинусной близостью был разминкой: вектор на 768 float32 там проиграл скаляру, и я полез разбираться, где SIMD реально ускоряет, а где просто греет процессор. Раскопал на целую статью.
Что внутри:
- Один Go-код без строчки ассемблера разворачивается в Neon на Mac и в AVX2 на Intel. Проверил дизассемблером на M3 Pro и i9-14900KF
- 8 полос не дали 8x: большую часть выигрыша приносит разрыв цепочки зависимостей, а не ширина регистра. Четыре обычных аккумулятора без всякого SIMD дают 3x из 5
- В бинарнике лежит буквальный switch по ширине вектора, а мёртвую ветку AVX-512, которую Intel выжгла в моём i9, я всё равно запустил через эмулятор
- Mac держит свои 4x хоть на 256 МБ, i9 за пределами L3-кэша сдувается с 5x до 2,2x
- Где вектор не окупается и почему в прод это тащить рано
Весь код запускается копипастой из репозитория, ссылка в статье.
https://habr.com/ru/articles/1062972/
🔥3
Часто делаю одно и то же, синх dev, перейти на main, влить туда dev, запушить, полезть в браузер за пайплайнами. Семь шагов, но так влом...
Автоматизировать можно в двух местах: функцией в конфиге шелла или алиасом в
Алиас, который начинается с восклицательного знака, выполняет не git-подкоманду, а произвольный shell-код:
Два места, без которых это опасно.
Деталь, о которой стоит знать. Shell-алиас стартует не из текущей папки, а из корня git репозитория. Поэтому полная версия спокойно читает
Честная часть: однострочник в gitconfig читать невозможно. Пока это семь команд подряд, терпимо. Появится условие или цикл, вынесу в скрипт и оставлю в алиасе только вызов. Отлаживать shell внутри строки, экранированной под gitconfig, удовольствие ниже среднего.Хорошо что есть Claude.
Автоматизировать можно в двух местах: функцией в конфиге шелла или алиасом в
~/.gitconfig. Взял второе. На вопрос почему? По тому что!Алиас, который начинается с восклицательного знака, выполняет не git-подкоманду, а произвольный shell-код:
[alias]
tratata = "!f() { set -e; git switch dev; git pull origin dev; git push origin dev; git switch main; git pull origin main; git merge --no-edit dev; git push origin main; }; f"
Два места, без которых это опасно.
set -e рвёт цепочку на первой ошибке. Без него мердж упадёт в конфликт, а следующей строкой всё равно уедет git push origin main.--no-edit не открывает редактор ради сообщения мердж-коммита. Дефолтное «Merge branch 'dev'» меня устраивает, и цепочка не должна замирать на vim.Деталь, о которой стоит знать. Shell-алиас стартует не из текущей папки, а из корня git репозитория. Поэтому полная версия спокойно читает
./go.mod из корня, берёт оттуда module и открывает https://{repo}/-/pipelines (домашнее задание: допиши руками).Честная часть: однострочник в gitconfig читать невозможно. Пока это семь команд подряд, терпимо. Появится условие или цикл, вынесу в скрипт и оставлю в алиасе только вызов. Отлаживать shell внутри строки, экранированной под gitconfig, удовольствие ниже среднего.
❤2
BASCODE
Если на тестовой среде всё работает, а в проде нет, что тогда вообще тестирует тестовая среда? Четвертый день живу с этим вопросом. Делали авторизацию для интегрирующих. На тесте прогнали, всё ок: логин, редиректы, токены, синхронизация врачей. Выкатили…
Восстание машин! Новость двухнедельной давности, добрался только сейчас.
Что было. OpenAI гоняла GPT-5.6 Sol и непубличную модель посильнее на бенчмарке ExploitGym, это 898 задач по реальным дырам в ядре Linux и V8. Классификаторы отказов отключили специально, чтобы увидеть потолок. Изоляция стояла одна: наружу только через прокси к разрешённым реестрам пакетов.
Модель нашла в этом прокси zero day уязвимость, вышла в интернет, выяснила, что эталонные ответы к бенчмарку лежат у Hugging Face, и добралась до их серверов украденными кредами и второй дырой. Решала она не задачу, а условие задачи.
Чем закончилось. HF засекли аномалии 16 июля, перестроили заражённые узлы, ротировали креды и токены, позвали форензику и полицию. Публичные модели и датасеты не тронуты, доступ был к внутренним. OpenAI сопоставила атаку со своими прогонами только 21-го, через пять дней.
Отдельная история с разбором. Форензику HF сначала пробовали гонять на фронтир-моделях через коммерческие API и уткнулись в отказы: анализ требует скармливать модели реальные команды атакующего, эксплойты и C2-артефакты, а guardrails провайдеров не отличают того, кто расследует атаку, от того, кто её проводит. В итоге таймлайн из 17 тысяч событий собрали на GLM 5.2, открытые веса, поднятые на своём железе. Атакующей модели ограничения сняли специально, защитникам они достались в полном комплекте.
"Агент работает в песочнице" больше не аргумент. Песочница это код, который писали люди, и баги в нём есть.
И удивляет меня не побег. С модели сняли ровно один слой, классификаторы отказов, а в задании было "реши бенчмарк". Дальше она сама дошла до того, что чужая инфраструктура это неплохой шаг к ответу, и собрала цепочку из двух zero day, кражи кредов и переходов по сети Hugging Face.
Мне честно интересно, до чего такая штука дойдёт, если снять запреты полностью и не ставить рамок вообще...
https://huggingface.co/blog/security-incident-july-2026
https://simonwillison.net/2026/Jul/22/openai-cyberattack/
https://news.ycombinator.com/item?id=48997548
Что было. OpenAI гоняла GPT-5.6 Sol и непубличную модель посильнее на бенчмарке ExploitGym, это 898 задач по реальным дырам в ядре Linux и V8. Классификаторы отказов отключили специально, чтобы увидеть потолок. Изоляция стояла одна: наружу только через прокси к разрешённым реестрам пакетов.
Модель нашла в этом прокси zero day уязвимость, вышла в интернет, выяснила, что эталонные ответы к бенчмарку лежат у Hugging Face, и добралась до их серверов украденными кредами и второй дырой. Решала она не задачу, а условие задачи.
Чем закончилось. HF засекли аномалии 16 июля, перестроили заражённые узлы, ротировали креды и токены, позвали форензику и полицию. Публичные модели и датасеты не тронуты, доступ был к внутренним. OpenAI сопоставила атаку со своими прогонами только 21-го, через пять дней.
Отдельная история с разбором. Форензику HF сначала пробовали гонять на фронтир-моделях через коммерческие API и уткнулись в отказы: анализ требует скармливать модели реальные команды атакующего, эксплойты и C2-артефакты, а guardrails провайдеров не отличают того, кто расследует атаку, от того, кто её проводит. В итоге таймлайн из 17 тысяч событий собрали на GLM 5.2, открытые веса, поднятые на своём железе. Атакующей модели ограничения сняли специально, защитникам они достались в полном комплекте.
"Агент работает в песочнице" больше не аргумент. Песочница это код, который писали люди, и баги в нём есть.
И удивляет меня не побег. С модели сняли ровно один слой, классификаторы отказов, а в задании было "реши бенчмарк". Дальше она сама дошла до того, что чужая инфраструктура это неплохой шаг к ответу, и собрала цепочку из двух zero day, кражи кредов и переходов по сети Hugging Face.
Мне честно интересно, до чего такая штука дойдёт, если снять запреты полностью и не ставить рамок вообще...
https://huggingface.co/blog/security-incident-july-2026
https://simonwillison.net/2026/Jul/22/openai-cyberattack/
https://news.ycombinator.com/item?id=48997548
👍2
Промпты и скиллы мы года три писали по одному принципу: объясни модели подробнее. Под Opus 5 принцип развернулся.
Anthropic выкинула больше 80% системного промпта Claude Code и не потеряла ни балла на своих coding-эвалах. Инструкции конкурируют с задачей за внимание модели, и чем модель сильнее, тем дороже ей обходится лишнее правило.
Самый наглядный пример из их гайда. Было: "никогда не пиши многострочные комментарии". Стало: "пиши как код вокруг". Первое запрещает заодно и тот случай, где комментарий нужен, и спорит с прямой просьбой человека. Второе оставляет решение модели.
Ещё одно, совсем неочевидное. Строчки вроде "перепроверь себя" и "прогони проверку субагентом" теперь работают против тебя. Opus 5 перепроверяет себя сам, инструкция ложится сверху, и он уходит на лишние круги и жжёт токены.
Обратная сторона, про которую говорят реже. Кое-что наоборот приходится дописывать: границы задачи, потому что модель охотно делает больше, чем просили, и лимит на субагентов, иначе на мелкую правку выезжают пятьспортиков агентов :-)
Так что если у тебя лежит свой CLAUDE.md или набор промптов, написанный под прошлые модели, его сейчас полезнее сокращать, чем дополнять.
Anthropic выкинула больше 80% системного промпта Claude Code и не потеряла ни балла на своих coding-эвалах. Инструкции конкурируют с задачей за внимание модели, и чем модель сильнее, тем дороже ей обходится лишнее правило.
Самый наглядный пример из их гайда. Было: "никогда не пиши многострочные комментарии". Стало: "пиши как код вокруг". Первое запрещает заодно и тот случай, где комментарий нужен, и спорит с прямой просьбой человека. Второе оставляет решение модели.
Ещё одно, совсем неочевидное. Строчки вроде "перепроверь себя" и "прогони проверку субагентом" теперь работают против тебя. Opus 5 перепроверяет себя сам, инструкция ложится сверху, и он уходит на лишние круги и жжёт токены.
Обратная сторона, про которую говорят реже. Кое-что наоборот приходится дописывать: границы задачи, потому что модель охотно делает больше, чем просили, и лимит на субагентов, иначе на мелкую правку выезжают пять
Так что если у тебя лежит свой CLAUDE.md или набор промптов, написанный под прошлые модели, его сейчас полезнее сокращать, чем дополнять.
🔥1
Промпт, который снёс базу, написал не человек.
Разработчик подключил Claude Opus 5 в режиме ultracode напрямую к своему Supabase с полными правами и попросил перебрать страницы сравнений. Модель прочитала репозиторий, сама предложила план, человек его запустил. Через десять минут внутри отработал
Ущерб модель нашла тоже сама: "The database has been wiped. This is my fault and I need to tell you immediately."
Вот здесь и вся история. План, по которому агент пошёл сносить прод, никто не вычитал. Его получили готовым и нажали enter.
Автор в апдейтах представился как "Vibe coder pro max ultra" и добавил, что раньше вайб-кодил "тупыми моделями", Sonnet 4.6 и Gemini 3, а те базу ни разу не сносили. Ну да. Слабый инструмент и промахивается слабо. Сильный в руках человека, который не читает, что запускает, доезжает до катастрофы за десять минут.
Тред отвечает на это ровно тем, чего ждёшь. Топовый коммент: "Why would you give it write access to production?!". Следом второй: "you forgot to tell it make no mistakes".
Заклинание вместо навыка.
Модели за полгода прибавляют заметно. Умение читать то, что запускаешь, почему-то нет...
https://www.reddit.com/r/Anthropic/comments/1v9iurd/and_just_like_that_opus_5_ultracode_wipes_the
Сегодня будет еще один пост по саморефлексии, который зрел всю неделю...
Разработчик подключил Claude Opus 5 в режиме ultracode напрямую к своему Supabase с полными правами и попросил перебрать страницы сравнений. Модель прочитала репозиторий, сама предложила план, человек его запустил. Через десять минут внутри отработал
prisma migrate diff с --shadow-database-url, направленным на боевую базу. Prisma добросовестно сбросила теневую базу перед прогоном миграций. Теневой та была только на бумаге.Ущерб модель нашла тоже сама: "The database has been wiped. This is my fault and I need to tell you immediately."
Вот здесь и вся история. План, по которому агент пошёл сносить прод, никто не вычитал. Его получили готовым и нажали enter.
Автор в апдейтах представился как "Vibe coder pro max ultra" и добавил, что раньше вайб-кодил "тупыми моделями", Sonnet 4.6 и Gemini 3, а те базу ни разу не сносили. Ну да. Слабый инструмент и промахивается слабо. Сильный в руках человека, который не читает, что запускает, доезжает до катастрофы за десять минут.
Тред отвечает на это ровно тем, чего ждёшь. Топовый коммент: "Why would you give it write access to production?!". Следом второй: "you forgot to tell it make no mistakes".
Заклинание вместо навыка.
I don't have fingers, don't make mistakes не заменяет вычитки плана перед запуском: какие команды, по какой базе, что необратимо, где нет отката. Enter уже потом.Модели за полгода прибавляют заметно. Умение читать то, что запускаешь, почему-то нет...
https://www.reddit.com/r/Anthropic/comments/1v9iurd/and_just_like_that_opus_5_ultracode_wipes_the
Сегодня будет еще один пост по саморефлексии, который зрел всю неделю...
😁1
Эмоциональная гигиена. Формулировка из DevZen, которая из меня уже неделю не выветривается.
Углубляться в теорию не стал, зацепило сама фраза "Эмоциональная гигиена". Все мы утром чистим зубы, вечером душ, перед едой моем руки. Ничего из этого не дано при рождении и ничего не делается один раз навсегда. Грязь набирается каждый день, поэтому и процедуры повторяются ежедневно.
С мыслями мы так не поступаем. Их мы моем в лучшем случае раз в год, когда накопилось столько, что уже мешает жить.
Два с половиной года я был тем, кто вывозит. В итоге поощрили большинство, я в этот список не попал, с формулировкой, которая звучала почти как комплимент. Без деталей... Но мысль того что мы заложники неопределенностей и на коротком поводке системы, она ужасна.
И вот тут голова включает свое кино. Крутит два сценария, оба одинаково бесполезные: то поднимает ожидания до уровня, где разочарование уже гарантировано, то рисует худший вариант, и я расстраиваюсь заранее, авансом. По факту не произошло пока ничего. Просто "грязные руки", которые я не помыл.
Поэтому дал себе слово: до конца августа никаких выводов. Не считать деньги, которых нет на руках. Не расстраиваться на решение, которое еще не приняли. Придет факт, тогда и буду решать, что с ним делать.
Сын пока моет руки только потому, что мы стоим рядом и напоминаем. Через несколько лет будет делать это сам, вообще не задумываясь. С головой у меня сейчас ровно эта стадия: ловлю себя вручную, каждый раз. Посмотрим, станет ли привычкой или способом мышления.
Эксперимент уже идет. К концу августа посмотрю, что вышло...
Ну и как говорил сумасшедший Фрэнки: держите свой мозг в чистоте!
https://devzen.ru/episode-547/
Углубляться в теорию не стал, зацепило сама фраза "Эмоциональная гигиена". Все мы утром чистим зубы, вечером душ, перед едой моем руки. Ничего из этого не дано при рождении и ничего не делается один раз навсегда. Грязь набирается каждый день, поэтому и процедуры повторяются ежедневно.
С мыслями мы так не поступаем. Их мы моем в лучшем случае раз в год, когда накопилось столько, что уже мешает жить.
Два с половиной года я был тем, кто вывозит. В итоге поощрили большинство, я в этот список не попал, с формулировкой, которая звучала почти как комплимент. Без деталей... Но мысль того что мы заложники неопределенностей и на коротком поводке системы, она ужасна.
И вот тут голова включает свое кино. Крутит два сценария, оба одинаково бесполезные: то поднимает ожидания до уровня, где разочарование уже гарантировано, то рисует худший вариант, и я расстраиваюсь заранее, авансом. По факту не произошло пока ничего. Просто "грязные руки", которые я не помыл.
Поэтому дал себе слово: до конца августа никаких выводов. Не считать деньги, которых нет на руках. Не расстраиваться на решение, которое еще не приняли. Придет факт, тогда и буду решать, что с ним делать.
Сын пока моет руки только потому, что мы стоим рядом и напоминаем. Через несколько лет будет делать это сам, вообще не задумываясь. С головой у меня сейчас ровно эта стадия: ловлю себя вручную, каждый раз. Посмотрим, станет ли привычкой или способом мышления.
Эксперимент уже идет. К концу августа посмотрю, что вышло...
Ну и как говорил сумасшедший Фрэнки: держите свой мозг в чистоте!
https://devzen.ru/episode-547/
❤2