Двухчасовое расследование о том, откуда взялась фраза про преждевременную оптимизацию
Её полвека цитируют то как Кнута, то как Хоара, чаще всего чтобы осадить желание написать код побыстрее. Кейси Муратори собрал больше 200 исторических документов, от переписки Дейкстры времён «GOTO considered harmful» до отчётов конференций NATO 1968 года, и показал, при каких обстоятельствах фраза родилась и к чему её на самом деле применяли.
Попутно у Хоара в 1965 году нашлась конструкция, похожая на SSA-форму, а у Страуструпа в 1979-м приём, который сегодня называют dependency injection. В нашем канале Tproger разобрали подробнее.
@prog_stuff
Её полвека цитируют то как Кнута, то как Хоара, чаще всего чтобы осадить желание написать код побыстрее. Кейси Муратори собрал больше 200 исторических документов, от переписки Дейкстры времён «GOTO considered harmful» до отчётов конференций NATO 1968 года, и показал, при каких обстоятельствах фраза родилась и к чему её на самом деле применяли.
Попутно у Хоара в 1965 году нашлась конструкция, похожая на SSA-форму, а у Страуструпа в 1979-м приём, который сегодня называют dependency injection. В нашем канале Tproger разобрали подробнее.
@prog_stuff
Выделите всю память при старте и никогда больше: как TigerBeetle защищается от перегрузки
Алексей Кладов (matklad) отвечает на письмо читателя, который получил use-after-free в матчере ордеров с пулом объектов, и выводит из этого два приёма из TigerStyle. Первый: никакой динамической аллокации после инициализации. Программа запускается с
На возражение «а вдруг память ещё есть» ответ: а вдруг нет? Попытка выделить ещё один объект под нагрузкой заканчивается OOM-киллером, который снимает весь процесс с миллионом ордеров внутри, а то и супервизор. Со статическим лимитом система может не стартовать без памяти, но если стартовала, деградирует предсказуемо. По дороге разбирается, почему пул объектов одного типа превращает опасный use-after-free в скучный детерминированный баг.
@prog_stuff
Алексей Кладов (matklad) отвечает на письмо читателя, который получил use-after-free в матчере ордеров с пулом объектов, и выводит из этого два приёма из TigerStyle. Первый: никакой динамической аллокации после инициализации. Программа запускается с
--orders-max=1_000_000, выделяет массив под миллион ордеров одной строкой и всё, что сверх лимита, отклоняет.На возражение «а вдруг память ещё есть» ответ: а вдруг нет? Попытка выделить ещё один объект под нагрузкой заканчивается OOM-киллером, который снимает весь процесс с миллионом ордеров внутри, а то и супервизор. Со статическим лимитом система может не стартовать без памяти, но если стартовала, деградирует предсказуемо. По дороге разбирается, почему пул объектов одного типа превращает опасный use-after-free в скучный детерминированный баг.
@prog_stuff
Сколько знаков в 52 факториала и как прикинуть это без калькулятора
Началось с бытового вопроса: насколько велико число перестановок колоды карт. Дальше Эли Бендерски задумался, как оценивать такие величины, не имея под рукой ни калькулятора, ни компьютера.
Оказалось, что за оценкой количества знаков в факториале стоит вполне занятная математика, и разбор разворачивает её шаг за шагом, без предварительных знаний сверх школьных.
Жанр здесь не прикладной, а тот, ради которого такие блоги и читают: короткое погружение в тему, которая на работе не понадобится, но перестраивает интуицию про рост чисел.
Началось с бытового вопроса: насколько велико число перестановок колоды карт. Дальше Эли Бендерски задумался, как оценивать такие величины, не имея под рукой ни калькулятора, ни компьютера.
Оказалось, что за оценкой количества знаков в факториале стоит вполне занятная математика, и разбор разворачивает её шаг за шагом, без предварительных знаний сверх школьных.
Жанр здесь не прикладной, а тот, ради которого такие блоги и читают: короткое погружение в тему, которая на работе не понадобится, но перестраивает интуицию про рост чисел.
«Zero-cost» compile-time информация о типах стоит экспоненциально, а runtime-таблица линейно
Джинджер Билл, автор языка Odin, объясняет, почему Odin форматирует вывод через RTTI, а не через генерацию кода на этапе компиляции. Таблица типов растёт линейно: N типов, N записей, одна процедура печати на все, ноль дополнительной работы у семантического анализатора. Её размер можно прочитать в бинарнике в байтах.
CTTI специализирует код под каждый тип и каждую комбинацию: сериализатор N типов в K форматов даёт N на K инстанциаций, и это повторяется в проверке типов, кодогенерации и размере бинарника. Цену этого никто не может назвать в цифрах, потому что она размазана по компилятору, зато её называют «бесплатной». Автор аккуратно разводит «известно на этапе компиляции» и «бесплатно перечислить на этапе компиляции»: это разные вещи.
@prog_stuff
Джинджер Билл, автор языка Odin, объясняет, почему Odin форматирует вывод через RTTI, а не через генерацию кода на этапе компиляции. Таблица типов растёт линейно: N типов, N записей, одна процедура печати на все, ноль дополнительной работы у семантического анализатора. Её размер можно прочитать в бинарнике в байтах.
CTTI специализирует код под каждый тип и каждую комбинацию: сериализатор N типов в K форматов даёт N на K инстанциаций, и это повторяется в проверке типов, кодогенерации и размере бинарника. Цену этого никто не может назвать в цифрах, потому что она размазана по компилятору, зато её называют «бесплатной». Автор аккуратно разводит «известно на этапе компиляции» и «бесплатно перечислить на этапе компиляции»: это разные вещи.
@prog_stuff
Задержка, пропускная способность или цена токена: карта компромиссов инференса LLM
Филип Кили из Baseten раскладывает все приёмы ускорения инференса на две группы. Одни двигают развёртывание вдоль кривой компромисса: размер батча (маленький даёт низкую задержку и дорогой токен, большой наоборот), tensor parallelism с дорогой all-to-all коммуникацией ради задержки, expert parallelism, который на широких MoE может занимать целую стойку. Другие сдвигают саму кривую: квантизация в MXFP4 и NVFP4, оптимизация ядер, speculative decoding (EAGLE-3, DSpark, DFlash), разнесение prefill и decode по разным воркерам.
Полезная арифметика: удвоение производительности железа и удвоение софтверного слоя вместе дают четырёхкратный выигрыш. И честная оговорка: на практике фронтир зубчатый, и попадание в целевые числа чаще вопрос перебора конфигураций, чем новой идеи.
@prog_stuff
Филип Кили из Baseten раскладывает все приёмы ускорения инференса на две группы. Одни двигают развёртывание вдоль кривой компромисса: размер батча (маленький даёт низкую задержку и дорогой токен, большой наоборот), tensor parallelism с дорогой all-to-all коммуникацией ради задержки, expert parallelism, который на широких MoE может занимать целую стойку. Другие сдвигают саму кривую: квантизация в MXFP4 и NVFP4, оптимизация ядер, speculative decoding (EAGLE-3, DSpark, DFlash), разнесение prefill и decode по разным воркерам.
Полезная арифметика: удвоение производительности железа и удвоение софтверного слоя вместе дают четырёхкратный выигрыш. И честная оговорка: на практике фронтир зубчатый, и попадание в целевые числа чаще вопрос перебора конфигураций, чем новой идеи.
@prog_stuff
WhatsApp* классифицирует мошеннические сообщения на устройстве, не нарушая сквозное шифрование
Задача с виду противоречивая: распознать мошенническое сообщение и не прочитать переписку. Meta* публикует технический обзор Scam Alert до массового выката, вместе с ограниченной бетой, и приглашает исследователей безопасности его ломать.
Решение целиком на устройстве: содержимое сообщений не покидает телефон ради классификации и не отправляется автоматически ни в WhatsApp*, ни в Meta*, ни кому-либо ещё. Функция опциональна и включается пользователем.
Принципы названы прямо: модель достаточно мала, чтобы работать на мобильном железе, достаточно проста, чтобы её опубликовать для независимой проверки, и достаточно эффективна без серверной части. Недавние успехи в моделях на устройстве как раз и сделали такой размен возможным.
*Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ.
Задача с виду противоречивая: распознать мошенническое сообщение и не прочитать переписку. Meta* публикует технический обзор Scam Alert до массового выката, вместе с ограниченной бетой, и приглашает исследователей безопасности его ломать.
Решение целиком на устройстве: содержимое сообщений не покидает телефон ради классификации и не отправляется автоматически ни в WhatsApp*, ни в Meta*, ни кому-либо ещё. Функция опциональна и включается пользователем.
Принципы названы прямо: модель достаточно мала, чтобы работать на мобильном железе, достаточно проста, чтобы её опубликовать для независимой проверки, и достаточно эффективна без серверной части. Недавние успехи в моделях на устройстве как раз и сделали такой размен возможным.
*Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ.
Engineering at Meta
How We’re Building Scam Alert on WhatsApp With End-to-End Encryption and Verifiability Guarantees
WhatsApp is committed to helping people stay safe while protecting the privacy of their messages. As scam tactics evolve — from impersonation to social engineering to AI-generated lures — we’…
❤1🤯1
Все агенты собраны из восьми способностей, а не из отраслевых рецептов: книга на 60 паттернов
Первая волна литературы про агентов была устроена по отраслям: как построить агента для медицины, для финансов, для программирования. Автор считает, что такая рамка теперь мешает: если убрать промпты и наборы инструментов, медицинский и кодовый агент запускают одни и те же пять-шесть архитектурных паттернов, а различия косметические.
Книга переупорядочена вокруг способностей. Их восемь: восприятие, рассуждение, планирование, память, работа с инструментами, координация, обучение и выравнивание. Любой работающий агент, от скрипта в cron, который сводит вам почту, до многоагентной системы, готовящей документы по слиянию, это композиция этих восьми в разных пропорциях.
Для каждого из 60 паттернов даны код, режимы отказа и сводные примеры. Объём книжный, так что это чтение на недели, а не на вечер.
Первая волна литературы про агентов была устроена по отраслям: как построить агента для медицины, для финансов, для программирования. Автор считает, что такая рамка теперь мешает: если убрать промпты и наборы инструментов, медицинский и кодовый агент запускают одни и те же пять-шесть архитектурных паттернов, а различия косметические.
Книга переупорядочена вокруг способностей. Их восемь: восприятие, рассуждение, планирование, память, работа с инструментами, координация, обучение и выравнивание. Любой работающий агент, от скрипта в cron, который сводит вам почту, до многоагентной системы, готовящей документы по слиянию, это композиция этих восьми в разных пропорциях.
Для каждого из 60 паттернов даны код, режимы отказа и сводные примеры. Объём книжный, так что это чтение на недели, а не на вечер.
freeCodeCamp.org
The AI Agent Engineer's Guide: 60 Patterns for Building Autonomous Systems [Full Book]
This book is a capability-led field guide to the architectures that make modern AI agents actually work. It includes code, failure modes, and illustrative composite case studies for every pattern. Abo
CSRF с нуля: почему POST в Spring Boot отдаёт 403 и почему отключать защиту не выход
Сценарий, с которого начинается текст, узнаваем: вы пишете REST API на Spring Boot, ловите неожиданные 403 на каждом POST и «чините» это строчкой
Справочник разбирает предмет снизу вверх: сначала механика браузера, из-за которой атака вообще возможна, потом сами атаки, и только затем реализация защиты в Spring Security.
Автор связывает материал со своим гайдом по OAuth 2.0, где параметр
Сценарий, с которого начинается текст, узнаваем: вы пишете REST API на Spring Boot, ловите неожиданные 403 на каждом POST и «чините» это строчкой
.csrf(csrf -> csrf.disable()) в цепочке фильтров.Справочник разбирает предмет снизу вверх: сначала механика браузера, из-за которой атака вообще возможна, потом сами атаки, и только затем реализация защиты в Spring Security.
Автор связывает материал со своим гайдом по OAuth 2.0, где параметр
state упоминался вскользь как защита авторизационных потоков от CSRF. Здесь та же тема разворачивается целиком. Сохранять стоит тем, кто отвечает за аутентификацию на бэкенде.freeCodeCamp.org
CSRF from Scratch: Browser Mechanics, Attacks, and Spring Security Implementation [Full Handbook]
If you've ever built a web application or configured Spring Security, you've almost certainly encountered Cross-Site Request Forgery (CSRF). In my previous guide, How OAuth 2.0 Works: A Practical Guid
От первых сайтов на HTML до нейросетей — веб прошёл долгий путь, и SpaceWeb прошёл его вместе с рунетом все свои 25 лет. К юбилею компания вместе с Типичным программистом сделала анкету, где эта история рассказана между вопросами про спорт, друзей и обои на рабочий стол, а нужную атмосферу создают аська, скайп и биткоин из разных эпох.
В конце — небольшой взгляд в будущее, промокод на услуги SpaceWeb и результат: узнаешь свой цифровой профиль.
В конце — небольшой взгляд в будущее, промокод на услуги SpaceWeb и результат: узнаешь свой цифровой профиль.
👾1
Четыре джойна в SQL против одного запроса в графе: справочник по Neo4j и Python
Рамка задана вопросом, который легко произнести и тяжело написать: у каких инженеров есть свежий контекст по сервисам, задетым ночным инцидентом. В SQL это четыре или пять джойнов, каждый строит промежуточный результат шире нужного ответа и тут же выбрасывает большую часть. Запрос замедляется по мере роста таблиц и хуже читается с каждым возвращением к нему.
Справочник ведёт от пустой базы до работающего графа знаний: загрузка настоящих данных из Python и запросы, на которых идея становится понятной.
Разобраны части, которые туториалы пропускают: как решить, что становится узлом, почему первая модель данных почти наверняка неверна, как ускорить загрузку и как читать план запроса, когда что-то тормозит.
Рамка задана вопросом, который легко произнести и тяжело написать: у каких инженеров есть свежий контекст по сервисам, задетым ночным инцидентом. В SQL это четыре или пять джойнов, каждый строит промежуточный результат шире нужного ответа и тут же выбрасывает большую часть. Запрос замедляется по мере роста таблиц и хуже читается с каждым возвращением к нему.
Справочник ведёт от пустой базы до работающего графа знаний: загрузка настоящих данных из Python и запросы, на которых идея становится понятной.
Разобраны части, которые туториалы пропускают: как решить, что становится узлом, почему первая модель данных почти наверняка неверна, как ускорить загрузку и как читать план запроса, когда что-то тормозит.
freeCodeCamp.org
How to Build a Knowledge Graph with Python and Neo4j [Full Handbook]
Most of the data you work with is really about relationships. A customer belongs to an account. An incident affects a service. An engineer owns a repository. You store all of that in tables, and for a
Агентам дали писать стратегии, но не дали решать, что считать удачным результатом
Агент для торговых исследований умеет написать код стратегии, прогнать бэктест, посмотреть результат и переписать стратегию заново. Сложность не в этом цикле, а в том, чтобы он не превратился в неуправляемый поиск красивого бэктеста.
В справочнике систему строят так: исторические данные даёт EODHD, а детерминированный слой на Python держит в своих руках разбиение выборок, логику бэктеста, бенчмарки, историю экспериментов и правила отбора. Внутри этих границ работают три агента: координатор, инженер стратегий и критик исследования, которые проходят три версии стратегии.
Цель проговорена прямо: доказывать, что агенты надёжно находят прибыльные стратегии, автор не собирается. Он строит процесс, где агенты генерируют и оспаривают идеи, но не контролируют доказательства. Приём переносится на любую агентную задачу с измеримым результатом.
Агент для торговых исследований умеет написать код стратегии, прогнать бэктест, посмотреть результат и переписать стратегию заново. Сложность не в этом цикле, а в том, чтобы он не превратился в неуправляемый поиск красивого бэктеста.
В справочнике систему строят так: исторические данные даёт EODHD, а детерминированный слой на Python держит в своих руках разбиение выборок, логику бэктеста, бенчмарки, историю экспериментов и правила отбора. Внутри этих границ работают три агента: координатор, инженер стратегий и критик исследования, которые проходят три версии стратегии.
Цель проговорена прямо: доказывать, что агенты надёжно находят прибыльные стратегии, автор не собирается. Он строит процесс, где агенты генерируют и оспаривают идеи, но не контролируют доказательства. Приём переносится на любую агентную задачу с измеримым результатом.
freeCodeCamp.org
How to Build a Multi-Agent Trading Research System with LangChain Deep Agents [Full Handbook]
A trading research agent can write strategy code, run a backtest, inspect the results, and keep revising the strategy. The harder problem is making sure that this loop doesn't turn into an uncontrolle
Асинхронный Rust в одном ряду с потоками и событийными циклами, а не сам по себе
Та же серия Эли Бендерски, часть седьмая: тот же набор задач конкурентного сетевого сервера решается средствами Rust.
Отдельная ценность в том, что асинхронный Rust обычно объясняют изнутри, через футуры и исполнители, и он выглядит вещью в себе. Здесь он попадает в общий ряд с потоками, событийными циклами и корутинами из предыдущих частей, и становится видно, чем именно он платит за свои гарантии.
В паре с восьмой частью, про Go, получается готовое сравнение двух подходов на одной задаче, написанное одним человеком в одинаковых условиях.
Та же серия Эли Бендерски, часть седьмая: тот же набор задач конкурентного сетевого сервера решается средствами Rust.
Отдельная ценность в том, что асинхронный Rust обычно объясняют изнутри, через футуры и исполнители, и он выглядит вещью в себе. Здесь он попадает в общий ряд с потоками, событийными циклами и корутинами из предыдущих частей, и становится видно, чем именно он платит за свои гарантии.
В паре с восьмой частью, про Go, получается готовое сравнение двух подходов на одной задаче, написанное одним человеком в одинаковых условиях.
Горутины против потоков и событийных циклов: восьмая часть разбора конкурентных серверов
Эли Бендерски много лет ведёт серию, где один и тот же сетевой сервер переписывается разными средствами: последовательно, на потоках, через событийный цикл, на обратных вызовах, на корутинах. Каждая часть решает уже описанные задачи новым способом и меряет результат.
Восьмая часть переключается на Go. Ценность именно в позиции внутри серии: горутины разбираются не как отдельная фича языка, а как очередной ответ на проблемы, которые в предыдущих семи частях уже разложены и измерены.
Читать можно подряд с первой части или точечно, если предмет знаком и нужно сравнение подходов. Ссылки на все части стоят в начале текста.
Эли Бендерски много лет ведёт серию, где один и тот же сетевой сервер переписывается разными средствами: последовательно, на потоках, через событийный цикл, на обратных вызовах, на корутинах. Каждая часть решает уже описанные задачи новым способом и меряет результат.
Восьмая часть переключается на Go. Ценность именно в позиции внутри серии: горутины разбираются не как отдельная фича языка, а как очередной ответ на проблемы, которые в предыдущих семи частях уже разложены и измерены.
Читать можно подряд с первой части или точечно, если предмет знаком и нужно сравнение подходов. Ссылки на все части стоят в начале текста.
Вторая глава Logic for Programmers выложена целиком: предикаты, импликация и кванторы
Хиллель Уэйн писал книгу, потому что хороших материалов по логике именно для программистов не было. Книга вышла, и появилась обратная проблема: нет хороших бесплатных. Автор выложил вторую главу целиком в виде поста.
Глава называется ускоренным курсом и вводит понятия с нуля: предикаты, оператор импликации, множества и кванторы над ними. Автор подчёркивает, что многое читателю знакомо по опыту программирования, просто называется иначе.
Все сноски в посте это редакторские комментарии, которых в книге нет. Удобный способ понять, нужна ли вам книга, потратив вечер вместо покупки.
Хиллель Уэйн писал книгу, потому что хороших материалов по логике именно для программистов не было. Книга вышла, и появилась обратная проблема: нет хороших бесплатных. Автор выложил вторую главу целиком в виде поста.
Глава называется ускоренным курсом и вводит понятия с нуля: предикаты, оператор импликации, множества и кванторы над ними. Автор подчёркивает, что многое читателю знакомо по опыту программирования, просто называется иначе.
Все сноски в посте это редакторские комментарии, которых в книге нет. Удобный способ понять, нужна ли вам книга, потратив вечер вместо покупки.
Hillel Wayne
A Crash Course in Predicate Logic
I started writing Logic for Programmers because there weren’t any good resources on logic for, uh, programmers. Now that the book’s out, the new problem is that there aren’t any good free resources on logic for programmers.
So, to solve that problem (and…
So, to solve that problem (and…
❤1
Биргитта Бёкелер разбирает, превращается ли TDD в руках агента в ритуал без содержания
Материал входит в серию Exploring Gen AI, где технологи Thoughtworks публикуют результаты собственных экспериментов, а не обзоры чужих мнений. Автор — Distinguished Engineer с двадцатью с лишним годами в разработке и архитектуре.
Вопрос поставлен честно прямо в заголовке: театр или реальная польза. Разбирается в том числе вариант, что цикл красный-зелёный-рефакторинг в руках агента становится обрядом, который ничего не проверяет.
Стоит времени, если вы сейчас решаете, встраивать ли тесты в промпт или писать их после, и не хотите принимать это решение по ощущению.
Материал входит в серию Exploring Gen AI, где технологи Thoughtworks публикуют результаты собственных экспериментов, а не обзоры чужих мнений. Автор — Distinguished Engineer с двадцатью с лишним годами в разработке и архитектуре.
Вопрос поставлен честно прямо в заголовке: театр или реальная польза. Разбирается в том числе вариант, что цикл красный-зелёный-рефакторинг в руках агента становится обрядом, который ничего не проверяет.
Стоит времени, если вы сейчас решаете, встраивать ли тесты в промпт или писать их после, и не хотите принимать это решение по ощущению.
martinfowler.com
TDD inside the agent loop - theater or actual value?
Notes from my Thoughtworks colleagues on AI-assisted software delivery
Meta переписала транспорт RDMA с нуля под Ethernet и кластеры в миллион ускорителей
Коллективные операции вроде all-reduce синхронизируют тысячи ускорителей во время обучения, и темп всей задачи задаёт самая медленная передача. В инференсе задержка между шардами модели напрямую бьёт по времени ответа для сотен миллионов пользователей. Даже небольшое трение в сети замораживает заметные вычислительные мощности.
Проблема со стандартным RoCE в том, что он ожидает доставку каждого кадра по порядку, опирается на PFC и мешает распылению пакетов, которое как раз и даёт производительность в больших многоплоскостных сетях. MetaRoCE спроектирован с чистого листа под высокую пропускную способность, низкий хвост задержек и простоту эксплуатации по мере роста числа ускорителей и расстояний между ними.
Спецификацию, эталонную реализацию и набор тестов на соответствие выкладывают через Open Compute Project. Масштаб, на который это рассчитано: кластеры в сотни тысяч ускорителей, разнесённые по нескольким дата-центрам и регионам.
Коллективные операции вроде all-reduce синхронизируют тысячи ускорителей во время обучения, и темп всей задачи задаёт самая медленная передача. В инференсе задержка между шардами модели напрямую бьёт по времени ответа для сотен миллионов пользователей. Даже небольшое трение в сети замораживает заметные вычислительные мощности.
Проблема со стандартным RoCE в том, что он ожидает доставку каждого кадра по порядку, опирается на PFC и мешает распылению пакетов, которое как раз и даёт производительность в больших многоплоскостных сетях. MetaRoCE спроектирован с чистого листа под высокую пропускную способность, низкий хвост задержек и простоту эксплуатации по мере роста числа ускорителей и расстояний между ними.
Спецификацию, эталонную реализацию и набор тестов на соответствие выкладывают через Open Compute Project. Масштаб, на который это рассчитано: кластеры в сотни тысяч ускорителей, разнесённые по нескольким дата-центрам и регионам.
Engineering at Meta
MetaRoCE: A New RDMA Transport Built for AI-Scale Ethernet
Training and serving frontier AI models depends on fast, reliable networks that move data between GPUs without wasting compute cycles. To meet this challenge at scale, Meta designed MetaRoCE – a c…
Многостадийная модель дала Meta* 6% конверсий в Instagram* и предсказуемые законы масштабирования
Система ранжирования обязана достать и отсортировать тысячи объявлений за миллисекунды, перебирая миллионы кандидатов в секунду. Раньше это решалось гибридной схемой, где последовательности пользовательских событий обрабатывает одна модель, а разреженные признаки другая, со всеми вытекающими компромиссами.
В статье описаны два изменения: многостадийная модель последовательностей, разводящая тяжёлое офлайновое моделирование пользователя и лёгкое онлайновое ранжирование, и приём с плотной токенизацией и вниманием, учитывающим цель, который выучивает взаимодействия признаков прямо из данных.
Совокупный результат: плюс 6% конверсий в Instagram*, плюс 3% конверсий в Facebook* и плюс 3,5% кликов по рекламе в Facebook*. Всё это часть Generative Ads Recommendation Model.
*Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ.
Система ранжирования обязана достать и отсортировать тысячи объявлений за миллисекунды, перебирая миллионы кандидатов в секунду. Раньше это решалось гибридной схемой, где последовательности пользовательских событий обрабатывает одна модель, а разреженные признаки другая, со всеми вытекающими компромиссами.
В статье описаны два изменения: многостадийная модель последовательностей, разводящая тяжёлое офлайновое моделирование пользователя и лёгкое онлайновое ранжирование, и приём с плотной токенизацией и вниманием, учитывающим цель, который выучивает взаимодействия признаков прямо из данных.
Совокупный результат: плюс 6% конверсий в Instagram*, плюс 3% конверсий в Facebook* и плюс 3,5% кликов по рекламе в Facebook*. Всё это часть Generative Ads Recommendation Model.
*Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ.
Engineering at Meta
From User Sequences to Scaling Laws: A Multi-Stage Architecture for Meta’s Ads Ranking
Every day, Meta’s recommendation platforms handle billions of user interactions, generating rich temporal signals that capture individual preferences and intent across products, ads, and content. I…
Forwarded from Инструменты программиста
Восемь дыр в семи консольных ИИ-агентах: репозиторий сам называет команду для запуска
Manifold Security раскрыла класс уязвимостей, где конфигурация Git внутри репозитория указывает команду, а агент её выполняет: от вашего пользователя, вне песочницы и без запроса подтверждения. Четыре из восьми на момент публикации не закрыты.
🔘 срабатывает, только если репозиторий приехал файлами с целой директорией
🔘 пофикшено в goose, Claude Code и Cursor; на 1 сентября Hermes Agent, Qwen Code, Grok Build и второй путь в Claude Code всё ещё выполняли команды из репозитория;
🔘 в Claude Code и Hermes нагрузка срабатывает до подтверждения доверия к папке, в Qwen Code до аутентификации, в Grok Build на первом нажатии клавиши;
🔘 OpenAI в тот же день выпустила три своих CVE на тот же класс в Codex.
#инструменты
Manifold Security раскрыла класс уязвимостей, где конфигурация Git внутри репозитория указывает команду, а агент её выполняет: от вашего пользователя, вне песочницы и без запроса подтверждения. Четыре из восьми на момент публикации не закрыты.
🔘 срабатывает, только если репозиторий приехал файлами с целой директорией
.git: архив, общий диск, папка синхронизации, флешка. Обычный clone не воспроизводит;🔘 пофикшено в goose, Claude Code и Cursor; на 1 сентября Hermes Agent, Qwen Code, Grok Build и второй путь в Claude Code всё ещё выполняли команды из репозитория;
🔘 в Claude Code и Hermes нагрузка срабатывает до подтверждения доверия к папке, в Qwen Code до аутентификации, в Grok Build на первом нажатии клавиши;
🔘 OpenAI в тот же день выпустила три своих CVE на тот же класс в Codex.
#инструменты
Дэн Лу: стоимость работы над производительностью упала на порядки, и оправданий у медленного софта не осталось
Тезис эссе в том, что оптимизации, раньше окупавшиеся только на огромном масштабе или в самых прибыльных проектах, стали доступны всем: то, что требовало человека с редким набором навыков, теперь делается несколькими предложениями запроса.
Дальше идут возражения практиков, и они интереснее самого тезиса. Марк Брукер соглашается и добавляет, что вероятный итог это динамический софт, подогнанный под конкретную нагрузку, а не под класс нагрузок, со своими рисками; он же вспоминает FFTW и приёмы демосцены вплоть до демки, переиспользовавшей собственный код как текстуры ради попадания в кеш.
Майкл Малис возражает мему «код никогда не был сложной частью»: для JIT-компиляторов написание кода как раз и было барьером, и их редкость это доказывает. Читать стоит целиком, вместе с ветками ответов.
Тезис эссе в том, что оптимизации, раньше окупавшиеся только на огромном масштабе или в самых прибыльных проектах, стали доступны всем: то, что требовало человека с редким набором навыков, теперь делается несколькими предложениями запроса.
Дальше идут возражения практиков, и они интереснее самого тезиса. Марк Брукер соглашается и добавляет, что вероятный итог это динамический софт, подогнанный под конкретную нагрузку, а не под класс нагрузок, со своими рисками; он же вспоминает FFTW и приёмы демосцены вплоть до демки, переиспользовавшей собственный код как текстуры ради попадания в кеш.
Майкл Малис возражает мему «код никогда не был сложной частью»: для JIT-компиляторов написание кода как раз и было барьером, и их редкость это доказывает. Читать стоит целиком, вместе с ветками ответов.
Что на самом деле обещает wait-free-очередь на Rust
Обстоятельный разбор на dev.to ведёт от вопроса «что вообще значит wait-free» до рабочей очереди на Rust. Атомарные операции убирают мьютекс, но не обещают, что поток закончит операцию за конечное число шагов, если соседний поток застрял у планировщика. Wait-free означает именно верхнюю границу шагов.
Что разбирают по дороге:
• чем wait-free отличается от lock-free и obstruction-free;
• почему очередь даётся сложнее, чем кажется;
• как кольцевой буфер фиксированного размера и номера последовательности решают, чья сейчас ячейка;
• где реализация остаётся тонкой даже после того, как код заработал.
Rust отсекает часть ошибок работы с памятью, но гарантию прогресса даёт алгоритм, а не компилятор.
Сохраните, если строите событийный пайплайн, где продюсеры быстрее консьюмеров: выбор между Mutex и атомиками перестаёт быть вопросом вкуса.
Обстоятельный разбор на dev.to ведёт от вопроса «что вообще значит wait-free» до рабочей очереди на Rust. Атомарные операции убирают мьютекс, но не обещают, что поток закончит операцию за конечное число шагов, если соседний поток застрял у планировщика. Wait-free означает именно верхнюю границу шагов.
Что разбирают по дороге:
• чем wait-free отличается от lock-free и obstruction-free;
• почему очередь даётся сложнее, чем кажется;
• как кольцевой буфер фиксированного размера и номера последовательности решают, чья сейчас ячейка;
• где реализация остаётся тонкой даже после того, как код заработал.
Rust отсекает часть ошибок работы с памятью, но гарантию прогресса даёт алгоритм, а не компилятор.
Сохраните, если строите событийный пайплайн, где продюсеры быстрее консьюмеров: выбор между Mutex и атомиками перестаёт быть вопросом вкуса.