Как стать автором
Обновить
187.79

C++ *

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

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

OpenGL примитивы в стиле RAII

Время на прочтение4 мин
Количество просмотров3.9K
Добрый день, хабра юзеры. Я давно не писал и возможно кто-то заждался статей от меня — конечно же нет. Так как свободного времени стало чутка поболее, а мой GitHub совершенно пуст, я решил написать свой клон Mein kampf Minecraft. С большой вероятностью, я задокументирую это — следите за моими статьями на habr.com. Сегодня покажу как я обернул OpenGL примитивы в RAII стиле, если интересно — под кат.
Читать дальше →

Цикл уроков по SDL 2.0: урок 6 — Загружаем шрифты с помощью SDL_ttf

Время на прочтение5 мин
Количество просмотров11K
image

От переводчика:

Это продолжение серии переводов туториалов от Twinklebear, в оригинале доступных тут. Перевод отчасти вольный и может содержать незначительные поправки или дополнения от переводчика. Перевод первых двух уроков — за авторством InvalidPointer, а третьего и четвертого — за k1-801.


Список уроков:

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

Автоматные рекурсивные вычисления

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

1. Введение


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

В теории автоматов понятие вложенных автоматов, на базе которых строилась бы практика автоматных подпрограмм (АПП), обсуждается редко. Подобная (вложенная) иерархическая организация автоматов, если и рассматривается, то весьма поверхностно. Одной из причин подобного отношения может служить сложность реализации вложенной иерархии на аппаратном уровне [1, 2].

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

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

ECS back and forth

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

Привет, Хабр! Представляю вашему вниманию перевод статьи "ECS back and forth — Part 1 — Introduction" автора Michele skypjack Caini.


ECS back and forth


Часть 1 — Введение.


Когда я в первые узнал про архитектурный шаблон entity component system, я пошёл искать больше информации о нём в интернете. Но, к сожалению, тогда на эту тему не было пролито достаточно света, а ресурсов, где описывались бы разные подходы с их плюсами и минусами, не существовало. Почти каждые статья, пост, комментарии (существенная их доля) были об одной специфичной реализации и только слегка ссылались на другие примеры.


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


Почему я должен использовать ECS?


Старайтесь не быть одураченным тем, что говорят вокруг. Если вы работаете над AAA проектами на серьёзном уровне, главной причиной почему вы должны использовать такой серьёзный инструмент — это организация кода, а не (только) производительность. Конечно, производительность имеет не последнее значение, но хорошо организованная кодовая база бесценна, и с большинством игр у вас не будет проблем с производительностью, будь они написаны с использованием ОПП парадигмы либо с другой опциональной реализацией компонентного шаблона.


В сущности, компонентно-ориентированное программирование — это крайне мощный инструмент, который позволяет сделать код легко расширяемым и ускорить цикл разработки. Бесспорно, всё это должно быть вашей первостепенной целью.


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

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

Как мы используем многопоточность в геометрическом ядре

Время на прочтение6 мин
Количество просмотров5.1K
Вопрос о многопоточности задают даже далёкие от разработки люди, когда речь заходит о производительности 3D-приложений, в частности систем проектирования (САПР). Поддержка многопоточности закладывается в геометрическом ядре системы. Поэтому мы решили на своём примере показать, какие механизмы для этого разработаны и как они помогают использовать многопоточные вычисления в 3D-приложении.

Этот пост подготовила Татьяна Митина, сотрудник C3D Labs, в прошлом Intel (читатели Хабра знакомы с ней по истории «Мне 57 лет, и я scrum-мастер»).

image
Модель завода с технологическим оборудованием в КОМПАС-3D
ООО «ОКБ» (Новосибирск)

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

MSVC Backend обновления в Visual Studio 2019 версии 16.3 и 16.4

Время на прочтение3 мин
Количество просмотров3.2K
Версии 16.3 и 16.4 Visual Studio 2019 принесли много новых улучшений в качестве генерации кода, пропускной способности сборки и безопасности. Если вы еще не загрузили свою копию, вот краткий обзор того, что вы упустили.

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

Сортировка выбором минимумов (максимумов)

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

imageМногие программисты думают, что Quick Sort — самый быстрый алгоритм из всех существующих. Отчасти это так. Но работает она действительно хорошо только если правильно выбран опорный элемент (тогда сложность составляет O (n log n)). В противном же случае асимптотика будет примерно такой же как и у пузырика (то-есть O (n2)).
При этом, если массив уже отсортирован, то алгоритм всё-равно будет работать не быстрее, чем O (n log n)


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

«Дело было вечером, делать было нечего», — Сергей Михалков.

Требования:


  1. Лучший случай O (n)
  2. Средний случай O (n log n)
  3. Худший случай O (n log n)
  4. В среднем быстрее быстрой сортировки


А теперь давайте обо всём по порядку


Чтобы наш алгоритм всегда работал быстро, нужно чтобы в среднем случае асимптотика была хотя бы O (n log n), а в лучшем — O (n). Все мы прекрасно знаем, что в лучшем случае сортировка вставками работает за один проход. Но в худшем ей придётся гонять по массиву столько раз, сколько в нём элементов.


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

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

Время на прочтение9 мин
Количество просмотров4.7K
Одним из нововведений Visual Studio 2012 сопутствовало явление народу нового кастомизируемого отладчика под названием «Concord». Его компонентная система позволяет VSIX-плагинам подстраивать под себя поведение отладчика и писать новые, контекстно-зависимые, инструменты, которые могут эксплуатировать отладчик для своих нужд. Его API предоставляет множество QOL фич, таких как маршалинг между управляемым/неуправляемым кодом, бесшовная интеграция с удалённо/локально отлаживаемым процессом, и не только. По сути, практически всё, что можно сделать в IDE, можно сделать программно, используя Concord API! Менять на лету значения конкретных переменных, вызывать по заказу функции (или специально заставлять программу пропускать вызовы оных!), плагинам доступен поиск по PDB (!), пошаговый обход и даже модификация кода! Открой кат, и ты узнаешь об этих малоизвестных инновациях в области велосипедостроения.
Читать дальше →

Индексируемое бинарное дерево

Время на прочтение4 мин
Количество просмотров14K
main

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


  • вставить новый элемент
  • удалить элемент по порядковому номеру
  • получить элемент по порядковому номеру
  • данные хранятся в сортированном виде
Читать дальше →

Почему нам везде хочется видеть золотое сечение? Попытка (неудачная) эволюционного анализа при помощи нейросетей на C++

Время на прочтение5 мин
Количество просмотров3.1K
Недавно я задался вопросом: связано ли как-то наше желание везде видеть золотое сечение с какими-то сугубо культурными вещами, или же в этом скрыта какая-то более глубокая закономерность, связанная с устройством нашего мозга? Чтобы разобраться в этом вопросе, я решил сделать несколько вещей:

  1. Сформулировать конкретную гипотезу относительно данной закономерности. Я решил, что лучше всего подойдёт предположение, что наш мозг использует систему счисления, основанную на разложении чисел на степени золотого сечения, так как некоторые её особенности очень близки работе примитивных нейросетей: дело в том, что степени золотого сечения более высокого порядка можно разложить бесконечным числом способов в суммы степеней менее высокого порядка и даже отрицательных степеней. Таким образом, более высокая степень как бы «возбуждается» от нескольких низших степеней, тем самым проявляя то самое сходство с нейросетью.
  2. Описать конкретный способ её проверки: я выбрал мат. моделирование эволюции мозга посредством случайных изменений в простейшей возможной нейросети — матрице линейного оператора.
  3. Составить критерии подтверждения гипотезы. Моим критерием было то, что система счисления, основанная на золотом сечении, реализуется на нейросетевом движке при тех же объёмах информации с меньшим числом ошибок, чем двоичная.

Так как речь идёт о программировании, опишу поподробнее второй и третий пункты.
Читать дальше →

Как написать смарт контракт на WebAssembly в сети Ontology? Часть 2: С++

Время на прочтение8 мин
Количество просмотров2.5K
image

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

Ontology Wasm также поддерживает создание смарт контрактов на языке Rust, об этом можно почитать тут.

Ниже рассмотрим два примера смарт-контракта: сначала напишем “Hello world!” и потом создадим виртуальные денежный конверт, который можно будет отправить другу в качестве подарка.

Разработка WASM-контракта с помощью С++


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

Пять студентов и три распределённых key-value хранилища

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

Или как мы писали клиентскую C++ библиотеку для ZooKeeper, etcd и Consul KV


В мире распределённых систем существует ряд типовых задач: хранение информации о составе кластера, управление конфигурацией узлов, детекция сбойных узлов, выбор лидера и другие. Для решения этих задач созданы специальные распределённые системы — сервисы координации. Сейчас нас будут интересовать три из них: ZooKeeper, etcd и Consul. Из всей богатой функциональности Consul мы сосредоточимся на Consul KV.



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

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

Имитатор чтения статей

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

Добрый день уважаемые. Хотелось бы поделиться своей историей и маленьким лайфхаком.


Думаю у всех офисных работников бывает ситуация, когда после вкусненького обеда сильно разморило и хочется вздремнуть. На самом деле, дневной сон очень полезен как для организма, так и для работы, так как очень положительно влияет на продуктивность. Однако по моему опыту, более 20 минут — явный перебор. Этого достаточно чтобы организм привел себя в норму. И спустя буквально минуту, в течение которой очень хочется продолжить спать, организм просыпается, чувствуется бодрость и прилив сил.


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

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

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

Работа с API КОМПАС-3D → Урок 12 → Составные строки

Время на прочтение4 мин
Количество просмотров3K
На предыдущем уроке мы рассмотрели отображение простых строк. На этом поговорим о формировании составных строк, включающих в себя отклонения и дроби. Формировать такие строки мы будем с помощью метода ksText, который изучили ранее. Строго говоря, данный метод не предназначен для вывода сложных строк. Тем не менее на сегодняшнем уроке мы познакомимся с рядом флагов, которые играют ключевую роль при формировании составных строк.



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

Модернизация IDA Pro. Исправляем косяки процессорных модулей

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


Привет всем,


Спустя довольно-таки продолжительное время с момента написания первой статьи я всё-таки решил, пусть и по чуть-чуть, но писать статьи на тему модификации/улучшения IDA Pro.


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

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

Простейшая реализация Entity Component System

Время на прочтение6 мин
Количество просмотров13K
Всем привет!

У нас стартует четвёртый поток «Разработчик C++», один из самых активных курсов у нас, если судить по реальным встречам, где для того чтобы пообщаться с Димой Шебордаевым приходят далеко не только «крестоносцы» :) Ну и вообще в целом курс уже разросся до одного из крупнейших у нас, осталось неизменным то, что Дима проводит открытые уроки и мы подбираем интересные материалы перед стартом курса.

Поехали!

Вступление


Entity Component System (ECS, «сущность-компонент-система») — сейчас на пике популярности в качестве архитектурной альтернативы, которая подчеркивает принцип Composition over inheritance. В этой статье я не буду вдаваться в подробности концепции, так как уже существует достаточно ресурсов на эту тему. Есть множество способов имплементации ECS, и, я но, чаще всего, выбирают довольно сложные, которые способны запутать новичков и требуют много времени.

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

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

Парктроник на Arduino

Время на прочтение2 мин
Количество просмотров31K
В этой публикации пойдёт речь о создании простого парктроника на базе Arduino.

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

Jinja2 в мире C++, часть вторая. Рендеринг

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

Jinja2 logo Это вторая часть истории о портировании шаблонного движка Jinja2 на C++. Первую можно почитать здесь: Шаблоны третьего порядка, или как я портировал Jinja2 на C++. В ней речь пойдёт о процессе рендеринга шаблонов. Или, иначе говоря, о написании "с нуля" интерпретатора питоноподобного языка.

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

Супер-выразительный код с привлечением уровней абстракций

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

Предлагаю вашему вниманию перевод статьи Super expressive code by Raising Levels of Abstraction


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


Проблема


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

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

Вызов управляемого кода из неуправляемого

Время на прочтение2 мин
Количество просмотров8.6K
image С задачей вызова неуправляемого кода из управляемого мы сталкиваемся довольно часто, и эта задача имеет простое решение в виде одного атрибута [DllImport] и небольшого набора дополнительных правил, которые хорошо изложены в MSDN. Обратная же задача встречается гораздо реже. В данной статье мы и рассмотрим небольшой пример, как это можно сделать. Его не стоит рассматривать как исчерпывающий, скорее лишь, как направление хода мыслей и концепцию. Итак, начнем.
Читать дальше →

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