
C++ *
Типизированный язык программирования
XSEC: как изучить Windows Access Control за два часа
Хотите изучить подсистему контроля доступа Windows за два час? Да ещё так знать эту тему, как ни один ваш преподаватель не знает? Хотите знать, как использовать функцию Windows API с самым длинным именем - AccessCheckByTypeResultListAndAuditAlarmByHandle? А увидеть код, создающий недокументированные структуры Windows? Тогда вам сюда!
В статье представлено описание библиотеки и набора тестов, которые позволят любому пользователю изучить в максимально полном объёме подсистему контроля доступа Windows при достаточно малых начальных знаниях. Рассматриваются вопросы работы с DACL, SACL, Conditional ACE, mandatory integrity checking и многие другие. Тесты позволяют пользователю самому произвольно менять входные данные и самостоятельно модифицировать их для более детального изучения нужных конкретному пользователю тем. Представленная библиотека позволят осуществлять разбор и создание всех внутренних структур подсистемы безопасности Windows, а также позволяет создавать «access tokens» с произвольными начальными данными.
Многопоточный HTTP-сервер с ThreadPool’ом и конечным автоматом

Сегодня я расскажу вам про довольно простую, но интересную реализацию многопоточности в HTTP-сервере без создания потока для каждого клиента. На мое удивление информацию про такую реализацию я нашёл с трудом, поэтому решил поделиться с вами.
Мета-программирование атрибутов для сериализации
В моем игровом движке есть рефлексия, о ней уже когда-то писал. С тех пор произошло много изменений, и об одном недавнем улучшении хотел бы рассказать.
Стандарт C++20: обзор новых возможностей C++. Часть 4 «Ranges»

25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас, и чем они могут быть полезны.
При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся почти на 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:
- Модули и краткая история C++.
- Операция «космический корабль».
- Концепты.
- Ranges.
- Корутины.
- Другие фичи ядра и стандартной библиотеки. Заключение.
Это четвёртая часть, рассказывающая о новом модуле стандартной библиотеки, — Ranges.
IncrediBuild: Как ускорить сборку и анализ вашего проекта

"Да сколько ты ещё будешь собирать?" - фраза, которую каждый разработчик произносил хотя бы раз посреди ночи. Да, сборка бывает долгой и от этого никуда не деться. Нельзя же просто так взять и распараллелить всё это дело не на каких-то жалких 8 – 12 ядер, а так, чтобы на 100+. Или всё-таки можно?
Производительность Android Runtime vs NDK

Разрабатывая игровой движок для Android, я был уверен, что нативный код C/C++ будет исполняться быстрее чем аналогичный код на Java. Это утверждение справедливо, но не для последних версий Android. Чтобы проверить почему так происходит, решил провести небольшое исследование.
Для теста использовался Android Studio 4.1.3 - для Java Android SDK (API 30), для C/C++ Android NDK (r21, компилятор CLang). Тест довольно тупой, который выполняет арифметические операции над массивом int в двух вложенных циклах. Ничего осмысленного и специфичного.
Понимаем красно-черное дерево. Часть 2. Балансировка и вставка
Это вторая часть из серии статей "Понимаем красно-черное дерево". Если вы пропустили первую часть, настоятельно рекомендую ознакомиться с ней здесь. Там мы разобрали причину появления кчд и расставили по полочкам некоторые его свойства.
В данной части мы разберем вставку и балансировку. Эти вещи идут бок о бок, без балансировки дерево будет терять свои свойства, и толка от него будет мало.
ReeePlayer – интервальное повторение фрагментов видео для изучения иностранных языков

Начать смотреть видео на иностранном языке не просто. Этим объясняется большое количество статей с самыми разными советами:
• Смотреть с русскими субтитрами и не париться.
• Смотреть с иностранными субтитрами и переводить на паузе, если не понятно.
• Пересматривать многократно, комбинируя различные подходы.
По моему мнению, такие способы либо малоэффективные, либо выматывающие. Поэтому за несколько лет у меня выработался свой подход. Как и многие, при просмотре стараюсь понять на слух, контролируя себя английскими субтитрами. Но все непонятные места, содержащие в том числе незнакомые слова, сохраняю в виде фрагментов (клипов), которые тренирую впоследствии с помощью интервального повторения. Это помогает не только восприятию, но и заучиванию новых слов в контексте, причем вместе с их произношением. Побочным положительным эффектом является запоминание различных фактов, если смотреть образовательные видео.
Embedded Linux в двух словах. Второе

В этой небольшой серии статей я попытаюсь пролить свет на тему построения Embedded Linux устройств, начиная от сборки загрузчика и до написания драйвера под отдельно разработанный внешний модуль с автоматизацией всех промежуточных процессов.
В предыдущей части рассматривалось создание базовой системы, не выполняющей каких-либо полезных действий, но демонстрирующей, на своем примере, один из способов сборки подобных систем.
В этой части речь пойдет о таком инструменте автоматизации как Buildroot, о создании драйверов согласно современным веяниям драйверостроения, и реализации функционала, анонсированного в первой части, в виде отправки смайлов в топовый чат, широко известного в узких кругах, сайта, в соответствии с командами от смайл-пульта.
Стандарт C++20: обзор новых возможностей C++. Часть 3 «Концепты»

25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.
При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным и растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:
- Модули и краткая история C++.
- Операция «космический корабль».
- Концепты.
- Ranges.
- Корутины.
- Другие фичи ядра и стандартной библиотеки. Заключение.
Это третья часть, рассказывающая о концептах и ограничениях в современном C++.
Отладочный вывод на микроконтроллерах: как Concepts и Ranges отправили мой printf на покой
Здравствуйте! Меня зовут Александр и я работаю программистом микроконтроллеров.
Начиная на работе новый проект, я привычно набрасывал в project tree исходники всяческих полезных утилит. И на хедере app_debug.h несколько подзавис.
Дело в том, что в декабре прошлого года у GNU Arm Embedded Toolchain вышел релиз 10-2020-q4-major, включающий все GCC 10.2 features, а значит и поддержку Concepts, Ranges, Coroutines вкупе с другими, менее "громкими" новинками С++20.
Воодушевленное новым стандартом воображение рисовало мой будущий С++ код ультрасовременным и лаконично-поэтичным. И старый добрый printf("Debug message\n") в это благостное видение не очень-то вписывался.
Хотелось бескомпромиссной плюсовой функциональности и стандартных удобств!
Стандарт C++20: обзор новых возможностей C++. Часть 2 «Операция ''Космический Корабль''»

25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.
При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся почти на 2,5 часа. Для вашего удобства мы разбили текст на шесть частей:
- Модули и краткая история C++.
- Операция «космический корабль».
- Концепты.
- Ranges.
- Корутины.
- Другие фичи ядра и стандартной библиотеки. Заключение.
Первую часть на Хабре встретили живо, а в комментариях развязались жаркие дискуссии. Не может не радовать, что так много пользователей следят за развитием языка практически в реальном времени.
Это вторая часть, рассказывающая об операции «космический корабль» в современном C++.
Ближайшие события
Привычка работать «из коробки» или как мы засунули CUDA в .vcxproj
CUDA
А зачем?
Пожалуй, сразу отвечу, для чего было придумано такое решение. Когда мы держали проект в виде OpenSource, то пытались сохранить политику «скачал код, собрал одной кнопкой», но с момента использования технологии CUDA ситуация стала сложнее… Большая часть комьюнити кричала, что ничего не собирается и устанавливать сторонние SDK они не хотят.
Управляем Windows пультом от телевизора или как передать сигналы через последовательный порт

Решил я , что хочу переключать громкость звука и аудио треки на ноутбуке под Windows с инфракрасного пульта. Под руку тут же попали: ардуино уно, кучка проводов с макетной платой, инфракрасный датчик, ноутбук и, собственно, инфракрасный пульт.
Идея есть, железо есть, а вот теория хромает. Как заставить компьютер понимать инфракрасные сигналы пульта и выполнять требуемые действия? Я надумал использовать ардуино для приема сигналов пульта через инфракрасный датчик на макетной плате и посылать сообщения в ноутбук через USB. Для этого требовались хоть какие то познания, как все это работает.
Было решено разобраться.
Создаём плагин Qt GeoServices на примере ОС Аврора, OpenStreetMap и Sight Safari

Привет, Хабр! Хотим рассказать о том, как создать плагин Qt GeoServices и использовать его в своём приложении на ОС Аврора. В этом посте мы подробно объясним, как научить приложение определять координаты устройства на карте и прокладывать оптимальные маршруты с помощью сервиса Sight Safari. Самые нетерпеливые могут пощупать готовый код плагина и демо-приложения на GitHub, всех остальных приглашаем под кат.
Понимаем красно-черное дерево. Часть 1. Введение
Довольно долгое время я воевал с красно-черным деревом. Вся информация, которую я находил, была в духе "листья и корень дерева всегда черные, ПОТОМУ ЧТО", "топ 5 свойств красно-черного дерева" или "3 случая при балансировке и 12 случаев при удалении ноды". Такой расклад меня не устраивал.
Мне не хотелось заучивать свойства дерева, псевдокод и варианты балансировки, я хотел знать: почему. Каким образом цвета помогают при балансировке? Почему у красной ноды не может быть красного потомка? Почему глубину дерева измеряют "черной высотой"?
Ответы на эти вопросы я получил только тогда, когда мне дали ссылку на лекцию про два-три дерево, с которого мы и начнем.
Эта статья разделена на 3 логические части. Я рекомендую прочитать их в указанном порядке. Первая часть (данная) будет направлена на введение в кчд и знакомство с ним. Во второй части мы поговорим о балансировке и вставке в кчд. В третьей, завершающей, части мы разберем процесс удаления ноды. Наберитесь терпения и приятного чтения.
Ненормативная схемотехника: ATmega8 – кто сказал, что выше головы не прыгнешь?

С чего начинает среднестатистический начинающий электронщик? Правильно, с часов! Как только научился пользоваться голыми контроллерами, а не платами Ардуино, захотел сделать часы на Атмеге, голой Атмеге без кучи ключей и буферных микросхем. И обязательно со статической индикацией, а не с динамической (ну не люблю я её). Собственно, статическая индикация программно гораздо проще, а ведь мы простых путей не ищем. Но зато возникают другие проблемы, которые несколько раз меня останавливали в самом начале пути. Понятно, что если взять Атмегу пожирней, задействовать в ней половину ножек и полпроцента памяти, задача упрощается донельзя, собственно, такие настольные часы на ATmega128 работают у меня на столе пару лет.

Но это не наш метод. Я с самого начала хотел именно ATmega8, как самую доступную и самую дешёвую (в том числе в дип-корпусе). Всё то же самое можно и на ATmega48, но её попробуй ещё найди, разве что у Вас в ящике стола валяется их много с незапамятных времён.
Стандарт C++20: обзор новых возможностей C++. Часть 1 «Модули и краткая история C++»

25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.
При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:
- Модули и краткая история C++.
- Операция «космический корабль».
- Концепты.
- Ranges.
- Корутины.
- Другие фичи ядра и стандартной библиотеки. Заключение.
Это первая часть, рассказывающая о модулях в современном C++. Если вы предпочитаете снайдеркатам краткие изложения, то добро пожаловать в статью.
Update. К статье добавлены правки и комментарии Антона Полухина.
