nuancesprog | Education

Telegram-канал nuancesprog - NOP::Nuances of Programming

59798

Любые вопросы по сотрудничеству: @ramilkr Если нужен токен: https://telega.in/c/nuancesprog NOP::Humor - https://t.me/nophumor NOP::Recruiter Удаленка- https://t.me/nopremote РКН: 4977653520

Subscribe to a channel

NOP::Nuances of Programming

JIT-компиляция за 5 микросекунд без LLVM

Автор pgrust собрал собственный JIT-компилятор, который компилирует код примерно за 5 мкс. Это позволяет компилировать каждый SQL-запрос, а не избранные тяжёлые.

Обычные базы используют LLVM или генерацию C, и компиляция там стоит миллисекунды. Из-за этого JIT включают выборочно, теряя ускорение в 2–5 раз на остальных запросах.

Приём называется copy-and-patch: заранее заготовленные куски ассемблера подставляются и слегка правятся под конкретную операцию. Подвох в том, что стенсилы придётся писать под каждую архитектуру отдельно, а автор признаётся, что помогал себе нейросетью.

🔗 Подробнее

@nuancesprog #Languages #Rust

Читать полностью…

NOP::Nuances of Programming

Торвальдс чинил драйвер Intel GPU вместе с ИИ

Линус закоммитил однострочный фикс в драйвер xe: round_up() заменён на round_down(). Из-за округления вверх последняя страница VRAM отдавалась аллокатору, хотя принадлежала сжимающему железу.

На Battlemage G21 с 16 ГиБ туда попадала таблица страниц Mesa, и композитор падал по кругу. Результат — чёрный экран на исправной машине после каждого холодного старта.

Отладка заняла 24 патча с отладочным кодом и 18 перезагрузок ядра. ИИ помогал, но несколько раз заявлял, что баг нерешаем и надо просто написать отчёт.

🔗 Подробнее

@nuancesprog #AI #Linux

Читать полностью…

NOP::Nuances of Programming

Малварь в Rust-крейте arrayref запускается при сборке

20 августа на crates.io появилась версия arrayref 0.3.10 с зависимостью proc-macro1. Её build-скрипт качал и запускал бинарник прямо во время компиляции.

Достаточно было просто собрать проект — без запуска кода и без тестов. Внутри src/ лежала честная копия proc-macro2, поэтому сборка проходила без единого подозрения.

Отдельный трюк: злоумышленник отозвал старые версии 0.3.5–0.3.9, и Cargo сам советовал обновиться до заражённой. Проверь Cargo.lock и логи сборок с 20 августа, вредоносные версии уже удалены.

🔗 Подробнее

@nuancesprog #Security #Rust

Читать полностью…

NOP::Nuances of Programming

Mojo открыли под Apache 2.0: компилятор целиком

Modular выложила исходники компилятора Mojo и всей оснастки в общий репозиторий на GitHub. Лицензия — Apache 2.0 с исключениями LLVM, неделей ранее язык дошёл до версии 1.0.

Четыре года Mojo развивался с открытым сообществом, но закрытым компилятором. Теперь можно смотреть, как устроен язык для GPU и ускорителей, и собирать его у себя.

Сборка идёт через Bazel: `./bazelw run --config=build-mojo KGEN:mojo -- run hello.mojo`. Подвох в том, что правки в компилятор пока не принимают — обещают открыть вклад к концу года.

🔗 Подробнее

@nuancesprog #Languages #GitHub

Читать полностью…

NOP::Nuances of Programming

Как одна строка SQL превращает Postgres в read-only

Клиент PlanetScale получил лавину ошибок 25006: запись перестала работать без видимых причин. Причина — один эндпоинт выполнял SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY.

PgBouncer в режиме транзакций переиспользует соединения между клиентами. Настройка сессии осталась в соединении и «отравила» пул для всех последующих запросов.

Быстрое лечение — DISCARD ALL на всех соединениях пула, а не только на подозрительных. Надёжнее не трогать сессию вообще: читающий трафик отправляй на реплику.

🔗 Подробнее

@nuancesprog #Infrastructure #Postgres

Читать полностью…

NOP::Nuances of Programming

📬 Дайджест недели

Лучшее за неделю:
Как шуточный домен стал инструментом военной разведки
GitHub снова падал: до 50% ошибок на скачивании архивов
В Linux 7.3 нехватка vRAM бьёт по FPS не так больно
Почему более умная модель хуже в работе
Водяные знаки в тексте ИИ снимаются слишком легко
incident.io отключила Pub/Sub — и никто не заметил
Мэттью Грин: спор о «going dark» возвращается

Мимо ленты, но стоило внимания:
dmmulroy/anti-slop — Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns
Engineers will do anything to avoid learning from history
Anthropic Refuses to Support Agents.md
Claude writing a macOS driver for my obscure HP printer built only for Windows
GrapheneOS/117057099753905023">Google replaced Git tags for certain source code with obtaining via Google Drive

Наша сетка: 😄 юмор — @nophumor · 💼 удалёнка — @nopremote

@nuancesprog #Digest

Читать полностью…

NOP::Nuances of Programming

incident.io отключила Pub/Sub — и никто не заметил

Команда incident.io добавила второй брокер сообщений и на неделю выключила Google Pub/Sub без единой жалобы. Через их платформу идёт около 240 млн сообщений в день по 800+ топикам.

Pub/Sub обещает 99,95% доступности, а компания продаёт корпоративным клиентам 99,99% — арифметика не сходится. Единственный брокер становится точкой отказа, и отговорка «это провайдер лежал» клиента не устроит.

Спасла старая абстракция eventadapter: интерфейсы Publisher и Subscriber позволили подменить транспорт без правки тысяч мест в коде. Подвох в том, что вместе с резервированием приезжают балансировка нагрузки, честное распределение по клиентам и регулярный chaos-тест.

🔗 Подробнее

@nuancesprog #Infrastructure

Читать полностью…

NOP::Nuances of Programming

llama.cpp получил версию v0.1.0

llama.cpp — движок для запуска LLM локально на CPU и GPU — выпустил тег v0.1.0. Раньше проект жил на сборочных номерах вида b6180, теперь появилась привычная нумерация.

Для тех, кто тащит llama.cpp в продакшн, это про предсказуемость зависимостей. Пиннить сборку по номеру коммита неудобно, а на семантическую версию можно спокойно сослаться в Dockerfile.

Подвох в том, что описания у релиза нет, а в артефактах всего два файла. Так что ждать стабильного API по мажорной цифре 0 пока рано.

🔗 Подробнее

@nuancesprog #AI #C

Читать полностью…

NOP::Nuances of Programming

GitHub снова падал: до 50% ошибок на скачивании архивов

17 августа GitHub словил массовую деградацию: API, Actions, Git-операции, Issues, Pages и вебхуки. Веб и API отдавали около 20% ошибок, а загрузка архивов и raw-контента — примерно 50%.

Под удар попали SAML и OIDC-логины, а также SCIM (автоматическая синхронизация учёток из корпоративного каталога). Значит, сломались не только пуши, но и вход в систему и CI, который тянет зависимости прямо из репозиториев.

Причину нашли и починили, но остаточные сбои тянулись ещё около часа после первого «mitigated». Хороший повод завести зеркало артефактов и не держать деплой на одном внешнем сервисе.

🔗 Подробнее

@nuancesprog #Infrastructure #GitHub

Читать полностью…

NOP::Nuances of Programming

Как Go ловит копирование структур через sync.noCopy

В sync.Mutex, sync.Once и sync.Map лежит пустое поле типа noCopy. Компилятор про него ничего не знает — предупреждение выдаёт go vet.

Проверка copylocks ищет типы, у которых sync.Locker реализует указатель, но не значение. Поэтому у noCopy есть пустые методы Lock и Unlock: они нужны только для этого трюка.

Тот же приём работает и в твоих структурах — добавь поле-маркер с двумя пустыми методами. Подвох в том, что sync.RWMutex маркера не имеет, и через свой именованный тип копию можно протащить незаметно.

🔗 Подробнее

@nuancesprog #Languages #Go

Читать полностью…

NOP::Nuances of Programming

Как Go, Kotlin и BEAM делят потоки между задачами

Разработчик разобрал по исходникам, кто в рантайме решает, когда переключить задачу. Сравниваются три планировщика M:N: Go, корутины Kotlin и Erlang/Elixir на BEAM.

Ответ на этот вопрос определяет всё остальное в рантайме. От него зависит, кооперативная многозадачность или вытесняющая, и встанет ли на паузе весь процесс при сборке мусора.

Полезная деталь: поток ОС в Linux по умолчанию берёт около 8 МБ стека. Ещё автор напоминает, что go f() ничего не ждёт — без WaitGroup или канала main спокойно завершится раньше.

🔗 Подробнее

@nuancesprog #Languages #Go

Читать полностью…

NOP::Nuances of Programming

Anthropic: рой из 45 агентов ищет уязвимости лучше одиночек

Anthropic запустила 45 агентов с общим форумом на 15 опенсорсных проектах. Они рецензировали находки друг друга, а отдельный агент-арбитр решал, настоящий ли баг.

Рой нашёл 266 уязвимостей против 21 у независимых агентов, работающих параллельно. Совпало всего 12 находок — подходы дополняют друг друга, а не заменяют.

Подвох в токенах: рой сжёг 27 миллионов против 6,5 у обычной схемы. Если считать только основной код, цена одной уязвимости выходит примерно та же.

🔗 Подробнее

@nuancesprog #AI

Читать полностью…

NOP::Nuances of Programming

Firefox остался единственным браузером с полным uBlock Origin

Microsoft Edge скоро отключит расширения на Manifest V2, включая uBlock Origin. Mozilla ответила в Bluesky: «Наша поддержка uBlock Origin никуда не денется».

Manifest V3 лишает блокировщики доступа к функциям, которые нужны для фильтрации запросов. Практически все Chromium-браузеры — Opera, Brave, Vivaldi — идут за Google по этому пути.

Альтернатива в Chromium — uBlock Origin Lite, но он ловит заметно меньше рекламы. Ирония в том, что Manifest V3 задумывался как способ повысить безопасность расширений.

🔗 Подробнее

@nuancesprog #Tools #JavaScript

Читать полностью…

NOP::Nuances of Programming

Почему более умная модель хуже в работе

Разработчик описал ощущение от Opus 5: по бенчмаркам сильнее предшественников, а в работе — шаг назад. Причина не в способностях, а в поведении: модель не переспрашивает и молча правит твои планы.

Автор связывает это с обучением под бенчмарки, где задача всегда решаема и полна. Такой отбор поощряет смелые догадки при неоднозначности и наказывает попытку остановиться и уточнить.

В реальном проекте контекст, бюджет и последствия целиком в промпт не влезают никогда. Спорный момент: это личное впечатление без замеров, но проверить легко — попроси агента явно задавать вопросы перед действиями.

🔗 Подробнее

@nuancesprog #AI

Читать полностью…

NOP::Nuances of Programming

Ричард Хипп рассказывает, как устроен SQLite изнутри

Автор SQLite разобрал на докладе путь запроса от парсера до байт-кода. Движок компилирует SQL в программу для собственной виртуальной машины и гоняет её по B-деревьям.

Это самая распространённая база в мире: она живёт в браузерах, телефонах и самолётах. Понимая байт-код, ты читаешь EXPLAIN не как шаманство, а как обычный листинг инструкций.

Начни с EXPLAIN QUERY PLAN — он покажет, какой индекс выбрал планировщик. Подвох в том, что SQLite прощает многое: типы колонок он трактует как пожелание, а не закон.

🔗 Подробнее

@nuancesprog #Data

Читать полностью…

NOP::Nuances of Programming

Армин Ронахер: агенты вернули моду на «сложные» языки

Ронахер заметил, что с LLM выбор языка перестал быть пожизненным обязательством. Люди берут Rust и Zig, даже не зная их толком.

Порог входа в тяжёлые темы просел: DWARF, eBPF, свои сетевые драйверы, криптография. Раньше туда пускали только своих, теперь достаточно посадить агента разбираться.

Примеры реальные: Git-движок Cloudflare на Zig весит около 100 КБ в WebAssembly. Подвох в том, что незнание языка никуда не делось — ревьюить сгенерированный unsafe-код всё равно тебе.

🔗 Подробнее

@nuancesprog #Opinion #Rust

Читать полностью…

NOP::Nuances of Programming

Как meshoptimizer научился жевать миллиарды треугольников

Арсений Капулкин прогнал через meshoptimizer сцену Zorah от NVIDIA — 1,64 млрд треугольников и 36 ГБ геометрии. Blender и Unreal Engine на этом файле просто падают по памяти, даже при 192 ГБ ОЗУ.

Речь про Nanite-подход: меш режется на кластеры по ~128 треугольников и собирается в граф уровней детализации. Кластер заменяется на грубый только если ошибка меньше пикселя — иначе на стыках вылезают трещины.

Автор описывает, как оптимизировал построение этой структуры до минут вместо часов. Подвох в том, что сцена содержит только позиции вершин — нормали считаются прямо в шейдере.

🔗 Подробнее

@nuancesprog #Tools

Читать полностью…

NOP::Nuances of Programming

Скрытый WebAudio на AliExpress ломает Bluetooth-мультипойнт

Автор блога laserphile заметил: открытая вкладка AliExpress глушит музыку с телефона. Причина — два скрытых AudioContext от скриптов collina.js и fireyejs.js.

Графы строят пилообразный осциллятор с усилением в ноль, но подключают его к системному выходу. Звука нет, зато аудиотракт остаётся активным, и кнопка «выключить звук во вкладке» не помогает.

Это часть большого отпечатка: canvas, WebGL, WebRTC, память, движение устройства. Спорно тут другое — отличить антифрод от обычной слежки со стороны невозможно.

🔗 Подробнее

@nuancesprog #Security #JavaScript

Читать полностью…

NOP::Nuances of Programming

Ядро Linux 7.2: планировщики, futex и Raspberry Pi

Вышло ядро Linux 7.2 — один из самых нагруженных циклов после 6.7. Среди новинок cache-aware scheduling, суб-планировщики для sched_ext и улучшения MGLRU.

Igalia довела до ума справедливую политику DRM-планировщика, важную при дележе GPU между клиентами. Ещё закрыли 14-летний баг в robust list у futex(), из-за которого портились данные.

Подвох в том, что fair-политика осталась опциональной: на rc7 прилетел отчёт о регрессии. Владельцам Raspberry Pi 4 и 5 интереснее runtime PM — GPU теперь глушит клок в простое.

🔗 Подробнее

@nuancesprog #Infrastructure #Linux

Читать полностью…

NOP::Nuances of Programming

SigNoz на ClickHouse 25: три ловушки при self-hosted развёртывании

Автор поднимал SigNoz (self-hosted систему observability) в изолированной сети Docker. Обещанный «docker-compose up за десять минут» превратился в разбор конфигов ClickHouse и гонок при старте.

Официальная документация отстаёт от изменений в базовых образах. Если ты держишь телеметрию у себя, эти грабли прилетят и тебе.

В ClickHouse 25.5.6 нельзя подменять config.xml целиком: правки идут в config.d/ и users.d/. А схемы больше не создаются сами — коллектор стартует только после успешного выхода контейнера-мигратора.

🔗 Подробнее

@nuancesprog #Infrastructure #Docker

Читать полностью…

NOP::Nuances of Programming

Как шуточный домен стал инструментом военной разведки

В 2018 году домен sondehub.org был куплен ради шутки — редиректа на трекер метеозондов. Сегодня это полноценный сервис с данными о запусках по всему миру.

Обратные предсказания траекторий позволили вычислять точки запуска зондов по данным о ветре. Так авторы случайно нанесли на карту артиллерийские позиции и военные суда.

С декабря 2024 года по API кто-то долбит запросами прогнозов — предсказывая полёты боевых аэростатов. Открытые данные и открытое API однажды становятся чужим оружием.

🔗 Подробнее

@nuancesprog #Security

Читать полностью…

NOP::Nuances of Programming

CSS в письме может увести твой пароль

Гарет Хейс из PortSwigger изучил санитайзеры Yahoo, Gmail, Outlook, Fastmail и ProtonMail. Он показал, как разрешённый CSS ворует токены, подменяет интерфейс и перехватывает ввод.

Тег label с атрибутом for кликает по чужим кнопкам интерфейса почты. В Outlook так открывается лента и закрепляется письмо — Microsoft это до сих пор не починила.

Псевдоэлементы :before и :after прячут текст от человека, но не от языковой модели. Так в браузере Atlas от OpenAI получается непрямая инъекция промпта прямо из письма.

🔗 Подробнее

@nuancesprog #Security

Читать полностью…

NOP::Nuances of Programming

ИИ пишет код, а объяснять его придётся тебе

Автор разделяет два режима работы с ИИ-ассистентом: помощь мышлению и отказ от него. В пул-реквесте они выглядят одинаково, разница всплывает через месяцы.

Примеры узнаваемые: миграция без индекса на фильтруемой колонке ложит дашборд под трафиком. А проверка на null лечит симптом гонки, и через два спринта баг выходит ниже по стеку.

Тест перед мержем простой: объясни код коллеге, не открывая историю чата. В комментариях предложили жёстче — сможешь объяснить через три месяца, когда контекст выветрится.

🔗 Подробнее

@nuancesprog #AI

Читать полностью…

NOP::Nuances of Programming

В Linux 7.3 нехватка vRAM бьёт по FPS не так больно

Патчи по управлению видеопамятью наконец приняли в апстрим и поставили в очередь на Linux 7.3. Речь о ситуации, когда игра просит больше vRAM, чем есть на карте.

Раньше это считалось приговором: вылеты и неиграбельный фреймрейт. На деле переполнение vRAM — вопрос производительности, а не стабильности, и часть данных просто уезжает в оперативку.

Подвох в шине PCIe 4.0 x16: около 32 ГиБ/с, то есть примерно 1 ГиБ за кадр при 30 FPS. Промах мимо Infinity Cache стоит примерно в 4,6 раза дороже обычного чтения из vRAM.

🔗 Подробнее

@nuancesprog #Infrastructure #Linux

Читать полностью…

NOP::Nuances of Programming

Cloudflare сам добавляет свой аналитический скрипт на сайты

Разработчик перевёл домен на Cloudflare и обнаружил в своей HTML-странице чужой JS. Это beacon.min.js от Cloudflare Insights, который включается по умолчанию с прошлого года.

Скрипт появляется, если DNS-запись «проксируется» — оранжевое облачко в панели включено. Формально это не взлом, но трафик твоих читателей уходит третьей стороне без спроса.

Отключается в разделе Analytics: сначала добавь сайт, потом сними галочку со сниппета. Заодно помогает CSP — заголовок, разрешающий браузеру грузить скрипты только с указанных адресов.

🔗 Подробнее

@nuancesprog #Security

Читать полностью…

NOP::Nuances of Programming

DuckDB получит асинхронный ввод-вывод для Parquet и CSV

С версии 2.0 осенью 2026 года DuckDB научится читать Parquet и CSV асинхронно. Раньше поток простаивал, ожидая ответа от удалённого хранилища вроде S3.

Это важно, если ты держишь данные в облаке, а считаешь их на отдельной машине. Синхронное чтение не выбирает всю доступную полосу, и потоки ждут вместо работы.

Внутри два пула: обычные воркеры и ASYNC-потоки, которых вчетверо больше, максимум 256. Подвох в упреждающем чтении: при быстрой сети и медленном декодировании память забивается префетчем.

🔗 Подробнее

@nuancesprog #Data

Читать полностью…

NOP::Nuances of Programming

Мэттью Грин: спор о «going dark» возвращается

Криптограф Мэттью Грин выпустил заметку о новом витке давления на сквозное шифрование. «Going dark» — старый термин спецслужб про переписку, которую нельзя прочитать со стороны.

Для разработчика это не абстракция, а требования к продуктам с личными сообщениями. Сканирование на устройстве или запасной ключ ломают саму модель угроз, ради которой шифрование и внедряли.

Подвох в том, что «только для тяжких преступлений» технически не выражается никак. Если строишь мессенджер, заранее реши, что делать при законном требовании доступа.

🔗 Подробнее

@nuancesprog #Security

Читать полностью…

NOP::Nuances of Programming

TLA+ нашёл гонку в сборщике мусора реестра Depot

Команда Depot переписала сборщик мусора и проверила его model checker'ом TLA+. Тот нашёл реальный баг, который пропустили тесты и код-ревью.

Тесты гоняют те чередования операций, которые ты придумал, а баг живёт в непридуманном. TLC перебрал 14 290 224 состояния за 21 минуту и доказал 10 инвариантов безопасности.

Подвох в том, что модель теперь пишет не человек, а агент по коду на Go и SQL. Формулировать инварианты и проверять уровень абстракции всё равно приходится самому.

🔗 Подробнее

@nuancesprog #Infrastructure

Читать полностью…

NOP::Nuances of Programming

Водяные знаки в тексте ИИ снимаются слишком легко

С августа 2026 EU AI Act потребует, чтобы вывод моделей был распознаваем как машинный. Google уже применяет SynthID, а OpenAI и Anthropic, похоже, подменяют пробелы юникод-двойниками.

Текст — плотная среда, в нём нет «шума», куда спрятать подпись без потери качества. Поэтому знак прячут в самом выборе токенов: из топ-5 берётся вариант с нужным score.

Подвох в том, что нормализация юникода или лёгкий рерайт стирают метку начисто. Полагаться на такие детекторы при проверке чужого текста не стоит — ложных срабатываний много.

🔗 Подробнее

@nuancesprog #AI

Читать полностью…

NOP::Nuances of Programming

Пересечения типов в TypeScript и тихий never

Разбор на dev.to показывает, что A & B — это не слияние объектов, а теоретико-множественное пересечение. Если оба типа объявляют status, но один как number, другой как string, поле схлопывается в never.

Ошибка всплывает не на объявлении типа, а на первом присваивании. Из-за этого конфликт легко пропустить и увидеть его только там, где значение приходит из сети.

Пересечения безопасны, когда типы дают неперекрывающиеся или полностью совпадающие поля. Для «одна из нескольких форм» бери объединение, а конфликтные поля лучше переименовать заранее.

🔗 Подробнее

@nuancesprog #Languages #TypeScript

Читать полностью…
Subscribe to a channel