Somms.NWURFL

1 de agosto de 2007

[English version]

El proyecto Somms.NWURFL ya está enviado a Sourceforge.NET, y se encuentra actualmente pendiente de aprobación.

Este proyecto, desarrollado en C# .NET 2.0, tiene como objetivo crear una nueva API para la WURFL que siga las directrices establecidas para la evolución de la WURFL, y que sea independiente de la fuente de datos utilizada para ello.

Esta API se centra en dos aspectos principales: la abstracción del acceso a datos, y ofrecer herramientas eficaces de búsqueda de dispositivos.

Abstracción del acceso a datos

WURFL actualmente es un fichero que contiene información sobre dispositivos móviles. Este fichero se encontraba en un fichero XML disponible en la web del proyecto WURFL. Todas las APIs trabajaban directamente sobre este fichero hasta que apareció Tera-WURFL, una biblioteca en PHP que utilizaba como fuente de información una base de datos MySQL, en la que previamente se había introducido la información contenido en el fichero XML de WURFL. Esto nos lleva a concebir WURFL más como un conjunto de datos que como un fichero XML, que sería una sola de las posibles formas de almacenamiento.

Actualmente las API estan enfocadas a un solo método de almacenamiento. Esto lleva al problema de que los avances realizados en una de ellas en materia de rendimiento o mejora de búsqueda es ignorada por el resto. Somms.NWURFL al tener una capa de abstracción de acceso a datos es capaz de trabajar con distintas fuentes de información. La lógica de búsquedas, configuración y gestión de caché es independiente del origen de datos.

Existen dos módulos de acceso a datos programados para Somms.NWURFL:

Módulo para Miha Valencic WURFL .NET API

Este módulo trabaja directamente con el fichero XML a través de la API desarrollada por Miha Valencic. Esta API es un gran trabajo de desarrollo, también en C# 2.0, que además permite la integración de la WURFL en IIS para la identificación de dispositivos y renderizado de las páginas WAP en función a las Capabilites. Microsoft tiene un sistema de identificación de dispositivos cuya fuente de información esta totalmente obsoleta ya que no se actualiza desde hace años. La implementación de este módulo en una aplicación web permite beneficiarse tanto de las funciones de la Somms.NWURFL como de las de la API de Miha. He enviado a Miha una pequeña modificación de su API, que es sólo de una línea pero que permite utilizarla en todo tipo de aplicaciones, no solo aplicaciones web, y que permite utilizarla con la Somms.NWURFL.

Módulo para Tera-WURFL

Este módulo trabaja con la información contenida en una base de datos MySQL, aunque es fácil adaptarlo a cualquier otra base de datos ya que a su vez tiene abstraido el driver de comunicaciones. La estructura de datos es la que genera Tera-WURFL, y se implementa la lógica de Tera-WURFL para el acceso a la información.

Búsqueda de dispositivos por UserAgent

La busqueda de dispositivos a través de su UserAgent se ha diseñado siguiendo las directrices especificadas en la evolución de la WURFL. La lógica de esta búsqueda es de la manera siguiente:

  1. Se realiza una búsqueda exacta del UserAgent. Si se localiza un dispositivo con un UserAgent exactamente igual, se carga y se devuelve como resultado. Caso contrario se continúa con el siguiente paso.
  2. Se realiza una búsqueda por acortamiento de cadena, primero por tokens, y finalmente caracter a caracter con el objeto de mejorar el rendimiento. Si tiene exito se carga el dispositivo y se devuelve como resultado. Caso contrario se continúa.
  3. Se cargan módulos de búsqueda heurística, y se aplican al UserAgent y cabeceras de petición web (si existe), extrayendo toda la información posible (marca, versión de navegadores, etc…). Se devuelve un dispositivo sin identificador (ya que no ha sido identificado), pero con toda la información recopilada.

El gran peligro de los mecanismos usados en el punto 2 es el dar falsos positivos. Con el algoritmo de búsqueda por acortamiento de cadena desarrollado para la Somms.NWURFL se consigue que los falsos positivos prácticamente desaparezcan, teniendo un 100% de efectividad en dispositivos que se encuentren en la WURFL. Después de haber estado en producción durante más de un mes, tratando más de 500 peticiones diarias, solo se ha producido un falso positivo, y por un UserAgent que posteriormente ha sido incluido en la WURFL, solucionando el problema.

Los detalles están en la documentación de la biblioteca, que se publicarán en Sourceforge.NET en cuanto le den el visto bueno al proyecto.

  • qrcode link