viernes 18 de septiembre de 2009

Python en la Web Semántica

Como prometí (más vale tarde que nunca), paso a resumir en este post algunas de las ideas que presenté en la charla de "Python en la Web Semántica" en PyCon 2009 Argentina.

Todos sabemos lo que ha crecido la web en los últimos años (de hecho, no existía hace 20 años). Hoy en día sigue creciendo exponencialmente, lo que significa que hoy hay más usuarios nuevos de los que hubo ayer. ¿Qué se hizo para que esto sea posible? ¿Cuál es la receta?

En los últimos años, surgió una segunda generación de desarrollo y diseño web, conocida como web 2.0, en la que se incorporaron nuevos "ingredientes" en la forma de hacer la web. Pero hoy siguen apareciendo nuevas tendencias para desarrollar y pensar la web distintas incluso a las más recientes. Es decir que probablemente estemos viviendo la muerte de la web 2.0. Por lo tanto, más que preguntarse qué es la web 2.0, sería bueno plantearse qué fue la web 2.0 y cuáles son las nuevas formas de desarrollo web que están surgiendo.

Se podrían decir muchas cosas acerca de la web 2.0. Pero esta presentación se centra en 12 "ingredientes" de la receta que, en términos de ingeniería del software, serían 12 patrones.

  1. Information sharing
    • Web 1.0 (odio todo lo que sea "n.0" pero llamemos así al viejo paradigma de la web): "La web es una enorme fuente de información."
    • Web 2.0: "La web es una buena fuente de información en la medida que sea un buen sumidero de información." Los usuarios no sólo consumen sino que generan la información.
    • Web 3.0: Aparece una nueva dimensión: Siguen estando los usuarios y los sitios, aplicaciones y servicios web como los conocemos, pero algunos de estos servicios pertenecen a la "web semántica", una dimensión que se encarga de analizar y agregar valor a la información que fluye entre usuarios y computadoras (incluso entre sí).
  2. User-centered design
    • Web 1.0: Está centrada en servir recursos.
    • Web 2.0: Está centrada en los usuarios.
    • Ejemplos típicos: Flickr (no es una simple galería de fotos, sino que su poder está en el contenido generado por usuarios), YouTube (ídem con videos).
    • ¿Qué nos ofrece Python para desarrollar este tipo de aplicaciones web?
      • Python 3.0 = "Batteries included" (su biblioteca estándar ya provee una base muy completa para cualquier tipo de funcionalidad)
      • Python Modules = "Swiss Army Knife" (hay una gran variedad de frameworks y herramientas para todo tipo de desarrollos)
  3. Model-View-Controller Architecture
    • Web 1.0: Un sitio web es un repositorio de páginas estáticas.
    • Web 2.0: Un sitio web es una verdadera aplicación multi-capa, con estado. Un cliente (típicamente un navegador) hace un pedido a un servidor, que a través de un "route dispatcher" lo deriva a un controlador. Dicho controlador resuelve con consultas a los objetos del modelo de la aplicación (persistentes en alguna base de datos) y determina qué vista usar para mostrar los resultados que devuelve en la respuesta al cliente.
    • Python Web Frameworks: Django, Pylons, TurboGears, Google App Engine, Zope, Plone (CMS), MoinMoin (wiki), Python Paste, CherryPy
    • Algunas nuevas tendencias: La separación de las capas (especialmente vista y modelo/datos) se puede dar entre distintos servicios web. Por razones de escalabilidad, se están abandonando los motores de base de datos relacionales (RDBMS) en favor de otros orientados al almacenamiento por clave-valor, con menores posibilidades de consulta (sin joins, no transaccionales, etc.), pero más eficientes para grandes volúmenes de información, escalables y tolerantes a fallas.
  4. Participation & collaboration
    • Web 1.0: Publicación individual. "Yo pongo mi homepage personal y me ocupo de mantenerla."
    • Web 2.0: Edición colaborativa. Ventajas de varios editando el mismo documento (ejemplos: Wikipedia, blogs, Google docs).
  5. Social networking
    • Web 1.0: La web es una red de computadoras.
    • Web 2.0: La web es una red de amigos.
    • Esta idea tan simple es la que le dio grandes resultados a Facebook y Twitter.
    • Una tendencia importante en esto es el paso a la "real-time web", basada en actualizaciones instantáneas de lo que le pasa a la gente.
  6. Search & recommendation engines
    • Web 1.0: Navegar para descubrir
    • Web 2.0: Descubrir automáticamente con motores de búsqueda y de recomendación (sólo se ve el 10% del iceberg). Ejemplo: Last.fm
    • Este es un punto clave en el que seguramente trabajará la web semántica en los próximos años.
    • ¿Qué hace una web semántica? 4 cosas:
      • Integración o aggregation (recolectar datos de otros servicios)
      • Definición de ontologías (determinar un modelo de entidades y relaciones dentro de un dominio)
      • Análisis semántico (determinar qué significa la información procesada)
      • Agregado de valor (filtrado, recomendación, asociación, etc.)
    • Preguntas que surgen en el análisis semántico:
      • ¿De qué habla (cuál es el significado) de un determinado documento HTML?
      • ¿Cuál es el contenido relevante de un determinado documento HTML?
      • ¿En qué idioma está texto determinado?
      • ¿Qué palabras son equivalentes entre sí? (stemming, misma raíz)
      • ¿Se pueden inferir tags automáticamente a partir de un texto?
      • ¿Cómo se pueden eliminar palabras comunes como artículos y preposiciones? (stop words)
      • ¿Cuál es la estructura sintáctica de una oración o proposición? (part of speech)
      • ¿Cómo se puede eliminar la ambigüedad entre los distintos significados de una misma palabra?
      • ¿Es posible agregar información de contexto eficientemente?
      • ¿Cómo se puede mejorar la relación señal-ruido (signal to noise ratio) de la información que consume un usuario?
      • ¿Cómo ser pueden identificar digramas en un texto?
      • ¿Cuántas y cuáles son las categorías apropiadas para clasificar contenidos en una determinada ontología?
    • Demo de Meaningtool
  7. Folksonomy
    • Web 1.0: Taxonomy (clasificación jerárquica, conocida a priori)
    • Web 2.0: Folksonomy (clasificación por etiquetas, colaborativa, los elementos pueden pertenecer a distintos lugares a la vez, las colecciones emergen solas)
    • En cuanto a la web 3.0, ya se mencionaron varias consideraciones de clasificación de información en el punto anterior.
  8. Community & collective intelligence
    • Importancia de construir una comunidad que contribuya a la calidad del servicio. "Wisdom of crowds" (la inteligencia colectiva es mejor que la individual)
    • Ejemplo: Ratings, rankings o recomendaciones en Digg y StumbleUpon.
  9. Inter-operability & data-portability
    • Web 1.0: La única forma de consumir información de otros sitios es por HTML scraping a través de web crawlers o spiders (bots).
    • Web 2.0: Web syndication (feeds RSS, Atom, RDF, etc.), widgets, open APIs, integración de datos (aggregation). Todo servicio web 2.0 que se precie dedica gran parte de su esfuerzo a proveer una buena API.
    • Ejemplos de consumo de APIs y HTML scraping con herramientas de Python.
    • Nombres que se escuchan para la web 3.0: Microformats, RDF, OWL, SPARQL (ejemplo: DBpedia), patrón Publisher-Subscriber (ejemplo: Google Wave)
  10. Rich User Experience
    • Web 1.0: La interacción usuario-servicio se da a través de formularios, cargando nuevas páginas con cada envío.
    • Web 2.0: La interacción se da asincrónicamente (sin cargar otra página), actualizando la vista por eventos con client-side scripting (Javascript).
    • Web 3.0: Web OS? (¿Hacia una web cada vez más cercana a un sistema operativo?)
  11. Separation of content and presentation
    • Web 1.0: Cluttered HTML
    • Web 2.0: Estructura y contenido separados de la vista. Permite independencia, modularización, versatilidad, etc.
  12. Web as a Platform (Ubiquity)
    • Web 1.0: Especificaciones "propietarias", dependencia de plataforma, "browser wars"
    • Web 2.0: Estándares web, independencia de dispositivo, diseño multi-plataforma
    • Web 3.0: Está en cualquier dispositivo (computadoras con cualquier sistema operativo y cualquier navegador, cualquier teléfono celular o dispositivo "de mano", TV, auto, consolas de juegos, teléfono, etc.): Omnipresencia (ubiquity). Estos dispositivos son las ventanas o portales de acceso a la web.
    • Podríamos comparar a la web con un gran robot:
      • No es exactamente electro-mecánico
      • Entorno: El mundo (la web puede representar cualquier cosa: fotos, videos, eventos, amigos, música, lecturas, lugares, artículos de compras, etc.)
      • Sensores: Las interfaces humano-máquina, que permiten a la web captar lo que pasa en su entorno
      • Actuadores: Las interfaces humano máquina, que permiten modificar el entorno al menos indirectamente
      • Inteligencia Artificial: Mayor a medida que aparecen más y mejores aplicaciones y servicios web. A mejorar en la era de la web semántica.
      • La web, como un robot, procesa datos y responde a estímulos
      • ¿Es un sistema autónomo? ¿Es consciente de sí mismo?
      • Es tolerante a fallas
      • Es inteligente
      • Aprende
      • Evoluciona
    • Suena ilusorio, pero:
      • ¿Podríamos imaginar hace 20 años una web como la que hoy conocemos?
      • Además, ya existen aplicaciones... como Wolfram Alpha.
Conclusiones:
  • Podemos pensar la web como una gran inteligencia artificial, similar a un robot
  • La misión de la web semántica en los próximos años va a ser agregar valor a la información de la web
  • Las tecnologías no fueron lo más determinante en la evolución de la web, sino la aplicación de patrones de diseño y desarrollo web.
¡Gracias por presenciar la presentación, leer este resumen o comentar este post! :)

martes 8 de septiembre de 2009

PyCon Argentina 2009: La primera conferencia hispanoparlante de la comunidad de desarrolladores Python

El viernes 4 y sábado 5 de septiembre tuve la oportunidad de asistir a PyCon Argentina 2009, la primera conferencia en español de la comunidad de desarrolladores Python.

Debo admitir que el evento superó mis expectativas. Estuvo muy bien organizado (kudos a PyAr) y si bien nos queda mucho por aprender a los que tuvimos el honor de ser disertantes, creo que el evento te abre la cabeza y te ayuda a no perder el foco en cuanto a lo que uno puede desarrollar para uno y para los demás. Asimismo, te da un panorama de las necesidades de la comunidad de desarrolladores Python local y mundialmente.

Lo que más me gustó:
  • Haber contado con referentes como Jacob Kaplan Moss, gurú de Django (que faltó a la DjangoCon para venir a las PyCon de Argentina y Brasil), y Collin Winter, ingeniero de software de Google, en las charlas plenarias. Fueron "world-class".
  • Haber aprendido al menos algo en cada charla programada a la que fui. Especialmente algunas que me dispararon muchas ideas.
  • La modalidad de charlas relámpago. Algunas como la del corrector ortográfico en 5 minutos fueron geniales.
  • Mucha gente interesada en robots y temas de AI. ¡Es una buena señal!
  • Que PyAr sea "federal" y planifique sus próximas conferencias en Córdoba, por ejemplo.
  • Espíritu de comunidad y buena onda contagiosos.
Lo que menos me gustó (siempre hay algo):
  • Poca experiencia de algunos disertantes como yo :P En esto vamos a ir mejorando con los años.
  • Los horarios fueron bastante duros. (O a los programadores nos cuesta demasiado dejar de laburar en el horario típico de día de semana y levantarnos temprano un sábado. Depende cómo se mire.)
  • Lamento haberme perdido algunas charlas. Pero es difícil predecir si la charla realmente te va a resultar útil y además no se puede estar en todos lados.
(Nótese que nada de esto es culpa de los organizadores ;))

En el próximo post, trataré de resumir algunos de los puntos más importantes de la charla que estuvo a mi cargo, sobre "Python en la Web Semántica". Se trata de los patrones de la web 2.0 y las nuevas tendencias de la web semántica. O como estuve diciendo "marketingueramente", de la muerte de la web 2.0 y el futuro de la web como una gran AI.

La opinión de Uds. también vale. Por favor, comenten!!!