Pull to refresh
118
0

Expert Software Engineer

Send message

Использование std::optional в С++17

Reading time 11 min
Views 80K


Давайте возьмём пару от двух типов <YourType, bool> — что вы можете сделать с композицией подобного рода?


В этой статье я расскажу вам про std::optional — новый вспомогательный тип, добавленный в C++17. Это обёртка для вашего типа и флаг показывает, инициализировано ваше значение или нет. Давайте посмотрим, где это может быть полезно.


Вступление


Добавлением логических флагов к другим типам вы можете достичь то, что называется "Nullable типы". Как было сказано ранее, флаг используется для обозначения того, доступно значение или нет. Такая обёртка выразительно представляет объект, который может быть пустым (не через комментарии :).

Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 10

Рефакторинг с использованием C++17 std::optional

Reading time 6 min
Views 16K


В разработке существует множество ситуаций, когда вам надо выразить что-то с помощью "optional" — объекта, который может содержать какое-либо значение, а может и не содержать. Вы можете реализовать опциональный тип с помощью нескольких вариантов, но с помощью C++17 вы сможете реализовать это с помощью наиболее удобного варианта: std::optional.


Сегодня я приготовил для вас одну задачу по рефакторингу, на который вы сможете научиться тому, как применять новую возможность C++17.


Вступление


Давайте быстро погрузимся в код.


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

Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Comments 16

Встроить JSON в Embedded? Проще простого

Reading time 6 min
Views 23K
image

Не так давно у меня появилась необходимость загружать конфигурацию приложения при очень ограниченных ресурсах. Не было доступа, практически, ни к каким стандартным функциям C. Очень повезло, что были стандартные функции по работе с памятью malloc()/free().

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

Из этого можно сделать вывод, что надо либо:
  1. Писать свой редактор бинарного формата.
  2. Использовать текстовый формат.

Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 15

Zen Diary — личный дневник с возможностью шифрования

Reading time 3 min
Views 11K


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

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

Окрылённый такой победой, я решил развивать и улучшать этот продукт с учётом тех многих пожеланий и советов, что я получил. И это развитие вылилось в новый проект под названием Zen Diary (http://zendiary.org).
Читать дальше →
Total votes 32: ↑25 and ↓7 +18
Comments 30

АнтиБлог: дневник только для себя

Reading time 4 min
Views 14K


Предисловие


Друзья, я, к моему глубочайшему сожалению, не умею писать красивые, длинные и складные статьи. Я всего лишь разработчик на C++. Некоторые даже говорят, что хороший. И вот случилась со мной неприятность — написал я программу, но рассказать о ней толково не могу. Рассказать так, чтобы люди захотели ей пользоваться. Нет, Вы не подумайте, это не первая моя программа, у меня за спиной восемь лет опыта на C++, десять лет программирования в принципе на многих языках. Просто именно сейчас я захотел разрабатывать не ради разработки, а ради того, чтобы моей программой пользовались люди, чтобы она была кому-то, кроме меня, полезной. Чтобы я знал, что я это делаю не только ради получения опыта, хотя это тоже очень ценно само по себе, но и ради того, чтобы кто-то, может в соседнем доме, а может на другом конце планеты, кликал по иконке моей программы. Мне бы, от осознания этого, было чертовски приятно. И не важно, какую именно задачу эта программа выполняет, важно лишь то, что она работает. Работает на благо людям. Ведь разработчики именно для того и есть на свете, чтобы их творения приносили пользу другим людям.
Читать дальше →
Total votes 63: ↑44 and ↓19 +25
Comments 53

Пишем свой отладчик под Windows [часть 2]

Reading time 24 min
Views 21K


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

Предисловие


Эта статья является продолжением предыдущей части «Пишем свой отладчик под Windows». Очень важно, чтобы Вы её прочитали и поняли. Без полного понимания того, что написано в первой части, Вы не сможете понять эту статью и оценить весь материал целиком.
Единственный момент, оставшийся неупомянутым в предыдущей статье, это то, что наш отладчик может отлаживать только машинный код. У Вас не получиться начать отладку управляемого (managed) кода. Может быть, если будет четвёртая часть статьи, я в ней также рассмотрю отладку и управляемого кода.
Я бы хотел показать Вам несколько важных аспектов отладки. Они будут включать в себя показ исходного кода и стека вызовов (callstack), установки точек останова (breakpoints), входа внутрь исполняемой функции (step into), присоединение отладчика к процессу, установка системного отладчика по умолчанию и некоторые другие.
Читать дальше →
Total votes 47: ↑46 and ↓1 +45
Comments 2

Пишем свой отладчик под Windows [часть 1]

Reading time 12 min
Views 46K

Вступление



Все мы, время от времени, используем дебаггер для отладки программ. Отладчик может использоваться с C++, C#, Java и ещё сотней других языков. Он может быть как внешним (WinDbg), так и встроенным в среду разработки (Visual Studio). Но вы хоть раз задавались вопросом, как же работает отладчик?
И вам повезло. В этом цикле статей мы разберёмся от и до, как же работает отладка изнутри. В этой статье рассматривается только написание отладчика под Windows. Без компиляторов, линковщиков и других сложных систем. Таким образом, мы сможем отлаживать только исполняемые файлы, так как мы напишем внешний отладчик. Эта статья потребует от читателя понимание основ многопоточности.
Читать дальше →
Total votes 87: ↑82 and ↓5 +77
Comments 10

Инъекция кода в .NET CLR: изменение IL-кода во время выполнения программы

Reading time 13 min
Views 39K

Предисловие



Изменение .NET метода MSIL кода во время выполнения приложения – это очень круто. Это настолько круто, что можно перехватывать вызовы функций (hooking), сделать защиту своего ПО и другие удивительные вещи. Именно поэтому мне уже давно хотелось это осуществить, но была одна проблема – MSIL код компилируется в машинный код с помощью JIT перед тем, как мы сможем что-либо с этим кодом сделать. А так как .NET CLR не документирована и изменяется от версии к версии, то мы и будем искать стабильный и надёжный путь, независимый от точного расположения адресов в памяти.
Читать дальше →
Total votes 92: ↑90 and ↓2 +88
Comments 7

Решение судоку с помощью веб-камеры в реальном времени

Reading time 12 min
Views 60K

Предисловие




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

Программа написана с помощью низкоуровневого языка C++, потому что я действительно хотел понять, как же это все работает изнутри. Если вы тоже хотите начать изучение компьютерного зрения, то для этого пригодиться библиотека OpenCV. На CodeProject вы сможете найти несколько уроков по ней. Изображение с веб-камеры получается с помощью исходного кода Вадима Горбатенко (AviCap CodeProject).
Читать дальше →
Total votes 363: ↑360 and ↓3 +357
Comments 67

Android vs Maemo: сравнение двух платформ

Reading time 6 min
Views 7K

Технически, обе платформы работают на ядре Linux. Однако, Maemo — это настоящий дистрибутив Linux, основанный на Debian, в то время как Android всего лишь ядро с некоторыми надстройками и программами (виртуальная машина Davlik и база данных SQLite). Все приложения, написанные под Android, запускаются при помощи виртуальной машины Davlik (сильно оптимизированная и модифицированная JVM). Я попробовал проанализировать преимущества обеих платформ с точки зрения разработчика, а также их стратегию развития на текущий момент. Если у вас нет времени читать весь текст в деталях, то вы можете ознакомиться с краткими выводами в конце каждой подтемы.

Читать дальше →
Total votes 71: ↑62 and ↓9 +53
Comments 182

Пишем апплет-переводчик для Gnome [python]

Reading time 11 min
Views 3.2K

Предисловие



Сидел я как-то тихим вечером, читал англоязычные сайты. Когда понадобилось перевести пару фраз, я как обычно открыл новую вкладку, набрал translate.google.ru, скопировал, вставил текст, нажал перевести, прочитал. И ведь такую длинную последовательность действий приходится проделывать каждый раз, когда есть необходимость перевести текст, пару фраз или целый абзац. Да, можно использовать какой-либо клиент для перевода, но окно программы придется открывать или доставать из-под других окон. Да, последовательность короче, но все равно длинная. Было бы здорово сократить последовательность действий до скопировать, нажать кнопку. Так появилась идея для апплета. Его логика такая:
  • На панели появляется кнопка «GTranslate»
  • Если вам надо перевести текст, то копируете его и нажимаете на кнопку
  • Автоопределение языка

Поехали
Total votes 41: ↑36 and ↓5 +31
Comments 66

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity