Как стать автором
Поиск
Написать публикацию
Обновить
115.77

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Управление графическим интерфейсом с помощью echo и cat

Время на прочтение5 мин
Количество просмотров15K
Или независимые управляемые формы графического интерфейса.

Читать дальше →

Вышла первая версия модуля интеграции Cppcheck в Visual Studio с открытым кодом

Время на прочтение1 мин
Количество просмотров9.8K
Здравствуйте, с вами снова говорит редактор блога ABBYY. На днях ко мне пришли разработчики и принесли с необъятных просторов ГитХаба новость, которая не имеет прямого отношения к нашей компании, но, по их словам, порадует всех наших разработчиков, а заодно и многих не наших. Коллегам они уже рассказали на кухне, для остальных — этот пост.

Продолжаем стихийный сериал о статическом анализе кода на C++ (предыдущие серии: один, два, три, четыре, пять, шесть, семь). Бесплатный анализатор с открытым кодом Cppcheck до недавнего времени отличался фатальным недостатком – не было модуля для его интеграции в Visual Studio.
NO MOAR!

Кроссплатформенный https сервер с неблокирующими сокетами. Часть 2

Время на прочтение10 мин
Количество просмотров11K
Эта статья является продолжением статей:
Простейший кросcплатформенный сервер с поддержкой ssl
Кроссплатформенный https сервер с неблокирующими сокетами
В этих статьях я постепенно из простенького примера, входящего в состав OpenSSL стараюсь сделать полноценный однопоточный веб-сервер.
В предыдущей статье я «научил» сервер принимать соединение от одного клиента и отсылать обратно html страницу с заголовками запроса.
Сегодня я исправлю код сервера так, чтобы он мог обрабатывать соединения от произвольного количества клиентов в одном потоке.
Читать дальше →

LibRaw, Coverity SCAN, PVS-Studio

Время на прочтение3 мин
Количество просмотров12K
LibRaw and PVS-Studio
Прочитал заметку о проверке маленького проекта LibRaw с помощью Coverity SCAN. Из статьи следует, что ничего интересного не нашлось. Решил попробовать, сможет ли найти что-то анализатор PVS-Studio.
Читать дальше →

Кроссплатформенный https сервер с неблокирующими сокетами

Время на прочтение5 мин
Количество просмотров19K
Эта статья является продолжением моей статьи Простейший кросcплатформенный сервер с поддержкой ssl.
Поэтому для того, чтобы читать дальше очень желательно прочитать хотя бы часть предыдущей статьи. Но если не хочется, то вот краткое содержание: я взял из исходников OpenSSL файл-пример «serv.cpp» и сделал из него простейший кроссплатформенный сервер, который умеет принимать от клиента один символ.
Теперь я хочу пойти дальше и заставить сервер:
1. Принять от браузера весь http заголовок.
2. Отправить браузеру html страницу на которую будет выведен http заголовок.
3. Кроме этого, я хочу чтобы сокеты не блокировали процесс сервера и для этого я переведу их в так называемый «неблокирующий режим».
Читать дальше →

Маскируем класс под граф Boost. Часть 1: Не трогаем интерфейс

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

Пролог: Концепции Boost
Часть 2: Завершаем реализацию поддержки концепций

Потребовалось недавно алгоритм поиска пути для нашей игры переделать. Прошлый был полностью самописный — шаг в сторону, и все плохо… Захотелось взять готовый из хорошего источника. Тут-то и вспомнилось, что в boost есть функциональность для работы с графами. К сожалению подход, «найди функцию, вызови — и все заработает» не состоялся. Упор в библиотеке сделан на максимальную гибкость использования, что негативно сказалось на простоте. В то же время и ничего смертельного — все лучше, чем с нуля делать (и потом исправлять). С другими библиотеками тоже связываться желания не было, в то время как boost в проекте используется давно…
Читать дальше →

О вольностях в ссылках или простейший обмен сообщениями

Время на прочтение7 мин
Количество просмотров10K
Обмен сообщениями достаточно фундаментальная вещь в науке Computer Science. Будем рассматривать её в приближении к событийно-ориентированному программированию (event-driven). Терминология, возможности и реализации могут отличаться: события (events), сообщения (messages), сигналы/слоты (signals/slots) и callbacks. В целом суть, что с приходом события запускается ответная реакция.
Сама система обмена сообщениями в статье послужила демонстрацией вольной, но допустимой интерпретации ссылок/указателей, упрощающей код. Получившаяся система тривиальна и умеет только регистрировать обработчик на определённый код сообщения и посылать сообщения с таким кодом.
Допустим что обработчики нетривиальные, а сообщений немного. И что мы сами генерируем сообщения и они не приходят нам по сети, например. В таком случае хочется иметь что-то более удобное с явными объявлениями переменных в сообщении. Например, нечто подобное:
StringMessage* str_message = ...;
send(my_message);
...
void handle_message(const Message* message) {
	assert(message);
	const StringMessage* str_message = dynamic_cast<const StringMessage*>(message);
	assert(str_message);
	std::cout << str_message->message ...
}

Но хочется убрать проверочный код, не имеющий отношения к логике работы, под капот. Заменим поэтому указатель на ссылку, показав что в обработчик точно приходит объект, а не NULL nullptr. И пусть обработчик сразу принимает требуемый им тип сообщения.
void handle_message(const StringMessage& message) {
	...
}

Как осуществить задуманное и поддержать другие возможные классы сообщений?
Читать дальше →

Простейший кросcплатформенный сервер с поддержкой ssl

Время на прочтение5 мин
Количество просмотров29K
Не так давно передо мной встала задача: написать кроссплатформенный сервер для обработки запросов по протоколу ssl. До этого я писал сервера для обычных, не шифрованных протоколов, но с ssl столкнулся впервые.
Беглый обзор интернета показал, что лучшим решением будет не велосипедостроение, а использование библиотеки OpenSSL.
В этой статье я не хочу рассматривать процесс установки OpenSSL на Linux и Windows, замечу лишь, что для Windows процесс этот оказался нетривиальным. А рассказать я хочу о том, как мне удалось скомпилировать в Visual Studio пример простейшего сервера, входящий в состав исходников OpenSSL.
Неискушенному читателю может показаться: «что тут особенного — создал проект, включил в него готовый исходник, запустил»… Однако обо всем по порядку.

Читать дальше →

Поиск маршрутов за 1 человеко-месяц

Время на прочтение10 мин
Количество просмотров20K
Однажды для нашего проекта потребовался функционал прокладки маршрутов. Программистов у нас не то чтобы очень много, а скорее наоборот, поэтому мы хотели найти какое-то готовое решение, поискали и ничего хорошего не нашли.

Данные дорожного графа у нас были, но в таком виде, что ни в одну библиотеку или какой-то middle-ware их так просто не подать. Да и middle-ware по навигации, честно говоря, мы не нашли, так чтобы просто встраивалось в нашу систему (спасибо, если кто подскажет куда посмотреть). Поэтому приняли решение сделать самостоятельно, используя по максимуму существующие библиотеки для всего.



О процессе разработки сервиса и расскажу.
Читать дальше →

Чиним hanstunnel на openwrt (вычисление контрольной суммы сетевого пакета)

Время на прочтение5 мин
Количество просмотров5.7K
Всем привет. Наверное, многие тут знают прогу hanstunnel, которая позволяет поднять туннель поверх ICMP, а точнее поверх пингов. Решил я поставить ее себе на роутер под openwrt. Собрал, завел… Не работает. Симптомы были простые — пакет уходит с роутера во внешнюю сеть, а на адресата не приходит, при этом в домашней локалке все работает. При этом тот же hans, запущенный на домашнем компе подключается наружу без вопросов. Кому интересно, как собрать пакет hans под openwrt и как заставить его работать — велком под кат.

Читать дальше →

Подсчет расстояния Хэмминга на большом наборе данных

Время на прочтение8 мин
Количество просмотров52K
В данной статье речь пойдет об алгоритме HEngine и реализации решения проблемы подсчета расстояния Хэмминга на больших объемах данных.
Читать дальше →

Тонкости анализа исходного кода C/C++ с помощью cppcheck

Время на прочтение27 мин
Количество просмотров64K
В предыдущем посте были рассмотрены основные возможности статического анализатора с открытым исходным кодом cppcheck. Он показывает себя не с худшей стороны даже при базовых настройках, но сегодня речь пойдёт о том, как выжать из этого анализатора максимум полезного.

В этой статье будут рассмотрены возможности cppcheck по вылавливанию утечек памяти, полезные параметры для улучшения анализа, а также экспериментальная возможность по созданию собственных правил. Сегодня никаких сравнений анализаторов «кто лучше», статья полностью посвящена работе с cppcheck.
Читать дальше →

CRTP. Static polymorphism. MixIn. Размышления на тему

Время на прочтение9 мин
Количество просмотров40K
В этом посте я поразмышляю на тему статического полиморфизма в С++, архитектурных решениях, строящихся на его основе. Рассмотрю интересную идиому — CRTP. Приведу несколько примеров ее использования. В частности, рассмотрю концепцию MixIn классов. Пишу, чтобы систематизировать собственные знания, но может быть и вы сможете найти что-то интересное для себя.
Читать дальше →

Ближайшие события

Концепции Boost

Время на прочтение6 мин
Количество просмотров33K
От использования шаблонов в С++ лично меня всегда отпугивало отсутствие стандартных механизмов задания ограничений параметров. Другими словами, когда разработчик пишет функцию

template <class T>
bool someFunc(T t)
{
	if (t.someCheck()) {
		t.someAction(0);
	}
}

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

Унификация ассоциативных STL-контейнеров шаблонным параметром — компаратором

Время на прочтение6 мин
Количество просмотров9.5K
Рассмотрим код:
std::multiset<int> set0, set1;
for (auto it = set0.begin(); it != set0.end(); ++it) {
	// длинная
	// обработка
	// *it
}
for (auto it = set1.rbegin(); it != set1.rend(); ++it) {
	// длинная
	// обработка
	// *it
}

Обработка в телах циклов — одинаковая, иными словами требуется одинаково обработать элементы двух мультимножеств: первого — в прямом порядке, второго — в обратном.
Хотите объединить циклы?

Шпаргалка по С++11 для печати на кружке

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


Вот захотелось мне такое сделать и я сделал.
Картинка под спойлером


Полноразмерная картинка (на случай если Хабр пережмёт картинку под спойлером). Подходит для печати на стандартной кружке, площадь поверхности 20 х 8.8 см, 300 dpi (ребята в магазине сувениров сказали, что это стандарт).
Шпаргалка, послужившая основой

P.S. Да, я в курсе, что у меня не вышло вместить 1300-cтраничный стандарт на одну кружку. В следующий раз точно получится, я уверен.

Результаты конкурса на самый глючный код C++

Время на прочтение2 мин
Количество просмотров72K
После продолжительного обсуждения объявлены победители конкурса Grand C++ Error Explosion Competition. Награды должны были объявить в двух номинациях. Участники первой соревновались по максимальному количеству ошибок на минимальный объём кода. Вторая номинация — творческая, там важно не количество и размер, а качество и красота глюков.

В итоге, абсолютным победителем назван программист Эд Хэнвей (Ed Hanway), приславший такую программу.

#include ".//.//.//.//jeh.cpp"
#include "jeh.cpp"
`
Читать дальше →

Анализируем исходный код с помощью cppcheck

Время на прочтение12 мин
Количество просмотров42K
В свете множества недавних статей, посвящённых статическому анализу кода на С++, пользователи неоднократно интересовались анализатором cppcheck. Это относительно молодой проект статического анализа с открытым исходным кодом, ориентированный в первую очередь на нахождение реальных ошибок в коде с минимальным количеством ложных срабатываний.

Совсем недавно cppcheck помог найти уязвимость в проекте Xorg, которая существовала там почти 23 года! Он помог уже тысячам программистов по всему миру, на официальном сайте можно найти информацию о найденных с помощью cppcheck уязвимостях в программах, и этот список постоянно растёт. Итак, если вы хотите знать, почему нужно использовать cppcheck всегда и везде — прошу под кат.
Читать дальше →

JUCE — Кроссплатформенный C++ фреймворк для разработки приложений с пользовательским интерфейсом

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

Приветствую хабросообщество!
Наверно каждый кто профессионально разрабатывает ПО или просто увлекается программированием, рано или поздно приходил к необходимости создавать пользовательский интерфейс для своей программы. И если не рассматривать нативные для платформ окружения и языки такие как C# для Windows или Objective-C для Mac OS X которые изначально содержат средства для визуализации интерфейса, то выбор оказывается не очень богатым, особенно если мы не горим желанием платить деньги за средства разработки GUI или желаем добиться кроссплатформенности.
В своем первом посте на Хабре я бы хотел рассказать о таком фреймворке как JUCE. Поиск по Хабру выдал всего 2 статьи где данный фреймворк только упоминается, но ни какой детальной информации не приводится. Думаю что тем кто только начинает осваивать кроссплатформенные GUI приложения на C++ будет интересно узнать об альтернативе таким монстрам как Qt или таким старичкам как GTK+
Хотите знать больше?

Испытания boost::lockfree на скорость и задержку передачи сообщения

Время на прочтение11 мин
Количество просмотров24K
Не так давно в boost-1.53 появился целый новый раздел — lockfree реализующий неблокирующие очереди и стек.
Я последние несколько лет работал с так называемыми неблокируюшими алгоритмами (lock-free data structures), мы их сами писали, сами тестировали, сами использовали и втайне ими гордились. Естественно, у нас немедленно встал вопрос, переходить ли с самодельных библиотек на boost, и если переходить, то когда?
Вот тогда у меня и возникла в первый раз идея применить к boost::lockfree кое-какие из методик которыми мы испытывали собственный код. К счастью, сам алгоритм нам тестировать не придется и можно сосредоточиться на измерении производительности.
Я постараюсь сделать статью интересной для всех. Тем кто еще не сталкивался с подобными задачами будет полезно посмотреть на то что такие алгоритмы способны, а главное, где и как их стоит или не стоит использовать. Для тех кто имеет опыт разработки неблокирующих очередей возможно будет интересно сравнить данные количественных измерений. Я сам по крайней мере таких публикаций еще не видел.
Читать дальше →

Вклад авторов