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

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

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

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

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

VK: vk.com/tproger

Регистрация в перечне РКН: https://tprg.ru/mJwo
Download Telegram
Модель на 125 миллиардов параметров запустили на ноутбуке с 48 ГБ памяти

Веса Qwen3.8-Flash-Next занимают 105 ГБ на диске, и обычный загрузчик на MacBook с 48 ГБ уходил в подкачку и умирал до первого токена. Карлос Галарса написал slotstream: модель устроена как mixture of experts, на каждый токен нужны 10 экспертов из 512, поэтому инструмент держит в памяти фиксированный пул слотов и дочитывает нужных экспертов с SSD через pread.

Итог: 3,8 ГБ постоянно в памяти, около 33 ГБ на процесс, 12 токенов в секунду генерации. Плата за это: промпт на 8000 токенов обрабатывается 39 секунд, на 32 000 три минуты. Только Apple Silicon и macOS 14, API совместим с Ollama и OpenAI, так что Open WebUI подключается сразу.

Почему ленивый mmap тоже не спас и что проверить перед запуском, разобрали на сайте.
❤19👍9🔥3👏2🤔2💯2⚡1🤯1🎉1🕊1😍1
CERN уходит с CentOS на Debian: последней каплей стал один флаг компилятора

Организация, которая сама сопровождала Scientific Linux и десять лет жила на CentOS, объявила на MiniDebConf, что 2200 с лишним промышленных компьютеров управления ускорителями переезжают на Debian 13 до конца 2026 года. Последней каплей инженеры назвали -march=x86-64-v2 по умолчанию в RHEL: система собирается под инструкции, которых нет у процессоров старше примерно 2009 года, и старое сертифицированное железо просто перестаёт грузиться. В CERN это назвали принудительным устареванием.

Дата-центры и вычисления экспериментов остаются на RHEL и AlmaLinux. А в Debian им не хватило инструментов для автоматической сборки пакетов и хранения нескольких версий одного пакета, это придётся собирать самим.

Проверить свой парк можно одной командой: /lib64/ld-linux-x86-64.so.2 --help | grep supported покажет, какие уровни x86-64 тянет машина. Что делать, если ниже v2, на сайте.
💅11👍10👏2🙈2😨2🤝2❤‍🔥1❤1🔥1🤔1🎉1
Переключение на резервный регион не доедет до вашего сервиса на Java

Инженер разобрал свой ночной инцидент, и повторить его может любой, кто ходит наружу стандартным HTTP-клиентом Java и не трогал настройки.

В 3:40 один регион начал сыпать пятисотыми примерно на 8% запросов. Дежурные перевели запись в DNS целиком на здоровый регион. Ошибки не ушли: сорок пять минут часть серверов долбилась в мёртвый регион, притом что dig показывал новый адрес через пару секунд.

Причина в самой JVM. Она не смотрит на время жизни вашей DNS-записи: у неё свой кеш и два свойства, о которых почти никто не знает, networkaddress.cache.ttl и negative.ttl. Под SecurityManager удачный ответ кешируется навсегда, без него тридцать секунд, и это тоже константа внутри JVM, а не то, что настроил ваш DNS. Правило приехало из начала двухтысячных, когда так защищались от подмены адресов в апплетах.

Проверьте оба свойства у себя, иначе узнаете о них в момент аварии. Рабочие значения: 30 секунд на удачные ответы и 10 на отрицательные. И не через -Dsun.net.inetaddr.ttl, под SecurityManager оно не работает вовсе, на чём авторы инцидента потеряли ещё двадцать минут.

#devops #java
👍11❤6👏4🔥2💯2🤔1💊1😎1
Два простаивающих соединения на хост по умолчанию разгоняют хвост задержек в Go-сервисе

Каждый сервис на Go, который ходит в соседний, использует http.Transport, даже не вспоминая о нём. У MaxIdleConnsPerHost значение по умолчанию равно двум, и это самая частая ошибка конфигурации в парках микросервисов на Go.

Арифметика простая. Сервис на 500 запросах в секунду с медианой 20 мс держит около десяти одновременных соединений. Восемь закрываются после каждого запроса, и каждый следующий поход платит за рукопожатие TCP, а на TLS ещё и за проверку сертификата. Ошибок в логах нет, всё выходит наружу только хвостом времени ответа.

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

#golang
❤6👏4🙉3💯2🤝2🤷‍♂1🤩1🍓1😭1👻1😇1
Разработчик писал свою математику, а нашёл одинаковый баг в Rust и musl

Shnatsel реализовывал fused multiply-add, операцию a*b+c с одним округлением, и обнаружил, что на субнормальных числах результат округляется не туда. Проверил стандартную библиотеку Rust: f32::mul_add ошибается так же. Проверил std::simd: то же. Проверил fmaf() в musl, libc, на которой собран Alpine: то же самое. Контрпример к первой версии его собственного патча нашла языковая модель, которую он попросил поискать ошибки.

Разница в один младший бит, около 15 частей на миллион, и только там, где FMA эмулируется программно: старые Intel без AVX2, Hygon, 32-битный ARM. Сам автор честно пишет: важно ли это на практике, он не знает, но называет риск для детерминированных симуляций, которые обязаны давать одинаковые биты на разных машинах.

Проверка занимает три hex-числа и одну строку на C; какие исправления уже влиты, а какие висят на ревью, на сайте.
👍24🔥3⚡2❤2👏1😍1💯1🆒1
128 килобайт памяти, в которых каждый бит — отдельное ферритовое колечко

В европейской лаборатории Spacelab, которую возили в отсеке шаттла, стояли три французских миникомпьютера Mitra 125 MS. Память в них на магнитных сердечниках: бит хранится направлением намагниченности крошечного кольца на пересечении проводов, блок из семи плат занимает треть корпуса, а тепло уходит через плотный контакт с боковой панелью без обдува. Кен Ширрифф разобрал модуль до отдельных проводов и объяснил, почему чтение здесь стирает значение и его приходится записывать обратно.

В нашем канале «Сохранёнки программиста» разобрали подробнее.
👍8🔥3👏2🤝2🤔1🙏1💯1😘1
This media is not supported in your browser
VIEW IN TELEGRAM
Мне всегда было интересно, как именно происходит поиск такси с технической точки зрения. Если вам тоже, то я нашёл видео, где всё подробно объясняется.
👍78🔥21💯6❤‍🔥5👏3😁3🎉3❤2😢1🤪1🤷1
Что делать, если ключ от сервиса уехал в публичный репозиторий

Поздний вечер, код наконец заработал, git add ., коммит, пуш. Через несколько минут расход по API растёт, появляются запросы, которых вы не делали, а счёт больше ожидаемого.

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

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

#основы
👍10❤7🔥5🗿4😢3🍌2🙉2🎉1🌭1💊1🙊1
Forwarded from Веб-страница
Браузер дорос до того, чтобы конвертировать файлы без сервера

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

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

Автор разбирает механику и честно очерчивает границы: где локальная конвертация выигрывает, а где браузеру не хватает сил и сервер всё-таки нужен. Прочесть стоит до того, как закладывать такой инструмент в план.
💯14❤4🔥3👍2🎉2⚡1👏1🤔1🤝1
Forwarded from IT Юмор
🤣183😁42❤3🔥3🎉3👎2👏2👍1🤔1💯1
Forwarded from IT Юмор
Кто уже потестил Басню 5.1?
❤19👍12💊7🔥4👏4😁3💯3🤝2🤨1🤷1
Ускоритель для ИИ молча возвращал неверный угол вместо ошибки

Tenstorrent — компания Джима Келлера, того самого, кто проектировал AMD Zen и первый чип автопилота Tesla. Она делает ускорители для нейросетей на RISC-V, то есть пытается подвинуть NVIDIA. Софт к ним, tt-metal, открытый, и в нём нашлась занятная вещь.

Есть стандарт IEEE 754, ему сорок лет, и он в том числе описывает, что должен вернуть арктангенс от бесконечности. Ответ π/2. Так считает Python, так считает PyTorch, так считает любая видеокарта. Ядро Tenstorrent на том же входе выдавало ровно 0, а на минус нуле вместо π/2 приезжало π.

Молча неверный ответ хуже падения: программа не спотыкается, просто робот едет не туда, а фаза считается мимо. Нашли это чтением, а не перебором. Автор сначала выписал из стандарта таблицу, что должно получаться на бесконечностях и нулях, и только потом полез в код. Правка уместилась в одно сравнение и уже влита.

Если у вас в проде считает что-нибудь не на процессоре, отчёт об аудите стоит взять как чеклист.
💊9👍8❤6👏2🤝2⚡1😁1🎉1🤩1🕊1💯1
Кеш с 99 процентами попаданий работает вдесятеро быстрее, чем с 90

Речь о самом обычном кеше перед базой: приложение держит в памяти ответы на запросы, которые уже задавало, и лезет в базу, только когда ответа нет. Такой кеш оценивают по доле попаданий, и ровно на этой доле все обманываются.

Разница между 90 и 99 процентами читается как «лучше на девять процентов». Считать надо промахи. Их доля падает с десяти процентов до одного, то есть в десять раз, а вся работа базы сидит именно в промахах.

Разработчик проверил это на стенде. Один и тот же запрос 10 000 раз без кеша занял почти две секунды работы базы. С обёрткой на обычном ConcurrentHashMap вышло 0,6 миллисекунды и ровно один поход в базу: ускорение в 3084 раза там, где он предсказывал сотню. Долю попаданий он задавал руками, а время мерил по-настоящему.

Пригодится, когда придётся объяснять, зачем тратить спринт на подъём попаданий с 90 до 99. В таблице замеров выигрыш посчитан для четырёх разных долей.
💊11❤5👏5👍4❤‍🔥1🎉1🌚1🌭1🤣1😨1🫡1
😁71🤣27❤11💯5🔥3🤔2🎉2🙏2👀1🎃1🫡1
Разработчик собрал фоторедактор, который ни разу не отправляет фото на сервер

Любая онлайновая удалялка фона работает одинаково: вы загружаете снимок, модель крутится на чужой машине, вы забираете результат. Копия уже ушла, и что с ней дальше, вам не расскажут. В APIC-Web фон, объекты, фильтры, конвертация и сжатие живут прямо в браузере, на Canvas, WebAssembly и локальной модели.

Вырезать фон просто, пока в кадре нет волос. Очевидный путь через ImageSegmenter из MediaPipe с флагом outputCategoryMask отдаёт на пиксель жёсткий ноль или единицу. По волосам получается лесенка, и размытием её не спасти: промежуточные значения округлились и потерялись.

Приём в том, чтобы забрать вероятности до округления. Флаг outputConfidenceMasks отдаёт на пиксель число от нуля до единицы, и дальше край собирается в несколько шагов. Модель та же, край другой.

Грабли: число каналов уверенности у моделей разное, так что проверяйте длину массива вместо confidenceMasks[1]. Оба сложных куска редактора расписаны с кодом.
🔥9💊6👏4😁3🎉2⚡1👍1🤔1🌚1🤝1🦄1
Почему шифровать по-новому советуют сейчас, хотя квантового компьютера ещё нет

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

Возражение напрашивается: такого компьютера пока нет, значит, можно подождать. Мешает атака «собери сейчас, расшифруй потом»: противник записывает ваш шифрованный трафик сегодня и лежит с ним, пока не появится возможность его вскрыть.

Отсюда правило, которое стоит запомнить в начале пути: если данные должны остаться тайной через десять лет, угроза уже настоящая, а не будущая. Разбор объясняет это без математики.
👍14🔥3👏3😁3🌚3😢2🥰1💯1😴1🎃1🗿1
CUDA готова пустить к себе RISC-V, если платформа дорастёт до серверной

Процессор, который раздаёт видеокарте работу в CUDA, может быть только x86-64 или aarch64. На Hot Chips 2026 Nvidia назвала условия, при которых к ним добавится RISC-V.

Требования серверные: профиль RVA23, спецификации RISC-V для серверного SoC и платформы, поддержка ACPI, через которую система узнаёт у железа, что оно умеет, и когерентность PCIe.

Последний пункт объясняет, почему дешёвой платформой не отделаться. Без когерентности процессор записал данные, а они ещё лежат в его кэше; копирование в память видеокарты идёт мимо процессора, прямо из DRAM, и утаскивает устаревшую версию. Спасают только ручные сбросы кэшей на каждой передаче.

Чего Nvidia хочет от векторных расширений, разбирают в Chips and Cheese.
❤8🎉3👍2🤔2⚡1🔥1👏1😁1🙏1👻1🆒1
Сорок символов на входе уронили сеть Cloudflare на 27 минут

2 июля 2019 года процессор ушёл под 100% на каждом пограничном сервере Cloudflare, принимавшем HTTP и HTTPS. Сайты по миру лежали 27 минут из-за одной регулярки.

Схема известная: вложенные квантификаторы на одном классе символов, структурно вроде (a+)+b. Движку с бэктрекингом подсовывают строку, которая почти совпала, и он перебирает все способы разложить её между плюсами: на 20 символах это полмиллиона попыток, а сорока хватает, чтобы забить ядро.

В разборе есть таблица откатов по длине входа.

#безопасность
🔥12👍4❤3👏3🤔3😁2🎉2🙏1👌1😴1🤝1
Первую жертву новой дыры в Magento взломали на самой свежей сборке от Adobe

Sansec выпустила предупреждение досрочно: магазины ломают прямо сейчас. Атаки идут с 4 сентября, дыру назвали StyleSmuggler, она даёт выполнение кода на сервере без логина и ставит постоянный бэкдор.

Цепочку воспроизвели на чистых Magento Open Source 2.4.7, 2.4.8 и 2.4.9. Первая жертва работала на 2.4.6-p15 с июльским и августовским патчами: выше для этой линейки Adobe ничего не выпускала. На 6 сентября у Adobe нет ни CVE, ни фикса, ни обходного пути.

Совет Sansec на время: отключить GraphQL. Хостер Disrex, чинивший два взломанных магазина, уточняет, что классическим витринам и Hyvä он не нужен, а headless и PWA без него не работают. Плановый релиз Adobe сегодня, 8 сентября, будет ли там фикс, неизвестно.

Я бы на месте владельца headless-витрины уже читал логи: детали в разборе The Hacker News.

#безопасность
👍6❤3🔥3👏3😁2👌2☃1😍1🎄1🆒1
Треть патча Linux 7.3-rc1 заняли заголовки регистров AMD

Когда пишут «огромный релиз-кандидат ядра», полезно посмотреть, из чего складывается этот объём. В 7.3-rc1 около трети всего диффа занял дамп заголовков AMD DCN6: аппаратные определения нового поколения графики, выгруженные обычными #define, плюс код под это поколение.

Линус сам говорит: замаскируйте этот кусок, и merge window выглядит рядовым, хотя по числу коммитов rc1 один из крупнейших. Судить о вложенной работе по строкам диффа бессмысленно, заметную часть «роста» дают сгенерированные константы под новое железо.

Ценно, что в том же письме он признался в собственном факапе: посреди merge window затеял обновление системы, словил из-за этого проблему и сам себя назвал балбесом. Письмо и список изменений на Phoronix: там же поддержка AMD Zen 6, ускорение Btrfs и Steam Controller 2026.

#новости
👍6😁4❤3🎉2🤷‍♂1🤷‍♀1💔1👨‍💻1😇1🤝1🗿1