El problema con Twitter es Ruby On Rails

Aunque mucha gente lo sospecha, creo que nadie se atreve a decirlo publicamente por temor a la ola de críticas, pero a la luz de las evidencias, al parecer los problemas de escalabilidad de Twitter estan directamente relacionados con el framework que se utilizó para su desarrollo Ruby On Rails, que ha tenido tanto momentum actualmente.

Por qué digo ésto, pues por el post que he leído el día de hoy en el blog "Datawocky" de Anand Rajaraman, el artículo en cuestión tiene un título bastante descriptivo "SMS Gupshup de la India tiene tiene tres veces más usuarios que Twitter y sin caídas". Rajaraman, tiene ciertamente una visión muy próxima a dicha empresa de la India, pues está en contacto con los fundadores de la misma, y como dice en su post, las estadísticas muestran de que hay algo malo con Twitter, aquí las comparaciones:

  Twitter SMS Gupshup
Número de Ususarios: más de 1 millón 7 millones
Mensajes enviados diariamente: 3 millones más de 10 millones

Lo más sorprendente es que tanto SMS Gupshup y Twitter usan servidores con aquitecturas x86, corriendo Linux y usando MySQL como el motor de base de datos. Pero a diferencia de Twitter, SMS Gupshup usa una arquitectura de tres capas con un servidor de applicaciones JBoss entre el servidor de base de datos y el servidor web.

Para aquellos que no lo sepan JBoss corre sobre Java, no precisamente uno de los lenguajes más veloces para desarrollar aplicaciones, otros Start-up usan también Linux/MySQL y han podido escalar bien sin problemas, es más AdSense corre sobre servidores x86 y usa MySQL como DB, y sirve literalmente miles de millones de páginas diariamente. La pregunta es entonces qué es lo diferente en Twitter, la respuesta es simple y evidente Ruby On Rails (RoR).

Buscando en Google sobre malas experiencias con Ruby On Rails, encontré un artículo de Derek Sivers, titulado "7 razones por las que volví a PHP luego de 2 años con Ruby". Es un largo y detallado artículo publicado en Septiembre del año pasado en O’Reilly, básicamente explica que uno de los problemas con RoR es que requiere mucho más hardware para servir el mismo tipo de tráfico que un servidor LAMP corriendo una aplicación equivalente.

Es más encontré también un post en el popular blog de tecnología TechCrunch, titulado "Twitter dijo estar abandonando Ruby On Rails", en dicho post escrito por el mismo Michael Arrington, se puede leer lo siguiente: "Hemos escuchado de múltiples fuentes que: después de más de dos años de un muy notorio problema de escalabilidad, Twitter esta planeando abandonar Ruby on Rails como su framework web e iniciaría un desarrollo desde cero con PHP o Java (otra alternativa sería permanecer con el lenguaje de programación Ruby y abandonar el framework Rails)".

En el mismo artículo de Arrintong, se menciona que otros websites que usan RoR son Scribd, Hulu y  la popular aplicación Facebook Friends For Sale. Ciertamente RoR es un framework controversial, muchos desarrolladores dicen que tiene fallas estructurales de diseño que lo hacen imposible de escalar, e incluso el mismo desarrollador de Mongrel, el webserver de Ruby On Rails, Zed Shaw publicó un post en su blog titulado "Rails es un Gueto", luego de abandonar la comunidad de RoR.

Al parecer todo apunta a RoR como una de las razones de los problemas que afronta Twitter, claro cuando el website no es muy visitado, y se tiene suficiente dinero para comprar abundantes servidores, RoR puede seguir operando, pero para aplicaciones web muy populares al parecer RoR es una mala elección. Espero que los que esten haciendo uso del framework actualmente no se sientan ofendidos, pero he tratado de ser lo más imparcial posible.

Blogger extremo

Ya he comentado en un post anterior mi idea de tratar de mover éste blog, que actualmente esta corriendo sobre un WordPress, hacia Blogger, la muy popular plataforma de blogging de Google. Las razones que presenté eran básicamente dos: escalabilidad y disponibilidad.

Escalabilidad, es la propiedad de poder atender un tráfico creciente sin que el servidor colapse. Disponibilidad, es la propiedad de tener el blog disponible 24/7 (24 horas del día, 7 días a la semana). Usando Blogger uno consigue esas dos valiosas características, que no tenemos al usar un servidor propio corriendo WordPress, aunque hay otras que ganamos a cambio.

La principal ventaja de tener nuestro blog, hosteado en un sevidor independiente es que podemos tener nuestro propio nombre de dominio (lo cuál nos da identidad propia), mostrar nuestro propio favicon (tambien nos da identidad propia), y finalmente nos liberamos de la odiada barra de navegación de Blogger, que puede distraer a nuestros lectores llevándolos a otros blogs, y que finalmente le dice a nuestros lectores que estamos en un servicio gratuito, lo que para muchos visitantes puede ser sinónimo de baja calidad, aunque eso no sea cierto para nada.

Pues bien las razones anteriores ya no son motivo para salir de Blogger, he estado experimentando y he levantado un blog en Blogger (http://tvperuana68.blogspot.com), que es accesible usando un dominio propio http://www.tvperuana.com/, que tiene un favicon propio y además no muestra la odiosa barra de navegación de Blogger, todo con simples cambios en el control panel.

Otra ventaja que descubrí al hacer la creación del blog en Blogger, es que automáticamente el blog es indexado por los principales directorios como Technorati y Google lo indexa más fácilmente, por ejemplo el blog recién tiene 1 día de creado y el PR (Page Rank), ya es de 2.

La parte más complicada actualmente es el cambio del favicon, ya que no hay muchos servicios gratuitos que nos permitan subir un favicon que sea luego públicamente accesible a través de la web, yo lo he resuelto temporalmente usando uno de mis servidores, pero se me ha ocurrido desarrollar una aplicación en GAE (Google App Engine), que permita a las personas subir un favicon y luego acceder a él a través de un URL.

No se si valdría la pena escribir un tutorial expliacando como hacer ésta personalización de un blog en Blogger, pues a lo largo de diversos post he ido describiendo como hacer los cambios, aunque siempre es bueno tener un sólo documento que consolide todo, esperaré los comentarios para ver si vale la pena hacer dicho Howto.

Por cierto el Howto de cómo integrar CodeIgniter con el API de Blogger no ha sido visitado, lo cuál me lleva a pensar de que no hay mucho interes sobre ese tema, pero al menos para mi si es importante porque yo estoy con miras a migrar mi blog hacia Blogger y cómo dije antes, quiero tener siempre un WordPress sincronizado en caso de que las condiciones de servicio de Blogger cambien (Google se vuelva malo). No puedo con mi genio como todo SysAdmin soy demasiado paranoico.

Herramienta gratuita para generar templates de Blogger

Si Ud. es un usuario de Blogger, no le gustan los templates disponibles y tiene suficiente tiempo para hacer el suyo propio, a lo mejor le puede interesar PsycHo, una herramienta gratuita que le permite crear sus propios templates en Blogger. Lo mejor de todo con PsycHo es que no requiere que sepamos HTML o CSS todo es completamente gráfico y basado en menus, si puede hacer click puede utilizar ésta herramienta.

Practicamente todos los elementos del template se pueden personalizar. Por ejemplo nos permite elegir un layout (distribución general de la página) asi podemos seleccionar entre una columna, dos columnas (con el menu a la izquierda o derecha) o tres columnas;  los colores y la posición de los elementos dentro del template son igualmente personalizables. Con suficiente tiempo y creatividad se puede diseñar un template agradable a la vista y lo mejor de todo, completamente original. Adicionalmente a la sencillez  de uso tiene un FAQ en inglés, cubre las dudas básicas que uno pueda tener sobre el uso del utilitario.

Aunque el autores del proyecto (Aidin) recomiendan trabajar con Firefox, he visto que funciona igualmente con IE y Opera. Una característica que me llamo la atención es que tiene Farsí como una opción en lenguaje, lo cuál me lleva a pensar que Aidin es persa.

Definitivamente una muy buena aplicación basada en web, en lo personal por lo sencillo y práctico de la idea me agrada.

Usando el API de Blogger en CodeIgniter

Acabo de terminar un HowTo sobre como integrar el API de Blogger para PHP5, que está disponible como un componente del conocido framework Zend, dentro del framework que más me agrada por su facilidad de uso y flexibilidad CodeIgniter. El howto puede ser encontrado en éste blog en la sección de "Tutoriales y Howtos".

La pregunta que alguien podría hacer es la siguiente, ¿para qué usar un API para extraer los posts, si de por sí Blogger los muestra?, y ciertamente esa fue la pregunta que me hice la primera vez que ví el API de Blogger, pero poco a poco me he dado cuenta de su utilidad. La primera y más obvia es que se puede usar la infraestructura de Blogger como una gran DB que contenga todos los posts y comentarios, de esa manera nuestros datos siempre estaran protegidos además de que podremos escalar nuesto blog fácilmente porque sólo se necesitaría añadir un webserver adicional que corra exactamente la misma aplicación que usamos para renderizar las páginas de nuestro blog y con un round-robin DNS repartir la carga.

Otra posibilidad es usar blogger como un CMS (Content Managment System), sistema de administración de contenidos, es decir podemos hacer con el API un mushup que transforme Blogger en algo parecido Mambo o Joomla, con las ventajas de que la data esta protegida y es fácilmente escalable. Incluso hasta podemos hacer que Blogger se comporte como un forum, sencillamente reorganizando la forma cómo se muestran los comentarios.

En conclusión las posibilidades son infinitas, incluso si no te gusta ni PHP y Apache, puedes usar Python y lighttpd en caso de que desees una aplicación super ligera que pueda correr sobre servidores antiguos.

Aprendizaje 2.0

En el blog Bokardo, encontré un interesante post de Joshua Porter, sobre como la nueva web con sus redes sociales amenaza y a la vez le da una salida a la forma de aprendizaje tradicional, llamada Cartesiana, y para mi fue la primera vez que vi el término Aprendizaje 2.0 (Learning 2.0). Aunque Porter señala a su amigo Brian Christiansen como el que le índico el camino, en realidad Christensen se basa sobre un documento PDF llamado "Minds On Fire" (Mentes en llamas) de los autores John Brown y Richard Adler.

En el documento de Brown/Adler se cita por ejemplo que luego de hacer públicos los escritos académicos producidos por los alumnos de sus cursos, observaron como cuando los alumnos se dieron cuenta de que otros leían sus post, comenzaron a mejorar la calidad y extensión de los mismos. Lo cuál lleva a la conclusión de que las personas se esfuerzan y procuran hacer un mejor trabajo si saben que su obra será mostrada en público.

Adicionalmente Brown/Adler promueven una nueva forma de ver el aprendizaje. Ellos identifican una forma tradicional de realizar la enseñanza a la cuál llaman "Cartesiana", donde el conocimiento se ve como un objeto que puede ser transmitido de profesor hacia los alumnos, y la pedagogía desde ese punto de vista no es más que una metodología que procura maximizar esa transferencia de conocimientos. Sin embargo si se tiene una visión social del conocimiento, la nueva visión propuesta por Brown/Adler, la enseñanza es vista de otra manera, ya que es la participación en un grupo la que genera conocimiento. A la idea Cartesiana de "pienso luego existo", Brown/Adler proponen una visión social del conocimiento y acuñan la frase "participamos en un grupo, luego existimos".

Como una prueba de su nueva visión social del conocimiento, alegan que por eso los grupos de estudio son más eficientes que el estudio individual, porque le da la oportunidad a los miembros del grupo de intercambiar roles y volverse maestros, recordandonos la conocida frase de "la mejor manera de aprender algo es enseñandolo", lo cuál es básicamente la escencia de casi todo blog técnico, pues lo que procuramos es poner información útil tanto para el autor, como para los que leen el blog. Si lo pensamos bien un HowTo o un FAQ no son más que una versión simplificada de lo que sería una lección en clase.

Ya que yo no podría explicar éstos conceptos mejor que los autores, les traduzco lo que ellos han propuesto sobre el Aprendizaje 2.0:

"El énfasis en el aprendizaje social está en agudo contraste con el punto de vista tradicional Cartesiano sobre los conocimientos y el aprendizaje, que ha sido la visión dominante sobre la que se ha estructurado la educación durante los últimos cien años. La perspectiva Cartesiana asume que el conocimiento es una especie de sustancia y la pedagogía se enfoca a la mejor forma de transferir esta sustancia, por parte de los profesores a los estudiantes. Por el contrario, en lugar de partir de la premisa cartesiana de ‘pienso, luego existo’ y de la hipótesis de que el conocimiento es algo que se transfiere a los estudiantes a través de diferentes estrategias pedagógicas, la opinión social de aprendizaje dice: ‘Nosotros participamos, por lo tanto existimos’.

Esta perspectiva cambia el centro de nuestra atención de el contenido a las actividades de aprendizaje y las interacciones humanas que en torno al cual se encuentra el contenido. Esta perspectiva también ayuda a explicar la eficacia de los grupos de estudio. Los estudiantes de estos grupos pueden hacer preguntas para aclarar alguno puntos que no esten claros o sean confusos, puede mejorar su comprensión del material estudiado al ver las respuestas a las preguntas de sus compañeros de estudios, y quizás la más poderosa de todas las herramientas, puede asumir el papel de maestro para ayudar a los demás miembros del grupo lo cuál beneficia su comprensión (una de las mejores maneras de aprender algo es, después de todo, enseñar a los demás)."

Las herramientas sociales del web 2.0, defitivamente están impactando la educación y cambiaran la forma de realizar el proceso de enseñanza, de alli que el Aprendizaje 2.0, no sea simplemente dictar clases por Internet, sino permitir que grupos enteros interactuen unos con otros intercambiando roles de profesor/alumno, sin la necesidad de que dichos grupos esten en geográficamente próximos.

Tal vez uno de los ejemplos más claros de como un desarrollo social de conocimiento puede redifinir las reglas de la economía y la sociedad, es el software libre (OpenSource), que ha llegado a producir no solamente conocimiento, sino también riqueza. Además nos permite multiplicar el conocimiento ya producido haciendo uso de la comunidad (red social) que los distribuye y mantiene.

Leer éste post y ojear el documento "Minds On Fire" me ha abierto los ojos sobre el futuro de la educación y las inmensas posibilidades de nuevos emprendimientos en ésta área, al menos ahora ya se hacia donde debo de orientar mis esfuerzos en desarrollar aplicaciones GAE (Google Apps Engine). Es decir al desarrollo de herramientas (software) que las redes sociales puedan usar para crear conocimiento de forma colaborativa.