⚡️Готовы повысить квалификацию и стать востребованным профи в C++?
Курс «C++ Developer. Professional» — идеальный выбор для разработчиков, которые уже знакомы с языком и хотят выйти на новый уровень. Вы освоите принципы многопоточного программирования, работу с новыми стандартами C++ 20 и 23, а также научитесь эффективно взаимодействовать с сетью и обрабатывать большие объемы данных. Интересные кейсы и 14 практических работ помогут закрепить знания и подготовиться к реальным задачам.
С обучением от OTUS вы получите глубокое понимание C++, научитесь проектировать масштабируемые решения и писать чистый, эффективный код. После завершения курса у вас будет прочная база для роста и карьерного продвижения в крупнейших IT-компаниях.
👉Пройдите вступительное тестирование и получите скидку на обучение:https://otus.pw/jJ4O/?erid=2W5zFHRfeBS
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Курс «C++ Developer. Professional» — идеальный выбор для разработчиков, которые уже знакомы с языком и хотят выйти на новый уровень. Вы освоите принципы многопоточного программирования, работу с новыми стандартами C++ 20 и 23, а также научитесь эффективно взаимодействовать с сетью и обрабатывать большие объемы данных. Интересные кейсы и 14 практических работ помогут закрепить знания и подготовиться к реальным задачам.
С обучением от OTUS вы получите глубокое понимание C++, научитесь проектировать масштабируемые решения и писать чистый, эффективный код. После завершения курса у вас будет прочная база для роста и карьерного продвижения в крупнейших IT-компаниях.
👉Пройдите вступительное тестирование и получите скидку на обучение:https://otus.pw/jJ4O/?erid=2W5zFHRfeBS
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🧠 Хитрая задача на C++: "Исчезающее число среди строк"
Условие
Дан список строк, представляющих числа от 1 до 100 включительно. Одного числа нет.
Твоя задача — найти, какого именно числа не хватает.
Нельзя использовать сортировку,
Пример:
Массив: ["1", "2", "3", ..., "98", "99"] (без "100")
Ответ: 100
Формат:
Решение с XOR
Пример использования:
Почему работает:
XOR — идеальное решение, когда нужно найти одну потерянную величину среди уникальных значений.
(XOR всех от 1 до 100) ^ (XOR из данных) = отсутствующее число.
@cpluspluc
Условие
Дан список строк, представляющих числа от 1 до 100 включительно. Одного числа нет.
Твоя задача — найти, какого именно числа не хватает.
Нельзя использовать сортировку,
std::accumulate
, std::unordered_map
, std::stoi
можно.Пример:
Массив: ["1", "2", "3", ..., "98", "99"] (без "100")
Ответ: 100
Формат:
int findMissingNumber(const std::vector<std::string>& data);
Решение с XOR
#include <iostream>
#include <vector>
#include <string>
int findMissingNumber(const std::vector<std::string>& data) {
int xor_full = 0;
int xor_data = 0;
for (int i = 1; i <= 100; ++i) {
xor_full ^= i;
}
for (const auto& s : data) {
xor_data ^= std::stoi(s);
}
return xor_full ^ xor_data;
}
Пример использования:
int main() {
std::vector<std::string> data;
for (int i = 1; i <= 100; ++i) {
if (i != 57) { // Удалим 57
data.push_back(std::to_string(i));
}
}
std::cout << "Пропущено: " << findMissingNumber(data) << std::endl;
return 0;
}
Почему работает:
XOR — идеальное решение, когда нужно найти одну потерянную величину среди уникальных значений.
a ^ a = 0
, 0 ^ b = b
. Поэтому: (XOR всех от 1 до 100) ^ (XOR из данных) = отсутствующее число.
@cpluspluc
Наша команда Mobile SDK сделала решение, которое позволяет из Flutter-приложения напрямую вызывать C++ код. Под капотом:
➡️ FFI для прямого взаимодействия с C++ кодом ядром;
➡️ Кодогенерируемое API почти полностью аналогично iOS и Android Mobile SDK;
➡️ TextureWidget вместо PlatformView для рендеринга карты;
➡️ Единые виджеты для отображения карты как для Android, так и для iOS.
Если тебе нравится разбираться в архитектуре SDK — заглядывай читать. Детально рассказываем про основу продукта — кодогенератор для генерации платформенного Dart-кода на основе C++ интерфейсов.
➡️ FFI для прямого взаимодействия с C++ кодом ядром;
➡️ Кодогенерируемое API почти полностью аналогично iOS и Android Mobile SDK;
➡️ TextureWidget вместо PlatformView для рендеринга карты;
➡️ Единые виджеты для отображения карты как для Android, так и для iOS.
Если тебе нравится разбираться в архитектуре SDK — заглядывай читать. Детально рассказываем про основу продукта — кодогенератор для генерации платформенного Dart-кода на основе C++ интерфейсов.
🧪 Vaev — легковесный HTML/CSS-движок на C++
Проект [Vaev](https://github.com/skift-org/vaev) от
🔧 Что умеет:
- Рендерит HTML и XHTML (работает даже с google.com — *почти полностью*)
- Поддерживает каскадные стили,
- Работает с
- Идеален для генерации документов вместо
🧑💻 Для кого:
- Для разработчиков, которым интересно, как устроен браузер
- Для тех, кто хочет встроить простой и быстрый движок CSS-рендеринга в своё ПО
- Для интеграции в системы типа Odoo и скриптов по генерации печатных версий сайтов
📦 Пример запуска:
🧠 Почему это интересно:
- Написан на современном, чистом C++ — легко читать и дорабатывать
- Можно собрать как часть
- Перспективы развития: в будущем — полноценный движок с JS
🔗 GitHub: https://github.com/skift-org/vaev
@cpluspluc
Проект [Vaev](https://github.com/skift-org/vaev) от
skift-org
— это минималистичный, быстрый и безопасный движок рендеринга HTML/CSS, написанный на современном C++.🔧 Что умеет:
- Рендерит HTML и XHTML (работает даже с google.com — *почти полностью*)
- Поддерживает каскадные стили,
calc()
, var()
, @page
и вывод в PDF- Работает с
file://
и HTTP-запросами (без HTTPS и JS)- Идеален для генерации документов вместо
wkhtmltopdf
🧑💻 Для кого:
- Для разработчиков, которым интересно, как устроен браузер
- Для тех, кто хочет встроить простой и быстрый движок CSS-рендеринга в своё ПО
- Для интеграции в системы типа Odoo и скриптов по генерации печатных версий сайтов
📦 Пример запуска:
pip install git+https://github.com/cute-engineering/cutekit
python -m ck run --release vaev-browser -- yourfile.html
🧠 Почему это интересно:
- Написан на современном, чистом C++ — легко читать и дорабатывать
- Можно собрать как часть
skiftOS
или использовать отдельно- Перспективы развития: в будущем — полноценный движок с JS
🔗 GitHub: https://github.com/skift-org/vaev
@cpluspluc
🐧 Новый бэкдор Auto-Color атакует Linux: как он работает и почему это опасно
Исследователи из Unit 42 (Palo Alto Networks) сообщили об обнаружении нового Linux-бэкдора под названием Auto-Color, отличающегося продвинутыми методами сокрытия и устойчивостью в системе. Он нацелен на серверные инфраструктуры и контейнерные среды.
🛠 Что известно о Auto-Color:
• написан на C/C++, может работать в большинстве современных Linux-дистрибутивов
• использует спуфинг процесса — маскируется под безобидные системные процессы (`kworker`, `cron`)
• поддерживает удалённое выполнение команд и может скачивать/исполнять произвольные бинарники
• при старте внедряется в системные скрипты автозапуска (`~/.bashrc`,
• содержит self-delete механизм, чтобы удалить себя после выполнения задачи
• применяет встроенное шифрование конфигурации и команд управления (C2)
🔒 Вектор заражения:
• Auto-Color попадает в систему через:
- вредоносные скрипты в контейнерных образах
- эксплойты для уязвимых веб-приложений
- бэкдоры в CI/CD пайплайнах
💡 Интересные особенности:
• использует нестандартные порты и нестандартные протоколы поверх TCP/UDP
• шифрует коммуникации с C2-сервером с помощью RC4/ChaCha
• хранит свои конфигурации в скрытых файлах dotfiles или шифрованных секциях бинарника
📉 Почему это важно:
• многие системы мониторинга пропускают его из-за обфускации
• он способен действовать неделями незаметно
• наличие встроенной логики persistence делает его опасным в DevOps-среде
🔍 Что делать:
1. Анализировать подозрительные процессы, даже если они выглядят как
2. Проверить наличие изменений в
3. Изолировать подозрительные контейнеры и проверить их содержимое на вредоносные бинарники
4. Использовать инструменты типа
🧠 Вывод:
Auto-Color — пример того, насколько сложно может быть обнаружение современных Linux-бэкдоров. Его появление — ещё одно напоминание о необходимости непрерывного мониторинга, Zero Trust подхода и анализе поведения процессов, а не только сигнатур.
📌 Оригинальный анализ
@cpluspluc
Исследователи из Unit 42 (Palo Alto Networks) сообщили об обнаружении нового Linux-бэкдора под названием Auto-Color, отличающегося продвинутыми методами сокрытия и устойчивостью в системе. Он нацелен на серверные инфраструктуры и контейнерные среды.
🛠 Что известно о Auto-Color:
• написан на C/C++, может работать в большинстве современных Linux-дистрибутивов
• использует спуфинг процесса — маскируется под безобидные системные процессы (`kworker`, `cron`)
• поддерживает удалённое выполнение команд и может скачивать/исполнять произвольные бинарники
• при старте внедряется в системные скрипты автозапуска (`~/.bashrc`,
rc.local
, `systemd`) • содержит self-delete механизм, чтобы удалить себя после выполнения задачи
• применяет встроенное шифрование конфигурации и команд управления (C2)
🔒 Вектор заражения:
• Auto-Color попадает в систему через:
- вредоносные скрипты в контейнерных образах
- эксплойты для уязвимых веб-приложений
- бэкдоры в CI/CD пайплайнах
💡 Интересные особенности:
• использует нестандартные порты и нестандартные протоколы поверх TCP/UDP
• шифрует коммуникации с C2-сервером с помощью RC4/ChaCha
• хранит свои конфигурации в скрытых файлах dotfiles или шифрованных секциях бинарника
📉 Почему это важно:
• многие системы мониторинга пропускают его из-за обфускации
• он способен действовать неделями незаметно
• наличие встроенной логики persistence делает его опасным в DevOps-среде
🔍 Что делать:
1. Анализировать подозрительные процессы, даже если они выглядят как
kworker
2. Проверить наличие изменений в
.bashrc
, .profile
, cron'ах и unit-файлах systemd 3. Изолировать подозрительные контейнеры и проверить их содержимое на вредоносные бинарники
4. Использовать инструменты типа
rkhunter
, chkrootkit
, Falco
, AuditD
🧠 Вывод:
Auto-Color — пример того, насколько сложно может быть обнаружение современных Linux-бэкдоров. Его появление — ещё одно напоминание о необходимости непрерывного мониторинга, Zero Trust подхода и анализе поведения процессов, а не только сигнатур.
📌 Оригинальный анализ
@cpluspluc
Хотите освоить C++ с нуля и стать востребованным разработчиком?
Пройдите курс от OTUS и получите знания, которые откроют перед вами новые карьерные горизонты!
⚡️ Этот курс идеально подходит для начинающих и тех, кто хочет углубить свои знания. С нуля до уровня Middle Developer — вы освоите создание собственных типов данных, работу с многопоточностью и современными стандартами C++. Изучите лучшие практики проектирования, работу с памятью и сетью, а также освоите принцип работы с базами данных и CI/CD.
🔥 На обучении вы разработаете 2 реальных проекта для портфолио, а диплом OTUS поможет вам уверенно проходить собеседования в крупнейших компаниях. Станьте частью индустрии с актуальными знаниями!
👉 Оставьте заявку: https://tglink.io/dab3db2405d6?erid=2W5zFHRZw52
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Пройдите курс от OTUS и получите знания, которые откроют перед вами новые карьерные горизонты!
⚡️ Этот курс идеально подходит для начинающих и тех, кто хочет углубить свои знания. С нуля до уровня Middle Developer — вы освоите создание собственных типов данных, работу с многопоточностью и современными стандартами C++. Изучите лучшие практики проектирования, работу с памятью и сетью, а также освоите принцип работы с базами данных и CI/CD.
🔥 На обучении вы разработаете 2 реальных проекта для портфолио, а диплом OTUS поможет вам уверенно проходить собеседования в крупнейших компаниях. Станьте частью индустрии с актуальными знаниями!
👉 Оставьте заявку: https://tglink.io/dab3db2405d6?erid=2W5zFHRZw52
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🔍 C++ Задача для профи: кто вызовется?
У тебя есть следующий код:
❓ Вопросы:
1. Что напечатает программа?
2. Почему вызов
3. Что произойдёт, если передать
🧠 Подвох:
-
-
- У тебя может возникнуть разный вывод в зависимости от перегрузки
✅ Разбор:
- `process(42)` → `Integral: 42` ✅
- `process(3.14)` → `Floating-point: 3.14` ✅
- `process('A')` → `Integral: 65` (ASCII код символа!) ⚠️
- `process(true)` → `Integral: 1` (да, это `bool`) ✅
🎯 Что проверяет задача:
- Понимание `SFINAE` и `enable_if`
- Типовую систему C++ (что именно считается integral)
- Разницу между `char`, `bool`, `int`, `float` в шаблонах
- Предсказание поведения перегрузки на уровне типов
@cpluspluc
У тебя есть следующий код:
#include <iostream>
#include <type_traits>
template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
process(T value) {
std::cout << "Integral: " << value << std::endl;
}
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
process(T value) {
std::cout << "Floating-point: " << value << std::endl;
}
int main() {
process(42); // (1)
process(3.14); // (2)
process('A'); // (3)
}
❓ Вопросы:
1. Что напечатает программа?
2. Почему вызов
process('A')
может удивить?3. Что произойдёт, если передать
true
?🧠 Подвох:
-
char
— это integral type, а не string
и не отдельный класс-
true
— это тоже int`-подобный тип: `std::is_integral<bool>::value == true
- У тебя может возникнуть разный вывод в зависимости от перегрузки
✅ Разбор:
- `process(42)` → `Integral: 42` ✅
- `process(3.14)` → `Floating-point: 3.14` ✅
- `process('A')` → `Integral: 65` (ASCII код символа!) ⚠️
- `process(true)` → `Integral: 1` (да, это `bool`) ✅
🎯 Что проверяет задача:
- Понимание `SFINAE` и `enable_if`
- Типовую систему C++ (что именно считается integral)
- Разницу между `char`, `bool`, `int`, `float` в шаблонах
- Предсказание поведения перегрузки на уровне типов
@cpluspluc
🚀 Drogon — современный веб-фреймворк на C++
Если ты разрабатываешь высокопроизводительные REST API, микросервисы или real-time backend на C++, обрати внимание на [Drogon](https://github.com/drogonframework/drogon) — один из самых быстрых и полноценных фреймворков на C++17/20.
🔧 Что умеет Drogon:
• ⚡ Асинхронный event loop (epoll/kqueue)
• 🧵 Поддержка
• 🛡 JWT, HTTPS, CORS, middleware
• 🔌 Плагины и фильтры для расширяемости
• 🧠 Встроенный ORM (PostgreSQL, MySQL, SQLite)
• 🌐 WebSocket и Server-Sent Events (SSE)
• 🧪 Встроенное тестирование
• 📄 Автогенерация кода для контроллеров и DTO
📦 Пример Hello World:
📁 Также поддерживает:
• Рендеринг HTML-шаблонов
• Хостинг статических файлов
• Генерацию кода через CLI (`drogon_ctl`)
🛠 Установка:
Drogon — лёгкий, мощный и удивительно быстрый фреймворк на C++ для тех, кто хочет выжать максимум из нативного backend-разработки.
🔗 https://github.com/drogonframework/drogon
Если ты разрабатываешь высокопроизводительные REST API, микросервисы или real-time backend на C++, обрати внимание на [Drogon](https://github.com/drogonframework/drogon) — один из самых быстрых и полноценных фреймворков на C++17/20.
🔧 Что умеет Drogon:
• ⚡ Асинхронный event loop (epoll/kqueue)
• 🧵 Поддержка
std::future
, coroutines и background-задач • 🛡 JWT, HTTPS, CORS, middleware
• 🔌 Плагины и фильтры для расширяемости
• 🧠 Встроенный ORM (PostgreSQL, MySQL, SQLite)
• 🌐 WebSocket и Server-Sent Events (SSE)
• 🧪 Встроенное тестирование
• 📄 Автогенерация кода для контроллеров и DTO
📦 Пример Hello World:
drogon::app().registerHandler("/hello", [](const HttpRequestPtr&, std::function<void (const HttpResponsePtr &)> &&callback) {
auto resp = HttpResponse::newHttpResponse();
resp->setBody("Hello, Drogon!");
callback(resp);
}).run();
📁 Также поддерживает:
• Рендеринг HTML-шаблонов
• Хостинг статических файлов
• Генерацию кода через CLI (`drogon_ctl`)
🛠 Установка:
git clone https://github.com/drogonframework/drogon.git
cd drogon && mkdir build && cd build
cmake .. && make && sudo make install
Drogon — лёгкий, мощный и удивительно быстрый фреймворк на C++ для тех, кто хочет выжать максимум из нативного backend-разработки.
🔗 https://github.com/drogonframework/drogon
🧠 Claude Opus решил баг, с которым я боролся почти 5 лет — личная история разработчика C++ и бывшего старший инженер FAANG с
💬 Один из пользователей на Reddit поделился настоящим инсайтом: после многолетней борьбы с трудноуловимым багом, ему наконец-то помог… Claude Opus.
Баг был из тех, что появляются раз в полгода, ведут себя нестабильно, и каждый раз ускользают от дебаггера. В отчаянии он просто описал проблему Claude-у — без стеков, логов, трейсинга. И внезапно получил абсолютно точный ответ: баг оказался связан с тем, как обрабатывались замыкания внутри лямбд, теряющих доступ к нужному контексту после асинхронного вызова.
🤯 **Результат**: 5 лет неуловимого бага ушли решились после диалога с ИИ.
📌 Это не просто красивая история. Она показывает, как LLM уровня Opus начинает конкурировать не только с поиском и документацией — но и с самим процессом инженерного мышления.
🔍 Что можно вынести:
• Не бойся формулировать даже "глупые" вопросы — хорошие модели часто угадывают суть
• Застрял на баге? Попробуй объяснить его как человеку — иногда именно это помогает найти решение
• Хороший ИИ не заменит опыт, но может стать отличным напарником по отладке
📎 Оригинальный пост на Reddit
@cpluspluc
💬 Один из пользователей на Reddit поделился настоящим инсайтом: после многолетней борьбы с трудноуловимым багом, ему наконец-то помог… Claude Opus.
Баг был из тех, что появляются раз в полгода, ведут себя нестабильно, и каждый раз ускользают от дебаггера. В отчаянии он просто описал проблему Claude-у — без стеков, логов, трейсинга. И внезапно получил абсолютно точный ответ: баг оказался связан с тем, как обрабатывались замыкания внутри лямбд, теряющих доступ к нужному контексту после асинхронного вызова.
🤯 **Результат**: 5 лет неуловимого бага ушли решились после диалога с ИИ.
📌 Это не просто красивая история. Она показывает, как LLM уровня Opus начинает конкурировать не только с поиском и документацией — но и с самим процессом инженерного мышления.
🔍 Что можно вынести:
• Не бойся формулировать даже "глупые" вопросы — хорошие модели часто угадывают суть
• Застрял на баге? Попробуй объяснить его как человеку — иногда именно это помогает найти решение
• Хороший ИИ не заменит опыт, но может стать отличным напарником по отладке
📎 Оригинальный пост на Reddit
@cpluspluc
🧠 Beej's Guide to Network Programming — легендарный гайд по сокетам на C
Если ты хочешь понять, как работают сети на низком уровне — забудь всё и читай Beej's Guide.
📘 Это бесплатное руководство от Beej (Брайан Холл), которое:
• Объясняет сокеты, TCP, UDP, IPv4/IPv6
• Работает под Linux и Windows
• Написано на чистом C
• Покрывает всё: от socket() до select() и recvfrom()
• С нуля до уверенного уровня
🔥 Почему это круто:
- Простой и разговорный стиль
- Куча кода и реальных примеров
- Бесплатно и с открытой лицензией (CC)
- Один из самых уважаемых туториалов среди C-программистов
📎 Читай тут
Подходит всем, кто хочет научиться писать сетевые приложения руками, а не кнопками.
#CProgramming #SocketProgramming #NetworkProgramming #BeejGuide #LinuxNetworking #TCP #UDP #Coding
Если ты хочешь понять, как работают сети на низком уровне — забудь всё и читай Beej's Guide.
📘 Это бесплатное руководство от Beej (Брайан Холл), которое:
• Объясняет сокеты, TCP, UDP, IPv4/IPv6
• Работает под Linux и Windows
• Написано на чистом C
• Покрывает всё: от socket() до select() и recvfrom()
• С нуля до уверенного уровня
🔥 Почему это круто:
- Простой и разговорный стиль
- Куча кода и реальных примеров
- Бесплатно и с открытой лицензией (CC)
- Один из самых уважаемых туториалов среди C-программистов
📎 Читай тут
Подходит всем, кто хочет научиться писать сетевые приложения руками, а не кнопками.
#CProgramming #SocketProgramming #NetworkProgramming #BeejGuide #LinuxNetworking #TCP #UDP #Coding
🔍 C++ Задача для профи: кто вызовется?
У тебя есть следующий код:
❓ Вопросы:
1. Что напечатает программа?
2. Почему вызов
3. Что произойдёт, если передать
🧠 Подвох:
-
-
- У тебя может возникнуть разный вывод в зависимости от перегрузки
✅ Разбор:
-
-
-
-
🎯 Что проверяет задача:
- Понимание
- Типовую систему C++ (что именно считается integral)
- Разницу между
- Предсказание поведения перегрузки на уровне типов
@cpluspluc
У тебя есть следующий код:
#include <iostream>
#include <type_traits>
template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
process(T value) {
std::cout << "Integral: " << value << std::endl;
}
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
process(T value) {
std::cout << "Floating-point: " << value << std::endl;
}
int main() {
process(42); // (1)
process(3.14); // (2)
process('A'); // (3)
}
❓ Вопросы:
1. Что напечатает программа?
2. Почему вызов
process('A')
может удивить?3. Что произойдёт, если передать
true
?🧠 Подвох:
-
char
— это integral type, а не string
и не отдельный класс-
true
— это тоже int`-подобный тип: `std::is_integral<bool>::value == true
- У тебя может возникнуть разный вывод в зависимости от перегрузки
✅ Разбор:
-
process(42)
→ Integral: 42
✅-
process(3.14)
→ Floating-point: 3.14
✅-
process('A')
→ Integral: 65
(ASCII код символа!) ⚠️-
process(true)
→ Integral: 1
(да, это `bool`) ✅🎯 Что проверяет задача:
- Понимание
SFINAE
и enable_if
- Типовую систему C++ (что именно считается integral)
- Разницу между
char
, bool
, int
, float
в шаблонах- Предсказание поведения перегрузки на уровне типов
@cpluspluc
🔐 Выпущены I2P 2.9.0 и C++-клиент i2pd 2.57.0
Представлены обновления:
• Сеть I2P — версия 2.9.0
• C++-клиент i2pd — версия 2.57.0
📡 Что такое I2P?
Это многослойная анонимная распределённая сеть, работающая поверх интернета.
Она использует end-to-end шифрование и строится по P2P-принципу: пользователи предоставляют пропускную способность, формируя зашифрованные однонаправленные туннели для обмена данными без централизованных серверов.
🛠 Возможности сети:
• Анонимные сайты и блоги
• Мгновенные сообщения и почта
• Обмен файлами
• P2P-сети и криптовалютные приложения
🧩 Клиенты I2P:
• Java-клиент — кроссплатформенный, работает на Windows, Linux, macOS
• i2pd — независимая реализация на C++, распространяется под BSD-совместимой лицензией
https://opennet.ru/63344
@cpluspluc
Представлены обновления:
• Сеть I2P — версия 2.9.0
• C++-клиент i2pd — версия 2.57.0
📡 Что такое I2P?
Это многослойная анонимная распределённая сеть, работающая поверх интернета.
Она использует end-to-end шифрование и строится по P2P-принципу: пользователи предоставляют пропускную способность, формируя зашифрованные однонаправленные туннели для обмена данными без централизованных серверов.
🛠 Возможности сети:
• Анонимные сайты и блоги
• Мгновенные сообщения и почта
• Обмен файлами
• P2P-сети и криптовалютные приложения
🧩 Клиенты I2P:
• Java-клиент — кроссплатформенный, работает на Windows, Linux, macOS
• i2pd — независимая реализация на C++, распространяется под BSD-совместимой лицензией
https://opennet.ru/63344
@cpluspluc
Хотите научиться эффективно отлаживать C++ код и устранять ошибки?
⏺️ На открытом вебинаре вы узнаете:
▸ Как искать и устранять ошибки в C++ с помощью таких инструментов, как assert'ы, логирование и юнит-тесты.
▸ Мы покажем, как использовать отладчик и почему core dump может стать вашим другом.
▸ Также познакомим вас с powerful инструментами, такими как address sanitizer и valgrind, которые помогут найти ошибки в самых сложных случаях.
❗️ Сформируйте свою «аптечку» инструментов и приемов, которые не только помогут вам быстрее находить баги, но и улучшат надежность кода на C++. Этот урок даст вам важные практические знания, которые пригодятся на всех этапах разработки.
📆 Посетите открытый урок 9 июня в 20:00 МСК в преддверие старта курса «C++ Developer» и получите скидку на обучение!
Регистрация уже открыта: https://tglink.io/d1ccdc44264d?erid=2W5zFHDpR7n
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
⏺️ На открытом вебинаре вы узнаете:
▸ Как искать и устранять ошибки в C++ с помощью таких инструментов, как assert'ы, логирование и юнит-тесты.
▸ Мы покажем, как использовать отладчик и почему core dump может стать вашим другом.
▸ Также познакомим вас с powerful инструментами, такими как address sanitizer и valgrind, которые помогут найти ошибки в самых сложных случаях.
❗️ Сформируйте свою «аптечку» инструментов и приемов, которые не только помогут вам быстрее находить баги, но и улучшат надежность кода на C++. Этот урок даст вам важные практические знания, которые пригодятся на всех этапах разработки.
📆 Посетите открытый урок 9 июня в 20:00 МСК в преддверие старта курса «C++ Developer» и получите скидку на обучение!
Регистрация уже открыта: https://tglink.io/d1ccdc44264d?erid=2W5zFHDpR7n
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🔐 FrodoKEM — квантово-устойчивая криптография "старой школы" от Microsoft
Microsoft представила подробный разбор алгоритма FrodoKEM — одного из главных кандидатов на роль стандарта постквантовой криптографии.
В эпоху приближающихся квантовых компьютеров, FrodoKEM предлагает максимально консервативную и проверяемую альтернативу.
📌 Что такое FrodoKEM?
FrodoKEM (Frodo Key Encapsulation Mechanism) — это криптографическая схема, основанная на сложной математической задаче Learning With Errors (LWE) без применения каких-либо дополнительных алгебраических структур, вроде решёток в кольцах или модулярной арифметики.
🔹 В отличие от популярных решений (например, Kyber), FrodoKEM:
- Не использует оптимизации через кольца
- Не зависит от нестабильных алгебраических допущений
- Основан на классических, хорошо изученных матричных операциях
🧠 Почему это важно?
Ближайшее будущее — это угроза квантового взлома. Алгоритмы вроде RSA и ECC станут уязвимыми после появления рабочих квантовых компьютеров. Многие постквантовые схемы стараются быть быстрыми, но жертвуют прозрачностью и простотой анализа.
Microsoft выбрала другой путь: надёжность, понятность, доверие.
🛡 FrodoKEM:
- Устойчив даже при пессимистичных криптоанализах
- Обеспечивает строгий уровень безопасности (до 192-битной стойкости)
- Уже участвует в финальном раунде отбора NIST
⚙️ Технические детали
- Основан на стандартной LWE-задаче с гауссовыми ошибками
- Полностью реализован на C (open-source)
- Поддерживает несколько уровней безопасности (FrodoKEM-640, -976, -1344)
- Не требует дополнительных предположений, кроме LWE
📦 Репозиторий: https://github.com/Microsoft/PQCrypto-LWEKE
🔍 Что пишет Microsoft?
> "Мы хотели создать решение, которому можно доверять даже спустя 20 лет. FrodoKEM может быть медленнее, но это цена за прозрачность и проверяемость."
🧩 Где это может применяться?
- Встраиваемые устройства, где важна безопасность, а не скорость
- Долгосрочное шифрование архивов и переписки
- Системы, где необходима формальная верификация безопасности
📚 Полный разбор от Microsoft:
https://www.microsoft.com/en-us/research/blog/frodokem-a-conservative-quantum-safe-cryptographic-algorithm/
#postquantum #crypto #FrodoKEM #MicrosoftResearch
@cpluspluc
Microsoft представила подробный разбор алгоритма FrodoKEM — одного из главных кандидатов на роль стандарта постквантовой криптографии.
В эпоху приближающихся квантовых компьютеров, FrodoKEM предлагает максимально консервативную и проверяемую альтернативу.
📌 Что такое FrodoKEM?
FrodoKEM (Frodo Key Encapsulation Mechanism) — это криптографическая схема, основанная на сложной математической задаче Learning With Errors (LWE) без применения каких-либо дополнительных алгебраических структур, вроде решёток в кольцах или модулярной арифметики.
🔹 В отличие от популярных решений (например, Kyber), FrodoKEM:
- Не использует оптимизации через кольца
- Не зависит от нестабильных алгебраических допущений
- Основан на классических, хорошо изученных матричных операциях
🧠 Почему это важно?
Ближайшее будущее — это угроза квантового взлома. Алгоритмы вроде RSA и ECC станут уязвимыми после появления рабочих квантовых компьютеров. Многие постквантовые схемы стараются быть быстрыми, но жертвуют прозрачностью и простотой анализа.
Microsoft выбрала другой путь: надёжность, понятность, доверие.
🛡 FrodoKEM:
- Устойчив даже при пессимистичных криптоанализах
- Обеспечивает строгий уровень безопасности (до 192-битной стойкости)
- Уже участвует в финальном раунде отбора NIST
⚙️ Технические детали
- Основан на стандартной LWE-задаче с гауссовыми ошибками
- Полностью реализован на C (open-source)
- Поддерживает несколько уровней безопасности (FrodoKEM-640, -976, -1344)
- Не требует дополнительных предположений, кроме LWE
📦 Репозиторий: https://github.com/Microsoft/PQCrypto-LWEKE
🔍 Что пишет Microsoft?
> "Мы хотели создать решение, которому можно доверять даже спустя 20 лет. FrodoKEM может быть медленнее, но это цена за прозрачность и проверяемость."
🧩 Где это может применяться?
- Встраиваемые устройства, где важна безопасность, а не скорость
- Долгосрочное шифрование архивов и переписки
- Системы, где необходима формальная верификация безопасности
📚 Полный разбор от Microsoft:
https://www.microsoft.com/en-us/research/blog/frodokem-a-conservative-quantum-safe-cryptographic-algorithm/
#postquantum #crypto #FrodoKEM #MicrosoftResearch
@cpluspluc
Auditor.codes — это интерактивная платформа для прокачки навыков в аудите исходного кода и кибербезопасности.
🔍 Что предлагает:
🧠 8 000+ задач на поиск реальных уязвимостей в C/C++ (буферные переполнения, UAF, integer overflow и др.)
📚 Обучение безопасному кодингу и методам аудита
🏆 Таблица лидеров и соревновательная среда
Подходит и новичкам, и профессионалам. Учись искать уязвимости — как настоящий white-hat!
https://auditor.codes/
🔍 Что предлагает:
🧠 8 000+ задач на поиск реальных уязвимостей в C/C++ (буферные переполнения, UAF, integer overflow и др.)
📚 Обучение безопасному кодингу и методам аудита
🏆 Таблица лидеров и соревновательная среда
Подходит и новичкам, и профессионалам. Учись искать уязвимости — как настоящий white-hat!
https://auditor.codes/
⚙️ Задача для C++ разработчиков: «Непонятная ошибка, которая портит данные»
🎯 Цель: Найти и объяснить причину скрытого неопределённого поведения, которое проявляется не сразу
📍 Ситуация:
Ты разрабатываешь кроссплатформенное приложение на C++17, которое обрабатывает массивы бинарных данных.
На тестах — всё работает. Но у части пользователей (особенно на Linux) возникают:
- Повреждённые файлы после сериализации
- Непредсказуемые вылеты при больших объёмах данных
- Валидация данных случайно "съезжает" (байты путаются)
Вот фрагмент кода:
🔍 Визуально всё нормально. В unit-тестах — ок. На CI — ок.
Но на проде данные иногда повреждены, и никто не может воспроизвести баг стабильно.
🧩 Задача:
1. Почему
2. Что может отличаться на разных платформах и влиять на поведение?
3. Как бы ты безопасно сериализовал структуру в
4. Как это можно поймать с помощью
5. Как написать cross-platform-safe сериализацию?
💡 Подсказка:
В C++ `struct Packet` может иметь **padding** и **alignment**, которые отличаются на архитектурах. `memcpy` по `sizeof(Packet)` может захватить лишние или мусорные байты.
🛠 Решение:
1. `struct Packet` не является POD-структурой с гарантированным layout — в ней может быть **неинициализированный padding**, который `memcpy` тоже копирует.
2. Проблема усиливается на системах с разным выравниванием: x86 vs ARM, GCC vs MSVC.
3. Более безопасный способ — сериализовать поля по отдельности:
std::vector<uint8_t> serialize(const Packet& p) {
std::vector<uint8_t> buffer;
buffer.insert(buffer.end(), reinterpret_cast<const uint8_t*>(& p.id ),
reinterpret_cast<const uint8_t*>(& p.id ) + sizeof( p.id ));
buffer.insert(buffer.end(), p.data , p.data + sizeof( p.data ));
return buffer;
}
4. Или использовать `std::ostringstream` / `std::span` / `protobuf` / `flatbuffers`.
5. Проверка с `-fsanitize=undefined` даст warning:
```
memcpy: reading padding bytes from stack frame
```
📌 **Вывод:**
В C++ `memcpy` на структуру — это **ловушка**, если ты не контролируешь padding. Никогда не сериализуй структуры напрямую через память, если это не `#pragma pack` и не строго определённый layout.
💬 Это вопрос для собеседования на позицию C++ системного разработчика с уклоном в безопасность и низкоуровневую разработку.
@cpluspluc
🎯 Цель: Найти и объяснить причину скрытого неопределённого поведения, которое проявляется не сразу
📍 Ситуация:
Ты разрабатываешь кроссплатформенное приложение на C++17, которое обрабатывает массивы бинарных данных.
На тестах — всё работает. Но у части пользователей (особенно на Linux) возникают:
- Повреждённые файлы после сериализации
- Непредсказуемые вылеты при больших объёмах данных
- Валидация данных случайно "съезжает" (байты путаются)
Вот фрагмент кода:
#include <vector>
#include <cstring>
struct Packet {
uint32_t id;
char data[64];
};
std::vector<uint8_t> serialize(const Packet& p) {
std::vector<uint8_t> buffer(sizeof(Packet));
std::memcpy(buffer.data(), &p, sizeof(Packet));
return buffer;
}
🔍 Визуально всё нормально. В unit-тестах — ок. На CI — ок.
Но на проде данные иногда повреждены, и никто не может воспроизвести баг стабильно.
🧩 Задача:
1. Почему
memcpy
здесь небезопасен, хотя кажется логичным? 2. Что может отличаться на разных платформах и влиять на поведение?
3. Как бы ты безопасно сериализовал структуру в
std::vector<uint8_t>
? 4. Как это можно поймать с помощью
valgrind
/ asan
/ -fsanitize=undefined
? 5. Как написать cross-platform-safe сериализацию?
💡 Подсказка:
🛠 Решение:
1. `struct Packet` не является POD-структурой с гарантированным layout — в ней может быть **неинициализированный padding**, который `memcpy` тоже копирует.
2. Проблема усиливается на системах с разным выравниванием: x86 vs ARM, GCC vs MSVC.
3. Более безопасный способ — сериализовать поля по отдельности:
std::vector<uint8_t> buffer;
buffer.insert(buffer.end(), reinterpret_cast<const uint8_t*>(&
reinterpret_cast<const uint8_t*>(&
buffer.insert(buffer.end(),
return buffer;
}
4. Или использовать `std::ostringstream` / `std::span` / `protobuf` / `flatbuffers`.
5. Проверка с `-fsanitize=undefined` даст warning:
```
memcpy: reading padding bytes from stack frame
```
📌 **Вывод:**
В C++ `memcpy` на структуру — это **ловушка**, если ты не контролируешь padding. Никогда не сериализуй структуры напрямую через память, если это не `
💬 Это вопрос для собеседования на позицию C++ системного разработчика с уклоном в безопасность и низкоуровневую разработку.
@cpluspluc
🛸 F´— фреймворк для полетного ПО с открытым исходным кодом.
Разработанный в NASA Jet Propulsion Laboratory фреймворк F´ предлагает необычный подход к созданию софта для космических миссий. Этот C++-инструментарий, успешно проверенный на CubeSat и других малых аппаратах, разбивает сложные системы на компоненты с четкими интерфейсами — как LEGO для космических инженеров.
Также с помощью F’ вы сможете генерировать кода из моделей и встроенные инструменты тестирования, что ускоряет разработку критически важных систем. Установка через
🤖 GitHub
@cpluspluc
Разработанный в NASA Jet Propulsion Laboratory фреймворк F´ предлагает необычный подход к созданию софта для космических миссий. Этот C++-инструментарий, успешно проверенный на CubeSat и других малых аппаратах, разбивает сложные системы на компоненты с четкими интерфейсами — как LEGO для космических инженеров.
Также с помощью F’ вы сможете генерировать кода из моделей и встроенные инструменты тестирования, что ускоряет разработку критически важных систем. Установка через
pip install fprime-bootstrap
и туториал с HelloWorld делают старт неожиданно простым для столь нишевого инструмента. 🤖 GitHub
@cpluspluc
Forwarded from Machinelearning
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 nanoMPI — минималистичная реализация MPI для обучения и экспериментов
📌 Основные цели проекта:
🧑🏫 Образование
Большинство MPI-библиотек (как OpenMPI или MPICH) сложно читать — там тысячи строк про оптимизацию и производительность.
💻 Локальная разработка
Вы можете писать и тестировать распределённый код на обычном ноутбуке, офлайн, без кластера, без очередей задач. Это делает
🎯 Примеры применения:
• Изучение базовых паттернов MPI
• Быстрые эксперименты с распределённым кодом
• Разработка и отладка без кластера
📂 Открытый код, компактная реализация — легко вникнуть, легко доработать.
#MPI #HPC #DistributedSystems #nanoMPI #OpenSource #DevTools
🔗 GitHub: github.com/Quentin-Anthony/nanoMPI
#MPI
@cpluspluc
nanoMPI
— это простая и понятная альтернатива OpenMPI, созданная с нуля. Подходит для разработчиков, которые хотят понять, как устроены распределённые вычисления, а не тонуть в оптимизациях.📌 Основные цели проекта:
🧑🏫 Образование
Большинство MPI-библиотек (как OpenMPI или MPICH) сложно читать — там тысячи строк про оптимизацию и производительность.
nanoMPI
упрощает вход: легко разобраться, как работает ring allreduce, broadcast или barrier.💻 Локальная разработка
Вы можете писать и тестировать распределённый код на обычном ноутбуке, офлайн, без кластера, без очередей задач. Это делает
nanoMPI
идеальным для прототипирования и экспериментов.🎯 Примеры применения:
• Изучение базовых паттернов MPI
• Быстрые эксперименты с распределённым кодом
• Разработка и отладка без кластера
📂 Открытый код, компактная реализация — легко вникнуть, легко доработать.
#MPI #HPC #DistributedSystems #nanoMPI #OpenSource #DevTools
🔗 GitHub: github.com/Quentin-Anthony/nanoMPI
#MPI
@cpluspluc