Как стать автором
Поиск
Написать публикацию
Обновить
0

C++ *

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

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

Combat Abilities System — Расширение Gameplay Ability System в Unreal Engine, Часть 2

Уровень сложностиПростой
Время на прочтение23 мин
Количество просмотров1.1K

В этой статье пойдёт речь о расширении компонента AbilitySysystemComponent, создании способности атаки c комбинацией и добавление этой способности с помощью GameFeatures.

Читать далее

Отправляем Qt-логи с метками в Sentry

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.2K

Привет всем.

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

Читать далее

Репликация: создание кластера, подключение, изменения настроек таблицы в кластере

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

Привет, я Майк.

Недавно я начал работать в компании Manticore на должности Developer Advocate. Я не совсем далёк от ИТ, но сейчас активно осваиваю современные технологии. В этом блоге я буду делиться своим опытом и тем, что узнаю о Manticore. Я планирую вести дневник, где буду рассказывать, что такое Manticore и как с ним работать. Давайте вместе разбираться, как все устроено, выявлять проблемы и взаимодействовать с разработчиками.

Если вам интересно изучать Manticore вместе со мной, я буду держать вас в курсе в:

Читать далее

Как найти работу для фиксиков: анализируем Godot Engine

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров5.5K

Разработка игр и их прохождение могут быть невероятно увлекательными и затягивающими занятиями, приносящими огромное удовольствие. Но ничто так не портит впечатление от игрового процесса, как коварно спрятавшийся баг. Поэтому сегодня под нашим пристальным вниманием окажется Open Source движок Godot Engine. Давайте проверим, насколько он хорош, и готов ли он подарить нам незабываемые эмоции от создания и прохождения игр.

Читать далее

Как поделить не деля или оптимизация деления компиляторам(и)

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

Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следущий snippet:

Смотреть код

Combat Abilities System — Расширение Gameplay Ability System в Unreal Engine, Часть 1

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров1.3K

В серии статьей я расскажу о моём процессе создания плагина Combat Abilities System, который расширяет возможности стандартного плагина Gameplay Ability System в Unreal Engine. Мы рассмотрим шаги разработки, архитектурные решения и особенности, которые делают наш плагин уникальным и полезным для создания боевых механик в играх.

Читать далее

Разгоняем C++ с кастомными аллокаторами

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров8.9K

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

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

Читать далее

Chrome 127 — опять «пиратим» для Windows 7

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

Вышла 127 версия браузера Google Chrome.

Вы уже предвкушавшие, что статья будет посвящена обзору нововведений в популярном браузере? Вообще-то да, только в очередной раз делать это будем через отладчик x64dbg (или любой другой по вкусу, кроме gdb).

Читать далее

Как мы написали конкурентные структуры данных на C++ и научились их верифицировать

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

Привет! В команде ВКонтакте мы переписываем рантайм движков баз данных — они становятся быстрее, надёжнее, а ещё с новым рантаймом проще писать код. Однако есть нюанс: в новом рантайме много конкурентных структур данных, в том числе нужных для работы с корутинами из С++20. Появляется интересная задача — проверять корректность этих конкурентных структур данных до выхода кода в продакшен.

Для решения этой задачи команда ВКонтакте вместе со студентами из университетов ИТМО и СПбГУ работала над научно-исследовательским проектом — верификацией конкурентных структур данных на языке C++. В этой статье подробно расскажем, как мы в рамках проекта проверяли корректность наших конкурентных структур данных и заодно исправили найденную в нашем новом рантайме ошибку.

Читать далее

Алгоритмическое мышление для дата-сайентистов: как писать код, который экономит время и место

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров6.3K

Алгоритмическое мышление помогает писать быстрый код, который экономно расходует вычислительные ресурсы памяти и хранилища.

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

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

Читать дальше →

4 типовые ловушки в работе со строками в С и С++ и как их избежать

Время на прочтение9 мин
Количество просмотров17K

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

Читать далее

Рефакторинг игрового движка: от сырых указателей к умным

Время на прочтение16 мин
Количество просмотров6.7K

Привет! Когда-то давно я уже писал статью про сырые и умные указатели, попытки использовать GC вместо них. Тогда я решил оставаться в С++ с сырыми указателями, а GC отвел место в скриптах. Но за долгое время я все больше и больше понимал что сырые указатели слишком опасны, тем более что мой движок позволяет писать игровой код на С++. Количество багов лишь подкрепляло уверенность что пора уходить от ручного управления памятью. Однако идеи про GC никак не оставляли в покое...

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

Читать далее

Имплементация чисел с фиксированной точкой (часть 2)

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.4K

Итак, в прошлый раз я представил базовую идею как можно реализовать Fixed-point arithmetic, а так же набросок кода на C++, в котором в комментариях нашли довольно много проблем (а я сам нашёл ещё больше). В этот раз хочется представить улучшенную реализацию, разбор тонких моментов в коде и провести более детальный анализ получаемых результатов.

Читать далее

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

Тысяча и одна библиотека С++

Время на прочтение65 мин
Количество просмотров48K

В жизни каждого программиста С++ рано или поздно возникает задача, которую кто-либо уже решил. Однако найти это решение бывает очень непросто в силу разных причин: оно недостаточно разрекламировано, либо имеет нечеткую документацию, или возникает проблема языкового барьера, ну, или поисковики просто плохо ищут).

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

На кой review это надо?

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

Вы проводите код-ревью на текущем проекте или считаете что это просто пустая трата времени?

На собеседованиях я иногда спрашиваю, зачем проводят код-ревью. Вы можете удивиться, но один матерый senior, с 10+ лет в игрострое, и еще пятерку отмотавший в ембедед разработке за наглость получения красного диплома, ответил "потому что все так делают" - это конечно редкий запущенный случай, но было. Еще встречается такое - "потому что так сказал сенсей" (лид, бабушка, ажаль шеф - подставьте свое). Еще какой-то процент людей отвечали, "потому что так делают в гугле", и когда, заметьте не первый человек, на полном серьезе говорит это на собесах я начинаю сомневаться в способностях нашего tech-HR проводить первичное собеседование, а он, надо сказать, иногда еще пишет продуктовый код и эти самые ревью регулярно проходит наравне со всей командой разработки. Не сомневаться же людях, которые пришли?

Поревьювать статью

Дебажим баги в дебаггере x64dbg. Без дебаггера

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

Ни один процесс разработки программы не проходит без отладки. Современные IDE обеспечивают программиста встроенным отладчиком. Однако бывают ситуации, когда использование IDE для отладки избыточно или невозможно, и тогда на помощь приходят автономные отладчики, один из которых — x64dbg.

Сделать шаг с заходом

Игрушечная имплементация чисел с фиксированной точкой в C++

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

В C++ нет базового типа чисел с фиксированной точкой, в стандартной библиотеке также нет классов для них. В тоже время работа с числами с плавающей точкой (double, float) часто может быть неочевидна (например, ответьте на вопрос: ассоциативна ли операция сложения над ними?), вдобавок язык предоставляет (часто критикуемую) возможность перегрузки арифмитических операторов, подталкивая нас к созданию собственного типа данных.

Прежде чем писать код, давайте повторим мат. часть, а именно о представление чисел в типах uint8_t, int8_t и особенностях арифмитических операциях над ними. Итак, сложенение двух uint8_t происходит по модулю 256, то есть 1+2 = 3, но 1 + 255 = 0, для int8_t отрицательные значения можно ввести следущим образом: отрицательные числа соответсвуют тем безнаковым числам из uint8_t которые складываясь по модулю 256 дадут ноль, то есть -1 будем в памяти выглядить как 255 (FF). Границы типа int8_t -128...+127, для отрицательных чисел старший бит всегда равен 1. При умножении двух int8_t получаем результат типа int16_t, частное от деления int16_t на uint8_t будет иметь тип uint8_t. Все эти сведения носят аболютно тривиальный характер, но, они необходимы для дальнейшего понимания статьи.

Итак, перейдём к основной идее: что если мы мысленно возьмем значение типа int8_t и скажем, что теперь это не число единиц, а скажем, число 1/4 (проговорим словами: это число показывает сколько четвертых частей в исходном числе)? После чего инкапсулируем эту перменную в поле класса и перегрузим для него основные арифмитичекие операторы и напишем свой operator string() для правильного вывода таких чисел. Ниже, можно посмотреть, что получается из этой идеи.

Смотреть код

Как наш ученик попал на стажировку в VK. История Артёма Мазура

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.1K

Мы следим за жизнью всех ребят, которые приходят в ЦПМ и участвуют в наших проектах. Каждый раз, когда мы узнаем об их достижениях, нам очень трепетно и радостно! Сегодня мы хотим поделиться историей Артёма Мазура, который прошел на стажировку, внимание, в VK!

Читать далее

Прошиваем программу не только в начало FLASH памяти STM32

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

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

Читать далее

Фиксим баги в вашем AI или разбор ошибок в OpenVINO

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.3K

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

Читать далее

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