martes, 16 de junio de 2009

Spam: un problema no deseado

Hace unas semanas recogí mi primera camisa “made in Boden”. Para los que no la conozcan, Boden es una camisería con un proceso de producción que permite tener camisas a medida con precios similares a las pret-a-porter. Además, las medidas de los clientes quedan registradas en su base de datos lo que facilita las siguientes compras, incluso pudiéndolas hacer por internet.

Días antes recibí un mail en el que me avisaban que mi camisa estaba lista y me invitaban a pasar a retirarla. Este mail apareció marcado como spam en mi cuenta Gmail.

Cuando en Chilevisión abrimos nuestro sitio web al registro de usuarios, descubrimos que un pequeño número de ellos no era capaz de completar el proceso porque no recibía el correo de confirmación que nuestro sistema le enviaba. Como todos vosotros habréis experimentado, este procedimiento de registro es el habitual en cualquier sitio web y nos sirve para verificar que el correo electrónico de quien se registra es correcto y que, efectivamente, su propietario quiere registrarse en nuestro sitio.

Cuando comenzamos con el desarrollo de la red social MITIU.com nos tomamos muy en serio este problema. En chilevision.cl podemos subsistir con un pequeño porcentaje de errores en el registro de usuarios e incluso podemos gestionarlos manualmente advirtiendo en el proceso de registro a nuestros futuros usuarios de esta posibilidad. Pero en una red social el registro de usuarios y la comunicación con ellos mediante el email son procesos claves, así que decidimos afrontarlos.

Para la gestión de la cuentas de correo @mitiu.com optamos por utilizar la robusta, amigable y gratuita plataforma Gmail. Las tareas de mantenimiento son inexistentes: todo lo que un usuario puede necesitar, como el cambio o la recupración de claves, es “do it yourself”. La única limitación la encontramos en el número de mensajes que un usuario puede enviar al día: 500. Este número es suficiente para un usuario normal, pero no para la gestión de los correos generados por una red social. A los enviados para la creación de nuevas cuantas hay que añadir los que informan sobre la actividad de la red. Para procesar estos mensajes necesitábamos nuestro propio servidor de correo.

Optamos por qmail por su sencillez y seguridad. Una vez instalado, lo configuramos para que sólo enviase correos originados en MITIU.com. Finalmente ajustamos el registro SPF de nuestro DNS.

Las primeras pruebas las realicé con la ayuda de Nacho y sus herramientas de análisis de spam y DNS. Todo parecía ir bien hasta que detecté que ningún correo enviado a cuentas de Yahoo! era admitido por sus servidores de correo. MITIU.com se encuentra alojado en la “nube” de Amazon y ningún correo proveniente de dicha plataforma es bienvenido, al menos, por los servidores de Yahoo!

Este es un problema que Amazon aún no ha resuelto: cualquiera con una tarjeta de crédito puede poner en marcha una máquina en su “nube” en cuestión de minutos y utilizarla para un envío masivo. O peor aún, la gran cantidad de máquinas corriendo en la “nube”, muchas de ellas sólo para pruebas y no configuradas de manera segura, hacen de Amazon un apetitoso objetivo para los spammers que "abusan" de sistemas de terceros cuando realizan sus envíos. La solución adoptada por Yahoo!: no permitir ningún mail cuyo origen sea Amazon.

Descartado nuestro propio servidor, el siguiente paso fue encontrar un proveedor de servicios de correo fiable y con la suficiente reputación como para confiarle todo el tráfico de emails generado por nuestra aplicación. Lo habitual es encontrar proveedores que ponen a disposición de todos sus clientes un servidor de correo. La capacidad de envío está garantizada pero la fiabilidad... Se corre el riesgo de que un mal uso del servicio por parte de un cliente afecte a la reputación de los correos enviados por el resto y sin arte ni parte encontrarte con tu servidor de correo en una lista negra.

La empresa Sailthru ofrece un servicio, triggermail, orientado a evitar esta situación. A diferencia de los descritos anteriormente, triggermail no da acceso directo a un servidor de correo. Los envíos se realizan accediendo a un servicio web. Todo mail que salga desde su aplicación debe incluir un texto y un enlace que permita al receptor avisar de que no quiere recibir más correos del remitente. Este enlace apunta a la plataforma de triggermail, que procesa la petición e informa a la aplicación remitente del mensaje. Si por error o mala intención mi aplicación trata de enviar un mensaje a un usuario que indicó que no quería saber nada más de mí, triggermail no lo enviará. De esta forma triggermail cuida de los destinatarios de los mensajes que salen desde su plataforma, protegiendo la reputación de la misma evitando caer en una lista negra. A su vez, cuida a sus clientes de posibles errores o usos indebidos realizados por otros clientes.

El servicio, además, permite priorizar unos mensajes sobre otros para el hipotético caso de que nos encontrásemos con saturación en el servicio. En el caso de MITIU.com, por ejemplo, las invitaciones que envían los usuarios registrados a sus amigos tienen una prioridad mucho menor que los mensajes de verificación de mail que se envían en el proceso de registro. También es de destacar el completo sistema de estadísticas con información sobre número de mensajes enviados, avisos de spam, rebotes producidos por direcciones erróneas, casillas de correo con problemas,... Un último detalle a destacar: para su contratación realizan una serie de comprobaciones "manuales" con idea de conocer quién es su nuevo cliente.

Aunque lo habitual sea ver el spam como un problema del receptor, quienes queremos comunicarnos por mail con nuestros usuarios de manera lícita tenemos que hilar muy fino con nuestros desarrollos si no queremos ser confundidos con él.

martes, 12 de mayo de 2009

La revolución del open source

"La estructura de las revoluciones científicas" (Thomas S. Khun, 1962) es un libro sobre historia y filosofía de la ciencia. En él se explica cómo la evolución de las ciencias se produce en forma de revoluciones que suceden a crisis profundas en un campo científico, obteniendo como resultado una nueva visión y entendimiento de dicho campo.

Su lectura me la recomendó Robin, y por ello llegó a mis manos, para aprender a situarse frente al continuo cambio que se experimenta en el mundo laboral, estableciendo un paralelismo con los cambios producidos en la ciencia a lo largo de su historia.

Uno de los puntos que encontré más interesante fue el hecho de que las revoluciones no se dan en un único punto geográfico (país, universidad o centro de estudios) sino que suceden de manera paralela en varios de los lugares donde se estudia el campo científico afectado.

Conversando acerca de esto con mi compañero Mario, descubrí un fenómeno similar en lo que se refiere a las diferentes plataformas open source que he ido utilizando a lo largo de mi carrera profesional:

Zunibal, año 1998: por aquel tiempo me encontraba desarrollando sencillas aplicaciones web en lenguaje C, lo que llamábamos "cegeis". El desarrollo y depuración era un proceso lento y engorroso. Programar sobre emacs; compilar con gcc; ftp al directorio cgi-bin del servidor apache; probar con Netscape; internal server error. Vuelta a empezar. Y qué decir de la integración de código HTML. Otra odisea. Pero aquel año se publicó PHP 3, la primera versión del popular lenguaje de programación open source (aunque se trate de la versión número 3 las anteriores no eran un lenguaje propiamente dicho) . PHP llegó para reducir la complejidad y los tiempos de desarrollo y para facilitar la separación del código de la parte visual, lo que además contribuyó a que los diseñadores entrasen de lleno al mundo internet.

K 2000, año 2002: sitios webs dinámicos, gestores de contenidos, e-commerce... En definitiva, bases de datos puestas en la web donde un administrador sin conocimientos técnicos accedía a una dirección privada y ejecutaba altas, bajas, modificaciones y consultas. Podían ser proveedores, clientes, zapatillas, artículos de subastas,... El proceso siempre era el mismo. Modelar la base de datos, crearla en mysql y adaptar unos cuantos scripts que realizaban las mencionadas operaciones pero sobre la nueva base de datos. Así proyecto tras proyecto. En aquella época otros desarrolladores como yo, atrapados en el día de la marmota, diseñaban y desarrollaban los primeros frameworks open source orientados a resolver este atasco: Ruby on Rails, Zend, Cake... Por desgracia yo tardé algún tiempo más en subirme a esta revolución. Parte de culpa la tiene mi amigo Alex, evangelizador de la filosofía open source, a quien le consulté sobre este problema y no pudo abrirme los ojos en aquella oportunidad. No fue hasta tiempo después que comencé mis primeros desarrollos sobre Cake.

Chilevision, año 2008: después de situar nuestro sitio web entre los más visitados de Chile alcanzando el millón de visitantes únicos mensuales, era el momento de desarrollar nuevos productos para seguir creciendo. Ese mismo año Facebook se masificaba en Chile por lo que tomamos la opción de desarrollar nuestra propia red social. El resultado vio la luz al final del primer trimestre de 2009 bajo el nombre de miTiu.com. La plataforma open source utilizada fue Elgg, coincidiendo con su versión 1.5, optimizada ya para un tráfico elevado. El tiempo de puesta online fue mínimo, tan solo el necesario para integrar el diseño, desarrollar un par de funcionalidades no incluidas y configurar el hosting sobre Amazon Web Services. Ahora es turno de captar usuarios y decidir qué nuevas características queremos integrar en la plataforma.

Esta contemporaneidad que se ha dado entre los proyectos en los que he trabajado y el desarrollo de las plataformas open source con las que he ido desarrollándolos valida el trabajo que he realizado. Además esta conclusión que saco mirando hacia atrás en el tiempo se puede aplicar hacia el futuro, como una regla de validación de nuevos proyectos: ¿qué hay en el mundo open source que esté relacionado con el nuevo proyecto que voy a abordar?

Y hablando de futuro, en cuanto vuelva a Chile tengo que revisar la última recomendación de Alex: Drupal + CCK.

domingo, 22 de marzo de 2009

Incremento en el performance de la nueva portada de chilevision.cl

A primeros de marzo publicamos la nueva portada del sitio web chilevision.cl. Aprovechamos los meses de verano para hacer un trabajo intenso en el nuevo diseño cuyo resultado está a la vista.

Durante la etapa de implementación probamos por primera vez una serie de técnicas dirigidas a mejorar la rapidez de carga y despliegue de los contenidos en los navegadores de nuestros usuarios. Viendo los buenos resultados obtenidos continuamos aplicando modificaciones durante los primeros días al aire, consiguiendo ligeras mejoras que se fueron sumando. El resultado obtenido hasta el momento es objetivamente cuantificable y nos sitúa muy por encima de nuestra competencia.

Cuando un equipo técnico se propone mejorar la velocidad de carga de un sitio web lo habitual es que sus miradas se dirijan a los recursos asignados a sus servidores (hardware, software, ancho de banda,...). En chilevision.cl no éramos una excepción hasta que navegando por el canal tecnológico que tiene Google en Youtube, Google Tech Talks Channel, di con un video en el que el Exceptional Performance Team de Yahoo! exponía al personal de Google una serie de reglas y técnicas que ellos seguían para mejorar los tiempos de carga de sus páginas. Es cierto: ¡un equipo de Yahoo! explicando sus técnicas de mejora de rendimiento en las instalaciones de Google!.

Este equipo lleva trabajando en Yahoo! desde el año 2004 analizando y cuantificando el perfomance de sus aplicaciones web. En sus análilis han identificado que el tiempo que toma una página web en desplegarse en el navegador de un usuario está distribuido entre un 5% en el lado del servidor (backend) y un 95% en el lado del cliente (frontend). Este sorprendente resultado deja claro que los esfuerzos en mejorar el performance deben dirigirse al frontend, todo lo contrario de lo que habíamos estado haciendo hasta la fecha.

Trabajar en la mejora del backend es costoso en tiempo y recursos. Los resultados son complejos de analizar. Las técnicas a seguir dependen de la tecnología que se esté utilizando. La información deducida en los análisis no es extrapolable a otras infraestrucutras. Y resulta que los resultados obtenidos sólo afectan a un 5% del rendimiento.

Todo lo contrario sucede cuando se trabaja en la mejora del frontend.
  • Es barato: los cambios a aplicar se realizan con los recursos ya existentes. Son sencillos y se pueden plantear desde el inicio de un proyecto sin que retrasen su desarrollo
  • Los resultados obtenidos se pueden extrapolar a cualquier otro proyecto web. Yahoo ha publicado sus resultados en forma de 34 reglas a seguir agrupadas en 7 categorías
  • Las mejoras son cuantificables con la herramienta YSlow, un plugin para el navegador Firefox que evalúa el perfomance de cualquier sitio web asignándole una puntuación entre 0 y 100 en función del cumplimiento de las reglas mencionadas anteriormente

Cuando comenzamos las pruebas internas de la nueva portada la calificación obtenida por YSlow era de 38 puntos. En ese momento ya estábamos utilizando algunas de las reglas: contábamos con un dominio dedicado a los elementos estáticos, habíamos utilizado imágenes sprite para todos los fondos, una parte de nuestros archivos JavaScript se cargaban al final de la página y nuestros css estaban correctamente desarrollados.

Proseguimos aplicando reglas, unificando y minimizando archivos JavaScript, llegando hasta una puntuación de 49. Finalmente comprimimos los archivos ASCII y aplicamos técnicas de caché a los archivos JavaScript, llegando hasta la puntuación actual de 58 puntos.

Aún nos encontramos lejos de los 96 puntos que marca la portada de Yahoo!, pero nos encontramos por encima de competidores directos como  canal13.cl (38), beta.canal13.cl (35), tvn.cl (33), emol.com (34), latercera.com(33) y terra.cl(28).

Nos queda camino por recorrer en busca de los 100 puntos y espero informar a medida que obtengamos mejoras en la puntuación. Pero sin olvidar que a finales del año 2008 alcanzamos el millón de visitantes únicos mensuales y nuestro objetivo es superarlo ampliamente, por lo que el trabajo de mejora en nuestros servidores es, además de estimulante y desafiante, algo imprescindible en nuestro desarrollo. Seguro que escribiré sobre ello.