Обновить
256K+

C++ *

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

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

Почему нормальное OBD2-приложение должно быть open-source

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

Привет хабр! Есть проекты, которые начинаются не с бизнес‑плана, не с инвесторов и не с попытки «зайти в рынок». Они начинаются чуть проще — ты смотришь на существующие решения, пользуешься ими, раздражаешься и думаешь: «А почему это до сих пор выглядит именно так?»

Примерно так у меня появился ReDrive.

ReDrive — это open‑source мобильное OBD2-приложение, которое превращает смартфон в цифровую приборную панель и диагностический инструмент для автомобиля. Идея простая: подключаешь ELM327-совместимый адаптер к OBD2-порту машины, открываешь приложение и видишь данные с ECU в понятном виде: скорость, обороты, температуру, напряжение, состояние подключения, ошибки и другую телеметрию.

Читать далее

Невидимый враг многопоточности: False Sharing и кэш-линии процессора

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

Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

Читать далее

Как не перепутать мечту, портфолио и вторую работу

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

У разработчиков игр есть довольно странная профессиональная болезнь, когда после рабочего дня, проведенного за тасками и кодом хочется открыть ноутбук и снова писать код, только уже «для себя». Большинство моих коллег по цеху, придя домой тратят 1+ часов чтобы: поделать свой движок или переписать/помодить/любимую/старую/новую/другую (нужное подчеркнуть) игру или собрать какую‑нибудь библиотеку, или починить инструмент, который всех раздражает. Не знаю, может эта заразно и гуляет по студиям, а может это просто кусочек творческой атмосферы, который ты уносишь из офиса, и он некоторое время живет вне этого пространства.

Часто бывает что маленький проект, который был на «пару вечеров» внезапно превращается в несколько лет жизни. Я много раз видел это снаружи и изнутри: СorsixTH, 0AD, Akhenaten, Cytopia, StoneKingdoms, (тут больше open‑source‑games) очень разные проекты (из тех куда я комитил), но все они хорошо показывают одну и ту же вещь, что пет‑проект почти никогда не остаётся «просто маленькой штукой». Он либо умирает, либо начинает требовать от автора взрослого отношения и тянет за собой архитектуру, поддержку, документациу, общение с коллегами по цеху и теми кто просто играет, разбора багов, релизов и неприятных компромиссов.

И главный вопрос тут не «как найти мотивацию», а точно ли тебе это нужно?

Читать далее

Бониана: приложение к браслету

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

На сайте Engee в разделе «Библиотека конечных автоматов» в наглядной форме представлены КА [1]. Полюбопытствуйте. Вполне достаточно для первого знакомства. Там есть раздел «Материалы Engee по Конечным автоматам», в который помещены проекты, демонстрирующие качества КА на практике. Сейчас это три проекта — «Регулирование температуры воздуха», «Электростеклоподъемник для автомобиля» и «Управление перекрестком». Подобно проекту браслета из первой части статьи [2] на их примере покажем возможности автоматного программирования (АП) в среде ВКПа в сравнении с автоматами Engee или, что будет точнее, в сравнении с моделью Харелла, реализованной здесь.

Выберем для этого проект с светофорами. На сайте имеется следующее его описание:

«Цель этого примера — разработать модель управления перекрестком, состоящим из двух автомобильных и одного пешеходного потоков, которые управляются двумя трёхсекционными и одним двухсекционным светофорами соответственно. Алгоритм переключения секций будет определяться согласно временной диаграмме. Управляющий алгоритм будет реализован при помощи нескольких блоков Chart, а снятие входных и формирование выходных сигналов — блоками C-Function

На рис. 1 показана структурная схема проекта в Engee. На ней несколько блоков, где основные — блок Commn_Counter, который моделирует временные такты диаграммы, блок Traffic_Lights, реализующий управление, заметим, сразу двумя светофорами и блок Crosswalk для светофора потока пешеходов. Временная диаграмма работы светофоров показана на рис. 2.

Читать далее

OneOCR — скрытая OCR внутри Windows 11

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

OneOCR — это набор из двух динамических библиотек и одной модели ONNX для распознавания текста в приложениях Snipping Tool и Photos в Windows 11.

Читать далее

Простой поиск имен в С++

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

Это продолжение темы начатой в статье Важны ли компилятору имена, и продолженной в Ночью все кошки серы, а using'и одинаковы, и далее в Компиляторы тоже путаются в именах. Если не читали, то лучше будет пробежаться по диагонали. Теперь вот мы подобрались к такой интересной теме, как квалифицированный и неквалифицированный поиск.

Что такое простой поиск(неквалифицированный) имени n в области S? Это механизм компилятора, который находит все объявления n, находящиеся непосредственно в этой области. Просто? С виду да, но даже этот простой механизм часто работает не так, как ожидает разработчик.

Например, у нас есть пространство имён N и локальная переменная N. Они могут сосуществовать вместе? Могут, потому что находятся в разных областях видимости. А пространство имён и глобальная переменная с тем же именем могут? Как же мы докатились до жизни такой, давайте разбираться.

Вот такой простой с++

Универсальный Task для C++20 coroutines: тип результата, политика запуска и владение coroutine state

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

Разбор минимального пользовательского Task для C++20 coroutines: выбор promise_type для void и value-результата, политики initial_suspend(), хранение coroutine_handle, final_suspend(), сохранение результата и исключения, а также границы текущей реализации.

Читать дале

Реалии open‑source разработки на примере Conan и userver

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

Исторически сложилось, что одна из главных проблем C++ — это тулчейны, системы сборки, управление зависимостями и всё вокруг. Ничего из этого не является частью стандарта, поэтому кто во что горазд. Любой бигтех просто обязан написать свой инструмент, который наконец‑то станет лучшим.

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

Пришло время исправить это упущение, и на примере внедрения Conan в userver также рассмотреть реалии open‑source разработки. Нам быстро придется покинуть мир розовых пони, погрузиться в самые дебри и понять, что иногда новые модные проекты держаться на людях, отрицающих все современные методы разработки.

Читать далее

Shine — C++ Фреймворк для десктоп приложений с использованием React

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

Краткий обзор и представление фреймворка Shine для разработки десктоп приложений используя C++ и React.

Читать далее

Direct 2D #9 О текстурах

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

Данная статья рассказывает о "Текстуре" в Direct2D , с конкретными примерами, кратко, понятно и на русском(в отличие от машинного перевода MSDN)

Читать далее

Личный опыт: Как я учил языки и написал свою программу для запоминания слов

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

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

Читать далее

Браслет для Бони

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

Возможно, на мой предвзятый взгляд, нынче автоматным программированием (АП) называют любое программирование, в которое вводят состояния (а параллельным – где используют потоки). Но не все, что с колесами – машина, а с крыльями – самолет. И далеко не всегда то, что «выглядит» как автомат, «плавает» как автомат и «крякает» как автомат им является. Это ясно, если руководствоваться математическим определением конечного автомата (КА). Только соответствие этому позволяет  считать программирование автоматным. Подробнее же об АП рассказано в [1].

Среди существующих программных подходов некоторые на взгляд программистов относятся к категории АП. Это, например, варианты диаграмм Харела (Statecharts) и языков на них основанных. Например, UML (Unified Modeling Language). Именно этой теме посвящена статья на Хабре, которая описывает проектирование на базе КА  в среде Engee[2].  В последней есть библиотека «Конечные автоматы» – «лучший инструмент для визуального проектирования сложной управляющей логики» [3].

Разберем данную статью, создав аналог рассмотренного в ней решения, но только на языке С++ и в среде ВКПа – классическом варианте технологии автоматного программирования. Это позволит объективно сравнить подходы, а вам, «хабравчане», останется только составить уже свое мнение о разных вариантах АП.

Читать далее

Как мы искали адреса регистров в памяти прибора

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

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

Читать далее

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

В чем реальная проблема внедрения видеоаналитики на предприятиях?

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

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

Нейросеть не ищет в своей памяти «похожую картинку», как это делал бы человек. Вместо этого она выделяет в кадре набор математических признаков (например: «объект круглой формы находится в верхней части другого объекта»). На основе миллионов заранее обученных весов (параметров) сеть вычисляет вероятность: «это каска — 96%», «это человек — 98%».

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

Читать далее

С++ с нуля в 2026 году: почему нужно сразу учить C++20 и забыть про дедовские туториалы

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

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

Если вы скажете знакомому разработчику (особенно фронтэндеру или Python-разработчику), что хотите выучить плюсы с нуля, скорее всего на вас посмотрят с сочувствием. В IT-сообществе укоренилось мнение, что плюсы - это темный лес с какими-то непонятными указателями, ручным управлением памятью и прочими прелестями языка. В целом они правы, кроме одного момента. Это было десятки лет назад. Начиная с С++11, а уж тем более в эпоху С++20, язык стал другим. Разработчику больше не нужно следить за жизнью переменной, выделенной через new, бояться обратиться за пределы массива, жонглировать сырыми указателями. На многое появились удобные обертки, которые упрощают жизнь разработчику. А некоторые из них еще и никак не влияют на производительность. Если вы студент, человек из другой сферы или разработчик, который хочет потрогать новый инструмент - не бойтесь. Главное - правильно начать.

Читать далее

Scene not Graph

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

Scene not Graph. Место для запятой выбирайте сами.

Scene Graph как концепция появился в академической и промышленной среде, где компьютерная графика использовалась для CAD-систем, научной визуализации и инженерного проектирования, а потом уже пришел в игры. Задачи отрисовки мира и его объектов в CAD были совсем другие и нужно было описывать, например, сложные сборки из деталей, с шестерней в редукторе, редукторе в двигателе, двигателе в машине, и такая модель отражала физическую реальность, которая играм была нужна с приставкой "не". Причины, по которым Scene Graph пришел и остается в играх довольно банальные, этой концепции учат в университете, и многие кто пришел делать игры, естественно знакомились с ней раньше других. На курсе компьютерной графики ИТМО эту модель давали уже на втором месяце и объясняли её полгода, а остальные пять или шесть техник давали всего месяц и в конце года.

Но проблема была в том, что в CAD иерархия объектов это буквальное описание устройства изделия, и перенос этой модели в игры в целом и в игровую графику в частности был концептуальной ошибкой с самого начала. Поняли это достаточно поздно, чтобы эта модель успела поселиться в мозгах целого поколения, выпуск OpenGL в 1992 году с принципиально другой моделью (immediate mode) стал первым сигналом что играм надо двигаться в другую сторону, но инерция Scene Graph в движковой архитектуре сохраняется до сих пор.

Читать далее

«ECS — like» вектор на с++

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

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

И не смотря на их всеобъемлющую вариативность, в жизни встречаются ситуации когда один вектор не может решить задачу. Точнее может, но через костыли...

О чем я?

Читать далее

Многопоточность в SCADA системах

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

Пишу SCADA-ядро на C++ для инженерных систем: опрос ПЛК, кэширование значений, правила автоматики и управление исполнительными механизмами. На текущем этапе упёрся в практический вопрос многопоточности: как правильно разделять потоки чтения и записи, как сериализовать доступ к одному каналу связи, и насколько оправдано использование std::condition_variable. В статье показываю текущую реализацию потока опроса ПЛК и хочу услышать мнение коллег, которые разрабатывали промышленные SCADA-системы.

Читать далее

MemHawk: часть 2. Real-time flamegraph в вашей Grafana

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

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

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

Ключевые особенности:
Flamegraph аллокаций и деаллокаций за интервал времени
График потребления памяти с детализацией до функции/строчки в коде(настраиваемо)
Flamegraph в момент пика памяти
Flamegraph суммарного числа аллокаций
Flamegraph суммарного объема аллокаций

Звучит интересно!

Вышел рекомпилятор MegaDriveRecomp

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

Теперь возможно экспортировать в C++ код игр Sega MegaDrive (Genesis) для последующей модификации, включая ресурсы игры.

https://github.com/testdriveupgrade/MegaDriveRecomp

Читать далее