sábado, octubre 20, 2007

Informator: La práctica de SIG

El post anterior no había nacido con la idea de ser una revisión de la asignatura, sino para mostrar la práctica que realizamos en mi grupo. Como se me fue con la "crítica", vamos ahora a explicar la idea de la aplicación.

La idea inicial era hacer una típica aplicación sobre un mapa de Google (o Yahoo) Maps. Pintar algo en concreto sobre el mapa para hacer un mapa de cosas.

Lo primero que se nos ocurrió fue hacer un mapa con sitios de interés para turistas para algunas cuantas ciudades españolas. J consiguió un servicio web de Yahoo para conseguir el clima (Yahoo Weather), que nos ofrecía un listado de ciudades, por lo que no parecía necesario hacer más eleccion, simplemente había que coger ese listado y sacar de algún sitio los lugares o eventos.

El servicio Web de Yahoo no consiste más que en un RSS con información del clima dentro, de manera que conseguir lo que deseábamos (y más) era realmente fácil.

Una vez conseguido el clima ¿cómo conseguir el resto? Afrontamos la búsqueda de servicios web ya creados, listos para consumir, cuando yo me acordé de la charla de Portabilidad de Redes Sociales en Fundamentos Web y del abundante uso de microformatos de Upcoming.

Upcoming no es más que una página web en la que los usuarios dan de alta eventos que les interesan, con el objetivo de que otros los descubran y den sus opiniones. Lo interesante de Upcoming es que publica toda la información añadiéndole una capa de semántica, mediante microformatos.

Los microformatos no son más que una manera de "marcar" el HTML de las páginas web para indicar que tal cosa es un evento, tal cosa una dirección, tal cosa una descripción... Una idea muy simple pero que parece estar teniendo bastante éxito.

Si quereis probar un poco para qué sirven los microformatos, os recomiendo que os instaleis: Operator, una extensión de Firefox que permite hacer diversas operaciones con los datos detectados (te permite añadir eventos a Google Calendar, ver lugares en Google Maps, leer la licencia de este Blog...).

Los microformatos son una forma "menor" de la Web Semántica. Digo "menor" porque mucha gente considera que al no estar creado sobre un lenguaje estandarizado (RDF, por ejemplo) no se ajusta exáctamente a lo que la Web Semántica debería ser.

No obstante, en este caso los microformatos han permitido a un agente (nuestra aplicación) recorrer dichos datos y reutilizar la información, tal y como se supone que la Web Semántica ha de permitir.

ASí pues, una parte de nuestra aplicación se conecta a las páginas de Upcoming para cada ciudad y se descarga los eventos, cacheándolos en una Base de Datos propia, de donde el resto de nuestra aplicación los sacará para mostrarlos.

Tras tener la ida de los eventos de Upcoming, descubrimos 11870, web dedicada a recopilar lugares de interés en las ciudades, introducidos por los usuarios y con sus críticas.

11870, al igual que Upcoming, sirve esta información mediante microformatos, por lo que la operación se repite. Nos descargamos los lugares, los cacheamos en local y los mostramos cuando haga falta.

Así, nuestra aplicación se convierte en un conjunto de datos extraídos mediante Servicios Web y Web Semántica y mostrados, gracias a Google Maps, en el contexto de un Sistema de Información Geográfica. Todo esto gracias a herramientas de Software Libre (como son todas las bibliotecas de PHP, el parser hKit de microformatos...) que incluso hemos tenido que modificar para, entre otras cosas, adaptarlo a las peculiaridades de la red informática de la Universidad (vamos, al proxy), incluir el formato de hCalendar entre los parseables o lidiar con la heterogeneidad de Internet.

Y así creamos la aplicación más completa de todas cuantas he hecho hasta ahora en el Máster, una aplicación con capas georeferenciadas (la primera lección que mencionaba en el post anterior), que el usuario puede poner y quitar a placer, con el desafortunado nombre de Informator (el asesino de Internet, dicen algunos).

No solo me gusta la aplicación por mezclar conceptos de varias asignaturas (Web Semántica, Servicios Web, Sistemas de Persistencia, diseño en N capas...), y por haber incorporado la lección más importante de la asignatura (a mi modo de ver) sino porque mezcla los conceptos que más me atraen de la Web (colaboración, descentralización y orden dentro del caos).

Para acabar el post, recordar que no es oro todo lo que reluce. La aplicación tiene bastantes problemillas que cabría resolver si se tratase de un desarrollo serio a continuar.

Casi todos ellos tienen que ver con la naturaleza distribuida, incontrolable e impredecible, de los datos.

Por ejemplo, pocas ciudades españolas tienen eventos en Upcoming (Barcelona, Madrid, Gijón, Oviedo...) porque es una aplicación más usada en Estados Unidos y que parece copada por los usuarios a los que le gusta este tipo de aplicaciones (Web 2.0, por ejemplo).

Si bien es cierto que este problema no es técnicamente resoluble, otros si que podrían tener solución. Por ejemplo, muchos de los lugares de 11870 (o de los eventos de Upcoming) no pueden ser encontrados por la API de Google Maps, por lo que no disponemos de coordenadas y no se incluyen en la aplicación, o ciertas páginas de 11870, que parecen hacer cascar el script de PHP (y no es problema del script en sí, es que PHP.exe lanza una excepción y todo) y nos limita el número de lugares disponibles para cada ciudad.

Sin embargo, como práctica, me parece que está muy bien y muestra muchos conceptos asimilados. Lo que es seguro es que las horas invertidas al final excedieron las necesarias para la asignatura, pero este año tengo más tiempo, estoy de mejor humor y el grupo ha respondido bien. Y creo que ha valido la pena.

5 comentarios:

Anónimo dijo...

¡Hey! ¡Muy chulo el mashup! Enhorabuena :-)

Por cierto, no se si conocéis la API de 11870, quizá os solucione los problemas con los microformatos.

Un saludo.

El Aprendiz dijo...

Había visto la API de 11870, pero me hacía ilusión tirar de web semántica un rato :P

Además, cuando la descubrimos quedaba poco tiempo, y preferimos tirar con lo que ya teníamos.

El problema es que el parser de microformatos no tira de un parser de HTML, sino de uno de xml, y parece que eso le da problemas (porque de hecho es en el manejo del xml donde casca de manera irremediable...)

Unknown dijo...

Sí que te ha quedado chulo sí.

Sobre los problemas que tienes con 11870, necesitamos más pistas o no te podremos ayudar. Por otro lado, hemos estado currándonos una API (en beta) que creemos que te va a venir como anillo al dedo (a pesar de que ya puedes extraer microformatos, mejor si te lo damos ya ;).

Y sobre las direcciones de los sitios y google maps pasa por dos razones: hacemos un preproceso antes de mandar geocodificar para asegurarnos un índice más alto de acierto y por otro lado el equipo de contenidos, que intenta geolocalizar lo geoilocalizable con bastante éxito. En vez de utilizar la dirección, puedes coger las coordenadas, que también están microformateadas en las páginas de sitio.

Suerte!

El Aprendiz dijo...

Por el comentario adivino que tienes algo que ver con 11870 :P

El problema no lo puedo detallar demasiado... Sencillamente al descargarse la página (mediante CURL) y arreglarla (con Tidy) no podemos tratarla con la libreria de xml por defecto de PHP (libxml, si no me equivoco), porque al hacer asXML() PHP casca y ni control de excepciones ni logs ni nada.

Quería dedicarme a mejorar un poco el hKit parser, si queréis que os avise en caso de tener un resultado avisad.

La API la he estado mirando. Realmente ofrece mucha funcionalidad que no ofrecen los microformatos (concernientes a los parámetros de búsqueda sobre todo) así que resultaría bastante interesante buscarlo.

¿Os habéis planteado hacer la API sobre un buscador web? Quiero decir, la posibilidad de implementar un "buscador avanzado" con todas esas opciones y que los resultados lleven los susodichos microformatos (o poder acceder a un feed de donde descargar los resultados).

Y la API en PHP ¿la estais implementando? ¿O está congelada?

Lo de geolocalizar los sitios va más por los de Upcoming que por los vuestros (aunque no me había fijado en que en la página de cada sitio teníais las coordenadas).

Lo que me lleva a una pregunta que nos hicimos los chicos que desarrollamos la práctica ¿supone una gran sobrecarga todas estas peticiones GET para consumir microformatos? Aunque sea en los logs del servidor lo notareis ¿no?

Bueno, mil gracias por el post. Me ha hecho mucha ilusión.

Unknown dijo...

Efectivamente, algo tengo que ver ;)

Que te casque el tidy puede ser más o menos normal si no ha conseguido construir un xml válido que luego el parser de php se intentará tragar (y eso que intentamos hacer XHTML ;). Si te vas a poner con el hKit avísanos cuando tengas algo un poco más avanzado, siempre será algo interesante a lo que referenciar.

Para lo que quieres hacer te recomiendo de todas todas la API y te ahorrarás todos esos problemas. Y lo del buscador que comentas, pues no lo tenemos pensado a corto plazo, pero si la idea te gusta, para eso está la API ;)

Sobre lo que comentas de la sobrecarga que producen las peticiones de tipo GET, la verdad es que no se nota mucho gracias a las cachés que tenemos en marcha. Definitivamente, si hubiera 200 usuarios haciendo eso mismo a la vez se llegaría a notar, pero intentamos estar más o menos preparados.

Si quieres jugar con la API, avisa. Y si te pasas por Madrid, también y nos tomamos unas cañas. Un saludote,