Как стать автором
Обновить
133.16
Рейтинг

C++ *

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

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

Игровая камера: сборник приемов

Время прочтения 17 мин
Просмотры 7.3K
Блог компании UNIGINE C++ *Работа с 3D-графикой *Разработка игр *Игры и игровые консоли
Туториал

Сегодня мы узнаем:

- можно ли считать людей, которые инвертируют оси в играх, лицами с нетрадиционной ориентацией;

- что такое фокусное расстояние объектива и для чего оно нужно;

- какой угол обзора надо делать у камер, чтобы монитор выглядел, как окно в виртуальный мир;

- как правильно фотографировать;

- и сделаем простенький симулятор дрифта.

Погнали!
Всего голосов 62: ↑62 и ↓0 +62
Комментарии 23

Астрофото: совмещаем одиночные кадры

Время прочтения 11 мин
Просмотры 4.5K
C++ *Обработка изображений *Астрономия
Из песочницы
✏️ Технотекст 2022

Одной из главных проблем при съёмке астрофотографий являются разнообразные шумы. Не буду подробно останавливаться на том, откуда они берутся и какие компоненты в них присутствуют. Об этом уже есть хорошая серия статей на Хабре, за подробностями рекомендую обратиться к ней. Здесь я только резюмирую основной способ борьбы с шумом: нужно снять несколько кадров одной и той же области неба (чем больше, тем лучше) и усреднить сигнал с соответствующих пикселей.


Но какие пиксели на разных кадрах считать соответствующими? Если бы можно было гарантировать, что объекты между кадрами не сдвинутся ни на пиксель, то всё было бы предельно ясно: просто суммируем одни и те же пиксели на матрице. Но что делать, когда слежение неидеально, или съёмка вовсе ведётся с неподвижного штатива? Тогда звёзды и другие небесные тела будут смещаться, и перед сложением кадры нужно будет правильно наложить друг на друга. Эта статья посвящена тому, как это сделать.

Читать далее
Всего голосов 42: ↑42 и ↓0 +42
Комментарии 15

Stm32 + USB на шаблонах C++. Продолжение'. Делаем MSC

Время прочтения 12 мин
Просмотры 4.6K
C++ *Программирование микроконтроллеров *

В продолжение темы применения современного C++, а именно шаблонов, в программировании микроконтроллеров рассматриваю реализацию еще одного популярного класса USB - Mass Storage, а также вопрос создания композитного устройства.

Читать далее
Всего голосов 19: ↑16 и ↓3 +13
Комментарии 10

KPHP спустя 2 года

Время прочтения 7 мин
Просмотры 13K
Блог компании VK Open source *PHP *C++ *Компиляторы *

Ровно два года назад — в ту же самую дату и в то же самое время — я опубликовал статью «ВКонтакте снова выкладывает KPHP».

Сегодня рассказываю, куда мы продвинулись за эти два года: про язык, рантайм, использование KPHP вне ВКонтакте, другие open-source проекты и февраль 2022-го.

Читать далее
Всего голосов 87: ↑82 и ↓5 +77
Комментарии 25

Какую модель памяти следует использовать в языке Rust?

Время прочтения 10 мин
Просмотры 8K
Блог компании Timeweb Cloud Программирование *C++ *Rust *
Перевод
image

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

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

Тем не менее, я рассчитываю, что мой более чем тридцатилетний опыт работы с конкурентностью и моя работа над моделью памяти в C/C++ (безотносительно memory_order_consume), а также моя роль ведущего специалиста по поддержке модели памяти ядра (LKMM) послужат хорошей отправной точкой, чтобы высказаться о более прозаических задачах, решение которых, я уверен, стремятся поддержать в сообществе Rust.
Читать дальше →
Всего голосов 31: ↑27 и ↓4 +23
Комментарии 3

Найти и уничтожить: как Clickhouse удаляет собственный код из памяти и переключается на использование Huge Pages

Время прочтения 8 мин
Просмотры 8K
Ненормальное программирование *Open source *C++ **nix *Разработка под Linux *

В Clickhouse есть интересный код: при вызове одной функции происходит перевод области памяти исполняемого кода программы на использование Huge Pages. В процессе весь код программы копируется на новое место, память, использовавшаяся изначально для кода программы возвращается ОС, а потом запрашивается снова. Эта статья основана на соответствующей части доклада с Я.Субботника.

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

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 31

Релиз языка программирования NewLang 0.3

Время прочтения 9 мин
Просмотры 6.7K
Ненормальное программирование *Программирование *C++ *Компиляторы *Машинное обучение *
image

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


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

Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 50

Правка чужого кода

Время прочтения 6 мин
Просмотры 14K
Блог компании Timeweb Cloud C++ *Git *GitHub *
Туториал
Всегда приятно, когда удаётся сделать мир чуточку лучше.


Для одного проекта мне понадобился просмотрщик памяти в DOS. В идеале хотелось бы иметь редактор памяти, чтобы в нём был поиск по ключевым словам, перемещение к заданному адресу. Но для старта мне было бы достаточно хотя бы возможность просмотра всего мегабайта доступной «нижней» памяти.

Старожилы знают, что в комплекте с различными версиями ДОС шли дополнительные утилиты, и среди них была «замечательная» утилита debug, которая убога чуть более, чем полностью. Ещё во времена моей молодости эта утилита вызывала у меня самые противоречивые чувства, то сейчас и подавно. Пользоваться ей без успокоительных очень сложно, с другой стороны, хорошо, что она есть. Но мне возможностей и удобства этой утилиты не хватало, поэтому пришлось искать другой подходящий инструмент. После длительного гугления наткнулся на исходники утилиты RAM View.

К сожалению, исполняемого файла найти не удалось, только исходные коды под Borland C++ 3.1, и как впоследствии оказалось, сама программа содержала ошибки.

Всё это вылилось в интересный квест по поиску старого компилятора, исправления ошибок в программе 25-летней давности и создания запроса на слияние.
Читать дальше →
Всего голосов 91: ↑90 и ↓1 +89
Комментарии 48

Имя enum'a C++ в рантайме

Время прочтения 10 мин
Просмотры 2.7K
Ненормальное программирование *Open source *C++ *

Получение имени типа, не важно это структура или перечисление, в C++ — проблема. То, что тривиально известно компилятору на этапе парсинга исходников, не получится перевести в человеко-читаемый вид в рантайме. Можно использовать std::type_info::name, который не является переносимым решением, потому что зависит от реализации манглинга в компиляторе. Некоторые компиляторы (например, MSVC, IBM, Oracle) создают "удобное" имя типа, а вот gcc и clang, возвращают искаженное имя, котороe можно преобразовать в удобочитаемую форму с помощью дополнительных функций, например abi::__cxa_demangle. Чтобы вся эта магия работала нужно подключить RTTI, который тоже не всегда доступен, а иногда и вообще-то вреден, потому что сжирает драгоценную производительность, но можно сделать по другому.

follow the white rabbit
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 11

Оптимизируем дерево отрезков, делаем из него куст o_O

Время прочтения 5 мин
Просмотры 2.9K
Спортивное программирование *Python *C++ *
Из песочницы

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

Математика говорит, что это невозможно, но нам всё равно!

Расширять сознание
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 4

Как мы баг в PVS-Studio искали или 278 Гигабайтов логов

Время прочтения 11 мин
Просмотры 5.3K
Блог компании PVS-Studio C++ *

Предлагаем вашему вниманию интересную историю о поиске бага внутри анализатора PVS-Studio. Да, мы тоже допускаем ошибки, но мы готовы засучить рукава и залезть в самую глубину "кроличьей норы".


1005_StoriesFromSupport_ru/image1.png


Небольшое предисловие


Наш коллега уже рассказывал про нашу техническую поддержку. Но всегда интересно послушать какие-то истории, и они у нас есть.


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

Читать дальше →
Всего голосов 44: ↑42 и ↓2 +40
Комментарии 7

Pastilda: Независимое Beta-Тестирование (16+)

Время прочтения 6 мин
Просмотры 3.3K
Криптография *Open source *C++ *Программирование микроконтроллеров *Схемотехника *

Решил купить себе Pastild(у). Это аппаратный хранитель паролей и одновременно USB Flash(ка). Также понравилась возможность съёмной SD карты. Идея аппаратного менеджера паролей, который не требует отдельного USB просто великолепная!

Какие же впечатления от использования Пастильды (User experience)?

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 13

Примеры ошибок, которые может обнаружить PVS-Studio в коде LLVM 15.0

Время прочтения 20 мин
Просмотры 3K
Блог компании PVS-Studio Open source *C++ *Компиляторы *

PVS-Studio: потому, что могу
Компиляторы развиваются и выдают всё больше предупреждений. Остаются ли преимущества от использования статических анализаторов кода, таких как PVS-Studio? Да, так как анализаторы тоже развиваются. Перед вами статья о том, как PVS-Studio находит баги даже в компиляторе.

Читать дальше →
Всего голосов 27: ↑25 и ↓2 +23
Комментарии 8

nocc — распределённый компилятор для гигантских проектов на С++

Время прочтения 8 мин
Просмотры 12K
Блог компании VK Высокая производительность *Программирование *C++ *Распределённые системы *
✏️ Технотекст 2022

У нас есть задача постоянно компилировать тонны плюсового кода. Наш проект — почти 200 000 cpp- и h-файлов, множество Git-веток, сотни разработчиков, десятки билд-агентов: его нельзя единожды скомпилировать, приходится перекомпилировать постоянно, параллельно, разные версии.

Наш проект необычный. Потому что эти 200 000 файлов — это результат автогенерации. Потому что пишем мы на PHP, а потом через KPHP все PHP-исходники превращаются в плюсы. Именно так разрабатывается бэкенд ВКонтакте.

Компилировать тысячи объектников долго. Локально это занимает много часов. Мы использовали distcc — но всё равно медленно. Мы даже пропатчили distcc для поддержки precompiled headers — но даже тогда медленно. И решили написать своё — чтоб стало, наконец, быстро.

В итоге мы написали замену distcc — компилятор nocc. Он не имеет никакого отношения к PHP и даже к KPHP, а просто предназначен для компиляции .cpp.o в промышленных масштабах.

Это техническая статья про параллелизацию, демоны и специфику С++. Ссылки на GitHub и видео приложу в конце статьи.

Читать далее
Всего голосов 110: ↑108 и ↓2 +106
Комментарии 69

Истории

Как работать с атомарными типами данных в C++

Время прочтения 13 мин
Просмотры 15K
Блог компании МойОфис Программирование *C++ *
✏️ Технотекст 2022

Насколько популярна сегодня тема атомарных данных, настолько же она обширна для одной статьи. Можно подробно останавливаться на разных аспектах атомарности: например, анализировать memory ordering, рассуждать о lock-free алгоритмах с использованием атомиков или исследовать производительность атомиков на разных платформах.

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

Читать далее
Всего голосов 61: ↑60 и ↓1 +59
Комментарии 11

Как PVS-Studio защищает от поспешных правок кода, пример N6

Время прочтения 3 мин
Просмотры 2.2K
Блог компании PVS-Studio C++ *

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

Читать далее
Всего голосов 11: ↑7 и ↓4 +3
Комментарии 1

Конструктор сетевых сервисов

Время прочтения 28 мин
Просмотры 2.5K
Программирование *C++ *IT-инфраструктура *Сетевые технологии *
Туториал

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

В процессе работы над различными проектами, рано или поздно возникает необходимость реализации клиент/серверных протоколов передачи данных, это может быть один из стандартных протоколов типа HTTP, так и реализация своих собственных. Реализация как клиента, так и сервера, всегда занимает большое количество времени, не говоря уже об отладке и вся работа сводится к поиску готовых решений, таких как CURL или NGINX. Когда же требуется реализовать работу своего собственного протокола передачи данных, начинаются проблемы. В один из таких моментов мне пришла в голову идея реализации конструктора, который служил бы каркасом основного приложения и всю работу с сетью брал на себя, чтобы оставалось реализовать только сам протокол. Для этих целей мною был разработан проект AWH.

Подробнее
Всего голосов 11: ↑7 и ↓4 +3
Комментарии 26

Не повторять, выполнено профессионалами: как не надо разрабатывать таск-трекер

Время прочтения 4 мин
Просмотры 4.2K
JavaScript *PostgreSQL *C++ *DevOps *VueJS *

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

Читать далее
Всего голосов 16: ↑6 и ↓10 -4
Комментарии 18

Топ-10 докладов на С++ конференциях 2019-2022 года

Время прочтения 3 мин
Просмотры 8K
Блог компании PVS-Studio C++ *Конференции

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

Читать далее
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 3

Как я начал писать движки для визуальных новелл на C++. Часть 1: Начало пути

Время прочтения 6 мин
Просмотры 9.2K
C++ *
Из песочницы
✏️ Технотекст 2022

Бывает такое чувство, что ты изучаешь что-то не то. Вроде интересно, а вроде и нет. Именно такое чувство у меня и было, когда я изучал Unreal Engine — мощный движок, можно сделать от шутера в открытом мире до платформера, но интереса нет. До Unreal Engine я испробовал Ren’Py, Unity, Java и C#, но, как и с Unreal Engine, у меня не было интереса. Мне хотелось чего-то одновременно интересного и сложного.

Именно в декабре 2020 года я и решил — хочу написать собственный движок для визуальных новелл на C++. Почему для визуальных новелл? Мне они просто нравятся, вот и весь ответ.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 5

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

Работа

QT разработчик
18 вакансий
Программист C++
152 вакансии