Рубрика «С++» - 19

Желание написать об C++ API у меня возникло давно, и вот наконец выдался спокойный вечер. По роду деятельности я и мои ребята пишем код на C++ для программистов на C++ и Python, общее ядро функционала, который используется во всех продуктах нашей компании. Разумеется это подразумевает, что код должен иметь интуитивно понятный API, с общей логикой как для низкоуровневого C++, так и для высокоуровневого Python, вне зависимости от разночтения в языках некоторых базовых конструкций. Об объединении C++ и Python я много писал ранее в статьях про Boost.Python, сейчас я очень благодарен архитектуре и логике языка Python, я многое понял и перенял в С++ именно благодаря опыту построения общего API для этих двух таких разных языков, но сейчас речь пойдёт только и исключительно о C++, про API и про то, что такой зверский гибкий язык позволяет сделать с интерфейсом вашей замечательной библиотеки, если не учитывать ряд важных особенностей языка C++.
Читать полностью »

Привет!
Сегодня у нас очень много новостей. Это и Tizen Developer Summit Russia в Москве, и Tizen Hackathon сразу после этого, и Tizen TV SDK.

Накануне Tizen Developer Summit Russia 2014

Но… обо всём по порядку.
Читать полностью »

Ох и давненько мы не радовали читателей чем-нибудь свеженьким — за это время накопилось много того, чем делиться хочется. И мы не будем себя в этом сдерживать!

Эта статья будет интересна скорее разработчикам, ну а также всем тем, кто неравнодушен к прекрасному, происходящему по ту сторону игр.

У нас много новостей: мы серьезно выросли за этот период и перешагнули отметку в 80 человек, захватили практически весь этаж в БЦ и по традиции дали нашим художникам возможность оформить новое пространство с присущим им вкусом:

image

Выпустили Cut The Rope “Time Travel” и Cut The Rope 2 c уже всемирно полюбившимися персонажами:

image

Ну и, разумеется, в моменты релиза офис угощался специально обученными ОмНомовидными пироженками.

Сейчас у нас ведется разработка никак не связанных с Cut The Rope игр, которые свет увидит чуть позже (пока сохраним интригу).

За прошедший год мы существенно доработали и обкатали внутренний фреймворк, позволяющий писать весь игровой код на С++ и собирать билды сразу под iOS и Android. Также за прошедший год мы стали активно использовать возможности C++11, и, несмотря на очевидное количество legacy-кода в самом фреймворке, использование возможностей C++11 в проектном коде новых тайтлов становится нашим стандартом. Параллельно мы рассматриваем прочие средства разработки, например Unity. Однако, в нашем фреймворке есть ряд приимуществ, отказываться от которых так просто не хочется.Читать полностью »

В предыдущей статье я рассказал, как написать простой сервер для передачи одного файла по протоколам http и https. Прошло немного времени и я решил сделать из этого кода универсальную библиотеку для быстрого создания серверов.

Полный код библиотеки можно посмотреть на гитхабе, а если в двух словах, то я добавил немного «египетских скобок», новомодных лямбда-функций и шаблонов. На сегодняшний день результатом стала кроссплатформенная библиотека для создания асинхронных серверов, состоящая из 5 файлов с общим размером 22.5 килобайт. Версия библиотеки для Линукс состоит из одного файла размером 18 килобайт (517 строк кода).

В этой статье я коротко расскажу как работает библиотека и покажу, как с ее помощью написать полностью работоспособный веб-сервер для статических сайтов.
Читать полностью »

Множественный выбор в QComboBox
Картинка для привлечения внимания
(возможно имеющая отношение к посту)

Иногда, довольно удобным бывает возможность множественного выбора в виджете QComboBox. В этом небольшом туториале будет показано, как это cделать.
Читать полностью »

Эта статья продолжает мои предыдущие:
Простейший кросcплатформенный сервер с поддержкой ssl
Кроссплатформенный https сервер с неблокирующими сокетами
Кроссплатформенный https сервер с неблокирующими сокетами. Часть 2
Кроссплатформенный https сервер с неблокирующими сокетами. Часть 3

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

После нашей удачной первоапрельской шутки нас регулярно спрашивают, когда же мы выпустим C++ IDE. Понятно, что все, кто пишет под Linux, давно ждут такую среду разработки, да и альтернатива имеющимся в Windows и Mac OS никому не помешает.

C++ IDE — это отдельный продукт, она основана на платформе IntelliJ, как и прочие наши IDE. Поддержка C++ в ReSharper — это совершенно другая тема, и про нее мы отдельно напишем (не сегодня).

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

О вольностях в ссылках или простейший обмен сообщениямиОбмен сообщениями достаточно фундаментальная вещь в науке 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) {
	...
}

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

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

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

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

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

#include ".//.//.//.//jeh.cpp"
#include "jeh.cpp"
`

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


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