En ASPgems desde hace bastante tiempo vamos dando charlas internas para compartir el conocimiento entre nosotros, y desde hace unos meses las charlas son abiertas a todo el que quiera apuntarse.
Las charlas se publican en el blog y en twitter y la inscripción es en stage.
La última charla me ha tocado a mi, en la que he hablado un poco sobre mi experiencia durante más de dos años desarrollando BeRuby, un proyecto que ha pasado en este tiempo a ser el mayor proyecto de Rails en España y entre los 40 mayores del mundo (según en ranking de Alexa en la lista de rails100)
Repasando la presentación me he dado cuenta de que hablé muy poquito de Rails y mucho de MySQL, así que va a ser que uno de los puntos más importantes a la hora de escalar es un buen diseño y uso de base de datos, por mucho que las malas lenguas digan por ahí que Rails no escala :-)
La presentación tambien se grabó en vídeo (es la primera que grabamos y todavía está pendiente de retocar porque el audio no se oye muy bien), así que por ahora publico las transparencias, aunque sin la explicación algunas páginas no aportan mucho ....
De todas formas, entre nosotros, el orador no se puede decir que sea un comunicador nato, así que no espereis una gran charla cuando se publique el vídeo.... eso si, si hay cualquier duda o sugerencia sobre la presentación, aquí estoy para contestarla.
NOTA: La charla al final se publicó en el canal de Vimeo de ASPgems
lunes, 18 de enero de 2010
sábado, 28 de noviembre de 2009
Conferencia Rails 2009 - Impresiones

Los años anteriores se hablaba de como trabajar con rails, plugins y herramientas que facilitan el trabajo, bastante sobre buenas prácticas de programación y escalabilidad y muchísimo de BDD, TDD y cualquier cosa relacionada con testing.
Pero este año ha sido diferente. Ha habido mucha filosofía sobre como trabajar en magníficas conferencias como la de javi (La herramienta de desarrollo definitiva) y la de porras (El desarrollador total) e incluso la última keynote de Obie fue sobre el mismo tema, aunque no comparto sus ideas y forma de trabajar ....
Por otra parte tuvimos la parte social con una apasionada e inspiradisima conferencia de Aitor García Rey (Hacks! Politics) y el entusiasmo de Rai hablando del Partido de Internet en una lighting talk.
Y no podía faltar la parte tecnológica, con mensajería y colas por Joshua Sierles (AMQP: Ruby en tiempo real), una introducción a CassandraDB por parte de Pablo Delgado (Cassandra DB: ¿Qué tienen Facebook, Twitter y Digg en común?), Raul nos contó sobre Rack y Sinatra (Alternativas a Rails para sitios y servicios web ultraligeros), John Leach explicando interesantes conceptos de unix (UNIX: Rediscovering the wheel), David Calavera nos enseñó como se especifica ruby gracías a RubySpec (Rubyspec y el largo camino hacia Ruby 1.9), Ron Evans aplicando Ruby y Arduino en el vuelo de dirigibles (Flying Robot), .... y paro aquí que al final voy a poner el listado completo de conferencias
Otro tema a destacar es la internacionalización de la conferencia. Este año ha habido muchas conferencias en inglés y ha desaparecido la coletilla 'Hispana' del nombre de la conferencia, supongo que ocupando parte del hueco que ha dejado la RailsConf Europe que organizaba O'Reilly.
En resumen, enhorabuena a la organización, que van mejorando año a año.
Nos vemos en la Conferencia Rails 2010 (si no aparece nada mejor que Rails el próximo año...)
jueves, 29 de octubre de 2009
Las webs y la televisión
Por variar un poco, una entrada de opinión
Siempre he tenido la idea de que una campaña de televisión sobre una web lo que consigue es montones de visitas mientras que se emite el anuncio y al desaparecer el anuncio, desaparecen las visitas. Si el producto es bueno, lo que conseguirá tráfico continuo es el boca a boca, entradas de blog, noticias online, comentarios de usuarios satisfechos con el producto....
Y hace poco he visto la confirmación de mi teoría. Zonzoo hizo una campaña en televisión este verano en la que se debió gastar una millonada, luego ha estado un par de meses sin campaña y ha vuelto a hacer otra.
Mirando el ranking en Alexa de zoonzo se ve que tal como subió desapareció y con la nueva campaña ha vuelto a aparecer.
Aunque el ranking Alexa no es fiable 100%, porque se basa principalmente en los datos de los usuarios que tienen la Toolbar Alexa, es un buen indicativo del tráfico y importancia de una web.
La idea es buena, y es probable que tengan éxito, pero en mi opinión habría sido mucho mejor hacer una buena campaña online y ofrecer mejores tarifas por los móviles, que les habría salido infinitamente más barato, y habrían crecido ordenadamente, consiguiendo tráfico y ingresos poco a poco
Y además, para soportar esa campaña habrán tenido que montar una buena infraestructura de servidores y logística que no habría sido necesaria inicialmente si hubieran apostado por el crecimiento lento y ordenado.
Bueno, no tengo ni idea de marketing y igual me equivoco, pero para eso están las opiniones, para equivocarse :)
Siempre he tenido la idea de que una campaña de televisión sobre una web lo que consigue es montones de visitas mientras que se emite el anuncio y al desaparecer el anuncio, desaparecen las visitas. Si el producto es bueno, lo que conseguirá tráfico continuo es el boca a boca, entradas de blog, noticias online, comentarios de usuarios satisfechos con el producto....
Y hace poco he visto la confirmación de mi teoría. Zonzoo hizo una campaña en televisión este verano en la que se debió gastar una millonada, luego ha estado un par de meses sin campaña y ha vuelto a hacer otra.
Mirando el ranking en Alexa de zoonzo se ve que tal como subió desapareció y con la nueva campaña ha vuelto a aparecer.
Aunque el ranking Alexa no es fiable 100%, porque se basa principalmente en los datos de los usuarios que tienen la Toolbar Alexa, es un buen indicativo del tráfico y importancia de una web.
La idea es buena, y es probable que tengan éxito, pero en mi opinión habría sido mucho mejor hacer una buena campaña online y ofrecer mejores tarifas por los móviles, que les habría salido infinitamente más barato, y habrían crecido ordenadamente, consiguiendo tráfico y ingresos poco a poco
Y además, para soportar esa campaña habrán tenido que montar una buena infraestructura de servidores y logística que no habría sido necesaria inicialmente si hubieran apostado por el crecimiento lento y ordenado.
Bueno, no tengo ni idea de marketing y igual me equivoco, pero para eso están las opiniones, para equivocarse :)
martes, 20 de octubre de 2009
Evictions en memcached
En la aplicación en la que estoy trabajando tenemos memcached distribuido entre varias máquinas. Normalmente voy comprobando periódicamente que el tamaño usado sea menor al máximo tamaño disponible y lo teniamos configurado a 64 MB por máquina, ya que parecía suficiente.
En la traza se puede ver como tiene algo más de 40 MB (bytes) ocupados de los 64MB disponibles (limit_maxbtyes). El estado se puede consultar utilizando el método stats de la gema memcache-client o directamente haciendo un telnet al puerto donde está levantado tal y como contaba Jacobo hace unos meses en su blog:
bytes: 44140784
pid: 27269
connection_structures: 223
threads: 1
evictions: 215279
time: 1255950371
pointer_size: 32
limit_maxbytes: 67108864
cmd_get: 12315783
version: 1.2.2
bytes_written: 48564944477
cmd_set: 1505495
get_misses: 563019
total_connections: 643702
curr_connections: 61
curr_items: 15957
uptime: 9589358
get_hits: 11752764
total_items: 582809
rusage_system: 172.8108
rusage_user: 67.872241
bytes_read: 19210833034
Pero leyendo lo que significa cada uno de los parámetros de memcached en la web de escalabilidad de MySQL, me he dado cuenta de que el parámetro importante a comprobar es evictions. Eviction (que se puede traducir como desalojo), indica el número de elementos válidos de la caché borrados para liberar memoria para nuevos elementos y que debería ser cero o un número muy pequeño.
Así que hemos ampliado la memoria de memcached en todos los servidores a 128MB y efectivamente, nos habiamos quedado muy cortos.... ahora están ocupando sobre 90MB cada uno y a partir de ahora el parámetro a monitorizar es evictions :-)
Actualizacion 30/10/2009: Acabo de leer en Building Scalable Web Sites una forma alternativa de ver el status de memcached utilizando netcat. Suponiendo que está instalado en localhost en el puerto 11211
echo -ne "stats\r\n" | nc -i1 localhost 11211
Otra opción es utilizar memcache-top para ver las estadísticas en formato top (gracias a Paco por el enlace)
Actualizacion 16/10/2013: Y cuatro años despues actualizo con otra forma de consultar los stats
/usr/share/memcached/scripts/memcached-tool localhost:11211 stats
En la traza se puede ver como tiene algo más de 40 MB (bytes) ocupados de los 64MB disponibles (limit_maxbtyes). El estado se puede consultar utilizando el método stats de la gema memcache-client o directamente haciendo un telnet al puerto donde está levantado tal y como contaba Jacobo hace unos meses en su blog:
bytes: 44140784
pid: 27269
connection_structures: 223
threads: 1
evictions: 215279
time: 1255950371
pointer_size: 32
limit_maxbytes: 67108864
cmd_get: 12315783
version: 1.2.2
bytes_written: 48564944477
cmd_set: 1505495
get_misses: 563019
total_connections: 643702
curr_connections: 61
curr_items: 15957
uptime: 9589358
get_hits: 11752764
total_items: 582809
rusage_system: 172.8108
rusage_user: 67.872241
bytes_read: 19210833034
Pero leyendo lo que significa cada uno de los parámetros de memcached en la web de escalabilidad de MySQL, me he dado cuenta de que el parámetro importante a comprobar es evictions. Eviction (que se puede traducir como desalojo), indica el número de elementos válidos de la caché borrados para liberar memoria para nuevos elementos y que debería ser cero o un número muy pequeño.
Así que hemos ampliado la memoria de memcached en todos los servidores a 128MB y efectivamente, nos habiamos quedado muy cortos.... ahora están ocupando sobre 90MB cada uno y a partir de ahora el parámetro a monitorizar es evictions :-)
Actualizacion 30/10/2009: Acabo de leer en Building Scalable Web Sites una forma alternativa de ver el status de memcached utilizando netcat. Suponiendo que está instalado en localhost en el puerto 11211
echo -ne "stats\r\n" | nc -i1 localhost 11211
Otra opción es utilizar memcache-top para ver las estadísticas en formato top (gracias a Paco por el enlace)
Actualizacion 16/10/2013: Y cuatro años despues actualizo con otra forma de consultar los stats
/usr/share/memcached/scripts/memcached-tool localhost:11211 stats
miércoles, 7 de octubre de 2009
IE7 y IE8 con VirtualBox - Duplicar discos virtuales
Para probar las aplicaciones con Internet Explorer, hasta ahora tenía IE6 con ie4linux y IE7 con una máquina virtual de XP con VirtualBox
La instalación por defecto en Ubuntu es VirtualBox OSE (Open Source Edition) que no tiene soporte para USB, así que la que utilizo es la versión estándar tal y como explican en TuxGuides, para poder utilizar el software original de algunos perifericos en Windows.
El tema es que IE8 ya tiene una cuota de mercado lo suficientemente alta para probarlo todo tambien en IE8, por lo que me hacía falta otra máquina virtual. Claramente la opción crearla desde cero instalando de nuevo Windows, instalando n mil parches y reiniciando otras n mil veces no es buena opción, así que he investigado un poco como duplicar el disco ya existente.
Por defecto, los discos virtuales se crean en el directorio ~/.VirtualBox/HardDisks y tienen extensión .vdi, y desde línea de comando se pueden duplicar (en mi caso el disco anterior era WindowsXP y el nuevo es WindowsXP_IE8)
cd ~/.VirtualBox/HardDisks
diego@diego-laptop:~/.VirtualBox/HardDisks$ VBoxManage clonehd WindowsXP.vdi WindowsXP_IE8.vdi
VirtualBox Command Line Management Interface Version 2.2.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 8545bc77-6aa4-4594-b1a1-d1aa886abd40
Se toma su tiempo, pero una vez duplicado, simplemente creamos una nueva máquina virtual y en lugar de crear un nuevo disco seleccionamos el disco que acabamos de crear. Y una vez arrancado Windows simplemente actualizamos IE a la nueva versión y listo, ya tenemos las dos versiones para probar.
La configuración de la máquina virtual no se copia (memoria, usb, audio, ...), pero como es algo que se hace en 1 minuto no he perdido tiempo en ver como se haría automáticamente.
La instalación por defecto en Ubuntu es VirtualBox OSE (Open Source Edition) que no tiene soporte para USB, así que la que utilizo es la versión estándar tal y como explican en TuxGuides, para poder utilizar el software original de algunos perifericos en Windows.
El tema es que IE8 ya tiene una cuota de mercado lo suficientemente alta para probarlo todo tambien en IE8, por lo que me hacía falta otra máquina virtual. Claramente la opción crearla desde cero instalando de nuevo Windows, instalando n mil parches y reiniciando otras n mil veces no es buena opción, así que he investigado un poco como duplicar el disco ya existente.
Por defecto, los discos virtuales se crean en el directorio ~/.VirtualBox/HardDisks y tienen extensión .vdi, y desde línea de comando se pueden duplicar (en mi caso el disco anterior era WindowsXP y el nuevo es WindowsXP_IE8)
cd ~/.VirtualBox/HardDisks
diego@diego-laptop:~/.VirtualBox/HardDisks$ VBoxManage clonehd WindowsXP.vdi WindowsXP_IE8.vdi
VirtualBox Command Line Management Interface Version 2.2.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 8545bc77-6aa4-4594-b1a1-d1aa886abd40
Se toma su tiempo, pero una vez duplicado, simplemente creamos una nueva máquina virtual y en lugar de crear un nuevo disco seleccionamos el disco que acabamos de crear. Y una vez arrancado Windows simplemente actualizamos IE a la nueva versión y listo, ya tenemos las dos versiones para probar.
La configuración de la máquina virtual no se copia (memoria, usb, audio, ...), pero como es algo que se hace en 1 minuto no he perdido tiempo en ver como se haría automáticamente.
Suscribirse a:
Entradas (Atom)