Tag Archives for L-exp

Optimizando una aplicación Rails

Recientemente he tenido que enfrentarme al problema de optimizar mi aplicación Rails ( L-exp). El echo es que la carga de una determinada vista me llegaba a tardar más de un minuto. Realmente te quedas bastante frustrado cuando ves que te pasa esto.

Lo primero en pensar es que como Ruby on Rails está desarrollado en Ruby y este es un lenguaje Script. Pues que será lento y que hasta aquí hemos llegado.

Tras profundizar un poco se me ocurren dos caminos a seguir.

El primero analizar la base de datos para detectar problemas de índices. Es decir que se hagan consultas que no utilicen índices y por tanto sean lentas. Para ello utilizo un plugin para Rails llamado Query Analyzer. Este te muestra en el log a que datos acceden y si está utilizando índices. Así puedes detectar consultas complejas e ir optimizando las tablas. Se trata de ir añadiendo índice que contengas los campos por los cuales ejecutamos el query.

Gracias a este proceso detecté varios índices que faltaban y los añadi. Pude comprobar que un query que duraba casi un minuto pasó a durar menos de un 1 segundo.

En paralelo hice la segunda optimización que había leído por alguna parte que era la de utilizar el hash include en las llamadas a la base de datos( find(:all, :include =>”)). La idea es que en vez de hacer muchas consultas, si tiene tablas relacionadas hace una gran consulta trayendo todos los datos de las tablas relacionadas.

Tras acabar de hacer las consultas note una gran mejoría en las listas cortas, pero sin embargo las grandes tardaban mucho.En especial una lista ( Find all the google products and services) que llama a 67 recursos que me tardaba más de un minuto. Entonces…. ¿ donde me he perdido?

El echo es que tras varíos dias dándole vueltas me di cuenta que había cometido un error importante al usar ambos métodos a la vez. Optimizar los índices siempre es bueno ya que es el acceso a la base de datos es acelerado. Este es prioritario y se debe hacer siempre. Mi error fue utilizar el segundo método en consultas que traen muchos datos. Imagino que en estos casos cuando interroga la base de datos y guarda todo en memoria hace que la máquina gaste mucha memoria y CPU siendo poco efectiva para consultas con muchos datos.

Por tanto tan sólo tuve que quitar la optimización de includes y la lista más larga pasó a tardar pocos segundos. Algo impresionante.

Por tanto la moraleja de la historia es: ” Índices, Índices, Índices, ……”

Y el problema en mi caso no era de Rails sino de la base de datos que no la tenía optimizada.

Os adjunto una lista con los plugins que suelo utilizar: Rails plugins

Popularity: 1% [?]

365 días con Ruby on Rails

Ya hace un buen tiempo que llevo peleándome y gozando de esta Web Framework. Uno de los objetivos de empezar mi proyectito L-exp fue el de aprender a desarrollar con esta Framework.

La principal ventaja de esta framework basada en el lenguaje script Ruby está en su lógica aplastante. Has de entender la filosofía de como se hacen las cosas, pero una vez la tiene cada vez el desarrollo se vuelve más intuitivo y sencillo.

Yo diria que en estos momentos utilizo sólo un 40% de las posibilidades de esta framework. Pero la realidad es que suficiente ya que me permite desarrollar ágilmente y además voy solventando todos los retos. Para mi lo más complicado de este desarrollo está siendo siempre el HTML y CSS. No porque sea difícil de entender, sino que es difícil hacer diseños de páginas webs para conseguir que queden atractivas y funcionales. Es decir, que entren por los ojos. Es un problema artístico y no técnico.

Un factor importante en Rails es que las cosas las puedes hacer de muchas formas y lo que hay que aprender es como hacerlas de forma más óptima. Un mismo acceso en un controlador puede tardar 8 segundos o medio simplemente enfocando bien la búsqueda de los datos. Estas cosas son las que he de ir aprendiendo.

Hay que mencionar la genialidad del lenguaje Ruby en la flexibilidad y facilidad que tiene. Al principio si vienes de lenguajes como C  o Visual Basic te choca mucho. Ya que estas acostumbrado a hacerlo todo tu programando y Ruby está pensado para tener que escribir poco código. Probar Ruby en este enlace y entenderéis lo que digo.

Lo más sorprendente esta Framework es las cosas que he llegado a realizar de forma tan trivial. Quien me iba a decir hace un año que estaría leyendo Feeds para incluirlas en mi proyecto con dos líneas de código o  enviando pings a technorati y Feedburner para que actualicen sus RSS. El mérito no es que yo sea un genio, sino que la comunidad es muy abierta y encuentras soluciones para todo.

No puedo dejar de mencionar la base de datos MySQL ya que ha sido la gran desconocida al funcionar perfectamente y sin problemas.

Otro factor colateral que te encuentras en este mundo Rails es que usas hostings que están basados en Linux. En este aspecto he podido contastar que aunque utilizas terminales para acceder que quizás queda poco glamuroso, la potencia de los comando que puedes realizar y la tecnología que tienen es impresionante. Además las cosas están pensadas para ser fáciles, hay comandos para todo y al final el conocimiento que has de tener es reducido ya que son cuatro tareas las que realizas continuamente.

En cuanto a los servidores Linux me ha sorprendido la capacidad de configuración que tienen, la utilización de servidores como mongrel, el control de versiones con SVN, la gestión de tareas con cron y rake, la facilidad de configuración y muchas cosas más.

Relacionado con el mundo Linux hay que hablar sobre el tema del hosting que sin duda ha sido una pieza clave. Recientemente me mude de hosting y estoy muy satisfecho del cambio. En este aspecto me ha sorprendido la tecnología que tienen los hosting como los paneles de control y como estos shared servers pueden coexistir multiples entornos y usuarios. Sin duda un factor clave es la amabilidad del servicio técnico que como ya comenté en Railsplayground.com me está sorprendiendo.

Para predicar con el ejemplo os pongo un enlace a las listas L-exp que he creado sobre Ruby on Rails (ya van 9). He procurado ir añadiendo todos aquellos recursos que he necesitado clasificándolos por temáticas ( listas).

Como podéis leer ha sido un año divertido y he podido disfrutar mucho con mi proyecto. Ahora estoy haciendo cambios importantes en L-exp para hacerlo más útil y funcional.

Iré publicando algunos trozos de código con cosas interesante que he utilizado para compartirlo.

Popularity: 1% [?]

Migrando L-exp a Railsplayground

Como alguna vez he comentado estoy desarrollando un proyecto en Ruby on Rails que consiste en una forma para compartir información en forma de listas llamado L-exp  ( lists of experience).

Hasta ahora este proyecto ha estado en Dreamhost, pero llegó un momento que Dreamhost me pudo por varíos motivos. Para tener mi blog  Dreamhost me funciona perfectamente, pero con L-exp empecé a hacer procesos con Rake para cargar Feeds de las listas y aquí sucumbió mi servidor ya que mataba mis procesos aleatoriamente. Además descubri que el software no estaba totalmente actualizado y el soporte era horrible ( resumiendo mucho).

Como anécdota Recuerdo una vez que me dijeron que esperase a ver si se actualizaba la aplicación con tono bastante prepotente y además tras varíos emails mios diciendo que no iba. Entonces tras contestarles que si tras dos dias de espera no era suficiente por fin me respondieron y actualizaron la máquina. Fue patético.

Asi que despues de todo esto decidi dar el salto y buscar un hosting algo más especializado. Alguién hace tiempo en un post me recomendó Railsplayground y asi me decidi a configurar una cuenta de developer del mínimo nivel. Como principales elementos que me atraieron fueron:

  • Claridad y facilidad en los procesos
  • Dispones de un Mysql en el localhost
  • Dispones del Cpanel para configurar todo fácilmente
  • Incluye correo electrónico
  • Puedes instalar los gems de rails que quieras
  • El sistema respondió muy bien a las pruebas de carga que hice
  • El soporte fue muy rápido, efectivo y activo
  • precio lógicamente

Asi que tras probarlo todo he cogido una cuenta Level 2 por 108 $ al año con mejores opciones. Entre ellas podemos enumerar:

  • 7 GB de espacio
  • 200 GB/mes de año de banda
  • 5 cuentas/shells
  • 2 instancias mongrel/lighttpd/static
  • Ilimitados subdominios
  • Soporte para SVN y Trac disponible
  • Backups nocturnos
  • ………

De momento todo está funcionando muy bien y los problemillas que he tenido de migración me lo han solventado los de soporte ágilmente. Esto me da cierta tranquilidad que no tenía con Dreamhost para garantizar que mi aplicación va a funcionar bien y que debo preocuparme poco de ello. Además tengo opciones de escalabilidad que con Dreamhost no tenía.

Esto no quiere decir que abandone Dreamhost, pero lo limitaré a mi blog que no tiene ningún secreto ni complicación.

 

Popularity: 1% [?]

Betabug interesante servicio para gestionar proyectos de software

Acabo de crear mi propio proyecto en Betabug para gestionar mi proyecto L-exp y me ha sorprendido gratamente este sistema de gestión de proyectos de software. De entrada ya he podido añadir 25 mejoras que voy a desarrollar durante estas vacaciones para pasar a la BETA 1.

Volviendo a Betabug Puedes gestionar varíos proyectos y además ir clasificando por bugs (errores) o TO-DO (cosas pendientes). Además con un sistema de gestión de etiquetas puedes clasificar perfectamente la entrada para luego tenerla bien clasificada.

Otro tema interesante es el de disponer de la posibilidad de abrir todo esto a una comunidad para que puedan trabajar en el proyecto y entrar errores o mejoras. Además dispone de un Widget para facilitar esta integración. Un interface muy claro y además muchas opciones para exportar y clasificar la información. Incluso puedes suscribirte vía RSS.

 

Sin duda puede ser una buena herramienta y recomendable. De momento es gratuita pero habrá que ver si sigue siéndola.

 

 

Vía Genbeta

Betabug

Popularity: 2% [?]

Herramientas para promocionar y controlar tu web

Recientemente puse online mi proyecto L-exp después de unos meses de desarrollo. Es importante que una vez publicado se utilicen unas determinadas herramientas para hacerlo más visible en internet y controlarlo.

Voy a comentar las que he utilizado para compartirlo con otra gente que pueda pasar por la misma situación:

1.- Controlar el número de visitas

Para saber si estamos siendo visitados debemos tener algún sistema de estadísticas. Para ello yo recomiendo dos:

  • Mint : Es de pago (30$) pero para mi es el mejor sistema que hay ya que te da una información muy detallada y además al tener que instalarlo en tu servidor la tienes en tiempo real.
  • Google Analytics: Tras abrir una cuenta e instalar un código en tu web puedes seguir tus visitas con un interface gráfico muy interesante. Funciona bien aunque a veces he notado que tardan en actualizarse las estadísticas.
  • Feedburner: Hace poco que han añadido esta funcionalidad y no tengo mucha experiencia. Pero sin duda que puede ser una buena alternativa. Mis experiencias con WordPress no han sido muy buenas.

2.- Dar de alta en el buscador Google

  • Google Webmasters : Desde este grupo de herramientas controlaremos la alta y el estado de la indexación del motor de búsqueda de Google. Aquí podemos publicar un fichero sitemap.xml y ver que resultados van dándose.

No se el procedimiento para darme de alta en otros buscadores ( sin pagar) pero ya añadiré si los descubro.

3.- Generar ficheros sitemap.xml: Estos son los ficheros que ayudan a las arañas que buscan en la red a analizar el website.

  • Xml-sitemaps : Este es el que yo he utilizado. Debido a que L-exp tiene muchos enlaces ( unos 800 de momento). He tenido que utilizar una herramienta automática. Es de pago pero vale la pena para ahorrarte muchas horas. Corre sobre PHP y lo puedes instalar en tu servidor y automatizar generaciones. Funciona muy bien.
  • ROR sitemaps Generator : No lo he probado pero parece una herramienta gratuita. Tiene una versión online y otra que se instala que corre sobre windows ( .NET).

Seguro que hay otras alternativas pero estas son las que he encontrado.

4.- Gestionar tus feeds

  • Feedburner : Sin duda es una herramienta imprescindible para saber que está pasando con tus feeds. Te muestra estadísticas y además te ahorra tráfico a tu web ya que hace de puente.

5.- Financiar tu hosting con publicidad

  • Google Adsense : Se que alguno se ha hecho rico con esto pero a mi de momento me da 1$ al mes. Pero tengo esperanza que al menos me de para pagar el hosting de Dreamhost.

He creado una lista L-exp para compartirlo mejor.

Popularity: 1% [?]

Get Adobe Flash playerPlugin by wpburn.com wordpress themes