Типичный программист
✔
78.1K subscribers
3.82K photos
1.16K videos
14 files
8.47K links
Всё самое интересное по программированию

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

VK: vk.com/tproger

Регистрация в перечне РКН: https://tprg.ru/mJwo
Download Telegram
ИИ-модели нашли новые атаки на криптографические схемы

Исследователи собрали бенчмарк для криптоанализа: 191 задачу из шести семейств криптографических алгоритмов. Модели должны не пересказать известные работы, а найти слабость, которую можно проверить автоматически. На первом уровне, где практические атаки уже известны, пять моделей воспроизвели их для 65–86% схем.

Часть результатов оказалась новой. Модели предложили восстановление ключа через изъян в SpoC и нашли ошибку в опубликованном доказательстве безопасности KINDI. По словам авторов, прежде эти проблемы не были известны. Anthropic также сообщила об уязвимостях в Hawk и AES с сокращённым числом раундов, найденных при тестировании Mythos Preview.

Это пока ранние результаты, но сценарий уже практический: проверять новые криптографические схемы таким бенчмарком до внедрения.
❤8☃4🍌4🤝3💘2🤔1🙏1💯1🤣1🎅1🆒1
Как NULL незаметно меняет результат SQL-запроса

Postgres остановит деление на ноль, а выражение с NULL выполнит без ошибки. Итог при этом может не совпасть с вопросом, который разработчик задал базе.

NULL означает «неизвестно»: сравнение с ним тоже даёт неизвестность, а WHERE оставляет только истину. Поэтому phone = NULL не найдёт строки без телефона: нужна проверка IS NULL. NULL в NOT IN тоже может отбросить всю выдачу.

Разбор NULL в фильтрах, арифметике, агрегатах и соединениях объясняет, когда использовать IS NULL, NOT EXISTS и COALESCE.
🤔15🤩4🌭3😐2😈2🙊2🤷2😱1🤨1👻1🤪1
Как обучить модель писать JavaScript для акварельных рисунков

Языковая модель не генерирует готовую картинку. Она пишет примерно 150 строк JavaScript, которые управляют p5.brush: растеканием пигмента, прозрачностью заливки и формой мазков. Код можно прочитать, изменить и запустить снова.

Чтобы сохранить акварельный стиль, модели оставили 10 из 47 методов библиотеки. Каждый эскиз запускается в безголовом Chromium, а фильтр отбрасывает код, который не компилируется, рисует напрямую через p5.js или пытается обмануть оценщик текстом на холсте.

Одна модель сравнивает рисунок с четырьмя случайными образцами из вручную отобранного набора, другая предсказывает человеческие предпочтения. В открытом эксперименте с TRL и OpenEnv есть среда, обучающие скрипты, модели и три варианта награды. Это способ обучать на вкусе там, где правильного ответа нет.
🤷‍♂7🤔4❤3🎉2🤣2🍓2😎2😍1🌭1😭1🎅1
Как устроен браузерный 3D-симулятор электрических схем

Макетную плату можно собрать в 3D прямо во вкладке: расставить компоненты, соединить их проводами и запустить расчёт без установки программы и регистрации. Автор сделал этот проект за несколько недель.

Интерфейс написан на React 19 и TypeScript. Three.js рисует сцену и определяет объект под курсором при размещении компонентов, а Zustand хранит состояние интерфейса. Симулятор рассчитывает цепи постоянного тока по закону Ома и правилам Кирхгофа, включая базовое поведение конденсаторов и катушек индуктивности.

До уровня LTspice проект не дотягивает: полноценного анализа переходных процессов и переменного тока нет, а соединять провода на мобильном пока неудобно. Стек, возможности и эти ограничения собраны в инженерной истории проекта.
🤷‍♂6❤4👍3🔥2🤔2💊2🕊1🏆1👨‍💻1😨1🫡1
Как собрать аналог Quick Look для Windows на Rust и Tauri

PeekIt переносит в Windows 10 и 11 быстрый просмотр файла по Space: без открытия тяжёлого редактора. Установщик занимает около 3,4 МБ, а фоновый процесс, по замерам автора, потребляет 10–15 МБ памяти.

Обработчик Windows перехватывает Space, но не мешает вводу в текстовых полях. Перед чтением PeekIt проверяет атрибуты OneDrive: файлы только из облака не скачивает, а показывает их размер и метаданные.

Код обработчика Space и устройство приложения пригодятся для собственных фоновых утилит на Rust и Tauri.
🤔5👍3🔥2😁2🙈2🙉2🌚1💯1🍌1👀1🎅1
Как собрать личный видеосервис на Plex и смотреть медиатеку с разных устройств

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

В разборе домашней настройки Plex David Nield описывает свой опыт: установил серверное приложение на Windows, указал папки с видео и дождался сканирования библиотеки. После этого фильмы стали доступны через клиентские приложения на разных экранах.

Plex запоминает место остановки, поэтому просмотр можно продолжить на другом устройстве. Ещё владелец медиатеки может настроить, как долго фильм остаётся в разделе Continue Watching. Доступ к одному видео на разных экранах особенно удобен, когда вместе с ним сохраняется и контекст просмотра.
🤔6👎5👍3💔3🍾3🔥2👀2😱1💯1🙈1😇1
Если ваш прод живёт в Kubernetes, эта подборка пригодится. Гайды, малоизвестные Open Source-инструменты, апгрейд до 1.37 и стратегии деплоя, которые не роняют сервисы.

Deckhouse Conf 2026: зачем инженерам самописный SDN и виртуалки в Kubernetes 
Kubernetes на практике: гайды и малоизвестные Open Source-инструменты
Как обновиться на Kubernetes 1.37 и не уронить прод
Стратегии деплоя, которые не роняют прод
👍5🔥2👏2🏆2🙈2💅2👎1🥰1😍1🤣1🎃1
Как компании снижают расходы на ИИ с помощью открытых моделей

Uber потратила годовой ИИ-бюджет за первые три месяца. Затем команда снизила цену запроса на 34%, сессии на 52% и удержала расходы на уровне марта, хотя использование росло. Для части задач модели с открытыми весами оказались в 2–20 раз дешевле передовых закрытых.

Экономия держится не на одной замене. Uber еженедельно сравнивает модели на реальных задачах, небольшую работу отдаёт дешёвым субагентам и сжимает контекст после 400 тысяч токенов. Pinterest дообучает открытые модели на своих данных: транзакция обходится менее чем в 8% цены сопоставимой закрытой модели.

Разбор практик компаний даёт критерий маршрутизации: дорогую модель оставлять для сложного кода, а резюме и небольшие задачи передавать дешёвой после проверки качества на своих примерах.
👍10🎉5😐4😱3🐳3🤩2🎅2🗿2🆒2🤗1👾1
Два ядра загружены на 100%, а программа тормозит: где искать причину

Профилировщик показывает простой инкремент, оба ядра заняты, алгоритм не изменился. Но в эксперименте перестановка двух целых чисел в структуре сократила время работы с 4284 до 841 мс.

Причина была в размещении данных. При промахе кэша ядро ждёт чтения из памяти сотни тактов. При промахе TLB, кэша соответствий виртуальных и физических адресов, процессор дополнительно обходит таблицы страниц. А при ложном совместном использовании два ядра меняют разные переменные в одной 64-байтной строке кэша и постоянно отбирают её друг у друга.

Обычный профиль этих ожиданий не разделяет. В разборе трёх причин тормозов есть команды perf stat для счётчиков промахов и perf c2c для поиска строки кэша, за которую спорят ядра. Это полезное направление диагностики, когда добавление потоков не ускоряет сервис.
🔥6🤣4👍3☃2💔2😈2👎1😍1🌚1🙈1🙉1
Как поймать утечку целевой переменной до того, как поверить R² 0,998

Модель получила пять колонок из публичного набора CDC и почти идеально предсказала шестую: коэффициент R² достиг 0,998. Результат выглядел как успех, пока не выяснилось, что CDC вычислял целевую колонку из тех самых пяти. Модель не нашла закономерность в реальном мире, а восстановила готовую формулу.

Так работает утечка целевой переменной: признаки уже содержат ответ. Автор описал происхождение колонок в YAML-манифесте, где для каждой вычисляемой величины указаны исходные данные. Затем написал Python-линтер, который обходит этот граф зависимостей и отклоняет признаки на пути к целевой колонке или от неё.

В практическом разборе утечки есть воспроизводимый эксперимент на данных CDC, код проверки, обработка битых входных файлов и запуск линтера при каждом пуше через GitHub Actions.
🤔5🌭3🤷‍♂2👍2😁2⚡1👌1🍾1😭1🎄1😘1
Открываете видео. В одном варианте оно начинается сразу, а изображение постепенно становится чётче. В другом — нужно подождать три секунды, зато картинка будет чёткой с первого кадра.

Как вам удобнее?
Anonymous Poll
26%
Начать сразу, чёткость подстроится.
45%
Подождать три секунды ради чёткой картинки.
23%
Зависит от того, что смотрю.
6%
Для меня особой разницы нет.
👏4😁3🕊3❤2🔥2😭2🙉2🤩1💯1🍌1🤷1
Как HLS запускает видео до полной загрузки

В HLS ролик разбит на независимые сегменты, обычно по 2–10 секунд. Плеер запрашивает их по HTTP и может начать воспроизведение, получив первые части и не дожидаясь всего файла.

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

Разбор пригодится, когда нужно понять поведение веб-плеера: время старта зависит от доставки первых сегментов, а качество может меняться уже по ходу просмотра. Для зрителя это разные стороны опыта: когда начинается воспроизведение и как меняется изображение после старта.
🤔6👨‍💻5❤3👏3🤯2😐2🍓2😈2🙈2✍1😘1
Forwarded from Веб-страница
Как поручить ИИ миграцию сайта и не потерять 400 страниц

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

Требование сохранить возможности превратили в контракт: какие адреса, метаданные, изображения и формы должны работать. Рискованный перенос контента сначала проверили на прототипе. Затем конвертер переводил известные конструкции в MDX по правилам, а на незнакомых останавливался.

В разборе миграции полезен сам метод: дробить работу на задачи с критериями приёмки и оставлять продуктовые решения человеку.
👍7❤4👏4🤔4🎉2🌚2🍾2🤩1🕊1🍓1😴1
Переход на ветку в присланном проекте запустил бы вредоносный Git-hook

Разработчику Фрэнку Уайлсу написали под видом заказчиков приложения и предложили обсудить проект. Перед созвоном его попросили изучить спецификацию в папке на Dropbox и подписать соглашение о неразглашении (NDA), уточнив, что сам документ лежит в отдельной ветке репозитория.

Ловушка строилась на передаче каталога .git внутри обычной папки. Стандартная команда git clone не копирует клиентские хуки с удалённого сервера из соображений безопасности, но в присланной директории уже лежал исполняемый файл .git/hooks/post-checkout. При вызове git checkout этот скрипт обращался к Vercel, скачивал бинарник под текущую операционную систему, делал его исполняемым, запускал и удалял себя.

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

@tproger
💯17❤12🤔10👀5👾3😐2🌭1💋1🤓1🎃1🤪1
18 тысяч тестов нашли то, что пропустили 185 обычных

При переносе robfig/cron с Go на Rust код компилировался, а все 185 модульных тестов проходили. Затем одинаковые расписания прогнали через обе реализации и сравнили результаты в 18 тысячах точек. Так вскрылась разница при переводе часов: несуществующее 02:30 Go переносил на 03:30, а библиотека chrono-tz сообщала, что такого локального времени нет.

В Rust пропущенный час стали сдвигать вперёд, после чего сравнительные тесты не нашли ни одного расхождения. Код проверки и история переноса показывают полезный подход: совместимость порта стоит доказывать одинаковым поведением на сложных входных данных, а не успешной сборкой.
👍8🍾7🎉5🥰3👏3🤗3🔥2🏆2😈2😴2🌭1
Исследователи заставили современную электронику выдавать данные по радио

Метод InjectEave превращает случайные внутренние антенны устройства в канал утечки. На устройство направляют радиосигнал подходящей частоты. Нелинейные компоненты смешивают его с рабочими сигналами схемы, после чего наружу уходит излучение с данными. Без такого воздействия заметной утечки в опытах не обнаружили.

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

В демонстрации с интернет-телефоном они перехватили речь, клонировали голос и внедрили новую фразу в звонок в реальном времени. Для атаки нужно активно облучать цель и принимать ответное излучение: результаты пока относятся к исследовательской установке.
🔥12👍8❤5👀5🤪5😈3💘3🕊2🤷‍♀1👎1😨1
Kubernetes 1.37 перевёл rootless kubelet в beta

В релизе Kubernetes 1.37 kubelet разрешили запускать на хосте без прав root, внутри пространства пользователей Linux. Флаг KubeletInUserNamespace включён по умолчанию.

У kubelet становится меньше прав на хосте. Разработчики рассчитывают, что это сократит ущерб при побеге контейнера из изоляции.

Режим пока находится в beta: возможность уже доступна по умолчанию, но ещё не объявлена стабильной. Для эксперимента стоит отдельно проверить работу kubelet без root на своих узлах и не принимать beta за готовность к любой инфраструктуре.
👍12🎉5🥰2🤔2🙏2🕊2👀2✍1👌1🍓1🗿1
Почему max_connections не ускоряет PostgreSQL

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

На PostgreSQL 18.6 рост лимита со 100 до 5000 увеличил общую память со 150 до 389 МБ. При этом 17-е активное соединение на машине с 16 ядрами уже добавляет переключения контекста и очередь. А 400 активных запросов с тремя хеш-объединениями каждый могут одновременно запросить 1200 порций work_mem.

Поэтому лимит стоит считать как бюджет, а приложения подключать через PgBouncer в режиме пула транзакций. Для большинства производственных систем расчёт с учётом репликации, мониторинга и ручных подключений даёт 100–300 соединений.
🫡14👍5❤4🔥4👏4👎1😐1😴1👨‍💻1💘1💊1
Как быстрые хеш-функции ломаются на специально подобранных данных

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

Автор с помощью Claude Fable разобрал популярные функции из набора тестов SMHasher. У большинства нашлись входы с устойчивостью к коллизиям минимум на 20 бит хуже ожидаемой. Для CityHash64, FarmHash64 и MurmurHash3 удалось построить сколько угодно входов, которые сталкиваются при любом секретном ключе.

Интерактивное сравнение скорости и гарантий отделяет доказанные оценки от найденных контрпримеров. Практический вывод: если сервис принимает чужие данные, одной пропускной способности хеша недостаточно. Нужны доказанные гарантии, а ещё лучше проверенные в Lean.
❤10👍6🏆4✍3🔥2💯2🗿2🆒2😢1🤪1🙊1