Блог. Эксперименты. Монетизация

С момента публикации предыдущей статьи о блоге прошел почти год - за это время выросла посещаемость и вовлечённость пользователей. Кроме того, блог начал приносить хоть какой-то доход с рекламы (в районе 1000р в месяц), изначально я не ставил целью извлечение дохода, но немного поигрался с биржами.

Я проводил с блогом эксперименты (покупал ссылки, баннеры, продавал их, пробовал партнерские программы и т.п.) - в статье описано - что принесло положительный результат, а что - только убытки.

Читать далее

Рубрика: о блоге | Комментарии (2)

Паттерн Singleton. Описание. Пример использования

В статье описывается паттерн Singleton (Одиночка), рассмотрены 2 реализации и некоторые возможные модификации. Проанализированы сильные и слабые стороны шаблона. Приведен пример использования.

Статья состоит из двух частей:

  1. описание шаблона, варианты реализации, проблемы. Часть должна быть понятна программистам на любых языках, хотя примеры приведены на С++;
  2. более сложный пример - решается следующая задача:

    Не во всех операционных системах возможна установка громкости звука для отдельного приложения - громкость устанавливается глобально для всей системы. Однако, такая регулировка иногда необходима. Усложняется задача тем, что объекты, издающие звуки, могут быть разбросаны по всему приложению - нужно как-то связать их с объектом громкости (существующем в единственном экземпляре).

Читать далее

Рубрика: C++, Qt, паттерны | Добавить комментарий

Публикация Qt-приложения для Android

Я немножко доработал игрушку на Qt из предыдущей статьи, выложил ее на google play и решил описать всё, что мне показалось интересным в этом процессе: получение аккаунта разработчика, сборка приложения для google play, проблемы с файлами дополнений и отладка приложения.

Читать далее

Рубрика: C++, Qt, программирование | Комментарии (4)

Разработка игры на С++, Qt

Написал ремейк небольшой логической игрушки - "Полный квадрат". Код показался мне достаточно интересным чтобы описать на блоге.

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

В любой игре, чуть более интересной чем "Сапер", используются анимации, проигрывается звук, поэтому следующие компоненты Qt затронуты в статье:

  • класс QMovie для отображения gif-анимации тучек и ежа;
  • класс QPropertyAnimation - ежик перемещается плавно, при этом меняются его координаты (свойства);
  • QMediaPlayer из модуля Qt Multimedia. При перемещении наш ёжик топает;
  • Qt Style Sheets (QSS) используется для украшения элементов управления.
game_screens

снимки игровых экранов

Читать далее

Рубрика: C++, Qt | Комментарии (4)

Блок-схемы алгоритмов. ГОСТ. Примеры

Схема - это абстракция какого-либо процесса или системы, наглядно отображающая наиболее значимые части. Схемы широко применяются с древних времен до настоящего времени - чертежи древних пирамид, карты земель, принципиальные электрические схемы. Очевидно, древние мореплаватели хотели обмениваться картами и поэтому выработали единую систему обозначений и правил их выполнения. Аналогичные соглашения выработаны для изображения схем-алгоритмов и закреплены ГОСТ и международными стандартами.

На территории Российской Федерации действует единая система программной документации (ЕСПД), частью которой является Государственный стандарт - ГОСТ 19.701-90 "Схемы алгоритмов программ, данных и систем" [1]. Не смотря на то, что описанные в стандарте обозначения могут использоваться для изображения схем ресурсов системы, схем взаимодействия программ и т.п., в настоящей статье описана лишь разработка схем алгоритмов программ.

Рассматриваемый ГОСТ практически полностью соответствует международному стандарту ISO 5807:1985.

Читать далее

Рубрика: алгоритмы | Комментарии (3)

Способы обработки XML в Qt - Stream, SAX, DOM

Многие сталкивались с XML-документами и знают что это такое, ведь стандарт рассматриваемого языка разметки опубликован в далеком 1998 году. Язык XML используется во многих областях, но чаще всего для передачи информации через Internet - не случайно стандарт разработан Консорциумом Всемирной паутины (W3C) [1].

Очень много информации в этом мире записано и передается в формате XML, например ленты новостей RSS и Atom. В связи с этим не будут лишними навыки использования библиотек для обработки XML-файлов.

В статье рассмотрены три варианта разбора файлов в формате XML средствами библиотеки Qt. В качестве примера используется файл, возвращаемый Центральным банком Российской Федерации на запрос курса доллара в заданный период [2].

Для получения файла с курсом валюты на сайт Центрального банка высылается запрос. Используется QNetworkAccessManager, подробно описанный в статье "Получение данных с сайта. Шаблон Producer/Consumer" [3]. Данные, извлеченные из файла, выводятся на график средствами библиотеки Qwt [4].

Screenshot_of_the_schedule_currency

рис. 1 Снимок окна с графиком курсов валют

Читать далее

Рубрика: C++, Qt | Добавить комментарий

Обработка матриц на языке Prolog

Традиционно в ВУЗах студентам дают задачи по обработке матриц на языке Prolog, представленных в виде списков. В статье разобраны решения нескольких таких задач.

Примеры проверены на диалекте SWI Prolog, однако большая их часть без особого труда может быть переписана на другие диалекты. В примерах используется предикат nth0, но он может быть заменен предикатом at, аналогично, и некоторые другие.

В ряде диалектов, таких как SWI- или Visual- Prolog, встроена поддержка массивов, но во всех наших задачах матрица представляется списком списков т.к. статья ориентирована на студентов. Использование массивов в большинстве наших примеров значительно повысило бы эффективность, т.к. массивы обеспечивают константную асимптотическую сложность произвольного доступа, но для списков этот параметр линейный.

Читать далее

Рубрика: Prolog | Добавить комментарий

Фотографии заповедника Столбы в апреле

Эта галерея содержит 10 фотографий.

В апреле на столбы сходил 3 раза, но фотографии выложу пачкой. Фотографий получилось мало. Один раз вообще не фотографировал, т.к. меня постоянно материл попутчик. Первые 2 фотографии сделаны 13 апреля. Мы ходили на столб "Каин и Авель", но фотографировал я … Читать далее

Другие галереи | 1 комментарий

Многопоточный сервер Qt. Пул потоков. Паттерн Decorator

В предыдущей статье [1] была рассмотрена работа с сокетами в библиотеке Qt. Наш сервер сетевого чата работал в одном потоке. Задача текущей статьи - описание многопоточного сервера.

Однако, если сервер просто принимает сообщение и передает его всем подключенным клиентам - распараллеливать нечего и потоки не особо нужны. В связи с этим, мы немного усложним задачу - наш сервер будет вычислять передаваемые арифметические выражения (для вычисления выражений используем Qt Script [2]).

Серверу (а точнее, сокету) надо добавить новый функционал, и в этом нам поможет шаблон проектирования "Декоратор". Когда сервер начнет выполнять все необходимые нам функции, приступим к распараллеливанию. В статье рассмотрены 2 варианта:

  • создание отдельного потока на каждое подключение;
  • использование стандартного пула потоков библиотеки Qt.

В предыдущих статьях уже был описан шаблон параллельного программирования "поставщик-потребитель" [3]. Пул потоков является родственным паттерном, но мы не будем писать свою реализацию, а используем готовую.

Читать далее

Рубрика: C++, Qt, паттерны | Комментарии (8)

Работа с сетью в Qt. Сокеты. Паттерн Adapter

В статье показана работа с сетью на примере очень простого сетевого чата, а также описан никак не связанный с сетью шаблон проектирования адаптер (adapter, wrapper, обертка).

Несмотря на то, что наш чат максимально прост (он не позволяет передавать файлы и оффлайн-сообщения, не хранит историю, передает сообщения не шифрованными и т.д.), мы все же отделим часть, ответственную за работу с сетью. Эта часть будет использовать класс QTcpSocket, интерфейс которого нас не устраивает, в связи с чем, мы применим шаблон проектирования Wrapper.

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

Содержание:

  1. шаблон проектирования Adapter;
  2. работа с сетью в Qt. Классы QTcpServer и QTcpSocket;
  3. пример использования паттерна Adapter;
  4. исходный код сетевого чата.

Читать далее

Рубрика: C++, Qt, паттерны | 1 комментарий

Функциональное программирование и обработка изображений

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

Есть весьма популярная в узких кругах утилита обработки изображений, называемая VIPS [1]. Утилита кроссплатформенная и используется для обработки очень больших изображений. Состоит она из двух частей - библиотеки libvips и утилиты с графическим интерфейсом nip2.

Библиотеку libvips можно использовать в связке с языками программирования Python, C и C++. Библиотека имеет несколько особенностей, которые с одной стороны позволяют обрабатывать очень и очень больших изображения (обработка автоматически распараллеливается и изображения размером в десятки гигабайт не выжирают разом память), а с другой стороны делают программирование очень необычным мероприятием.

Созданное один раз изображение в libvips нельзя изменить, а если нам очень надо - то мы должны создать новое, измененное (но и старое не исчезнет). Операции над изображением фактически не выполняются до тех пор, пока оно не сохраняется на диск (операции накапливаются до поры, до времени).

Эти и другие особенности libvips подталкивают к использованию функционального языка для работы с библиотекой, и такой язык встроен в nip2. Язык не имеет названия, поэтому дальше я буду называть его nip2.

Nip2 - ленивый функциональный объектно-ориентированный язык с лиспоподобным синтаксисом, позволяющий без особого труда разрабатывать расширения для VIPS.

Читать далее

Рубрика: алгоритмы | 1 комментарий

Зимние Столбы

Эта галерея содержит 11 фотографий.

Фотоотчет выхода в заповедник (очень надеюсь, что заповедником и останется) "Столбы" 19.01.2014. Далеко я в этот раз не ходил - посетил Четвертый столб и погулял по Каштаковской тропе. Очень понравился красивый зимний лес - сильного ветра не было, поэтому на … Читать далее

Другие галереи | Добавить комментарий