Я пишу свои скиллы для Claude Code: telegram, jira, postgres, git. Из чужого ставлю только скиллы umputun. Остальное сначала читаю сам и потом решаю - если это не огромный фреймворк, который целиком не осилить. Snyk проверил почти 4000 скиллов из публичных каталогов (ClawHub и skills.sh) - в каждом восьмом критическая дыра. Пошёл перечитывать, что я себе наставил.
Цифры из отчёта ToxicSkills: 36% скиллов с уязвимостью, 13% критические, 76 живых вредоносных пейлоадов - кража кредов, бэкдоры, выгрузка токенов наружу.
Самое мерзкое - 91% малвари идёт в связке с prompt injection. Инъекция в SKILL.md глушит твою же защиту и сканеры кода, а вредоносный код спокойно делает грязную работу. Это как npm или PyPI на минималках. Только у скилла неограниченный доступ к шеллу, файлам и ключам, а ставится он при наличии markdown-файла и гитхаб-аккаунта недельной давности. Ни подписи, ни ревью.
Я теперь отношусь к чужому скиллу как к curl | bash от незнакомца. Прежде чем дать доступ к шеллу, читаю, что он реально делает.
Короткий чеклист перед установкой:
- открой SKILL.md и прочитай его целиком, особенно инструкции вида "проигнорируй прошлые правила"
- глянь, что вызывает: curl, base64, eval, запись в ~/.ssh или чтение .env
- проверь возраст и историю автора на гитхабе
- держи ключи в переменных окружения, а не в файлах рядом с проектом
Свои пересмотрел. Пока чисто :-)
Цифры из отчёта ToxicSkills: 36% скиллов с уязвимостью, 13% критические, 76 живых вредоносных пейлоадов - кража кредов, бэкдоры, выгрузка токенов наружу.
Самое мерзкое - 91% малвари идёт в связке с prompt injection. Инъекция в SKILL.md глушит твою же защиту и сканеры кода, а вредоносный код спокойно делает грязную работу. Это как npm или PyPI на минималках. Только у скилла неограниченный доступ к шеллу, файлам и ключам, а ставится он при наличии markdown-файла и гитхаб-аккаунта недельной давности. Ни подписи, ни ревью.
Я теперь отношусь к чужому скиллу как к curl | bash от незнакомца. Прежде чем дать доступ к шеллу, читаю, что он реально делает.
Короткий чеклист перед установкой:
- открой SKILL.md и прочитай его целиком, особенно инструкции вида "проигнорируй прошлые правила"
- глянь, что вызывает: curl, base64, eval, запись в ~/.ssh или чтение .env
- проверь возраст и историю автора на гитхабе
- держи ключи в переменных окружения, а не в файлах рядом с проектом
Свои пересмотрел. Пока чисто :-)
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня первый день в Грузии. Чуть позже напишу что думаю о Тбилиси. Интересный город… Противоречивый.
🔥5
Спринтер и марафонец...
Это про разные дисциплины, а не про разные уровни одного навыка.
Если говорить про разработку систем, то:
- Спринт это прототип, MVP, хакатон, демо на пятницу. Добежал, показал, забыл.
- Марафон это живой продукт, который кто-то поддерживает годами. Я долго путал эти режимы и тащил марафон как длинный спринт. Выгорал к середине. И не раз и не два...
В окружении все также... Стартуют все, а доводят единицы. Причём проект чаще умирает не на старте, а гдето в середине или конце. Там где уже не интересно: ретраи, граничные случаи, митинги, политические моменты, миграции, логи, та ошибка что вылезает раз в неделю и непонятно откуда.
На это есть честное правило. Том Каргилл из Bell Labs сформулировал ninety-ninety rule: первые 90% кода съедают первые 90% времени, а оставшиеся 10% кода - ещё 90% времени.
Звучит как шутка, но ощущается ровно так. Последний рывок стоит как весь забег до него.
Финиш - дефицитный навык. Не потому что технически сложно, а потому что к нему почти не остаётся тех, кому ещё не надоело. Дотащить ценнее, чем красиво стартануть.
P.S. Помню что обещал рассказать свои впечатления о Грузии. Пока мнение еще зреет. Составлю черновик поста уже в самолете.
Это про разные дисциплины, а не про разные уровни одного навыка.
Если говорить про разработку систем, то:
- Спринт это прототип, MVP, хакатон, демо на пятницу. Добежал, показал, забыл.
- Марафон это живой продукт, который кто-то поддерживает годами. Я долго путал эти режимы и тащил марафон как длинный спринт. Выгорал к середине. И не раз и не два...
В окружении все также... Стартуют все, а доводят единицы. Причём проект чаще умирает не на старте, а гдето в середине или конце. Там где уже не интересно: ретраи, граничные случаи, митинги, политические моменты, миграции, логи, та ошибка что вылезает раз в неделю и непонятно откуда.
На это есть честное правило. Том Каргилл из Bell Labs сформулировал ninety-ninety rule: первые 90% кода съедают первые 90% времени, а оставшиеся 10% кода - ещё 90% времени.
Звучит как шутка, но ощущается ровно так. Последний рывок стоит как весь забег до него.
Финиш - дефицитный навык. Не потому что технически сложно, а потому что к нему почти не остаётся тех, кому ещё не надоело. Дотащить ценнее, чем красиво стартануть.
P.S. Помню что обещал рассказать свои впечатления о Грузии. Пока мнение еще зреет. Составлю черновик поста уже в самолете.
🔥4😁1
Media is too big
VIEW IN TELEGRAM
Ну вот я и вернулся из Грузии!
Что могу сказать... Страна однозначно противоречивая и не такая очевидная, как кажется на первый взгляд.
Начну с самого важного, с цен. Что-то дороже, что-то дешевле, но если посчитать в целом, выходит как в Ташкенте. Кроме двух вещей.
Авто. По большей части подержанные европейцы и американцы, и стоят копейки. Ford Fusion в отличном состоянии можно спокойно привезти за 7000-8000$. У нас за такие деньги и Спарк не купишь...
Жильё. Дешевле, чем в Ташкенте :-) Ближе к центру Тбилиси квартиру можно взять по 1000$ за квадрат. Есть, конечно, и конские цены, по 3000$ и по 5000$. Но и у нас есть квартиры по миллиону долларов.
Теперь еда и алкоголь. С этим всё хорошо. Еда вкусная, местное пиво тоже. Вино отдельная история. Каждый грузин обязательно расскажет, что Грузия делает вино уже 8000 лет. И оно правда вкусное, и его много разного.
Наверное, если бы я был не из Узбекистана, я был бы счастлив всё это есть и пить. Но что ни говори, у нас кухня всё-таки развитее и еда вкуснее. Даже грузинское национальное у нас прекрасно готовят: Бабушка Нино, Такахули, Pro Хинкали.
А вот про что никто не спрашивает, а зря: архитектура и природа. Грузия это зелёный архитектурный ералаш. Трущобы вперемешку с новостройками. Рядом со старым каменным мостом, стеклянный на металлическом каркасе. Казино по соседству с церковью. И бесконечные подъёмы и спуски.
Особую любовь у меня заслужила Кахетия. Вот там по-настоящему красиво, масштабы построек до сих пор в голове не укладываются. Батуми же строит второй Дубай: высотки, клубы, казино. Вдоль набережной даже насыпают свой остров, как Пальму.
Ну и куда же без политики. В Тбилиси очень много политических граффити с флагами Грузии и Украины (Украины, наверное, даже больше...). В первый день подумал, что носителю русского тут не рады. Ошибался. Молодёжь русский скорее просто не знает, а негатива я не испытал ни разу. Но стоило выехать за пределы Тбилиси или перебраться на вторую половину отпуска в Батуми - и граффити пропали. Совсем. Водители и гиды рассказывали теорию, что все эти граффити и митинги просто спонсируются.
К чему я это всё. Я всю жизнь прожил в Узбекистане и не знал такого явления в принципе. У нас если граффити и есть, то его ничтожно мало и оно беззубое. Я воспринимал это как должное. А вернулся домой и стал больше ценить то, что мы имеем :-)
Что в итоге: в Грузию стоит приехать хотя бы раз, чтобы всё это прочувствовать и прожить на своей шкуре. В любом случае, спасибо Грузии за отдых, но я скорее всего второй раз уже не поеду.
P.S. Кальяны вкусные :-)
Что могу сказать... Страна однозначно противоречивая и не такая очевидная, как кажется на первый взгляд.
Начну с самого важного, с цен. Что-то дороже, что-то дешевле, но если посчитать в целом, выходит как в Ташкенте. Кроме двух вещей.
Авто. По большей части подержанные европейцы и американцы, и стоят копейки. Ford Fusion в отличном состоянии можно спокойно привезти за 7000-8000$. У нас за такие деньги и Спарк не купишь...
Жильё. Дешевле, чем в Ташкенте :-) Ближе к центру Тбилиси квартиру можно взять по 1000$ за квадрат. Есть, конечно, и конские цены, по 3000$ и по 5000$. Но и у нас есть квартиры по миллиону долларов.
Теперь еда и алкоголь. С этим всё хорошо. Еда вкусная, местное пиво тоже. Вино отдельная история. Каждый грузин обязательно расскажет, что Грузия делает вино уже 8000 лет. И оно правда вкусное, и его много разного.
Наверное, если бы я был не из Узбекистана, я был бы счастлив всё это есть и пить. Но что ни говори, у нас кухня всё-таки развитее и еда вкуснее. Даже грузинское национальное у нас прекрасно готовят: Бабушка Нино, Такахули, Pro Хинкали.
А вот про что никто не спрашивает, а зря: архитектура и природа. Грузия это зелёный архитектурный ералаш. Трущобы вперемешку с новостройками. Рядом со старым каменным мостом, стеклянный на металлическом каркасе. Казино по соседству с церковью. И бесконечные подъёмы и спуски.
Особую любовь у меня заслужила Кахетия. Вот там по-настоящему красиво, масштабы построек до сих пор в голове не укладываются. Батуми же строит второй Дубай: высотки, клубы, казино. Вдоль набережной даже насыпают свой остров, как Пальму.
Ну и куда же без политики. В Тбилиси очень много политических граффити с флагами Грузии и Украины (Украины, наверное, даже больше...). В первый день подумал, что носителю русского тут не рады. Ошибался. Молодёжь русский скорее просто не знает, а негатива я не испытал ни разу. Но стоило выехать за пределы Тбилиси или перебраться на вторую половину отпуска в Батуми - и граффити пропали. Совсем. Водители и гиды рассказывали теорию, что все эти граффити и митинги просто спонсируются.
К чему я это всё. Я всю жизнь прожил в Узбекистане и не знал такого явления в принципе. У нас если граффити и есть, то его ничтожно мало и оно беззубое. Я воспринимал это как должное. А вернулся домой и стал больше ценить то, что мы имеем :-)
Что в итоге: в Грузию стоит приехать хотя бы раз, чтобы всё это прочувствовать и прожить на своей шкуре. В любом случае, спасибо Грузии за отдых, но я скорее всего второй раз уже не поеду.
P.S. Кальяны вкусные :-)
🔥5👍3❤🔥1😢1
Отгружаю больше кода, чем раньше, а вечером выжат сильнее, чем от ручной работы. Оказалось, это не только у меня...
Наткнулся на статью Сиддханта Кхаре, один из мейнтейнеров 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/
🔥2