Обновить
309.22

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Игры для обучения программированию и разработки собственных модификаций

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели11K

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

Также прошу обратить внимание, что это обзорная статья, в которой я собрал игры и проекты, полезные для обучения программированию и практики разработки. Здесь указаны названия, ключевые особенности и то, какие языки программирования или навыки они позволяют отрабатывать.

Если вас заинтересует какая-то игра более детально - например, с техническим разбором, установкой, интеграцией скриптов или примерами кода - напишите об этом в комментариях. При наличии интереса и возможности подготовлю отдельный материал по каждой из таких игр.

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

Во второй части поговорим об играх, которые на мой взгляд больше всего развиты и походят для создания собственных модификаций внутри уже готовой платформы. (Т.Е. Разработки плагинов и собственных доработок)

Читать далее

«Щи: симулятор жестокости» или «Как не надо делать игры»

Уровень сложностиПростой
Время на прочтение57 мин
Охват и читатели17K

Данная статья будет полезна начинающим разработчикам игр, да и вообще, любым людям, кто хочет связать свою жизнь с программированием. Я постарался сделать статью интересной и полезной тем, кто не знает программирование, но знание хотя бы основ С++ увеличит удовольствие от статьи.

Читать далее

Всё про std::search и где его применять

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели8.9K

Привет, Хабр!

Сегодня мы рассмотрим без преувеличений один из самых недооценённых алгоритмов стандартной библиотеки — std::search. Разберёмся, как он устроен, где реально экономит процессорные тики, а где лучше заменить его на что-то иное.

Читать далее

Часть 2: Rope-Ladder Tracker — от идеи к стабильной системе

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели8K

Это продолжение статьи «Rope‑Ladder Tracker: визуальный возврат без GPS» , где я представил концепцию структурированного позиционирования по принципу «верёвочной лестницы». Тогда это была идея, прототип и первые кадры. Сегодня — полноценная, стабильная система, готовая к интеграции в реальный дрон.

Читать далее

Как построить открытую АСУТП. Архитектура программного ПЛК. Демонстрация работы среды исполнения

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели9.2K

Добрый день! Меня зовут Иван Ярцев, я — архитектор автоматизированных систем управления технологическим процессом (АСУ ТП) в ИТ-компании «Северсталь», занимающейся разработкой компонентов для открытой АСУТП.

В этой статье рассмотрим архитектуру программного программируемого логического контроллера (ПЛК), а также самостоятельную сборку среды исполнения из исходников и запуск её из готовых сборок. Самостоятельную сборку опишем на примере российского одноплатного компьютера Repka-pi, имеющего архитектуру aarch64.

Читать далее

Универсальная С++ фабрика объектов: для Qt и не только

Уровень сложностиСложный
Время на прочтение47 мин
Охват и читатели11K

Привет, Хабр! Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams.

Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений. 

В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++. 

Читать далее

Вызовы при построении архитектуры безопасности Цифрового рубля

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.7K

Алексей Новиков, руководитель управления информационной безопасности R-Style Softlab, о практических вызовах, связанных с архитектурой и защитой цифрового рубля.

Читать далее

Быстрый старт контроллера шаговых двигателей SMSD–4.2CAN в режиме драйвера

Уровень сложностиПростой
Время на прочтение39 мин
Охват и читатели3K

Приводятся инструкции, которые помогут сделать первые шаги в экспериментах с контроллером в режиме драйвера шагового двигателя SMSD–4.2CAN под маркой НПО «Электропривод». Это настройка контроллера в режиме драйвера и запуск шагового двигателя с помощью программы CANopen Builder Limited v1.0, запуск двигателя из консоли, программ, написанных на языках С++ и Java, в которых потребуется библиотека CHAI для преобразователя интерфейсов USB–CAN ГКМН.468351.017-03 КБ «Марафон».

Первые две части представляют собой расшифровку лекций прочитанных Белобородовым А.В. и Харьюзовым П.Р. в 2024–2025 годах.

Читать далее

Как мыслит дизассемблер: внутренняя логика decompiler-инструментов на примере Ghidra и RetDec

Уровень сложностиСложный
Время на прочтение4 мин
Охват и читатели2.3K

Декомпиляция — это не магия, а очень упрямый, скрупулёзный и грязноватый процесс, где каждый байт может оказаться фатальным. В этой статье я разложу по винтикам, как мыслят современные декомпиляторы: как они восстанавливают структуру кода, зачем строят SSA, почему не верят ни одному call’у на слово, и как Ghidra и RetDec реализуют свои механизмы под капотом. Это не глянцевый обзор, а техразбор, вплоть до IR, реконструкции управляющего графа и попытки угадать типы переменных там, где они уже испарились. Будет сложно, но весело.

CALL more_text

Продвинутое использование препроцессора в C и C++

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели7.8K

Зачастую, в проектах ограничивается использование препроцессора по следующим причинам:

— Он не похож на весь остальной язык;
— Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров.

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

Со всеми его недостатками, инструмент есть в языке и достоин изучения.

Читать далее

Окно в терминальной стадии

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели3.6K

Что нужно для взаимодействия с операционной системой исключительно через клавиатуру? Это вопрос, на который каждый разработчик даст свой ответ, и как на него ответили Microsoft, выпустив Windows Terminal?

Читать далее

Efficient Computer: программируем по кафелю

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели2.9K

Экспериментируем с компилятором для новой не Фон-Неймановской архитектуры, обещающей повышение энергоэффективности в 100 раз.

Читать далее

Невидимые загрузки или о пользе свободно стоящих функций

Время на прочтение5 мин
Охват и читатели1.8K

Довольно долго я тягался с по-настоящему глупой проблемой на C++: мне не нравятся функции-члены, но я вынужден их писать, чтобы программисту было хоть немного удобнее работать. Функции-члены обеспечивают две вещи: разграничение областей видимости и обнаружимость. Разграничение областей видимости — менее актуальная из этих задач, поскольку в моём коде на C++ я и так не использую модификаторы private/public. Обнаружимость — большая проблема: я могу написать x.F, а IDE предложит x.Func(). Отлично! «Но правильные программисты пользуются только vim и скромными IDE». Что ж, привет вам, воображаемые мифические обычные программеры. Здесь вам ничего не угрожает, но, пожалуйста, уходя — надевайте сразу два беджика:  «vim отстой» и «Я ненавижу emacs». Отлично помогает завязать разговор с «настоящими» программистами.

Читать далее

Ближайшие события

Роль данных при изучении иностранного языка

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.3K

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

Экспериментируя, уже в зрелом возрасте, весьма продолжительное время, с разными вариантами изучения французского языка, пришел к выводу, что обучающие данные должны удовлетворять следующим условиям:

Читать далее

Разработка IoT устройства с нуля от чайника для чайников

Уровень сложностиСредний
Время на прочтение58 мин
Охват и читатели9.9K

Всем привет!

Меня зовут Егор - я бэкенд разработчик и работаю в бигтехе. Но я не буду рассказывать о перекладывании jsonчиков (или буду). Данная статья (надеюсь, вы оценили каламбур в названии) рассчитана на разработчиков, которые ранее слышали об Arduino или пробовали программировать под эту платформу. В ней мы рассмотрим опыт новичка в плане проектирования и разработки IoT устройства мониторинга уровня CO2 в помещении. Наша цель - сделать устройство, которым просто пользоваться и оно приносит пользу.

Читать далее

MemHawk — профилировщик памяти для многопоточных приложений

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели811

Практически каждому разработчику однажды приходилось искать утечки памяти в его приложении / либо же профилировать использование памяти процессом. Задача эта довольно трудоемкая и непростая.

Большинство популярных профилировщиков памяти либо дают неточную информацию (sampling), либо значительно замедляют выполнение (Valgrind, heaptrack). При этом в многопоточной среде они плохо масштабируются и требуют сложной настройки.

Желание совместить детализацию аналогичную heaptrack и при этом решить проблему с многопоточностью привело к созданию MemHawk. Новый профилировщик сочетает преимущества традиционного подхода с учетом каждой аллокацией, но при этом предоставляет статистику по каждому уникальному стектрейсу без записи каждой аллокации в лог.

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

Спойлер - удалось ускориться по отношению к heaptrack в 30 раз.

Читать далее

Самый обобщённый живучий алгоритм

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели2.1K

Путь от костылей к универсальному живучему алгоритму

В статье разбирается само устройство обобщённого алгоритма: как концептуально закладывать возможность учёта истории наблюдений, реконструкции мира и перебора альтернатив, чтобы ИИ-ассистенты/программисты могли реализовать эти механизмы под свои задачи. Детально разобран только универсальный перебор вариантов; реализация остальных особенностей предоставляется разработчику специализированное версии алгоритма.

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

Пропустить обложку через вентилятор

Project Euler. Векторное программирование и задача номер 1

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели2.9K

Добавляем щепотку векторного программирования в задачки проекта Эйлер. Заодно разбираемся, как эффективно реализовать деление на константу.

Читать далее

Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели3K

В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time.

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

Читать далее

Мониторинг CPU и RAM на панели задач C++

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.3K

Приветствую читателя этой статьи. Я студент, учусь по направлению «Приборостроение», но большую часть времени занимаюсь программированием. Все таки это меня привлекает больше. Задумывался по поводу смены ОС на Arch Linux, но пока отложил эту затею в долгий ящик. Смотрел различные ролики на YouTube и заметил, что многие пользователи ставят себе Polybar, в котором можно легко настраивать информацию, выводимую на нечто похожее на Панель задач в Windows. Тогда я подумал «А почему бы не сделать такое в винде?!» и сразу начал гуглить что к чему. Попытался найти готовые аналоги, но ничего не впечатлило, поэтому решил написать свою программу на C++.

Читать далее

Вклад авторов