Рубрика «c++» - 190

Введение

В настоящее время я занимаюсь проектом на Arduino с использованием TFT дисплея. Недавно мне захотелось добавить в него, казалось бы, простую функцию — функцию регулировки яркости. Нашёл в документации к библиотеке для работы с TFT дисплеем (UTFT Library) нужный метод: setBrightness(br);

Написал весь код, сделал все, как надо. Решил проверить, но, к моему удивлению, ничего не происходило. Начал разбираться. Спустя два дня, заметил небольшое примечание к методу: "This function is currently only supported on CPLD-based displays." То есть, данная библиотека, не поддерживает мой дисплей. Но я узнал, что сам дисплей регулировку яркости поддерживает. Очень долго искал в интернете способы настройки, но так и не нашёл, поэтому решил добиться своей цели сам, несмотря ни на что, и у меня это получилось. И вот решил поделиться с теми, кому это может пригодиться.

Управление яркостью подсветки 7 ми дюймового TFT LCD

Читать полностью »

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

Так уж случилось, что по долгу работы очень много времени провожу с операционными системами семейства GNU/Linux. Основным видом моей деятельности является разработка программного обеспечения на С++.

Так вот, основной проблемой при использовании отладчика – это отображение сложных контейнеров, например, stl-контейнеров.

Решение, которое я предлагаю, актуально для gdb. Этот отладчик поддерживает скрипты, написанные на языке python, а механизмы отображения сложных объектов, называются pretty printers. Т.е. чтобы отладчик отображал нам все правильно, необходимо указать ему где находятся скрипты с этими самыми pretty printers. Для указания отладчику дополнительных команд необходим файл .gdbinit.

Итак, попробую оформить все, как инструкцию, так и читать удобней, и сам не забуду.
Читать полностью »

RocksDB RocksDB – постоянное хранилище ключ-значение для быстрых накопителей. Основное ее предназначение для хранение данных на flesh дисках.

Узким местом в производительности часто является обращение к БД.
Эта проблема может решаться по разному.
Использование кэша решает проблему производительности, но существенно усложняет архитектуру программы. Графовые базы данных выходят из ситуации за счет оптимальных для данной задачи алгоритмов. Другим типом решений являются хранилища достигающие высокой производительности за счет использования быстрого носителя.
В последнее время появилось много NoSQL хранилищ полностью хранящих данные в памяти. Но память все еще стоит дорого и ее объем ограничен. Увеличение памяти за счет шардинга опять таки упирается в стоимость.
Логичным выходом из ситуации было бы использование SSD дисков. Они имеют относительно не высокую стоимость и при этом вполне небольшое время отклика.

Читать полностью »

Создание игры процесс захватывающий и познавательный. Особенно это заметно, когда ремейк «классики» делаешь сам, руководствуясь идеями оригинала и десятками часов, потраченных на прохождение кампании. У меня не было сколь-нибудь значимого опыта разработки для Android'a, поэтому создание работающего «как надо» приложения для планшета поначалу выглядело довольно туманно, но от этого не менее притягательно. При наличии времени и возможностей, можно стряхнуть пыль со старых игр, подмазать и подклеить, добавив поддержку «больших» разрешений и окажется, что они выглядят не хуже современных продуктов, выложенных на маркете, даже с палитрой RGB565 без альфа-канала. Я предполагал, что будут подводные камни и заботливо спрятанные грабли, которые лежат тихонько во время разработки, но больно лупят по голове, стоит запустить игру на реальном железе. Чего сильно не хватало, так это отладчика, а возникающие проблемы лишь укрепили желание достичь поставленной цели. Под катом будет рассказ о том, как это все заработало.

image
Читать полностью »

Долго искал открытый и бесплатный ММО движок в интернете. Либо это был откровенный бред, либо платный проект. Вообще, этих движков среди компаний, делающих ММО РПГ, полно, но каждая компания пишет свой движок. Единого стандарта нет. Пришлось самому его писать — и я таки сделал это. Долго продумывал интерфейс библиотеки. Потом также долго воплощал в жизнь. Потом допиливал безопасность (AES и RSA на основе OpenSSL, проблема «Man-in-the-middle» устранена). Движок получился кроссплатформенным (работа с сетью благодаря boost). Обмениваться пакетами можно как с помощью TCP, так и UDP.
Читать полностью »

У нас есть C++ 14!
C++ 14 готов!

По итогам заседания Айсаква (Вашингтон, США) в феврале, мы запустили голосование за черновик международного стандарта (DIS) для следующего C++ стандарта. Это голосование завершилось в пятницу.

Сегодня мы получили уведомление, что голосование было единогласно успешным и следовательно мы можем приступить к публикации. Мы будем выполнять некоторые окончательные редакционные штрихи, для исправления некоторых орфографических опечаток и случайно пропущенных слов, а затем передадим этот документ в ISO для публикации в этом году как совершенно новый международный стандарт ISO/IEC 14882:2014(E) языка программирования С++, также известный как С++14.
Читать полностью »

PVS-Studio, аудит кода

До недавнего времени мы занимались исключительно развитием и продажей продукта PVS-Studio. Потом мы подумали и решили предлагать новую услугу: регулярный аудит кода. Про неё я и расскажу. Статья предназначена для менеджеров и тимлидов. Дабы не портить себе настроение и не минусовать, программистов прошу статью не читать.
Читать полностью »

Здесь меня будет интересовать как сериализовать объект Qt, передать его по сети и поддерживать между оригиналом и копией связь синхронизирующую состояние копии. Использовался Qt 4.8.
Читать полностью »

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

class Base { virtual int foo() const = 0; };
class A : public Base { int foo() const { return 1; } };
class B : public Base { int foo() const { return 2; } };
class C : public Base { int foo() const { return 3; } };
class D : public Base { int foo() const { return 4; } };

Base* getconfig(char cfg) // не будем пока отвлекаться на уборку мусора
{
  switch(cfg)
  {
  case 'a': return new A();
  case 'b': return new B();
  case 'c': return new C();
  case 'd': return new D();
  default: throw std::invalid_argument("bad type");
  }
}

и функция, принимающая его экземпляры

int entry(Base* x, Base* y) { return x->foo()*10 + y->foo(); }

которую используют примерно так

void run(char cx, char cy) { std::cout << cx << cy << " : " << entry(getconfig(cx), getconfig(cy)) << std::endl; }

Можно ли протащить полиморфизм на стадию компиляции?
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js