Обновить
274.18

C++ *

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

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

Как скрестить Clion, Emscripten и Cmake

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

В этой статье я хотел бы пройтись и показать основные моменты того, как настроить IDE CLion для компиляции CMake проекта средствами Emscripten. Когда я занимался этим скрещиванием мне пришлось потратить день или два на эксперименты. И в этой заметке я собираюсь собрать некое "how to", которое в итоге сработало.

Читать далее

Формулы переводов: хитрая локализация для iOS и не только

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

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

В результате удалось успешно решить эту задачу, и вдобавок вынести решение в Open Source.

Читать далее

Изобретаем велосипед или пишем персептрон на С++. Часть 3

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

Изобретаем велосипед или пишем персептрон на C++. Часть 3


Реализуем обучение многослойного персептрона на C++ при помощи метода обратного распространения ошибки.



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

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

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

Вступление


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

Предыдущая часть понравилась многим, поэтому я снова перелопатил половину документации boost и нашёл о чем написать. Очень странно что вокруг boost.compute нету такого же ажиотажа как и вокруг boost.asio. Ведь достаточно, того эта библиотека кроссплатформенная, так ещё и предоставляет удобный (в рамках c++) интерфейс взаимодействия с параллельными вычислениями на GPU и CPU.

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

Использование C и C++ в Data Science для новичков

Время на прочтение11 мин
Охват и читатели27K
Решим классическую задачу Data Science на C99 и C++11.

В то время как такие языки как Python и R становятся все более популярными для науки о данных, C и C++ могут быть сильным выбором для эффективного решения задач в Data Science. В этой статье мы будем использовать C99 и C++11 для написания программы, работающей с квартетом Энскомба, о котором я расскажу далее.

О своей мотивации к постоянному изучению языков я написал в статье, посвященной Python и GNU Octave, которую стоит прочитать. Все программы предназначены для командной строки, а не для графического интерфейса пользователя (GUI). Полные примеры доступны в репозитории polyglot_fit.

Задача по программированию


Программа, которую вы напишете в этой серии:

  • Считывает данные из CSV-файла
  • Интерполирует данные прямой линией (т.е., f(x)=m ⋅ x + q).
  • Записывает результат в файл изображения
Читать дальше →

Device Manager. Обновление и мониторинг

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

Как уже говорилось ранее, DeviceManager — программная прослойка, которая используется для постановки заданий устройствам и получения результатов их выполнения. Сегодня речь пойдёт об организации процесса обновления программы и осуществления мониторинга рабочих мест, так как без этого проблематично развивать продукт и осуществлять его поддержку.

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

Непоследний обзор Renga API

Время на прочтение5 мин
Охват и читатели8.9K
Система для проектирования зданий и сооружений Renga активно разрабатывается, в ней есть инструменты для архитекторов, конструкторов КЖ и КМ, инженеров ВК, ОВ, ЭО и ЭС. С каждой версией система, которая сейчас разделена на Renga Architecture, Renga Structure и Renga MEP, а совсем скоро станет единой, наращивает функциональность. Вместе с этим растет и меняется, становится все более востребованным API. Ведь в Renga можно создать информационную модель здания, но нельзя (и не планируется) получить красивый рендер, смету на строительство или расчет трубопроводов. Конечно, можно экспортировать модель из Renga в такие распространенные форматы, как OBJ, IFC, STEP и многие другие, но, чтобы обойтись без посредников и избежать возможно неверной интерпретации данных при экспорте/импорте, лучше действовать через API.

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

Рисование графика при помощи cairo в GTK3

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

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

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

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

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

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

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

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


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

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

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

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

1. Введение


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

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

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

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

ECS back and forth

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

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


ECS back and forth


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


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


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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

C, C++ и DotNet decompile — основы реверса. Решение задач на реверсинг с Root-Me. Часть 1

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

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

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

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

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

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