Как стать автором
Обновить
118
0
Dmitrii E @NeonMercury

Expert Software Engineer

Отправить сообщение

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

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


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


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


Вступление


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

Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии10

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

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


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


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


Вступление


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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


Предисловие


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

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

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


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

Предисловие


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

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

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

Вступление



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

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

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

Предисловие



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

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

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

Предисловие




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

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

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

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

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

Читать дальше →
Всего голосов 71: ↑62 и ↓9+53
Комментарии182

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

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

Предисловие



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

Поехали
Всего голосов 41: ↑36 и ↓5+31
Комментарии66

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность