en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Типичный программист

Типичный программист

Open in Telegram

Всё самое интересное по программированию Разместить рекламу: @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 77 972 subscribers, ranking 1 649 in the Technologies & Applications category and 7 347 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 77 972 subscribers.

According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -273 over the last 30 days and by -26 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 12.26%. Within the first 24 hours after publication, content typically collects 5.84% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 9 556 views. Within the first day, a publication typically gains 4 553 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 23.
  • 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 27 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.

77 972
Subscribers
-2624 hours
-867 days
-27330 days
Posts Archive
Голое железо и root-доступ, ВМ со снапшотами по расписанию, Kubernetes с GitOps в проде или всё сразу. В фановом тесте от ком
Голое железо и root-доступ, ВМ со снапшотами по расписанию, Kubernetes с GitOps в проде или всё сразу. В фановом тесте от команды Deckhouse из таких ответов складывается один из 10 типов инфраструктуры. Укротитель давно научился жить с ВМ и Kubernetes рядом, но устал от двух центров управления. Соковыжималка запускает базы и ML прямо на железе, чтобы гипервизор не съедал производительность. Антиквар не трогает систему, которая работает с нулевых. А Повелителю облаков уютно до первого кругленького счёта. Грузчик и Коллекционер выпадают реже всех. Если достался один из них, ссылкой на результат точно стоит поделиться с командой. → Пройти тест и узнать свой тип

Git умеет запоминать ваши решения конфликтов Долгоживущая ветка, очередной rebase и знакомый конфликт в том же участке файла. Кажется, это решение уже набирали. Git умеет его запомнить: механизм rerere сохраняет исходный конфликт и результат ручной правки, если включён rerere.enabled. При следующем подходящем конфликте он пытается применить прежнее решение через трёхстороннее слияние. Это полезно, когда ветку приходится несколько раз сверять с изменяющейся основной веткой. Записывать решение вручную отдельной командой при каждом шаге обычно не нужно: merge, commit и rebase сами вызывают rerere в нужных местах. Но память Git не заменяет проверку смысла. Старый ответ может чисто примениться к коду и всё равно оказаться неверным. В базовом режиме без autoupdate результат остаётся в рабочем дереве, а индекс не меняется. Перед git add остаются просмотр diff и тесты. Экономится повторное редактирование, а ответственность за решение остаётся у разработчика.

SQLite может завершить коммит удалением файла Транзакция меняет несколько страниц базы, а питание может пропасть между двумя записями. Как после перезапуска получить «всё или ничего»? В разборе атомарного коммита SQLite важнейший момент выглядит буднично: удаляется файл журнала. Речь о rollback journal в режиме DELETE. Сначала SQLite сохраняет исходные страницы в журнал и сбрасывает его на устойчивый носитель. Затем записывает изменённые страницы базы и тоже синхронизирует их. Только после этого удаляет журнал. Пока он пригоден для восстановления, прерванные изменения можно откатить. После удаления транзакция считается завершённой. При открытии базы SQLite проверяет не просто наличие файла, а признаки «горячего» журнала, включая заголовок и блокировки. Всё это опирается на корректную работу синхронизации и хранилища. У WAL другой протокол. Здесь же эффект «всё или ничего» получается из строгого порядка действий и чёткой границы завершения.

Option в Rust не обязательно занимает дополнительное место У значения есть два состояния: оно присутствует или его нет. Кажется, для Option<T> к самому значению придётся добавить отдельный флаг. Но тип NonZeroU32 уже оставляет свободное состояние: число ноль в нём запрещено. Именно ноль можно использовать для None, а остальные значения остаются для Some. Поэтому Option<NonZeroU32> имеет тот же размер и выравнивание, что и NonZeroU32. Это гарантия документации Rust, а не удачное совпадение в одном эксперименте с компилятором. Такой приём называют null pointer optimization, хотя работает он и с числами NonZero. Гарантия распространяется на конкретный список типов, в том числе ссылки и некоторые указатели. Переносить её на любой Option<T> нельзя. Здесь ограничение типа даёт полезный бонус: отсутствие значения помещается в уже свободную комбинацию битов.

Кто испортил это поле? В объекте уже лежит неправильное значение. Где его записали, неизвестно, а при следующем запуске ошибка может исчезнуть. Отладчик rr предлагает сначала поймать сбой под записью, а потом сколько угодно раз разбирать один и тот же запуск в gdb. В примере проекта у объекта Firefox неверная ширина. Разработчик ставит watch -l mRect.width и выполняет reverse-cont. Отладчик идёт назад и останавливается на присваивании, которое изменило поле. Адреса объектов и порядок событий при повторном воспроизведении сохраняются, поэтому найденные зацепки не теряются после перезапуска отладки. Это работа с сохранённым исполнением. Для rr нужны Linux и совместимый процессор, в виртуальной машине ещё и доступ к аппаратным счётчикам. Есть ощутимая цена для параллельного кода: rr эмулирует одноядерную машину. Зато пойманный редкий баг больше не приходится ловить заново.

Один зашифрованный архив, несколько получателей и никакого общего пароля Нужно передать архив нескольким коллегам. Можно завести общий пароль и потом разбираться, кому его уже переслали. У утилиты age есть другой вариант: один файл шифруется на несколько публичных ключей, и каждый получатель открывает его своим секретным ключом. Список адресатов задаётся повторением -r или файлом с ключами через -R recipients.txt. Сами секретные ключи друг другу передавать не нужно. А благодаря обычным потокам Unix вывод tar можно сразу направить в age, без промежуточного незашифрованного архива на диске. Есть важная граница: шифрование само по себе не подтверждает личность отправителя. Принадлежность публичных ключей тоже нужно проверить отдельно. Удобство здесь вполне конкретное: несколько человек читают один архив, а передавать друг другу личные секретные ключи не приходится.

Как поймать причину торможения, которое уже закончилось Запрос иногда зависает, но к моменту включения трассировки всё снова работает. Тут полезен flight recorder из Go 1.25: он заранее собирает недавние события runtime в буфер в памяти. Когда программа замечает проблему, из буфера можно сохранить предшествующий ей фрагмент. В примере команды Go снимок запускается после первого ответа дольше 100 мс. Трасса приводит к неожиданному виновнику: defer b.mu.Unlock() внутри цикла. Блокировки снимаются только при выходе из функции, а та ещё успевает отправить HTTP-запрос. Всё это время другие горутины ждут. Самописец здесь помогает сохранить именно момент ожидания, который иначе легко пропустить. Порог в 100 мс относится к примеру, а буфер и сбор событий расходуют ресурсы. Зато не нужно копить трассу за несколько дней работы сервера ради одного редкого сбоя.

Сколько ключей придётся помнить ради дедупликации потока? Найти повторное событие по ключу легко, пока можно помнить все ключ
Сколько ключей придётся помнить ради дедупликации потока? Найти повторное событие по ключу легко, пока можно помнить все ключи за всё время. В непрерывном потоке такое состояние растёт без конца. В разборе дедупликации через Flink SQL автор сравнивает варианты с разными ограничениями. Срок хранения состояния, TTL, ограничивает память, но меняет поведение: после удаления ключа старый дубль снова может пройти как новое событие. Важен и результат запроса. Один вариант сразу выдаёт строку, а позже присылает её обновление. Другой ждёт, чтобы учесть запоздавшие события. Получатель должен уметь работать с выбранным режимом. Даже настройка TTL требует проверки: в рассмотренной версии подсказка STATE_TTL не применяется к оператору дедупликации. До запуска стоит прогнать поздний дубль, истечение срока хранения и обновление результата — именно на них короткий SQL начинает вести себя неожиданно.

Проверенный бот тоже может перегрузить сайт Известный поисковый робот может ходить только по разрешённым страницам и всё равн
Проверенный бот тоже может перегрузить сайт Известный поисковый робот может ходить только по разрешённым страницам и всё равно создавать слишком большую нагрузку. Проверка владельца бота сама по себе этого не предотвращает. Cloudflare описала подход к постоянной оценке проверенных ботов. Среди сигналов — соблюдение robots.txt и реакция на HTTP 429: снижает ли робот частоту запросов, учитывает ли указание подождать. Так доверие к боту должно зависеть от наблюдаемого поведения после проверки его личности. Владельцу сайта нужна возможность понять, за что робот получил определённую оценку. Публичные оценки в Cloudflare Radar пока заявлены как следующий шаг. Уже сейчас при разборе нагрузки полезно смотреть, что происходит после ответа «слишком много запросов»: клиент действительно отступает или немедленно приходит снова.

Маршрутизатору базы не обязательно понимать каждую колонку Результат запроса проходит через промежуточный сервис. Тот превращ
Маршрутизатору базы не обязательно понимать каждую колонку Результат запроса проходит через промежуточный сервис. Тот превращает каждую строку в объекты, разбирает значения, а потом собирает те же байты для клиента. Даже когда менять ничего не требовалось. В маршрутизаторе Neki PlanetScale сохраняет ответы PostgreSQL в исходном формате протокола. Если результат можно передать дальше, значения колонок остаются байтами. Появился LIMIT — нужно найти границы строк и выбрать нужные. Появилась общая сортировка результатов с нескольких шардов — понадобится разобрать ключ сортировки. Остальные колонки можно по-прежнему не преобразовывать в типизированные значения. Для вычисления агрегатов разбор всё же потребуется. Neki переходит к более подробному представлению данных по мере необходимости: отдельный сетевой переход остаётся, но часть промежуточных объектов создавать больше не нужно.

Профилировщик Python 3.15 подключается к живому процессу В Python 3.15 появился Tachyon — статистический профилировщик из pro
Профилировщик Python 3.15 подключается к живому процессу В Python 3.15 появился Tachyon — статистический профилировщик из profiling.sampling. Он снимает образцы стеков и помогает увидеть, где программа проводит время. Подключиться можно без изменения её кода. В разборе Astral профилируют обработку молекул через RDKit. Заметная доля образцов стека приходится на функцию, которая объединяет вложенные списки через sum(symbols, []). Такая запись многократно создаёт и копирует промежуточные списки. По мере роста входа работа становится квадратичной. В статье её заменяют разворачиванием списков с новым синтаксисом Python 3.15. Отчёт помогает добраться до конкретной функции, хотя внешне задача выглядит как вычисления химической библиотеки. При подключении к рабочему сервису всё равно стоит измерить издержки профилирования на своей нагрузке.

GitHub автоматизировал проверку доступов и репозиториев В общей организации остаются доступы подрядчиков и репозитории, владе
GitHub автоматизировал проверку доступов и репозиториев В общей организации остаются доступы подрядчиков и репозитории, владельцы которых давно заняты другим. Ручная ревизия быстро превращается в задачу «когда-нибудь потом». GitHub собрал для этого приложение Evergreen. Раз в квартал оно просит подтвердить доступ внешних участников. Неактивные репозитории проходят отдельную проверку перед архивированием. Обсуждение идёт в issues, задачи запускаются через GitHub Actions, состояние хранится в JSON в Git. У решения остаётся история: кто получил предупреждение, что подтвердили и почему доступ отозвали. Молчание тоже имеет последствия, но после срока на ответ. Неподтверждённый доступ снимают, заброшенный репозиторий архивируют. Архивирование сохраняет код и историю — это не удаление проекта.

С LZ4 PostgreSQL прочитал весь текст ради первых 200 символов Нужны первые 200 символов большого текста. Кажется, для этого д
С LZ4 PostgreSQL прочитал весь текст ради первых 200 символов Нужны первые 200 символов большого текста. Кажется, для этого достаточно прочитать небольшой кусок. Но способ сжатия меняет объём работы. В эксперименте PlanetScale сравнили pglz и LZ4 на PostgreSQL 18. Для pglz база умеет оценить, сколько сжатых данных нужно для начала строки. Для LZ4 такой оценки нет: сначала приходится забирать значение целиком. На ста значениях примерно по 1 МБ получение начала текста заняло около 1 мс с pglz и 16 мс с LZ4. Обращений к страницам получилось 301 против 6234. Данные уже находились в памяти. LZ4 при этом быстрее загружал другой набор данных — JSON-документы. Выбирать сжатие только по скорости записи рискованно: для списка превью, полного документа и чтения диапазона байтов база выполняет разную работу.

Почему remove не удаляет число из Set В цикле добавляем short в Set, затем вызываем remove(i - 1). Кажется, предыдущий элемен
Почему remove не удаляет число из Set<Short> В цикле добавляем short в Set<Short>, затем вызываем remove(i - 1). Кажется, предыдущий элемент должен исчезнуть. Но результат i - 1 имеет тип int и упаковывается в Integer. В коллекции лежат Short, поэтому ничего не удаляется. Компилятор доволен: метод remove(Object) принимает такой аргумент. В разборе Error Prone показано, как поймать эту ошибку ещё при сборке. Инструмент встраивается в javac и проверяет подозрительные конструкции с учётом типов. Другой пример — YYYY в формате даты. Это год по нумерации недель, поэтому на границе декабря и января имя отчёта может получить неожиданный год. К встроенным проверкам можно добавить свои правила через BugChecker. Например, запрещать характерные для проекта ошибки, пока они ещё не попали на ревью.

Больше CSS — меньше работы при открытии страницы Стили тоже могут тормозить React: JavaScript вычисляет их во время выполнени
Больше CSS — меньше работы при открытии страницы Стили тоже могут тормозить React: JavaScript вычисляет их во время выполнения, создаёт классы и вставляет правила. Цена появляется и на сервере, и при запуске компонентов в браузере. GitHub описал переход от CSS-in-JS к CSS Modules. Стили готовят заранее, а компоненты получают имена классов. В браузер отправляется больше обычного CSS, зато исчезает часть работы JavaScript. После миграции компонентов Primer время серверного рендеринга страницы сократилось на 55%, инициализации компонентов — на 25%. Это результат конкретного этапа, а не обещание такого ускорения любому проекту. Миграцию проводили постепенно, с флагами и визуальными проверками. Удалить библиотеку стилей оказалось проще, чем убедиться, что после этого не съехала ни одна кнопка.

Кеш занимал 800 МБ. Большая часть переводов просто лежала без дела Uber обслуживает миллионы переводов в секунду. Держать всё
Кеш занимал 800 МБ. Большая часть переводов просто лежала без дела Uber обслуживает миллионы переводов в секунду. Держать всё в памяти удобно, пока очередное обновление не создаёт рядом вторую копию кеша и не заканчивается память. Команда перенесла редко используемые переводы на диск. В RAM оставили индекс ключей и кеш востребованных значений. Хранилище разделили на 256 частей, чтобы запросы меньше мешали друг другу при блокировках. В приведённом примере расход памяти снизился с 800 до 80–120 МБ. При обновлении нужны ещё около 40 МБ метаданных вместо второй копии на 800 МБ. Чтобы после обновления не получать волну чтений с диска, новый кеш заранее заполняют переводами, которые запрашивали за последние 15 минут. Экономия памяти здесь потребовала учесть и то, что произойдёт при следующей перезагрузке данных.

Всем привет, админ на связи! По моим наблюдениям сегодня резко выросла скорость развития многих технологических проектов. Нес
Всем привет, админ на связи! По моим наблюдениям сегодня резко выросла скорость развития многих технологических проектов. Несложно догадаться, что за этим стоит активное внедрение ИИ во всех процессы бизнеса. То же самое с digital направлением, где агенты позволяют как нарастить темпы работы, так и предлагают новые форматы. Чтобы не отстать от рынка, я иду на конференцию AI BOOST’26. Хочу там познакомиться с владельцами таких агентств и бизнеса, узнать из первых уст, чем дышит рынок и набраться полезных инсайтов для собственных проектов. Программа рассчитана на 22 и 23 октября. Я там планирую быть с момента открытия. Приглашаю вас с собой! Можем даже там пересечься между докладами или на афтепати.

Изменений стало вдвое больше. Проверки не успели за разработкой В августе Spotify влил около 17 тысяч изменений против 8100 г
Изменений стало вдвое больше. Проверки не успели за разработкой В августе Spotify влил около 17 тысяч изменений против 8100 годом ранее. Компания рассказала, что меняет в контроле качества на фоне роста автоматизации и работы с ИИ. Один автоматический апдейт зависимости прошёл проверки, но сломался в продакшене. Теперь компания усиливает защитные проверки и откат, а такие обновления планирует на рабочие часы команд-владельцев. В обработке контента были другие пробелы: ошибки могли долго оставаться незамеченными, а пакетные задания конкурировали с новыми загрузками. Добавили сквозной мониторинг, изменили приоритеты и расширили мощности. В рассмотренных инцидентах Spotify не нашла существенного прямого вклада кода, написанного ИИ. Зато увидела, что объём изменений рос быстрее возможностей их проверки. Вывод относится к данным и разбору самой компании.

Больше реплик Git — медленнее push. GitHub меняет эту связку В нынешней архитектуре GitHub репозиторий обычно хранится на пят
Больше реплик Git — медленнее push. GitHub меняет эту связку В нынешней архитектуре GitHub репозиторий обычно хранится на пяти файловых серверах. Дополнительные копии помогают обслуживать чтение, но каждая участвует и в записи. Поэтому масштабирование чтения увеличивает работу при push. Когда тысячи агентов и CI-задач обращаются к одному репозиторию, эта связь становится ограничением. В плане новой Git-инфраструктуры GitHub разделяет надёжное хранение и масштабирование обслуживания. Согласование хотят сосредоточить на обновлении ссылки на коммит; работу с объектами, проверки и обслуживание распараллеливать там, где это допускает корректность. Уплотнение данных и сборку мусора выносят с серверов, отвечающих на живые запросы. Это описание текущей перестройки: статья не утверждает, что весь GitHub уже переведён на новую архитектуру.

Старый токен Docker Hub получал права нового владельца При превращении личного аккаунта в организацию Docker Hub переносил ег
Старый токен Docker Hub получал права нового владельца При превращении личного аккаунта в организацию Docker Hub переносил его PAT-токены указанному владельцу. Сам секрет токена оставался прежним, а согласия нового владельца не требовалось. Поэтому известный создателю аккаунта токен мог начать работать в реестре от имени другого пользователя. В пределах разрешений он позволял обращаться к образам, включая их публикацию или удаление. Docker опубликовал разбор CVE-2026-105445. Ошибку исправили 30 сентября: перенос PAT убрали. Проверка примерно 304 тысяч публикаций образов с перенесёнными токенами не выявила признаков эксплуатации. Доступ к веб-интерфейсу и смене пароля ошибка не давала. Урок для проектирования доступа: смена владельца объекта требует отдельной проверки того, что происходит с уже выданными учётными данными.