Это как раз то, что делает
madvise(MADV_DONTNEED) для anonymous mappings.Сценарий такой:
char *region = mmap(NULL, GB,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);
// потрогали часть страниц
madvise(region, GB, MADV_DONTNEED);
После
madvise виртуальные адреса остаются валидными. Процесс всё ещё «видит» тот же диапазон памяти.Но физические страницы, которые стояли за этим диапазоном, ядро может забрать обратно. То есть адресное пространство осталось, а реальная RAM освободилась.
При следующем обращении к этому участку процесс получит свежие zero-filled страницы. Старых данных там уже не будет.
Почему это полезно:
* можно держать большой виртуальный регион без постоянного удержания RAM
* аллокаторы могут возвращать неиспользуемые страницы ядру
* long-running процессы меньше раздувают RSS
* память можно переиспользовать без полного
munmap и нового mmapВажная деталь:
MADV_DONTNEED не означает «удали адреса». Это скорее сигнал ядру: «эти страницы мне сейчас не нужны, можешь забрать физическую память».Адреса остаются. Страницы уходят. Следующее чтение приносит нули.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Data-платформа растет, а TCO улетает в космос?
Собрать данные с датчиков — полдела. На практике платформенные инженеры и DevOps тонут в зоопарке инструментов. Развёртывание ИТ-систем без чёткого плана (особенно на собственных серверах) грозит хаосом в обслуживании, трудностями с обновлениями и нарушением требований безопасности.
10 июля в 12:00 подключайтесь к вебинару «Реализация IoT-сценариев на продуктах Deckhouse: быстрый запуск, масштабирование, аналитика».
На примере live demo покажем, как Deckhouse Kubernetes Platform (DKP) объединяет сбор, обработку и визуализацию данных датчиков в единую надёжную систему.
Зарегистрироваться бесплатно
Собрать данные с датчиков — полдела. На практике платформенные инженеры и DevOps тонут в зоопарке инструментов. Развёртывание ИТ-систем без чёткого плана (особенно на собственных серверах) грозит хаосом в обслуживании, трудностями с обновлениями и нарушением требований безопасности.
10 июля в 12:00 подключайтесь к вебинару «Реализация IoT-сценариев на продуктах Deckhouse: быстрый запуск, масштабирование, аналитика».
На примере live demo покажем, как Deckhouse Kubernetes Platform (DKP) объединяет сбор, обработку и визуализацию данных датчиков в единую надёжную систему.
Обсудим:
• как собрать event-driven-архитектуру на Kafka, PostgreSQL и ClickHouse без ручного управления;
• зачем изолировать operational и analytical workloads в enterprise-контуре;
• как выстроить telemetry pipeline с managed-подходом и observability «из коробки» с помощью DKP;
• как работает сквозная аналитика от датчика до отчёта — live demo IoT-сценария на примере готового решения
Зарегистрироваться бесплатно
Большинство “простых” shuffle-алгоритмов дают кривой рандом
Частая ошибка:
На вид всё нормально: каждый элемент случайно меняется местами с другим.
Но проблема в вероятностях.
Для массива из n элементов существует n! перестановок.
Хороший shuffle должен давать каждой перестановке одинаковый шанс.
Наивный вариант делает n шагов, и на каждом шаге выбирает индекс из полного диапазона 0..n-1.
В итоге некоторые перестановки появляются чаще других.
Правильный подход — Fisher-Yates shuffle:
Идея простая:
на каждом шаге мы выбираем элемент только из ещё не зафиксированной части массива.
Сначала выбираем последний элемент из всего массива.
Потом предпоследний — из оставшихся.
Потом следующий — из ещё меньшего диапазона.
Так каждая перестановка получает одинаковую вероятность.
В C++ лучше не писать через rand() % n, потому что там может быть ещё и modulo bias.
Нормальный вариант:
Shuffle - хороший пример, где код может выглядеть “рандомным”, но математически быть неправильным.
Частая ошибка:
for (int i = 0; i < n; i++) {
int j = rand() % n;
swap(a[i], a[j]);
}
На вид всё нормально: каждый элемент случайно меняется местами с другим.
Но проблема в вероятностях.
Для массива из n элементов существует n! перестановок.
Хороший shuffle должен давать каждой перестановке одинаковый шанс.
Наивный вариант делает n шагов, и на каждом шаге выбирает индекс из полного диапазона 0..n-1.
В итоге некоторые перестановки появляются чаще других.
Правильный подход — Fisher-Yates shuffle:
for (int i = n - 1; i > 0; i--) {
int j = random(0, i);
swap(a[i], a[j]);
}
Идея простая:
на каждом шаге мы выбираем элемент только из ещё не зафиксированной части массива.
Сначала выбираем последний элемент из всего массива.
Потом предпоследний — из оставшихся.
Потом следующий — из ещё меньшего диапазона.
Так каждая перестановка получает одинаковую вероятность.
В C++ лучше не писать через rand() % n, потому что там может быть ещё и modulo bias.
Нормальный вариант:
std::mt19937 rng(std::random_device{}());
for (int i = n - 1; i > 0; --i) {
std::uniform_int_distribution<int> dist(0, i);
int j = dist(rng);
std::swap(a[i], a[j]);
}
Shuffle - хороший пример, где код может выглядеть “рандомным”, но математически быть неправильным.
Media is too big
VIEW IN TELEGRAM
AvitoTech устраивает онлайн CTF с призами до 300 000 рублей команду 📍
Что внутри турнира: таски на веб-уязвимости, инфраструктурные мисконфиги, анализ скомпилированного кода, расследование инцидентов, слабости шифров и всё, что требует хакерской смекалки. Если это ваш первый опыт, вписывайтесь в Honey-лигу — туда опытных игроков не пускают.
❗️Регистрация, кстати, уже открыта❗️
Кажется, это знак собрать свою команду и попробовать себя в роли того самого медоеда! Проверьте защиту пчелиного улья и помогите найти все скрытые уязвимости в сотах🐝
Что внутри турнира: таски на веб-уязвимости, инфраструктурные мисконфиги, анализ скомпилированного кода, расследование инцидентов, слабости шифров и всё, что требует хакерской смекалки. Если это ваш первый опыт, вписывайтесь в Honey-лигу — туда опытных игроков не пускают.
❗️Регистрация, кстати, уже открыта❗️
Кажется, это знак собрать свою команду и попробовать себя в роли того самого медоеда! Проверьте защиту пчелиного улья и помогите найти все скрытые уязвимости в сотах
Please open Telegram to view this post
VIEW IN TELEGRAM
Линус Торвальдс мог быть богаче Илона Маска. Но он выбрал другой путь.
В 2005 году его команда внезапно потеряла доступ к инструменту, с помощью которого управляла кодом Linux. Один разработчик сделал реверс-инжиниринг этой системы, и компания, которой она принадлежала, просто отключила проект без предупреждения.
Тысячи разработчиков. Никакого нормального способа совместной работы. Никакого запасного плана.
Торвальдс не стал паниковать. Он сел и написал собственную систему контроля версий с нуля.
За 10 дней.
Он назвал её Git. Уже в первый день Git отслеживал собственный исходный код. Через несколько недель на нём управлялся весь проект Linux. К концу 2005 года официально вышел Git 1.0.
А потом Линус просто отдал его бесплатно. Open source. Без компании. Без патентов. Без монетизации.
Через несколько месяцев он передал проект другим людям и вернулся к Linux, будто ничего особенного не произошло.
Зато другие быстро поняли, что он оставил на столе.
На Git вырос GitHub: 100 млн разработчиков, покупка Microsoft в 2018 году за $7,5 млрд. GitLab вышел на биржу в 2021 году с оценкой почти $12 млрд. Сегодня Git контролирует больше 85% рынка систем контроля версий.
Каждое приложение в вашем телефоне. Каждый сайт, который вы открываете. Почти всё это создаётся с помощью Git.
Торвальдс не заработал на этом $0.
Он создал самый используемый инструмент для разработчиков в истории просто потому, что его достала существующая система.
А потом отдал его бесплатно, потому что считал: такой инструмент должен быть доступен всем.
И он ни разу публично не сказал, что жалеет об этом.
В 2005 году его команда внезапно потеряла доступ к инструменту, с помощью которого управляла кодом Linux. Один разработчик сделал реверс-инжиниринг этой системы, и компания, которой она принадлежала, просто отключила проект без предупреждения.
Тысячи разработчиков. Никакого нормального способа совместной работы. Никакого запасного плана.
Торвальдс не стал паниковать. Он сел и написал собственную систему контроля версий с нуля.
За 10 дней.
Он назвал её Git. Уже в первый день Git отслеживал собственный исходный код. Через несколько недель на нём управлялся весь проект Linux. К концу 2005 года официально вышел Git 1.0.
А потом Линус просто отдал его бесплатно. Open source. Без компании. Без патентов. Без монетизации.
Через несколько месяцев он передал проект другим людям и вернулся к Linux, будто ничего особенного не произошло.
Зато другие быстро поняли, что он оставил на столе.
На Git вырос GitHub: 100 млн разработчиков, покупка Microsoft в 2018 году за $7,5 млрд. GitLab вышел на биржу в 2021 году с оценкой почти $12 млрд. Сегодня Git контролирует больше 85% рынка систем контроля версий.
Каждое приложение в вашем телефоне. Каждый сайт, который вы открываете. Почти всё это создаётся с помощью Git.
Торвальдс не заработал на этом $0.
Он создал самый используемый инструмент для разработчиков в истории просто потому, что его достала существующая система.
А потом отдал его бесплатно, потому что считал: такой инструмент должен быть доступен всем.
И он ни разу публично не сказал, что жалеет об этом.
❤54🔥12👍7
Cuckoo hashing даёт O(1) lookup в худшем случае
Не амортизированно.
Не «в среднем».
А именно worst case.
Идея красивая: у каждого ключа есть ровно две возможные позиции в таблице.
Поэтому поиск тупо проверяет оба места и заканчивается.
Вставка работает интереснее: если место занято, новый ключ «выталкивает» старый в его альтернативную позицию.
Отсюда и название: как кукушка, которая выкидывает чужие яйца из гнезда.
Если начинается цикл, таблицу перестраивают с новыми хеш-функциями.
Алгоритм предложили Rasmus Pagh и Flemming Rodler в 2001 году.
И это не просто академическая штука: Linux kernel использует cuckoo hashing в connection tracking table.
Один из тех случаев, когда простая идея даёт очень сильную гарантию по lookup.
Не амортизированно.
Не «в среднем».
А именно worst case.
Идея красивая: у каждого ключа есть ровно две возможные позиции в таблице.
Поэтому поиск тупо проверяет оба места и заканчивается.
return table1[h1(key)] == key
|| table2[h2(key)] == key;
Вставка работает интереснее: если место занято, новый ключ «выталкивает» старый в его альтернативную позицию.
Отсюда и название: как кукушка, которая выкидывает чужие яйца из гнезда.
Если начинается цикл, таблицу перестраивают с новыми хеш-функциями.
Алгоритм предложили Rasmus Pagh и Flemming Rodler в 2001 году.
И это не просто академическая штука: Linux kernel использует cuckoo hashing в connection tracking table.
Один из тех случаев, когда простая идея даёт очень сильную гарантию по lookup.
❤6👍3❤🔥1👎1
NASA только что выпустила WASM-runtime для космических аппаратов… написанный на Rust! 🦀🎉
🛰️ SpaceWasm — детерминированный интерпретатор WebAssembly, созданный для бортового программного обеспечения космических аппаратов.
https://github.com/nasa/spacewasm
#rustlang #wasm #space #nasa #opensource
🛰️ SpaceWasm — детерминированный интерпретатор WebAssembly, созданный для бортового программного обеспечения космических аппаратов.
https://github.com/nasa/spacewasm
#rustlang #wasm #space #nasa #opensource
🔥9🤔3👍2🗿2❤1
⚡️ Kali Linux Roadmap: с чего начать в этичном хакинге
Нашёл нормальный roadmap по Kali Linux для тех, кто хочет не просто «поставить Kali и открыть терминал», а постепенно разобраться, как всё это работает.
Внутри маршрут по базовым темам: установка, настройка окружения, работа с терминалом, Linux-команды, сеть, безопасность, инструменты Kali и практика.
Это полезно тем, кто только заходит в кибербезопасность и не понимает, за что браться первым. Kali часто выглядит как набор страшных утилит, но без базы по Linux, сетям и правам доступа эти инструменты быстро превращаются в хаос.
Хороший подход здесь простой: сначала понять систему, потом сеть, потом инструменты, и только после этого переходить к практике в легальных лабораториях и CTF.
Такой roadmap удобно проходить как чек-лист: открыл раздел, разобрал команды, повторил руками, закрепил на тестовом окружении.
Для старта в Kali Linux это намного лучше, чем хаотично смотреть ролики и копировать команды без понимания.
https://github.com/justxor/Kalilinuxroadmap/tree/main
Нашёл нормальный roadmap по Kali Linux для тех, кто хочет не просто «поставить Kali и открыть терминал», а постепенно разобраться, как всё это работает.
Внутри маршрут по базовым темам: установка, настройка окружения, работа с терминалом, Linux-команды, сеть, безопасность, инструменты Kali и практика.
Это полезно тем, кто только заходит в кибербезопасность и не понимает, за что браться первым. Kali часто выглядит как набор страшных утилит, но без базы по Linux, сетям и правам доступа эти инструменты быстро превращаются в хаос.
Хороший подход здесь простой: сначала понять систему, потом сеть, потом инструменты, и только после этого переходить к практике в легальных лабораториях и CTF.
Такой roadmap удобно проходить как чек-лист: открыл раздел, разобрал команды, повторил руками, закрепил на тестовом окружении.
Для старта в Kali Linux это намного лучше, чем хаотично смотреть ролики и копировать команды без понимания.
https://github.com/justxor/Kalilinuxroadmap/tree/main
🔥4❤1👍1
Алерт в 2 ночи: латентность API выросла в 10 раз
Сначала кажется, что проблема в приложении. Открываешь дашборды — часть метрик зелёная. Идёшь в логи, потом в трассировки, потом проверяешь инфраструктуру. Контекст собирается вручную, а сервис всё это время продолжает деградировать.
На вебинаре 17 июля покажем, как этот сценарий выглядит в Deckhouse Observability Platform (DOP).
Например: API тормозит, а источник проблемы в поде базы данных, где резко выросло потребление IOPS. DOP помогает увидеть деградацию в разрезе инфраструктуры, понять, какие компоненты затронуты, какие зависимости участвуют в инциденте и какой бизнес-сервис под ударом.
Проведём live-демо: от настройки DOP до сценария «алерт → локализация → первопричина». Расскажем, как платформа заранее подсвечивает признаки деградации и помогает сокращать время простоя. А ещё покажем AI-ассистента, который находит причину инцидента за вас.
17 июля в 12:00| онлайн
👉 Зарегистрироваться бесплатно
Сначала кажется, что проблема в приложении. Открываешь дашборды — часть метрик зелёная. Идёшь в логи, потом в трассировки, потом проверяешь инфраструктуру. Контекст собирается вручную, а сервис всё это время продолжает деградировать.
На вебинаре 17 июля покажем, как этот сценарий выглядит в Deckhouse Observability Platform (DOP).
Например: API тормозит, а источник проблемы в поде базы данных, где резко выросло потребление IOPS. DOP помогает увидеть деградацию в разрезе инфраструктуры, понять, какие компоненты затронуты, какие зависимости участвуют в инциденте и какой бизнес-сервис под ударом.
Проведём live-демо: от настройки DOP до сценария «алерт → локализация → первопричина». Расскажем, как платформа заранее подсвечивает признаки деградации и помогает сокращать время простоя. А ещё покажем AI-ассистента, который находит причину инцидента за вас.
17 июля в 12:00| онлайн
👉 Зарегистрироваться бесплатно
😁3🔥2
BullMQ теперь есть нативно для Rust.
Одна из самых популярных Redis-очередей для фоновых задач получила стабильный Rust-релиз:
Это Rust-реализация на
В v1.0.0 уже есть почти всё, что нужно для production-очередей:
* delayed и prioritized jobs
* deduplication
* retries и backoff
* rate limits
* stalled-job detection
* dependent job trees через FlowProducer
* cron и interval recurring jobs
* QueueEvents для наблюдения за жизненным циклом задач
Новая версия использует те же Lua-скрипты, что уже годами крутятся в Node.js, Python, PHP и Elixir-реализациях.
Это значит, что Rust-сервис может положить job в очередь, а Node.js worker её обработает. Или наоборот. Без миграции, sidecar’ов и adapter layer.
По первым бенчмаркам Rust уже немного быстрее Node.js на последовательной и bulk-записи задач, а на high-concurrency processing идёт примерно вровень.
https://bullmq.io/news/260712/rust-release
#RustLang #Redis #BullMQ #Tokio
Одна из самых популярных Redis-очередей для фоновых задач получила стабильный Rust-релиз:
cargo add bullmq-official
Это Rust-реализация на
async/await и Tokio: привычный Result для ошибок, безопасное шаринг-поведение между tasks и API, который ощущается как Rust, а не как порт чужой библиотеки.В v1.0.0 уже есть почти всё, что нужно для production-очередей:
* delayed и prioritized jobs
* deduplication
* retries и backoff
* rate limits
* stalled-job detection
* dependent job trees через FlowProducer
* cron и interval recurring jobs
* QueueEvents для наблюдения за жизненным циклом задач
Новая версия использует те же Lua-скрипты, что уже годами крутятся в Node.js, Python, PHP и Elixir-реализациях.
Это значит, что Rust-сервис может положить job в очередь, а Node.js worker её обработает. Или наоборот. Без миграции, sidecar’ов и adapter layer.
По первым бенчмаркам Rust уже немного быстрее Node.js на последовательной и bulk-записи задач, а на high-concurrency processing идёт примерно вровень.
https://bullmq.io/news/260712/rust-release
#RustLang #Redis #BullMQ #Tokio
👍4❤1🔥1
Ingress-nginx уходит в прошлое. С марта 2026 поддержка прекратилась. А что вместо него? Предлагаем посмотреть на Gateway API, новый стандарт Kubernetes SIG.
23 июля в 17:00 старший SRE-инженер MWS Cloud Евгений Макеев на практике покажет:
⚫️ чем маршрутизация Gateway API отличается от Ingress
⚫️ как выбрать контроллер
⚫️ как установить Gateway API в Managed Kubernetes
⚫️ как настроить безопасное подключение через TLS-сертификат
Будет полезно для DevOps, платформенным инженерам и разработчикам.
Регистрируйтесь по ссылке
23 июля в 17:00 старший SRE-инженер MWS Cloud Евгений Макеев на практике покажет:
Будет полезно для DevOps, платформенным инженерам и разработчикам.
Регистрируйтесь по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
Самый знаменитый комментарий в истории C.
Его оставил разработчик id Software в 1999 году в коде Quake III Arena.
Одна строка с приведением указателя, один битовый сдвиг, одно вычитание - и на выходе получается приближение к 1/√x.
Просто битовые трюки, магическая константа и финальный шаг уточнения методом Ньютона.
А комментарий в коде был максимально честный:
what the f***?
Его оставил разработчик id Software в 1999 году в коде Quake III Arena.
Одна строка с приведением указателя, один битовый сдвиг, одно вычитание - и на выходе получается приближение к 1/√x.
Просто битовые трюки, магическая константа и финальный шаг уточнения методом Ньютона.
А комментарий в коде был максимально честный:
what the f***?
❤10👍6👌1