C++ Academy
16K subscribers
590 photos
125 videos
1 file
555 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
🧠 Claude Opus решил баг, с которым я боролся почти 5 лет — личная история разработчика C++ и бывшего старший инженер FAANG с

💬 Один из пользователей на 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
"О великий Бог c++, почему у меня ничего не работает?"
🔍 C++ Задача для профи: кто вызовется?

У тебя есть следующий код:


#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
Хотите научиться эффективно отлаживать C++ код и устранять ошибки?

⏺️ На открытом вебинаре вы узнаете:
▸ Как искать и устранять ошибки в 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
Auditor.codes — это интерактивная платформа для прокачки навыков в аудите исходного кода и кибербезопасности.

🔍 Что предлагает:

🧠 8 000+ задач на поиск реальных уязвимостей в C/C++ (буферные переполнения, UAF, integer overflow и др.)

📚 Обучение безопасному кодингу и методам аудита

🏆 Таблица лидеров и соревновательная среда

Подходит и новичкам, и профессионалам. Учись искать уязвимости — как настоящий white-hat!

https://auditor.codes/
⚙️ Задача для C++ разработчиков: «Непонятная ошибка, которая портит данные»


🎯 Цель: Найти и объяснить причину скрытого неопределённого поведения, которое проявляется не сразу

📍 Ситуация:

Ты разрабатываешь кроссплатформенное приложение на 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 сериализацию?

💡 Подсказка:
В 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
🛸 F´— фреймворк для полетного ПО с открытым исходным кодом.

Разработанный в 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 для обучения и экспериментов

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