Трекинг почтовых отправлений

 

РЕФЕРАТ


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



ВВЕДЕНИЕ


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

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

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

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

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


1. АНАЛИЗ СЕРВИСОВ ОТСЛЕЖИВАНИЯ ПОЧТЫ


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

Трекинг номер представляет собой некий уникальный буквенно-цифровой код, идентифицирующий каждую посылку. Например, если доставка из США осуществляется службой USPS, то трекинг номер посылки состоит из 2 букв (англ.), первая из которых - это буквенный идентификатор способа доставки (L, C или E), девяти цифр и еще 2 букв (англ.). Когда посылка прибывает в страну получателя трекинг осуществляется местными почтовыми операторами. Отследить свою посылку можно, посетив сайт национальной почтовой службы страны-получателя или же региональный сайт международной курьерской или почтовой компании. Важно помнить, что трекинг номер на сайтах национальных почтовых операторов вводится всегда только заглавными буквами. Трекинг посылок доступен и для больших грузов, и для маленьких почтовых отправлений вроде письма или открытки, но в зависимости от используемого способа доставки, посылка может и не отслеживаться.

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

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

1.1 Обзор официальных трекингов некоторых стран


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


.1.1 Отслеживание почтовых отправлений почты России

URL: russianpost.ru <#"253" src="doc_zip1.jpg" />

Рисунок 1 - Трекинг почты России


Отслеживание почтовых отправлений почты Сингапура

URL: singpost.com <#"justify">for Registered Article: RR672819092SG;

for SMS Mail: SP002828A900110090004;

for SmartPac: SM000000001SG.

Введенный номер посылки для отслеживания должен содержать не менее одной цифры и не более 20 цифр.отсутствует. Время ответа сервера колеблется от 2 до 5 секунд. Вывод информации пользователю предоставляется в виде таблицы.

почта интерактивный интерфейс пользователь


Рисунок 2 - Трекинг почты Сингапура


Отслеживание почтовых отправлений почты США

URL: tools.usps.com <http://tools.usps.com/go/TrackConfirmAction_input> - сервис почты США (рис. 3), обеспечивающий отслеживание почтовых отправлений типа:

certified Mail™ : 7000 0000 0000 0000 0000;

USPS Tracking™: 0300 0000 0000 0000 0000;

Signature Confirmation™: 2300 0000 0000 0000 0000;

express Mail®: EA 000 000 000 US;

express Mail International®: EC 000 000 000 US;

priority Mail International™: CP 000 000 000 US;

registered Mail™: RA 000 000 000 US;

global Express Guaranteed®: 82 000 000 00.отсутствует. Вывод информации пользователю предоставляется в виде таблицы.


Рисунок 3 - Трекинг почты США


Отслеживание почтовых отправлений Китая

URL: intmail.183.com.cn <#"179" src="doc_zip4.jpg" />

Рисунок 4 - Трекинг почты Китая


Отслеживание почтовых отправлений Беларуси

URL: search.belpost.by <#"justify">

Рисунок 5 - Трекинг почты Беларуси


Отслеживание почтовых отправлений Украины

URL: #"145" src="doc_zip6.jpg" />

Рисунок 6 - Трекинг почты Украины

Отслеживание почтовых отправлений Гонконга

URL: app3.hongkongpost.com/CGI/mt/enquiry.jsp <#"95" src="doc_zip7.jpg" />

Рисунок 7 - Трекинг почты Гонконга


.2 Обзор существующих систем отслеживания почтовых отправлений


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

MaxPostTracker - отслеживание посылок с автопилотом. В программе записаны адреса нескольких сайтов, с которых можно получать данные. Адреса разделены по суффиксам номеров трекинга: US - американский сайт, HK - Гонконг и т.п. Для сайта почты России суффиксом является *, то есть на него запрос будет идти в любом случае.

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

TrackChecker - отслеживание посылок еще удобнее, постоянно добавляются новые сервисы, исправляются ошибки. Основные возможности программы:

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

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

разнообразные настройки позволят настроить программу под себя: Период проверки, автозагрузка, уведомления, внешний вид списка посылок, настройки соединения, и многие другие опции;

хранение настроек программы и данных пользователя в формате xml рядом с исполняемым файлом программы;

проверка обновлений программы и автоматическое обновление описаний сервисов.

URL: Post-Tracker.ru <#"justify">Удобное добавление и хранение трек-кодов в личном кабинете;

автоматическая проверка трек-кода три раза в сутки с уведомлением по E-Mail и 8 раз в сутки с уведомлением по SMS;

сохранение истории прохождения треков;

возможность экспорта статуса треков на форумы и блоги.

URL: trackitonline.ru <#"justify">Регулярные выражения

Регулярные выражения (РВ) это, по существу, крошечный язык программирования. Используя его, указываются правила для множества возможных строк, которые надо проверить; это множество может содержать английские фразы, или адреса электронной почты, или TeX команды, или все что угодно. С помощью РВ можно задавать вопросы, такие как «Соответствует ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с этой строкой?». Можно также использовать регулярные выражения, чтобы изменить строку или разбить ее на части различными способами.

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

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

CAPTCHA

CAPTCHA (английская аббревиатура от «Completely Automated Public Turing test to tell Computers and Humans Apart» - полностью автоматизированный публичный тест Тьюринга для отделения людей от компьютеров) - торговая марка Университет Карнеги - Меллона, компьютерный тест, используемый для того чтобы определить, человек ли использует систему.

Термин появился в 2000 году. В наиболее распространённом варианте CAPTCHA от пользователя требуется ввести символы, изображённые, как правило, в искажённом виде на предлагаемом ему рисунке, иногда с добавлением шума или полупрозрачности. Реже применяются CAPTCHA, основанные на распознавании речи (в основном как альтернатива для людей с нарушениями зрения), либо на других вариантах задач искусственного интеллекта.чаще всего используется при необходимости предотвратить использование интернет-сервисов ботами, в частности, для предотвращения автоматической регистрации, скачивания файлов, массовых рассылок и т. п.

Чтобы получить полное представление о CAPTCHA, рассмотрим несколько примеров.

На рисунке 4 изображена CAPTCHA, находящаяся на трекинге почты России


Рисунок 8 - Образец CAPTCHA почты России

На рисунке 5 изображена CAPTCHA, которая находилась на трекинге почты Китая


Рисунок 9 - Образец CAPTCHA почты Китая


Существуют программы, распознающие конкретные реализации CAPTCHA, к примеру, PWNtcha.

Есть способ "распознавания", использующий человеческих ресурс и ресурс высокопосещаемых сайтов, например, сайтов порно-тематики.

Робот скачивает CAPTCHA с интернет-сервиса и показывает его пользователю порносайта, с просьбой ввести код, который он видит на картинке. Взамен пользователь получает доступ к ресурсу, а робот узнает код, изображенный на картинке ("метод леммингов").

Несмотря на уязвимости, это не означает, что любая CAPTCHA-защита априори бессмысленна. Тут наблюдается извечный принцип соревнования оружия и защиты (снаряда и брони) [2].

Результаты анализа сервисов отслеживания почтовых отправлений

Рассмотрев работу официальных трекингов, можно свести итоги в табличку (табл. 1).


Таблица 1 - Особенности трекингов почтовых отправлений

СтранаНаличие captchaОсобенности captchaВывод и сложность извлечения информацииВремя ответа сервераРоссия+1) Размер: 70х23 2) Наличие цветов: - черный - белый 3) Код состоит только из цифр 4) Изменение x и y координат цифр, а также их размера от 1 до 4 пикселейВыводится информация в виде довольно большой таблицы (10 столбцов). Для извлечения нужных данных придется составлять объемное регулярное выражениеОт 1 до 5 секСингапур--Выводит информацию в виде маленькой таблицы (4 столбца). С составлением регулярного выражения не должно возникнуть сложностей.От 2 до 5 секСША--Выводит информацию в виде таблицы (6 столбцов). Проблем с парсингом не должно возникнуть.От 2 до 6 сек, иногда сервер тупит, то есть не выводит никакой информации или показывает неполнуюКитай+1) Размер: 200х50 2) Наличие цветов: -чёрный -палитра от белого до серого 3) плавающее положение символов и изменение их размера 4) «мусор», который можно принять за символ 5) присутствует кривая, перечеркивающая символы 6) В центре есть эффект размытияВыводит информацию в виде таблицы (6 столбцов). Проблем с извлечением нужных данных не должно возникнуть.От 2 до 8 сек, сервер очень часто падает.Украина--Выводит информацию в виде одной длинной строки. Могут возникнуть проблемы с преобразованием этих данных в табличные.От 1 до 2 секБеларусь--Выводит информацию в виде таблицы с 2-мя столбцами(дата и событие). Может возникнуть затруднение с преобразованием полученной информации к общей таблицеОт 1 до 3 секГонконг--Выводит информацию в виде маленькой таблицы (5 столбцов). Для извлечения данных нужно будет составить несложное регулярное выражение.От 1 до 4 сек

Проанализировав работу существующих программ и онлайн серверов, можно сделать следующие выводы (табл. 2).


Таблица 2 - Особенности сервисов отслеживания почтовых отправлений

Название сервиса или программыНаличие собственной captchaЧастота обновленийОграниченияКол-во поддерживаемых сервисовКроссплатформенностьОпределение страны отправителяPost-Tracker.ru+Очень частые обновленияДля доступа к полному функционалу нужна регистрацияВ районе 27ОС Windows (XP/Vista/7),Linux, MacOS, iOSПроисходит автоматическиtrackitonline.ru+ОбновленияДля доступа к полномуБолее 200ОС WindowsАвтоопределениепроисходят несколько раз в месяцфункционалу нужна регистрация(XP/Vista/7),Linux, MacOS, iOSgdeposylka.ru-Обновления происходят несколько раз в месяцДля доступа к полному функционалу нужна регистрацияВ районе 16ОС Windows (XP/Vista/7),Linux, MacOS, iOSОпределяется автоматическиTrackChecker-Автоматическое обновление описаний сервисовОграничений не замеченоОтслеживания на более, чем 200 почтовых и курьерских сайтахПрограмма рассчитана на работу под ОС Windows.Определяется автоматическиMaxPostTracker-Автоматические периодические обновленияДля работы программы требуется Microsoft .Net Framework 3.5В программе записаны адреса нескольких сайтов, с которых можно получать данные.Программа рассчитана на работу под ОС Windows.Выбирает пользователь

По результатам вышеописанных исследований было решено сделать следующее:

Для отслеживания почтовых отправлений добавить страны: Россию, США, Сингапур, Китай, Украину, Беларусь, Гонконг;

распознавание CAPTCHA трекингов почты России и Китая;

автоматическое определение идентификатора посылки;

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

определение стран отправителя и получателя;

полученную информацию выводить в общую сводную таблицу;

сохранение полученной информации в удобочитаемый формат.

Выводы и постановка

Проведенное исследование сервисов показало, что для извлечения необходимой информации с сервера необходимо использовать регулярные выражения, также придется столкнуться с распознаванием образов, а именно CAPTCHA. Отслеживать информацию о посылке будем в странах России, Украины, Беларуси, Сингапура, США, Китая, Гонконга, как типичных представителях онлайн средств отслеживания почтовых отправлений.

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

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

Проведенный анализ позволил разработать более детально техническое задание на разработку ПС, приведенное в Приложении А.



2. АЛГОРИТМИЧЕСКОЕ КОНСТРУИРОВАНИЕ СИСТЕМЫ ЕДИНОГО ОТСЛЕЖИВАНИЯ ПОЧТОВЫХ ОТПРАВЛЕНИЙ


В данной главе будут рассмотрены алгоритмы, требуемые для реализации работы. Приведены алгоритмы распознавания CAPTCHA для почты России и Китая, отслеживания почтовых отправлений России, Сингапура, США, Украины, Беларуси, Гонконга и Китая.

Алгоритм распознавания первой CAPTCHA почты Китая

Сначала скачали 500 различных вариантов CAPTCHA (рис. 10).


Рисунок 10 - Образец первой CAPTCHA почты Китая


Провели анализ:

Размер картинки 200х50 пикселей;

присутствует палитра от белого до тёмно-серого и чёрный цвет;

есть кривая, перечеркивающая символы;

плавающее положение символов и изменение их размера;

«мусор», который можно принять за символ;

в центре эффект размытия символов.

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

Основываясь на том, что главные распознаваемые символы чёрного цвета, изображение было легко преобразовано в монохромное (рис. 11).


Рисунок 11 - Полученное монохромное изображение


Просмотрев немалое количество картинок, было замечено, что используются двадцать различных символов (2345678abcdefgmnpwxy), а также, что они не выходят за пределы меньшего прямоугольника, потому, подобрав его координаты, сделали обрезание изображения, тем самым избавились от немалого количества шумов и «мусора» (рис. 12).


Рисунок 12 - Изображение после обрезания


Далее предстояло по возможности убрать кривую, перечеркивающую текст. Для этих целей был выбран алгоритм преобразований Хафа [3]. По сравнению с генетическими алгоритмами, он является математически более строгим и детерминированным алгоритмом, в котором нет влияния случайного фактора. Кратко, смысл алгоритма заключается в том, что любая прямая на плоскости может быть задана двумя переменными - углом наклона и расстоянием от начала координат (theta, r). Эти переменные можно рассмотреть как признаки, они формируют своё собственное двумерное пространство. Так как прямая есть совокупность точек, и каждой из них соответствует своя пара признаков (theta, r), то в пространстве этих признаков мы будем иметь скопления точек (максимумы на пересечении) в пределах конечных окрестностей признаков, соответствующие точкам прямой на исходной плоскости(изображении). Реализация данного алгоритма была найдена в модуле OpenCV. Воспользовавшись ей, удалось удалить большую часть кривой линии (рис. 13).


Рисунок 13 - Изображение после применения преобразований Хафа


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


Рисунок 14 - Изображение после применения Dilate


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

Ясно, что делить надо по вертикали. Недолго думая, решили посчитать количество белых пикселей в каждом столбце изображения, для большей наглядности построили график, используя библиотеку matplotlib (рис. 15).


Рисунок 15 - График распределения точек в столбцах по вертикали


Если соотнести график с изображением, то можно заметить наличие 4-х локальных минимумов. Основываясь на этом, была проведена нарезка символов. Все полученные изображения после сегментации привели к единому размеру 22х22. (рис. 16).


Рисунок 16 - Полученные сегменты


Затем начали заниматься созданием и обучением нейросети. Для этих целей была найдена библиотека FANN. Из 500 изображений (по 5 символа на каждом) было получено около 1600 образцов приемлемого качества и содержания, использованных для обучения (рис 17).


Рисунок 17 - Образцы сегментов для символов «3» и «4»


На вход подавался массив из 22*22 = 484 пикселей (точнее передаём 255, если пиксель значащий и 0, если фон), на выходе получаем массив из 20, каждый элемент которого отражает принадлежность входного массива к тому или иному символу. Таким образом, входной слой нашей нейросети состоит из 484 нейронов, выходной из 20. Полученной выборки для успешного обучения хватило. Далее было проведено тестирование для получения приблизительного процента распознавания данной CAPTCHA (рис. 18).


Рисунок 18 - Результат тестирования


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

Входные данные: картинка размером 200х50

Выходные данные: код с картинки

Шаг 1: Преобразуем входную картинку в монохромную.

Шаг 2: Делаем обрезку изображения.

Шаг 3: Удаляем большую часть кривой линии с помощью преобразований Хафа.

Шаг 4: Восстанавливаем часть утраченной полезной информации с помощью морфологических алгоритмов, а именно Dilate

Шаг 5: Производим нарезку символов.

Шаг 6: Приводим все сегменты к одинаковому размеру 22х22 пикселей

Шаг 7: Подаем каждый сегмент на анализ обученной нейронной сети

Алгоритм распознавания второй CAPTHA почты Китая

Распознав первую CAPTCHA, радоваться пришлось недолго, через недельку китайцы решили её обновить. Приступили к распознаванию новой CAPTCHA, скачали 600 различных вариантов (рис. 19).


Рисунок 19 - Образец второй CAPTCHA почты Китая


Провели анализ:

Размер картинки 85х35 пикселей;

палитра от белого до тёмно-серого и чёрный цвет;

плавающее положение символов и изменение их размера;

постоянно меняется наклон символов;

различный эффект размытия всех символов

символы часто соприкасаются.

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


Рисунок 20 - Нераспознаваемый образец CAPTCHA


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

Основываясь на том, что главные распознаваемые символы чёрного цвета, преобразуем изображение в монохромное (рис. 21).


Рисунок 21 - Полученное монохромное изображение


Просмотрев немалое количество картинок, было замечено, что словарь используемых символов абсолютно не изменился (2345678abcdefgmnpwxy).

На рисунке 21 можно заметить, что картинка обрамлена белой рамочкой, избавимся от неё, обрезав изображение со всех сторон по 2 пикселя. (рис. 22).


Рисунок 22 - Изображение после обрезания


На рисунке 22 видно, что из-за присутствия размытия символов, часть нужной информации все-таки потерялась. Здесь нам на помощь придут опять морфологические алгоритмы. Воспользуемся снова Dilate - растягивание(операция расширения) (рис. 23).


Рисунок 23 - Изображение после применения Dilate


Получив изображение с приемлемым качеством информации, начали думать об разделении символов. Так как символы часто меняют наклон, и эффект размытия иногда сильный, будет довольно тяжело произвести хорошую сегментацию. Метод, которым мы пользовались для разделения символов в предыдущем варианте CAPTCHA проявил себя не очень хорошо. Прочитав статью «Распознавание некоторых современных CAPTCHA» [4], возникла идея применить поиск компонент связности. (рис. 24).


Рисунок 24 - Поиск компонентов связности


Нетрудно заметить, что некоторые символы оказались объединены в один компонент связности, в связи с чем надо их разделять. Здесь на помощь приходит тот факт, что на изображении всегда ровно 5 символов. Это позволяет с большой точностью вычислять, сколько символов находится в каждом найденном компоненте. Для объяснения принципа работы такого алгоритма придётся немного углубиться в матчасть. Обозначим количество найденных сегментов за n, а массив ширин всех сегментов за widths[n]. Будем считать, что если после вышеупомянутых этапов n > 5, изображение распознать не удалось. Рассмотрим все возможные разложения числа 5 на целые положительные слагаемые. Их немного - всего 16. Каждое такое разложение соответствует некоторой возможной расстановке символов по найденным компонентам связности. Логично предположить, что чем шире получившийся сегмент, тем больше символов он содержит. Из всех разложений пятёрки выберем только те, в которых количество слагаемых равно n. Поделим каждый элемент из widths на widths[0] - как бы нормализуем их. То же самое проделаем со всеми оставшимися разложениями - поделим каждое число в них на первое слагаемое. А теперь заметим, что получившиеся упорядоченные n-ки можно мыслить как точки в n-мерном пространстве. С учётом этого, находим ближайшее по Евклиду разложение пятёрки к нормализованному widths. Это и есть искомый результат (рис. 25).


Рисунок 25 - Разбиение на сегменты с помощью компонентов связности


Основываясь на этих данных, производим нарезку символов, приведя изображения к единому размеру 18х18. (рис. 26).


Рисунок 26 - Полученные сегменты


После получения сегментов начнём созданием и обучением нейросети. Из 600 изображений (по 5 символа на каждом) было получено около 2860 образцов приемлемого качества и содержания, использованных для обучения (рис 27).


Рисунок 27 - Образцы сегментов для символов «7» и «8»


На вход подавался массив из 18*18 = 324 пикселей (точнее передаём 255, если пиксель значащий и 0, если фон), на выходе получаем массив из 20, каждый элемент которого отражает принадлежность входного массива к тому или иному символу. Таким образом, входной слой нашей нейросети состоит из 324 нейронов, выходной из 20. Полученной выборки для успешного обучения хватило. Далее было проведено тестирование для получения приблизительного процента распознавания новой CAPTCHA (рис. 28).

Рисунок 28 - Результат тестирования


Из результатов тестирования было замечено, что на распознавание одной картинки уходит в среднем 0.1 секунды, что получается в 3 раза быстрее предыдущей, также приблизительный процент распознавания составил 53%.

Входные данные: картинка размером 85х35

Выходные данные: код с картинки

Шаг 1: Преобразуем входную картинку в монохромную.

Шаг 2: Убираем рамку, обрезая изображение.

Шаг 4: Восстанавливаем часть утраченной полезной информации с помощью морфологических алгоритмов, а именно Dilate

Шаг 5: Производим сегментацию изображения.

Шаг 6: Приводим все сегменты к одинаковому размеру 18х18 пикселей

Шаг 7: Подаем каждый сегмент на анализ обученной нейронной сети

Алгоритм распознавания CAPTHA почты России

Для начала скачали 100 разных вариантов CAPTCHA (рис. 29).


Рисунок 29 - Образец CAPTCHA почты России


Начали анализировать:

Размер картинки 70х23 пикселей;

присутствует всего два цвета: черный и белый;

меняются координаты х и y цифр, а также их размер от 1 до 4 пикселей.

Прочитав статью «Декодирование капчи на Python» [5], было решено обходить картинку в поисках черного цвета, так как именно он составлял контур цифр на картинке. Результат обхода был записан в двумерный массив: если встретили черный пиксель, то заносим в массив единицу, иначе ноль. Чтоб проверить, что сделали всё правильно, возникла идея нарисовать таблицу 70х23 и закрасить ячейки на основании заполненного нами массива (рис. 30).


Рисунок 30 - Табличное представление CAPTHA почты России


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

Входные данные: картинка размером 70х23

Выходные данные: код с картинки

Шаг 1: Считываем картинку в двумерный массив, просматривая пиксели:

если пиксель белого цвета, то заносим в массив - 0, иначе 1.

Шаг 2: Для элементов в массиве, равных 1, делаем проверку по маске (словарь опорных точек) на совпадение из возможных цифр:

если совпадает, то переходим к Шагу 3, иначе на Шаг 5.

Шаг 3: Возвращаем возможную цифру и координату х, создавая словарь, где ключ - координата х, а значение по нему - предполагаемая цифра.

Шаг 4: Сортируем по ключу и выводим значения словаря, тем самым получаем код с картинки.

Шаг 5: возвращаем символ «*».

Алгоритм отслеживания почтовых отправлений России

Заходим на сайт официального трекинга России URL.

В браузере находим веб - консоль. В Firefox она находится: инструменты -> веб-разработка -> веб -консоль ( Ctrl +Shift + K). Ставим галочку «сохранять в лог содержимое запроса и ответа». Далее на сайте вводим почтовый идентификатор, жмём кнопку «найти», находим в веб-консоли post запрос и смотрим «отправленные данные формы», там находятся нужные параметры для правильного запроса. Также можно посмотреть исходный код страницы и найти их в <input name= >

Входные данные: почтовый идентификатор

Выходные данные: информация о посылке

Шаг 1: Производим get запрос на: #"justify">Шаг 2: Проверяем тело html ответа:

Если количество символов ответа < 500 и «onload» встретилось хоть один раз, тогда переходим на Шаг 3, иначе на Шаг 5.

Шаг 3: Составляем регулярное выражение, которое нам поможет извлечь из тела ответа значение key:


"<input id=key name=key value=(.*?)/>"


Шаг 4: Производим post запрос: с параметром: key = значение, которое получили с помощью регулярки, и заголовком: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0').

Шаг 5: Составляем регулярное выражение, чтоб получить из тела html ответа id CAPTCHA, это поможет нам скачать картинку:


"id='CaptchaId' value='(.*?)'>".

Шаг 6: Скачиваем картинку в текущий каталог, её размер: 70х23 .

Шаг 7: Приступаем к распознаванию CAPTCHA (Алгоритм распознавания CAPTCHA почты России).

Шаг 8: Формируем параметры post запроса:

BarCode = почтовый идентификатор;

searchsign = 1;

CaptchaId = id CAPTCHA, полученное ранее;

InputedCaptchaCode = распознанный код с картинки.

Шаг 2: Производим запрос на открытие:

Шаг 3: Добавляем заголовок: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0')

Шаг 4: Делаем post запрос уже с добавленными заголовком и параметрами.

Шаг 5: Получаем тело ответа в виде html кода.

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

открываем html код тела ответа;

анализируем его;

находим участок кода, который отвечает за вывод нужной нам информации, на основании его составляем регулярное выражение:

"<tr align=.*?>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?

<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?

<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?

<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>".


Шаг 7: Находим в теле ответа все подстроки совпадений с регулярным выражением и возвращаем их в виде списка.

Шаг 8: В цикле перебираем список и выводим информацию в виде таблицы.

Алгоритм отслеживания почтовых отправлений Сингапура

Заходим на сайт официального трекинга Сингапура URL.

В браузере находим веб - консоль. В Firefox она находится: инструменты -> веб-разработка -> веб -консоль ( Ctrl +Shift + K). Ставим галочку «сохранять в лог содержимое запроса и ответа». Далее на сайте вводим Track, жмём кнопку «Track Item >», находим в веб-консоли post запрос и смотрим «отправленные данные формы», там находятся нужные параметры для правильного запроса. Также можно посмотреть исходный код страницы и найти их в <input name= >.

Входные данные: почтовый идентификатор

Выходные данные: информация о посылке

Шаг 1: Формируем параметры post запроса:

track_items = почтовый идентификатор;

task = tracking;

controller = tracking;

option = com_tablink.

Шаг 2: Производим запрос на открытие:

Шаг 3: Добавляем заголовок: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0').

Шаг 4: Делаем post запрос уже с добавленными заголовком и параметрами.

Шаг 5: Получаем тело ответа в виде html кода.

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

открываем html код тела ответа;

анализируем его;

находим участок кода, который отвечает за вывод нужной нам информации, на основании его составляем регулярное выражение:


"<tr align=.*? bordercolor=.*?>.*?<td>


Шаг 7: Находим в теле ответа все подстроки совпадений с регулярным выражением и возвращаем их в виде списка.

Шаг 8: В цикле перебираем список и выводим информацию в виде таблицы.

Алгоритм отслеживания почтовых отправлений США

Заходим на сайт официального трекинга США URL: <http://tools.usps.com/go/TrackConfirmAction.action>

В браузере находим веб - консоль. В Firefox она находится: инструменты -> веб-разработка -> веб -консоль ( Ctrl +Shift + K). Ставим галочку «сохранять в лог содержимое запроса и ответа». Далее на сайте вводим Track, жмём кнопку «Find», находим в веб-консоли post запрос и смотрим «отправленные данные формы», там находятся нужные параметры для правильного запроса. Также можно посмотреть исходный код страницы и найти их в <input name= >.

Входные данные: почтовый идентификатор

Выходные данные: информация о посылке

Шаг 1: Формируем параметры post запроса:= почтовый идентификатор.

Шаг 2: Производим запрос на открытие: http://tools.usps.com/go/TrackConfirmAction.action

Шаг 3: Добавляем заголовок: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0').

Шаг 4: Делаем post запрос уже с добавленными заголовком и параметрами.

Шаг 5: Получаем тело ответа в виде html кода.

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

открываем html код тела ответа;

анализируем его;

находим участок кода, который отвечает за вывод нужной нам информации, на основании его составляем регулярное выражение:


"<div>


Шаг 7: Находим в теле ответа все подстроки совпадений с регулярным выражением и возвращаем их в виде списка.

Шаг 8: В цикле перебираем список и выводим информацию в виде таблицы.

Алгоритм отслеживания почтовых отправлений Украины

Заходим на сайт официального трекинга Украины URL.

В браузере находим веб - консоль. В Firefox она находится: инструменты -> веб-разработка -> веб -консоль ( Ctrl +Shift + K). Ставим галочку «сохранять в лог содержимое запроса и ответа».

Далее на сайте вводим Track, жмём кнопку «Find», находим в веб-консоли post запрос и смотрим «отправленные данные формы», там находятся нужные параметры для правильного запроса.

Также можно посмотреть исходный код страницы и найти их в <input name= >.

Входные данные: почтовый идентификатор

Выходные данные: информация о посылке

Шаг 1: Формируем параметры post запроса:= почтовый идентификатор;= en.

Шаг 2: Добавляем заголовок: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0').

Шаг 3: Делаем post запрос уже с добавленными заголовком и параметрами на #"justify">Шаг 4: Получаем тело ответа в виде html кода.

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

открываем html код тела ответа;

анализируем его;

находим участок кода, который отвечает за вывод нужной нам информации, на основании его составляем регулярное выражение:

" The item number "+ItemUA+"(.*?) on ([\d]+/[\d]+/[\d]+).*?<u>(.*?)</u>".

Шаг 6: Находим в теле ответа все подстроки совпадений с регулярным выражением и возвращаем их в виде списка.

Шаг 7: В цикле перебираем список и выводим информацию в виде таблицы.

Алгоритм отслеживания почтовых отправлений Беларуси

Заходим на сайт официального трекинга Беларуси URL: search.belpost.by <#"justify">Алгоритм отслеживания почтовых отправлений Гонконга

Заходим на сайт официального трекинга Гонконга URL

В браузере находим веб - консоль. В Firefox она находится: инструменты -> веб-разработка -> веб -консоль ( Ctrl +Shift + K). Ставим галочку «сохранять в лог содержимое запроса и ответа». Далее на сайте вводим Track, жмём кнопку «Find», находим в веб-консоли post запрос и смотрим «отправленные данные формы», там находятся нужные параметры для правильного запроса. Также можно посмотреть исходный код страницы и найти их в <input name= >.

Входные данные: почтовый идентификатор

Выходные данные: информация о посылке

Шаг 1: Формируем параметры post запроса:= почтовый идентификатор;= Enter.

Шаг 2: Добавляем заголовок: ('User-Agent', 'Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0').

Шаг 3: Делаем post запрос уже с добавленными заголовком и параметрами на #"justify">Шаг 4: Получаем тело ответа в виде html кода.

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

открываем html код тела ответа;

анализируем его;

находим участок кода, который отвечает за вывод нужной нам информации, на основании его составляем регулярное выражение:

"Destination</span> - (.*?)</p>\r\n.*?\) (.*?) on (.*?)<br />.*?<br />"

Шаг 6: Находим в теле ответа все подстроки совпадений с регулярным выражением и возвращаем их в виде списка.

Шаг 7: В цикле перебираем список и выводим информацию в виде таблицы.

Алгоритм отслеживания почтовых отправлений Китая

Заходим на сайт официального трекинга Китая URL: app3.hongkongpost.com/CGI/mt/enquiry.jsp <#"justify">Выводы


После тщательного изучения предметной области и анализа существующих серверов отслеживания почты были разработаны алгоритмы трекингов почтовых отправлений для стран: России, Украины, Беларуси, Сингапура, США, Китая и Гонконга и алгоритмы распознавания CAPTCHA для почты России и Китая.

. ПРОГРАММНОЕ КОНСТРУИРОВАНИЕ


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

Обоснование выбора языка программирования

Python (англ. python - питон, произносится [?pa?????n] - па?йтон, также широко используется русскоязычное произношение пито?н) - высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода. Синтаксис ядра Python минималистичен, а стандартная библиотека включает большой объём полезных функций [6].

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

Высокая скорость разработки по сравнению с компилирующими или строго типизированными языками, такими как C, C++ и Java, Python во много раз повышает производительность труда разработчика. Объем программного кода на языке Python обычно составляет треть или даже пятую часть эквивалентного программного кода на языке C++ или Java. Это означает меньший объем ввода с клавиатуры, меньшее количество времени на отладку и меньший объем трудозатрат на сопровождение. Кроме того, программы на языке Python запускаются сразу же, минуя длительные этапы компиляции и связывания, необходимые в некоторых других языках программирования, что еще больше увеличивает производительность труда программиста.

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

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

Технология построения интерактивного интерфейса пользователя

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

В отличие от традиционного "исполнимого" программного обеспечения, которое выполняется в определенном месте на настольном компьютере, веб- -приложение выполняется на централизованном сервере и предоставляет его возможности через Интернет, обычно через протокол HTTP и обычный веб-браузер. Веб-приложения все более и более популярны, потому что они могут быть легко доступны. Нужно просто ввести нужный URL в браузер и приложение доступно одновременно целому ряду пользователей. Некоторые веб-приложения обеспечивают электронную коммерцию (eBay), некоторые служат для развлечений (как например Yahoo! Games), и другие, как например Salesforce.com, управляют информацией предприятия.

Веб-приложения используют интерактивный интерфейс пользователя. Для WWW(World Wide Web), интерактивный интерфейс можно определить как последовательность HTML-документов. Можно также условно классифицировать принципы построения интерфейса по типу формирования HTML-документа: статический и динамический. В первом случае источником интерфейса является HTML-документ, созданный в каком-либо текстовом или HTML-ориентированном редакторе. Следовательно, данный документ остается неизменным в течение использования. Во втором случае источником интерфейса является HTML-документ сгенерированный cgi-модулем. Следовательно, появляется некоторая гибкость в видоизменении интерфейса во время использования.отлично подходит для создания динамического содержимого веб-страниц. Самый простой путь создания веб-приложения на Python - использовать Common Gateway Interface.

Common Gateway Interface(CGI)

Common Gateway Interface (CGI) является стандартом интерфейса внешней прикладной программы с WWW сервером и мощным средством динамической генерации веб-страниц.

Задача построения интерфейса делится на две части (рис.31):

клиентская часть;

серверная часть.


Рисунок 31 - Части интерактивного интерфейса


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

Серверная часть состоит из исполняемого модуля, решающего основные задачи обработки данных поступающих от клиентской части, формирования ответа в формате HTML, и т.д. Такой модуль называется CGI скриптом [8].

CGI скрипты вызываются веб-сервером, а результат их работы отправляется на клиентский браузер.

Структура программной реализации

Структуру программной реализации можно подразделить на несколько модулей:

answer.py (исходный код модуля представлен в приложении Б (П.Б.1));

posts.py (исходный код модуля представлен в приложении Б (П.Б.2));

captcha.py (исходный код модуля представлен в приложении Б (П.Б.3));

brain.py (исходный код модуля представлен в приложении Б (П.Б.4));

savetrack.py (исходный код модуля представлен в приложении Б (П.Б.5));

dictcountry.py (исходный код модуля представлен в приложении Б (П.Б.6)).

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

Рассмотрим взаимодействие модулей поподробнее (рис. 32).


Рисунок 32 - Cхема взаимодействия модулей

.py отвечает за распознавание почтового идентификатора и вызова соответствующих функций из файла скрипта posts.py, реализующих алгоритмы отслеживания почтовых отправлений России, США и Сингапура. Если был введен внутренний идентификатор, то вызывается функция соответствующей страны, а если международный, то вызываются две функции: для страны отправителя и страны получателя посылки. Где возможно происходит автоматическое определение страны получателя, иначе делается предположение, что страной получателя является Россия. После получения данных с трекингов почтовых служб вызываются функции из savetrack.py, реализующие сохранение информации в *.xls и *.odt.

В captcha.py содержаться основные функции для распознавания капчей почтовых служб.

В brain.py находится словарь опорных точек для распознавания CAPTCHA почты России..py содержит словарь с информацией о возможных странах почтовых отправлений.

После списков словарь является самым гибким встроенным типом. Если список - это упорядоченная коллекция, то словарь - неупорядоченная. Основные особенности словарей:

Доступ осуществляется по ключу, а не по индексу. По аналогии со списком, в словаре можно получить доступ к элементам в цикле по ключам;

значения словаря хранятся в неотсортированном порядке, более того, ключи могут храниться не в том порядке, в котором они добавляются;

по аналогии со списками, словарь может хранить вложенные словари. Словарь может хранить в качестве значений объекты любого типа (heterogeneous). Ключ в словаре - immutable тип, может быть строкой, целым числом, float либо кортежем, состоящим из указанных типов;

словари реализованы как хеш-таблицы с быстрым доступом;

словари, так же как и списки, хранят ссылки на объекты, а не сами объекты.

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

Для помощи в реализации поставленных задач использовались следующие модули python :

urllib,urllib2 - с помощью них получали исходной код веб-страниц, скачивали картинку;

re - предоставляет интерфейс для регулярных выражений, что позволяло компилировать регулярные выражения в объекты, а затем выполнять с ними сопоставления;

сgi - использовали для получения и разбора параметров отравленных cgi- скрипту (answer.py).

Так же хочется отметить использование следующих библиотек:Imaging Library (сокращенно PIL) - библиотека языка Python, предназначенная для работы с растровой графикой.

Возможности библиотеки PIL:

Поддержка бинарных, полутоновых, индексированных, полноцветных и CMYK изображений;

поддержка форматов BMP, EPS, GIF, JPEG, PDF, PNG, PNM, TIFF и некоторых других на чтение и запись;

конвертирование изображений из одного формата в другой;

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

С помощью PIL происходил поиск черного цвета по картинке и заполнение двумерного массива.Source Computer Vision Library (сокрашенно OpenCV) - библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом.

Возможности библиотеки OpenCV:

opencv_core - основная функциональность. Включает в себя базовые структуры, вычисления(математические функции, генераторы случайных чисел) и линейную алгебру, DFT, DCT, ввод/вывод для XML и YAWL и т.д.;

opencv_imgproc - обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.);

opencv_highgui - простой UI, ввод/вывод изображений и видео;

opencv_ml - модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.);

opencv_features2d - распознавание и описание плоских примитивов;

opencv_video - анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона);

opencv_objdetect - обнаружение объектов на изображении (нахождение лиц с помощью алгоритма Виолы-Джонса и т. д.);

opencv_calib3d - калибровка камеры, поиск стерео-соответствия и элементы обработки трехмерных данных;

opencv_flann - библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV;

opencv_contrib - сопутствующий код, ещё не готовый для применения;

opencv_legacy - устаревший код, сохраненный ради обратной совместимости;

opencv_gpu - ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidia.

Fast Artificial Neural Network Library(сокращенно FANN) - кроссплатформенная библиотека, которая предназначена для построения нейронных сетей и их обучения.

Возможности и особенности библиотеки FANN:

Построение многослойных искусственных нейронных сетей;

очень быстрая;

простота в использовании (создать, обучить и запустить сеть - всего три вызова функции);

открытый исходный код.- библиотека для создания и заполнения Exсel файла- библиотека для создания и заполнения файла формата OpenDocument.

Действительно, Python отлично подошёл для реализации поставленной задачи [9]. Именно благодаря гибкости языка получилось добиться высокой производительности.

Описание модулей взаимодействия с пользователем

Структуру созданного интерфейса можно подразделить на несколько модулей:

В index.html реализован интерактивный интерфейс, который видит пользователь, попадая на страничку разработанного программного средства (рис. 33). Эта страничка генерируется динамически в зависимости от сделанных действий пользователем. Изначально там присутствует форма для отслеживания посылки по почтовому идентификатору, форма авторизации пользователя, раздел новостей и информация о поддерживаемых странах.


Рисунок 33 - Интерфейс ПО трекинга почтовых отправлений


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

В formmytracks.php содержится форма для вывода списка трек-кодов пользователя.

fromreg.php находится форма регистрации, которая появляется на главной странице после нажатия на кнопку «Зарегистрироваться».

В registration.php происходит обработка данных, отправленных с формы регистрации, после проверки корректности введенной информации, она добавляется в базу данных. Для этих целей использовалась бд - Sqlite.

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

С помощью logout.php происходит выход пользователя из системы.

С помощью addtrack.php происходит добавление нового трек-кода в список пользователя.

С помощью deltrack.php происходит удаление трек-кода из списка пользователя.

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


Выводы


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



4. ИССЛЕДОВАНИЕ РАБОТОСПОСОБНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

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

Тестирование разработанного программного средства происходило на сервере с конфигурацией:

system: Linux arch 3.9.4-1-ARCH;

apache version: Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/1.0.1e DAV/2 PHP/5.4.15;

python version: Python 2.7.

Цель проведения экспериментов

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

Объект испытания: «Программное обеспечение трекинга почтового отправления».

В программе были реализованы следующие функции:

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

Распознавание почтового идентификатора

Цель: проверить как распознается введенный почтовый идентификатор.

Исходные данные: почтовый идентификатор (трек-код).

Этапы тестирования:

Зашли на страничку разработанного программного средства;

в поле ввода почтового идентификатора ввели 39400939691447. На рисунке 34 можно заметить, что он удачно распознался. Это оказался внутренний идентификатор почты России;


Рисунок 34 - Распознавание почтового идентификатора 39400939691447


в поле ввода почтового идентификатора ввели RB348692944US. На рисунке 35 можно заметить, что он удачно распознался. Это оказался международный идентификатор США - Россия;


Рисунок 35 - Распознавание почтового идентификатора RB348692944US


в поле ввода почтового идентификатора ввели 123456789CN. На рисунке 36 можно заметить, что не удалось распознать почтовый идентификатор, и вывелось сообщение об ошибке.


Рисунок 36 - Распознавание почтового идентификатора 123456789CN


Определение стран отправителя и назначения

Цель: проверить, что происходит определение страны получателя и страны назначения введенного почтового идентификатора.

Исходные данные: почтовый идентификатор (трек-код).

Этапы тестирования:

Зашли на страничку разработанного программного средства;

в поле ввода почтового идентификатора ввели RC092620095HK. На рисунке 37 можно заметить, что страной отправителем является Гонконг, а страной получателем - Россия;


Рисунок 37 - Определение стран получателя и отправителя


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


Рисунок 38 - Определение стран получателя и отправителя


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


Рисунок 39 - Определение стран получателя и отправителя


Распознавание CAPTCHA трекингов почты России и Китая

Цель: проверить, что происходило распознавание CAPTCHA трекингов почты России и Китая.

Исходные данные: почтовый идентификатор (трек-код).

Этапы тестирования:

Зашли на страничку разработанного программного средства;

в поле ввода почтового идентификатора ввели RA159605574CN. На рисунке 40 можно заметить, что введенный нами трек-код являлся международным (Китай - Россия), была получена информация с трекингов почты России и Китая, а это подтверждает удачное распознавание CAPTCHA с обоих серверов.


Рисунок 40 - Распознавание CAPTCHA трекингов почты России и Китая


Получение данных с серверов почтовых служб и вывод в общую сводную таблицу

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

Исходные данные: почтовый идентификатор (трек-код).

Этапы тестирования:

Зашли на страничку разработанного программного средства;

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

в поле ввода почтового идентификатора ввели RF117520294SG. На рисунке 41 можно увидеть, что начался процесс получения информации, об это нам говорит слово «Загрузка...», также стоит учесть, что данные выводятся без перезагрузки страницы. На рисунке 42 данные были получены, видно, что введенный нами трек-код являлся международным (Сингапур - Россия), так как на сервере почтовой службы Сингапура возникли проблемы, нам выдалось сообщение об ошибке получения данных с трекинга этой страны. Предполагаемой страной получателем была выбрана Россия, данные с трекинга этой страны были успешно получены и выведены в общую сводную табличку;


Рисунок 41 - Ожидание получения информации о посылке


Рисунок 42 - Вывод информации в общую таблицу ( RF117520294SG)


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


Рисунок 43 - Вывод информации в общую таблицу ( RA323198715UA)


Экспорт полученной информации в форматы *.xls и *.ods

Цель: проверить, что есть возможность сохранения полученной информации с серверов почтовых служб в форматы *.xls и *.ods.

Исходные данные: полученная информация с серверов почтовых служб.

Этапы тестирования:

Зашли на страничку разработанного программного средства;

в поле ввода почтового идентификатора ввели RR806141533BY. На рисунке 44 можно заметить, что введенный нами трек-код являлся международным (Беларусь - Россия), была успешна получена информация, выведена в общую табличку, а ниже есть ссылки для сохранения в требуемые форматы;


Рисунок 44 - экспорт полученной информации в форматы *.xls и *.ods (RR806141533BY)

на рисунке 45 видно, что, после нажатия на ссылку «Сохранить в *.xls», появилось окошко с возможность сохранения данного файла к себе на компьютер или попыткой его сразу открыть, сохранив во временном каталоге. А на рисунке 46 аналогичное окошко, которые появляется при нажатии на ссылку «Сохранить в *.ods». Если клик по данным ссылкам произошёл случайно, то в окошке присутствует кнопка «Отмена».


Рисунок 45 - Cохранение файла в формате *.xls (RR806141533BY)


Рисунок 46 - Cохранение файла в формате *.ods (RR806141533BY)


регистрация и авторизация пользователя

Цель: проверить, что есть возможность регистрации нового пользователя и его авторизации.

Исходные данные: уникальная информация, введенная пользователем.

Этапы тестирования:

Зашли на страничку разработанного программного средства;

справа в форме авторизации пользователя нажали на кнопочку «Зарегистрироваться», и перед нами в центре появилась форма регистрации (рис. 47);


Рисунок 47 - Форма регистрации пользователя


на рисунке 48 видно, что есть проверка корректности введенных данных, кнопка «Зарегистрироваться» не активна, пока всё не будет введено верно, также стоит отметить, что вывод информации об ошибке происходит без перезагрузки страницы, что очень удобно и хорошо;


Рисунок 48 - Проверка корректности вводимых данных в форме регистрации пользователя


на рисунке 49 видно, что все данные были введены правильно, это нам помогает заметить зелененький цвет рамки полей ввода, также стала доступна кнопка «Зарегистрироваться»;


Рисунок 49 - Правильный ввод всех данных в форме регистрации


на рисунке 50 видно, после ввода корректных данных и нажатия на кнопку «Зарегистрироваться», мы видим окошко, подтверждающее удачную регистрацию;

Рисунок 50 - Подтверждение успешной регистрации


далее пытаемся зайти в систему, используя форму, находящуюся слева. На рисунке 51 видно, что также имеется проверка ввода корректности данных;


Рисунок 51 - Проверка корректности вводимых данных в форме авторизации пользователя


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


Рисунок 52 - Удачный вход в систему


Добавление и удаление трек-кода в список пользователя

Цель: проверить, что после авторизации у пользователя появляется возможность создать свой список трек-кодов, то есть производить их добавление и удаление.

Исходные данные: почтовый идентификатор (трек-код) и комментарий к нему.

Этапы тестирования:

Зашли на страничку разработанного программного средства;

произвели вход в систему и нажали кнопочку «добавить»;

на рисунке 53 видно, что появилось окошко для добавления нового трек-кода в список пользователя, тут также есть проверка на корректность вводимых данных;


Рисунок 53 - Проверка корректности вводимых данных при добавлении нового трек-кода

после ввода корректных данных в форму добавления нового трек-кода и нажатия на кнопку «добавить», список трек-кодов пользователя пополняется, добавим в него два трек-кода. На рисунке 54 можно заметить, что в списке трек-кодов пользователя появились: 39400939691447 и RA193195812CN. Если навести указатель мышки на какой-нибудь номер трек-кода и нажать ЛКМ, то мы получим информацию о местонахождении данной посылки также без перезагрузки страницы, что очень удобно;


Рисунок 54 - Добавление новых трек-кодов в список пользователя

теперь нажмём на красный крестик рядом с ранее добавленным трек-кодом 39400939691447. После проведенных действий на рисунке 55 можно заметить, что трек-код 39400939691447 пропал из списка пользователя, и там остался RA193195812CN.


Рисунок 55 - Удаление трек-кода из списка пользователя


Анализ результатов экспериментов

За время проведения тестирования программы не было получено сообщений об неизвестных ошибках и непредвиденных ситуациях. Перечисленные далее функции реализованы в полном объёме:

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

Результатом подтверждения корректности проведённого эксперимента по проверке функционирования «Программного обеспечения трекинга почтовых отправлений» являются: акт внедрения, приведённый в приложение Е, акт сдачи-приёмки - приложение Ж.



5. БЕЗОПАСНОСТЬ И ЭКОЛОГИЧНОСТЬ


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

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

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

Данный раздел дипломного проекта посвящен рассмотрению следующих вопросов:

Анализу опасных и вредных факторов и мероприятий по улучшению условий труда;

экологичности проекта;

устойчивости к чрезвычайным ситуациям;

интегрированной оценки проекта по критериям безопасности и экологичности.


.1 Анализ опасных и вредных факторов и мероприятия по улучшению условий труда


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

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

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

Опасные и вредные производственные факторы, согласно ГОСТ 12.0.003-74, подразделяются по природе действия на следующие группы:

Физические;

химические;

биологические;

психофизиологические.

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

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

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

Психофизиологические факторы делятся на :

Физические перегрузки (статические, динамические);

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

В помещении на программиста могут негативно воздействовать следующие физические факторы:

Недостаточная освещенность рабочей зоны;

повышенный уровень шума на рабочем месте;

повышенный уровень ионизирующих излучений в рабочей зоне;

повышенная запыленность и загазованность воздуха рабочей зоны;

повышенная или пониженная температура воздуха рабочей зоны;

повышенная или пониженная влажность воздуха;

повышенная или пониженная подвижность воздуха;

повышенная или пониженная ионизация воздуха;

повышенное значение напряжения в электрической цепи, замыкание которой может произойти через тело человека;

повышенный уровень статического электричества;

повышенный уровень электромагнитных излучений;

повышенная напряженность электрического поля;

повышенная напряженность магнитного поля;

отсутствие или недостаток естественного света.

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

Биологические вредные производственные факторы в данном помещении отсутствуют.

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

Умственное напряжение;

нервно - эмоциональные перегрузки;

перенапряжение зрительного анализатора;

монотонность работы.

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

Защита от шума и вибрации

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

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

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


Таблица 3 - Предельные уровни звука, дБ, на рабочих местах

Категория напряженности трудаКатегория тяжести трудаI. ЛегкаяII. СредняяIII. ТяжелаяIV. Очень тяжелаяI. Мало напряженный80807575II. Умеренно напряженный70706565III. Напряженный6060--IV. Очень напряженный5050--

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

Вибрация- это колебание твёрдых тел воспринимаемое человеком как сотрясение. Часто вибрация сопровождается сильным шумом. Уровень вибрации в помещениях вычислительных центров может быть снижен путем установки оборудования на специальные виброизоляторы

Микроклимат

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

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


Таблица 4 - Параметры микроклимата для помещений с компьютерами

Период годаПараметр микроклиматаВеличинаХолодныйТемпература воздуха в помещении Относительная влажность Скорость движения воздуха22…24°С 40…60% до 0,1м/сТеплыйТемпература воздуха в помещении Относительная влажность Скорость движения воздуха23…25°С 40…60% 0,1…0,2м/с

Для поддержания необходимой температуры во время холодного и тёплого времени года рабочее помещение оборудовано:

Системой отопления: 1 радиаторная батарея;

Системой кондиционирования: 1 кондиционер, способный обеспечивать постоянный и равномерный нагрев или охлаждение воздуха;

Влажность воздуха при этом никак не контролируется. Поэтому в помещении следует установить очиститель-увлажнитель воздуха.

Объем помещений, в которых размещены работники вычислительных центров, не должен быть меньше 19,5м3/человека с учетом максимального числа одновременно работающих в смену. Нормы подачи свежего воздуха в помещения, где расположены компьютеры, не менее 20м3 на человека.

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

Электромагнитное и ионизирующее излучения

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

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

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

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

Максимальный уровень рентгеновского излучения на рабочем месте оператора компьютера обычно не превышает 10мкбэр/ч, а интенсивность ультрафиолетового и инфракрасного излучений от экрана монитора лежит в пределах 10…100мВт/м2.


Таблица 5 - Допустимые значения параметров неионизирующих электромагнитных излучений (в соответствии с СанПиН 2.2.2.542-96)

Наименование параметраДопустимые значенияНапряженность электрической составляющей электромагнитного поля на расстоянии 50см от поверхности видеомонитора10В/мНапряженность магнитной составляющей электромагнитного поля на расстоянии 50см от поверхности видеомонитора0,3А/мНапряженность электростатического поля не должна превышать: для взрослых пользователей для детей дошкольных учреждений и учащихся средних специальных и высших учебных заведений20кВ/м 15кВ/м

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

Эргономические требования к рабочему месту

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

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

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

Для комфортной работы стол должен удовлетворять следующим условиям:

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

нижняя часть стола должна быть сконструирована так, чтобы программист мог удобно сидеть, не был вынужден поджимать ноги;

поверхность стола должна обладать свойствами, исключающими появление бликов в поле зрения программиста;

конструкция стола должна предусматривать наличие выдвижных ящиков (не менее 3 для хранения документации, листингов, канцелярских принадлежностей);

высота рабочей поверхности рекомендуется в пределах 680-760мм;

высота поверхности, на которую устанавливается клавиатура, должна быть около 650мм.

Большое значение придается характеристикам рабочего кресла. Так, рекомендуемая высота сиденья над уровнем пола находится в пределах 420-550мм. Поверхность сиденья мягкая, передний край закругленный, а угол наклона спинки - регулируемый.

Необходимо предусматривать при проектировании возможность различного размещения документов: сбоку от видеотерминала, между монитором и клавиатурой и т.п. Кроме того, в случаях, когда видеотерминал имеет низкое качество изображения, например заметны мелькания, расстояние от глаз до экрана делают больше (около 700мм), чем расстояние от глаза до документа (300-450мм). Вообще при высоком качестве изображения на видеотерминале расстояние от глаз пользователя до экрана, документа и клавиатуры может быть равным. Клавиатуру следует располагать на поверхности стола на расстоянии 100-300 мм от края, обращенного к пользователю, или на специальной регулируемой по высоте рабочей поверхности, отделенной от основной столешницы.

Освещение

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

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

Существует три вида освещения - естественное, искусственное и совмещенное (естественное и искусственное вместе).

Согласно СанПиН 2.2.1/2.1.1.1278-03 «Гигиенические требования к естественному, искусственному и совмещенному освещению жилых и общественных зданий» в помещении, где находится рабочее место оператора ЭВМ используется смешанное освещение - сочетание естественного и искусственного освещения. Естественное освещение осуществляться через оконный проем, который ориентирован на восток и юг (желательна ориентация преимущественно на север и северо-восток).

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

По спектральному составу света они близки к дневному, естественному свету;

обладают более высоким КПД (в 1,5-2 раза выше, чем КПД ламп накаливания);

обладают повышенной светоотдачей (в 3-4 раза выше, чем у ламп накаливания);

более длительный срок службы.

Требования к освещенности в помещениях, где установлены компьютеры, следующие: при выполнении зрительных работ высокой точности общая освещенность должна составлять 300 лк, а комбинированная 750 лк; аналогичные требования при выполнении работ средней точности - 200 и 300 лк соответственно.

В помещениях, где находится компьютер, необходимо обеспечить следующие величины коэффициента отражения: для потолка: 60…70%, для стен: 40…50%, для пола: около 30%. Для других поверхностей и рабочей мебели: 30…40%.


.2 Экологичность проекта


В современном обществе резко возрастает роль промышленной экологии, призванной на основе оценки степени вреда, приносимого природе индустриализацией разрабатывать и совершенствовать инженерно - технические средства защиты окружающей среды. По мере развития промышленности, энергетики, средств транспорта антропогенное загрязнение окружающей среды возрастает. Состояние окружающей среды требует от создателей новых технологий и машин пристального внимания к вопросам экологии. Любое техническое решение должно приниматься не только с учетом технологических и экономических требований, но и экологических аспектов. Все оборудование применяемое при разработке и эксплуатации системы стандартизированы и сертифицированы Госстандартом России на допустимость побочных излучений. Вредных воздействий на окружающую среду система не оказывает. При разработке данного проекта, использовались средства вычислительной техники, удовлетворяющие стандарту Energy Star. Эта технология была разработана в начале 90-х годов в США и предусматривает ряд аппаратных нововведений в конструкцию периферийных и обслуживающих устройств ПЭВМ, предназначенных для снижения энергозатрат. Суть технологии весьма проста: при отсутствии воздействия на компьютер в течение заданного времени, некоторые его устройства отключаются, или переходят в так называемый ждущий режим, потребляя при этом энергии в несколько раз меньше, чем при их нормальной работе. При соблюдении всех мер техники безопасности и использовании рекомендаций по снижению воздействия вредных факторов, работа с ПЭВМ не оказывает вредного воздействия на организм человека. Таким образом, разработанное «программное обеспечение трекинга почтовых отправлений» может считаться экологически безопасным продуктом и его использование не окажет вредного воздействия ни на окружающую среду, ни на пользователей системы.


.3 Устойчивость к чрезвычайным ситуациям


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

Наиболее вероятным среди них для программиста является пожар. Особое внимание к пожарной безопасности является обоснованным, так как в случае пожара будет нанесен значительный материальный ущерб (даже если в помещении находится один компьютер), и возможна угроза жизни и здоровью людей. Источниками пожара при работе программиста с компьютером могут быть ЭВМ, электропроводка, действующие системы отопления, вентиляции и кондиционирования воздуха, бытовые приборы. В современных ЭВМ очень высокая плотность размещения элементов электронных схем. В непосредственной близости друг от друга располагаются соединительные провода, коммутационные кабели. При протекании по ним электрического тока выделяется значительное количество теплоты, что может привести к повышению температуры отдельных узлов до 80-100 °С. При этом возможно оплавление изоляции соединительных проводов, их оголение и, как следствие, короткое замыкание, которое сопровождается искрением, ведет к недопустимым перегрузкам элементов электронных схем. Последние, перегреваясь, сгорают с разбрызгиванием искр. Для отвода избыточной теплоты от ЭВМ служат системы вентиляции и кондиционирования воздуха.

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

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

Для тушения пожара внутри зданий используют огнетушители. Огнетушители предназначены для тушения пожаров в начальной стадии развития.

Огнетушитель углекислотный ОУ-5. Предназначен для тушения любых материалов, предметов и веществ, а также электроустановок, находящихся под напряжением до 1 000В, применяется для тушения ПЭВМ и оргтехники. При пожаре поднести огнетушитель как можно ближе к огню, направить раструб в очаг пожара, сорвать пломбу (выдернуть чеку), открыть вентиль, нажать на пусковой рычаг, направить струю выходящего газа на огонь. Во время работы раструб нельзя держать рукой, т. к. он имеет очень низкую температуру.

Огнетушитель порошковый ОП-5. Предназначен для тушения твердых, жидких, газообразных веществ и электроустановок, находящихся под напряжением до 1 000В, применяется для тушения ПЭВМ и оргтехники.

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

Огнетушители по виду огнетушащих средств подразделяют на жидкостные, углекислотные, химпенные, воздушно-пенные, хладоновые, порошковые и комбинированные.

В настоящий момент в помещении имеется два порошковых огнетушителя.

При обнаружении пожара следует немедленно сообщить об этом по телефону 01 и спокойно доложить:

Что горит, чему угрожает;

адрес объекта;

количество этажей в здании;

номера этажей, находящихся в очаге пожара;

есть ли опасность для людей;

назвать свою фамилию;

немедленно обесточить всю электротехнику в помещении;

обеспечить эвакуацию людей.

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

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

Интегрированная оценка проекта по критериям безопасности и экологичности

Меры безопасности при работе ПЭВМ:

Освещенность рабочего места в лаборатории при использовании люминесцентных ламп должна быть порядка 300 лк, при использовании ламп накаливания 200 лк;

правильное расположение дисплеев по отношению к окнам и осветительным приборам;

продолжительность работы с дисплеем без перерыва не более 1 часа, продолжительность перерыва не менее 15 минут;

нагрузка на работающего с клавиатурой не более 10-12 тысяч ударов (примерно 1700 слов) в час;

применение удобной мебели, рациональная рабочая поза;

расстояние от работающего дисплея не менее 70 см от своего и не менее 1,2 см от боковых и задних поверхностей соседних дисплеев;

применение современных дисплеев;

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

Расчет освещенности рабочего места сводится к выбору системы освещения, определению необходимого числа светильников, их типа и размещения. Исходя из этого, рассчитаем параметры искусственного освещения.

Расчет освещения производится для комнаты площадью 28 м2 , ширина которой 4м, длина - 7 м, высота - 2.5 м.

Размер помещения: А = 7, В = 4, Н = 2.5.

Потолок и стены светлые, коэффициенты отражения: потолок 70%, стен 50%, потолка 10%.

Напряжение осветительной установки: U = 220В.

Система освещения - общее равномерное освещение люминесцентными лампами ЛД с применением светильников типа ПВЛ.

. Разряд зрительной работы - V, Енорм = 300лк (нормированная минимальная освещённость).

. hр = 0.45м. (до освещаемой поверхности).

. hc = 0.15м. (от потолка до нижней части светильника).

. h = H-hр-hс= 2.5-0.45-0.15 = 1.9 м. (высота подвеса над рабочей областью).

. ? = 0.9. (коэф. использования светового потока светильника).= ?*h = 1.71 м. (расстояние между светильниками).= L/3 = 1.71/3=0.57 (расстояние от стен).


6. Na = A/L = 7/1.71 ? 4.= B/L = 4/1.71 ? 2.= Na*Nb = 4*2 = 8 (количество светильников).


. i = (A*B)/(h*(A+B)) = (7*4)/(1.71*(7+4))=1.5 (индекс, учитывает влияние формы помещения на ?).

8. ? (по таблице) = 51 (коэф. использования светового потока осветительной системы).

. Световой поток светильника


? = (Eн*S*Kз*Z*100)/(N*?) = 300*7*4*1.4*1.16*100/(8*51) = 3344 лм.

- площадь помещения; Kз - коэффициент запаса, учитывающий запыление светильников и снижение светоотдачи в процессе эксплуатации; Z - коэффициент неравномерности освещения.

. В светильнике ПВЛ размещают по 2 лампы ЛД, световой поток каждой лампы равен: 3344/2 = 1672лм.

. По таблице находим лампу ЛД на 30Вт, отличающуюся от расчётной величины светового потока менее чем на 10%, т.е. данная лампа соответствует требуемым условиям размещения.

. Определяем фактическую освещённость:


En = (?л*Nл* ?)/(Kз*S*Z*100) = (1640*16*51)/(1.4*7*4*1.16*100) = 294 лк.


. Электрическая мощность системы освещения


Ро = Pл*Nл*кn = 30*16*1.25=600Вт.

л - мощность лампы; Nл - количество ламп; кn - коэффициент учитывающий потери пускорегулирующей аппаратуры.

Вывод. Для общего равномерного освещения помещения площадью 28 м2 требуется 8 светильников ПВЛ, в каждом по 2 лампы ЛД, мощность лампы 30Вт. Общая мощность осветительной установки 600Вт. На рисунке 56 находится смеха размещения светильников в помещении.


Рисунок 56 - Схема расположения светильников


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

В качестве обеспечения устойчивости объекта в ЧС необходимо, чтобы каждый сотрудник (работник) независимо от занимаемой должности знал и строго выполнял правила пожарной безопасности, не допускать действий, которые могут привести к пожару. Помещения должны быть оборудованы средствами пожаротушения.


Выводы


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

На основе вышеперечисленного, дипломный проект отвечает требованиям безопасности и экологичности.



ЗАКЛЮЧЕНИЕ


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

В данной работе было выполнено: распознавание CAPTCHA для почты России, Китая; разработано средство для взаимодействия с официальными трекингами стран России, Украины, Беларуси, Сингапура, США, Китая, Гонконга; разработан модуль взаимодействия с пользователем.

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



СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


1.Регулярные выражения, пособие для новичков. [Электронный ресурс] - URL: <#"justify">ПРИЛОЖЕНИЕ А


ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО


П.А.1 Введение

Наименование программы: "ПО трекинга почтовых отправлений".

Область применения: Сфера обслуживания.

Объект внедрения: Предназначено к внедрению в рабочий процесс ООО "Зеленая планета"

П.А.2 Основания для разработки

Разработка ведется на основании документа «Учебный план для студентов ВУЗа», факультета «Информатика и вычислительная техника», обучающихся по специальности 010503 - «Математическое обеспечение и администрирование информационных систем», в соответствии с которым студенты, заканчивающие ВУЗ, должны предоставить к защите выпускную квалификационную работу, подтверждающую присвоение им квалификации «математик-программист». Предметным основанием является задание на дипломную работу.

П.А.3 Назначение разработки

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

Эксплуатационное назначение: данное программное средство предназначено для применения в составе серверного ПО web-серверов.

П.А.4 Требования к программе

П.А.4.1 Требования к функциональным характеристикам

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

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

П.А.4.2 Требования к надежности

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

организацией бесперебойного питания технических средств;

использованием лицензионного программного обеспечения.

Отказы программы возможны вследствие некорректных действий оператора при взаимодействии с операционной системой.

П.А.4.3 Условия эксплуатации

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

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

П.А.4.4 Требования к составу и параметрам технических средств

Требования к составу аппаратных средств компьютера-сервера :

процессор Intel Core i5 и выше;

16 Гб оперативной памяти;

клавиатура и мышь;

жесткий диск;

доступ к сети Интернет.

Требования к составу аппаратных средств компьютера-клиента :

процессор Intel Pentium 4 и выше;

1 Гб оперативной памяти;

клавиатура и мышь;

жесткий диск;

доступ к сети Интернет.

Требования к составу программных средств компьютера- сервера:

OC Windows (XP SP3, Vista, 7), Linux;

Apache 2.x.x;

Python 2.x;

Sqlite 3.

Требования к составу программных средств компьютера-клиента:

ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

интернет-браузер.

П.А.4.5 Требования к информационной и программной совместимости

Требования к исходным кодам и языкам программирования:

базовый язык программирования - python;

среда программирования - текстовой редактор Geany 1.22.

Требования к программным средствам: программа должна работать под управлением ОС Windows (XP/Vista/7), Linux, MacOS,iOS.

П.А.5 Требования к программной документации

Данное программное средство должно поставляться со следующей документацией:

Техническое задание ГОСТ 19.201-78 ЕСПД;

руководство системного программиста ГОСТ 19.503-79 ЕСПД;

руководство программиста 19.504-79 ЕСПД;

руководство оператора 19.505-79 ЕСПД.

П.А.6 Стадии и этапы разработки

Стадии и этапы разработки программного средства:

сформулирована постановка задачи (с 02.02.2013 по 5.02.2013);

проведено изучение предметной области (с 5.02.2013 по 10.04.2013);

разработка технического задания (с 10.04.2013 по 18.04.2013);

создание функциональной модели (с 19.04.2013 по 9.05.2013);

разработка интерфейса программы (с 10.05.2013 по 22.05.2013);

испытания программы (с 22.05.2013 по 27.05.2013);

согласование и утверждения технического задания (с 28.05.2013 по 1.06.2013);

разработка пояснительной записки к данному программному продукту (с 1.06.2013 по 10.06.2013).

П.А.7 Порядок контроля и приемки

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


Разработал

студент гр. ВМО - 51 « 18 » апреля 2013 год

Трофименко Ю.В. _________________



ПРИЛОЖЕНИЕ Б


РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА


П.Б.1 Общие сведения о программе

Областью применения данного программного продукта является сфера обслуживания. Программное средство предназначено к внедрению в рабочий процесс ООО «Зеленая планета».

Разработанное программное средство выполняет перечисленные ниже функции:

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

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

OC Windows (XP SP3, Vista, 7), Linux;

Apache 2.x.x;

Python 2.x.;

Sqlite 3.

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

ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

интернет-браузер.

П.Б.2 Структура программы

Программный комплекс состоит из следующих файлов:

answer.py - модуль, отвечающий за распознавание почтового идентификатора и вызов соответствующих функций;

posts.py - модуль, в котором содержаться функции отслеживания почтовых отправлений ;

captcha.py - модуль, содержащий основные функции для распознавания CAPTCHA;

brain.py - модуль, в котором находится словарь опорных точек для распознавания CAPTCHA почты России ;

savetrack.py - модуль с функциям сохранения в удобочитаемый формат, а именно в *.xls, *.ods;

dictcountry.py - модуль, содержащий словарь с информацией о возможных странах почтовых отправлений.

П.Б.3 Настройка программы

Для настройки программного средства необходимо провести следующие операции:

убедиться, что все ПО приведённое в П.Б.1 установлено и настроено в соответствии с поставляемой с ним документацией;

запустить интернет-бразуер и зайти на сайт, разработанного программного средства.

П.Б.4 Проверка программы

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

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

П.Б.5 Дополнительные возможности

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

вывод информации о почтовом отправлении без перезагрузки страницы

вывод сообщений о некорректном вводе данных без перезагрузки страницы



ПРИЛОЖЕНИЕ В


РУКОВОДСТВО ПРОГРАММИСТА


П.В.1 Общие сведения о программе

Областью применения данного программного продукта является сфера обслуживания. Программное средство предназначено к внедрению в рабочий процесс ООО «Зеленая планета».

Разработанное программное средство выполняет перечисленные ниже функции:

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

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

OC Windows (XP SP3, Vista, 7), Linux;

Apache 2.x.x;

Python 2.x.;

Sqlite 3.

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

ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

интернет-браузер.

П.В.2 Характеристика программы

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

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

П.В.3 Обращение к программе

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

П.В.4 Входные и выходные данные

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

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

П.В.5 Сообщения программисту

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


ПРИЛОЖЕНИЕ Г


РУКОВОДСТВО ОПЕРАТОРА


П.Г.1 Назначение программы

П.Г.1.1 Функциональное назначение

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

П.Г.1.2 Эксплуатационное назначение

Эксплуатационное назначение: данное программное средство предназначено для применения в составе серверного ПО web-серверов.

П.Г.1.3 Состав функций

Разработанное программное средство выполняет перечисленные ниже функции:

Распознавание почтового идентификатора;

определение стран отправителя и назначения;

распознавание CAPTCHA трекингов почты России и Китая;

получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

экспорт полученной информации в форматы *.xls и *.ods;

регистрация и авторизация пользователя;

добавление и удаление трек-кода в список пользователя.

П.Г.2 Условия выполнения программы

П.Г.2.1 Минимальный состав аппаратных средств

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

П.Г.2.2 Минимальный состав программных средств

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

OC Windows (XP SP3, Vista, 7), Linux;

Apache 2.x.x;

Python 2.x.;

Sqlite 3.

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

ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

интернет-браузер.

П.Г.2.3 Требования к персоналу

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

П.Г.3 Выполнение программы

Сначала пользователь должен убедиться, что все ПО приведённое в П.Г.2.2 установлено и настроено в соответствии с поставляемой с ним документацией. Затем запустить интернет - браузер и перейти на сайт разработанного программного средства. На рисунке П.Г.1 изображено, что увидит пользователь, зайдя на страничку.



Рисунок П.Г.1 - Интерфейс ПО трекинга почтовых отправлений


В поле ввода почтового идентификатора надо ввести свой трек-код и нажать кнопку «Найти», после чего начнётся процесс получения информации с серверов почтовых служб, об этом нам даст знать сообщение «Загрузка...» (рис. П.Г.2).


Рисунок П.Г.2 - Ожидание получения информации о интересующей посылке


Потом перед пользователем выведется желанная информация в общей сводной табличке, что очень удобно для восприятия (рис. П.Г.3).


Рисунок П.Г.3 - Вывод информации пользователю


На рисунке П.Г.3 также можно заметить возможность сохранения информации в удобочитаемый формат, для этого надо кликнуть ПКМ по одной из ссылок «Сохранить в *.xls» или «Сохранить *.ods».

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


Рисунок П.Г.4 - Список трек-кодов пользователя


П.Г.4 Сообщения оператору

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

Рассмотрим возможные сообщения:

Не удалось распознать почтовый идентификатор (рис. П.Г.5);


Рисунок П.Г.5 - Распознавание почтового идентификатора 123456789CN


на сервере почтовой службы еще нет информации о данной посылке(рис. П.Г.6);


Рисунок П.Г.6 - Попытка получить информацию о посылке с почтовым идентфикатором 39400939691448


Если сервер какой-либо почтовой службы временно перестал работать об этом будет оповещено пользователя(рис. П.Г.7);


Рисунок П.Г.7 - Сервер почты Сингапура временно не доступен

проверка корректности ввода данных при регистрации пользователя(рис. П.Г.8);


Рисунок П.Г.8 - Вывод сообщений о вводе некорректных данных


проверка корректности ввода данных при авторизации пользователя(рис. П.Г.9);


Рисунок П.Г.9 - Вывод сообщений о вводе некорректных данных


проверка ввода данных при добавлении нового трек-кода в список пользователя(рис. П.Г.10);


Рисунок П.Г.10 - Вывод сообщений о вводе некорректных данных

если пользователь не введет ничего и нажмёт «Найти»(рис. П.Г.11);


Рисунок П.Г.11 - Попытка поиска без ввода трек-кода



ПРИЛОЖЕНИЕ Д


АКТ ВНЕДРЕНИЯ


Акт внедрения результатов дипломной работы

«Программное обеспечение трекинга почтовых отправлений», разработанной студентом группы ВМО51

Трофименко Ю.В.

Мы, нижеподписавшиеся, составили настоящий акт о том, что разработанное студентом группы ВМО51 Трофименко Юрием Вадимовичем «Программное обеспечение трекинга почтовых отправлений» прошло испытания, в результате которых показало свою работоспособность и эффективность. После испытаний данная система была внедрена в рабочий процесс ООО "Зеленая планета".


Председатель комиссии:Должность ФИОЧлены комиссии:Должность ФИО Должность ФИО

«___» ___________ 2013г.



ПРИЛОЖЕНИЕ E


ИСХОДНЫЙ КОД МОДУЛЕЙ


П.E.1 Модуль answer.py


#!/usr/bin/python2

# -*- coding: utf8 -*-cgicgitb; cgitb.enable()dictcountry import countryposts import Russia,Usa,Singapore

"Content-Type: text/html" # Определение типа HTML

print # Пустая строка означает окончание передачи заголовков теперь выводим основной текст в формате HTML

print"<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN #"justify"><meta http-equiv=cache-control content=no-cache>""<meta http-equiv=pragma content=no-cache>"" <title>Traking</title>""</head>""<body>"

is_int(s)::(s)TrueValueError:False

switch(case,idpost):case=="RU":(idpost)case=="SG":(idpost)

print"<br><br>Предполагаемая страна получатель: Russia<br>"

Russia(idpost)case=="US":

Usa(idpost)"<br><br>Предполагаемая страна получатель: Russia<br>"

Russia(idpost):"пока не поддреживается!<br>"= cgi.FieldStorage()

if not form.has_key("id"): #А есть ли такие поля?"<H1>Ошибка!</H1>""Введите почтовый идентификатор!"

else:= form["id"].value.replace(" ","")(len(idpost)==13 and is_int(idpost)==False):

#print"Международный идентификатор!<br>""Почтовый международный идентификатор: "+idpost+"<br>""Страна отправитель: " + country[idpost[-2:13]](idpost[-2:13],idpost):"Почтовый внутренний идентификатор: "+idpost+"<br>"

if (len(idpost)==20 or len(idpost)==10) and is_int(idpost)==True:"Страна: USA<br>"(idpost)len(idpost)==14 and is_int(idpost)==True:"Страна: Russia<br>"(idpost)len(idpost)==21 and is_int(idpost)==False:"Страна: Singapore<br>"(idpost)

else:"Ошибка! Проверьте правильность введенного Вами почтового идентификатора!"

print"</body>""</html>"


П.E.2 Модуль posts.py


#!/usr/bin/python2

# -*- coding: UTF-8 -*-

dictcountry import countryurllib,urllib2,re,time,threading,socketcgitb; cgitb.enable()brain import maskaPIL import Imagecaptcha import *

.setdefaulttimeout(5)_path = "/srv/http/temp/"

################################ РОССИЯ ###################################search (x,y,colors):i in range(len(maska)/3):= '*'j in range(len(maska[i,'y'])):(x+maska[i,'x'][j]>69 or y+maska[i,'y'][j]>22):= '*'(colors[(x+(maska[i,'x'][j])),(y+maska[i,'y'][j])] == 1):= maska[i,'number']:= '*'(truenumber != '*'):int(truenumber),x

GetCaptchaCodeRussia()::= urllib2.urlopen("#"justify">#print CaptchaKey.URLopener().retrieve("#"justify">#print pix,"<br>"pix == (255, 255, 255, 255):[x,y] = 0:[x,y] = 1

captcha={}

# Определяем что написано на капче

for y in range(im.size[1]):x in range(im.size[0]):(color[x,y] == 1):= search(x,y,color)answer:[answer[1]] = answer[0]= ''.join([str(x[1]) for x in sorted(captcha.items(),key=lambda(x): x[0])])CaptchaKey,CaptchaCode

Russia(ItemRussia):= GetCaptchaCodeRussia()Captcha == False:False= {"User-Agent" : "Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"}= urllib.urlencode({'searchsign': 1,'BarCode': ItemRussia, 'CaptchaId': Captcha[0], 'InputedCaptchaCode': Captcha[1]}):= urllib2.Request('#"justify">if len(data)==0:"<p style=color:#FF0000>О данной посылке на почте России пока нет иформации, убедитесь в правильности введеного почтового идентификатора или попробуйте позже!</p>"

return True= []= 0track in data:.append([])"<tr align=center>""<td><img src=/images/country/ru.png width=20 height=20/></td>"[row].append("Russia")"<td>"+track[1]+"</td>"[row].append(track[1])track[0] != "Обработка":"<td align=left>"+track[0]+"</td>"[row].append(track[0]):"<td align=left>"+track[4]+"</td>"[row].append(track[4])"<td>"+track[3]+"</td>"[row].append(track[3])"<td>"+track[5]+"</td>"[row].append(track[5])"<td>"+track[6]+"</td>"[row].append(track[6])"</tr>"+=1infoRussia


################################# США ########################################Usa(ItemUSA):= urllib.urlencode({'tLabels': ItemUSA})= {"User-Agent" : "Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"}:= urllib2.Request('http://tools.usps.com/go/TrackConfirmAction.action', paramsUSA,headers)= urllib2.urlopen(req,paramsUSA).read()urllib2.HTTPError, error:"<p style=color:#FF0000>Сайт почты США временно не доступен! Попробуйте позднее.</p>"Falseurllib2.URLError, error:"<p style=color:#FF0000>Сайт почты США временно не доступен! Попробуйте позднее.</p>"False= re.compile("<div>

#~ r = re.compile("<div>

if len(data)==0:"<p style=color:#FF0000>О данной посылке на почте США пока нет иформации, убедитесь в правильности введеного почтового идентификатора или попробуйте позже!</p>"

return True= []= 0track in data:.append([])"<tr align=center>""<td><img src=/images/country/us.png width=20 height=20/></td>"[row].append("Usa")"<td>"+track[1]+"</td>"[row].append(track[1])"<td align=left>"+track[0]+"</td>"[row].append(track[0])"<td>"+track[2]+"</td>"[row].append(track[2])"<td>-</td>"[row].append("-")"<td>-</td>"[row].append("-")"</tr>"+=1infoUSA


П.E.3 Модуль captcha.py

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

cv import *os,time,capPIL import Imageoperator import itemgetterpyfann import libfann

timeit(f):timed(*args, **kw):= time.time()= f(*args, **kw)= time.time()'%r: %2.4f sec' % \

(f.__name__, te-ts)resulttimed

_file = "/srv/http/temp/ann/china.net"_file = "/srv/http/temp/ann/china.train"_dir = "/srv/http/temp/trainsegments/"_dir = "/srv/http/temp/segments/"

= "2345678abcdefgmnpwxy"= 18= 18

_input = segW*segH_output = len(charset)_neurons_hidden = num_input/3_error = 0.00001_iterations = 10000_between_reports = 20

connection_rate = 1.0_rate = 0.3


#создания файла для обучения нейронной сети

@timeitCreate_train_file(segments_dir,train_file,num_input,num_output):= os.listdir(segments_dir)= open(train_file, "w").write("%d %d %d\n" % (len(segments), num_input, num_output))name in segments:= Image.open(segments_dir + name).convert("P")x in range(image.size[0]):y in range(image.size[1]):.write("%d " % int(image.getpixel((x,y))/159.375 - 2)).write("\n")= charset.index(os.path.splitext(name)[0][0]).write("-1 " * n + "1" + " -1" * (num_output - n - 1) + "\n").close()"Samples: %d" % len(segments)"Input: %d" % num_input"Output: %d" % num_output

#процесс создания и обучения нейронной сети

ann = libfann.neural_net().create_sparse_array(connection_rate, (num_input, num_neurons_hidden, num_output)).set_learning_rate(learning_rate).set_activation_function_hidden(libfann.SIGMOID_SYMMETRIC_STEPWISE).set_activation_function_output(libfann.SIGMOID_SYMMETRIC_STEPWISE).train_on_file(train_file, max_iterations, iterations_between_reports, desired_error).save(ann_file)


#~ Create_train_file(segment_dir,train_file,num_input,num_output)


#использование обученной сети для распознавания сегментов капчи

#~ @timeitMagic(segments,ann_file,charset):= []= libfann.neural_net().create_from_file(ann_file)segment in segments:= []x in range(segment.size[0]):y in range(segment.size[1]):.append(int(segment.getpixel((x,y))/159.375 - 2))= ann.run(lst).append(charset[res.index(max(res))])"".join(answer)


#~ print Magic(segnow_dir,ann_file,charset)


#разделение на сегменты и распознавание

#~ @timeit

def segment(path):= Image.open(path).convert("P")= Image.new("P",image.size,0)x in range(image.size[0]):y in range(image.size[1]):image.getpixel((x,y)) == 0:.putpixel((x,y),255)= temp.crop((2,2,83,33))= CreateImageHeader(temp.size, IPL_DEPTH_8U, 1)(imgcv, temp.tostring())= CloneImage(imgcv)= CreateStructuringElementEx( 2, 2, 1, 1, CV_SHAPE_RECT )(imgcv, dilate,element,1)= CloneImage(dilate)= cap.findCCs(dilate, 0, lambda col: col <= 125, lambda comp: comp[0] <= 25)= cap.joinCCs(components, cap.rectsIntersectH)= cap.partsFromnSegs5(components)= cap.spltCCs(components, parts, projRadius=4, thresh=1)(segnow_dir+"comsz2.png",cap.drawComponents(temp, components))= map(lambda comp: comp[3], components)= []

#~ for i in range(len(segments)):segment in segments:= Image.fromstring("P", GetSize(segment), segment.tostring()).append(pi.resize((segW,segH)))Magic(pisegments,ann_file,charset)


#~ print segment("/home/invictus/Desktop/newCaptchaChina/2g65w.jpg")


#тестирование кол-ва распознаваемых каптча

@timeit

def Testing(path_examples):=0=0= os.listdir(path_examples)name in captchas:= segment(os.path.join(path_examples, name))"\nres: "+res+"\nreal: " + name[:-4]os.path.join(path_examples, name)(res == name[:-4]):+=1:+=1"----------------------""Goods: %d --> %f" % (goods, (goods*100/(bad+goods)))+"%""Bad: %d" % bad"All: %d" % (bad+goods)


П.E.4 Модуль brain.py


#!/usr/bin/python2

={}

[0,'number']='0'[0,'x']=5,6,7,8,7,8,7,8,6,5,2,1,-1,-1,-2,-2,-3,-2,-1,-2,4,1,4,1,4,1[0,'y']=0,1,2,3,5,7,10,12,13,15,15,14,14,12,12,10,8,5,3,2,4,4,11,11,7,7

[1,'number']='1'[1,'x']=3,6,6,6,6,6,8,8,8,5,2,-1,-1,-1,1,1,1,1,0,0[1,'y']=0,0,3,6,9,11,11,14,16,16,16,16,14,11,11,9,7,4,4,2

[2,'number']='1'[2,'x']=3,6,6,6,6,7,7,4,2,-1,-1,-1,1,1,1,1,0[2,'y']=0,0,3,6,10,10,14,14,14,14,12,10,10,8,6,3,2

[3,'number']='3'[3,'x']=3,6,9,9,8,7,7,9,9,10,9,10,8,7,5,3,1,-1,-1,0,0,2,4,5,4,2,1,1,2,3,0,-1,0[3,'y']=0,0,0,1,3,4,6,6,8,10,12,13,14,16,15,16,16,16,14,13,11,12,12,10,9,8,9,7,5,4,4,3,2

[4,'number']='5'[4,'x']=3,7,7,5,5,2,3,6,7,6,7,6,7,7,5,4,3,1,0,-1,1,-2,-2,2,3,0,-2,-1,-1,-1[4,'y']=0,0,1,2,4,3,5,5,6,7,9,10,11,12,13,14,13,14,14,10,10,9,8,8,9,8,6,5,3,1

[5,'number']='2'[5,'x']=3,6,8,7,8,8,7,7,5,4,6,9,8,7,8,5,2,-1,-3,-2,-1,-1,1,0,2,1,3,3,0,-2,-2,-1[5,'y']=0,0,1,2,3,5,6,7,8,10,10,10,11,12,14,14,14,14,14,12,11,10,9,8,7,6,5,3,5,6,4,2

[6,'number']='9'[6,'x']=3,6,5,8,9,8,8,8,7,7,5,5,3,1,-1,0,1,2,1,-1,-1,-3,-2,-3,-2,-3,-1,-1,2,4,4,2,2,4[6,'y']=0,0,1,2,4,5,7,9,11,14,15,17,17,17,17,15,13,12,11,12,10,10,8,6,4,3,2,1,5,5,8,8,6,7

[7,'number']='4'[7,'x']=2,5,5,5,5,5,6,6,5,5,5,3,0,0,0,-2,-4,-2,-1,0,0,0,0,-2,-1,-1[7,'y']=0,0,2,4,6,8,9,11,10,13,14,14,14,12,11,11,11,8,6,4,5,7,8,3,2,1

[8,'number']='2'[8,'x']=2,4,6,6,6,6,5,8,9,8,9,7,4,1,-1,-3,-2,0,-1,1,0,2,1,3,4,4,2,3,1,-1,-2,-2,-1,1[8,'y']=0,0,0,1,5,7,11,13,14,15,16,16,16,16,16,16,14,13,12,11,10,9,8,7,5,3,3,4,6,5,6,3,2,1

[9,'number']='8'[9,'x']=1,3,5,6,7,6,7,5,7,8,8,8,6,7,6,4,3,1,1,-1,-1,0,0,-2,-1,2,4,2,3[9,'y']=1,0,0,2,3,5,6,7,8,9,11,13,13,14,15,14,15,15,14,13,11,9,5,2,1,4,5,6,5

[10,'number']='6'[10,'x']=2,5,4,4,3,4,5,6,6,7,7,7,6,5,4,3,0,-1,-2,-2,-4,-3,-4,-3,-3,-1,-2,-1,1,3,2,3,2,1,0


П.E.5 Модуль savetrack.py


#!/usr/bin/python2

# -*- coding: UTF-8 -*-xlwt,ooolib

#from datetime import datetime

save_to_xls(nametrack,info):= xlwt.Font().name = 'Times New Roman'.colour_index = 0.bold = True= xlwt.XFStyle().font = font0= xlwt.Workbook(encoding='UTF-8')= wb.add_sheet(nametrack).write(0, 0, 'Страна', style0).write(0, 1, 'Дата', style0).write(0, 2, 'Операция', style0).write(0, 3, 'Название ОПС', style0).write(0, 4, 'Вес(кг.)', style0)

ws.write(0, 5, 'Объявл. ценность (руб.)', style0)

for row in xrange(0,len(info)):col in xrange(0,len(info[row])):.write(row+1,col,info[row][col]).save("/srv/http/temp/"+nametrack+".xls")save_to_ods(nametrack,info):= ooolib.Calc(nametrack).set_cell_property('bold', True).set_cell_value(1, 1,"string","Страна".decode("UTF-8")).set_cell_value(2, 1,"string","Дата".decode("UTF-8")).set_cell_value(3, 1,"string","Операция".decode("UTF-8")).set_cell_value(4, 1,"string","Название ОПС".decode("UTF-8")).set_cell_value(5, 1,"string","Вес(кг.)".decode("UTF-8")).set_cell_value(6, 1,"string","Объявл. ценность (руб.)".decode("UTF-8")).set_cell_property('bold', False)row in xrange(0,len(info)):col in xrange(0,len(info[row])):.set_cell_value(col+1, row+2, "string", info[row][col].decode("UTF-8"))

.save("/srv/http/temp/"+nametrack+".ods")

П.E.6 Модуль dictcountry.py


#!/usr/bin/python2

# -*- coding: UTF-8 -*-

={}['AC']="Azores"['AD']="Andorra"['AE']="Utd.Arab.Emir."['AF']="Afghanistan"['AG']="Antigua/Barbads"['AI']="Anguilla"['AL']="Albania"['AM']="Armenia"['AN']="Netherland Antilles"['AO']="Angola"['AP']="Asia Pacific Ctries"['AQ']="Antarctica"['AR']="Argentina"['AS']="Samoa,American"['AT']="Austria"['AU']="Australia"['AW']="Aruba"['AZ']="Azerbaijan"['BA']="Bosnia-Herz."['BB']="Barbados"['BD']="Bangladesh"['BE']="Belgium"['BF']="Burkina-Faso"['BG']="Bulgaria"['BH']="Bahrain"['BI']="Burundi"['BJ']="Benin"['BM']="Bermuda"['BN']="Brunei Darussalam"['BO']="Bolivia"['BR']="Brazil"['BS']="Bahamas"['BT']="Bhutan"['BV']="Bouvet Island"['BW']="Botswana"['BY']="Belarus"['BZ']="Belize"['CA']="Canada"['CC']="Cocos Islands"['CD']="Congo Dem.Rep."['CF']="Central Afr.Rep"['CG']="Congo"['CH']="Switzerland"['CI']="Ivory Coast"['CK']="Cook Islands"['CL']="Chile"['CM']="Cameroon"['CN']="China"['CO']="Colombia"['CR']="Costa Rica"['CU']="Cuba"['CV']="Cape Verde"['CX']="Christmas Island"['CY']="Cyprus"['CZ']="Czech Republic"['DE']="Germany"['DG']="Diego Garcia"['DJ']="Djibouti"['DK']="Denmark"['DM']="Dominica"['DO']="Dominican Rep."['DZ']="Algeria"['EC']="Ecuador"['EE']="Estonia"['EG']="Egypt"['ER']="Eritrea"['ES']="Spain"['ET']="Ethiopia"['FI']="Finland"['FJ']="Fiji"['FK']="Falkland Islnds"['FM']="Micronesia"['FO']="Faroe Island"['FR']="France"['GA']="Gabon"['GB']="United Kingdom"['GD']="Grenada"['GE']="Georgia"['GF']="French Guinea"


РЕФЕРАТ В отчете рассматриваются сервисы отслеживания почтовых отправлений предоставляемые операторами почтовых услуг и сторонние сайты отслеживания почт

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ