Библиотека C/C++ разработчика | cpp, boost, qt
17.1K subscribers
2.23K photos
73 videos
16 files
4.6K links
Все самое полезное для плюсовика и сишника в одном канале.

Как запустить своего ии-агента: https://clc.to/tvpmDQ

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
Forwarded from Библиотека программиста
This media is not supported in your browser
VIEW IN TELEGRAM
Один из самых удобных способов разобраться в алгоритмах

Algorithm Visualizer показывает, что происходит внутри кода шаг за шагом.

🔜 Внутри — 70+ алгоритмов, интерактивная визуализация и примеры на JavaScript, Java и C++.

Хороший инструмент для подготовки к собеседованиям и изучения алгоритмов.

🔗 Ссылка

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🍕 Что на самом деле измеряет std::chrono::system_clock?

Если думал, что system_clock — это просто текущее время. На деле это отсчёт от эпохи Unix (1 января 1970 года), и его поведение гораздо сложнее, чем кажется.

⚡️ Когда вы вызываете system_clock::now(), ОС читает значение из аппаратного таймера и возвращает разницу между текущим моментом и эпохой. Эта информация синхронизируется с NTP серверами для корректировки дрейфа кварцевого генератора.

auto now = std::chrono::system_clock::now();
// Внутри: берётся значение из /dev/rtc или Windows' GetSystemTimeAsFileTime()
// И преобразуется в количество тиков с 1970-01-01 00:00:00 UTC


❗️ Критическая деталь: если пользователь выставит неправильное время в системе, system_clock вернёт совершенно неправильное значение. Это не баг, это по дизайну — часы должны отражать реальное время.

Для критичных операций, где важна монотонность, используй steady_clock — он не зависит от системного времени и гарантирует, что каждый следующий вызов вернёт значение больше предыдущего.

💡Вывод: system_clock — это связь приложения с реальным миром через батарейку. Если нужна надёжность, используй другие часы.


✏️ Если хочешь более подробный разбор темы времени в C++ ставь ⚡️ или пиши в комментариях ⤵️


📍Навигация: ВакансииЗадачи Собесы

Библиотека C/C++ разработчика

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
8
🔥 ИИ-выходные: Собери своего AI-агента за 2 дня

Хватит просто читать про ИИ, пора собирать автономные системы руками! 1–2 августа пройдет хардкорный онлайн-интенсив для junior-middle разработчиков.

Формат: теория ➡️ сразу практика. Вы будете управлять AI-инструментами.

🛠️ Как всё пройдет:

День 1 (Суббота): разбираем анатомию агента, подключаем инструменты (shell, GitHub, Postgres) и дебажим трейсы.
День 2 (Воскресенье): собираем собственного агента под вашу задачу, настраиваем Eval + Guardrails (чтобы бот не галлюцинировал) и проводим демо.


Для кого: Вы пишете на Python, работаете с Git и терминалом. (С нуля не подойдет, темп очень быстрый!)

Артефакт на выходе: Рабочий репозиторий с вашим агентом, который не стыдно показать команде.
👨‍💻 Спикер: Алексей Жиряков (Сбер, GenAI).

Места ограничены!

👉 Изучить программу и занять место
🐞 Собственный View-адаптер

Настоящий View в C++20 должен наследовать от std::ranges::view_base или std::ranges::view_interface<T>. Давайте создадим практический пример — stride_view, который пропускает элементы диапазона с заданным шагом.


🥝 Наследование от view_interface

Любой приличный view должен наследоваться от std::ranges::view_interface<T>. Это даёт тебе begin(), end(), size() и прочие плюшки бесплатно.

template<std::ranges::input_range R>
class stride_view : public std::ranges::view_interface<stride_view<R>> {
private:
// Если R уже view, используем R. Иначе — ref_view для безопасности
R base_;
std::ranges::range_difference_t<R> stride_;

public:
stride_view() = default;

stride_view(R base, std::ranges::range_difference_t<R> stride)
: base_(std::move(base)), stride_(stride) {
// Критическая проверка: stride должен быть положительным!
if (stride_ <= 0) {
throw std::invalid_argument("stride must be > 0");
}
}

auto begin() {
return stride_iterator<R>{ std::ranges::begin(base_),
std::ranges::end(base_), stride_ };
}

auto begin() const {
return stride_iterator<R>{ std::ranges::begin(base_),
std::ranges::end(base_), stride_ };
}

auto end() {
return stride_sentinel<R>{};
}

auto end() const {
return stride_sentinel<R>{};
}
};


😏 Видишь? Сохраняем базовый диапазон и размер шага. Дальше — только логика в итераторе.


☝️ Как работает stride_iterator и stride_sentinel

Итератор — это сердце view. На каждый operator++() он прыгает на stride_ позиций вперёд, не переходя за конец диапазона:

template<std::ranges::input_range R>
struct stride_sentinel {};

template<std::ranges::input_range R>
struct stride_iterator {
std::ranges::iterator_t<R> current_;
std::ranges::sentinel_t<R> end_;
std::ranges::range_difference_t<R> stride_;

// Pre-increment: ++it
stride_iterator& operator++() {
// 🔴 Критический момент: проверяем, не за пределами ли мы
for (int i = 0; i < stride_ && current_ != end_; ++i) {
++current_;
}
return *this;
}

// Post-increment: it++
stride_iterator operator++(int) {
auto tmp = *this;
++(*this);
return tmp;
}

auto operator*() const {
return *current_;
}

// Сравнение с концом диапазона через sentinel
bool operator==(const stride_sentinel<R>&) const {
return current_ == end_;
}
};


☝️ Почему sentinel? Потому что begin() и end() могут быть разных типов в C++20 ranges. Это позволяет избежать ошибки типов при сравнении.


⚡️ Пример использования

std::vector v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
auto strided = stride_view(v, 2);

for (auto x : strided) {
std::cout << x << " "; // 0 2 4 6 8
}


👌 Красиво: не создали новый вектор, просто гуляем по старому с шагом 2. Никакого копирования, только ленивые вычисления!


⚠️ Замечание: В C++23 это уже есть!

for (auto x : v | std::views::stride(2)) {
std::cout << x << " "; // 0 2 4 6 8
}


🫰 std::views::stride уже входит в стандартную библиотеку! Пример выше — исключительно учебный


📍Навигация: ВакансииЗадачи Собесы

Библиотека C/C++ разработчика

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1👾1
🐸 Подборка вакансий для C++-разработчиков за неделю

Инженер-программист С++ — Офис (Воронеж)

C++ Developer (Gamedev, MMORPG) — Удалёнка/Гибрид (Калининград)

Программист С/Linux — Удалёнка

Разработчик С/С++ Control Plane — от 250 000 ₽ Удалёнка

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#вакансии
🍄 Задача на выходные: найди баг

Коллега написал таймаут для сетевого запроса и клянётся, что «иногда он срабатывает мгновенно, а иногда висит вечно». Особенно после перевода часов. Найдёшь причину?

#include <chrono>
using namespace std::chrono;

bool wait_for_response(Connection& conn, int timeout_ms) {
auto deadline = system_clock::now() + milliseconds(timeout_ms);
while (system_clock::now() < deadline) {
if (conn.has_data()) return true;
std::this_thread::sleep_for(milliseconds(10));
}
return false;
}


Задача: объясни, почему таймаут ведёт себя непредсказуемо, и перепиши функцию так, чтобы она работала корректно всегда.


✏️ Делись решением в комментариях ⤵️


📍Навигация:
ВакансииЗадачи Собесы

Библиотека C/C++ разработчика

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
Media is too big
VIEW IN TELEGRAM
🔥 Не называйте любого продвинутого чат-бота «ИИ-агентом»!

Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru, наглядно разбирает уровни абстракции ИИ-продуктов и убирает путаницу в понятиях.

Что внутри видео:

- Почему ассистент и агент принципиально разные сущности;
- Как ассистент может быть просто «обёрткой» над LLM, а может скрывать под капотом сложнейшую мультиагентную систему;
- Как понимать архитектуру глубже, чтобы проектировать сильные решения.

Начните создавать агентные системы с нашего бесплатного демо-урока. Всего за 2 часа разберем внутреннее устройство агента, научим его чинить свой собственный код и сохранять контекст после перезапуска.

🔗 Забрать бесплатный демо-урок
🥱2😁1
📰 Свеженькое из мира C++

Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.

😎 Интересное:

Эффект «затишья перед бурей» — что будет с зарплатами и наймом в IT после 2027 года
Что на самом деле измеряет std::chrono::system_clock? — разбираемся какие проблемы могут быть с system_clock

📙 Ranges:

Собственный View-адаптер

🔹📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#свежак
🚀 Уже завтра стартует новый поток курса «ИИ-агенты»!

Мы собрали мощнейший состав преподавателей. Учить вас проектировать архитектуру и собирать продакшн-агентов будут инженеры и исследователи из топовых IT-компаний.

Старт уже завтра!

Сомневаетесь, подойдет ли вам программа и подача? Начните с бесплатного демо-урока!

Всего за 2 часа вы заглянете под капот ИИ-агента, поймете, чем мышление модели отличается от ее ответа, и научите систему чинить собственный код. Это идеальный способ протестировать нашу платформу перед покупкой.

🔗 Пройти демо-урок и занять место на курсе
🥱3😁1
🧩 Терминал и оболочка — это не одно и то же

Вы открываете «терминал», набираете ls — и кажется, что всё делает одна программа. На самом деле их две, и путаница между ними мешает понять половину советов из интернета.


📕 Терминал — это окно

Изначально терминал был железкой: экран и клавиатура, подключённые проводом к большому компьютеру. Сегодня это программа-эмулятор (iTerm, Windows Terminal, Gnome Terminal), которая только принимает нажатия клавиш и рисует текст на экране.


🤖 Оболочка — это мозг

Оболочка (shell) — программа, которая читает вашу команду, разбирает её и просит операционную систему запустить нужный процесс. Bash, Zsh, Fish — это всё оболочки, и они разные: команда, работающая в bash, может не завестись в fish.


Аналогия

Терминал — как браузер, а оболочка — как сайт внутри него. Браузер рисует страницу, но логика живёт не в нём.


Кто что делает при вводе команды

Пока вы печатаете, оболочка ничего не знает — символы обрабатывает терминал. И только после Enter строка уходит в оболочку, которая решает, что с ней делать: выполнить встроенную команду вроде cd самой или запустить отдельную программу через ОС.


‼️ Пайпы — это работа оболочки

Вертикальная черта склеивает процессы в цепочку: вывод одного сразу становится вводом другого, без временных файлов на диске.

cat log.txt | grep ERROR | wc -l


⚠️ Частая ошибка: менять настройки терминала, когда проблема в оболочке (или наоборот). Не подхватился алиас — смотрите конфиг оболочки (.zshrc, .bashrc). Кривые цвета и эмодзи — это к терминалу.


🚨 Подкаст о терминалах и оболочках от Podlodka


✏️ А в чём вы открываете командную строку?

❤️ — в том, что был в системе
🤩 — поставил свой: iTerm, Alacritty, Ghostty, WezTerm и т.д.
🌚 — только внутри VS Code
🔥 — вообще не открываю терминал
👾 — Другое (напишу в комментариях)

🏃‍♀️ Азбука айтишника
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤩4🌚2😁1
🔥 Стартуем СЕГОДНЯ! Новый поток курса «Разработка ИИ-агентов» открыт

По этому поводу мы решили выложить закрытую запись одного из уроков из программы. Найти её в поиске YouTube нельзя — она доступна только по ссылке и всем, кто будет на курсе.

Внутри глубокий разбор LLM от Алексея Яндутова (Senior ML-инженер, развивал ответы «Алисы» и «Нейро» в Яндексе). Учимся получать точный результат без галлюцинаций.

Что внутри урока:

- Устройство LLM.
- Рабочие шаблоны промптов (Persona, Chain-of-Thought и др.).
- Разбор реального кейса Яндекса. Как автоматизировать разметку, обойти качество людей на 5% и срезать косты на 60%.


После просмотра вы поймете, когда хватает промпт-инжиниринга, а когда нужен RAG или fine-tuning.

👉Смотреть закрытый урок на YouTube

Понравился урок? Переходите на новый уровень! Оставляйте заявку на курс, чтобы научиться проектировать надежные автономные системы. Обучение началось, но вы еще успеваете присоединиться.

🔗 Занять место на курсе
Какие часы обязаны быть монотонными (никогда не идут назад, не подвержены переводу системного времени)?
Anonymous Quiz
11%
system_clock
52%
steady_clock
16%
high_resolution_clock
12%
utc_clock
8%
Все перечисленные
1 августа Яндекс проведет Back to Back — бэкенд- конференцию, которая пройдет в Москве, Белграде и Ереване

Участников ждут инженерные доклады и разбор реальных production-проблем. В Москве состоится трек C++ Zero Cost — про производительность, системную разработку и инженерные задачи на C++, там же пройдет Architecture & Performance — про архитектуру, производительность и реальные production-задачи.

На конференции выступят эксперты из Яндекса, Авито, Positive Technologies и других компаний. Что планируют в Москве:

🔅Новости со встречи Международного комитета C++ — про интересные возможности C++26, перспективы языка и планы на C++29 расскажет Антон Полухин из Яндекса

🔅9 миллиардов этажей concurrency — база про concurrency, parallelism и многопоточность от руководителя инфраструктуры поиска Авито Андрея Аксенов

🔅Сверлим дыры в луне: добавляем поддержку языка LuaJIT в eBPF-профилировщик Perforator — ограничения eBPF, сложность устройства LuaJIT и челленджи профилирования динамических языков от Саввы Лебедева из Positive Technologies

Помимо докладов, в Москве участников ждут экспертные сессии 1:1 и выступление питерской группы «Научно-технический рэп» с хитами «Алкоритм», «Тыжпрограммист».

Программа и регистрация — тут.
1
🤖 У нас уже отобрали работу роботы или есть другие угрозы?

Забудь про апокалиптичные прогнозы «AI отберет работу». Реальность интереснее и коварнее: появились новые правила игры, новые способы обмана заказчиков и новая ценность для тех, кто умеет думать головой. Разбираю пять таких сдвигов.

👉 Статья

Азбука айтишника

#свежак
😁1