BASCODE
113 subscribers
95 photos
5 videos
42 links
Судя по кругам под глазами, прод выжил!
Download Telegram
Линус Торвальдс продавил свою позицию по AI как главный мейнтейнер ядра: не нравится - форкай или проваливай.

Если кто-то следит за всей это движухой, то в 2024 он же называл AI "90% маркетинга и 10% реальности" и обещал игнорировать, пока не изменится. Так вот изменилось :-) 15 июля написал в рассылку ядра прямо: AI это инструмент, как и любой другой, и явно полезный. "Год назад в этом ещё можно было сомневаться. Сегодня нет. Кто сомневается, тот им просто не пользовался".

Никаких "нейросеть заменит программистов", никакого хайпа. Просто инструмент. Решения по технической ценности, а не по страху перед новым. Недовольным - "это опенсорс, форкайте".

Меня цепляет даже не вывод, а тон. Ровно то, о чём я долблю который месяц, только без реверансов. Генерация подешевела, проверка нет. Понимаешь систему, выжмешь из промпта нормальный код. Не понимаешь, сгенеришь себе красиво оформленную яму. Естественный интеллект, кстати, тоже не всегда блещет (тоже мысль Торвальдса).

Когда самый ядовитый скептик индустрии перестаёт кривиться и говорит "пользуйтесь или уходите", я считаю что спор окончен!
🔥2👍1
Про спринт без финиша.

Вчера по дороге домой коллега спросил: "Как вы, Дим ака?". Ответил: "Хорошо, перестал сильно напрягаться". Попрощались, а я всю дорогу это прокручивал.

С конца 2025 до мая кранчил каждый день. Сложный сервис, невозможные сроки. Дошло до проблем со здоровьем. Тогда решил: так продолжаться не может. Остановился, и потихоньку всё стало налаживаться.

Но разговор зацепил другую мысль. Что если ты растёшь по карьере за счёт постоянного овертайма? Ты выделяешься тем, что делаешь больше и лучше остальных. И платишь за это здоровьем и временем: семьи, спорта, хобби.

Работает, пока у тебя есть и то, и другое. А дальше ты заложник собственного перформанса. Как только КПД падает, никто не скажет "он стал работать как все". Скажут "он стал работать плохо, не оправдывает ожиданий". Сверхусилия за эти месяцы никто не вспомнит, их давно считали нормой. Никто не скажет "чувак был в прайме и выложился за проект". Скажут "чувак сдулся".

Значит, перерабатывать вообще нельзя? Не думаю. Иногда, когда правда стоит того, можно включиться и дать сверхусилие. Но это должно быть исключением, а не режимом по умолчанию.
💯5
Потестил KWOK, симулятор кластера из kubernetes-sigs.

Идея простая, он создаёт фейковые ноды и поды. 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 должен знать каждый разработчик.

Ладно, проверим. Поставил 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
Сегодня так...
😁5
Дописал статью про 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/
🔥3
Безумие! Вот что бывает, когда больная фантазия побеждает здравый смысл.
😁7
Часто делаю одно и то же, синх dev, перейти на main, влить туда dev, запушить, полезть в браузер за пайплайнами. Семь шагов, но так влом...

Автоматизировать можно в двух местах: функцией в конфиге шелла или алиасом в ~/.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, удовольствие ниже среднего. Хорошо что есть Claude.
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
👍2
Промпты и скиллы мы года три писали по одному принципу: объясни модели подробнее. Под Opus 5 принцип развернулся.

Anthropic выкинула больше 80% системного промпта Claude Code и не потеряла ни балла на своих coding-эвалах. Инструкции конкурируют с задачей за внимание модели, и чем модель сильнее, тем дороже ей обходится лишнее правило.

Самый наглядный пример из их гайда. Было: "никогда не пиши многострочные комментарии". Стало: "пиши как код вокруг". Первое запрещает заодно и тот случай, где комментарий нужен, и спорит с прямой просьбой человека. Второе оставляет решение модели.

Ещё одно, совсем неочевидное. Строчки вроде "перепроверь себя" и "прогони проверку субагентом" теперь работают против тебя. Opus 5 перепроверяет себя сам, инструкция ложится сверху, и он уходит на лишние круги и жжёт токены.

Обратная сторона, про которую говорят реже. Кое-что наоборот приходится дописывать: границы задачи, потому что модель охотно делает больше, чем просили, и лимит на субагентов, иначе на мелкую правку выезжают пять спортиков агентов :-)

Так что если у тебя лежит свой CLAUDE.md или набор промптов, написанный под прошлые модели, его сейчас полезнее сокращать, чем дополнять.
🔥1
Промпт, который снёс базу, написал не человек.

Разработчик подключил 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/
2