Wednesday, August 29, 2007

Gmail visto por sus fans

Acabo de ver en el blog de Google un vídeo sobre Gmail creado por sus fans.
Google pidió a sus usuarios que utilizaran la imaginación para crear un vídeo que mostrase como un email viaja de una punta a otra del mundo. El resultado es impresionante:




Tened en cuenta que no era un concurso y por lo tanto no había ganador ni premio. Bueno, quizás se puede considerar un premio un minuto de fama por aparecer en un vídeo en el blog de Google. Aún así, recibieron más de 1.100 vídeos. Lo cual demuestra que cuando se proponen retos o misiones interesantes, se puede encontrar gente motivada para hacerlos sin recibir necesariamente una compensación económica a cambio. Este razonamiento no encuentra su lugar en una cultura capitalista en la que la que el objetivo es el intercambio de bienes y servicios por capital, pero quizás sea una opción que se desarrolle con más fuerza en el futuro. ¿Qué pasaría si todo el mundo tuviese un sueldo asegurado y se le permitiese dedicarse a su pasión sin tener que preocuparse por el ganar dinero para poder manternerse? Probablemente el hombre sea demasiado ambicioso para conformarse con eso ...

Wednesday, August 22, 2007

Microsoft lanza Tafiti, un buscador con un diseño espectacular ... NO FUNCIONA EN GNU/LINUX!

Leo en Techcrunch que Microsoft acaba de lanzar un nuevo servicio de búsqueda basado en su plataforma Silverlight. Más que nada es un experimento para probar otro tipo de interfaz de búsqueda e imagino que de paso hacer un poco de publicidad de su nuevo producto. Como todo usuario de Internet compulsivo que se precie, le he dado al link para echarle un vistazo y





No es una "blue screen of the death" típica de MS Windows pero casi.

Me he puesto a indagar un poco sobre la plataforma y el problema es que está basada en .NET y como no hay una versión .NET de Microsoft para GNU/Linux (o cualquier otra Sistema Operativo libre) nos quedamos fuera de juego. Una vez más Microsoft se olvida de los usuarios de los Sistemas Operativos libres más populares. Parece ser, sin embargo, que Microsoft va a ayudar a Miguel de Icaza y su equipo en Novell a desarrollar una versión basada en Mono (una versión del entorno .NET libre y además realmente multiplataforma) de Silverlight: Moonlight. Lo mejor de todo es que Moonlight incluirá un entorno de desarrollo de aplicaciones y no sólo el entorno de ejecución. De esta manera los usuarios de todas las plataformas soportadas por Mono podrán desarrollar aplicaciones basada en Moonlight y que funcionarán en Silverlight también.

El equipo de desarrolladores de Moonlight todavía están trabajando en los módulos necesarios pero ya han publicado algunas capturas de pantalla.

Y aunque todavía les debe faltar bastante para llegar a una implementación completa, también están disponibles las instrucciones para bajarse las fuentes en el estado actual, compilarlas y probar las aplicaciones Silverlight en Firefox. Si alguien se anima que nos cuente si ha conseguido instalarlo y qué le ha parecido.

Lo curioso de todo esto es que Microsoft está intentando beneficiarse de la comunidad del Software Libre para conseguir una mayor distribución de su plataforma. Hoy en día la mayoría de aplicaciones web corren en GNU/Linux por lo que la mayoría de desarrollos web utilizan tecnologías disponibles en GNU/Linux: LAMP, RoR, Python, Perl, etc.

Yo creo que hubiese sido mucho más rentable para Microsoft hacer una versión libre y gratuita del entorno de ejecución de la plataforma .NET y Silverlight y crear un entorno de desarrollo avanzado de pago. Yo creo que así habrían conseguido que ambos fuesen más utilizados, ya que la comunidad Open Source se habría encargado de hacer evolucionar el entorno para adaptarlo a las necesidades de la mayoría, la utilización habría sido mayor y por lo tanto también se habrían vendido más entornos de desarrollo y contratos de soporte. Claro que Microsoft siempre ha seguido su filosofía de venta de software propietario y las cosas le van muy bien de momento aunque algunos no se muestren muy convencidos, así que tampoco deben de ver ninguna razón para cambiar. Veremos que les depara el futuro.

Monday, August 13, 2007

Rake y tareas de mantenimiento

Rake es una excelente herramienta que nos permite automatizar operaciones usando código Ruby y Rails. Salvando algunas diferencias, Rake es para ruby lo que make para C/C++ o Ant para Java.
Permite definir un serie de operaciones y asociarlas a una etiqueta. De manera que podemos ejecutar la secuencia simplemente escribiendo rake mi_etiqueta.

En nuestro último proyecto, hemos creado un fichero Rake con una serie de operaciones de mantenimiento. Entre otras, una tarea para borrar las sesiones que han expirado, y por otro lado una tarea para producir un informe con estadísticas de la información guardada en nuestra base de datos.

Las tareas rake en un proyecto Rails se encuentran en el directorio lib/tasks. En nuestro caso crearemos el fichero mantenimiento.rake en ese directorio.

La definición de una tarea rake es muy sencilla e incluye una descripción y la tarea en sí:


desc "Descripción de la tarea"
task :mi_tarea do
##Secuencia de operaciones
end

Tarea para eliminar las sesiones no utilizadas

En nuestro proyecto utilizamos la base de datos para almacenar las sesiones de usuario. Para activar esta opción de Rails tan sólo hay que editar el fichero config/environment.rb y cambiar el valor de la variable config.action_controller.session_store a :active_record_store. Posteriormente debemos ejecutar rake db:sessions:create. Como podéis ver utilizamos una tarea rake definida por Rails para la creación de la tabla que guardará las sesiones. No olvidés de dar el valor correcto a la variable de entorno RAILS_ENV si no trabajáis en el entorno por defecto, que es development.

Ahora concentrémonos en la tarea rake:


desc "Borrar de la base de datos la sesiones que han expirado ."
task :borrar_sesiones_expiradas => :environment do
puts "Removing old sessions from #{ENV['RAILS_ENV']} database" unless ENV['SILENT']
CGI::Session::ActiveRecordStore::Session.delete_all("UNIX_TIMESTAMP(UTC_TIMESTAMP()) - UNIX_TIMESTAMP(updated_at) > 3600")
end

Esta tarea rake simplemente borra todas las sesiones que no han sido actualizadas en la última hora. Para acceder a un modelo ActiveRecord desde una tarea rake debemos referenciar el modelo CGI::Session::ActiveRecordStore::

Tarea para crear un informe con estadísticas


desc "Informe de estadísticas"
task :informe => :environment do
interval = (ENV['REPORT_INTERVAL'] || 4).to_i
interval = 4 if interval == 0
puts "Número de canales #{CGI::Session::ActiveRecordStore::Channel.count}"
puts "Número de usuarios #{CGI::Session::ActiveRecordStore::User.count}"
puts "###Usuarios registrados en las últimas #{interval} hours"
users = CGI::Session::ActiveRecordStore::User.find(:all,
:conditions => "UNIX_TIMESTAMP(UTC_TIMESTAMP()) - UNIX_TIMESTAMP(created_at) < #{interval}*3600", :order => "created_at asc")
if users.size > 0
puts "id | email | nickname | creado el"
users.each {|user| puts "#{user.id} | #{user.email} | #{user.nickname} | #{user.created_at.iso8601}"}
else
puts "Ninguno"
end

puts
puts
puts "###Canales creados en las últimas #{interval} horas"
channels = CGI::Session::ActiveRecordStore::Channel.find(:all,
:conditions => "UNIX_TIMESTAMP(UTC_TIMESTAMP()) - UNIX_TIMESTAMP(created_at) < #{interval}*3600", :order => "created_at asc")
if channels.size > 0
puts "id | propietario | nombre | impressiones | crt | blog url | creado el"
channels.each {|channel| puts "#{channel.id} | #{channel.user.email} | #{channel.title} | #{channel.impressions_count} | #{"%.2f" % (channel.impressions_count > 0 ? (channel.clicks_count*100).quo(channel.impressions_count) : 0)}% | #{channel.url.url} | #{channel.created_at.iso8601}"}
else
puts "Ninguno"
end

puts
puts
puts "###Canales más populares###"
channels = CGI::Session::ActiveRecordStore::Channel.find(:all,
:order => "impressions_count desc",
:limit => 10)
if channels.size > 0
puts "id | propietario | nombre | impressiones | crt | blog url | creado el"
channels.each {|channel| puts "#{channel.id} | #{channel.user.email} | #{channel.title} | #{channel.impressions_count} | #{"%.2f" % (channel.impressions_count > 0 ? (channel.clicks_count*100).quo(channel.impressions_count) : 0)}% | #{channel.url.url} | #{channel.created_at.iso8601}"}
else
puts "Ninguno"
end

end

Para ejecutar las tareas rake, hay que ir al directorio raiz de nuestra aplicación rails y ejecutar rake mi_etiqueta:
rake borrar_sesiones_expiradas
rake informe

Para el entorno de producción:
RAILS_ENV="production" rake borrar_sesiones_expiradas
RAILS_ENV="production" rake informe


Sunday, August 12, 2007

La personalización de Internet

Una de las razones del éxito de Internet es la utilización de hypertextos, o lo que hoy conocemos como enlaces. Los enlaces, además de facilitar la navegación al lector, permiten conectar unas páginas web con otras. Esta es la razón por la que los anglosajones conocen Internet como "the Web", que es una interconexión de elementos, como por ejemplo una tela de araña. Siguiendo con el símil, los buscadores de páginas web como Google utilizan un programa para recorrer todos los elementos de la red (las páginas) que se conoce como "Spider" (araña).


Sin embargo, con la gran cantidad de páginas que existen, resulta imposible incluir en una página enlaces a todas las páginas de Internet con las que guarda relación. Es necesario, pues, un sistema automático capaz de determinar esas relaciones. Además, esas relaciones deberían calcularse en función del lector, por ejemplo de su lengua, cultura, sus gustos, hábitos de lectura, etc. Así nos dirigimos hacia un modelo en el que cada usuario tiene su propia visión del tejido compuesto por las diferentes páginas con el objetivo de minimizar el tiempo necesario para entrontrar la información que busca.


Desde hace ya un par de años, podemos observar una tendencia a la personalización de los contenidos ofrecidos por las diferentes páginas. Los métodos más usados son la personalización basada en la popularidad y la personalización basada en los hábitos y gustos del usuario.

La personalización basada en la popularidad

Este es el modelo más simple y consiste en mostrar al usuario los contenidos que han tenido una mejor acogida por parte de la comunidad. Es el modelo utilizado por servicios como Menéame o Techmeme. El primero de ellos utiliza un algoritmo que se utiliza entre otros parámetros el número de votos y la fecha de publicación del contenido. El segundo utiliza un método completamente automático que se basa en el análisis del número de enlaces entrantes a una noticia así como su fecha de publicación. Es decir, la popularidad la da el número de veces que la noticia es citada en otros medios.

Existen evoluciones posibles de este modelo que utilizan el concepto de "amigo" en el cálculo de la popularidad. Un usuario del servicio establece enlaces con otros usuarios del mismo servicio que pasan a formar parte de su "círculo de amigos". Al presentarle los contenidos a un usuario, en el cómputo de los votos se da más importancia a los votos realizado por "amigos" de este usuario.

La personalización basada en los hábitos y gustos del usuario

Este modelo es mucho más complejo. Existen hoy en día varias alternativas para su aplicación.

Una alternativa es el análisis de patrones de comportamiento. Se traza el comportamiento (la navegación realizada por el usuario a través de los contenidos) de todos los usuarios del sistema y se extraen patrones de comportamiento que permite agrupar usuarios afines. De esta manera, se puede recomendar a un usuario contenidos que han sido bien valorados por usuarios afines. Un ejemplo sencillo: supongamos que tenemos 1000 usuarios de nuestro sistema. El usuario X ha visitado las páginas p1, p2, p5, p10 y p25. Supongamos también que identificamos en nuestras trazas 50 usuarios que han visitado cuatro de las páginas visitadas por el usuario X y además han visitado la página p14. En este modelo, es bastante probable que el usuario X esté interesado por la página p14. Tened en cuenta que no se analizan para nada los contenidos, tan sólo los patrones de navegación. Este método es utilizado por Aggregate Knowledge entre otros.


Otra alternativa es el análisis semántico de los contenidos para proponer contenidos similares. En este caso no se utilizan los patrones de navegación, tan sólo el hecho de que si estamos leyendo una noticia sobre el resultado de las elecciones municipales en Barcelona, es probable que también nos interesen otras noticias de actualidad sobre las elecciones municipales y/o Barcelona. Así extrayendo los conceptos que describen los diferentes artículos leídos por el usuario, se podría construir un perfil de sus intereses y proponerle las nuevas noticias que vayan apareciendo ordenadas según sus preferencias.

En rollSense utilizamos la extracción de conceptos para mostrar artículos similares al que el usuario lee en un momento determinado, lo que permite mostrar noticias relacionadas. rollSense incluye además un nivel suplementario de personalización ya que permite escoger las fuentes de las que provienen las noticias. Podríamos extender rollSense para trazar todos los artículos que son accedidos por un usuario y utilizar los conceptos extraídos para crear un perfil con sus intereseses.

Un método quizá más efectivo sería el resultado de combinar las dos alternativas descritas anteriormente. De esta manera se podría recomendar contenido bien valorado por otros usuarios con un perfil de navegación similar pero guardando relación con los intereses del usuario o con el artículo que está leyendo en un momento dado.


Sin embargo, todos estos modelos se basan en un factor muy a tener en cuenta: la conservación de la información sobre los hábitos de navegación y los gustos de los usuarios de Internet. La conservación de esta información atenta contra la privacidad de las personas. De igual manera que la ley prohibe hacer fotos de la vida privada de una persona, también debería estar prohibido guardar información sobre los hábitos de navegación de las personas, lo cual también forma parte de su vida privada. Aún está por ver como se solucionará este problema. Este artículo ejemplifica muy bien las dudas que la privacidad en Internet genera.

Thursday, August 2, 2007

Los 50.000 blogs más populares ingresaron 500 millones de dólares en 2006

Leo en TechCrunch que, según un estudio de la Universidad de Tejas y Chitika, los 50,000 blogs más populares generaron 500 millones de dólares de cifra de negocio en 2006. Lo que siginifica una media de 10.000 dólares por blog.


El estudio está basado en un análisis de red de publicidad de blogs de Chitika que incluye 12,000 de ellos y haciendo estimaciones basadas en su popularidad según la clasificación de Technorati.


El análisis destaca además que los 500 millones de dólares de cifra de negocios total de los 50,000 blogs más populares se reparte de la siguiente manera

  • el 1% más popular de los blogs contribuyeron un 20%, o 200.000 euros por blog de media.
  • el 5% más popular de los blogs contribuyeron un 50%, o 100,000 euros por blog de media.
  • el 10% más popular de los blogs contribuyeron un 80%, o 80,000 euros por blog de media
  • el 15% más popular de los blogs contribuyeron un 90%, o 60.000 euros por blog de media.

Vemos que el 15% de los blogs generaron suficiente dinero para pagar a una persona y los costes de alojamiento.


Por otro lado, el 85% restante, 42.500 blogs, tan sólo contribuyó en un 10% a la cifra de negocios y generaron un total de 50 millones de dólares. Así, cada uno de ellos generó alrededor de 1175 euros de media durante todo el año 2006. No sé lo que os parece a vosotros, pero a mi me parece una cifra irrisoria.


Si tenemos en cuenta que según Tecnorati hay alrededor de 35 millones de blogs activos, el análisis se basa en un 0.14% de los blogs existentes hoy en día, o lo que es lo mismo un analizado un 1/700 de los blogs activos hoy en día. La duda que me queda es cuánto es capaz de generar la "longtail" de los blogs y la cifra de negocios total. Estas cifras son importantes para determinar los límites de crecimiento de un servicio que se instala en blogs y genera dinero a través de ellos.


Habría sido interesante que en el estudio se hubiesen añadido estimaciones del número de páginas vistas en cada blog. Esto nos habría permitido tener una estimación del dinero generado por cada visita y podría haber sido un referente para los propietarios de un blog que les permitiese conocer el potencial económico de su blog.


Podéis ver el documento a continuación: