ОТЧЁТ ПО ЛЕТНЕЙ ПРАКТИКЕ
Выполнил:
Поддубный И.Е.
гр. 4084/3
Оглавление
Введение
Летнюю практику я проходил в петербургском офисе компании Motorola.
Motorola является одним из мировых лидеров в области интегрированных телекоммуникаций. Однако, вопреки всеобщему мнению, компания занимается не только мобильными телефонами и приложениями для них, но также имеет большое количество программных проектов для персональных компьютеров и других устройств.
Одним из таких проектов является программный комплекс, работающий по стандарту DLNA.
DLNA (Digital Living Network Alliance) — это стандарт, который позволяет совместимым устройствам передавать и принимать по домашней сети различный медиа-контент (изображения, музыку, видео), а также отображать его в режиме реального времени. Это технология для соединения домашних компьютеров, мобильных телефонов, ноутбуков и бытовой электроники. Устройства, которые поддерживают спецификацию данной технологии, по желанию пользователя могут автоматически настроиться и объединиться в домашнюю сеть для обмена видео-, аудиоинформацией и цифровыми фотографиями.
Создателями данной технологии являются: Intel, Sony, Matsushita, Microsoft, Nokia, Philips, Hewlett-Packard, Samsung. В развитии и продвижении на рынке технологии преуспели: IBM, Kenwood, Lenovo, Access, AMD, AwoX, Broadcom, Cisco, Comcast, DigiOn, Dolby, Huawei, LGE, Pioneer Corporation, Sharp, ST Microelectronics and Toshiba, Macrovision, NXP, Motorola.
Каждое изделие, которое проходит DLNA сертификацию, получает знак с символикой «DLNA CERTIFIED».
Моими задачами на летнюю практику были:
1. Подключиться к проекту, поподробнее узнать про DLNA;
2. Изучить, XML-структуру и XML диалект DIDL-Lite;
3. Ознакомиться и разобраться в коде, уже написанном специалистами компании;
4. Изучить и проверить работу функций, осуществляющих парсинг («parse» (англ.) — анализ, разбор, производить структурный анализ, разбирать предложение, подробно) DIDL-Lite;
5. Написать и изменить функции, занимающиеся чтением с сервера плей-листов (списков воспроизведения);
6. Протестировать работу написанных функций, найденные ошибки исправить;
7. Получить опыт работы в компании высокого уровня.
DIDL-Lite
Моторола ведёт проект с осени 2008 года. За это время было написано несколько мегабайт кода. Проект пишется на языке C сразу под Win32, Linux и прочие системы. Чтобы облегчить кроссплатформенность, существует несколько уровней абстракции. В проекте не задействовались сторонние библиотеки.
В связи с этим, разобраться в исходном коде – вовсе не простая задача. Изучая и проверяя функции парсинга DIDL-Lite, я параллельно вникал в суть проекта, изучал уже написанный исходный код и привыкал к абстракции.
DLNA поддерживает не только видео, музыку и изображения, но также и списки воспроизведения (плей-листы). По стандарту плей-листы должны иметь определённую структуру, а именно структуру DIDL-Lite.
DIDL (Digital Item Declaration Language) – это диалект XML (Extensible Markup Language). DIDL-Lite – это разновидность DIDL.
DIDL-Lite может содержать следующие тэги:
<DIDL-Lite>
<container>
<item>
<dc:title>
<dc:creator>
<upnp:class>
<upnp:album>
<res>
Кодировка DIDL-Lite файлов должна обязательно быть UTF-8.
При программном чтении таких файлов возникает проблема. Дело в том, что иногда файлы в кодировке UTF начинаются со следующей последовательности байтов: EF BB BF. Таким образом, при чтении файла вначале необходимо делать проверку на наличие этой последовательности байтов, а только после этого проверять, является ли этот файл DIDL-Lite нужной структуры (плей-листом).
Чтение плей-листов с сервера
В исходном коде был написано ряд функций, занимающих обменом сообщениями с сервером. С помощью этих функций осуществлялся просмотр медиа-файлов с сервера и их воспроизведение. Однако требовалось сделать, чтобы работа с плей-листами не отличалась от работы с обыкновенными контейнерами (папками), содержащими файлы. Ведь плей-лист – это набор ссылок на файлы. Сам по себе он не интересен, интересны лишь файлы, на которые указывают ссылки.
Такая работа с плей-листами удобна и необходима.
Общение клиента с сервером выглядит следующим образом:
· формируется SOAP-запрос (на просмотр или проигрывание контейнера или файла) и отсылается серверу;
· сервер отвечает;
· если ответ сервера – это структура плей-листа, то парсим его.
Более наглядно на рисунке:
![]() |
Для пользователя это общение выглядит примерно следующим образом:
Он заходит в контейнеры, видит списки медиа-файлов. Может просмотреть о них информацию или проиграть. Если пользователь выбирает плей-лист, то он видит список файлов, на которые ссылается плей-лист, и также может просмотреть их или проиграть.
Эта структура работала, но только по ветке «Плей-лист --> Нет». Моей задачей было дополнить веткой «Плей-лист --> Да».
Тестирование
После завершения задачи, необходимо было её проверить. Для этого существует ряд стандартных тестов DLNA. Как они работают: на сервере запускается программа для тестов, на клиенте запускается приложение Моторолы, далее идёт выполнение инструкций (просмотреть такую-то папку, просмотреть такой-то файл и т.п.).
Программа Моторолы (версия под Linux) не имела графического интерфейса, поэтому с ней приходилось работать в консоли. Интуитивно понятными командами пользователь блуждал по папкам (cd), просматривал их (ls), просматривал информацию о файлах (info), проигрывал файлы (play). Но для некоторых тестов необходимо было скачать файл с сервера. Полноценных функций, выполняющих это действие, не было. Тогда моей задачей стало написать такую функцию.
После выполнения этой задачи мне не составило труда пройти все тесты.
Вывод
В ходе летней практики мною были выполнены все поставленные задачи. Я помог компании Моторола в написании некоторых функций для серьёзного проекта. Научился пользоваться консолью в Linux, в том числе производить debug программ с помощью консоли. И самое главное, я получил опыт работы в крупной компании и опыт работы в коллективе.