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

Вы все еще кипятите и сравниваете this с нулем?Давным-давно в далекой-далекой галактике широко использовалась библиотека MFC, в которой у ряда классов были методы, сравнивающие this с нулем. Примерно так:

class CWindow {
    HWND handle;
    HWND GetSafeHandle() const
    {
         return this == 0 ? 0 : handle;
    }
};

«Это же не имеет смысла» – возразит читатель. Еще как «имеет»: этот код «позволяет» вызывать метод GetSafeHandle() через нулевой указатель CWindow*. Такой прием время от времени используется в разных проектах. Рассмотрим, почему на самом деле это плохая идея.
Читать полностью »

Добрый день!

Хакатон APPS4ALL в Москве

Спешим сообщить, что 13 и 14 декабря в Москве пройдет крупнейший в России и СНГ хакатон APPS4ALL!

В течение двух дней и одной ночи в Коворкинге Нагатино пройдет увлекательный марафон программирования по созданию мобильного или веб-приложения, в котором примут участие более 70 команд. Консультировать участников (программистов, дизайнеров и предпринимателей) будут приглашенные специалисты по открытым данным, представители компаний-партнеров, менторы, инвесторы и эксперты рынка.
Читать полностью »

Приглашаем всех желающих принять участие в финальной в 2013 году онлайн конференции серии Soft Labs! Мероприятие состоится в субботу 14 декабря и будет посвящено разработке на языке C++. Так как примерно в это время стартует предновогодняя лихорадка, мы решили сделать данную конференцию максимально компактной и полезной.

В программе мероприятия три основных темы:

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

Введение

Ранее во вступительной статье я поднимал список проблем, с которыми придется столкнуться разработчику, если он захочет оптимизировать оптимизацию обработки изображения при помощи SIMD инструкций. Теперь пришло время на конкретном примере показать, как указанные выше проблемы можно решить. Я долго думал, какой алгоритм выбрать для первого примера, и решил остановиться на медианной фильтрации. Медианная фильтрация является эффективным способом подавления шумов, которые неизбежно появляются на цифровых камерах в условиях малого освещения сцены. Алгоритм этот достаточно ресурсоемок – так например, при обработке серого изображения медианным фильтром 3х3 требуется порядка 50 операций на одну точку изображения. Но в тоже время он оперирует только с 8-битными числами и ему для работы требуется сравнительно не много входных данных. Эти обстоятельства делают алгоритм достаточно простым для SIMD оптимизации и в тоже время позволяют получить из нее весьма существенное ускорение.

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

В первом посте мы разбили функциональность грида на несколько классов. Давайте еще раз быстренько их опишем:

  • Lines — представляет набор колонок или строк.
  • Range — oписывает любую совокупность ячеек.
  • Layout — позволяет размещать данные внутри ячейки.
  • Model — определяет интерфейс доступа к данным для View и Controller.
  • View — показывает информацию в ячейке.
  • Controller — позволяет пользователю менять данные.
  • CacheCell — кеширует данные для видимой ячейки.
  • CacheGrid — кеширует данные для видимой части грида.
  • GridWindow — специальный контрол.

Так же мы описали модели и вью для текстовых данных (ModelText, ModelTextCallback. ViewText). Давайте попробуем создать грид и привязать к нему текстовые данные. Новую функциональность, которая нужна для работы стандартного грида будем добавлять в виде специальных Model/View/Controller.
Читать полностью »

PVS-Studio интегрируется в Ninja для проверки Chomium.

Когда мы пишем статьи про проверки каких-либо проектов с помощью PVS-Studio, то, как правило, у нас прибавляется клиентов. Тут все честно. Программисты не любят рекламу, но охотно отзываются на интересные материалы, которые легко проверить. Поэтому мы не рекламируем свой инструмент, а просто показываем, что он умеет. Однако, хотя мы проверили код Chromium уже три раза и трижды находили в нем ошибки, ордера с почтой в google.com в моей почте до сих пор нет. Поскольку мне интересно, что я делаю не так, и почему Google пока не использует PVS-Studio, я решил написать очередную статью.

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

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

Хотите узнать, почему разрабатывать Chromium сложно и далеко не каждый инструмент для программистов может быть использован в проекте Chromium? Тогда читаем…

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

XKCD 303
В прошлой статье мы с humbug показали, как может меняться скорость вычислений в зависимости от способа выполнения метода и его содержимого. Теперь мы сможем заглянуть под капот виртуальной машины и понять, как и почему это происходит.

Ранее мы познакомились с языком Smalltalk, а точнее с его микро реализацией Little Smalltalk. Разобрались с синтаксисом языка, форматом представления объектов в памяти и набором основных инструкций. Теперь мы вплотную подошли к вопросам взаимодействия Smalltalk и LLVM (ради этого и затевалась вся серия статей).

Сейчас у нас есть вся необходимая база знаний для того чтобы понять, что именно делается в нашем JIT компиляторе. В этой статье мы узнаем, как байт-коды Smalltalk преобразуются в IR код LLVM, как происходит компиляция и выполнение кода, и почему это работает быстрее, чем программная интерпретация. Самые нетерпеливые могут посмотреть шеллкасты (раз и два), с циферками и бегущими строчками (не забывайте про возможность скроллинга).
Читать полностью »

SIMD и обработка изображений

Обработка изображений (здесь мы сознательно ограничиваем в себя только растровыми картинками и опускаем широкий класс векторных изображений), как правило, представляет собой набор простых операций, которые применяются к каждой точке изображения. Если учесть, что цветовые каналы, из которых состоит точка изображения (пиксель) обычно представлены в виде целых чисел небольшой размерности, то обработка изображения сводится к огромному числу однотипных операций над 1-2 байтными целыми числами.
image
Читать полностью »

в 21:13, , рубрики: c++, GUI, open source, Qt Software, метки:

Табличные элементы управления (обычно в их названии присутствуют слова Table или Grid) широко используются при разработке GUI. Так получилось, что на работе мы используем С++ и MFC для разработки пользовательского интерфейса. В начале мы использовали CGridCtrl — общедоступную и довольно известную реализацию грида. Но с некоторого времени он перестал нас устраивать и появилась на свет собственная разработка. Идеями, лежащими в основе нашей реализации, я хочу с вами здесь поделиться. Есть задумка сделать open source проект (скорее всего под Qt). Поэтому данную заметку можно рассматривать как «Proof Of Concept». Конструктивная критика и замечания приветствуются.
Читать полностью »

Добрый день, хабрапользователи!

Выкладываю небольшую шпаргалку по настройке WebRTC + Eclipce 4.3 + ubuntu 13.10. Это может быть полезно тем, кто решил попробовать себя в написании кода на С++ для webrtc.Читать полностью »


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