SlideShare a Scribd company logo
1 of 47
Download to read offline
Интерактивный
                    терминал:
              Perl, XML и Firefox


Доклад больше касается веб-разработки, но Perl сыграл важную роль. Об этом я и
расскажу.
Интерактивные
                     терминалы
          • платежные терминалы
           • оплата по счетам
           • банкоматы
          • информационные терминалы
           • справочные терминалы по товарам и
                 услугам


Длинная вводная часть :)
Характеристики
       терминалов

• обычный компьютер: процессор 2.6 Гц,
  память 256 Мб (wikipedia)
• ОС Windows XP
• Delphi / C++ Builder
Особенности
                      терминалов
         • не работает
          • ошибки Windows
          • “синий экран смерти”
          • перезагрузка системы

- ошибки Windows в виде всплывающий окон (если не сенсорный экран, то убрать
невозможно)
- сбой питания => перезагрузка => никто не застрахован :)
Справочный терминал
             по товарам
         • для небольших гаджетов
          • мобильные телефоны
          • цифровые фото
          • мп3-плееры

Справочный терминал по товарам (в медиа-центрах)
Основная задача

• пришел в магазин
• выбрал модель(и)
• получил полноценную (сравнительную)
  информацию
• купил :)
Требования к
                      терминалу
         • небольшой
         • легкий
         • дешевый
         • без ошибок :)

Данные условия продиктовали требования не только для подбора железа, но и к
разрабатываему софту.
Главное - liteweight & powerful.
Характеристики
         железа

• материнская плата и процессор via
  (все в одном)
• память 256 Мб
• USB флеш для системы
Самое интересное:
                  варианты
          • ОС
          • Хранилище данных
          • Клиентская часть
          • Серверная часть ?

Нужно определится, что будем использовать в качестве:
- ОС
- Х.д. - некоторая БД для хранения информации по товарам
- Клиентская часть и возможно серверная (в случае с Delphi все в одном)
Операционная
                    система
         • Linux Slackware
          • вся ОС содержится на USB флешке
          • размер ОС ~ 130 Мб
          • UTF-8

К решению данной проблемы мы подошли как веб-разработчики :)
Хранилище данных:
                варианты
          • текстовая информация
           • СУБД: MySQL, PostgreSQL
           • BerckleyDB, SQLite
           •?
          • медиа-контент

Основное условие - минимум всего.
MySQL - лишний демон, отказались, такие удобства здесь не нужны.
BDB - в принципе ок, но визуально трудно проверить, нужен клиент ~ mysql
Хранилище данных:
                варианты
         • текстовая информация
          • СУБД: MySQL, PostgreSQL
          • BerckleyDB, SQLite
          • XML
         • медиа-контент

XML - удобный формат данных, “стандарт” обмена данными, легко генерить, работать,
индуктивен
Пример XML каталога
     <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?>
     <catalog>
       <category name=quot;mobilequot; title=quot;...quot;>
         <product id=quot;1quot;>
           <title>Sony-Ericsson P990i</title>
           ...
         </product>
         ...
       </category>
       ...
     </catalog>


В XML хранится вся информация о товарах
Каждая категория товаров содержит примерно несколько тысяч товаров, размер ~ 2-3
Мб, каталог ~10 Мб
Контроль XML

         • XML + XSLT
          • легко написать преобразования для
                визуального контроля
               • картинка есть, но не читается
               • проверка корректности данных

Легко написать XSLT-преобразование для визуального контроля всего каталога или
конкретной категории.
Например, картинка есть, но не читается
Генерация XML

         • источник данных http://market.yandex.ru
         • необходимо
          • собрать данные
          • нормализовать данные
          • cгенерировать XML

Нужна полноценная БД товаров.
Отличным источником данных является маркет яндекс.
Сбор данных

         • Perl + POE
          • POE::Component::Client::HTTP
            • наполнение БД категорий и товаров
            • получение конечных страниц
                  товаров и изображений



На 20 слайде наконец появилось упоминание про Perl :)
POE - событийная машина, кот позволяет легко реализовать неблокирующую сетевую
многозадачность и межпроцессорное взаимодествие.
БД - MySQL
1. паук проходит по всем категориям, производителям и разбивкам по страницам и
наполняем базу товаров: url конечной страницы и url изображений
2. “тупой” паук - просто получает и сохраняет данные
Спасибо Яндексу за
         отказоустойчивость :)
        Иногда при получение изображений — 500 ошибка




Пауки работают параллельно. Второй зависит от первого.
За несколько минут собирается необходимая база товаров.
Если 500, то при повторном проходе - все собирается.
Нормализация данных
• скрипты-нормализаторы на Perl
 • все строки — нужной длины !
 • ресайз изображений
• при необходимости — сокращение
  данных
 • факт наличие на сайте производителя
XML есть, Perl помог
      генерация XML
Клиентская часть
         • стенд с гаджетами
         • при поднятии гаджета — выводится
            информация на монитор
         • сравнить — поднять N-штук
            одновременно
         • админ для управления

Требования к функционалу
Одновременно для сравнения 3 гаджета
На стенде размещается N-датчиков (24), которые посылают сигналы по COM-порту.
Старо, но работает.
Данная разработка секретна :)
Клиентское
        приложение: варианты

          • аналог Delphi — Kylix
          • графические тулкиты: Tk, Gtk
          •?


Kylix - сразу нет
Tk - есть опыт разработки, нужны дополнитеьные навыки :)
Решили пойти дальше...
Клиентское
        приложение: варианты

          • аналог Delphi — Kylix
          • графические тулкиты: Tk, Gtk
          • Firefox


Firefox - браузер, отличное клиентское приложение
Firefox
         • верстка интерфейсов: HTML+CSS+JS,
             XML+XSLT
         • поддержка мультимедиа: флеш, аудио,
             видео, svg (не очень :)
         • большое количество плагинов и
             дополнений (плагин rkiosk)
         • протокол взаимодействия — HTTP
Очень просто и быстро, любой веб-разработчик способен создавать интерфейсы.
Изменили дефолтные настройки FF, связанные с кешированием - все через JS.
Для Firefox нужен сервер, с которым он будет взаимодействовать по HTTP.
Серверная часть
                    будет!
                      Perl? :)




Об этом позже
Порядок работы:
                    варианты
          • AJAX опрашивает сервер, нет ли нового
              сигнала один раз в N-миллисекунд
          • push-технология: сервер сам сообщает
              клиенту о новом сигнале
             • трюк: открывать новый таб в FF при
                 появление сигнала



Как клиент должен работать?
Самое главное - отреагировать на поднятый гаджет, т.е. на сигнал
Трюк - сильно заметен, мелькает белый экран, табов не видно, но их число растет.
Push - самое то, но я узнал об этом позже.
Порядок работы:
                   варианты
          • AJAX опрашивает сервер, нет ли нового
             сигнала один раз в N-миллисекунд
          • push-технология: сервер сам сообщает
             клиенту о новом сигнале
             • трюк: открывать новый таб в FF при
                появление сигнала



AJAX-опрос - стабильный вариант, работает 24на7 :)
Серверная часть:
                    варианты

          • Apache (mod_cgi/mod_perl/mod_fcgi)
          • nginx (FastCGI)
          •?


Помним - минимум всего и функционально.
Веб-сервер будет совсем не нагружен, явно не highload.
Apache - тяжело, лишнее звено
nginx - отдача статики, динамика аналогична с Apache (плюс только видели, не
пробовали)
Серверная часть:
                     варианты

          • Apache (mod_cgi/mod_perl/mod_fcgi)
          • nginx (FastCGI)
          • Perl + POE


POE я тогда увлекался :)
Веб-сервер на Perl
         • POE::Component::Server::SimpleHTTP
          • отдача статики (img, css, js, xslt)
          • генерация нужных xml,
                соответствующих запросу
            • уведомление клиента о появление
                сигнала от датчиков



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

         • Cигнал — последовательность 0 и 1,
             длина N (000...0, 100...0, 111...1)
         • cat /dev/ttyS0
         • POE::Wheel::Run


Как хорошо, что у нас Unix, чтение сигнала - очень просто.
Wheel::Run - не блокирующее взаимодействие с дочерними процессорами, в данном
случае только чтение
Порядок работы: без
               вариантов
          • при старте — читает XML каталог
          • конфигурация PoCo::Server::SimpleHTTP
          • POE::Session — события по обработке
              запросов от клиента
          • POE::Session + POE::Wheel::Run —
              получение сигнала от датчиков



Порядок работы POE-машины:
- при старте - читает XML каталог, парсит и больше не обращается (если принудительно
не попросить, н-р -s HUP или restart) - это достаточно, т.к. каталог меняться не будет,
почти не будет (обновление хранилища)
POE::Component::Server::SimpleHTTP->new(
       'ALIAS'      => 'HTTP_SERVER',
       'ADDRESS' => '0.0.0.0', # for all eth
       'PORT'       => 80,
       'HOSTNAME' => 'hostname',
       'HEADERS' => {'Server' => '...'},
       'HANDLERS' => [
          {
            'DIR'      => '^/$',
            'SESSION' => 'HTTP_SERVER_SESSION',
            'EVENT'    => 'got_index',
          },
          ...
       ],
    );

В XML хранится вся информация о товарах
Каждая категория товаров содержит примерно несколько тысяч товаров, размер ~ 2-3
Мб, каталог ~10 Мб
Обработка запросов

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

- статика, не кешируем, т.к. это лишнее
- индекс, только те товары, которые были выбраны в админе (сразу все 24), т.к. другие
показаны быть не могут
- сигнал: время генерации, id и на каком месте какой товар
- админ - пустой, вся логика XSLT + JS
- сохранение в XML placing.xml кросс-связи: место и товар
Получение сигнала
POE::Wheel::Run->new(
    'Program'      => ['cat', '/dev/ttyS0'],
    #'Program'      => './ttyS0.pl',
    'StdoutEvent' => 'stdout',
    'StdoutFilter' => POE::Filter::Stream->new,

        'ErrorEvent'               => 'error',
        'CloseEvent'               => 'close',
);



При получение сигнала, вызывается событие stdout.
Преимущество POE - если нет /dev/ttyS0, то можно тестировать через свой скрипт -
эмулятор.
Эмулятор сигнала
      local $| =    1;
      local $ = quot;nquot;;

      for (;;) {
        print pack quot;b*quot;,
          join '', map { int rand 2 } 1..24;

          sleep($ARGV[0]||1);
      }



Код на Си получился на несколько строк больше :)
Получение сигнала
         • распаковать сигнал: unpack quot;b*quot;
         • нюансы
          • короткий сигнал
          • длинный сигнал
         • изменить $SIGNAL
         • в идеале — POE::Filter::Signal
Может прийти короткий или длиный сигнал, тогда нужно лиюо накопить, либо обрезать,
оставшееся в буфер.
Наполняем глобальную переменную $SIGNAL, которая при запросе на сигнал
преобразуется в XML.
В идеале должен быть фильтр :)
Преимущества
         • Легко, просто, быстро и дешево :)
         • Решение — OpenSource
         • Решение — кросс-платформенное
             (за исключением /dev/ttyS0)
         • Может работать без флешки
             (изменения в админе не учитываются)
         • Интересный подход: Perl + XML + Firefox
нет проблем с лицензией

Не забыть:
- отключить логи (на флешки объем ограничен и небльшой)
- победить проблему с прокруткой :)
Недостатки
          • Открытый код (решение: обфускация,
             криптование раздела)
          • Могут возникнуть проблемы с
             отрисовкой изображений в Firefox при
             слабых мощностях (решение: видео-
             драйвер?)
          • При больших объемах данных и слабых
             мощностях — Firefox медленно парсит
             XML/JSON (решение: увеличить таймаут)

Только что у нас это было преимуществом, теперь недостаток.
Кто захочет, тот расшифрует :)

Хоть из кеша, хоть с сервера - медленно отрисовываются картинки
Здесь не возникло такой проблемы

Решение увеличить таймаут или уменьшить порции данных
Для каждой задачи —
   свое решение
 Мне понравилось :) Работает. Стабильно.
Спасибо за внимание!
     Анатолий Шарифулин
          South Perl

More Related Content

What's hot

Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Liudmila Li
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixMichael Ganschuk
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S PbLiudmila Li
 
Open-source для диплома
Open-source для дипломаOpen-source для диплома
Open-source для дипломаStas Fomin
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?SQALab
 
Career Development в Epam Systems
Career Development в Epam SystemsCareer Development в Epam Systems
Career Development в Epam Systemssef2009
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_newguest18d24c
 
Платформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООППлатформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООПBoris Volfson
 
presentation for print media
presentation for print mediapresentation for print media
presentation for print medialinkod
 
Критерии выбора SEO/SEM компании. Оценка эффективности
Критерии выбора SEO/SEM компании. Оценка эффективностиКритерии выбора SEO/SEM компании. Оценка эффективности
Критерии выбора SEO/SEM компании. Оценка эффективностиGooVape
 
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?Продвижение портала новостроек. Как SEO помогает стать лидером рынка?
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?collaborator.pro
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninOntico
 
How to make your site accessible
How to make your site accessibleHow to make your site accessible
How to make your site accessibleYuriy Artyukh
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project developmentOntico
 
Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Docsvision
 

What's hot (20)

07 Ws08 R2 Virt
07 Ws08 R2 Virt07 Ws08 R2 Virt
07 Ws08 R2 Virt
 
Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S Pb
 
Open-source для диплома
Open-source для дипломаOpen-source для диплома
Open-source для диплома
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?
 
Career Development в Epam Systems
Career Development в Epam SystemsCareer Development в Epam Systems
Career Development в Epam Systems
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_new
 
Платформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООППлатформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООП
 
lenvendo on bitrix cms
lenvendo on bitrix cmslenvendo on bitrix cms
lenvendo on bitrix cms
 
presentation for print media
presentation for print mediapresentation for print media
presentation for print media
 
Критерии выбора SEO/SEM компании. Оценка эффективности
Критерии выбора SEO/SEM компании. Оценка эффективностиКритерии выбора SEO/SEM компании. Оценка эффективности
Критерии выбора SEO/SEM компании. Оценка эффективности
 
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?Продвижение портала новостроек. Как SEO помогает стать лидером рынка?
Продвижение портала новостроек. Как SEO помогает стать лидером рынка?
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg Bunin
 
Flash Point 2010 Common
Flash Point 2010 CommonFlash Point 2010 Common
Flash Point 2010 Common
 
video hostings architecture
video hostings architecturevideo hostings architecture
video hostings architecture
 
How to make your site accessible
How to make your site accessibleHow to make your site accessible
How to make your site accessible
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2
 

More from Anatoly Sharifulin

Ещё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхЕщё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхAnatoly Sharifulin
 
ASO Аудит для приложений и игр
ASO Аудит для приложений и игрASO Аудит для приложений и игр
ASO Аудит для приложений и игрAnatoly Sharifulin
 
ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)Anatoly Sharifulin
 
AppFollow митап в Москве
AppFollow митап в МосквеAppFollow митап в Москве
AppFollow митап в МосквеAnatoly Sharifulin
 
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...Anatoly Sharifulin
 
Аналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayАналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayAnatoly Sharifulin
 
Конкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийКонкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийAnatoly Sharifulin
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентовAnatoly Sharifulin
 
Аналитика магазинов приложений
Аналитика магазинов приложенийАналитика магазинов приложений
Аналитика магазинов приложенийAnatoly Sharifulin
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложенийAnatoly Sharifulin
 
Анализ приложений конкурентов
Анализ приложений конкурентовАнализ приложений конкурентов
Анализ приложений конкурентовAnatoly Sharifulin
 
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»Anatoly Sharifulin
 
Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Anatoly Sharifulin
 
Основной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruОсновной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruAnatoly Sharifulin
 
ASO оптимизация и продвижение мобильных приложений
ASO  оптимизация и продвижение мобильных приложенийASO  оптимизация и продвижение мобильных приложений
ASO оптимизация и продвижение мобильных приложенийAnatoly Sharifulin
 

More from Anatoly Sharifulin (20)

Ещё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхЕщё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играх
 
ASO Аудит для приложений и игр
ASO Аудит для приложений и игрASO Аудит для приложений и игр
ASO Аудит для приложений и игр
 
ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)
 
ASO для iOS 11
ASO для iOS 11ASO для iOS 11
ASO для iOS 11
 
AppFollow митап в Москве
AppFollow митап в МосквеAppFollow митап в Москве
AppFollow митап в Москве
 
ASO Best Practices 2016
ASO Best Practices 2016ASO Best Practices 2016
ASO Best Practices 2016
 
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
 
Аналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayАналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google Play
 
ASO FAQ
ASO FAQASO FAQ
ASO FAQ
 
ASO: Best Practices 2015
ASO: Best Practices 2015ASO: Best Practices 2015
ASO: Best Practices 2015
 
AppFollow Demo Day ФРИИ
AppFollow Demo Day ФРИИAppFollow Demo Day ФРИИ
AppFollow Demo Day ФРИИ
 
Конкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийКонкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложений
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
 
Аналитика магазинов приложений
Аналитика магазинов приложенийАналитика магазинов приложений
Аналитика магазинов приложений
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложений
 
Анализ приложений конкурентов
Анализ приложений конкурентовАнализ приложений конкурентов
Анализ приложений конкурентов
 
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
 
Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?
 
Основной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruОсновной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ru
 
ASO оптимизация и продвижение мобильных приложений
ASO  оптимизация и продвижение мобильных приложенийASO  оптимизация и продвижение мобильных приложений
ASO оптимизация и продвижение мобильных приложений
 

Интерактивный терминал: Perl, XML и Firefox‎

  • 1. Интерактивный терминал: Perl, XML и Firefox Доклад больше касается веб-разработки, но Perl сыграл важную роль. Об этом я и расскажу.
  • 2. Интерактивные терминалы • платежные терминалы • оплата по счетам • банкоматы • информационные терминалы • справочные терминалы по товарам и услугам Длинная вводная часть :)
  • 3. Характеристики терминалов • обычный компьютер: процессор 2.6 Гц, память 256 Мб (wikipedia) • ОС Windows XP • Delphi / C++ Builder
  • 4.
  • 5. Особенности терминалов • не работает • ошибки Windows • “синий экран смерти” • перезагрузка системы - ошибки Windows в виде всплывающий окон (если не сенсорный экран, то убрать невозможно) - сбой питания => перезагрузка => никто не застрахован :)
  • 6.
  • 7.
  • 8.
  • 9. Справочный терминал по товарам • для небольших гаджетов • мобильные телефоны • цифровые фото • мп3-плееры Справочный терминал по товарам (в медиа-центрах)
  • 10. Основная задача • пришел в магазин • выбрал модель(и) • получил полноценную (сравнительную) информацию • купил :)
  • 11. Требования к терминалу • небольшой • легкий • дешевый • без ошибок :) Данные условия продиктовали требования не только для подбора железа, но и к разрабатываему софту. Главное - liteweight & powerful.
  • 12. Характеристики железа • материнская плата и процессор via (все в одном) • память 256 Мб • USB флеш для системы
  • 13. Самое интересное: варианты • ОС • Хранилище данных • Клиентская часть • Серверная часть ? Нужно определится, что будем использовать в качестве: - ОС - Х.д. - некоторая БД для хранения информации по товарам - Клиентская часть и возможно серверная (в случае с Delphi все в одном)
  • 14. Операционная система • Linux Slackware • вся ОС содержится на USB флешке • размер ОС ~ 130 Мб • UTF-8 К решению данной проблемы мы подошли как веб-разработчики :)
  • 15. Хранилище данных: варианты • текстовая информация • СУБД: MySQL, PostgreSQL • BerckleyDB, SQLite •? • медиа-контент Основное условие - минимум всего. MySQL - лишний демон, отказались, такие удобства здесь не нужны. BDB - в принципе ок, но визуально трудно проверить, нужен клиент ~ mysql
  • 16. Хранилище данных: варианты • текстовая информация • СУБД: MySQL, PostgreSQL • BerckleyDB, SQLite • XML • медиа-контент XML - удобный формат данных, “стандарт” обмена данными, легко генерить, работать, индуктивен
  • 17. Пример XML каталога <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <catalog> <category name=quot;mobilequot; title=quot;...quot;> <product id=quot;1quot;> <title>Sony-Ericsson P990i</title> ... </product> ... </category> ... </catalog> В XML хранится вся информация о товарах Каждая категория товаров содержит примерно несколько тысяч товаров, размер ~ 2-3 Мб, каталог ~10 Мб
  • 18. Контроль XML • XML + XSLT • легко написать преобразования для визуального контроля • картинка есть, но не читается • проверка корректности данных Легко написать XSLT-преобразование для визуального контроля всего каталога или конкретной категории. Например, картинка есть, но не читается
  • 19. Генерация XML • источник данных http://market.yandex.ru • необходимо • собрать данные • нормализовать данные • cгенерировать XML Нужна полноценная БД товаров. Отличным источником данных является маркет яндекс.
  • 20. Сбор данных • Perl + POE • POE::Component::Client::HTTP • наполнение БД категорий и товаров • получение конечных страниц товаров и изображений На 20 слайде наконец появилось упоминание про Perl :) POE - событийная машина, кот позволяет легко реализовать неблокирующую сетевую многозадачность и межпроцессорное взаимодествие. БД - MySQL 1. паук проходит по всем категориям, производителям и разбивкам по страницам и наполняем базу товаров: url конечной страницы и url изображений 2. “тупой” паук - просто получает и сохраняет данные
  • 21. Спасибо Яндексу за отказоустойчивость :) Иногда при получение изображений — 500 ошибка Пауки работают параллельно. Второй зависит от первого. За несколько минут собирается необходимая база товаров. Если 500, то при повторном проходе - все собирается.
  • 22. Нормализация данных • скрипты-нормализаторы на Perl • все строки — нужной длины ! • ресайз изображений • при необходимости — сокращение данных • факт наличие на сайте производителя
  • 23. XML есть, Perl помог генерация XML
  • 24. Клиентская часть • стенд с гаджетами • при поднятии гаджета — выводится информация на монитор • сравнить — поднять N-штук одновременно • админ для управления Требования к функционалу
  • 26.
  • 27. На стенде размещается N-датчиков (24), которые посылают сигналы по COM-порту. Старо, но работает. Данная разработка секретна :)
  • 28. Клиентское приложение: варианты • аналог Delphi — Kylix • графические тулкиты: Tk, Gtk •? Kylix - сразу нет Tk - есть опыт разработки, нужны дополнитеьные навыки :) Решили пойти дальше...
  • 29. Клиентское приложение: варианты • аналог Delphi — Kylix • графические тулкиты: Tk, Gtk • Firefox Firefox - браузер, отличное клиентское приложение
  • 30. Firefox • верстка интерфейсов: HTML+CSS+JS, XML+XSLT • поддержка мультимедиа: флеш, аудио, видео, svg (не очень :) • большое количество плагинов и дополнений (плагин rkiosk) • протокол взаимодействия — HTTP Очень просто и быстро, любой веб-разработчик способен создавать интерфейсы. Изменили дефолтные настройки FF, связанные с кешированием - все через JS. Для Firefox нужен сервер, с которым он будет взаимодействовать по HTTP.
  • 31. Серверная часть будет! Perl? :) Об этом позже
  • 32. Порядок работы: варианты • AJAX опрашивает сервер, нет ли нового сигнала один раз в N-миллисекунд • push-технология: сервер сам сообщает клиенту о новом сигнале • трюк: открывать новый таб в FF при появление сигнала Как клиент должен работать? Самое главное - отреагировать на поднятый гаджет, т.е. на сигнал Трюк - сильно заметен, мелькает белый экран, табов не видно, но их число растет. Push - самое то, но я узнал об этом позже.
  • 33. Порядок работы: варианты • AJAX опрашивает сервер, нет ли нового сигнала один раз в N-миллисекунд • push-технология: сервер сам сообщает клиенту о новом сигнале • трюк: открывать новый таб в FF при появление сигнала AJAX-опрос - стабильный вариант, работает 24на7 :)
  • 34. Серверная часть: варианты • Apache (mod_cgi/mod_perl/mod_fcgi) • nginx (FastCGI) •? Помним - минимум всего и функционально. Веб-сервер будет совсем не нагружен, явно не highload. Apache - тяжело, лишнее звено nginx - отдача статики, динамика аналогична с Apache (плюс только видели, не пробовали)
  • 35. Серверная часть: варианты • Apache (mod_cgi/mod_perl/mod_fcgi) • nginx (FastCGI) • Perl + POE POE я тогда увлекался :)
  • 36. Веб-сервер на Perl • POE::Component::Server::SimpleHTTP • отдача статики (img, css, js, xslt) • генерация нужных xml, соответствующих запросу • уведомление клиента о появление сигнала от датчиков SimpleHTTP - быстро и легко можно создать неблокируюший веб-сервер на POE. - статики совсем не много - xml - получение информации всего каталога, конкретной категории, производителя или группы товара
  • 37. Сигналы • Cигнал — последовательность 0 и 1, длина N (000...0, 100...0, 111...1) • cat /dev/ttyS0 • POE::Wheel::Run Как хорошо, что у нас Unix, чтение сигнала - очень просто. Wheel::Run - не блокирующее взаимодействие с дочерними процессорами, в данном случае только чтение
  • 38. Порядок работы: без вариантов • при старте — читает XML каталог • конфигурация PoCo::Server::SimpleHTTP • POE::Session — события по обработке запросов от клиента • POE::Session + POE::Wheel::Run — получение сигнала от датчиков Порядок работы POE-машины: - при старте - читает XML каталог, парсит и больше не обращается (если принудительно не попросить, н-р -s HUP или restart) - это достаточно, т.к. каталог меняться не будет, почти не будет (обновление хранилища)
  • 39. POE::Component::Server::SimpleHTTP->new( 'ALIAS' => 'HTTP_SERVER', 'ADDRESS' => '0.0.0.0', # for all eth 'PORT' => 80, 'HOSTNAME' => 'hostname', 'HEADERS' => {'Server' => '...'}, 'HANDLERS' => [ { 'DIR' => '^/$', 'SESSION' => 'HTTP_SERVER_SESSION', 'EVENT' => 'got_index', }, ... ], ); В XML хранится вся информация о товарах Каждая категория товаров содержит примерно несколько тысяч товаров, размер ~ 2-3 Мб, каталог ~10 Мб
  • 40. Обработка запросов • статика — отдача с диска, без кеша • индекс — XML только нужных товаров • сигнал — XML представление сигнала • админ — пустой XML • установка порядка — сохранение XML - статика, не кешируем, т.к. это лишнее - индекс, только те товары, которые были выбраны в админе (сразу все 24), т.к. другие показаны быть не могут - сигнал: время генерации, id и на каком месте какой товар - админ - пустой, вся логика XSLT + JS - сохранение в XML placing.xml кросс-связи: место и товар
  • 41. Получение сигнала POE::Wheel::Run->new( 'Program' => ['cat', '/dev/ttyS0'], #'Program' => './ttyS0.pl', 'StdoutEvent' => 'stdout', 'StdoutFilter' => POE::Filter::Stream->new, 'ErrorEvent' => 'error', 'CloseEvent' => 'close', ); При получение сигнала, вызывается событие stdout. Преимущество POE - если нет /dev/ttyS0, то можно тестировать через свой скрипт - эмулятор.
  • 42. Эмулятор сигнала local $| = 1; local $ = quot;nquot;; for (;;) { print pack quot;b*quot;, join '', map { int rand 2 } 1..24; sleep($ARGV[0]||1); } Код на Си получился на несколько строк больше :)
  • 43. Получение сигнала • распаковать сигнал: unpack quot;b*quot; • нюансы • короткий сигнал • длинный сигнал • изменить $SIGNAL • в идеале — POE::Filter::Signal Может прийти короткий или длиный сигнал, тогда нужно лиюо накопить, либо обрезать, оставшееся в буфер. Наполняем глобальную переменную $SIGNAL, которая при запросе на сигнал преобразуется в XML. В идеале должен быть фильтр :)
  • 44. Преимущества • Легко, просто, быстро и дешево :) • Решение — OpenSource • Решение — кросс-платформенное (за исключением /dev/ttyS0) • Может работать без флешки (изменения в админе не учитываются) • Интересный подход: Perl + XML + Firefox нет проблем с лицензией Не забыть: - отключить логи (на флешки объем ограничен и небльшой) - победить проблему с прокруткой :)
  • 45. Недостатки • Открытый код (решение: обфускация, криптование раздела) • Могут возникнуть проблемы с отрисовкой изображений в Firefox при слабых мощностях (решение: видео- драйвер?) • При больших объемах данных и слабых мощностях — Firefox медленно парсит XML/JSON (решение: увеличить таймаут) Только что у нас это было преимуществом, теперь недостаток. Кто захочет, тот расшифрует :) Хоть из кеша, хоть с сервера - медленно отрисовываются картинки Здесь не возникло такой проблемы Решение увеличить таймаут или уменьшить порции данных
  • 46. Для каждой задачи — свое решение Мне понравилось :) Работает. Стабильно.
  • 47. Спасибо за внимание! Анатолий Шарифулин South Perl