Или независимые управляемые формы графического интерфейса.
Читать полностью »
Рубрика «c++» - 206
Управление графическим интерфейсом с помощью echo и cat
2014-02-10 в 6:17, admin, рубрики: c++, cat, echo, GUI, qt, qt designer, Qt Software, ненормальное программирование, метки: cat, echo, gui, Qt, qt designerКроссплатформенный https сервер с неблокирующими сокетами. Часть 2
2014-02-07 в 22:09, admin, рубрики: c++, HTTPS, openssl, Visual Studio, кроссплатформенная разработка, неблокируемые сокеты, Программирование, сервер, метки: c++, HTTPS, openssl, кроссплатформенная разработка, неблокируемые сокеты, сервер Эта статья является продолжением статей:
Простейший кросcплатформенный сервер с поддержкой ssl
Кроссплатформенный https сервер с неблокирующими сокетами
В этих статьях я постепенно из простенького примера, входящего в состав OpenSSL стараюсь сделать полноценный однопоточный веб-сервер.
В предыдущей статье я «научил» сервер принимать соединение от одного клиента и отсылать обратно html страницу с заголовками запроса.
Сегодня я исправлю код сервера так, чтобы он мог обрабатывать соединения от произвольного количества клиентов в одном потоке.
Читать полностью »
LibRaw, Coverity SCAN, PVS-Studio
2014-02-07 в 6:02, admin, рубрики: c++, open source, pvs-studio, Блог компании PVS-Studio, обзор кода, статический анализ кода, метки: c++, pvs-studio, обзор кода, Си, статический анализ кода
Прочитал заметку о проверке маленького проекта LibRaw с помощью Coverity SCAN. Из статьи следует, что ничего интересного не нашлось. Решил попробовать, сможет ли найти что-то анализатор PVS-Studio.
Читать полностью »
Кроссплатформенный https сервер с неблокирующими сокетами
2014-02-06 в 11:37, admin, рубрики: c++, HTTPS, Visual Studio, кроссплатформенная разработка, неблокируемые сокеты, Программирование, сервер, метки: HTTPS, кроссплатформенная разработка, неблокируемые сокеты, сервер Эта статья является продолжением моей статьи Простейший кросcплатформенный сервер с поддержкой ssl.
Поэтому для того, чтобы читать дальше очень желательно прочитать хотя бы часть предыдущей статьи. Но если не хочется, то вот краткое содержание: я взял из исходников OpenSSL файл-пример «serv.cpp» и сделал из него простейший кроссплатформенный сервер, который умеет принимать от клиента один символ.
Теперь я хочу пойти дальше и заставить сервер:
1. Принять от браузера весь http заголовок.
2. Отправить браузеру html страницу на которую будет выведен http заголовок.
3. Кроме этого, я хочу чтобы сокеты не блокировали процесс сервера и для этого я переведу их в так называемый «неблокирующий режим».
Читать полностью »
Искусственный интеллект в авиасимуляторах
2014-02-06 в 11:16, admin, рубрики: c++, game development, Блог компании 1C Game Studios, игры, искусственный интеллект, разработка игр, метки: c++, game development, игры, искусственный интеллект, разработка игр
В статьях и интервью, посвященных созданию игр, довольно часто упоминается термин «искусственный интеллект» или ИИ. Как правило, подобные описания ограничиваются фразами вроде «реалистичный ИИ» или «продвинутый ИИ». Однако для симулятора, а именно об авиасимуляторе пойдет речь ниже, ИИ играет роль не меньшую, чем физическая модель самолета.
Маскируем класс под граф Boost. Часть 1: Не трогаем интерфейс
2014-02-06 в 9:27, admin, рубрики: astar, boost, boost.graph, c++, graph_traits, граф, кратчайший путь, поиск пути, Программирование, метки: astar, boost, boost.graph, graph_traits, граф, кратчайший путь, поиск пути
Потребовалось недавно алгоритм поиска пути для нашей игры переделать. Прошлый был полностью самописный — шаг в сторону, и все плохо… Захотелось взять готовый из хорошего источника. Тут-то и вспомнилось, что в boost есть функциональность для работы с графами. К сожалению подход, «найди функцию, вызови — и все заработает» не состоялся. Упор в библиотеке сделан на максимальную гибкость использования, что негативно сказалось на простоте. В то же время и ничего смертельного — все лучше, чем с нуля делать (и потом исправлять). С другими библиотеками тоже связываться желания не было, в то время как boost в проекте используется давно…
Читать полностью »
Яндекс открывает офис в разработки Берлине
2014-02-06 в 9:00, admin, рубрики: c++, Блог компании Яндекс, разработка, яндекс, метки: berlin, c++, разработка, яндексЯндекс открывает офис разработки в Берлине. Это уже 16-й офис компании в мире и третий в Западной Европе — первые два расположены в Цюрихе и Люцерне. Исторически в Яндексе разработка сервисов и технологий распределена по региональным офисам. Так, сервис Такси разрабатывается в Екатеринбурге, Недвижимость – в Петербурге, технологии распознавания речи — в Москве и Цюрихе.
Сотрудники берлинского офиса займутся разработкой и исследованиями — при этом речь не идёт о сервисах для Германии. Первый проект связан с разработкой новой функциональности и технологий для мировых Яндекс.Карт: уже открыты вакансии для разработчиков С++. В перспективе в Берлине появятся команды и для других сервисов Яндекса.
Читать полностью »
О вольностях в ссылках или простейший обмен сообщениями
2014-02-05 в 11:25, admin, рубрики: c++, c++11, callback, callbacks, event-driven, С++, сообщения, метки: c++11, callback, callbacks, event-driven, С++, сообщения Обмен сообщениями достаточно фундаментальная вещь в науке 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
2014-02-05 в 11:12, admin, рубрики: c++, linux, openssl, Visual Studio, windows, кроссплатформенная разработка, Программирование, С++, сервер, метки: linux, openssl, windows, кроссплатформенная разработка, С++, сервер Не так давно передо мной встала задача: написать кроссплатформенный сервер для обработки запросов по протоколу ssl. До этого я писал сервера для обычных, не шифрованных протоколов, но с ssl столкнулся впервые.
Беглый обзор интернета показал, что лучшим решением будет не велосипедостроение, а использование библиотеки OpenSSL.
В этой статье я не хочу рассматривать процесс установки OpenSSL на Linux и Windows, замечу лишь, что для Windows процесс этот оказался нетривиальным. А рассказать я хочу о том, как мне удалось скомпилировать в Visual Studio пример простейшего сервера, входящий в состав исходников OpenSSL.
Неискушенному читателю может показаться: «что тут особенного — создал проект, включил в него готовый исходник, запустил»… Однако обо всем по порядку.
О том что мне помог найти CppCat в проектах
2014-02-04 в 8:05, admin, рубрики: c++, cppcat, Блог компании PVS-Studio, Программирование, статический анализ кода, метки: c++, cppcat, статический анализ кодаРазработка программного обеспечения на C++ с годами становится сложнее. Иногда, например, в отношении нового стандарта C++11 можно слышать, что язык усложнился. Да это так, но парадокс в том, что язык усложнился, а разработка на нем стала проще благодаря новым возможностям. И вся сложность разработки ПО на C++ не только в сложности языка, а в том, что с годами потребители от программного обеспечения ждут все больше возможностей. Как следствие растет и кодовая база проектов, для приведения которой в хороший законченный программный продукт требуется все больше вспомогательного ПО для разработчиков. Одним из таких инструментов является статический анализатор кода, который помогает разработчику найти проблемные или подозрительные участки кода, о которых компилятор промолчал.
Необходимость в большем количестве инструментов и статическом анализе возникает не просто так, не от лени и не от требований писать код еще быстрее. Чем больше и сложнее программа, тем больше в ней ошибок. Причем, количество дефектов растет быстрее, чем размер кода. Этот эффект описывал Стив Макконнелл в книге «Совершенный код» (см. также «Ощущения, которые подтвердились числами»). Так что без вспомогательных инструментов, берущих на себя часть работы, обходиться со временем все сложнее.
Не так давно появился новый такой инструмент — CppCat. О том как продукт PVS-Studio показал себя в проверке того или иного проекта с открытым кодом уже написано немало. PVS-Studio и CppCat базируются на одном и том же движке. Попробую отправить CppCat на поиски подозрительных мест в проектах, над которыми довелось поработать и из которых есть возможность показать небольшие фрагменты кода. Что из этого получилось?
Читать полностью »