В этой статье мы рассмотрим один из вариантов реализации поведенческого шаблона проектирования Acyclic Visitor без ипользования RTTI.
Рубрика «c++» - 140
Acyclic Visitor
2016-10-19 в 16:02, admin, рубрики: c++, design patterns, just for fun, visitor pattern, ПрограммированиеФилиппинские кроссворды. Доработка мобильной 2D головоломки для работы с цветными кроссвордами
2016-10-19 в 10:19, admin, рубрики: android, c++, gdiplus, marmalade sdk, Разработка под android, разработка под iOSЧто такое филиппинский кроссворд.
Цветные филиппинские кроссворды — такой вид головоломок, в сетке которой с помощью чисел зашифрована картинка. Каждое число, расположенные в сетке, кроме единицы, имеет пару. Необходимо подобрать и соединить пары чисел линиями так, чтобы линии удовлетворяли следующим условиям:
— длина каждой линии должна соответствовать числам, расположенным на ее концах;
— линии не должны пересекаться друг с другом и проходить через одни и те же клетки;
— линии могут идти в вертикальном и горизонтальном направлениях, могут преломляться, но не могут проходить по диагонали;
— соединяемые пары чисел должны быть одного цвета.
Так как единица не имеет пары, то она закрашена по умолчанию. В результате решения кроссворда, когда все пары чисел (кроме единиц) соединены линиями, получается рисунок.
Майкл Фезерс, автор книги «Working Effectively with Legacy Code», едет в Харьков с докладом
2016-10-18 в 13:41, admin, рубрики: .net, C#, c++, michael feathers, Блог компании Plarium, доклад, конференция, майкл фезерс, макро рефакторинг, микро рефакторинг, разработка, рефакторинг, Совершенный код, стрим25 октября 2016 года Майкл Фезерс, Director of R7K Research & Conveyance и автор книги «Working Effectively with Legacy Code», выступит на uDev Tech Events с лекцией на тему «Micro Refactoring and Macro Refactoring: Strategies and Techniques».
Анатомия KD-Деревьев
2016-10-17 в 11:13, admin, рубрики: c++, KD - Деревья, Алгоритмы, геометрия в пространстве, расстояние от точки до треугольника, метки: KD - Деревья, геометрия в пространстве, расстояние от точки до треугольника
Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые возникают в процессе решения тех или иных подзадач алгоритма. Дабы не запутывать читателя терминологией(плоскость, гипер-плоскость и т.п), да и вообще для удобства, полагается что основное действо разворачивается в трехмерном пространстве. Однако же, где нужно я отмечаю, что мы работаем в пространстве другой размерности. По моему мнению статья будет полезна как программистам, так и всем тем, кто заинтересован в изучении алгоритмов: кто-то найдет для себя что-то новое, а кто-то просто повторит материал и возможно, в комментариях дополнит статью. В любом случае, прошу всех под кат.
Читать полностью »
Задачка на std::multiset или поиск по полям структуры
2016-10-17 в 7:42, admin, рубрики: c++, Программирование, С++Попалась небольшая задачка, где-то на 4 часа кодирования, которую счел занимательной.
Есть база пользователей 10 миллионов
class User{
int id;
time_t birthday; // дата рождения
int gender; // пол
int city_id; // место проживания
time_t time_reg; // дата регистрации
};
Нужно сделать быстрый поиск по базе, с учетом ее не частого обновления. Поиск может проходить по полям: возрасту, полу, городу. Поля поиска могут быть указаны в группировке или отдельно, например:
- город;
- город, пол;
- пол, возраст.
Данные выдачи должны быть отсортированы по дате регистрации пользователей, и выдаваться постранично по 100 пользователей.
Подсказка 1: СУБД не даст нужной скорости.
Подсказка 2: Вспомнить сложность операций со множествами, сложность стандартных алгоритмов.
Подсказка 3: Проверить время поиска реализованного алгоритма, неплохой результат это порядка 0.005 сек.
Танцуют ли роботы Tango
2016-10-14 в 9:24, admin, рубрики: android, api, c++, devices, Google, Google Tango, java, Kinect, SDK, tango, unity, Блог компании Google, разработка, разработка мобильных приложений, Разработка под android, Разработка робототехникиProject Tango от Google — проект по созданию мобильных устройств, способных анализировать пространство вокруг себя в трёх измерениях. Благодаря проекту Device Lab мне удалось поиграться одним из таких устройств.
Статья автора Сергея Мелехина, в рамках конкурса «Device Lab от Google».
Читать полностью »
Кластер Asterisk. Централизация информации о регистрации
2016-10-13 в 16:14, admin, рубрики: asterisk, asterisk develop module, C, c++, метки: asterisk develop moduleУ большинства администраторов, работающих с телефонией на базе Asterisk, в компаниях, где штат превышает 500+ сотрудников, рано или поздно встает вопрос о полноценной кластеризации Active/Active. Предпосылками к этому может быть и наличие региональных ответвлений, и желание сделать систему надежнее. Тема обширная и не является целью данной статьи в полном объеме, которая написана с целью показать один из самых быстрых и надежных способов добыть информацию о регистрации устройств на серверах в кластере, с целью последующей централизации или/и дистрибуции внутри кластера. Логично предположить, что самый производительный способ — это быть частью самого Asterisk.
Читать полностью »
Использование современного С++ для повышения производительности
2016-10-13 в 11:07, admin, рубрики: c++, c++11, C++14В данной статье я хотел бы рассказать, как использование средств современных стандартов С++ позволяет повысить производительность программ без каких-либо особых усилий от программиста.
Читать полностью »
Разбираемся в MAVLink. Часть 1
2016-10-11 в 12:16, admin, рубрики: c++, mavlink, qt, БПЛА, дроны, протоколы передачи данных, Разработка робототехники, метки: mavlinkДля обмена данными многие современные дроны, собираемые энтузиастами, коммерческие или даже промышленные, используют протокол MAVLink. Я бы хотел поделиться своим опытом работы с этим протоколом в этой, а может и в последующих статьях.
Оптимизация кода: память
2016-10-10 в 15:05, admin, рубрики: C, c++, высокая производительность, компилятор оптимизация, Компиляторы, оптимизация программ, программирование микроконтроллеров, производительность, процессор, язык cБольшинство программистов представляют вычислительную систему как процессор, который выполняет инструкции, и память, которая хранит инструкции и данные для процессора. В этой простой модели память представляется линейным массивом байтов и процессор может обратиться к любому месту в памяти за константное время. Хотя это эффективная модель для большинства ситуаций, она не отражает того, как в действительности работают современные системы.
В действительности система памяти образует иерархию устройств хранения с разными ёмкостями, стоимостью и временем доступа. Регистры процессора хранят наиболее часто используемые данные. Маленькие быстрые кэш-памяти, расположенные близко к процессору, служат буферными зонами, которые хранят маленькую часть дынных, расположеных в относительно медленной оперативной памяти. Оперативная память служит буфером для медленных локальных дисков. А локальные диски служат буфером для данных с удалённых машин, связанных сетью.
Иерархия памяти работает, потому что хорошо написанные программы имеют тенденцию обращаться к хранилищу на каком-то конкретном уровне более часто, чем к хранилищу на более низком уровне. Так что хранилище на более низком уровне может быть медленнее, больше и дешевле. В итоге мы получаем большой объём памяти, который имеет стоимость хранилища в самом низу иерархии, но доставляет данные программе со скоростью быстрого хранилища в самом верху иерархии.
Читать полностью »