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

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

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

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

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

VK: vk.com/tproger

Регистрация в перечне РКН: https://tprg.ru/mJwo
Download Telegram
Симулятор, который портит жизнь настоящей базе

Диск тормозит, сеть теряет пакеты, процесс падает. По отдельности такие тесты ещё можно расписать руками. Дальше начинаются сочетания: что, если всё случилось в неудобном порядке?

В TigerBeetle для этого есть симулятор VOPR. В его среде работает целый кластер с настоящим кодом базы. Симулятор подбрасывает сетевые, дисковые и процессные сбои. Так можно искать и ошибку алгоритма, и баг в его реализации. Проверяется тот самый код, которому потом предстоит работать с данными.

Авторы в том же документе отдельно проговаривают: абсолютной долговечности нет. Пострадать могут все копии. И симулятор исследует только те отказы, которые в него заложили.
❤12🎉6👍5🔥5🤔5👌2⚡1🍾1😴1😘1🙊1
Контейнеру подставили другое ядро

Приложение делает системный вызов и ожидает ответа Linux. В gVisor первым его встречает Sentry — ядро приложения в пользовательском пространстве, написанное на Go.

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

В контейнерные инструменты всё это встраивается через OCI-рантайм runsc. Меняется то, какой код отвечает на запросы программы, хотя для неё интерфейс стараются сохранить похожим на Linux.

У такого слоя есть цена: поддержаны не все интерфейсы, а нагрузка с частыми системными вызовами может заметно замедлиться.
❤12👍5👏4🤔4🤨2☃1🤩1😴1👻1🗿1💊1
Чтобы двигать образец, микроскоп сгибает пластик

С 3D-печатной механикой есть проблема: соединение должно двигаться плавно, без люфта и заеданий. А принтер не обязан выдавать идеальные поверхности.

У открытого микроскопа OpenFlexure столик двигается за счёт гибких элементов. Тонкие части пластика деформируются и дают нужное движение. Большая часть механизма печатается одной деталью, то есть собирать точность из множества отдельных шарниров не приходится.

Проект заявляет шаги заметно меньше 100 нм с небольшими шаговыми моторами. Это данные авторов. Любопытен сам подход: использовать упругость материала там, где обычно борются с трением в соединении. Оптику можно поставить от веб-камеры или взять лабораторный объектив с резьбой RMS. На фото проекта показан v7.0.0-alpha1.
❤15👍6🔥6☃2🤝2⚡1🎉1🐳1😨1🆒1🤷1
QOI экономит ещё и на сложности кодека

Разработчик Доминик Шаблевски разбирался с упрощением видеокодека, а в итоге придумал lossless-формат для картинок — Quite OK Image Format. Занятно свернул.

QOI проходит RGB/RGBA-пиксели по порядку за один проход. Повторился предыдущий — запишем повтор. Цвет уже есть в индексе на 64 позиции — сошлёмся на него. Изменился ненамного — сохраним разницу. Не подошло ничего — положим полное значение.

Блоки выровнены по байтам, поэтому декодеру не приходится разбирать переходы между ними по отдельным битам. Весь формат строится на этом коротком наборе приёмов.

В статье 2021 года автор сделал ставку на скорость и простоту реализации. QOI не гарантирует файл меньше PNG на любой картинке, зато восстанавливает исходные пиксели без потерь.
🤔7🏆7👏5👍4🎉4👌3👎2🔥2🤣2🆒2🤗1
Для восстановления файла не обязательно держать его копию

Backblaze в разборе Reed–Solomon 2015 года описала схему 17+3. Файл делят на 17 равных фрагментов данных и вычисляют ещё три фрагмента избыточности. Всего 20, а для восстановления достаточно любых 17.

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

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

В статье это разбирают на меньшем примере 4+2: вычёркивают строки матрицы для двух потерянных фрагментов, находят обратную матрицу и с её помощью восстанавливают исходные данные.
👍11❤6🤔5😇3👏2💋2🙈2🤝2👾2👨‍💻1👀1
Изменения в бэкапе есть, нужной точки восстановления уже нет

Litestream может сохранить изменение, но со временем потерять возможность восстановить базу ровно до него.

В описании v0.5 страницы SQLite WAL собираются в файлы LTX. Один такой пакет может содержать несколько транзакций SQLite. Его TXID — идентификатор пакета, а не каждой прикладной транзакции.

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

Сам по себе нужный max_txid не подтверждает возможность восстановления: нужны snapshot и непрерывная цепочка LTX до него. И репликация асинхронная: последние изменения могут ещё не доехать.
❤9👍8🔥4👏4🤩2👾2🤷‍♀1😁1🌭1💋1🤪1
Трассу можно расспрашивать через SQL

Записать побольше событий — ещё не значит понять, почему программа тормозит. Формат трассы рассчитан на быструю запись с небольшими накладными расходами. Для анализа эти данные ещё нужно разобрать и связать.

В Perfetto этим занимается Trace Processor. Он читает трассы в форматах Perfetto, ftrace и Chrome JSON, структурирует события и даёт запрашивать их через PerfettoSQL. Найденную проверку можно повторять на других трассах, не разыскивая события на временной шкале вручную.

Документация предлагает начать с интерактивного исследования, а затем автоматизировать запросы через Python или C++. Когда понятно, что искать, Trace Summarization позволяет задать стабильный структурированный результат для мониторинга производительности и поиска регрессий. Выбор проверки и вывод о причине торможения остаются за человеком.
🎉7❤6👍5👎3🔥3🤷‍♂1🤔1👌1🍌1🙉1
Маленькая модель пишет черновик для большой

Маленькая модель может накидать несколько токенов, а большая — проверить весь блок одним проходом.

В разборе Hugging Face 2023 года разобран случай с greedy-декодированием. Пока варианты совпадают с выбором большой модели, префикс принимается. На первом расхождении берут токен большой модели, а оставшийся черновой хвост отбрасывают: он продолжал последовательность с другим токеном.

Так можно сэкономить часть дорогих проходов, не меняя greedy-выбор целевой модели. Но помощник тоже тратит время. Если часто ошибается или сам слишком тяжёлый, суммарная задержка вырастет.

Ускорение на конкретном GPU нужно измерять. При случайном семплировании отдельно нужно разбирать распределение вероятностей: переносить эту схему без изменений нельзя.
👏5🔥4👍3🎉3❤2⚡1🤯1😭1
Спокойное море героя не воспитает

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

На ИТ-Одиссее Евгений Зубков, начальник управления развития ИИ-решений и внешних партнёрств Альфа-Банка, расскажет, как провести масштабный ИТ-проект через бурю и не потерять из виду свою Итаку.

В докладе:
— как перевести компьютеры банка на новую ОС;
— как вернуть команды в офис в гибридном формате после пандемии;
— как внедрить новые метрики для ML-команды;
— почему любые изменения встречают сопротивление и как услышать всех, но не сменить курс.

Онлайн, 18 ноября, 11:00–18:00 МСК

Регистрация
👍8🤔6❤4🔥4💅2🤩1🙏1🕊1💋1👀1🙈1
Где учиться на инженера, если хочется с первых курсов работать с реальным железом и связью? Рассказываем, какие вузы запустили программы вместе с индустрией. В МФТИ готовят разработчиков микропроцессоров и специалистов по беспроводным сетям, в МИЭТ — инженеров по RTL-проектированию и верификации на RISC-V, в ИТМО — экспертов по компиляторам, фаззингу и беспроводным технологиям. В СибГУТИ учат писать ПО для 4G и 5G, а в питерской Вышке — Verilog, Go и помехоустойчивое кодирование. Собрали магистратуры и бакалавриаты, где преподают практики, студенты получают стипендии и оплачиваемые стажировки.
3❤13😘4😁2🍓2🆒2⚡1😱1😢1🤩1😇1🤪1
GitHub заменит имя enterprise на slug в событиях аудита

12 ноября поле business в событиях secret scanning начнёт содержать slug enterprise вместо отображаемого имени. Тип останется строкой, названия событий тоже прежние. То есть обработчик может успешно разобрать JSON и при этом перестать узнавать нужную организацию.

Изменение касается событий secret_scanning_alert.* и secret_scanning_push_protection.bypass. Если по ним строятся уведомления или правила в SIEM, стоит проверить именно сравнение значений, а не только схему.

В анонсе GitHub советуют заранее принимать оба формата либо опираться на business_id. Его значения не меняются.
🤔7❤5🔥5🎅3🌚2🤷‍♀1❤‍🔥1⚡1😢1😍1🦄1
Управление GPU-кластерами можно попробовать без GPU

У NVIDIA есть NVKE — управляющий слой для Kubernetes-кластеров на серверах с GPU NVIDIA. Жизненным циклом кластеров можно управлять через API и nvkectl. Познакомиться с устройством системы можно без видеокарты, на симулированных машинах.

Для такого стенда нужны Linux или виртуалка, 6 CPU, 12 ГиБ свободной RAM, 100 ГиБ диска, Docker и виртуальный TPM.

NVKE пока в preview. Из провайдеров инфраструктуры подходит только NICo. После установки API по умолчанию работает по HTTP с выключенной аутентификацией. Защищённый доступ придётся настраивать отдельно. У управляющего слоя пока нет процедур обновления самого себя и backup/restore, поэтому авторы прямо не рекомендуют продакшен.
👍10🔥6👏3✍2😱2🐳2🍾2🎄2🤷2😢1😐1
Новый уровень ИТ-практик: Импульс Т1 снова в Москве 🚀

19 ноября столица примет ИТ-конференцию Импульс Т1. Мы создаём среду, где специалисты получают не просто полезную информацию, а рабочие инструменты, применимые в проектах уже на следующий день.

Импульс Т1 2026 — это:
🔹5 направлений деловой программы;
🔹130+ экспертных спикеров;
🔹70+ прикладных активностей;
🔹2 000+ участников сообщества.


Уникальный формат — учимся через действие: каждый участник собирает индивидуальный трек, объединяя доклады и практические тренажеры. Среди них ⬇️

🔘код-ретрит – оттачиваем инженерные практики, парное программирование и TDD;
🔘зона арх-каты – разбираем архитектурные кейсы, ищем уязвимости и моделируем решения на интерактивной карте;
🔘ресурсные игры – проверяем командные коммуникации и скорость принятия решений в условиях жестких ограничений;
🔘стенд доступности – тестируем интерфейсы и сценарии с точки зрения инклюзивности и доступной среды.

Ваше участие — это возможность:

✔️ прокачать практические навыки на реальных задачах;
✔️ поделиться опытом и создать сильное профессиональное окружение вокруг себя;
✔️забрать передовые практики раньше конкурентов.

📆 Дата: 19 ноября 2026 года.

📍 Место: г. Москва, ул. Волочаевская, д. 48, стр. 1, Дворец культуры завода «Серп и молот» (LOFT#8).

Покажите экспертизу на деле, осваивайте новейшие подходы и двигайте ИТ-индустрию вперёд! Регистрация по ссылке.
О рекламодателе
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7💊7🆒3💔2💋2😨2😎2☃1🙈1🙉1🙊1
Почему Python срочно обновил сразу пять веток

В Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 и 3.11.18 добавили блокировку скомпрометированных ключей промежуточных CA eMudhra в ssl. Это дополнительная защита на уровне интерпретатора. Она распространяется и на обычные операции pip, включая обновление самого pip, даже если установленная версия менеджера пакетов старая.

В том же срочном выпуске исправили обход tarfile.tar_filter через ссылки, заменяющие каталог назначения, и обработку cookies с отрицательной версией в http.cookiejar.

Для 3.15.2 и 3.14.10 выпустили бинарные установщики. Для трёх более старых веток вышли только исходники.
⚡8🎉8🙊5😍4🐳3😭2💅2🤷2😁1👀1🙈1
Процессор не загружен, а сервер всё равно тормозит

Низкая загрузка CPU ещё не означает, что у сервера есть свободные ресурсы. Запросы могут ждать диск, память или сеть. Даже load average в Linux учитывает задачи в непрерываемом ожидании I/O, так что читать его как «занятость процессора» опасно.

У Брендана Грегга есть чек-лист USE для Linux. Он предлагает пройтись по каждому ресурсу с тремя вопросами: насколько он занят, есть ли очередь на его использование и случаются ли ошибки. Именно очередь помогает заметить, что ресурса уже не хватает, а не просто узнать процент его использования.

Это старый чек-лист, ориентированный прежде всего на физические Linux-машины. Конкретные утилиты и метрики нужно сверять со своей системой. Проверка всех ресурсов помогает не закончить диагностику на одном графике CPU.
👍12❤7🔥6🎉4🙈3🤗3👌2🌭2🍾2💘1🙊1
От графика задержек до конкретного промаха кеша

В учебном демо OpenTelemetry можно специально сломать кеш рекомендаций флагом recommendationCacheFailure. Примерно через десять минут накопятся данные: скачки CPU и памяти, длинный хвост задержек p95, p99 и p99.9.

В разборе трассы фильтруют по участию сервиса рекомендаций, сортируют по задержке и открывают медленный запрос в Jaeger. Внутри видны app.cache_hit=false и необычно большое app.products.count. Сравнение с попаданиями в кеш помогает проверить, связана ли медленная обработка с его промахами.

Сценарий намеренно придуман для обучения. График показывает, где искать, трасса — что происходило в запросе. В реальной аварии причину ещё придётся подтвердить по коду и взаимодействиям сервисов.
🔥11👏8❤5⚡1👍1😁1😱1💯1😈1🤓1🫡1
Сто коммитов зависимости и не больше семи проверок

В 2016 году разработчик Artillery Хасси Велдстра обновил Request.js с 2.58.0 до 2.68.0. Тест с большими телами запросов после этого начал упираться в нехватку памяти в процессе Node. Между версиями было ровно сто коммитов.

Вместо проверки каждого коммита он использовал git bisect. Для поиска нужны рабочая и сломанная версии и тест, который их различает. Git выбирает середину интервала, результат проверки отсекает половину подозреваемых. Для ста коммитов хватит максимум семи таких шагов.

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

Версии Node и Request.js в статье относятся к 2016 году. Воспроизводимый тест позволил найти регрессию внутри чужой зависимости.
👍10👏6⚡3❤2😐2🎅2🤔1😢1🌭1🤓1💊1
Чья копия документа главная, когда пропал интернет?

В облачном редакторе ответ обычно находится на сервере. В модели local-first от Ink & Switch главной считают копию на устройстве пользователя, а серверу отводят роль ещё одной копии для синхронизации. Это меняет и работу офлайн, и устройство совместного редактирования.

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

CRDT не избавляет от необходимости продумать, как приложение будет разрешать такие конфликты. Авторы разбирают редакторы, заметки и похожие приложения. Банкинг и торговлю в область своих рекомендаций они не включают.
❤6👍4👏4⚡2🔥2🤷2😁1😐1💋1👀1🗿1
Если в Claude Code вы отвечали «Yes, and don't ask again» на команду с паролем или токеном, команда вместе с секретом могла сохраниться открытым текстом и попасть в репо.

Исследователи нашли на GitHub 104 185 публичных копий этого файла, в 1122 из них правдоподобные секреты. Вместе с историей коммитов, общим settings.json и сохранёнными чатами агентов набралось 2 539 секретов в 1 994 репозиториях: пароли к базам, ключи Supabase и AWS, SSH-логины.

Подробнее коллеги разобрали в нашем «Нейроканале», в том числе что и как проверить прямо сейчас.
❤6😁2💊2❤‍🔥1👍1👏1🎉1🍌1🤪1
This media is not supported in your browser
VIEW IN TELEGRAM
Заглянуть в работающий Python-процесс без перезапуска

Сервис уже запущен, и менять его код ради диагностики неудобно. py-spy собирает выборки стеков снаружи процесса: читает его память через системные API. Можно посмотреть, какие функции занимают время, сохранить профиль или снять текущие стеки потоков.

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

В режиме без приостановки программы память может измениться, пока профилировщик её читает. Поэтому возможны ошибки выборки и неполные кадры стека. При профилировании всё равно нужно учитывать права доступа, сборку Python и влияние измерений на программу.
🔥4❤3⚡2👍1🎉1💋1😈1👀1💘1