Как эмулировать inline-ассемблер в Haskell, которого там нет
Задача простая на словах: перемножить два Word64 и получить обе половины 128-битного результата через одну машинную инструкцию mulq. В GHC нет inline assembly, и разработчик под ником minoki перебрал все возможные обходные пути, от честного FFI до чёрной магии на уровне calling convention.
🔘 unsafe FFI с указателем через alloca работает, но тянет за собой IO и лишнюю память;
🔘 unsafe FFI в два вызова, отдельно для старшей и младшей половины, укладывает всё в регистры без указателей;
🔘 unsafe FFI через XMM-регистры возвращает обе половины сразу, но требует
🔘 foreign import prim позволяет написать собственный PrimOp прямо на ассемблере, с ручным учётом регистров STG (%rbx, %r14, jmp *(%rbp)) и макросов LEADING_UNDERSCORE и TABLES_NEXT_TO_CODE;
🔘 отдельная ассемблерная обёртка переводит между C calling convention и GHC calling convention, чтобы дёргать C-функцию, которая возвращает
На Zen4 в WSL2 встроенный timesWord2# отработал за 4 нс, foreign import prim на чистом ассемблере уложился в 4,5 нс, а unsafe FFI с указателем скатился до 19 нс. Safe FFI для такого короткого вызова вышел медленнее 60 нс, то есть медленнее чистого Haskell на Integer.
Сохранять тем, кто когда-нибудь спорил, действительно ли safe FFI в GHC настолько накладен, как все говорят.
@prog_stuff
Задача простая на словах: перемножить два Word64 и получить обе половины 128-битного результата через одну машинную инструкцию mulq. В GHC нет inline assembly, и разработчик под ником minoki перебрал все возможные обходные пути, от честного FFI до чёрной магии на уровне calling convention.
__m128i на стороне C;unsigned __int128 структурой по значению.На Zen4 в WSL2 встроенный timesWord2# отработал за 4 нс, foreign import prim на чистом ассемблере уложился в 4,5 нс, а unsafe FFI с указателем скатился до 19 нс. Safe FFI для такого короткого вызова вышел медленнее 60 нс, то есть медленнее чистого Haskell на Integer.
Сохранять тем, кто когда-нибудь спорил, действительно ли safe FFI в GHC настолько накладен, как все говорят.
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1
Rust-компилятор, переписанный в 46 миллионов строк C
Rustc — самокомпилирующийся компилятор Rust — переведён в 46 миллионов строк C и собирается обычным GCC и make, без единой строчки cargo или rustc в цепочке сборки. Автор — разработчик бэкенда cilly, который компилирует Rust в C.
🔘 это уже 14-я попытка автора скомпилировать Rust в C — до этого были публичные и приватные проекты вроде rustc_codegen_clr;
🔘 бэкенд генерирует «witness»-программы, которые прощупывают, что поддерживает целевой C-компилятор и платформа, и подстраивает вывод под них;
🔘 получившийся код собирает core, alloc и std и способен пересобрать сам себя;
🔘 практической пользы для повседневной разработки в этом немного — это демонстрация переносимости, а не замена rustc.
Сохранять тем, кто интересуется внутренностями компиляторов и любит истории про перенос целого тулчейна на неожиданный бэкенд.
Полная статья: https://github.com/FractalFir/crustc
@prog_stuff
Rustc — самокомпилирующийся компилятор Rust — переведён в 46 миллионов строк C и собирается обычным GCC и make, без единой строчки cargo или rustc в цепочке сборки. Автор — разработчик бэкенда cilly, который компилирует Rust в C.
Сохранять тем, кто интересуется внутренностями компиляторов и любит истории про перенос целого тулчейна на неожиданный бэкенд.
Полная статья: https://github.com/FractalFir/crustc
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Почему ваш пет-проект ещё не бизнес, а вы — не предприниматель
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
Марцин Вихари, автор большого интерактивного эссе про кнопки, разобрал свежий пример того, как одна и та же кнопка поворота фото ведёт себя по-разному. Тапаешь «повернуть на 90°» восемь раз подряд: iPhone буферизует нажатия и честно доводит все повороты до конца, а Nothing Phone даёт вибрацию-подтверждение и молча съедает тап, если анимация предыдущего поворота ещё не закончилась.
Отсюда правило: никогда не заставлять пользователя ждать конца анимации. Буферизовать нажатия при этом не единственный выход, можно ускорять или обрывать анимацию по следующему тапу.
Вторая мысль, ради которой стоит читать целиком, — «ситуативная продвинутость». Любой казуальный интерфейс при достаточно большой аудитории встретит человека, которому придётся пользоваться им всерьёз: например, поворачивать десятки отсканированных документов подряд. И тогда блокирующая анимация из милой детали превращается в стену.
Полная статья: https://unsung.aresluna.org/if-youre-a-button-you-have-one-job/
Сохранять тем, кто делает интерфейсы.
@prog_stuff
Отсюда правило: никогда не заставлять пользователя ждать конца анимации. Буферизовать нажатия при этом не единственный выход, можно ускорять или обрывать анимацию по следующему тапу.
Вторая мысль, ради которой стоит читать целиком, — «ситуативная продвинутость». Любой казуальный интерфейс при достаточно большой аудитории встретит человека, которому придётся пользоваться им всерьёз: например, поворачивать десятки отсканированных документов подряд. И тогда блокирующая анимация из милой детали превращается в стену.
Полная статья: https://unsung.aresluna.org/if-youre-a-button-you-have-one-job/
Сохранять тем, кто делает интерфейсы.
@prog_stuff
👍2
Майк Боулер, консультант по инженерным командам, измерил уровень CO2 в переговорках портативным датчиком: на улице около 400 ppm, а в закрытой комнате с несколькими людьми показатель за первый час переваливает за 1000. Его личный рекорд на фото в статье — 2143.
Дальше цифры из исследований. В эксперименте Лаборатории Беркли при 1000 ppm результаты испытуемых упали на шести из девяти показателей качества принятия решений, при 2500 ppm — на семи, причём часть до уровня, который исследователи назвали дисфункциональным. Гарвардское исследование показало, что сильнее всего страдают стратегия, планирование и работа с информацией под давлением — ровно то, ради чего людей и собирают в переговорку.
Изнутри это не ощущается: туман в голове списывают на длину встречи или недосып, и воздух остаётся единственной переменной, которую никто не проверяет. То же относится к домашнему кабинету с закрытой дверью: прежде чем объяснять послеобеденный спад мотивацией, автор предлагает исключить комнату, которая не проветривалась с утра. Датчик CO2 стоит дешевле часа рабочего времени, открыть окно — бесплатно.
Полная статья: https://blog.mikebowler.ca/2026/07/03/co2-and-decision-making/
Сохранять тем, кто проводит долгие встречи и планирования в переговорках.
@prog_stuff
Дальше цифры из исследований. В эксперименте Лаборатории Беркли при 1000 ppm результаты испытуемых упали на шести из девяти показателей качества принятия решений, при 2500 ppm — на семи, причём часть до уровня, который исследователи назвали дисфункциональным. Гарвардское исследование показало, что сильнее всего страдают стратегия, планирование и работа с информацией под давлением — ровно то, ради чего людей и собирают в переговорку.
Изнутри это не ощущается: туман в голове списывают на длину встречи или недосып, и воздух остаётся единственной переменной, которую никто не проверяет. То же относится к домашнему кабинету с закрытой дверью: прежде чем объяснять послеобеденный спад мотивацией, автор предлагает исключить комнату, которая не проветривалась с утра. Датчик CO2 стоит дешевле часа рабочего времени, открыть окно — бесплатно.
Полная статья: https://blog.mikebowler.ca/2026/07/03/co2-and-decision-making/
Сохранять тем, кто проводит долгие встречи и планирования в переговорках.
@prog_stuff
❤🔥2
Почему банки теряют клиентов на вводе паспорта
В расчётно-кассовом обслуживании паспорт требуется почти для каждой операции: открытие счёта, обмен валюты, подтверждение личности. Пара минут на ручной перенос данных в масштабе банка превращается в очереди, ошибки операторов к вечеру и рост операционных расходов.
Авторы разбирают, как ИИ убирает это узкое место: документ распознаётся, поля заполняются автоматически, без ручного перепечатывания. Итог: быстрее обслуживание, меньше ошибок и предсказуемая нагрузка на отделение.
Автоматизация РКО влияет не только на внутреннюю эффективность, но и на лояльность клиентов. Если вы работаете с финтехом, интерфейсами крупных систем или высоконагруженными сервисами, где маленькая операция влияет на метрики, стоит сохранить.
В расчётно-кассовом обслуживании паспорт требуется почти для каждой операции: открытие счёта, обмен валюты, подтверждение личности. Пара минут на ручной перенос данных в масштабе банка превращается в очереди, ошибки операторов к вечеру и рост операционных расходов.
Авторы разбирают, как ИИ убирает это узкое место: документ распознаётся, поля заполняются автоматически, без ручного перепечатывания. Итог: быстрее обслуживание, меньше ошибок и предсказуемая нагрузка на отделение.
Автоматизация РКО влияет не только на внутреннюю эффективность, но и на лояльность клиентов. Если вы работаете с финтехом, интерфейсами крупных систем или высоконагруженными сервисами, где маленькая операция влияет на метрики, стоит сохранить.
Каждый, кто работал с легаси, знает это чувство: код вроде бы живой, но каждая фича даётся всё тяжелее, а на вопрос «почему так долго?» хочется ответить «потому что там всё сложно». Вот только бизнесу это ничего не объясняет — «плохой код» звучит как внутренняя боль разработчиков, а не как аргумент.
Аргументировать необходимость рефакторинга на самом деле можно. Оказывается, надо просто перевести техдолг в деньги: сколько теряется каждый месяц из-за замедлившейся разработки и багов и за какой срок рефакторинг окупится. В новом материале разбираемся, как посчитать ROI рефакторинга и с какими аргументами идти к менеджменту.
Аргументировать необходимость рефакторинга на самом деле можно. Оказывается, надо просто перевести техдолг в деньги: сколько теряется каждый месяц из-за замедлившейся разработки и багов и за какой срок рефакторинг окупится. В новом материале разбираемся, как посчитать ROI рефакторинга и с какими аргументами идти к менеджменту.
Tproger
Технический долг в деньгах: как считать ROI рефакторинга легаси-системы
Как перевести техдолг в деньги: отделяем от багов и новых требований, считаем текущие потери и обосновываем рефакторинг бизнесу через скорость, предсказуемость и риски.
Баг, который семь лет видели только левши
Читатель пожаловался Теренсу Идену: скроллишь его блог с телефона, и вдруг посреди прокрутки открывается форма ответа на комментарий. Иден скроллит собственный сайт постоянно и ничего такого не встречал. Разгадка в пальцах: он листает правым большим пальцем, а читатель — левым. Ссылка «ответить» стоит у левого края страницы, ровно там, где ложится левый палец при прокрутке.
Причина оказалась археологической. В 2017 году в WordPress добавили обработчик touchstart на клики по ссылкам — когда-то так обходили задержку в 300 мс, которую мобильные браузеры выдерживали между тапом и кликом, чтобы отличить его от двойного тапа для зума. Браузеры избавились от этой задержки ещё к 2015-му, то есть код был бесполезен уже в момент добавления. А побочный эффект остался: касание ссылки при скролле срабатывало как клик.
Баг зарепортили семь лет назад. В итоге Иден сам закоммитил фикс — удалил пару строк, переживших свою причину на десятилетие. А в WHATWG он в шутку предложил тег meta handed="right", чтобы левши на праведные сайты вообще не заходили.
Полная статья: https://shkspr.mobi/blog/2026/07/a-bug-which-only-affected-left-handed-users/
Сохранять тем, кто подозревает, что в их проекте тоже живут обходные пути, чью причину уже никто не помнит.
@prog_stuff
Читатель пожаловался Теренсу Идену: скроллишь его блог с телефона, и вдруг посреди прокрутки открывается форма ответа на комментарий. Иден скроллит собственный сайт постоянно и ничего такого не встречал. Разгадка в пальцах: он листает правым большим пальцем, а читатель — левым. Ссылка «ответить» стоит у левого края страницы, ровно там, где ложится левый палец при прокрутке.
Причина оказалась археологической. В 2017 году в WordPress добавили обработчик touchstart на клики по ссылкам — когда-то так обходили задержку в 300 мс, которую мобильные браузеры выдерживали между тапом и кликом, чтобы отличить его от двойного тапа для зума. Браузеры избавились от этой задержки ещё к 2015-му, то есть код был бесполезен уже в момент добавления. А побочный эффект остался: касание ссылки при скролле срабатывало как клик.
Баг зарепортили семь лет назад. В итоге Иден сам закоммитил фикс — удалил пару строк, переживших свою причину на десятилетие. А в WHATWG он в шутку предложил тег meta handed="right", чтобы левши на праведные сайты вообще не заходили.
Полная статья: https://shkspr.mobi/blog/2026/07/a-bug-which-only-affected-left-handed-users/
Сохранять тем, кто подозревает, что в их проекте тоже живут обходные пути, чью причину уже никто не помнит.
@prog_stuff
Rust, Go или Zig: как не ошибиться с языком для нагруженного бэкенда
Обстоятельный разбор того, как выбирать язык для высоконагруженного бэкенда в 2026 году. Не сравнение синтаксиса, а реальные сервисы: API, шлюзы, обработка событий, парсинг под нагрузкой.
Автор разбирает три языка: Go (стандарт для микросервисов), Rust (для предельной задержки и контроля памяти, но с borrow checker и долгими сборками), Zig (для узких критичных участков и интеграции с C-кодом). У каждого своя цена, скорость разработки и сценарии, где он выигрывает.
Главный вывод — не искать победителя, а смешивать: Go для скорости разработки, Rust или Zig для горячих путей. Мигрировать стоит только после профилирования, иначе оптимизация обойдётся дороже выгоды.
Сохранить тем, кто выбирает стек для нового сервиса или думает, почему в их системе растёт задержка.
Обстоятельный разбор того, как выбирать язык для высоконагруженного бэкенда в 2026 году. Не сравнение синтаксиса, а реальные сервисы: API, шлюзы, обработка событий, парсинг под нагрузкой.
Автор разбирает три языка: Go (стандарт для микросервисов), Rust (для предельной задержки и контроля памяти, но с borrow checker и долгими сборками), Zig (для узких критичных участков и интеграции с C-кодом). У каждого своя цена, скорость разработки и сценарии, где он выигрывает.
Главный вывод — не искать победителя, а смешивать: Go для скорости разработки, Rust или Zig для горячих путей. Мигрировать стоит только после профилирования, иначе оптимизация обойдётся дороже выгоды.
Сохранить тем, кто выбирает стек для нового сервиса или думает, почему в их системе растёт задержка.
👍2
Почему картинка NES дрожит, хотя кадр статичный
Если подключить NES по композитному видео, изображение заметно «плывёт» даже на неподвижной сцене. Автор блога Nicole Express разобрала по таймингам, откуда берётся эта дрожь и почему она была спроектирована намеренно.
🔘 в стандарте NTSC частота цветовой поднесущей делится на частоту строк с остатком ровно 0,5 — RCA подобрала это полуцелое число специально, чтобы телевизору было проще отделять цвет от яркости;
🔘 кварц NES на 21,47727 МГц — это ровно шесть частот поднесущей, а видеочип PPU использует оба фронта сигнала, отсюда 12 фазовых оттенков в палитре приставки;
🔘 но строка у NES длиннее стандартной: 341 точка. На строку приходится не 227,5, а 227,33 цикла цвета, поэтому фазовый узор повторяется каждые три строки, а не две — картинка и рябит иначе, чем у Apple II или PC Engine;
🔘 инженеры Ricoh намеренно «портят» одну строку кадра: она чередуется между 341 и 340 точками, из-за чего из трёх возможных фазовых выравниваний экран видит только два, сменяющихся через кадр. Автор называет это самой ленивой версией интерлейсинга;
🔘 в PAL-версии приставки этого трюка нет вовсе — там другой кварц и другие делители;
🔘 по шуму на скриншотах Battletoads виден трёхкадровый повторяющийся узор: игра каждый кадр отключает рендеринг на несколько строк ради записи в видеопамять, и «пропавшая точка» проявляется прямо в помехах.
Полная статья: https://nicole.express/2026/phase-altering-by-line.html
Сохранять тем, кто любит, когда странности старого железа объясняются до последнего такта.
@prog_stuff
Если подключить NES по композитному видео, изображение заметно «плывёт» даже на неподвижной сцене. Автор блога Nicole Express разобрала по таймингам, откуда берётся эта дрожь и почему она была спроектирована намеренно.
Полная статья: https://nicole.express/2026/phase-altering-by-line.html
Сохранять тем, кто любит, когда странности старого железа объясняются до последнего такта.
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему DuckDB обгоняет Spark на одной машине
Разбор от endjin объясняет, как встраиваемая база DuckDB превращает ноутбук в инструмент для аналитики на миллиардах строк: скорость здесь — не в масштабе, а в бережном использовании железа. Колоночное хранилище читает только нужные столбцы, векторизованное выполнение обрабатывает данные пачками по 1024–2048 значений, умещаясь в кэш процессора, а min-max-индексы пропускают целые группы строк по фильтрам. Всё параллелится на все ядра.
В тесте TPC-H DuckDB на одной машине справилась за 1 минуту 16 секунд, Spark на 32 узлах — около 8 минут. Распределённые накладные расходы дороже выигрыша от кластера.
Это не замена PostgreSQL или Kafka: один писатель, одна нода, petabyte уйдут в распределённые системы. Статья полезна тем, кто строит ETL и хочет понять, где сидит производительность.
Сохраните, если выбираете инструменты для аналитики.
Разбор от endjin объясняет, как встраиваемая база DuckDB превращает ноутбук в инструмент для аналитики на миллиардах строк: скорость здесь — не в масштабе, а в бережном использовании железа. Колоночное хранилище читает только нужные столбцы, векторизованное выполнение обрабатывает данные пачками по 1024–2048 значений, умещаясь в кэш процессора, а min-max-индексы пропускают целые группы строк по фильтрам. Всё параллелится на все ядра.
В тесте TPC-H DuckDB на одной машине справилась за 1 минуту 16 секунд, Spark на 32 узлах — около 8 минут. Распределённые накладные расходы дороже выигрыша от кластера.
Это не замена PostgreSQL или Kafka: один писатель, одна нода, petabyte уйдут в распределённые системы. Статья полезна тем, кто строит ETL и хочет понять, где сидит производительность.
Сохраните, если выбираете инструменты для аналитики.
👍1
На Tproger вышел разбор о том, чем пет-проект отличается от бизнеса. Разговор с Вячеславом Чикиным — серийным предпринимателем и замзавкафедрой технологического предпринимательства МФТИ.
О чём: почему бизнес начинается с чужой проблемы, а не с технологии; почему ценность решения нельзя придумать из головы (с историей про AR-очки для сборщиков трамваев, которые отвергли сами рабочие); чем предприниматель отличается от менеджера и почему тимлид — не ступенька к фаундеру; почему продукт с первыми пользователями и выручкой — ещё не бизнес, пока всё держится на одном человеке.
https://tproger.ru/articles/pochemu-vaw-pet-proekt-eshhyo-ne-biznes-a-vy-ne-predprinimatel
Реклама. Рекламодатель: МФТИ, Физтех, ИНН 5008006211, erid:2W5zFK4QUUH
@prog_stuff
О чём: почему бизнес начинается с чужой проблемы, а не с технологии; почему ценность решения нельзя придумать из головы (с историей про AR-очки для сборщиков трамваев, которые отвергли сами рабочие); чем предприниматель отличается от менеджера и почему тимлид — не ступенька к фаундеру; почему продукт с первыми пользователями и выручкой — ещё не бизнес, пока всё держится на одном человеке.
https://tproger.ru/articles/pochemu-vaw-pet-proekt-eshhyo-ne-biznes-a-vy-ne-predprinimatel
Реклама. Рекламодатель: МФТИ, Физтех, ИНН 5008006211, erid:2W5zFK4QUUH
@prog_stuff
«Бесполезный» if ускорил цикл в четыре раза
Автор блога purplesyringa разобрала горячий цикл своего компрессора:
Трюк: обернуть присваивание в
Отдельная линия сюжета — война с компилятором: с его точки зрения такой
Полная статья: https://purplesyringa.moe/blog/quadrupling-code-performance-with-a-useless-if/
@prog_stuff
Автор блога purplesyringa разобрала горячий цикл своего компрессора:
j = next_j[i][j], одна инструкция mov. Казалось бы, предел. На деле это pointer chasing — каждая итерация ждёт, пока из памяти придёт результат предыдущей, и весь цикл сидит на латентности, хотя вычислений почти нет.Трюк: обернуть присваивание в
if (j != next_j[i][j]). Предсказатель ветвлений считает тело маловероятным, процессор спекулятивно гонит следующие итерации параллельно, а на редком промахе сам откатывает записи. В бенчмарке 320 мкс превратились в 80.Отдельная линия сюжета — война с компилятором: с его точки зрения такой
if бессмысленен, и оптимизатор его выкидывает. Пришлось имитировать независимость условия через volatile; читатели позже нашли, что LLVM достаточно [[unlikely]]. А «правильный» рефакторинг с битовой маской вышел бы медленнее: тест бита на x86 дороже сравнения.Полная статья: https://purplesyringa.moe/blog/quadrupling-code-performance-with-a-useless-if/
@prog_stuff
👍2
Forwarded from Веб-страница
UI-паттерны, которые скоро можно делать без JS
Если верстаете интерфейсы каждый день, я бы сохранил этот доклад Уны Кравец с CSS Day 2026 в закладки. Она разобрала, как новые CSS-возможности убирают типичный скриптовый код: sticky-заголовок прячется через
Ещё два момента:
Видео доклада на YouTube.
Если верстаете интерфейсы каждый день, я бы сохранил этот доклад Уны Кравец с CSS Day 2026 в закладки. Она разобрала, как новые CSS-возможности убирают типичный скриптовый код: sticky-заголовок прячется через
scroll-state(stuck: top), а hover-тултипы собираются на атрибутах interesttarget и popover=hint — почти без JavaScript.Ещё два момента:
sibling-index() задаёт staggered-задержки прямо в CSS, а border-shape позволяет рисовать необычные формы границ вместо border-radius. Пока часть фич работает не везде — polyfill для invokers не тянет на мобильные, так что в прод пока не нёс бы. Но следить стоит: платформа берёт на себя то, за что мы раньше тащили библиотеки.Видео доклада на YouTube.
Баг, который 15 лет жил во всех дистрибутивах Linux
Команда VEGA разобрала use-after-free на стеке ядра (CVE-2026-43499): дефект пролежал в коде с 2011 года и присутствовал в каждом крупном дистрибутиве. Для срабатывания не нужны ни привилегии, ни специальная конфигурация ядра.
Корень — в механике futex с наследованием приоритета. Функция, снимающая поток с ожидания, чистит поле
Дальше — образцовая цепочка эксплуатации: контролируемые байты распыляются на освобождённый стек, подделывается структура ожидателя, обходится KASLR. В итоге — эскалация до root и выход из контейнера со стабильностью 97%. За это Google выплатил команде 92 337 долларов по программе kernelCTF.
Полная статья: https://nebusec.ai/research/ionstack-part-2/
Сохранять тем, кто хочет увидеть, как одно неверное допущение про «кто сейчас current» превращается в root на пятнадцать лет вперёд.
@prog_stuff
Команда VEGA разобрала use-after-free на стеке ядра (CVE-2026-43499): дефект пролежал в коде с 2011 года и присутствовал в каждом крупном дистрибутиве. Для срабатывания не нужны ни привилегии, ни специальная конфигурация ядра.
Корень — в механике futex с наследованием приоритета. Функция, снимающая поток с ожидания, чистит поле
pi_blocked_on у current. На обычном пути это корректно, но на «proxy»-ветке current — уже не тот поток, что спит в ожидании, и у спящего остаётся висячий указатель на фрейм собственного, уже свёрнутого стека.Дальше — образцовая цепочка эксплуатации: контролируемые байты распыляются на освобождённый стек, подделывается структура ожидателя, обходится KASLR. В итоге — эскалация до root и выход из контейнера со стабильностью 97%. За это Google выплатил команде 92 337 долларов по программе kernelCTF.
Полная статья: https://nebusec.ai/research/ionstack-part-2/
Сохранять тем, кто хочет увидеть, как одно неверное допущение про «кто сейчас current» превращается в root на пятнадцать лет вперёд.
@prog_stuff
❤1👍1
На Tproger вышел обзор онлайн-магистратуры МФТИ «Технологическое предпринимательство» — глазами разработчика, который пошёл туда после 10 лет в коммерческой разработке.
О чём: почему он не стал запускать стартап без подготовки и бросал онлайн-курсы на середине; как выглядит учёба изнутри: вебинары по выходным, персональный ментор и 1000 часов работы над собственным проектом; где программа слабая (разные стадии проектов в одной группе, неровный фидбек); во сколько магистратура обойдётся в 2026 году и как проверить формат до оплаты.
Полная статья: https://tproger.ru/articles/skolko-stoit-stat-predprinimatelem-obzor-onlajn-magistratury
Реклама. Рекламодатель: МФТИ, Физтех, ИНН 5008006211, erid: 2W5zFHGdLk9
@prog_stuff
О чём: почему он не стал запускать стартап без подготовки и бросал онлайн-курсы на середине; как выглядит учёба изнутри: вебинары по выходным, персональный ментор и 1000 часов работы над собственным проектом; где программа слабая (разные стадии проектов в одной группе, неровный фидбек); во сколько магистратура обойдётся в 2026 году и как проверить формат до оплаты.
Полная статья: https://tproger.ru/articles/skolko-stoit-stat-predprinimatelem-obzor-onlajn-magistratury
Реклама. Рекламодатель: МФТИ, Физтех, ИНН 5008006211, erid: 2W5zFHGdLk9
@prog_stuff
❤2👍1
Как переписывать историю Git без цепочки интерактивных rebase
Автор разобрал экспериментальную команду
🔘
🔘
🔘
Операции атомарны. При конфликте Git оставляет историю в исходном состоянии. Merge-коммиты пока не поддерживаются, сохранить конфликт для ручного продолжения тоже нельзя. Поэтому область применения уже, чем у интерактивного rebase.
Полная статья: https://lalitm.com/post/git-history/
@prog_stuff
Автор разобрал экспериментальную команду
git history из Git 2.54–2.55. Она меняет старый коммит и сама перестраивает всех его потомков.fixup встраивает staged-правку в выбранный коммит;reword меняет сообщение, не затрагивая рабочее дерево;split делит коммит на части по выбранным hunks.Операции атомарны. При конфликте Git оставляет историю в исходном состоянии. Merge-коммиты пока не поддерживаются, сохранить конфликт для ручного продолжения тоже нельзя. Поэтому область применения уже, чем у интерактивного rebase.
Полная статья: https://lalitm.com/post/git-history/
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Конкурентность в стиле Go, собранная поверх pthreads
Автор собрал на C знакомые по Go примитивы: мьютексы, condition variables, атомики, ограниченный пул воркеров и buffered/unbuffered channels. Затем сравнил их стоимость с реализацией Go.
🔘 атомики и свободные мьютексы работают на уровне Go или быстрее благодаря тонкой обёртке;
🔘 парковка потока и системные пробуждения замедляют condition variables в 7–10 раз;
🔘 на крупных задачах worker pool укладывается примерно в 10% от результата Go;
🔘 мелкая передача работы лучше даётся дешёвым goroutines.
Преимущество pthreads сохраняется на крупных задачах с редкой синхронизацией. Частые переключения быстро съедают выигрыш и оставляют системные потоки далеко позади runtime scheduler.
Полная статья: https://antonz.org/concurrency-in-c/
@prog_stuff
Автор собрал на C знакомые по Go примитивы: мьютексы, condition variables, атомики, ограниченный пул воркеров и buffered/unbuffered channels. Затем сравнил их стоимость с реализацией Go.
Преимущество pthreads сохраняется на крупных задачах с редкой синхронизацией. Частые переключения быстро съедают выигрыш и оставляют системные потоки далеко позади runtime scheduler.
Полная статья: https://antonz.org/concurrency-in-c/
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Нормальные TLS-сертификаты для внутренних сервисов
Автор настроил внутренние сервисы с сертификатами публичного ACME CA. Схема использует собственный домен, split-horizon DNS, VPN и nginx.
🔘 внешний и внутренний DNS возвращают разные адреса одного имени;
🔘
🔘 nginx слушает VPN-интерфейс и закрывает сервис от внешней сети;
🔘 SAN, CNAME и wildcard-сертификаты дают разные варианты организации имён.
Критичное место схемы — bind nginx: ошибка в адресе откроет сервис наружу. При наличии API у DNS-провайдера выпуск сертификата через DNS-01 часто требует меньше настроек, чем описанный HTTP-01.
Полная статья: https://tuxnet.dev/posts/tls-for-internal-services/
@prog_stuff
Автор настроил внутренние сервисы с сертификатами публичного ACME CA. Схема использует собственный домен, split-horizon DNS, VPN и nginx.
acme.sh получает сертификат и обновляет его по расписанию;Критичное место схемы — bind nginx: ошибка в адресе откроет сервис наружу. При наличии API у DNS-провайдера выпуск сертификата через DNS-01 часто требует меньше настроек, чем описанный HTTP-01.
Полная статья: https://tuxnet.dev/posts/tls-for-internal-services/
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Задержка в Linux: X11, Wayland, VRR и DXVK в миллисекундах
Марко Нетт собрал прибор для измерения задержки от клика до появления кадра. RP2040 эмулирует мышь с частотой опроса 1000 Гц, а фотодиод считывает яркость экрана примерно каждые 24 микросекунды. Для каждой конфигурации автор провёл три серии по сто кликов.
🔘 медианы восьми основных конфигураций уложились в 4,21–4,93 мс;
🔘 нативный X11 опередил нативный Wayland на 0,14–0,22 мс;
🔘 VRR снял 0,26–0,45 мс и уменьшил разброс результатов;
🔘 самый заметный штраф принёс XWayland: до 3,13 мс;
🔘
Измерения сделаны на одном компьютере с RTX 4070 Super, монитором 500 Гц и KDE Plasma. На другом железе соотношение может измениться. Схемы прибора, прошивка, анализатор и сырые CSV опубликованы вместе со статьёй.
Полная статья: https://marco-nett.de/blog/measuring-input-latency-on-linux-x11-vs-wayland-vrr-dxvk/
@prog_stuff
Марко Нетт собрал прибор для измерения задержки от клика до появления кадра. RP2040 эмулирует мышь с частотой опроса 1000 Гц, а фотодиод считывает яркость экрана примерно каждые 24 микросекунды. Для каждой конфигурации автор провёл три серии по сто кликов.
dxvk-low-latency дал до 0,84 мс в тесте без ограничения FPS.Измерения сделаны на одном компьютере с RTX 4070 Super, монитором 500 Гц и KDE Plasma. На другом железе соотношение может измениться. Схемы прибора, прошивка, анализатор и сырые CSV опубликованы вместе со статьёй.
Полная статья: https://marco-nett.de/blog/measuring-input-latency-on-linux-x11-vs-wayland-vrr-dxvk/
@prog_stuff
Please open Telegram to view this post
VIEW IN TELEGRAM
На Tproger вышел материал о «Точке сборки» — серии открытых вебинаров кафедры техпреда МФТИ, где основатели ИИ-стартапов делятся практикой вместо прогнозов.
О чём: почему опыт того, кто прямо сейчас собирает продукт на агентах, актуальнее любых аналитических материалов; как вайб-кодинг стал рабочим подходом в командах; что происходит с экономикой проверки гипотез, когда MVP собирается за выходные; кто выступал на первой встрече и как попасть на следующие.
Полная статья: https://tproger.ru/articles/pochemu-opyt-razrabotchikov-luchwe-prognozov-pro-ii
@prog_stuff
О чём: почему опыт того, кто прямо сейчас собирает продукт на агентах, актуальнее любых аналитических материалов; как вайб-кодинг стал рабочим подходом в командах; что происходит с экономикой проверки гипотез, когда MVP собирается за выходные; кто выступал на первой встрече и как попасть на следующие.
Полная статья: https://tproger.ru/articles/pochemu-opyt-razrabotchikov-luchwe-prognozov-pro-ii
@prog_stuff
👍1