Создание клиентского приложения для демонстрации рекламы

Описание принципа работы клиентской части программы для демонстрации городской рекламы. Анализ алгоритма обмена данными с сервером, воспроизведения рекламных кампаний, обеспечения дистанционного контроля. Сравнение приложения и программ аналогов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.06.2016
Размер файла 1,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

  • Введение
    • 1. Обзор существующих решений
    • 2. Принцип работы приложения
    • 3. Описание приложения
  • 3.1 Алгоритм обмена данными с сервером
  • 3.2 Алгоритм воспроизведения рекламных кампаний
  • 3.3 Обеспечение дистанционного контроля
  • 3.4 Описание журнала программы
  • 3.5 Описание настроек приложения
  • 4. Эффективность используемых технологий
  • 5. Сравнительный анализ приложения и программ аналогов
  • Заключение
  • Список используемых источников
  • Приложение А.Техническое задание
  • Приложение Б. Программа и методика испытаний
  • Приложение В. Руководства оператора
  • Приложение Г. Текст Программы

Введение

1. Наименование разработки

Данная работа посвящена разработке клиентской части программы для демонстрации городской рекламы

2. Описание проблемной области

Область демонстрации таргетированной рекламы с возможностью автоматизированной загрузки медиа файлов

3. Определение проблемы

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

4. Обоснование актуальности разработки

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

Сейчас многие компании предоставляют программы, для демонстрации рекламы на мониторах, которые позволяют дистанционно управлять набором демонстрируемого контента и обеспечивают их непрерывную работу [2]. Однако на рынке является востребованными программы с подбором рекламного контента, который соотносится с потребностями покупателей и обеспечивающее взаимодействие с ними. Такие решения оказывают большее влияние на продажи продуктов и увеличивают конверсию покупателей. В связи с этим, многие компании развивают такие технологии как: распознавание лица, идентификацию покупателя по RFID (радиочастотная идентификация) меткам, т.е. по информации содержащихся в кредитных картах, и распознавание документов (права, свидетельство о регистрации транспортного средства и других) покупателя для того, чтобы определить его потребности и предложить ему соответствующие товары[1].

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

5. Используемые определения и термины

В этой работе будут использованы следующие определения:

· Arduino - микроконтроллер, предназначенный для управления электронными устройствами и простейших вычислительных операций

· Таргетированная реклама -- реклама, предназначенная для просмотра определенной аудитории

· Рекламная кампания -- контейнер, содержащий список видео и картинок для показа на экране и имеющий ограниченный период демонстрации.

6. Цель и задачи разработки

Основной целью разработки является создание клиентского приложения для демонстрации рекламы. Для достижения этой цели были поставлены следующие задачи:

1. Интеграция в приложение существующих компонентов для проигрывания рекламного контента

2. Разработка методов синхронизации медиа контента с сервером

3. Обеспечение дистанционного контроля программы

4. Разработка взаимодействие с контроллером ардуино

5. Разработка решения обеспечивающего сбор статистики по показам рекламного контента

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

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

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

Четвертая задача служит для осуществления взаимодействия с предварительно запрограммированном контроллером ардуино, который выполняет две задачи:

· предоставляет возможность в виде физического ключа для запуска программы

· контроллер уровня яркости экрана для экономии потребляемой электроэнергии

Последняя задача предназначена для предоставления пользователю информации о количестве показов рекламных кампаний за определенный промежуток времени.

1. Обзор существующих решений

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

При рассмотрении рынка данных приложений можно выявить несколько международных лидеров, таких как Scala, Signage live, Bright Sign, dynamax, Four winds Interactive.[1] Данные компании предоставляют услуги по показу рекламы на различных устройствах в разных странах. Компании различаются по месту размещения их устройств, сферы внедрения их устройств (торговые центры, больницы, образования и другие), по способу показа рекламы и возможностью поддержки и помощи клиентам. По способу демонстрации рекламы кампании можно разделить на 3 группы:

1. Демонстрация рекламного медиа контента на их устройствах

2. Компании, предлагающие индивидуальную разработку рекламных стендов для кампаний, которые отображают веб-страницу с которой можно взаимодействовать с помощью сенсорного экрана. Такие решения могут использоваться для расширенного показа услуг или популяризации определенного вида деятельности. Примером может служить расположение информационных стендов в больницах для популяризации донорства

3. Программы для показа интернет трансляций. Данные программы широко используются для показа информации в метро, поездах, автобусах.

К сфере приложения, которое разработано в рамках данной работы ближе всего первая группа программ. Обычно у данных кампаний существует однотипная архитектура программ обеспечивающих показ рекламного контента. Она включает в себя:

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

2. Сервер для обработки запросов от приложений, установленных на экранах.

3. Клиентское приложение, установленное на устройствах. Предназначено для синхронизации списка рекламных кампаний и показа контента для покупателей. Приложения включают в себя специализированный плеер для проигрывания (например, предоставляемый компанией Scala)[4]

Однако для современного рынка городской рекламы в связи с развитием таргетированной интернет рекламы становится недостаточным лишь циклическое воспроизведение. В качестве идеи его дополнение предлагаются различные методы взаимодействия устройства с покупателем и демонстрации ему контента, соотносящегося с его личными потребностями. Из развивающихся решений по демонстрации таргетированного контента можно выделить следующие: распознавание лица, сканирование RFID меток на бонусных картах, распознавание марки машины путем сканирования документов.[1] Распознавание лица покупателя дает компаниям потенциальную возможность определить личность покупателя, путем запроса в социальные сети, или же определить список покупок, совершавшихся ранее этим человеком. Также некоторое распространение получило направление, связанное с распознаванием пола и возраста покупателя. Компания SignBox из Сингапура разработала прототип данной технологии. Но зона покрытия этой компании включает в себя только страны восточной Азии. На русском рынке демонстрации городской рекламы существует множество компаний, но данные компании не предлагают решений по распознаванию пола и отслеживание внимания на рекламу покупателя. В России рынок демонстрации городской рекламы является развивающимся и в связи с этим актуальна разработка приложения с применением этой технологии.

2. Принцип работы приложения

Клиентское приложение является частью системы по показу городской рекламы в городской инфраструктуре.

Рисунок 1. Архитектура системы демонстрации городской рекламы

В соответствии с рис. 1, архитектура системы делится на четыре взаимодействующих части:

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

Рисунок 2. Интерфейс веб-сайта [6]

2. База данных. Служит для хранения информации и содержит необходимые данные для работы клиентского приложения, такие как список рекламных кампаний, список носителей и таблицу для хранения статистики о показах

3. Серверное приложение предназначено для обработки запросов от клиентского приложения. В момент вызова функции со стороны программы сервер собирает необходимую информацию и предоставляет ее в качестве выходных данных. Также обеспечивает безопасный доступ к функциям без обеспечения клиентскому приложению прямого доступа к базе данных. Оно предоставляет следующие функции для дистанционного вызова:

· Функция авторизации. Предназначена для идентификации программы.

· Функция оповещения сервера о работе приложения. Предназначена для уведомления пользователя о том, что устройство подключено к серверу и работает в данный момент

· Функция выдачи текущего списка рекламных кампаний. Используется приложением для загрузки необходимых данных о рекламном контенте, который должен быть загружен на устройство для демонстрации. Ответ от сервера представляет собой список рекламных кампаний, в каждом элементе которого содержит: индивидуальный номер кампании, дата начала и конца показа, и интернет ссылки для загрузки контента на устройство

· Функция отправки статистики. Клиентское приложение использует данную функцию для отправки статистики по показам рекламных кампаний.

· Функция выдачи внешнего вида плеера. Она используется для выдачи информации о позиции каждого рекламного элемента на мониторе.

· Функция отправки журнала работы приложения. Служит для оповещения технической поддержки о возникших ситуациях на каждом устройстве.

· Функция проверки наличия новой версии приложения.

Серверное приложение предоставляет следующие методы для дистанционного вызова функций:

· Java Remote Method Invocation (англ.) - дистанционный вызов методов (перевод)(Java RMI). Данный метод специализирует на тех программах, которые используют Java для работы приложения. Java RMI - технология предоставляющая интерфейс для дистанционного взаимодействия между программами написанных на языке Java

· Simple object access protocol - Протокол доступа к объектам (SOAP) метод разработан для программ, которые написаны на других языках программирования и для программ, которые подсоединены к провайдерам у которых заблокированы порты использующиеся RMI.

4. Клиентское приложение. Внешний вид приведен на рис. 2. Она представляется как программный продукт, который можно установить на компьютер с целью воспроизведение рекламы, которая была загружена на сервер. Приложение взаимодействует со следующими модулями:

· Программа распознавания пола. Приложение использует данный модуль для обеспечения проигрывания на мониторе рекламного контента для женской и мужской аудитории.

· Ардуино представляет собой программируемый микроконтроллер. Он используется для двух решения двух задач: как физический ключ идентификации подлинности программы и как контроллер для регулирования уровня яркости монитора. Первая задача решается следующим образом: от сервера приложение получает случайную последовательность байт, которая подается на ардуино. Ардуино считает хэш сумму от данной последовательности по алгоритму MACMD5. Сервер в это время высчитывает хэш сумму по тому же алгоритму. Для авторизации приложение получает выходную последовательность и вызывает метод на сервере. При совпадении последовательностей сервер авторизует приложение, иначе отклоняет запрос. Вторая задача решается путем отправки в Ардуино команды об отключении или включении яркости дисплея. Ардуино взаимодействует с контроллером монитора для решения данной задачи

· Программа для обновления приложения. Служит для обновления версии клиентского приложения без необходимости вмешательства со стороны обслуживающего устройства персонала. Осуществляет свою работу ежедневно. Она отправляет запрос на сервер о

· Локальная база данных использующая SQLite. Приложение использует для хранения статистики по каждому показу рекламной кампании.

Рисунок 3. Внешний вид клиентского приложения

Для обеспечения демонстрации рекламного контента был разработан алгоритм работы программы. Алгоритм предназначен для постоянного показа и обновления рекламного контента на устройстве. Принцип работы программы можно разбить на следующие части:

1. При запуске программы осуществляется чтение из файла параметров для работы. В файле находятся следующие параметры: Адрес сервера, индивидуальный идентификатор экземпляра программы, режим проигрывания рекламных кампаний, номер монитора для работы программы, тип соединения с сервером. Данные параметры предназначены для установки соединения с сервером и сбора необходимой информации о рекламном контенте

2. После запуска происходит инициализация соединения с Ардуино. При отключенном контроллере запуск приложения не производится

3. Инициализация плеера. В данной части работы программа осуществляет загрузку необходимых компонентов для работы проигрывателя.

4. Просмотр списка загруженных рекламных кампаний. На этом этапе приложение осуществляет чтение из файла с данной информацией и проверяет наличие соответствующих загруженных видео и изображений

5. Программа начинает проигрывание рекламного контента. В зависимости от режима работы приложение осуществляет проигрывание файлов. Режимы работы приложения:

· Циклическое воспроизведение. В данном режиме приложение демонстрирует рекламу в цикле. Этот режим поддерживает воспроизведение нескольких файлов на одном мониторе

· Реакция на движение. В данном режиме приложение воспроизводит рекламу только когда обнаруживает изменение изображения, показываемого веб камерой

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

6. В фоновом режиме происходит обновление контента и отправка статистики. Процесс начинается с авторизации приложения на сервере путем отправки идентификатора устройства на сервер. При наличии данного идентификатора осуществляется запрос текущего списка рекламных кампаний. После получения списка программа проверяет какие файлы необходимо загрузить и при их наличии осуществляет их загрузку. После загрузки контента приложение добавляет их в список проигрывания. Проверка наличия новых кампаний осуществляется раз в час для обеспечения загрузки новых кампаний

7. После синхронизации приложение осуществляет запрос на сервер о наличии нового файла внешнего вида. При загрузке нового файла приложение производит перерисовку внешнего вида плеера.

8. Отправка статистики о показах на сервер. Осуществляется раз в час

Пункты алгоритма 6-8 осуществляются в параллельном потоке от проигрывания для обеспечения непрерывного воспроизведения.

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

Рисунок 4. Диаграмма процесса работы приложения

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

Принцип работы приложения, изображенный на рис. 4, позволяет реализовать в полной мере реализацию задач программы по постоянному показу рекламного контента. При его реализации была разработана следующая структура пакетов:

· Bean package содержит классы и интерфейсы использующиеся в процессе обмена данными между клиентским приложением и серверным приложением. Данные классы и интерфейсы включают в себя:

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

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

в) Gender - перечисление (enum), которое содержит в себе значение пола аудитории: male для обозначения мужской аудитории, female - женской, и neutral - для обозначения рекламных кампаний, предназначенных для женской и мужской аудиторий.

г) ScreenManager - интерфейс, содержащий в себе описание методов, которые вызывает клиентское приложение в процессе обмена данными. Классы, которые предоставляют функционал обмена данными между клиентским и серверным приложением, должны наследоваться от данного интерфейса.

· Client package содержит в себе классы, которые отвечают за запуск программы:

а) ClientProperties - класс предназначенный для считывания настроек приложения из файла и их записи в свойства этого класса.

б) ClientStarter - класс, содержащий в себе точку входа приложения. Предназначен для запуска потоков воспроизведения, обмена данными с сервером и дистанционного управления.

· Arduino package содержит в себе класс ArduinoConnector, предназначенный для взаимодействия с контроллером ардуино.

· Campaign package является пакетом, в котором реализованы классы для хранения в оперативной памяти данных о рекламных кампаниях:

а) CampaignsManager осуществляет синхронизацию рекламных кампаний с серверным приложением и осуществляет передачу данных в поток показа рекламных кампаний

б) CampaignsStatManager осуществляет сбор статистики из локальной базы данных и ее отправку на сервер

· Detection package содержит в себе классы для взаимодействия приложения с программой распознавания пола:

а) DetectionConnector предназначен для запуска программы распознавания пола и содержит методы взаимодействия с потоком воспроизведения рекламы

б) MessageDesirializer служит для передачи данных из программы распознавания пола в формате JSON в приложение

· JMX package содержит в себе класс ClientController, описывающий методы для дистанционного управления приложением

· Player package является пакетом в котором реализованы классы для интеграции с компонентами, которые осуществляют воспроизведение медиа контента:

а) Player является классом, в котором реализованы методы воспроизведения контента. Данный класс имеет один public метод, который принимает на вход данные о рекламной кампании, сортирует их по типу (изображение, видео или веб сайт) и воспроизводит принадлежащий им медиа контент.

б) PlayerController интерфейс, который формализует как должны выглядеть классы, управляющие плеером. Предназначен для взаимодействия с классом Player вне зависимости от режима работы приложения.

в) PlayerControllerTerminal класс управляющий объектом Player или несколькими объектами данного типа при режиме работы в циклическом режиме

г) PlayerControllerDetection класс управляющий объектом Player в режиме работы взаимодействия с программой распознавания пола

д) PlayerControllerMSensor класс управляющий объектом Player в режиме работы обнаружения движения

е) PlayerLayout класс, содержащий в себе информацию о количестве и местоположении зон проигрывания медиа контента

· Torrent package содержит в себе класс TorrentDownloader который осуществляет загрузку файлов медиа контента.

· RMI package содержит класс ScreenManagerConnector для управления процессом обмена данными с серверным приложением с помощью технологии Java Remote Method Invocation

· SOAP package содержит в себе сгенерированные классы с помощью Java API for Web Services и класс ScreenManagerConnectorSoap для управления процессом обмена данными с серверным приложением

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

3. Описание приложения

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

3.1 Алгоритм обмена данными с сервером

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

При запуске приложение должно авторизоваться на сервере для того, чтобы определить, какой контент нужно загрузить на устройство. При авторизации приложение производит следующий порядок действий:

1. На сервере дистанционно вызывается метод Authorize, который на вход принимает следующие параметры: серийный номер устройства, имя пользователя и пароль. После данной процедуры приложению высылается случайная последовательность байт, которое приложение должно зашифровать с помощью контроллера ардуино. Как было сказано в главе 2, Arduino используется как физический ключ для предотвращения использования программы неавторизированными пользователями

2. После получения случайной последовательности приложение передает ее на вход программе, которая используется в ардуино. Во время этого серверное приложение шифрует ту же последовательность по тому же алгоритму.

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

При разрыве соединения данный процесс начинается с первого пункта. При отсутствии интернет соединения приложение повторяет запрос на сервер с интервалом в 5 секунд, до того момента, как появится соединение или же прервется выполнение программы

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

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

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

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

3.2 Алгоритм воспроизведения рекламных кампаний

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

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

· Циклический режим. В данном режиме возможно воспроизведение нескольких экземпляров медиа контента на одном экране. В начале своей работы приложение просматривает файл layout.xml для определения внешнего вида программы. Данный файл содержит в xml формате следующие параметры для каждой зоны воспроизведения:

x, y - координаты левого крайнего угла положения зоны воспроизведения по оси x и y. Направление осей: x - от левого угла экрана, до правого, y - от верхнего угла экрана до нижнего.

Width - размер зоны по горизонтали.

Height - размер зоны по вертикали.

Единицами измерения данных параметров являются пиксели на экране.

После просмотра файла приложение размещает данные зоны на дисплее путем размещения графических компонентов данных размеров. Далее начинается процесс проигрывания: программа определяет, в какой из зон должен проигрываться медиа контент и вызывает команду на его воспроизведение. Зона воспроизведения может быть главной и не главной. Главная зона существует в одном экземпляре и на ней после проигрывания всех рекламных кампаний демонстрируется собственная рекламная кампания.

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

· Режим определения движения. В данном режиме приложение производит запуск двух потоков: первого - проверку на движение и второго - процесса воспроизведения. После запуска второй поток ожидает события от первого. При появлении события приложение подает рекламную кампанию на воспроизведение, при этом, индекс воспроизведения увеличивается на один. После проигрывания второй поток проверяет есть ли событие от первого и при существовании запускает следующую кампанию. Каждый раз при проигрывании второй поток проверяет информацию о загрузке рекламных кампаниях и при завершении загрузки добавляет ее в массив для воспроизведения.

· Режим взаимодействия с программой распознавания пола. Задача данного режима - показать рекламу предназначенную для показа определенному полу. Для обеспечения этой задачи приложение запускает два потока: первый - взаимодействующий с программой определения пола и по сигналу от второго выдает информацию о наличии наблюдателя перед устройством и его пол; второй - процесс воспроизведения, проверяющий информацию у первого потока о наблюдателях. При наличии информации о нескольких наблюдателях перед экраном в воспроизведении используется пол человека с наибольшей площадью лица. В процессе воспроизведение приложение получает информацию о поле наблюдателя и начинает проигрывать таргетированную кампанию. При окончании списка таргетированных кампаний, программа начинает воспроизведение рекламы, предназначенной для обоих полов. После окончания списка не таргетированных рекламных кампаний приложение начинает процесс показа заново.

При описании алгоритма необходимо упомянуть о процессе взаимодействия с ардуино. При проигрывании рекламной кампании программа посылает в ардуино сигнал о выполнении команды включить матрицу экрана. После проигрывания - сигнал о затемнении матрицы

Данный алгоритм позволяет обеспечить непрерывный показ рекламы даже при отсутствии интернет соединения, необходимого для загрузки новых рекламных кампаний.

3.3 Обеспечение дистанционного контроля

Обеспечение дистанционного контроля производится с помощью программы Java VisualVM с установленным плагином VisualVM-MBeans, которая позволяет вызывать методы, реализованные разработчиком с помощью использования технологии Java Management Extensions в приложениях Java. Данная технология предназначена для управления и мониторинга процесса работы приложения [7]. Программа Java VisualVM входит в состав Java Software Development Kit, который поставляется компанией Oracle. Данная программа позволяет дистанционно вызывать методы и может предоставлять информацию о загруженности процессора и занимаемой оперативной памятью клиентским приложением.

В клиентском приложении реализовано управление следующими функциями:

· SynchronizeMovies. Данная функция предназначена для синхронизации списка рекламных кампаний с сервером. Пользователь может вызвать данную функцию для немедленной загрузки компаний, если возникает потребность обновить список, не дожидаясь времени обновления, которое происходит каждый час, после запуска программы.

· PushStats. Данная функция предназначена для посылки статистики о показах рекламных кампаний серверу. Рекламодатель вызывает данную функцию при необходимости немедленного просмотра актуальной информации по показам

· StopClient. Метод предназначен для выключения клиентского приложения на устройстве

· CheckVersion. Данный метод используется при взаимодействии с программой обновления и производит проверку наличия новой версии клиентского приложения. Также пользователь может вызвать функцию, чтобы самостоятельно проверить информацию о новой версии программы. Возвращает пользователю результат в формате булевой переменной т.е. true - при наличии новой версии и false - при отсутствии.

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

· UsedMemoryPercentage. Функция выполняет запрос, сколько оперативной памяти в процентах использует приложение от всей памяти компьютера. Данная функция предназначена для выдачи информации о ресурсах, используемых приложением.

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

Рисунок 5. Внешний вид интерфейса программы Java VisualVM

3.4 Описание журнала программы

Журнал программы - текстовый документ, в который записываются данные о работе программы, которые являются выходными данными. Для рекламодателей важно, чтобы устройство осуществляло непрерывный показ рекламы для наблюдателей и при возникновении проблемы никоим образом не останавливало или мешало работе всплывающие сообщения об ошибке работы приложения. Причины данных ошибок могут быть различны: отсутствие соединения с сервером, отсутствие веб камеры или ардуино, или же непредвиденное завершение программы распознавания пола при нехватке физических ресурсов компьютера. Для обеспечения возможности поддержки клиентского приложения при возникновении ошибок со стороны пользователя был разработан журнал программы, в котором содержаться данные о процессе работы программы. Данный журнал представляет собой текстовый файл, в который записываются действия программы с помощью библиотеки log4j. Данная библиотека обеспечивает в клиентском приложение возможность автоматического создания отдельных файлов для записи выходных данных для каждого дня, запись времени сохранения каждой операции, о которой сообщает приложение, класс и поток сделавший запись в файл. В программе есть два уровня записи в журнал: info и debug. Уровень info служит для уведомления пользователя программы о происходящих в программе событиях. Уровень debug предназначен для оповещения разработчиков программы о процессе работы программы и служит для ее отладки. При включенном уровне info приложение записывает в выходной файл данные о следующих событиях:

· Процесс чтения настроек из файла. Настройки каждого запуска пишутся в журнал для поддержки приложения в случае возникновения проблем с запуском программы

· Процесс проверки целостности локальной базы данных

· Инициализация соединения с сервером. Установка параметров для соединения, такие как имя пользователя, пароль, адрес, сертификат безопасности

· Запуск процесса оповещения серверного приложения о работе клиентского приложения

· Запуск процесса проигрывания медиа контента

· Проверка загруженных рекламных кампаний

· Запуск процесса загрузки медиа контента

· Оповещение о завершении загрузки рекламной кампании

· Отправка статистики о показах рекламных кампаний на сервер

· Взаимодействие с ардуино: инициализация, соединение, оповещение об ошибке или об успешном соединении

· Взаимодействие с программой распознавания пола: запуск программы, соединение, оповещение об успешном соединении или об ошибке, перезапуск программы

· Отчет о дистанционно выполняемых командах

· Завершение работы клиентского приложения

При включенном уровне debug приложение дополнительно записывает в файл данные о следующих событиях:

· Проигрывание каждого медиа файла

· Об обнаружении нового наблюдателя перед экраном

· При обнаружении движения

· Список загруженных рекламных кампаний

Журнал файла пересылается на сервер для просмотра администраторами приложения для устранения возникших проблем с устройством и осуществления поддержки и устранения возникающих ошибок. При установке программы уровень записи в журнал установлен в режим info, что позволяет отслеживать ошибки при использовании приложения пользователем. При необходимости отладки приложения пользователь может переключить уровень записи в debug и просмотреть каждое действие, выполняемое программой. Таким образом, журнал программы позволяет обеспечить оперативную поддержку пользователей и быстрое устранение ошибок при отладке, написании и редактирования программы. Внешний вид файла журнала приведен на рис. 6

Рисунок 6. Внешний вид файла журнала приложения

3.5 Описание настроек приложения

Файл настроек приложения является совокупностью параметров, предназначенных для запуска программы. Данный файл считывается в начале запуска приложения и содержит в себе следующие свойства:

· Host: адрес сайта, на котором размещено серверное приложение. Параметр используется при взаимодействии по Java RMI протоколу.

· Port: Порт, на котором размещены методы взаимодействия с серверным приложением

· Delay: Задержка при отправлении повторных запросов на сервер при отсутствии соединения

· Screen name: Идентификатор устройства на который установлено клиентское приложение. Свойство предназначено для авторизации на сервере и для загрузки предназначенного именно для этого устройства рекламных кампаний

· Screen type: Обозначает режим работы приложения. Может принимать три значения: Detection - взаимодействие с программой распознавания пола, Msensor - режим обнаружения движения и Terminal - режим циклического воспроизведения

· Screen id: Номер дисплея на котором отображается рекламные кампании.

· Movy update base url: адрес веб сайта на котором хранится медиа контент для загрузки его устройством

· Downloads path: Путь к папке, куда будут загружаться файлы медиа контента

· Screen manager connector type: Содержит метод соединения с сервером. Данное свойство может применять два значения: Soap - для соединения с сервером с использованием soap соединения; RMI - для соединения с сервером с использованием технологии java remote method invocation

· Username и Password - имя пользователя и пароль, использующийся для соединения с сервером

· Soap service path - Данное свойство обозначает веб адрес сервера на котором реализованы методы с использованием протокола SOAP

Рисунок 7. Внешний вид файла настроек

Файл позволяет пользователю приложения изменять настройки и создавать данный файл в процессе установки приложения на компьютер. Внешний вид файла приведен на рис. 7.

4. Эффективность используемых технологий

Подведя итог вышеприведенных глав, можно сказать, что клиентское приложение должно обеспечивать рекламодателя следующими функциями:

· Установка приложения с вводом параметров и созданием файла настроек

· Проигрывание рекламных кампаний, которые содержат:

Файлы изображений в форматах JPEG, PNG, BMP

Файлы видео в форматах MPEG-4, AVI

Адреса веб страниц для отображения

· Обновление списка рекламных кампаний с сервером

· Загрузка необходимого контента

· Взаимодействие с Ардуино

· Сбор статистики о показах рекламных кампаний

· Дистанционный вызов методов для обновления и завершения приложения

· Поддержка многопоточности

Для реализации данных функций и разработки приложения был выбран язык Java. Данное решение обусловлено следующими сильными сторонами языка:

1. Встроенные методы многопоточности, что позволяет реализовать одновременное выполнение нескольких функций, таких как одновременная загрузка и показ рекламных кампаний.

2. На данном языке поддерживается написание клиентских приложений, которые могут передавать данные через интернет соединение. Передача данных через сеть в программе написанной на Java проводится в коде аналогичными методами, как и отправка данных в файл, что облегчает работу разработчику по интеграции с серверным приложением[8]

3. Встроенный сборщик мусора который проводит очистку оперативной памяти от не используемых объектов без вмешательства разработчика и как результат уменьшает утечку памяти в результате долгой работы программы[8]

4. Большой набор библиотек, написанных сторонними разработчиками на Java, которые необходимы для реализации вышеприведенных функций программы, такие как Jbittorrent, RMI, Java architecture for XML building (JAXB), Guice. О назначении указанных технологий будет разобрано далее.

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

В качестве операционной системы, для которой реализована программа было выбрано семейство Windows по причине того, что рекламодатели на российском рынке чаще всего имеют устройства именно с этой операционной системой. Многие компании размещающие рекламу на своих устройствах, такие как QIWI, Сбербанк, АПИТ, КРОК имеют терминалы с операционной системой Windows различных версий. Вследствие того, что приложение предназначено для внедрения на российский рынок рекламных услуг именно данное семейство операционных систем было выбрано в качестве платформы, на которую устанавливается программа.

В качестве существующих компонентов на котором реализован показ медиа контента был выбран фреймворк Qt версии 4.8 и в качестве связки с Java приложением используется технология Java Native Interface (JNI). JNI позволяет программам написанным на языке Java исполнять функции скомпилированного кода, написанного на других языках, таких как С, С++, Visual basic. В Java присутствуют компоненты, поддерживающие воспроизведение и показ изображений, видео и веб сайтов такие как Java FX компоненты. Библиотека Java FX предоставляет методы для разработки графического интерфейса. Первоначально при разработке приложения предполагалось использовать именно эту технологию, но, при ее применении, выяснилось, что данные компоненты не освобождают оперативную память от неиспользуемых объектов. Вследствие этого при воспроизведении видео большого разрешения используемая память росла на 200 MB в час, что приводило к непредвиденному завершению приложения через 5-6 часов работы при объеме 4ГБ. Также при использовании Java FX Media выяснилось, что оно осуществляет огромную загрузку процессора и видео карты по сравнению с воспроизведением рекламных кампаний с использованием Qt. Qt является кросс платформенным фреймворком, использующим C++ для создание пользовательских интерфейсов и программного обеспечения. При разработке была использована версия 4.8, тогда как последняя версией является 5.3. Данный факт вызван ошибкой при отображении веб сайтов в связке с JNI, хотя при применении компонентов в наитивном приложении не вызывало ошибок. Применение Qt фреймворка показало лучшие результаты по производительности, чем использование Java FX компонентов. В частности при постоянном воспроизведении видео разрешения 1920*1080 длительностью 30 секунд показало использование меньшего процента работы процессора: на процессоре intel core i7 потребление снизилось с 34-30% до 5-7%, что показывает увеличение производительности как минимум в 4 раза. При использовании связки JNI+QT полный процесс работы приложения использовал не более 200 MB. Данный вывод был сделан с использованием программы Java Visual VM, которое показывает фактический размер занимаемый Java приложением без учета дополнительной потребляемой памяти Java Runtime Environment (Виртуальной машиной java). Истинный размер оперативной памяти задавался в параметрах запуска виртуальной машины java. Однако, использование Qt фреймворка для полного написания клиентского приложения было затруднительным по следующим причинам:

· Для тесной интеграции с серверным приложением, которое, в свою очередь, было написано на языке Java, необходимо было использование технологии Java RMI, которое не поддерживается Qt. Использование С++ при разработке потребовало бы изменения серверного приложения, которое не входит в рамки разрабатываемого клиентского приложения.

· Длительная компиляция кода, контроль за используемой памятью, трудность написания многопоточного приложения на Qt C++ усложнило бы разработку приложения.

Данные плюсы Java языка по удобности интеграции с серверным приложением и облегчению разработки и плюсы Qt C++ фреймворка в производительности привели к выбору гибридного решения, такого как одновременного использования Java языка для разработки алгоритмов работы приложения и C++ языка для написания части приложения, предназначавшегося для воспроизведения медиа контента.

В качестве технологий для реализации обмена данными через интернет были выбраны SOAP и RMI. Данное решение увеличивает надежность процесса коммуникации между клиентским и серверным приложением: RMI обеспечивает быстрый обмен данными по сравнению с SOAP т.к. использует потоковую передачу необходимых данных, в то время как SOAP, использует XML для этой цели, что увеличивает объем траффика. Однако при проведении эксперимента при использовании разных интернет провайдеров выяснилось, что иногда компании используют блокировку портов, используемых RMI делая использование данной технологии в данных сетях затруднительным. Соответственно было выбрано решение использовать две технологии сразу, оставив выбор на усмотрение пользователя: если он выбирает быстрый обмен данных и сеть предоставляет возможности по использованию методов RMI то пользователь выбирает remote method invocation для обеспечения соединения. Если же порты заблокированы провайдером, то пользователь может выбрать SOAP соединение.

Для обеспечения возможностью зашифровать данные, которые идут через интернет соединение был выбран Hypertext transfer protocol secure (HTTPS) в качестве защиты от утечки данных. HTTPS - протокол коммуникации с поддержкой Secure socket layer (SSL - уровень защищенных сокетов(перевод)) для шифрования данных. В языке Java существуют встроенные методы для обеспечения соединения через HTTPS, включая функции для выбора алгоритма шифрования и настройки приватных и публичных ключей. При использовании технологии SOAP для обеспечения безопасного соединения требовалась XML web services security (XWSS - безопасность для веб сервисов использующие XML(перевод)) авторизация. При ее использовании серверное приложение предоставляет доступ к выполняемым методам только после авторизации приложения путем предоставления имени пользователя и пароля для доступа. Эксперимент показал, что таким образом достигается шифрование информации об устройстве и деталях рекламных кампаний, при обмене ими между серверным и клиентским приложением.

Для обеспечения функции хранения статистики о показах было принято решение использовать реляционную базу данных SQLite. Данный способ хранения обеспечивает быстроту отклика (сбор информации для посылки статистики на сервер занимает 15 миллисекунд при 2000 строк данных; Запись в локальную базу данных о статистике занимает 7 миллисекунд при 2000 строк данных), удобность интеграции через встроенные функции java, используя драйвер для этой базы данных. Также по сравнению с текстовым файлом обеспечивает удобную запись данных, используя SQL запросы, тогда при записи в текстовый файл понадобилось бы производить постоянное открытие и закрытие потока записи в него.

...

Подобные документы

  • Обзор существующих объектных архитектур. Архитектура программного обеспечения. Создание веб-сервиса "Библиотека", предоставляющего механизмы работы с данными на стороне клиентского приложения. WEB-сервис и трехуровневая архитектура в основе приложения.

    лабораторная работа [1,5 M], добавлен 16.06.2013

  • Исследование особенностей реализации клиентского приложения в режиме сервер-терминал. Изучение процесса подготовки компьютера перед установкой программного обеспечения. Характеристика защиты клиентской части программы от несанкционированного доступа.

    курсовая работа [332,4 K], добавлен 13.11.2011

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

    курсовая работа [953,3 K], добавлен 01.09.2016

  • Особенности работы с SQL-базами данных. Установка и настройка локального сервера СУБД Interbase. Создание приложения "Торговая фирма", состоящее из серверной части и клиентской. Разработка спецификаций и описание интерфейса пользователя программы.

    курсовая работа [634,5 K], добавлен 14.07.2012

  • Проектирование приложения, предназначенного для демонстрационного показа операций сдвигов чисел влево и вправо на n-битов и их результатов. Требования к функциональным характеристикам, параметрам технических средств. Компиляция и компоновка программы.

    курсовая работа [712,4 K], добавлен 08.11.2013

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

    курсовая работа [35,4 K], добавлен 12.05.2013

  • Общее определение JavaScript-библиотеки, виды библиотек. Создание клиентского приложения с использованием одного из существующий JS-фреймворков. Значение, виды и выбор фреймворка. Выбор приложения и его тематики. Написание программного кода, итоги работы.

    курсовая работа [545,8 K], добавлен 21.12.2013

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

    курсовая работа [305,9 K], добавлен 03.07.2011

  • Реализация проекта по оптимизации отделений почтовой связи. Направления деятельности в области кадровой политики. Автоматизация обработки получаемой техническим отделом информации. Разработка приложения клиент-сервер. Описание клиентского приложения.

    курсовая работа [34,3 K], добавлен 07.08.2013

  • Методы прогнозирования, их классификация. Использование рекламы в социологии. Пооперационная разработка, реализация и конфигурирование модели в пакете Anylogic. Создание анимации. Описание имитационных вычислительных экспериментов, анализ результатов.

    курсовая работа [1,7 M], добавлен 03.06.2012

  • Эксплуатация анализатора качества электроэнергии Satec PM175. Создание документов "Видение" и "Спецификация требований" для системы сбора данных с анализатора. Проектирование серверного и клиентского приложения в среде программного обеспечения LabVIEW.

    курсовая работа [830,6 K], добавлен 25.09.2013

  • Создание программы для вычисления суммы элементов массива. Проектирование приложения, которое бы переводило минуты в часы или часы и минуты в минуты. Написание HTML-страницы для работы с базой данных автобусов и водителей, интерфейс приложения PhpMyAdmin.

    учебное пособие [1,9 M], добавлен 25.05.2015

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

    дипломная работа [2,4 M], добавлен 02.06.2013

  • Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.

    курсовая работа [1,1 M], добавлен 17.10.2012

  • Описание приложения в виде пользовательского сценария. Проектирование обмена сообщениями между модулями. Разработка общей структуры приложения. Обзор структуры файлов. Разработка получения данных со страницы. Характеристика результата работы программы.

    дипломная работа [1,5 M], добавлен 22.03.2018

  • Анализ предметной области. Выработка требований и ограничений. Серверная часть информационной системы. Запросы клиентского приложения. Триггеры для поддержки сложных ограничений целостности в базе данных. Пользовательский интерфейс клиентского приложения.

    курсовая работа [2,6 M], добавлен 21.02.2016

  • Разработка и анализ функциональной модели деятельности предприятия. Создание базы справочника. Использование трансферов для передачи данных между клиентом и сервером. Требования для работы приложения. Добавление, изменение, хранение и удаление данных.

    курсовая работа [396,4 K], добавлен 26.10.2014

  • Разработка программного решения по созданию мобильного приложения. Изучение технологий для разработки приложений. Анализ работы торговых агентов. Обоснование выбора языка программирования. Проектирование интерфейса структуры и верстка, листинг программы.

    дипломная работа [2,2 M], добавлен 08.06.2017

  • Методика разработки и листинг программы для управления динамиком системного блока, обеспечения установки частоты и длительности формируемых сигналов. Алгоритм и этапы работы проектируемого приложения, анализ полученных результатов. Пример его работы.

    лабораторная работа [79,0 K], добавлен 17.12.2015

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

    курсовая работа [4,3 M], добавлен 27.03.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.