Wednesday, June 24, 2009

Параметры мобильного телефона используя wurfl

Для того чтобы определить параметры мобильного телефона можно использовать 2 пути:
  • определение свойств на основе мобильного профайла возвращенного в заголовках запроса (CC/PP);
  • определение на основе данных переданных в качестве UserAgent.
Первый случай дает возможность сделав несколько запросов на профайл и изменения в нем по протоколу CC/PP получить полные официальные данные об устройстве, но этот случай имеет несколько недостатков, указанный в профайле ресурс может быть недоступен и мы терем время на эти запросы.

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

Принцип работы с базой wurfl:
  1. найти максимально похоже имя user agent по xpath пути:"/wurfl/devices/device/@user_agent. (В первой версии искалось полное соответствие.)
  2. определить идентификатор этого описания: "/wurfl/devices/device[@user_agent='UserAgent']/@id"
  3. попытаться получить описание нужного нам свойства используя: "/wurfl/devices/device[@id='идентификатор']/group[@id='markup']/capability[@name='html_wi_oma_xhtmlmp_1_0']/@value" . markup - имя группы свойств, html_wi_oma_xhtmlmp_1_0 - свойство.
  4. Если получить не удалось получаем идентификатор подобного устройства: "/wurfl/devices/device[@id='идентификатор']/@fall_back".
  5. Если получить описание устройства не удается через fall_back мы всегда попадем на описание generic устройства, у которого значение всех свойств равно false.
Ссылки:

Wednesday, June 17, 2009

Патчи к gtkhtml

Описание моих патчей к gtkhtml:
  • Get rid of deprecated libgnomecanvas Удалена зависимость от libgnomecanvas (полностью удален bonobo компонент, не устанавливаемый по умолчанию в систему) и переписан код конструирования панелей использовавших bonobo (теперь код использует только функции gtk+). Доступно в версии 3.26.
  • Удаление использования libgnome Замена на использование GtkBuilder для генерации меню и автоматический поиск каталога с тестами. Доступно в версии 3.27.3.
  • Поддержка data URI Добавляет поддержку datauri, также:
  1. исправляет код формирования url на основе относительного и базового url страницы с которой вызывается запрос (теперь в);
  2. добавлена автоматическая замена содержимого при получении, если при вызове получения данных ожидается html, но была получена картинка, автоматически формируется html с ссылкой на эту картинку;
  3. добавлено два вызова для gtkhtmlstream установки базовой страницы и content type для конкретного потока, ранее эти параметры устанавливались для всего документа и он мог отобразиться не корректно.
  • Использование GtkBuilder вместо libglade. Заменяет устаревший(deprecated) libglade на более универсальный код использующий GtkBuilder. (3.07.2009 - применено в основной ветви, будет доступно в следующем релизе).
  • Поддержка cookies - включает поддержку cookies при установленном libsoup версии > 2.26, включается только в тестовом приложении не устанавливаемом в систему. Доступно в версии 3.27.3.
P.S.: поддержка этих изменений в skybrowser я не добавил.
  1. Код со всеми моими изменениями.
  2. Официальный репозиторий.

Friday, June 5, 2009

timeouts in merle

Добавил в мою ветвь кода merle возможность работы с timeout.
  1. В функцию connect новый параметр Options, передаваемый в функцию gen_server:start_link . Этот параметр позволяет установить timeout и включить режим отладки:
  • Options ::= [{timeout, Timeout} | {debug, [Flag]}]
  • Flag ::= trace | log | {logfile, File} | statistics | debug(debug == log && statistics)
  1. В getkeylist(Key, Timeout) добавлен параметр максимального ожидания ответа, предыдущий вариант тоже остался, его поведения также можно эмулировать - указав значение 0
  2. Функция setlist теперь ожидает установки только время указанное как значение времени кеширования (гарантия что. если время кэширования было превышено, сохранение не произойдет). При значении 0 поведение сохраняется, как было до изменения.
Эти изменения позволяют снизить количество одновреммено запущеных запросов к merle во время повышенной нагрузки на систему временем timeout.