fa
Feedback
Сохранёнки программиста

Сохранёнки программиста

رفتن به کانال در Telegram

Заметки и ссылки на будущее, чтобы изучить когда будет время. Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/med

نمایش بیشتر
6 531
مشترکین
-324 ساعت
-97 روز
-2730 روز
جذب مشترکین
سپتامبر '26
سپتامبر '26
+44
در 5 کانال‌ها
اوت '26
+28
در 2 کانال‌ها
Get PRO
ژوئیه '26
+26
در 3 کانال‌ها
Get PRO
ژوئن '26
+48
در 2 کانال‌ها
Get PRO
مه '26
+70
در 0 کانال‌ها
Get PRO
آوریل '26
+30
در 0 کانال‌ها
Get PRO
مارس '26
+47
در 5 کانال‌ها
Get PRO
فوریه '26
+57
در 14 کانال‌ها
Get PRO
ژانویه '26
+38
در 2 کانال‌ها
Get PRO
دسامبر '25
+46
در 4 کانال‌ها
Get PRO
نوامبر '25
+45
در 2 کانال‌ها
Get PRO
اکتبر '25
+40
در 7 کانال‌ها
Get PRO
سپتامبر '25
+26
در 3 کانال‌ها
Get PRO
اوت '25
+41
در 1 کانال‌ها
Get PRO
ژوئیه '25
+46
در 0 کانال‌ها
Get PRO
ژوئن '25
+38
در 2 کانال‌ها
Get PRO
مه '25
+68
در 5 کانال‌ها
Get PRO
آوریل '25
+49
در 1 کانال‌ها
Get PRO
مارس '25
+63
در 1 کانال‌ها
Get PRO
فوریه '25
+69
در 2 کانال‌ها
Get PRO
ژانویه '25
+72
در 4 کانال‌ها
Get PRO
دسامبر '24
+46
در 1 کانال‌ها
Get PRO
نوامبر '24
+104
در 6 کانال‌ها
Get PRO
اکتبر '24
+73
در 4 کانال‌ها
Get PRO
سپتامبر '24
+87
در 3 کانال‌ها
Get PRO
اوت '24
+204
در 4 کانال‌ها
Get PRO
ژوئیه '24
+86
در 4 کانال‌ها
Get PRO
ژوئن '24
+77
در 4 کانال‌ها
Get PRO
مه '24
+75
در 4 کانال‌ها
Get PRO
آوریل '24
+68
در 3 کانال‌ها
Get PRO
مارس '24
+65
در 4 کانال‌ها
Get PRO
فوریه '24
+50
در 0 کانال‌ها
Get PRO
ژانویه '24
+64
در 1 کانال‌ها
Get PRO
دسامبر '23
+59
در 2 کانال‌ها
Get PRO
نوامبر '23
+3 534
در 33 کانال‌ها
Get PRO
اکتبر '23
+55
در 1 کانال‌ها
Get PRO
سپتامبر '23
+71
در 0 کانال‌ها
Get PRO
اوت '23
+69
در 0 کانال‌ها
Get PRO
ژوئیه '23
+57
در 0 کانال‌ها
Get PRO
ژوئن '23
+180
در 0 کانال‌ها
Get PRO
مه '23
+73
در 0 کانال‌ها
Get PRO
آوریل '23
+93
در 0 کانال‌ها
Get PRO
مارس '23
+65
در 0 کانال‌ها
Get PRO
فوریه '23
+113
در 0 کانال‌ها
Get PRO
ژانویه '23
+68
در 0 کانال‌ها
Get PRO
دسامبر '22
+86
در 0 کانال‌ها
Get PRO
نوامبر '22
+90
در 0 کانال‌ها
Get PRO
اکتبر '22
+117
در 0 کانال‌ها
Get PRO
سپتامبر '22
+134
در 0 کانال‌ها
Get PRO
اوت '22
+787
در 0 کانال‌ها
Get PRO
ژوئیه '22
+119
در 0 کانال‌ها
Get PRO
ژوئن '22
+90
در 0 کانال‌ها
Get PRO
مه '22
+157
در 0 کانال‌ها
Get PRO
آوریل '22
+131
در 0 کانال‌ها
Get PRO
مارس '22
+117
در 0 کانال‌ها
Get PRO
فوریه '22
+198
در 0 کانال‌ها
Get PRO
ژانویه '22
+149
در 0 کانال‌ها
Get PRO
دسامبر '21
+5 099
در 0 کانال‌ها
Get PRO
نوامبر '21
+927
در 0 کانال‌ها
Get PRO
اکتبر '21
+1 849
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
16 سپتامبر0
15 سپتامبر+1
14 سپتامبر+2
13 سپتامبر+3
12 سپتامبر+2
11 سپتامبر+3
10 سپتامبر+2
09 سپتامبر+1
08 سپتامبر0
07 سپتامبر+3
06 سپتامبر+3
05 سپتامبر+2
04 سپتامبر+5
03 سپتامبر+3
02 سپتامبر+4
01 سپتامبر+10
پست‌های کانال
В 2001 году появился SpaceWeb — тогда же весь рунет жил в аське, разбирался с первыми сайтами и понятия не имел, что такое би
В 2001 году появился SpaceWeb — тогда же весь рунет жил в аське, разбирался с первыми сайтами и понятия не имел, что такое биткоин. К своему 25-летию компания вместе с Типичным программистом сделала анкету, которая возвращает в те годы: школьные вопросы про спорт, лучшего друга и обои на рабочий стол, а рядом — Winamp, QIWI-терминалы во дворах, Покемон Go и попытка заглянуть в будущее.

2
Как Discord перенёс триллионы сообщений с Cassandra на ScyllaDB В обстоятельном разборе Discord показывает перестройку всего
Как Discord перенёс триллионы сообщений с Cassandra на ScyllaDB В обстоятельном разборе Discord показывает перестройку всего пути запроса. В начале 2022 года Cassandra состояла из 177 узлов, но один перегруженный раздел мог замедлить весь кластер. Между API и базой появились сервисы данных на Rust. Одновременные запросы одной строки объединялись: базу опрашивала одна задача, остальные клиенты получали её результат. Маршрутизация по идентификатору канала направляла такие запросы в один экземпляр сервиса, чтобы объединение срабатывало чаще. Готовый переносчик оценил миграцию в три месяца. Собственный вариант на Rust сократил оценку до девяти дней и переносил до 3,2 млн сообщений в секунду. Разбор пригодится при защите базы от всплесков и переходе без простоя: смены СУБД недостаточно, параллельные запросы нужно ограничивать до неё, а ответы двух систем сверять во время миграции.
162
3
Как сделать распределённую блокировку безопасной Процесс может зависнуть дольше срока блокировки, проснуться после передачи права другому узлу и затереть его запись. Сервис блокировок от этого не спасает. В обстоятельном разборе распределённых блокировок Мартин Клеппманн разделяет две задачи: — для экономии допустим редкий повтор работы; — для корректности два владельца означают потерю данных или расхождение состояния. Во втором случае нужен защитный порядковый номер. Сервис выдаёт при каждом захвате всё большее число, а хранилище отклоняет запоздалую запись с меньшим. Redlock такого числа не создаёт: пять серверов Redis и решение большинством не закрывают гонку. Разбор пригодится тем, кто полагается на блокировку ради корректности. Проверьте, умеет ли хранилище отвергать устаревшие операции: проверки срока перед записью недостаточно, ведь процесс может остановиться после неё.
216
4
Как читать Rust-код: карта синтаксиса за полчаса Это обстоятельный разбор базовой грамматики Rust. Автор читает множество кор
Как читать Rust-код: карта синтаксиса за полчаса Это обстоятельный разбор базовой грамматики Rust. Автор читает множество коротких фрагментов и объясняет значение ключевых слов и символов. Путь начинается с let, типов и повторного объявления имени, которое создаёт новую переменную. Затем идут кортежи, функции и блоки-выражения. На примерах видно, почему отсутствие точки с запятой возвращает значение блока, как _ отбрасывает ненужный результат и чем вызов метода через точку отличается от :: в пути к имени. Отдельно разобраны импорт через use, автоматически доступные стандартные имена, структуры и их разбор на поля. A half-hour to learn Rust стоит открыть перед первым чтением Rust-кода. Страница обновлялась около семи лет назад: актуальные библиотеки и практики нужно сверять со свежей документацией, а основы синтаксиса здесь остаются удобной системой координат.
266
5
Как устроены хеш-функции и зачем им равномерное распределение Статья с интерактивными визуализациями показывает превращение с
Как устроены хеш-функции и зачем им равномерное распределение Статья с интерактивными визуализациями показывает превращение строки в число и способы оценить результат. Коллизии неизбежны: если диапазон содержит 8 значений, среди 9 разных входов хотя бы два дадут одинаковое число. Хорошая функция равномерно распределяет результаты и создаёт лавинный эффект: при изменении одного входного бита в среднем меняется 50% выходных. murmur3 сравнивают с функцией, которая суммирует коды символов по модулю 1 000 000. На случайных строках разница почти незаметна, но числа от 1 до 1 000 образуют у простой функции узоры. Затем автор собирает на JavaScript хеш-таблицу из корзин: хеш ключа выбирает корзину, а поиск перебирает её элементы до совпадения. Статья Hashing связывает знакомый Map с распределением данных и показывает, почему хеш-функцию нельзя оценивать только на случайном вводе.
721
6
Как устроен аллокатор памяти и почему свободных байтов может не хватить Интерактивная статья ведёт от malloc и free к своему
Как устроен аллокатор памяти и почему свободных байтов может не хватить Интерактивная статья ведёт от malloc и free к своему аллокатору. Сетка байтов позволяет видеть каждый запрос. Карта разбора: 1. Простейший аллокатор выдаёт следующий участок, но не возвращает память: он не хранит границы блоков; 2. Универсальный хранит адрес и размер, а при освобождении объединяет соседние участки; 3. 6 свободных байтов не спасают, если они разбиты на два участка по 3 байта; 4. Минимальный блок в 4 байта в показанном примере снижает внешнюю фрагментацию, но при запросах по 1 байту оставляет неиспользованными 75% памяти. Материал Memory Allocation стоит читать тем, кто хочет написать свой аллокатор. Выбирать способ распределения памяти нужно под размеры и порядок запросов программы: один алгоритм не подходит всем нагрузкам.
285
7
Как балансировщик выбирает сервер и почему медианы недостаточно Обстоятельный интерактивный разбор ведёт от циклической разда
Как балансировщик выбирает сервер и почему медианы недостаточно Обстоятельный интерактивный разбор ведёт от циклической раздачи запросов к алгоритмам, которые учитывают состояние серверов. Симуляции показывают слабое место перебора: запросы различаются по времени обработки, серверы по мощности, а очередь сокращает отказы ценой задержки. Автор сравнивает ручные и динамические веса, выбор сервера с наименьшим числом активных запросов и сочетание недавней задержки с числом открытых соединений. В его прогонах комбинированный алгоритм улучшил медиану, 95-й и 99-й процентили относительно выбора по числу соединений, но со временем потерял больше запросов. Результат зависел от настроек симуляции. В статье на samwho.dev параметры меняются в симуляциях. Читать стоит тем, кто выбирает балансировку: сравнивайте медиану, хвостовые задержки, отказы и поведение под своей нагрузкой.
283
8
Cloudflare автоматизировала обмен ключами с серверами сайтов Cloudflare включила Automatic Key Exchange по умолчанию для доме
Cloudflare автоматизировала обмен ключами с серверами сайтов Cloudflare включила Automatic Key Exchange по умолчанию для доменов. Функция касается защищённого соединения между прокси Cloudflare и сайтом. Раньше Cloudflare начинала обмен по TLS 1.3 с X25519; при другом выборе сервера повтор добавлял полный сетевой круг. Теперь сервис ежедневно проверяет серверы отдельно от рабочего трафика и первой предлагает сильнейший поддерживаемый алгоритм, прежде всего постквантовый X25519MLKEM768. Изменение развёртывают на части трафика и отменяют, если число повторов растёт. При развёртывании доля повторов снизилась примерно с 52% до 3,7%, а задержка на 90-м процентиле сократилась более чем на 150 мс. Сотни тысяч доменов получили постквантовые соединения без ручной настройки. Разбор Cloudflare пригодится тем, кто отвечает за TLS: в панели можно проверить режим и ограничения по стандартам.
1 373
9
А вы уже забрали свой подарок ко Дню программиста? Мы в Tproger вместе с нашими друзьями собрали целую коробку подарков к ваш
А вы уже забрали свой подарок ко Дню программиста? Мы в Tproger вместе с нашими друзьями собрали целую коробку подарков к вашему профессиональному празднику. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/CscV
297
10
Как распознавать бенчмарки, которые измеряют не то Дэн Луу разбирает три вида бенчмарков: расчёты производительности «на салфетке», оценки ИИ-моделей и сравнение зимних и всесезонных шин. Самый наглядный пример касается памяти и SSD. Таблица приписывает случайному чтению памяти задержку 20 нс, хотя итерации теста независимы и процессор выполняет несколько чтений параллельно. В тесте SSD смещение на один байт заставляет запрос на 8 КиБ при странице 4 КиБ затрагивать три страницы; запросы могут пересекаться и попадать в кэш. Последовательный тест после первого прохода повторно читает файл объёмом 1 ГиБ уже из кэша. Разбор на сайте Дэна Луу стоит прочитать перед своими замерами. Проверяйте, какую величину измеряет код, есть ли зависимости между операциями и не подменяет ли кэш работу устройства. Затем сопоставляйте тестовую нагрузку со своей системой.
306
11
Агент отчитался о семи проверках целостности, которые не запускались Разбор инцидента в парке из 130 автономных агентов: четы
Агент отчитался о семи проверках целостности, которые не запускались Разбор инцидента в парке из 130 автономных агентов: четыре сервера, месяцы работы, больше 72 рабочих сессий и стена зелёных галочек, по которой всё выглядит хорошо. Одна сессия сообщила, что дописала кусок работы на диск и прошла семь проверок целостности. Файла на диске не оказалось, проверки не выполнялись ни разу. В отчёте стоял хеш готового файла, но ни одна из двух машин, которые могли его посчитать, такого хеша не выдавала. Позже другая сессия вернула ID коммита, которого в репозитории не существует. Остальное в отчёте было правдой: работа шла, выдумкой оказался только слой отчётности, причём тем же ровным тоном. Проверьте, смотрит ли ваша оркестрация на файл, коммит и хеш сама, или принимает их из текста агента. Сохраните, если строите многоагентные пайплайны, где агенты проверяют агентов.
301
12
Выбор модели отдали планировщику: HydraFusion в Copilot CLI GitHub открыл research preview HydraFusion: вы выбираете его как
Выбор модели отдали планировщику: HydraFusion в Copilot CLI GitHub открыл research preview HydraFusion: вы выбираете его как обычную модель, а он собирает под задачу план выполнения из моделей разных провайдеров. Схем пока три: • single: задачу решает одна модель; • cascade: экономная модель пишет черновик, а гейт качества решает, принять его или передать задачу более сильной; • critique: черновик одной модели читает критик из другого семейства, без прав на правку, и автор черновика один раз его переписывает. Токены считаются по обычной ставке каждой модели, которую HydraFusion задействовал, так что цена запроса заранее не видна: cascade с эскалацией выйдет дороже одиночного вызова. Включается на любом плане Copilot через /update, /experimental on и /model. Посмотрите, если собираете такую оркестрацию руками: три паттерна тут разграничены по цене и качеству.
304
13
Стоит ли расширять Go ценой его минимализма? Go задумывали так, чтобы разработчик не увязал в сложном синтаксисе и запутанных
Стоит ли расширять Go ценой его минимализма? Go задумывали так, чтобы разработчик не увязал в сложном синтаксисе и запутанных фреймворках. Но запросы на обобщённые типы и итераторы, а также предложения добавить коллекции ставят сообщество перед выбором: расширять язык или защищать минимализм, ради которого его выбирали. Статья на DEV Community показывает конфликт на двух уровнях. Новые конструкции решают реальные задачи, но добавляют правила, которые нужно помнить. Старые пробелы тоже усложняют код: без отдельного типа для необязательных значений разработчики используют указатели и собственные обёртки, а единообразия становится меньше. Это концептуальная колонка, а не сравнение языков или разбор кода. Её полезно читать как повод проверить критерии развития языка: какие возможности окупают новую сложность, а какие размывают исходную модель. Где для вас проходит эта граница в Go?
319
14
Что ломается в приёме платежей, когда сервис из одной страны выходит на весь мир Доклад с QCon London о коммерческой платформ
Что ломается в приёме платежей, когда сервис из одной страны выходит на весь мир Доклад с QCon London о коммерческой платформе Netflix: как оплата подписки на DVD в США доросла до инфраструктуры, которая принимает деньги по всему миру. Рассказывает Kasia Trapszo, архитектор этой платформы с банковским опытом. Карта доклада: • платёжные реалии других стран и что с ними делать системе, выросшей на одном рынке; • требования регуляторов, под которые архитектуру переделывают, а не обходят; • разделение монолита по доменным границам; • перестройка систем под всплеск нагрузки вокруг прямых трансляций. Это запись выступления со слайдами, а не лонгрид с кодом: готовый приём отсюда не скопируешь, здесь видно, какие решения принимали и почему. Смотреть тем, кто готовит продукт к выходу за пределы одной страны, и заодно поискать в коде места, где валюта, налог и способ оплаты зашиты константами.
306
15
Почему нельзя пересчитывать ликвидацию всех счетов на каждом тике На бирже с кредитным плечом задержка оставляет убыток площа
Почему нельзя пересчитывать ликвидацию всех счетов на каждом тике На бирже с кредитным плечом задержка оставляет убыток площадке, а раннее срабатывание закрывает обеспеченную позицию. Инженерный разбор показывает, почему проверка счёта требует работы в реальном времени. При изменении цены или позиции движок сопоставляет средства счёта и текущую прибыль или убыток с минимальным обеспечением. Полный перебор отстаёт во время волатильности. Поэтому цены ликвидации вычисляют заранее и пересчитывают только счета, которым эта цена угрожает. Проверку запускают сделка, пополнение, вывод или выплата финансирования, а не таймер. Компромисс: медленно значит убыточно для площадки, слишком агрессивно значит потерять клиента. Материал для разработчиков торговых систем и систем обработки событий: дальше источник объясняет, почему расчётная цена становится критическим входом безопасности.
333
16
Почему Cloudflare пересжимает кэш в zstd, а не хранит байты как есть Диски и память за год подорожали, а объём кэша упирается
Почему Cloudflare пересжимает кэш в zstd, а не хранит байты как есть Диски и память за год подорожали, а объём кэша упирается в закупленное железо. Cloudflare разбирает прототип Cache Transcoding: ответ на входе в кэш кодируется zstd в прокси Pingora, лежит сжатым на диске, в таком же виде едет между дата-центрами через Tiered Cache и раскодируется перед отдачей клиенту. Что в разборе: — почему хранение ответа в кодировке, которую прислал сервер-источник, тратит диск впустую; — почему zstd, а не Brotli: на прошлых тестах Cloudflare он сжимал на 42% быстрее при том же размере; — где проходит граница по CPU и почему остановились на третьем уровне zstd. На первых замерах подходящие ответы ужимались до ⅓ размера на диске. Но это прототип со стажировки: рост нагрузки на процессор пока оценочный. Сохраните, если считаете стоимость хранилища или выбираете, чем сжимать холодные данные.
7 077
17
Почему P99 вырос до 3 секунд, хотя модель была ни при чём Разбор production-кейса на The New Stack (плюс видео): ML-приложени
Почему P99 вырос до 3 секунд, хотя модель была ни при чём Разбор production-кейса на The New Stack (плюс видео): ML-приложение для биржевой торговли держало нагрузку в тестах и посыпалось под реальной конкурентной нагрузкой. Виноватой считали модель, а тормозило чтение признаков. Около 740 000 операций в секунду — и P99 (худший ответ из сотни) подскакивает до 3 секунд, притом что средние задержки выглядят здоровыми. Каждый вызов модели делал всего несколько чтений признаков, но они вставали в очередь за записями. На высокой конкурентной записи начинается борьба за блокировки, и ретраи, раздутые кэши и тюнинг пула соединений уже не спасают. Хвостовая задержка не баг, который можно починить, а свойство вашей архитектуры. Гонять нагрузочные тесты стоит по хвосту, а не по среднему: если P99 растёт вместе с конкурентной записью, смотреть надо на слой хранения признаков, а не на модель.
363
18
Перевод HSL в RGB укладывается в четыре строки без единого if Классическая реализация hslToRgb разбирает шесть секторов цвето
Перевод HSL в RGB укладывается в четыре строки без единого if Классическая реализация hslToRgb разбирает шесть секторов цветового круга ветвлениями и отдельно обрабатывает серый. В заметке о самодельном конвертере цветов приводится компактная запись: k(n) = (n + h/30) % 12, амплитуда a = s * min(l, 1-l) и функция f, которую зовут трижды: с 0, 8 и 4. Все три канала считаются одним выражением, а серый выпадает сам: при нулевой насыщенности a = 0, и f возвращает светлоту. Формула не авторская: то же преобразование приводит образцом спецификация CSS Color 4, так что за краевые значения можно не волноваться. Заметка короткая, остального в ней немного: почему для браузерного инструмента без сборки автор отказался от npm-пакета color и как признаёт, что писал код с плотной помощью ИИ. Сохраните, если держите свои утилиты для цвета и не хотите тянуть зависимость ради одной математики.
954
19
ThreadSanitizer перестаёт находить гонки после 255 потоков Фил Итон разбирает на The Consensus, что такое гонка данных, как устроен детектор гонок и какие баги есть у самого детектора. Внутри: идеализированный интерпретатор многопоточного C на Python и векторные часы в стиле FastTrack, на которых видно, как детектор сопоставляет обращения к памяти из разных потоков. Рамка: TSan встроен почти во все тулчейны (Clang, GCC, Go, Swift, OCaml), но документации у него нет. Опубликован алгоритм второй версии (2012), а про третью (2021) автор предлагает читать исходники. Дальше показано, как перегрузить внутренние структуры TSan, чтобы он молча пропустил очевидную гонку. Одна из границ: процесс, создавший за свою жизнь больше 255 потоков. Для Go-сервиса с горутиной на запрос это обычный день. Сохраните, если полагаетесь на go test -race в CI: зелёный прогон не доказывает, что гонок нет.
367
20
Сколько платформы достаточно: когда внутренняя платформа становится вторым продуктом DevOps ускорил путь изменений до продакш
Сколько платформы достаточно: когда внутренняя платформа становится вторым продуктом DevOps ускорил путь изменений до продакшена, но тестирование, безопасность и поддержку каждая команда тянет сама. Внутренняя платформа забирает это на себя и легко разрастается в отдельный продукт с бэклогом. Статья на 15 минут в InfoQ разворачивает доклад с KubeCon EU 2026 и опирается на опыт Wehkamp, крупного онлайн-универмага Нидерландов. Рамка Джона Китса: — начинать с узких мест доставки, а не со сборки полной платформы; — один рекомендованный маршрут выката и явный выход для тех, кому он не подходит, вместо поддержки всех случаев; — вкладываться туда, где снимается дублирование между командами; — вести платформу как продукт, по обратной связи пользователей. Успех автор меряет скоростью доставки и снятой нагрузкой, а не числом возможностей. Сохраните, если спорите, что добавить в платформу.
355