Channel: C++ Academy
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
🧑💻 Apache NetBeans 26: новая версия классической IDE с поддержкой современных технологий.
Несмотря на растущую популярность VS Code, среда разработки NetBeans продолжает эволюционировать, представив свежий релиз с улучшенной поддержкой Java 24, Jakarta EE 11 и даже экспериментальными фичами для будущего Java SE 25.
Особого внимания заслуживает обновлённый LSP-клиент для C++ и JavaScript — теперь IDE лучше работает с языковыми серверами, постепенно догоняя по функционалу современные редакторы кода. А 150 новых SVG-иконок и исправления для HiDPI-экранов делают интерфейс приятнее для глаз.
🔗 Ссылка - *клик*
@cpluspluc
Несмотря на растущую популярность VS Code, среда разработки NetBeans продолжает эволюционировать, представив свежий релиз с улучшенной поддержкой Java 24, Jakarta EE 11 и даже экспериментальными фичами для будущего Java SE 25.
Особого внимания заслуживает обновлённый LSP-клиент для C++ и JavaScript — теперь IDE лучше работает с языковыми серверами, постепенно догоняя по функционалу современные редакторы кода. А 150 новых SVG-иконок и исправления для HiDPI-экранов делают интерфейс приятнее для глаз.
🔗 Ссылка - *клик*
@cpluspluc
🎮 REFramework — мощный моддинг-фреймворк для игр на движке RE Engine от Capcom. Этот инструмент открывает новые возможности для кастомизации Resident Evil, Monster Hunter, Devil May Cry и других популярных тайтлов.
Проект предлагает готовые моды (VR-режим, изменение FOV, отключение виньетирования) и гибкую систему скриптов на Lua. Особый интерес представляет поддержка 6DOF VR с motion-контроллерами для RE2/RE3/RE7/RE8, что полностью меняет игровой опыт.
🤖 GitHub
@cpluspluc
Проект предлагает готовые моды (VR-режим, изменение FOV, отключение виньетирования) и гибкую систему скриптов на Lua. Особый интерес представляет поддержка 6DOF VR с motion-контроллерами для RE2/RE3/RE7/RE8, что полностью меняет игровой опыт.
🤖 GitHub
@cpluspluc
💽 KDiskMark — удобный бенчмарк дисков с графическим интерфейсом. Этот инструмент на Qt упрощает тестирование скорости HDD и SSD, скрывая сложность fio за дружелюбным интерфейсом.
Здесь есть готовые пресеты для разных сценариев — от последовательного чтения до случайных операций с мелкими файлами. Интересно, что программа умеет генерировать детальные отчёты в читаемом формате с показателями IOPS и задержек. Поддержка 20+ языков и сборка через Flatpak/Snap делают её доступной для большинства дистрибутивов Linux.
🤖 GitHub
@cpluspluc
Здесь есть готовые пресеты для разных сценариев — от последовательного чтения до случайных операций с мелкими файлами. Интересно, что программа умеет генерировать детальные отчёты в читаемом формате с показателями IOPS и задержек. Поддержка 20+ языков и сборка через Flatpak/Snap делают её доступной для большинства дистрибутивов Linux.
🤖 GitHub
@cpluspluc
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Разработчик показал движок на C, который работает в 14 раз быстрее Unity в браузере — и теперь доступна онлайн-демо.
Многие не поверили в заявленную разницу в производительности, поэтому он выложил демо в открытый доступ. Сравнение проводится с реальным Unity-проектом, выложенным на GitHub.
🛠️ C-движок демонстрирует:
• Существенно более высокую FPS в браузере
• Минимальную просадку при рендеринге
• Низкий overhead по сравнению с WebAssembly-сборкой Unity
💬 Автор пока не решил, выкладывать ли исходники C-версии — рассматривает вариант лицензии CC (non-commercial).
🔗 Демо: https://cgamedev.com/
🔗 Код: https://github.com/gabrieldechichi/unity_webglperftest
@cpluspluc
Многие не поверили в заявленную разницу в производительности, поэтому он выложил демо в открытый доступ. Сравнение проводится с реальным Unity-проектом, выложенным на GitHub.
🛠️ C-движок демонстрирует:
• Существенно более высокую FPS в браузере
• Минимальную просадку при рендеринге
• Низкий overhead по сравнению с WebAssembly-сборкой Unity
💬 Автор пока не решил, выкладывать ли исходники C-версии — рассматривает вариант лицензии CC (non-commercial).
🔗 Демо: https://cgamedev.com/
🔗 Код: https://github.com/gabrieldechichi/unity_webglperftest
@cpluspluc
This media is not supported in your browser
VIEW IN TELEGRAM
🛰️ ip-nose — геолокация IP в стиле «Матрицы» прямо в терминале
🔹 Определение вашего IP и локации в один клик
🔹 Информация: страна, город, провайдер, координаты
🔹 Цветной интерфейс с ASCII-анимацией
🔹 Сохраняет историю запросов
🔹 Поддержка кастомной конфигурации через
📦 Установка:
🚀 Запуск:
👁 Выводит ваш публичный IP, данные о местоположении и отображает их в терминале с визуальным оформлением.
📁 Пример данных:
• IP: 45.***.***.101
• Город: Paris
• Страна: France
• ISP: Orange
• Latitude / Longitude: 48.85 / 2.35
🎯 Подходит для:
• Пентестеров и сисадминов
• CLI-энтузиастов
• Тех, кто любит красивые утилиты в терминале
🔗 GitHub
✨ Лёгкий, эффектный и полезный инструмент для работы с IP прямо из терминала.
ip-nose
— это кроссплатформенный CLI-инструмент на C++ для определения геопозиции IP-адресов с эффектной визуализацией в стиле «Matrix». Работает на Linux и Termux.🔹 Определение вашего IP и локации в один клик
🔹 Информация: страна, город, провайдер, координаты
🔹 Цветной интерфейс с ASCII-анимацией
🔹 Сохраняет историю запросов
🔹 Поддержка кастомной конфигурации через
config.json
📦 Установка:
git clone https://github.com/Karim93160/ip-nose.git
cd ip-nose
make
sudo make install
🚀 Запуск:
ip-nose
👁 Выводит ваш публичный IP, данные о местоположении и отображает их в терминале с визуальным оформлением.
📁 Пример данных:
• IP: 45.***.***.101
• Город: Paris
• Страна: France
• ISP: Orange
• Latitude / Longitude: 48.85 / 2.35
🎯 Подходит для:
• Пентестеров и сисадминов
• CLI-энтузиастов
• Тех, кто любит красивые утилиты в терминале
🔗 GitHub
✨ Лёгкий, эффектный и полезный инструмент для работы с IP прямо из терминала.
Научный журнал конференции AI Journey 2025: гонка за миллионом и публикацией в авторитетном журнале началась!
Рассказать о своем исследовании миру, получить миллион и бонус к научной карьере!
В рамках международной конференции AI Journey запущен научный батл с призовым фондом 1 000 000 ₽ за лучшую работу в области искусственного интеллекта. Но это не просто конкурс!
Твоё исследование может попасть в спецвыпуск «Доклады Российской академии наук. Математика, информатика, процессы управления» и его англоязычной версии Doklady Mathematics.
Условия:
— Полная оригинальность — никакого рерайта чужих статей и переизбытка цитат
— Дедлайн — 20 августа (отсчёт уже идёт!)
— Языки: русский/английский
Узнать правила и подать статью на отбор -> AI Journey
Рассказать о своем исследовании миру, получить миллион и бонус к научной карьере!
В рамках международной конференции AI Journey запущен научный батл с призовым фондом 1 000 000 ₽ за лучшую работу в области искусственного интеллекта. Но это не просто конкурс!
Твоё исследование может попасть в спецвыпуск «Доклады Российской академии наук. Математика, информатика, процессы управления» и его англоязычной версии Doklady Mathematics.
Условия:
— Полная оригинальность — никакого рерайта чужих статей и переизбытка цитат
— Дедлайн — 20 августа (отсчёт уже идёт!)
— Языки: русский/английский
Узнать правила и подать статью на отбор -> AI Journey
🎮 Cemu — эмулятор Wii U, который оживляет забытые игры.
Этот проект предлагает современное решение для запуска классических тайтлов Nintendo вроде Mario Kart 8 или Breath of the Wild. При этом он не просто запускает игры Wii U — он делает это с поддержкой 4K, модами и улучшенной производительностью.
При этом эмулятор пытается сохранять простоту: portable-версия для Windows не требует установки, а сообщество активно создает графические моды. Хотя macOS-сборка пока экспериментальна, на Linux и Windows большинство игр работают почти идеально.
🤖 GitHub
@cpluspluc
Этот проект предлагает современное решение для запуска классических тайтлов Nintendo вроде Mario Kart 8 или Breath of the Wild. При этом он не просто запускает игры Wii U — он делает это с поддержкой 4K, модами и улучшенной производительностью.
При этом эмулятор пытается сохранять простоту: portable-версия для Windows не требует установки, а сообщество активно создает графические моды. Хотя macOS-сборка пока экспериментальна, на Linux и Windows большинство игр работают почти идеально.
🤖 GitHub
@cpluspluc
🧠 C++ Задача для продвинутых: загадка с `std::move` и `const`
❓ Задача: что выведет этот код и почему?
🔍 Варианты ответов:
• a)
• b)
• c) Ошибка компиляции
• d) Поведение зависит от компилятора
💡 Разбор:
Смотрим на перегрузки
•
•
👉 Вызовется вторая функция, с
✅ Ответ: b) const lvalue reference
🧠 Вывод:
📌 Совет: перед использованием
❓ Задача: что выведет этот код и почему?
#include <iostream>
#include <string>
#include <utility>
std::string identity(std::string&& s) {
std::cout << "rvalue reference\n";
return std::move(s);
}
std::string identity(const std::string& s) {
std::cout << "const lvalue reference\n";
return s;
}
int main() {
const std::string a = "hello";
std::string b = identity(std::move(a));
std::cout << "Result: " << b << std::endl;
}
🔍 Варианты ответов:
• a)
rvalue reference
• b)
const lvalue reference
• c) Ошибка компиляции
• d) Поведение зависит от компилятора
💡 Разбор:
a
объявлена как const std::string
. Даже после std::move(a)
она остаётся const
, потому что std::move
не снимает константность, он лишь преобразует к rvalue:
std::move(const std::string&) → const std::string&&
Смотрим на перегрузки
identity
:•
identity(std::string&&)
— принимает неконстантный rvalue •
identity(const std::string&)
— принимает константный lvalueconst std::string&&
не подходит к std::string&&
, потому что нельзя привязать rvalue-ссылку к `const`-объекту без соответствия типов.👉 Вызовется вторая функция, с
const std::string&
✅ Ответ: b) const lvalue reference
🧠 Вывод:
std::move
не делает объект мутабельным. Если объект const
, он остаётся const
, и rvalue-перегрузки не срабатывают.📌 Совет: перед использованием
std::move
всегда учитывайте `const`-квалификатор. Он может "сломать" ожидаемую семантику перемещения.🧠 Топ языков от евангелиста функционального программирования
Один из известных проповедников Haskell выложил свою субъективную классификацию языков программирования — от «святых граалей» до «цифровых окаменелостей».
Вот кратко по категориям:
Евангелист функционального программирования выложил свой рейтинг языков — и, как всегда, без компромиссов:
S: OCaml, C++
A: Haskell, Python, Rust, Kotlin
B: Scala, Go, Ruby, Swift, C#, TypeScript
C: PHP, Clojure, Java, C, Ассемблер
D: JavaScript, Bash
E: Fortran, Objective-C, COBOL, Perl
🍿 Комментарии уже взрываются — кто-то радуется за Kotlin в A, кто-то негодует за Java в C, кто-то вообще считает, что JS заслуживает отдельной категории «F».
А вот философский вопрос на подумать:
👉 Разработчики, которые всё ещё пишут на категории E — это уверенные мастера или уже цифровые археологи?
(Спойлер: COBOL-разработчики зарабатывают больше нас всех вместе взятых.)
#языкипрограммирования #fp #разработка #devюмор #tirlist
@cpluspluc
Один из известных проповедников Haskell выложил свою субъективную классификацию языков программирования — от «святых граалей» до «цифровых окаменелостей».
Вот кратко по категориям:
Евангелист функционального программирования выложил свой рейтинг языков — и, как всегда, без компромиссов:
S: OCaml, C++
A: Haskell, Python, Rust, Kotlin
B: Scala, Go, Ruby, Swift, C#, TypeScript
C: PHP, Clojure, Java, C, Ассемблер
D: JavaScript, Bash
E: Fortran, Objective-C, COBOL, Perl
🍿 Комментарии уже взрываются — кто-то радуется за Kotlin в A, кто-то негодует за Java в C, кто-то вообще считает, что JS заслуживает отдельной категории «F».
А вот философский вопрос на подумать:
👉 Разработчики, которые всё ещё пишут на категории E — это уверенные мастера или уже цифровые археологи?
(Спойлер: COBOL-разработчики зарабатывают больше нас всех вместе взятых.)
#языкипрограммирования #fp #разработка #devюмор #tirlist
@cpluspluc
⚡️ DOSBox Staging — современная эволюция легендарного эмулятора DOS с поддержкой новых технологий и активным развитием. Этот форк сохраняет совместимость с классической версией, но добавляет улучшенную обработку звука, поддержку современных кодеков и удобные функции вроде записи игрового процесса.
Проект использует SDL2, предлагает кроссплатформенные сборки для Windows, Linux и macOS, а также поддерживает динамическую загрузку библиотек вроде FluidSynth. Для разработчиков есть интеграция с Tracy Profiler и система CI.
🤖 GitHub
@cpluspluc
Проект использует SDL2, предлагает кроссплатформенные сборки для Windows, Linux и macOS, а также поддерживает динамическую загрузку библиотек вроде FluidSynth. Для разработчиков есть интеграция с Tracy Profiler и система CI.
🤖 GitHub
@cpluspluc
HTML Embed Code: