30.11.2016

Новая организация курса (для студентов 2017 г.)

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





02.06.2015

Мобильный клиент или Контрольная работа 3.

Как построить клиент-серверное приложение

Введение

В этом уроке мы будем учиться тому, как установить коммуникацию между клиентом и сервером, причем клиент – это мобильное Android-приложение, а сервер – это интернет-сервис, хранящий общие для многих клиентов данные и выполняющий их обработку.
Примеров таких приложений множество:
  • мобильный клиент делает фотосъемку и посылает файлы изображений в общее серверное хранилище, где могут подвергаться обработке и откуда они доступны для других клиентов (инстаграм); 
  • мобильный клиент делает опрос и результат посылает серверу, где данные опросов интегрируются, обратно посылается статистика ответов (участие в телешоу, исследование рынка) ; 
  • координаты мобильного клиента отсылаются на сервер, где наносятся на карту, обратно отсылается карта ближайшего  окружения с выделенными типами мобильных клиентов и их телефонов (например, - передвижные пункты проката, ларьки, такси, попутчики, друзья, игроки…), 
  • результаты мобильной игры передаются на сервер для составления рейтинга игроков
  • и т.п.
В простейшем случае для указанных целей можно использовать веб-приложение, где:
- клиентом является браузер, 
- сервер – это веб-сервер,
- для обмена данными используется http-протокол.
Достоинство такого приложения – простота разработки, так как все подробности обмена данными с сервером уже «упакованы» в браузере. Недостатки: низкое быстродействие, ограниченная функциональность.
Поэтому мы рассмотрим здесь, как разработать мобильный клиент, используя «родной» Java.  Остальные компоненты системы останутся такими же. Пример информационных потоков в приложении показан на рисунке 1.
Таким образом, в систему входят следующие компоненты:

  1. клиентский метод, управляющий обработкой пользовательского интерфейса – ввод данных, нажатие кнопок и т.п. (onCreate)
  2. клиентский метод для обмена информацией с веб-сервером (GetText>),
  3. серверный скрипт для получения данных от клиента и возврата ответа (httppost.php);
  4. клиентский метод для отображения полученных данных (showData).
В зависимости от выбранных технологий на клиенте и сервере все компоненты могут быть реализованы совершенно по-разному.
В данном уроке рассмотрим пример приложения «Голосование», в котором пользователь должен ввести регистрационные данные (имя, email) и выбрать один из предложенных вариантов ответа на вопрос. Затем номер выбранного варианта отсылается на сервер, где хранятся счетчики голосов по каждому варианту, а также БД с регистрационными данными пользователей. К нужному счетчику добавляется 1, а пользователь получает сообщение о приеме данных или отказе сервера, а также значения счетчиков. Если пользователь желает посмотреть статистику голосования, значения счетчиков выводятся в виде диаграммы.
Примечание: пример приложения рассмотрен исключительно в образовательных целях. Не учитываются такие необходимые для реальной жизни компоненты приложения, которые обеспечивают безопасность, надежность и др.

Разработка пользовательского интерфейса

Спланируем интерфейс клиентского приложения (рисунок 2):
Используем табличный макет из 2-х столбцов. В верхней строке - два элемента TextView для подсказки и вывода результатов. Там будет отображаться ответ пользователя и статистика.
Во 2-ой строке – кнопки для работы с сервером (получить статистику и сохранить данные на сервере).
Третья строка – это вопрос и подсказка к нему (текстовые поля). Далее две строки содержат 4 кнопки для выбора ответа.
Наконец, последние 2 строки содержат подсказки и поля для ввода имени и почтового адреса.

Разработка серверной части

Сервер не просто хранит файлы, но и обрабатывает их: анализирует полученные от клиента значения, увеличивает счетчики, посылает их значения клиенту.
В нашем примере все операции будут реализованы на языке PHP.
Все данные будем хранить в базе данных:
-      счетчики голосования в таблице result (code, rating), где  – первый столбец – код ответа, второй – рейтинг ответа (целые числа);
-      список пользователей – в таблице users(name, email).
Алгоритм работы сервера:
1) Вначале проводим разбор http-запроса и записываем в 3 переменные значения: имя пользователя, почту и номер ответа.
2) Затем пользовательское имя и почту с помощью команды выборки ищем в базе данных. Если такой пользователь не найден, то добавляем новую запись в таблицу users.
3) Анализируем код выбранного пользователем ответа codeAnswer:
- делаем выборку в переменную ratingValue из таблицы  result: текущее значение счетчика rating при условии code= codeAnswer.
- если таких ответов еще не было в БД (ratingValue = пустое значение), то добавляем в result новую запись (CodeAnswer, 1);
- иначе: в result заменяем значение rating=ratingValue+1 для записи с code= codeAnswer.
4) Читаем все значения таблицы result и формируем результат, возвращаемый в выходной поток.

Отладка и тестирование сервера

Нам нужен веб-сервер.
Во-первых, вы можете установить на домашнем компьютере web-сервер, php и СУБД, например, MySQL. После того, как приложение будет отлажено, перенести серверную часть приложения на хостинг в интернет и провести тестирование в реальных условиях.
Во-вторых, можно сразу найти хостинг с поддержкой php и СУБД, разобраться, как с ним работать и начать отладку в условиях «живого интернета». Например, на сайте  http://www.hostinger.ru всё это есть - и бесплатно.
Есть достоинства и того и другого метода. Выбирайте сами, учитывая, что обучение работе с веб-сервером не входит в рамки данного курса, а для сдачи контрольной работы достаточно продемонстрировать вариант действующего приложения в любом виде.

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

Текст серверной части см. в файле httpgetpost.php Пример кода отладочной веб-страницы приведен в файле index.html

Разработка клиентской части 

Поскольку обмен данными с сервером – длительная операция, то необходимо создать обработчик этой операции, функционирующий в фоновом режиме, чтобы обеспечить доступность элементов пользовательского интерфейса во время обмена данными. В противном случае приложение «зависает» на время работы с сервером, не реагируя на действия пользователя.
В нашем случае клиентская часть содержит методы:
onCreate – определяются переменные для получения данных с интерфейса,
определяются обработчики всех кнопок. Если пользователь не ввел данные в поля или не выбрал ответ – обращение к серверу не выполняется.
GetText –  обмен данными с сервером: формирует текстовую строку для отсылки имен и значений переменных на сервер, посылает данные и выводит ответ, полученный с сервера, в массив из 4-х значений.
ShowData – массив значений счетчиков выводится в виде диаграммы.
Для отладки клиента сначала убедитесь, что интерфейс работает, а также формируется правильный http-запрос (хотя бы выведите его текст в log ). Только потом можно подключаться к серверу.


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

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

О контрольной работе 3

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


07.05.2015

Контрольная работа 2 по разделу 2.

Контрольная работа 2 по модулю 2

Контрольная работа позволит оценить ваши знания по 8 и 9 урокам.

Написать программу, которая изобразит в виде диаграммы статистику голосования.
Главная активность содержит 2 кнопки (или список) - первая запускает активность "Голосование", вторая - "Статистика".
Активность "Голосование" выводит вопрос и позволяет выбрать из 3-х вариантов ответа (см. варианты заданий). Ответ преобразовать в число 0, 1 или 2, затем проанализировать это число и увеличить на 1 одно из трех полей в таблице БД (БД содержит таблицу из трех полей, каждое поле - счетчик числа ответов 0, 1 или 2 вида).
Вторая активность "Статистика" должна получить текущие значения счетчиков из БД и по этим значениям нарисовать диаграмму.
Программа в дальнейшем будет расширена: базу данных будем хранить и синхронизировать с облаком).
Вопрос придумывайте сами. Варианты ответов:
12 3 456
плохо-средне-хорошонет-может быть-да никогда - иногда - всегда ненавижу это равнодушен - обожаю очень близко - на среднем расстоянии - как можно дальше первая - вторая - третья вещь (предмет, система, программа и т.п.)
Задание выполняет бригада из двух студентов.
Срок сдачи - 20 мая текущего года.

Урок 9. Работа с базой данных

Куда же мы без базы данных, если нужно хранить какую-то структурированную информацию: списки клиентов,  заказов и прайс-листы, список артефактов, достигнутые результаты в игре, и мало ли что еще!
В Андроид есть специальный класс для работы с БД SQLite (это простая реляционная БД, хранящаяся в текстовом файле).
Изучаем лекцию 7 в университете ИНтуит (разделы 16.1 и 16.2)
http://www.intuit.ru/studies/courses/12643/1191/lecture/22001
и делаем самостоятельную работу 10:
http://www.intuit.ru/studies/courses/12643/1191/lecture/22003

Контрольное задание к уроку:
1) Придумайте, что в вашем курсовом проекте можно хранить в базе данных, предложите структуру БД из 2-3 таблиц, разработайте sql- запросы для их создания.
2) Измените пример, приведенный в самостоятельной работе к этой теме, для работы с вашей базой данных.

Урок 8. Использование библиотек

"Родные" и сторонние библиотеки позволяют быстрее разработать приложение, пользуясь уже готовыми объектами. Вопрос только в том, - какие выбрать библиотеки и как разобраться в объектах. А ещё - как подключить библиотеку к своему проекту. Именно этому посвящен данный урок.
Прочитайте лекцию на сайте ИНТУИТ:
http://www.intuit.ru/studies/courses/12643/1191/lecture/21998,
решите тест по лекции
и проделайте самостоятельную работу
http://www.intuit.ru/studies/courses/12643/1191/lecture/22000.

Результаты ваших трудов понадобятся для 2-ой контрольной работы.