Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Проект GPSD

Глава 7 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: GPSD, глава из книги "The Architecture of Open Source Applications" том 2
Автор: Eric Raymond
Дата публикации: 2012 г.
Перевод: Н.Ромоданов
Дата перевода: июнь 2013 г.

Creative Commons

Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.

Проект GPSD представляет собой набор инструментальных средств для управления коллекциями устройств GPS и другими датчиками, связанными с навигацией и хранением точного времени, в том числе морских радиосистем автоматической идентификации AIS (Automatic Identification System) и цифровых компасов. Основная программа — демон сервиса, называемый gpsd, управляет набором датчиков и формирует от них всех сообщения в виде потока объектов JSON на известном порту TCP/IP. Среди других программ, имеющихся в наборе, есть примеры клиентских программ, используемых в качестве модели кода, а также различные диагностические инструментальные средства.

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

Проект GPSD является проектом среднего размера - около 43 тыс. строк кода, написанных, в основном, на C и Python, с историей нынешней лидирующей позиции начиная с 2005 года и с предысторией начиная с 1997 года. Основная стабильная группа его разработчиков состояла из трех разработчиков, с полу-регулярными вкладами приблизительно от более чем двух десятков разработчиков и обычными одноразовыми патчами от сотни других.

Исторически сложилось так, что в проекте GPSD присутствовало исключительно низкое количество ошибок, причем как измеряемое с помощью средств аудита, например, splint, valgrind и Coverity, так и оцениваемое согласно сообщениям об ошибках в собственном трекере, а также в других местах. Это не случайно; в проект очень агрессивно внедрялись технологии автоматизированного тестирования, и эти усилия окупились сторицей.

Проект GPSD достаточно хорошо делает все то, что должен делать, он вобрал в себя или эффектно уничтожил всех своих предшественников и предотвратил, по меньшей мере, одну прямую попытку конкурировать с ним. В 2010 году проект GPSD выиграл первый грант Good Code Grant альянса Alliance for Code Excellence. К тому моменту, как вы закончите читать эту главу, вы должны понять, благодаря чему.

7.1. Почему существует проект GPSD

GPSD существует из-за того, что прикладные протоколы, поставляемые с датчиками GPS и другие датчики, относящиеся к навигации, плохо спроектированы, недостаточно документированы и сильно зависят от типа и модели датчика. Подробное обсуждение смотрите по ссылке [Ray]; там, в частности, вы узнаете о капризах стандарта NMEA 0183 (варианта стандарта пакетов сообщений GPS) и о бессистемной куче плохо документированных протоколов поставщиков, которые с ним конкурируют.

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

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

Система GPSD также поддерживает хранение точного времени; она может выступать в качестве источника времени для ntpd (демона протокола сетевого сервиса времени), если в каком-нибудь из подключенных к нему датчиков имеется возможность выдавать сигналы PPS (секундные сигналы). Разработчики проекта GPSD тесно сотрудничают с проектом ntpd с целью улучшения сетевого сервиса времени.

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

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


7.2. Взгляд извне