Типичный программист
Всё самое интересное по программированию Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site VK: vk.com/tproger Регистрация в перечне РКН: https://tprg.ru/mJwo
Show more📈 Analytical overview of Telegram channel Типичный программист
Channel Типичный программист (@tproger) in the Russian language segment is an active participant. Currently, the community unites 78 014 subscribers, ranking 1 638 in the Technologies & Applications category and 7 329 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 78 014 subscribers.
According to the latest data from 24 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -293 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.
- Verification status: Verified (Officially confirmed by Telegram)
- Engagement rate (ER): The average audience engagement rate is 11.93%. Within the first 24 hours after publication, content typically collects 5.81% reactions from the total number of subscribers.
- Post reach: On average, each post receives 9 306 views. Within the first day, a publication typically gains 4 531 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 24.
- Thematic interests: Content is focused on key topics such as sql, архитектура, api, docker, github.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Всё самое интересное по программированию
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
VK: vk.com/tproger
Регистрация в перечне РКН: https://tprg.ru/mJw...”
Thanks to the high frequency of updates (latest data received on 25 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Loading data
| Date | Subscriber Growth | Mentions | Channels | |
| 25 October | +9 | |||
| 24 October | +10 | |||
| 23 October | +5 | |||
| 22 October | +11 | |||
| 21 October | +17 | |||
| 20 October | +20 | |||
| 19 October | +13 | |||
| 18 October | +14 | |||
| 17 October | +24 | |||
| 16 October | +30 | |||
| 15 October | +19 | |||
| 14 October | +15 | |||
| 13 October | +17 | |||
| 12 October | +20 | |||
| 11 October | +13 | |||
| 10 October | +3 | |||
| 09 October | +17 | |||
| 08 October | +13 | |||
| 07 October | +12 | |||
| 06 October | +11 | |||
| 05 October | +9 | |||
| 04 October | +7 | |||
| 03 October | +5 | |||
| 02 October | +8 | |||
| 01 October | +5 |
watch -l mRect.width и выполняет reverse-cont. Отладчик идёт назад и останавливается на присваивании, которое изменило поле. Адреса объектов и порядок событий при повторном воспроизведении сохраняются, поэтому найденные зацепки не теряются после перезапуска отладки.
Это работа с сохранённым исполнением. Для rr нужны Linux и совместимый процессор, в виртуальной машине ещё и доступ к аппаратным счётчикам. Есть ощутимая цена для параллельного кода: rr эмулирует одноядерную машину. Зато пойманный редкий баг больше не приходится ловить заново.| 2 | Один зашифрованный архив, несколько получателей и никакого общего пароля
Нужно передать архив нескольким коллегам. Можно завести общий пароль и потом разбираться, кому его уже переслали. У утилиты age есть другой вариант: один файл шифруется на несколько публичных ключей, и каждый получатель открывает его своим секретным ключом.
Список адресатов задаётся повторением -r или файлом с ключами через -R recipients.txt. Сами секретные ключи друг другу передавать не нужно. А благодаря обычным потокам Unix вывод tar можно сразу направить в age, без промежуточного незашифрованного архива на диске.
Есть важная граница: шифрование само по себе не подтверждает личность отправителя. Принадлежность публичных ключей тоже нужно проверить отдельно. Удобство здесь вполне конкретное: несколько человек читают один архив, а передавать друг другу личные секретные ключи не приходится. | 3 256 |
| 3 | Как поймать причину торможения, которое уже закончилось
Запрос иногда зависает, но к моменту включения трассировки всё снова работает. Тут полезен flight recorder из Go 1.25: он заранее собирает недавние события runtime в буфер в памяти. Когда программа замечает проблему, из буфера можно сохранить предшествующий ей фрагмент.
В примере команды Go снимок запускается после первого ответа дольше 100 мс. Трасса приводит к неожиданному виновнику: defer b.mu.Unlock() внутри цикла. Блокировки снимаются только при выходе из функции, а та ещё успевает отправить HTTP-запрос. Всё это время другие горутины ждут.
Самописец здесь помогает сохранить именно момент ожидания, который иначе легко пропустить. Порог в 100 мс относится к примеру, а буфер и сбор событий расходуют ресурсы. Зато не нужно копить трассу за несколько дней работы сервера ради одного редкого сбоя. | 3 871 |
| 4 | Сколько ключей придётся помнить ради дедупликации потока?
Найти повторное событие по ключу легко, пока можно помнить все ключи за всё время. В непрерывном потоке такое состояние растёт без конца.
В разборе дедупликации через Flink SQL автор сравнивает варианты с разными ограничениями. Срок хранения состояния, TTL, ограничивает память, но меняет поведение: после удаления ключа старый дубль снова может пройти как новое событие.
Важен и результат запроса. Один вариант сразу выдаёт строку, а позже присылает её обновление. Другой ждёт, чтобы учесть запоздавшие события. Получатель должен уметь работать с выбранным режимом.
Даже настройка TTL требует проверки: в рассмотренной версии подсказка STATE_TTL не применяется к оператору дедупликации. До запуска стоит прогнать поздний дубль, истечение срока хранения и обновление результата — именно на них короткий SQL начинает вести себя неожиданно. | 4 800 |
| 5 | Проверенный бот тоже может перегрузить сайт
Известный поисковый робот может ходить только по разрешённым страницам и всё равно создавать слишком большую нагрузку. Проверка владельца бота сама по себе этого не предотвращает.
Cloudflare описала подход к постоянной оценке проверенных ботов. Среди сигналов — соблюдение robots.txt и реакция на HTTP 429: снижает ли робот частоту запросов, учитывает ли указание подождать.
Так доверие к боту должно зависеть от наблюдаемого поведения после проверки его личности. Владельцу сайта нужна возможность понять, за что робот получил определённую оценку.
Публичные оценки в Cloudflare Radar пока заявлены как следующий шаг. Уже сейчас при разборе нагрузки полезно смотреть, что происходит после ответа «слишком много запросов»: клиент действительно отступает или немедленно приходит снова. | 5 078 |
| 6 | Маршрутизатору базы не обязательно понимать каждую колонку
Результат запроса проходит через промежуточный сервис. Тот превращает каждую строку в объекты, разбирает значения, а потом собирает те же байты для клиента. Даже когда менять ничего не требовалось.
В маршрутизаторе Neki PlanetScale сохраняет ответы PostgreSQL в исходном формате протокола. Если результат можно передать дальше, значения колонок остаются байтами.
Появился LIMIT — нужно найти границы строк и выбрать нужные. Появилась общая сортировка результатов с нескольких шардов — понадобится разобрать ключ сортировки. Остальные колонки можно по-прежнему не преобразовывать в типизированные значения.
Для вычисления агрегатов разбор всё же потребуется. Neki переходит к более подробному представлению данных по мере необходимости: отдельный сетевой переход остаётся, но часть промежуточных объектов создавать больше не нужно. | 5 057 |
| 7 | Профилировщик Python 3.15 подключается к живому процессу
В Python 3.15 появился Tachyon — статистический профилировщик из profiling.sampling. Он снимает образцы стеков и помогает увидеть, где программа проводит время. Подключиться можно без изменения её кода.
В разборе Astral профилируют обработку молекул через RDKit. Заметная доля образцов стека приходится на функцию, которая объединяет вложенные списки через sum(symbols, []).
Такая запись многократно создаёт и копирует промежуточные списки. По мере роста входа работа становится квадратичной. В статье её заменяют разворачиванием списков с новым синтаксисом Python 3.15.
Отчёт помогает добраться до конкретной функции, хотя внешне задача выглядит как вычисления химической библиотеки. При подключении к рабочему сервису всё равно стоит измерить издержки профилирования на своей нагрузке. | 5 703 |
| 8 | GitHub автоматизировал проверку доступов и репозиториев
В общей организации остаются доступы подрядчиков и репозитории, владельцы которых давно заняты другим. Ручная ревизия быстро превращается в задачу «когда-нибудь потом».
GitHub собрал для этого приложение Evergreen. Раз в квартал оно просит подтвердить доступ внешних участников. Неактивные репозитории проходят отдельную проверку перед архивированием.
Обсуждение идёт в issues, задачи запускаются через GitHub Actions, состояние хранится в JSON в Git. У решения остаётся история: кто получил предупреждение, что подтвердили и почему доступ отозвали.
Молчание тоже имеет последствия, но после срока на ответ. Неподтверждённый доступ снимают, заброшенный репозиторий архивируют. Архивирование сохраняет код и историю — это не удаление проекта. | 5 750 |
| 9 | С LZ4 PostgreSQL прочитал весь текст ради первых 200 символов
Нужны первые 200 символов большого текста. Кажется, для этого достаточно прочитать небольшой кусок. Но способ сжатия меняет объём работы.
В эксперименте PlanetScale сравнили pglz и LZ4 на PostgreSQL 18. Для pglz база умеет оценить, сколько сжатых данных нужно для начала строки. Для LZ4 такой оценки нет: сначала приходится забирать значение целиком.
На ста значениях примерно по 1 МБ получение начала текста заняло около 1 мс с pglz и 16 мс с LZ4. Обращений к страницам получилось 301 против 6234. Данные уже находились в памяти.
LZ4 при этом быстрее загружал другой набор данных — JSON-документы. Выбирать сжатие только по скорости записи рискованно: для списка превью, полного документа и чтения диапазона байтов база выполняет разную работу. | 5 904 |
| 10 | Почему remove не удаляет число из Set<Short>
В цикле добавляем short в Set<Short>, затем вызываем remove(i - 1). Кажется, предыдущий элемент должен исчезнуть.
Но результат i - 1 имеет тип int и упаковывается в Integer. В коллекции лежат Short, поэтому ничего не удаляется. Компилятор доволен: метод remove(Object) принимает такой аргумент.
В разборе Error Prone показано, как поймать эту ошибку ещё при сборке. Инструмент встраивается в javac и проверяет подозрительные конструкции с учётом типов.
Другой пример — YYYY в формате даты. Это год по нумерации недель, поэтому на границе декабря и января имя отчёта может получить неожиданный год.
К встроенным проверкам можно добавить свои правила через BugChecker. Например, запрещать характерные для проекта ошибки, пока они ещё не попали на ревью. | 6 389 |
| 11 | Больше CSS — меньше работы при открытии страницы
Стили тоже могут тормозить React: JavaScript вычисляет их во время выполнения, создаёт классы и вставляет правила. Цена появляется и на сервере, и при запуске компонентов в браузере.
GitHub описал переход от CSS-in-JS к CSS Modules. Стили готовят заранее, а компоненты получают имена классов. В браузер отправляется больше обычного CSS, зато исчезает часть работы JavaScript.
После миграции компонентов Primer время серверного рендеринга страницы сократилось на 55%, инициализации компонентов — на 25%. Это результат конкретного этапа, а не обещание такого ускорения любому проекту.
Миграцию проводили постепенно, с флагами и визуальными проверками. Удалить библиотеку стилей оказалось проще, чем убедиться, что после этого не съехала ни одна кнопка. | 6 359 |
| 12 | Кеш занимал 800 МБ. Большая часть переводов просто лежала без дела
Uber обслуживает миллионы переводов в секунду. Держать всё в памяти удобно, пока очередное обновление не создаёт рядом вторую копию кеша и не заканчивается память.
Команда перенесла редко используемые переводы на диск. В RAM оставили индекс ключей и кеш востребованных значений. Хранилище разделили на 256 частей, чтобы запросы меньше мешали друг другу при блокировках.
В приведённом примере расход памяти снизился с 800 до 80–120 МБ. При обновлении нужны ещё около 40 МБ метаданных вместо второй копии на 800 МБ.
Чтобы после обновления не получать волну чтений с диска, новый кеш заранее заполняют переводами, которые запрашивали за последние 15 минут. Экономия памяти здесь потребовала учесть и то, что произойдёт при следующей перезагрузке данных. | 6 446 |
| 13 | Всем привет, админ на связи!
По моим наблюдениям сегодня резко выросла скорость развития многих технологических проектов. Несложно догадаться, что за этим стоит активное внедрение ИИ во всех процессы бизнеса.
То же самое с digital направлением, где агенты позволяют как нарастить темпы работы, так и предлагают новые форматы.
Чтобы не отстать от рынка, я иду на конференцию AI BOOST’26. Хочу там познакомиться с владельцами таких агентств и бизнеса, узнать из первых уст, чем дышит рынок и набраться полезных инсайтов для собственных проектов.
Программа рассчитана на 22 и 23 октября. Я там планирую быть с момента открытия. Приглашаю вас с собой! Можем даже там пересечься между докладами или на афтепати. | 6 625 |
| 14 | Изменений стало вдвое больше. Проверки не успели за разработкой
В августе Spotify влил около 17 тысяч изменений против 8100 годом ранее. Компания рассказала, что меняет в контроле качества на фоне роста автоматизации и работы с ИИ.
Один автоматический апдейт зависимости прошёл проверки, но сломался в продакшене. Теперь компания усиливает защитные проверки и откат, а такие обновления планирует на рабочие часы команд-владельцев.
В обработке контента были другие пробелы: ошибки могли долго оставаться незамеченными, а пакетные задания конкурировали с новыми загрузками. Добавили сквозной мониторинг, изменили приоритеты и расширили мощности.
В рассмотренных инцидентах Spotify не нашла существенного прямого вклада кода, написанного ИИ. Зато увидела, что объём изменений рос быстрее возможностей их проверки. Вывод относится к данным и разбору самой компании. | 7 362 |
| 15 | Больше реплик Git — медленнее push. GitHub меняет эту связку
В нынешней архитектуре GitHub репозиторий обычно хранится на пяти файловых серверах. Дополнительные копии помогают обслуживать чтение, но каждая участвует и в записи.
Поэтому масштабирование чтения увеличивает работу при push. Когда тысячи агентов и CI-задач обращаются к одному репозиторию, эта связь становится ограничением.
В плане новой Git-инфраструктуры GitHub разделяет надёжное хранение и масштабирование обслуживания. Согласование хотят сосредоточить на обновлении ссылки на коммит; работу с объектами, проверки и обслуживание распараллеливать там, где это допускает корректность.
Уплотнение данных и сборку мусора выносят с серверов, отвечающих на живые запросы. Это описание текущей перестройки: статья не утверждает, что весь GitHub уже переведён на новую архитектуру. | 7 561 |
| 16 | Старый токен Docker Hub получал права нового владельца
При превращении личного аккаунта в организацию Docker Hub переносил его PAT-токены указанному владельцу. Сам секрет токена оставался прежним, а согласия нового владельца не требовалось.
Поэтому известный создателю аккаунта токен мог начать работать в реестре от имени другого пользователя. В пределах разрешений он позволял обращаться к образам, включая их публикацию или удаление.
Docker опубликовал разбор CVE-2026-105445. Ошибку исправили 30 сентября: перенос PAT убрали. Проверка примерно 304 тысяч публикаций образов с перенесёнными токенами не выявила признаков эксплуатации.
Доступ к веб-интерфейсу и смене пароля ошибка не давала. Урок для проектирования доступа: смена владельца объекта требует отдельной проверки того, что происходит с уже выданными учётными данными. | 7 176 |
| 17 | Два ядра CPU на одном сервере могут стоить трёх на другом
В платформе Odin у Uber есть разные поколения x86 и ARM. Производительность одного ядра между крайними вариантами отличается почти вдвое. Одинаковый лимит CPU даёт разный запас мощности.
Для сервисов с данными это особенно неприятно: при смене лидера нагрузка может переехать на более медленный сервер.
В Uber ввели нормализованные вычислительные единицы. Потребление переводят в общую шкалу с коэффициентом производительности хоста. По ней рассчитывают нужную мощность, затем переводят её обратно в число ядер конкретной машины.
Одних синтетических тестов не хватило. Коэффициенты уточняют по продакшену отдельно для разных технологий: Cassandra и Kafka по-разному используют одно железо. Универсальная оценка «этот сервер быстрее на 30%» здесь теряет точность. | 7 632 |
| 18 | Миллионы баз данных не должны ходить в один центр за каждым запросом
В Cloudflare D1 каждая база опирается на отдельный SQLite Durable Object. Баз можно создать миллионы — но центральный каталог их расположения легко превратить в узкое место.
В разборе архитектуры D1 показано разделение работы. Создание, удаление и другие управляющие операции используют центральный PostgreSQL. Для выполнения SQL маршрутизационные метаданные читаются через распределённый Workers KV и кеши.
Запросу к базе обычно не требуется обращаться к центральному каталогу. А фоновые heartbeat-сообщения сверяют состояние объектов с PostgreSQL и помогают исправлять последствия частично выполненных операций.
Например, объект создали, но запись в каталог не удалась. Следующая сверка обнаружит, что такой базы нет, и позволит убрать оставшийся объект. | 7 876 |
| 19 | Секрет не попал в лог. Зато сохранился в кеше CI
Miri, инструмент проверки Rust-кода, сохранял переменные окружения в target/. Если запуск имел доступ к токенам, они тоже могли оказаться на диске.
Дальше срабатывала обычная оптимизация GitHub Actions: каталог кешировали, чтобы ускорить следующий запуск. Pull request мог прочитать этот кеш и извлечь секреты, хотя напрямую переменные ему не передавали.
В сообщении команды Rust перечислены условия: запуск Miri с секретами, кеширование target и доступ PR к кешу. Исправление ограничивает сохраняемые переменные; выпуск с ним указан как nightly от 22 сентября.
Для затронутых сборок команда рекомендует очистить кеш и рассмотреть ротацию секретов. Обновление инструмента не удаляет старые артефакты, а секреты стоит передавать только тем шагам, которым они нужны. | 7 415 |
| 20 | SIMD в Go: сложные инструкции спрятали за обычными методами
SIMD выполняет одну операцию сразу над несколькими элементами: например, складывает векторы чисел вместо поочерёдной обработки каждого значения.
В экспериментальном `simd/archsimd` Go 1.27 к amd64 добавились arm64 и wasm. API включается через GOEXPERIMENT=simd и позволяет обращаться к возможностям конкретной архитектуры из Go.
Названия не копируют длинные имена инструкций. Сложение выглядит как x.Add(y), а операция с маской — как x.Add(y).Masked(m). Компилятор может свести такое выражение к подходящей машинной инструкции.
Это уменьшает число специальных методов и оставляет оптимизатору часть работы. Но API экспериментальный, набор операций зависит от архитектуры, а выигрыш нужно проверять на своём алгоритме и процессоре. | 7 420 |
