Pull to refresh
0
0
Pushkoff @Pushkoff

C++ программист

Send message

Настраиваем удобную сборку проектов в Visual Studio

Reading time43 min
Views81K
Эта статья является руководством по настройке сборки C++ проектов Visual Studio. Частично она сводилась из материалов разрозненных статей на эту тему, частично является результатом реверс-инжениринга стандартных конфигурационных файлов Студии. Я написал ее в основном потому что полезность документации от самой Microsoft на эту тему стремится к нулю и мне хотелось иметь под рукой удобный референс к которому в дальнейшем можно будет обращаться и отсылать других разработчиков. Visual Studio имеет удобные и широкие возможности для настройки по-настоящему удобной работы со сложными проектами и мне досадно видеть что из-за отвратительной документации эти возможности очень редко сейчас используются.

В качестве примера попробуем сделать так чтобы в Студию можно было добавлять flatbuffer schema, а Студия автоматически вызывала flatc в тех случаях когда это нужно (и не вызывала — когда изменений не было) и позволяла задавать настройки напрямую через File Properties



Укрощаем MSBuild
Total votes 42: ↑39 and ↓3+36
Comments37

Особенности вызова функций в С++

Reading time33 min
Views60K

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


  • Регистры и их назначение при вызове функций.
  • Передача и возврат простых типов и структур.
  • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
  • Как используется место при многочисленных вызовах функций.
  • Механизм виртуальных вызовов.
  • Оптимизация хвостовых вызовов и рекурсии.
  • Инициализация структур, массивов и векторов.

Осторожно! Статья содержит большое количество кода на C++ и ассемблере (Intel ASM с комментариями), а также множество таблиц с оценками производительности. Всё написанное актуально для x86-64 System V ABI, который используется во всех современных Unix операционных системах, к примеру, в Linux и macOS.

Читать дальше →
Total votes 51: ↑51 and ↓0+51
Comments29

Математика для искусственных нейронных сетей для новичков, часть 2 — градиентный спуск

Reading time8 min
Views130K
Часть 1 — линейная регрессия

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

Градиентный спуск


В прошлой части был показан пример вычисления параметров линейной регрессии с помощью метода наименьших квадратов. Параметры были найдены аналитически — , где — псевдообратная матрица. Это решение наглядное, точное и короткое. Но есть проблема, которую можно решить численно. Градиентный спуск — метод численной оптимизации, который может быть использован во многих алгоритмах, где требуется найти экстремум функции — нейронные сети, SVM, k-средних, регрессии. Однако проще его воспринять в чистом виде (и проще модифицировать).
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments18

Алгоритм обучения многослойной нейронной сети методом обратного распространения ошибки (Backpropagation)

Reading time19 min
Views294K
Тема нейронных сетей была уже ни раз освещена на хабре, однако сегодня я бы хотел познакомить читателей с алгоритмом обучения многослойной нейронной сети методом обратного распространения ошибки и привести реализацию данного метода.
Читать дальше →
Total votes 34: ↑22 and ↓12+10
Comments29

Математика для искусственных нейронных сетей для новичков, часть 1 — линейная регрессия

Reading time8 min
Views151K
Оглавление

Часть 1 — линейная регрессия
Часть 2 — градиентный спуск
Часть 3 — градиентный спуск продолжение

Введение


Этим постом я начну цикл «Нейронные сети для новичков». Он посвящен искусственным нейронным сетям (внезапно). Целью цикла является объяснение данной математической модели. Часто после прочтения подобных статей у меня оставалось чувство недосказанности, недопонимания — НС по-прежнему оставались «черным ящиком» — в общих чертах известно, как они устроены, известно, что делают, известны входные и выходные данные. Но тем не менее полное, всестороннее понимание отсутствует. А современные библиотеки с очень приятными и удобными абстракциями только усиливают ощущение «черного ящика». Не могу сказать, что это однозначно плохо, но и разобраться в используемых инструментах тоже никогда не поздно. Поэтому моей первичной целью является подробное объяснение устройства нейронных сетей так, чтобы абсолютно ни у кого не осталось вопросов об их устройстве; так, чтобы НС не казались волшебством. Так как это не математический трактат, я ограничусь описанием нескольких методов простым языком (но не исключая формул, конечно же), предоставляя поясняющие иллюстрации и примеры.

Цикл рассчитан на базовый ВУЗовский математический уровень читающего. Код будет написан на Python3.5 с numpy 1.11. Список остальных вспомогательных библиотек будет в конце каждого поста. Абсолютно все будет написано с нуля. В качестве подопытного выбрана база MNIST — это черно-белые, центрированные изображения рукописных цифр размером 28*28 пикселей. По-умолчанию, 60000 изображений отмечены для обучения, а 10000 для тестирования. В примерах я не буду изменять распределения по-умолчанию.
Читать дальше →
Total votes 54: ↑47 and ↓7+40
Comments43

Математика для искусственных нейронных сетей для новичков, часть 3 — градиентный спуск продолжение

Reading time6 min
Views57K
Часть 2 — градиентный спуск начало

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

Существует и другая версия алгоритма — стохастический градиентный спуск. Стохастический = случайный.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments2

Концепты для отчаявшихся

Reading time5 min
Views22K

Всё началось с того, что мне понадобилось написать функцию, принимающую на себя владение произвольным объектом. Казалось бы, что может быть проще:


template <typename T>
void f (T t)
{
    // Завладели экземпляром `t` типа `T`.
    ...

    // Хочешь — переноси.
    g(std::move(t));

    // Не хочешь — не переноси.
    ...
}

Но есть один нюанс: требуется, чтобы принимаемый объект был строго rvalue. Следовательно, нужно:


  1. Сообщать об ошибке компиляции при попытке передать lvalue.
  2. Избежать лишнего вызова конструктора при создании объекта на стеке.

А вот это уже сложнее сделать.


Поясню.

Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments53

Разработка кроссплатформенных модульных приложений на C++ с библиотекой wxWidgets

Reading time31 min
Views30K

Введение



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

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

В этот раз речь пойдет о создании кроссплатформенных приложений с плагинами на C++ с использованием библиотеки wxWidgets. Рассматриваться будут операционные системы Windows, Linux и OS X, как наиболее популярные.

Как обычно, первая часть будет обзорной, для того, чтобы снизить порог входа для читателей. Кому-то информация из первой части покажется очевидной (особенно то, что касается инструментария), но, все же, я считаю ее необходимой, ибо для новичков информация из первой части позволит с минимальными усилиями организовать процесс разработки.
Дальше — поэтапный разбор кода тестового приложения с пояснениями.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments2

SSLR: Screen Space Local Reflections в AAA-играх

Reading time6 min
Views80K
image

Привет, друг! В этот раз я опять подниму вопрос о графике в ААА-играх. Я уже разобрал методику HDRR (не путать с HDRI) тут и чуть-чуть поговорил о коррекции цвета. Сегодня я расскажу, что такое SSLR (так же известная как SSPR, SSR): Screen Space Local Reflections. Кому интересно — под кат.
Читать дальше →
Total votes 62: ↑60 and ↓2+58
Comments48

HDR vs LDR, реализация HDR Rendering

Reading time8 min
Views88K


Как я и обещал – публикую вторую статью о некоторых моментах разработки игр в трех измерениях. Сегодня расскажу об одной технике, которая используется почти любом проекте ААА-класса. Имя ей — HDR Rendering. Если интересно — добро пожаловать под хабракат.
Читать дальше →
Total votes 177: ↑173 and ↓4+169
Comments63

MOD Live — опыт в использовании

Reading time5 min
Views79K
Всем привет! Зима уже не за горами и, в преддверии нового горнолыжного сезона, хочу рассказать о личных впечатлениях в использовании (в прошлом зимнем сезоне) гаджета, описанного на хабре почти год тому назад.


Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments68

В поисках удобного источника питания, обзор внешнего аккумулятора на 6000мАч

Reading time6 min
Views108K

Введение

В нашем институте введена бальнорейтинговая система, благодаря этому хочешь ты или нет, но для хорошей оценки необходимо посещать пары на 146%. Поэтому с каждым днем все острее становилась проблема смены Nokia x6, отсутствие приложений и сильные лаги браузера на каждой второй странице только ускоряли процесс. И вот, три месяца назад я приобрел Samsung Galaxy R с чипом Tegra 2, в первые дни аппарат из рук практически не выпускал, и быстрый разряд батареи списывал на излишний интерес к девайсу. Время шло, интерес постепенно спадал, и в конце концов установился на определенном уровне, но увы заряда аккумулятора не всегда хватало чтобы вернуться домой слушая музыку. В связи с этим начался поиск источников дополнительной энергии.
Осторожно, под катом 5Мб фотоматериалов.
Читать дальше →
Total votes 59: ↑56 and ↓3+53
Comments36

Экзоядро: архитектура операционной системы управления ресурсами на уровне приложений

Reading time6 min
Views12K
Привет, хабраюзер!
Сегодня я хочу тебя порадовать переводом части статьи за авторством Доусона Энглера, Франса Каашоека и Джеймса О'Тулла-младшего из лаборатории компьютерной науки M.I.T. (Dawson R. Engler, M. Frans Kaashoek, James O'Toole Jr., M.I.T. Laboratory of Computer Science) про экзоядерные операционные системы. Сама статья довольно объемная, так что переводить я ее буду по частям, если, конечно, вам будет интересно.
Читать дальше →
Total votes 57: ↑40 and ↓17+23
Comments16

Пишем плагин для Google SketchUp

Reading time5 min
Views26K
Google SketchUp — программа для быстрого создания и редактирования трёхмерной графики. Удобство и простоту SketchUp оценят, как начинающие работу с трёхмерным моделированием, так и профессионалы.

Но не все знают, что SketchUp обладает мощным API, с помощью которого можно создавать модули, добавляя в программу новый функционал. В этом посте я попытаюсь объяснить общие принципы архитектуры SketchUp и процесс разработки плагина. Перед написанием нового велосипеда плагина стоит поискать на сайте Sketchucation уже готовые реализации с необходимой для Вас функциональностью. Найдя подходящий плагин с открытым исходным кодом, можно реализовать требуемый функционал, оставив основную часть кода нетронутой. Например, плагин делает какие-то расчеты и построения, а вы только изменяете их применение или визуализацию.
Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments4

Flow: Как достичь оптимального состояния

Reading time4 min
Views2.1K
Вчера закончил читать книгу Flow: The Psychology of Optimal Experience.

О чем же она? О счастье, в какой то мере.
Flow — это книга об оптимальном состоянии человека, о его компонентах и условиях его достижения. Автору удалось найти, на мой взгляд, идеальную смесь психологических исследований и истории философии. Применяя простые правила и принципы, описанные в ней, можно сделать свою жизнь и жизнь своих пользователей намного приятнее.
В чем счастье, друг?
Total votes 63: ↑54 and ↓9+45
Comments54

Потокобезопасная очередь без блокировок

Reading time3 min
Views9.3K

Задача


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

Читать дальше →
Total votes 18: ↑14 and ↓4+10
Comments21

Autoruns уходит в offline и наносит удар по вирусам

Reading time1 min
Views1.6K
image

8 Июня вышла новая версия профессионального менеджера автозагрузки — Autoruns. Красивый номер 10 принёс долгожданную возможность настраивать не только работающую систему, но и редактировать автозагрузку выключенного Windows. Наконец-то можно загрузиться с LiveCD или подцепить диск к другому компьютеру и выкинуть вирусы из автозагрузки.

Давайте посмотрим как оно работает на практике…
Читать дальше →
Total votes 65: ↑61 and ↓4+57
Comments16

Обзор игры America's Army: Special Forces для Linux

Reading time4 min
Views304
Неумолимое время диктует свои законы и нам порой приходится жить под диктовку… Иногда это даже приятно. Сейчас уже не вызывает удивления ни графика, ни спецэффекты, ни звук, которые обрушивают на наши «больные» головы разработчики игр. Идешь, бывало, по лесу, помахивая своей M16 и на тебя обрушивается шквал свинца, срезая листву, разрывая барабанные перепонки и выкалачивая последние мозги. Весь монитор забрызган кровью, на стене сияют пулевые отверстия, а любимая соседская канарейка опять попала под шальную пулю, испортив новый персидский ковер…

С некоторых пор стало модно тренировать элитные и не очень подразделения разных силовых ведомств с помощью симуляторов. Потом эти симуляторы перекочевывают на персоналки и любой желающий может почувствовать на своей шкуре все прелести жизни рядового бойца. Americas Army предоставляет такую возможность, причем, совершенно бесплатно. Похоже у заокеанских коллег наших военкомов возникла до боли знакомая проблема хронического недобора новобранцев в свои доблестные и самые гуманные в мире вооруженные (до зубов) силы. Вышеуказанная игра и является средством популяризации ВС США среди подрастающего поколения головорезов — миротворцев.

Но нам-то с вами никакого дела до этого нет — была бы игруха хорошая.

Что же представляет из себя Americas Army на самом деле?
Читать дальше →
Total votes 53: ↑38 and ↓15+23
Comments13

[C++] Сравнение структур по набору полей

Reading time3 min
Views6.6K

Вступление


Вероятно, всякий сталкивался с ситуацией, когда нужно написать operator== или operator< для своей структуры. Раньше я делал это как-то так:
struct data
{
	unsigned int a_ ;
	int b_ ;
	int c_ ;
	int d_ ;
} ;

bool operator<(const data & a1, const data & a2)
{
	// Сравнение по a_, b_ и d_
	if (a1.a_ != a2.a_)
		return a1.a_ < a2.a_ ;
	if (a1.b_ != a2.b_)
		return a1.b_ < a2.b_ ;
	return a1.d_ < a2.b_ ;
}

Копипаст меня удручал, но придумать ничего путного я не мог.
Читать дальше →
Total votes 29: ↑26 and ↓3+23
Comments36
1
23 ...

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity