понедельник, 20 мая 2013 г.

Игра Magnetic Bullets



Недавно небольшой командой мы написали простой flash физический пазл. Узнать о нём и конечно поиграть можно под катом.

понедельник, 18 февраля 2013 г.

Быстрое округление вместо медленного floor()

    Заметка для начинающих пользователей math.h в высокопроизводительных вычислениях. Судя по гуглу проблема известная, но не смотря на то, что я себя новичком в этих вопросах не считаю, о таких неприятностях не догадывался.
    Речь пойдёт о floor. Вообще говоря, описанные проблемы производительности свойственны многим функциям, но я напоролся именно  на floor. Если коротко, то floor работает медленно. Настолько медленно, что в моём сеточном методе моделирования жидкости floor оказался в первых строках профайлера. Дело в том, что floor делает множество проверок на ситуации типа NaN, inf и может изменять глобальную переменную errno для сообщения о ошибке. Всё это занимает бОльшую часть времени работы функции. Во многих задачах всё это совершенно не нужно, а нужна только  скорость. Под катом пара вариантов решения проблемы: собственный fastFloor и настроки компилятора.

воскресенье, 11 декабря 2011 г.

Запрет на создание не константных объектов


В процессе обдумывания одной безумной идеи, про которую я пока никому не расскажу, появилась интересная задачка. Необходимо запретить пользователю класса создавать не константные объекты.  Зачем? Надо. Ради спортивного интереса.
Решений тут есть несколько. Я опишу один из ненормальных, но теоретически интересных.


суббота, 6 августа 2011 г.

Qt Виджет выбора цвета (ColorPicker)

Виджет выбора цвета, ColorPicker
В процессе написания простого редактора картинок понадобилось написать виджет выбора цвета из палитры. Дизайнер нарисовал вот такую штуку:

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

суббота, 25 июня 2011 г.

Property C++: Upgrade

Как я и думал, публикация идей на хабре – хорошая штука. В комментариях к предыдущей статье я нашёл несколько очень важных замечаний.
Первое, самое очевидное – никак не проверяется вызов init в конструкторе. То есть если программист забыл проинициализировать свойства, то компилятор ничего не скажет, а падение в рантаме в коде класса Property – весьма непонятная для дебага ошибка.

Property C++

Наверное, все любители языка C++, которые использовали другие языки, такие как C#, удивляются: почему же в плюсах нет property. Ведь это действительно удобное средство, позволяющее полностью контролировать доступ к членам класса. В общем и я недавно заинтересовался данным вопросом. Подумав, полистав Страуструпа и наконец, погуглив, я пришёл к выводу, что property можно реализовать средствами языка. Думаю многие уже видели разнообразные реализации, например, от microsoft, но для кого-то, надеюсь, это будет интересным открытием.

Быстрая сортировка на AS 3.0

У большинства людей на слово «flash» появляется две главные ассоциации:
  1. Надоедливые баннеры, часто непристойного содержания.
  2. Меееедленно и тормозит.
И то и другое по большей части, правда, но только с поправкой «в большинстве своём». Действительно большая часть flash-контента это баннеры. Да они сильно тормозят, но виновата в этом не технология flash и не компания Adobe. Большинство тормозящих flash-приложений просто написаны так (криворукими) ленивыми программистами. Так уж повелось, что flash стал платформой для быстрой «красивой» интерактивной рекламы, но ведь это далеко не всё, на что он способен. Достаточно популярны flash-игры, которые часто содержат не только вычислительно сложную физику, но часто и не менее сложную игровую логику. Поэтому раз в сто лет появляется человек, которому нужно написать флешку, которая должна работать быстро. И вот тут и появляется проблема – flash действительно небыстрая платформа. Что делать если тормозит нормально написанный, с алгоритмической точки зрения код? Когда алгоритмы уже отточены, нужно оптимизировать код.

Предложу, наверное, самый извращённый выход из ситуации – шейдеры.