Обновить
205.75

C++ *

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

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

Пчела на работе, разработка игр на SFML C++

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

Предыдущая тема

Анимация очень важный игровой элемент, он оживляет персонажей, придаёт игре более естественный вид. В этой статье рассмотрены следующие темы:

управление временем;

анимация спрайтов;

создание класса Animator;

практическое использование класса Animator.

Читать далее

Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow

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

Разработка кроссплатформенного приложения на Qt с использованием нейросетей обученных на tensorflow.

Читать далее

C++, параллелизм и введение в автоматное программирование в SimInTech

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

Поводом для написания статьи послужило не очень приятное для меня событие: модератор Хабра убрал теги – «С++» и «Параллельное программирование» из моей крайней статьи [1]. Этому предшествовало сообщение пользователя, который по его словам не заметил в статье ни С++, ни параллелизма и поспешил об этом известить весь свет. На самом деле он, скорее всего, просмотрел статью по диагонали и попросту "не врубился". Другим объяснить сей казус сложно. Я объяснил причины его заблуждения, но это не было принято во внимание. В ответ – тишина и, более того, пошли у него на поводу.

А до этого, но тоже в контексте рассматриваемой статьи (теперь все это складывается в один пазл), произошло еще одно событие.  Другой пользователь, решивший, видимо, поддержать автора, выразил благодарность, но допустил не очень лестные высказывания в адрес специалистов Бауманки. Не то, чтобы я с ним был во всем согласен, но поскольку на асфальте розы не растут, то в чем-то он был все же прав.

Но дело даже не в содержании постов. Если раньше управлять спорными постами доверялось автору, то теперь модератор решил взять на себя это право. Может, у нас месячник усиленной модерации? Но только в чем причины столь сильного недоверия автору? Ведь, модератор явно не очень вникал в суть проблемы и причины появления подобных постов. Логично было бы предоставить, как и ранее, автору решать вопросы, связанные с содержанием его же статей. Последнее сообщение, хотя и содержало критику, но в целом не нарушало правила сообщества. Хотя, обобщать на всю Бауманку, конечно, не стоило бы.

Читать далее

Instagram* сможет работать без VPN?

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

Популярная социальная сеть была запрещена в России в 2022 году. Для многих поклонников приложения это стало настоящим ударом, а трафик Instagram* понес огромные потери: по данным Brand Analytics на октябрь 2022 года, количество авторов (блогеров) сократилось с 38 млн до 17 млн за год, а количество отправленных сообщений упало со 135 млн до 40 млн за тот же период. Теперь, вероятно, владельцы соцсети ищут новые способы вернуть свою аудиторию. Одним из них может стать работа Instagram* с уже встроенным модулем обхода блокировок в странах-цензорах.

Читать далее

Настройка FDCAN в CubeMx

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

Это почти полная копия моей статьи для внутреннего форума предприятия, где я работаю. Я решил, что эта информация может быть полезна широкому кругу людей, особенно для тех, кто никогда не работал с CAN. В статье описана пошаговая настройка FDCAN в cubeMx, а каждый шаг достаточно подробно описан.

Читать далее

Полиморфизм: подавать холодным

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

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

Читать далее

Оптимизированный доступ к GPIO и не только, часть вторая

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

Уважаемые жители Habr‑а, В данной статье, речь пойдет о доступе к GPIO, и другим регистрам, используя C++.

Несколько лет назад, я подготовил статью, о том, как можно используя constexpr‑клаcсы, серьезно оптимизировать доступ к GPIO‑порту, таким образом, чтобы команда «PA0.set()» — превращалась в одну‑три ассемблерных инструкции, в зависимости от обстоятельств. Этот класс лишь выглядел обычным, который оптимизировался компилятором. Фактически, это была высокоуровневая оптимизация низкоуровневого кода. Теоретически возможно было перегрузить оператор равенства и писать просто PA0=1 или PA0=0, фактически это вызывало inline инструкцию, позволяющую добавить еще и барьерную инструкцию.

Больше года назад, я потерял доступ к аккаунту Habr, и не мог восстановить его. Однако, спустя некоторое время, эксперименты по оптимальному доступу к полям регистров продолжились. И это привело к использованию нехитрых конструкций, построенных на шаблонах. Сегодня, я расскажу к чему привели эти эксперименты.

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

Читать далее

Daily bit(e) of C++ | С числами не так все просто

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

Daily bit(e) of C++ #27, Неразбериха с целочисленными типами и типами с плавающей запятой в C++.

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

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

Читать далее

Как Я: стажировался бекенд-разработчиком (C++) в Яндексе по программе Deep Dive (в формате буткемпа)

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

Продолжаю свою мини-серию статей "Как Я", созданную поддержать начинающих соискателей. Сегодня расскажу как проходила стажировка и немного о внутренней кухне Яндекса. Много информации не будет (NDA), но все равно попытаюсь рассказать исчерпывающе. Итак, погнали.

Вперед к рассказу

Создание модуля WebAssembly с помощью Emscripten, AssemblyScript и Rust

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

В этой небольшой заметке предлагается рассмотреть несколько способов компиляции модуля для WebAssembly, используя три разных подхода. Мы реализуем решение одной и той же задачки на трёх языках и скомпилируем полученный код в модуль WebAssembly. Будем использовать:

Emscripten для компиляции кода, написанного на С++

AssemblyScript для компиляции кода, написанного на, собственно, AssemblyScript

wasm-pack для компиляции кода, написанного на Rust

План такой:

Во введении мы обсудим постановку задачи и немножко поговорим о технологии WebAssembly

В программной части мы реализуем функциональность модуля на трёх языках: c++, AssemblyScript и Rust. Поговорим о том, какие при этом возникают сложности и как их можно обойти

Подведём небольшой итог. Станет видно, какая технология хорошая, а какая не очень

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

Читать далее

Транскрипция речи с открытым исходным кодом

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

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

VPS хостинг в России и VPS в Беларуси

Как ИИ может понять речь?

Сколько стоит содержать виртуальную девушку? Создаем подругу, записывающую кружочки в Telegram, с помощью 4 нейросетей

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

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

Поговорим о технической стороне. Как повторить этот шедевр и можно ли обойтись без сервисов OpenAI, которые сложно оплатить в России? И главное — сколько придется инвестировать в виртуальную подругу.
Читать дальше →

Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы

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

Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и сил? Откуда и какие функции вызываются? Вам когда-нибудь поручали исправить баг в таком проекте, прилагая лишь логи, которые приближают вас к нахождению первопричины проблемы так же, как Моисей к земле обетованной? А попытки воспроизведения бага не дают вам никакой полезной информации? Если ваш ответ да – пожалуйста, присаживайтесь поудобнее.

Читать далее

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

C++23 — финал, C++26 — начало

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

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

Комитет занимался полировкой C++23:
  • static operator[];
  • static constexpr в constexpr-функциях;
  • безопасный range-based for;
  • взаимодействие std::print с другими консольными выводами;
  • монадический интерфейс для std::expected;
  • static_assert(false) и прочее.

И прорабатывал новые фичи C++26:
  • std::get и std::tuple_size для агрегатов;
  • #embed;
  • получение std::stacktrace из исключений;
  • stackful-корутины.

Подробности

Компилятор с полностью гомоморфным шифрованием от Google

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

Ещё в мае 2022 года я переориентировал пару команд в Google на разработку полностью гомоморфного шифрования (вот объявление об этом в рассылке). С тех пор я участвовал в работе над многими проектами в этой области, в частности, руководил поддержкой на github.com/google/fully-homomorphic-encryption – это опенсорсный ПГШ-компилятор для C++. В этой статье даётся вводная информация о том, как при помощи этого инструмента компилировать программы с расчётом на ПГШ. Также пробежимся по тому, из чего этот компилятор состоит.

Читать далее

Переделка ККМ Атол в термопринтер

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

 

Некоторое время назад я увлекался тем, то писал самодельные прошивки для различных готовых устройств. Так, например, сделал пульт для управления солярием из пульта от охранной сигнализации. А что, смотрите сами:

— корпус есть отличный;

— уже встроена клавиатура и не просто, а более‑менее надежная;

— есть светодиодные индикаторы и динамик (пищалка);

— корпус штатно крепится к стене;

— все собрано красиво и на вид надежно.

Внутри есть платка с AVR микроконтроллером, разъемом внутрисхемного программирования. Что осталось:

— вывести наружу com порт для подключения к серверу;

— приделать реле для включения пускателя солярия;

— подключить блок питания;

— и главное — написать саму прошивку.

Читать далее

Приключения капитана Блада: потонет ли Арабелла?

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

Недавно в сети появилась новость о том, что был открыт исходный код игры "Приключения капитана Блада". Мы не смогли пройти мимо и проверили его качество с помощью PVS-Studio. Потонет ли легендарный корабль капитана Блада от найденных багов? Давайте узнаем!

Читать далее

Пчела на работе, разработка игр на SFML C++

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

Предыдущая тема

Делаем ли мы игру или мультимедийное приложение, важно правильно и эффективно
управлять её ресурсами.  Мы должны быть уверены, что игровые ресурсы не будут случайно уничтожены, или повторно загружены, тем самым перегружая память и работоспособность программы.

Читать далее

Просто о RCU (Read–Copy-Update). Часть 2

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

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

Читать далее