BYOVD: как детектить атаку, если EDR слаб перед ней
Есть такая техника, при которой EDR — мощнейшее ПО для мониторинга, обнаружения и реагирования на угрозы — бессессильно. Эта техника называется BYOVD (Bring Your Own Vulnerable Driver). С ее помощью злоумышленники проникают в систему, повышают привилегии и потом совершают мошенничество. Именно BYOVD был одним из ключевых этапов при атаках на СДЭК, Аэрофлот, «Верный».
Как обезопасить свою проект от этой напасти? В статье — готовая стратегия обнаружения и чек-лист для вашей инфраструктуры.
Есть такая техника, при которой EDR — мощнейшее ПО для мониторинга, обнаружения и реагирования на угрозы — бессессильно. Эта техника называется BYOVD (Bring Your Own Vulnerable Driver). С ее помощью злоумышленники проникают в систему, повышают привилегии и потом совершают мошенничество. Именно BYOVD был одним из ключевых этапов при атаках на СДЭК, Аэрофлот, «Верный».
Как обезопасить свою проект от этой напасти? В статье — готовая стратегия обнаружения и чек-лист для вашей инфраструктуры.
Разработчик Эрик Ленгьел (Eric Lengyel) сделал огромный подарок для индустрии графики и геймдева. Он досрочно, за 12 лет до истечения срока, передал патент на свой знаменитый алгоритм Slug в общественное достояние.
Slug — это метод рендеринга шрифтов (и векторной графики) на GPU напрямую из кривых Безье, вообще без использования предзапечённых текстур или атласов. Это позволяет отрисовывать идеально чёткий, сглаженный текст любого размера и под любым углом. Алгоритм уже 10 лет является индустриальным стандартом: лицензию на него покупали Blizzard, id Software, Adobe, Ubisoft и другие гиганты.
Главная математическая фишка последних версий Slug — это «динамическое расширение» (dynamic dilation). Вершинный шейдер на лету высчитывает матрицу трансформации и автоматически расширяет полигон каждого глифа ровно на полпикселя в экранном пространстве. Это гарантирует, что растеризатор не потеряет ни одного сглаженного пикселя на границах букв, и при этом не тратит ресурсы GPU на отрисовку лишнего пустого пространства (как это бывает при фиксированном отступе).
Теперь использовать эту технологию можно абсолютно бесплатно в любых проектах. Автор уже выложил эталонные шейдеры (вершинный и пиксельный) на GitHub под лицензией MIT: https://github.com/EricLengyel/Slug
@prog_stuff
Slug — это метод рендеринга шрифтов (и векторной графики) на GPU напрямую из кривых Безье, вообще без использования предзапечённых текстур или атласов. Это позволяет отрисовывать идеально чёткий, сглаженный текст любого размера и под любым углом. Алгоритм уже 10 лет является индустриальным стандартом: лицензию на него покупали Blizzard, id Software, Adobe, Ubisoft и другие гиганты.
Главная математическая фишка последних версий Slug — это «динамическое расширение» (dynamic dilation). Вершинный шейдер на лету высчитывает матрицу трансформации и автоматически расширяет полигон каждого глифа ровно на полпикселя в экранном пространстве. Это гарантирует, что растеризатор не потеряет ни одного сглаженного пикселя на границах букв, и при этом не тратит ресурсы GPU на отрисовку лишнего пустого пространства (как это бывает при фиксированном отступе).
Теперь использовать эту технологию можно абсолютно бесплатно в любых проектах. Автор уже выложил эталонные шейдеры (вершинный и пиксельный) на GitHub под лицензией MIT: https://github.com/EricLengyel/Slug
@prog_stuff
❤🔥2❤2👍1
В блоге Dochia вышла интересная статья о том, как нейросети незаметно возвращают нас к методологии Waterfall.
В эпоху классического Agile мы привыкли работать короткими итерациями с минимальными требованиями. Идея состояла в том, чтобы не тратить месяцы на детальные спецификации. Бизнес все равно изменит планы, а писать код долго и дорого. Дешевле было быстро сделать базовую фичу, получить обратную связь и переделать.
С приходом продвинутых ИИ агентов математика процесса сильно изменилась:
— агенты пишут код невероятно быстро и дёшево;
— они совершенно не умеют додумывать контекст и работать с абстрактными задачами, как это делают живые разработчики;
— любая недосказанность в промте превращается в ошибочную архитектуру, которую вы обнаружите только через несколько спринтов.
Чтобы ИИ выдавал рабочий результат, ему нужна максимально подробная и жёсткая спецификация с описанием всех контрактов и граничных случаев. То есть именно то, за что разработчики так не любили Waterfall.
Формируется новая парадигма. Написание ТЗ снова становится самым дорогим этапом, в котором незаменим человек. Код при этом превращается в дешёвый одноразовый расходник. Вы пишете подробные требования, отдаёте их нейросети, показываете результат пользователям, и если что-то не так, просто меняете ТЗ и генерируете проект заново.
Автор замечает, что это может стать большой проблемой для индустрии. Большинство из нас пришли в профессию, чтобы писать код, а не составлять многостраничные спецификации для нейросетей.
Ссылка на полную статью: https://blog.dochia.dev/blog/waterfall-returning/
@prog_stuff
В эпоху классического Agile мы привыкли работать короткими итерациями с минимальными требованиями. Идея состояла в том, чтобы не тратить месяцы на детальные спецификации. Бизнес все равно изменит планы, а писать код долго и дорого. Дешевле было быстро сделать базовую фичу, получить обратную связь и переделать.
С приходом продвинутых ИИ агентов математика процесса сильно изменилась:
— агенты пишут код невероятно быстро и дёшево;
— они совершенно не умеют додумывать контекст и работать с абстрактными задачами, как это делают живые разработчики;
— любая недосказанность в промте превращается в ошибочную архитектуру, которую вы обнаружите только через несколько спринтов.
Чтобы ИИ выдавал рабочий результат, ему нужна максимально подробная и жёсткая спецификация с описанием всех контрактов и граничных случаев. То есть именно то, за что разработчики так не любили Waterfall.
Формируется новая парадигма. Написание ТЗ снова становится самым дорогим этапом, в котором незаменим человек. Код при этом превращается в дешёвый одноразовый расходник. Вы пишете подробные требования, отдаёте их нейросети, показываете результат пользователям, и если что-то не так, просто меняете ТЗ и генерируете проект заново.
Автор замечает, что это может стать большой проблемой для индустрии. Большинство из нас пришли в профессию, чтобы писать код, а не составлять многостраничные спецификации для нейросетей.
Ссылка на полную статью: https://blog.dochia.dev/blog/waterfall-returning/
@prog_stuff
🙈5🔥2
Если вы помните эссе Пола Грэма про Founder Mode, то сооснователь GitLab Сид Сийбрандий нашёл этой концепции самое нетривиальное применение. В 2022 году у него обнаружили редкий рак костей, а после первого этапа лечения случился рецидив. Врачи сообщили, что стандартные протоколы исчерпаны.
Вместо того чтобы смириться, Сид перестал делегировать медицинские решения больницам. Он взял управление ситуацией в свои руки, нанял бывшего руководителя из компании 10x Genomics на роль проектного менеджера своего здоровья и собрал личную команду учёных.
Его инженерный подход к онкологии выглядел так:
— команда сделала полное секвенирование клеток опухоли и использовала ИИ для поиска скрытых закономерностей в анализах;
— Сид выложил 25 терабайт своих медицинских данных в открытый доступ, чтобы любой исследователь в мире мог изучить их и предложить решение;
— глубокий анализ данных помог найти в Германии экспериментальную терапию, которая точечно била по уязвимости именно его формы опухоли;
— параллельно с собственным лечением он запустил семь стартапов в сфере биотеха для развития персонализированной медицины.
На данный момент рак у Сида не обнаруживается. Конечно, такой индивидуальный подход доступен только людям с огромными ресурсами. Но, блин, семь новых компаний, ребят. Это как минимум круто.
Полная статья: https://tprg.ru/a19w
@prog_stuff
Вместо того чтобы смириться, Сид перестал делегировать медицинские решения больницам. Он взял управление ситуацией в свои руки, нанял бывшего руководителя из компании 10x Genomics на роль проектного менеджера своего здоровья и собрал личную команду учёных.
Его инженерный подход к онкологии выглядел так:
— команда сделала полное секвенирование клеток опухоли и использовала ИИ для поиска скрытых закономерностей в анализах;
— Сид выложил 25 терабайт своих медицинских данных в открытый доступ, чтобы любой исследователь в мире мог изучить их и предложить решение;
— глубокий анализ данных помог найти в Германии экспериментальную терапию, которая точечно била по уязвимости именно его формы опухоли;
— параллельно с собственным лечением он запустил семь стартапов в сфере биотеха для развития персонализированной медицины.
На данный момент рак у Сида не обнаруживается. Конечно, такой индивидуальный подход доступен только людям с огромными ресурсами. Но, блин, семь новых компаний, ребят. Это как минимум круто.
Полная статья: https://tprg.ru/a19w
@prog_stuff
❤6
Хочу стать техлидом — большая подборка материалов
Развиваться в техническом лидерстве — это не просто полезно, но и стратегически важно. Хороший техлид должен разбираться не только в коде, но и в архитектуре, управлении командами и даже бизнесе.
В этой подборке собрано 100+ крутых ресурсов: книги, блоги, рассылки и эксперты, которых стоит читать. Тут есть всё — от глубокой системной архитектуры до навыков эффективного менеджмента. Не стоит гнаться за всем сразу, лучше выбрать несколько направлений и прокачиваться в них.
Сохраняем мастхев для карьеры в этом репозитории
#подборка #en
Развиваться в техническом лидерстве — это не просто полезно, но и стратегически важно. Хороший техлид должен разбираться не только в коде, но и в архитектуре, управлении командами и даже бизнесе.
В этой подборке собрано 100+ крутых ресурсов: книги, блоги, рассылки и эксперты, которых стоит читать. Тут есть всё — от глубокой системной архитектуры до навыков эффективного менеджмента. Не стоит гнаться за всем сразу, лучше выбрать несколько направлений и прокачиваться в них.
Сохраняем мастхев для карьеры в этом репозитории
#подборка #en
GitHub
GitHub - gregorojstersek/resources-to-become-a-great-engineering-leader: List of books, blogs, newsletters and people!
List of books, blogs, newsletters and people! Contribute to gregorojstersek/resources-to-become-a-great-engineering-leader development by creating an account on GitHub.
✍1
Отправить email из скрипта — вызов одной функции. Сделать так, чтобы он дошёл до инбокса и не улетел в спам — инженерия.
На Tproger вышел перевод с пошаговым разбором того, как почта работает под капотом на уровне инфраструктуры:
— Цепочка доставки: MUA (клиент), MTA (сервер пересылки), MDA (агент доставки).
— Как SMTP ищет маршрут до целевого домена через DNS и MX-записи.
— Подробный разбор SPF, DKIM и DMARC, это база, которую нужно понимать, чтобы ваши транзакционные письма не отбивались серверами получателей.
— Разница между протоколами извлечения IMAP и POP3.
Годный технический фундамент, чтобы понимать, на каком именно узле отваливаются письма сброса пароля с вашего продакшена: https://tprg.ru/XOao
@prog_stuff
На Tproger вышел перевод с пошаговым разбором того, как почта работает под капотом на уровне инфраструктуры:
— Цепочка доставки: MUA (клиент), MTA (сервер пересылки), MDA (агент доставки).
— Как SMTP ищет маршрут до целевого домена через DNS и MX-записи.
— Подробный разбор SPF, DKIM и DMARC, это база, которую нужно понимать, чтобы ваши транзакционные письма не отбивались серверами получателей.
— Разница между протоколами извлечения IMAP и POP3.
Годный технический фундамент, чтобы понимать, на каком именно узле отваливаются письма сброса пароля с вашего продакшена: https://tprg.ru/XOao
@prog_stuff
✍1
Какие доки может распознавать ИИ
Субботнее разглядывательное: у нас на сайте вышла статья про задачи, в которых помогает распознавание документов. Так вот, там уйма наглядных примеров с картинками: какие документы под силу нейросетке, и как это распознавание выглядит. Всех приглашаю к залипанию.
А вы любите разглядывать документы?😏
Субботнее разглядывательное: у нас на сайте вышла статья про задачи, в которых помогает распознавание документов. Так вот, там уйма наглядных примеров с картинками: какие документы под силу нейросетке, и как это распознавание выглядит. Всех приглашаю к залипанию.
А вы любите разглядывать документы?😏
Автор этой статьи прогнал JOIN на таблице из миллиарда строк и проверил, насколько оправдан страх перед этой операцией.
Главный вывод: JOIN сам по себе не дорогой. Дорогими его делают конкретные вещи: отсутствие индексов на join-колонках, выбор SELECT * с широкими строками и неправильный порядок фильтрации.
Тезисы из бенчмарка:
— Правильно проиндексированный JOIN на миллиарде строк отрабатывает быстрее, чем денормализованная «One Big Table» при выборке нескольких колонок.
— OBT начинает выигрывать только когда нужно вытащить почти все колонки широкой строки, но это редкий паттерн.
— Главные виновники медленных JOIN-запросов: отсутствие индексов → full scan, CAST() в условии join → план не использует индекс, агрегация после join вместо до него.
Полезно перечитать, если у вас есть коллега, который денормализует всё подряд «ради производительности».
@prog_stuff
Главный вывод: JOIN сам по себе не дорогой. Дорогими его делают конкретные вещи: отсутствие индексов на join-колонках, выбор SELECT * с широкими строками и неправильный порядок фильтрации.
Тезисы из бенчмарка:
— Правильно проиндексированный JOIN на миллиарде строк отрабатывает быстрее, чем денормализованная «One Big Table» при выборке нескольких колонок.
— OBT начинает выигрывать только когда нужно вытащить почти все колонки широкой строки, но это редкий паттерн.
— Главные виновники медленных JOIN-запросов: отсутствие индексов → full scan, CAST() в условии join → план не использует индекс, агрегация после join вместо до него.
Полезно перечитать, если у вас есть коллега, который денормализует всё подряд «ради производительности».
@prog_stuff
👍2🤝2👎1
USB устроен как сетевое программирование — только это мало кто объясняет именно так
Endpoint — это порт. Дескриптор устройства — аналог DNS-записи. Хост всегда инициирует соединение, устройство только отвечает. Если вы работали с сокетами, модель USB окажется неожиданно знакомой.
Перевод на Tproger разбирает USB с разработческой точки зрения: четыре типа передачи данных, как читать дескрипторы, и главное — как написать полноценный драйвер в userspace через
В качестве практического примера — Fastboot-клиент на C++ примерно в 50 строк.
Материал стоит отложить: он даёт концептуальную рамку, после которой USB перестаёт быть чёрным ящиком.
Endpoint — это порт. Дескриптор устройства — аналог DNS-записи. Хост всегда инициирует соединение, устройство только отвечает. Если вы работали с сокетами, модель USB окажется неожиданно знакомой.
Перевод на Tproger разбирает USB с разработческой точки зрения: четыре типа передачи данных, как читать дескрипторы, и главное — как написать полноценный драйвер в userspace через
libusb, без единой строки кода ядра.В качестве практического примера — Fastboot-клиент на C++ примерно в 50 строк.
Материал стоит отложить: он даёт концептуальную рамку, после которой USB перестаёт быть чёрным ящиком.
9 нативных API браузера, ради которых обычно зря ставят npm-пакет
Справочник-пособие на случай, когда в следующий раз рука потянется к
Дальше интереснее:
Полезно сохранить и перечитать, когда в следующий раз захочется тянуть в проект uuid, focus-trap или очередной модал.
Справочник-пособие на случай, когда в следующий раз рука потянется к
npm install: разбор девяти вещей, которые браузер уже умеет сам. requestIdleCallback для фоновых задач, :focus-within вместо сорока строк JS на focus и blur, navigator.onLine и события offline/online для PWA, requestAnimationFrame вместо setInterval на 16 мс, container queries для самодостаточных компонентов.Дальше интереснее:
crypto.randomUUID() вместо самописных «достаточно случайных» ID, нативный <dialog> с фокус-трапом и доступностью из коробки, Web Speech API для распознавания речи и @supports для CSS feature detection.Полезно сохранить и перечитать, когда в следующий раз захочется тянуть в проект uuid, focus-trap или очередной модал.
Устали от уймы API-ключей и танцев с бубном вокруг OpenAI, Claude и Gemini?
Снять эту головную боль может один API-роутер.
Разбираемся на Tproger, почему три разных API могут тормозить ваш проект и как подключить GPT-5.4, Claude Sonnet 4.6 и Gemini 3.1 Pro через единую точку входа без переписывания кода.
Кратко о содержании:
— Что умеет хороший роутер: fallback, балансировка, кеш, единый биллинг.
— Пошаговый гайд подключения через одни API на Python и Node.js.
— Реальный кейс: мультимодельный бот с авто-переключением за 30 минут.
— Подводные камни: контекстные окна, latency, rate limits (и как их обойти).
Читать материал: https://tprg.ru/YWhU
Снять эту головную боль может один API-роутер.
Разбираемся на Tproger, почему три разных API могут тормозить ваш проект и как подключить GPT-5.4, Claude Sonnet 4.6 и Gemini 3.1 Pro через единую точку входа без переписывания кода.
Кратко о содержании:
— Что умеет хороший роутер: fallback, балансировка, кеш, единый биллинг.
— Пошаговый гайд подключения через одни API на Python и Node.js.
— Реальный кейс: мультимодельный бот с авто-переключением за 30 минут.
— Подводные камни: контекстные окна, latency, rate limits (и как их обойти).
Читать материал: https://tprg.ru/YWhU
TanStack тихо съедает экосистему React — история про то, как реально меняются экосистемы
Два года назад TanStack означал одно — React Query. Сегодня это восемь взаимосвязанных библиотек: Query, Router, Table, Form, Start, Store, DB и AI. Они постепенно вытесняют Next.js, React Router, Redux, React Hook Form и Zustand — не анонсами и не виральными твитами, а по одной зависимости за раз.
Цифры из State of React 2026 показательны: у TanStack Query 68% использования и 1% негатива, у Next.js — тот же охват, но негатива в 17 раз больше. Причина структурная: библиотеки headless, сквозная типизация идёт от URL до server functions, и вы владеете кодом, а не воюете с фреймворком.
Перевод колонки с dev.to стоит сохранить, даже если вы не пишете на React. Редкий случай, когда видно, как технологический сдвиг идёт снизу — через решения отдельных разработчиков, а не через маркетинг. Полезная оптика, если строите долгосрочный фронтенд-проект.
Два года назад TanStack означал одно — React Query. Сегодня это восемь взаимосвязанных библиотек: Query, Router, Table, Form, Start, Store, DB и AI. Они постепенно вытесняют Next.js, React Router, Redux, React Hook Form и Zustand — не анонсами и не виральными твитами, а по одной зависимости за раз.
Цифры из State of React 2026 показательны: у TanStack Query 68% использования и 1% негатива, у Next.js — тот же охват, но негатива в 17 раз больше. Причина структурная: библиотеки headless, сквозная типизация идёт от URL до server functions, и вы владеете кодом, а не воюете с фреймворком.
Перевод колонки с dev.to стоит сохранить, даже если вы не пишете на React. Редкий случай, когда видно, как технологический сдвиг идёт снизу — через решения отдельных разработчиков, а не через маркетинг. Полезная оптика, если строите долгосрочный фронтенд-проект.
Постоянный доступ в Kubernetes: как атакующие закрепляются в кластере и остаются незамеченными
Вы думаете, что если злоумышленник получил доступ к ноутбуку администратора на пять минут — это не страшно? А зря.
Чтобы изменить мнение, советуем почитать перевод статьи Рори Маккьюна «Beyond the Surface» — детальный разбор одного реального вектора атаки на Kubernetes. Автор показывает, как с помощью встроенных механизмов (kubectl debug, containerd, статические манифесты, CSR API, Token Request API) можно:
— получить root-доступ к узлу;
— запустить скрытый контейнер в обход API;
— организовать удалённое управление через Tailscale;
— создать вечные учётные данные, которые невозможно отозвать без ротации корневого сертификата.
В статье — не только техники атак, но и чёткие признаки обнаружения, а главное — меры защиты: изоляция API-сервера от интернета, минимальные привилегии RBAC, централизованные логи узлов.
Полный текст: https://tprg.ru/gfJ6
Вы думаете, что если злоумышленник получил доступ к ноутбуку администратора на пять минут — это не страшно? А зря.
Чтобы изменить мнение, советуем почитать перевод статьи Рори Маккьюна «Beyond the Surface» — детальный разбор одного реального вектора атаки на Kubernetes. Автор показывает, как с помощью встроенных механизмов (kubectl debug, containerd, статические манифесты, CSR API, Token Request API) можно:
— получить root-доступ к узлу;
— запустить скрытый контейнер в обход API;
— организовать удалённое управление через Tailscale;
— создать вечные учётные данные, которые невозможно отозвать без ротации корневого сертификата.
В статье — не только техники атак, но и чёткие признаки обнаружения, а главное — меры защиты: изоляция API-сервера от интернета, минимальные привилегии RBAC, централизованные логи узлов.
Полный текст: https://tprg.ru/gfJ6
Три ИТ-события, которые вы могли пропустить (а зря)
Пока все гонятся за хайповыми новостями, мы вместе с коллегой Андреем Дмитриевым из JUG.ru собрали события, которые уже повлияли на мир разработки.
В пилотном выпуске нового подкаста:
— Хакеры стерли десятки тысяч ПК через Microsoft Intune
— Дефицит оперативной памяти до 2030 года
— Оптимизация glibc под x86_64
О других событиях вы можете узнать, послушав подкаст.
Особое внимание предлагаем уделить рефлексии. В выпуске мы подсветили, почему те или иные истории важны для ИТ-сообщества. А теперь призываем вас в комменты под видео: что уже вошло в вашу жизнь из этих кейсов? И как думаете, что из этого не производит резонанса?
Смотрите подкаст и присоединяйтесь к дискуссии: https://tprg.ru/S7jD
Пока все гонятся за хайповыми новостями, мы вместе с коллегой Андреем Дмитриевым из JUG.ru собрали события, которые уже повлияли на мир разработки.
В пилотном выпуске нового подкаста:
— Хакеры стерли десятки тысяч ПК через Microsoft Intune
— Дефицит оперативной памяти до 2030 года
— Оптимизация glibc под x86_64
О других событиях вы можете узнать, послушав подкаст.
Особое внимание предлагаем уделить рефлексии. В выпуске мы подсветили, почему те или иные истории важны для ИТ-сообщества. А теперь призываем вас в комменты под видео: что уже вошло в вашу жизнь из этих кейсов? И как думаете, что из этого не производит резонанса?
Смотрите подкаст и присоединяйтесь к дискуссии: https://tprg.ru/S7jD
А вот и продолжение истории про то, как ИИ-агент Kiro от Amazon снёс всё продакшен-окружение из-за мелкого бага.
Помните, Amazon заявил, что это была «ошибка пользователя», и просто ввёл обязательное код-ревью человеком для любых изменений в проде? Как выяснилось, это была только часть решения.
Внутри компании проблему решили устранить радикально — добавить ещё больше ИИ. Вместо того чтобы забрать у агента расширенные права или ограничить его песочницей, Amazon внедрил систему, где один ИИ следит за другим.
Теперь рядом с Kiro работает агент-надзиратель. Его задача:
— Выступать в роли «архитектурного критика» (circuit breaker), который в реальном времени оценивает план действий первого агента.
— Проверять, не нарушают ли действия базовые правила (anomaly thresholds) вроде «не удалять ресурсы без бэкапа».
— Блокировать выполнение скрипта (kill switch), если первый ИИ внезапно отклонился от изначального плана.
Паттерн, когда модели спорят друг с другом для поиска оптимального решения, сейчас активно применяется в ИИ-разработке. Но на практике это выглядит так, будто компания просто не хочет снижать KPI по использованию нейросетей, поэтому лечит архитектурные проблемы новыми костылями.
Интересно, когда агент-надзиратель решит, что для максимальной безопасности проще всего отключить дата-центр от интернета?
@prog_stuff
Помните, Amazon заявил, что это была «ошибка пользователя», и просто ввёл обязательное код-ревью человеком для любых изменений в проде? Как выяснилось, это была только часть решения.
Внутри компании проблему решили устранить радикально — добавить ещё больше ИИ. Вместо того чтобы забрать у агента расширенные права или ограничить его песочницей, Amazon внедрил систему, где один ИИ следит за другим.
Теперь рядом с Kiro работает агент-надзиратель. Его задача:
— Выступать в роли «архитектурного критика» (circuit breaker), который в реальном времени оценивает план действий первого агента.
— Проверять, не нарушают ли действия базовые правила (anomaly thresholds) вроде «не удалять ресурсы без бэкапа».
— Блокировать выполнение скрипта (kill switch), если первый ИИ внезапно отклонился от изначального плана.
Паттерн, когда модели спорят друг с другом для поиска оптимального решения, сейчас активно применяется в ИИ-разработке. Но на практике это выглядит так, будто компания просто не хочет снижать KPI по использованию нейросетей, поэтому лечит архитектурные проблемы новыми костылями.
Интересно, когда агент-надзиратель решит, что для максимальной безопасности проще всего отключить дата-центр от интернета?
@prog_stuff
👍8
Как Shazam узнаёт песню за секунды — разбор от Perthirtysix
Микрофон ловит звук и превращает его в waveform, по сути последовательность чисел, давление воздуха во времени. Сырые волны бесполезны: та же песня громче даёт другой waveform.
Поэтому телефон прогоняет звук через Fast Fourier Transform. Каждые 23 миллисекунды FFT раскладывает кусок волны на частоты — какие чистые тона нужно сложить, чтобы получить этот фрагмент. Складываем срезы рядом, получаем spectrogram: время по X, частота по Y, яркость = громкость.
Но хранить весь spectrogram невозможно. Алгоритм выкидывает почти всё и оставляет только самые громкие пики — sparse constellation map. Это делает систему устойчивой к шуму: фон добавляет низкий уровень энергии, но редко создаёт самый громкий пик в регионе.
Понятно, что один пик ничего не значит, 1200 Hz встречается в тысячах песен. Но пара пиков: 1200 Hz и 2400 Hz с разницей в 0,3 секунды уже специфична. Алгоритм берёт каждый пик как anchor, определяет target zone справа от него и создаёт hash из двух частот и временного интервала.
Поиск работает через inverted index: вместо «какая песня совпадает?» система спрашивает «для каждого звука из клипа, в каких песнях он есть?». O(1) lookup, независимо от размера базы. Финальная проверка по timing: если хэши в клипе разделены 1,2 секунды, в песне тоже должны быть на том же расстоянии.
В полной статье, конечно, понятнее и с интерактивными демо, рекомендую: https://perthirtysix.com/how-the-heck-does-shazam-work
Интерактивы типа как на видео в этом посте.
@prog_stuff
Микрофон ловит звук и превращает его в waveform, по сути последовательность чисел, давление воздуха во времени. Сырые волны бесполезны: та же песня громче даёт другой waveform.
Поэтому телефон прогоняет звук через Fast Fourier Transform. Каждые 23 миллисекунды FFT раскладывает кусок волны на частоты — какие чистые тона нужно сложить, чтобы получить этот фрагмент. Складываем срезы рядом, получаем spectrogram: время по X, частота по Y, яркость = громкость.
Но хранить весь spectrogram невозможно. Алгоритм выкидывает почти всё и оставляет только самые громкие пики — sparse constellation map. Это делает систему устойчивой к шуму: фон добавляет низкий уровень энергии, но редко создаёт самый громкий пик в регионе.
Понятно, что один пик ничего не значит, 1200 Hz встречается в тысячах песен. Но пара пиков: 1200 Hz и 2400 Hz с разницей в 0,3 секунды уже специфична. Алгоритм берёт каждый пик как anchor, определяет target zone справа от него и создаёт hash из двух частот и временного интервала.
Поиск работает через inverted index: вместо «какая песня совпадает?» система спрашивает «для каждого звука из клипа, в каких песнях он есть?». O(1) lookup, независимо от размера базы. Финальная проверка по timing: если хэши в клипе разделены 1,2 секунды, в песне тоже должны быть на том же расстоянии.
В полной статье, конечно, понятнее и с интерактивными демо, рекомендую: https://perthirtysix.com/how-the-heck-does-shazam-work
Интерактивы типа как на видео в этом посте.
@prog_stuff
This media is not supported in your browser
VIEW IN TELEGRAM
❤5👍1
Forwarded from Типичный программист
Откуда в России взялись программисты — история, которую вам не рассказывали
Если вы думаете, что российский IT начался с нулевых — нет. Всё началось на несколько десятилетий раньше, в закрытых НИИ и институтских подвалах.
В конце 1940-х Советскому Союзу понадобились вычислительные машины — моделировать ядерные реакции и считать ракетные траектории вручную было нереально. Учёный Сергей Лебедев построил первую советскую ЭВМ, а потом серию БЭСМ. Пиковая модель, БЭСМ-6, выпускалась почти 20 лет — именно на ней учили программированию в лучших технических вузах.
Культура, сложившаяся в условиях жёстких ограничений, никуда не исчезла. Она и стала фундаментом для Яндекса, Контура и всего остального российского бигтеха.
Читайте все 7 фактов на Tproger
@tproger
Читайте также в VK, Max и Дзен
Если вы думаете, что российский IT начался с нулевых — нет. Всё началось на несколько десятилетий раньше, в закрытых НИИ и институтских подвалах.
В конце 1940-х Советскому Союзу понадобились вычислительные машины — моделировать ядерные реакции и считать ракетные траектории вручную было нереально. Учёный Сергей Лебедев построил первую советскую ЭВМ, а потом серию БЭСМ. Пиковая модель, БЭСМ-6, выпускалась почти 20 лет — именно на ней учили программированию в лучших технических вузах.
Культура, сложившаяся в условиях жёстких ограничений, никуда не исчезла. Она и стала фундаментом для Яндекса, Контура и всего остального российского бигтеха.
Читайте все 7 фактов на Tproger
@tproger
Читайте также в VK, Max и Дзен
👍2
Современные CPU ненавидят непредсказуемые условные переходы. Если данные случайные, branch predictor постоянно ошибается, и процессор сбрасывает pipeline снова и снова.
Пример из статьи: фильтруем массив, оставляя элементы меньше 500.
Классический подход с
Результат на Apple M1: 0,329 сек за 1000 итераций.
Branchless версия — без ветвления, unconditional store + conditional increment:
Результат: 0.036 сек. Разница в 9 раз.
На ассемблере вместо условного
Почему компилятор не делает это сам? Он не знает природу данных. Если почти все элементы проходят фильтр, branch predictor почти всегда прав, и
Интересный нюанс: branch predictor имеет ограниченную «память». На массиве из 10K элементов gap исчезает, потому что CPU запоминает паттерн. На 100K — predictior переполняется, и branchless выигрывает снова.
Quicksort, кстати, идеально ложится на branchless: партиционирование вокруг pivot — это ровно та задача, где ветвление убивает производительность.
Полная статья: https://easylang.online/blog/branchless
@prog_stuff
Пример из статьи: фильтруем массив, оставляя элементы меньше 500.
Классический подход с
if:if (numbers[i] < 500) {
small_numbers[j] = numbers[i];
j += 1;
}Результат на Apple M1: 0,329 сек за 1000 итераций.
Branchless версия — без ветвления, unconditional store + conditional increment:
small_numbers[j] = numbers[i];
j += (numbers[i] < 500);
Результат: 0.036 сек. Разница в 9 раз.
На ассемблере вместо условного
b.gt (branch if greater) используется cinc на ARM или setle на x86 — инкрементируем индекс, только если условие выполнено. Никаких прыжков, pipeline работает на полную.Почему компилятор не делает это сам? Он не знает природу данных. Если почти все элементы проходят фильтр, branch predictor почти всегда прав, и
if версия быстрее. А unconditional write может быть небезопасен — например, если за границей буфера лежит чужая память.Интересный нюанс: branch predictor имеет ограниченную «память». На массиве из 10K элементов gap исчезает, потому что CPU запоминает паттерн. На 100K — predictior переполняется, и branchless выигрывает снова.
Quicksort, кстати, идеально ложится на branchless: партиционирование вокруг pivot — это ровно та задача, где ветвление убивает производительность.
Полная статья: https://easylang.online/blog/branchless
@prog_stuff
❤2👍1
Microsoft выложила в open source самый ранний известный исходный код DOS — ядро 86-DOS 1.00, несколько development-снапшотов PC-DOS 1.00 и классические утилиты вроде
Исторический контекст: Tim Paterson написал 86-DOS (тогда ещё QDOS — «quick and dirty operating system») для Intel 8086-компьютера от Seattle Computer Products. Microsoft лицензировала его для IBM PC 5150, выкупила права, переименовала в MS-DOS — и запустила эпоху PC.
Релиз позволяет посмотреть, как выглядела самая ранняя версия системы, которая стала фундаментом для десятилетий доминирования Microsoft на рынке персональных компьютеров.
Полная статья: https://arstechnica.com/gadgets/2026/04/microsoft-open-sources-the-earliest-dos-source-code-discovered-to-date
@prog_stuff
CHKDSK.Исторический контекст: Tim Paterson написал 86-DOS (тогда ещё QDOS — «quick and dirty operating system») для Intel 8086-компьютера от Seattle Computer Products. Microsoft лицензировала его для IBM PC 5150, выкупила права, переименовала в MS-DOS — и запустила эпоху PC.
Релиз позволяет посмотреть, как выглядела самая ранняя версия системы, которая стала фундаментом для десятилетий доминирования Microsoft на рынке персональных компьютеров.
Полная статья: https://arstechnica.com/gadgets/2026/04/microsoft-open-sources-the-earliest-dos-source-code-discovered-to-date
@prog_stuff
❤🔥2👍1
Как именно контейнеры создают иллюзию полноценной Linux-системы внутри, используя только базовые инструменты Linux:
Что разбирается в статье:
— Mount namespace — почему это фундамент изоляции, а PID, cgroup, UTS и network играют второстепенные роли.
—Mount propagation — как mount-события распространяются между namespaces и почему просто
— pivot_root — как меняем корневую файловую систему процесса, чтобы он видел только то, что ему положено.
— Собираем вручную Docker-подобный контейнер, который запускается стандартными командами Linux.
Полная статья:
https://labs.iximiuz.com/tutorials/container-filesystem-from-scratch
@prog_stuff
unshare, mount и pivot_root.Что разбирается в статье:
— Mount namespace — почему это фундамент изоляции, а PID, cgroup, UTS и network играют второстепенные роли.
—Mount propagation — как mount-события распространяются между namespaces и почему просто
unshare недостаточно.— pivot_root — как меняем корневую файловую систему процесса, чтобы он видел только то, что ему положено.
— Собираем вручную Docker-подобный контейнер, который запускается стандартными командами Linux.
Полная статья:
https://labs.iximiuz.com/tutorials/container-filesystem-from-scratch
@prog_stuff
❤3👍1