@GuateonRails => Felicidad.find(:all)

Posts Tagged ‘Latinoamerica


Aunque Ruby es un lenguaje relativamente joven, su ecosistema ha incremendado considerablemente durante los ultimos 5 años.  Esto en parte al auge que tiene el proyecto de Ruby on Rails y a la publicidad que ha recibo el framework por sitos como Twitter.

Durante el curso de Ruby estaremos hablando sobre las diferentes facetas del lenguaje iniciando esta semana con:

Hora 1-2

  • ¿Qué es Ruby?
  • Historia
  • Ejemplos
  • Instalación (Windows, Mac, Linux).
  • Gems
  • Editores / Ambientes de Desarrollo / Herramientas
  • Mi primer programa: Hola Amiguis!!!
  • Introduccion a la Sintaxis

Hora 3

  • Git

Hora 4

——————

Actualizacion Feb 3:  Lamentablemente no pudimos confirmar al expositor de Scrum, pero en su lugar ganamos una charla del editor Vim por parte del amigo @talishte.  Vale la pena escuchar esta charla ya que Vim es uno de los editores mas usados para trabajo remoto sobre servidores linux. Muy útil cuando quieres editar tus archivo Rails en tu server.

Anuncios

rubylogoDurante la semana pasada tuve la oportunidad de escuchar una conferencia dictada por James Edward Gray II. La conferencia trató el tema de como mejorar tu nivel de desarrollo y hacía mención a que un programador experto es aquel que “lee mas código del que escribe”, es decir que pasa mas tiempo aprendiendo que haciendo. En especial, el se refería a leer código ajeno a indagar en “el como lo hizo”, en ser lo suficientemente curioso para no quedarse a nivel de “usuario”, si no bajar de nivel y ensuciarse las manos.

Confieso que ya desde algún tiempo he venido pecando de “estar demasiado ocupado para subir mi nivel”. Pero, me parece que la propuesta de James es lo suficientemente válida como para dejar la pereza por un lado y ponerme a trabajar.

James es el autor del Ruby Quiz, el cual es un reto de programación semanal que se distribuye por medio de la lista oficial de Ruby. La idea es que cualquier persona subscrita a la lista puede resolver el reto y si lo desea lo puede resolver en cualquier otro lenguaje distinto a Ruby. Esto es genial ya que permite a TODOS ver las soluciones de TODOS y aprender de todos los modos de resolver el problema comparándolo contra nuestra solución.

Pueden ver los archivos y mejores soluciones del Ruby Quiz en su página oficial,  y el último reto subscribiendose a la lista de correo Ruby-Talk.

¿Les gustaría que tradujese el reto semanal y lo incluyera junto con las soluciones dentro del Blog? Déjenme saber, yo por mi parte le voy a echar ganas y voy a empezar con el Quiz #1.

Éxitos y a picar piedra.

PS: Si quieren seguirle el rastro a James pueden hacerlo por medio de su Blog (http://blog.grayproductions.net/) o su perfil de Twitter (http://api.twitter.com/JEG2)


railsEl día de hoy me gustaría dedicar algunas líneas al tema de mejorar el rendimiento de tu aplicación en Ruby on Rails. (Ojo: el sarcasmo va dirigido exlusivamente a pseudo desarrolladores de Ruby on Rails que solo brindan su mál aliento al framework)

El temas sale directamente de la controversia que surge a partir de que Twitter anunciara que cambiará su sistema de mensajería de Ruby a Scala. Las razones de los señores de Twitter son bastante razonables, sin embargo esto ha generado un gran número de posts sobre “ya ven se los dije Ruby no sirve”, “no usen Ruby es la cosa mas lenta que hay”, “Rails no se compara con la velocidad de PHP”, y otro montón de tonterías. Para que no se asusten y para no me picarme el hígado mas de la cuenta les dejó más abajo la presentación de los señores de Twitter del porque de su decisión para migrar de Ruby a Scala.

Muy bien, ahora pasando a modo pro-activo, les voy a compartir un par de consejos para que no se conviertan en uno de esos “desarrolladores de Ruby on Rails”, que comentan decepcionados el como Rails no tiene un buen rendimiento y mejor se pasan a algo más “eficiente”.

He aquí tres puntos que considero de suma importancia para cualquier desarrollador que desee mejorar el rendimiento de sus aplicaciones o planificar adecuadamente una nueva aplicación.

1. Pobre diseño o elección de la base de datos

Voy a sonar de lo mas pedante, pero…. por favor antes de empezar a escribir scaffold, scaffold, scaffold les recomiendo tomarse 5 minutos (si pueden que sean 6) y pensar que están haciendo y por qué lo están haciendo. Nada mejora el rendimiento de una aplicación de Rails como un buen diseño de base de datos.

Si nunca lo han hecho les recomiendo leer algún libro sobre el tema o tomar algún curso o algo… porque no creerán las aplicaciones con las que me he encontrado en el mercado, las cuales me han dado mas de una razón para exclamar alguna grosería en el nombre de todo lo que es santo, cuando veo la estructura sobre la cual están corriendo.

Recuerden el objetivo de cualquier framework es el de brindar una forma de trabajo simplificada bajo la premisa de que existen tareas comunes que se repiten constante y de que la persona que está sentada frente al teclado sabe lo que está haciendo. Rails no es una muleta para aquellas personas que desean convertirse en “desarrolladores web” en diez minutos o menos. Rails está diseñado para “desarrolladores web” que desean incrementar su productividad y deciden usar este framework en particular para hacerlo.

2. Indices

Por alguna razón los “desarrolladores” de Rails, tienen la extraña idea de que esos viejos amigos de la infancia no tienen nada que ver con el ciclo de vida de las aplicaciones de RoR. Pero ¡oh sorpresa!, en el 90% de los casos un simple indice puede reducir el tiempo de respuesta de su aplicaciones en mas de un 100%.  Los índices a sus campos siguen teniendo la misma preminencia para las aplicaciones en RoR como para cualquier otro tipo de desarrollo. Si no los incluyes o no sabes como hacerlos bien tu aplicación pagará las consecuencias. El por qué y el como generarlos es asunto tanto de la lógica de tu aplicación como del manejador de datos que hayas elegido.

Para aquellos que les guste desarrollar bajo MySQL les sugiero que se familiarizen con el comando DESCRIBE el cual les permitirá determinar el ciclo de ejecución de sus queries.

Y para los que no sabían que RoR generá a su mas bajo nivel simples queries de sql (¡Oh Maravilla!) les suplico que se den una vuelta por la consola que está corriendo su servicio o mejor aún que le den una visita al archivo de logs.  ¿Rails tiene un log…? Si amigo mio RoR guarda (según su ambiente de trabajo) el resultado de sus operaciones incluyendo (en el ambiente de desarrollo) los queries que se han ejecutado contra la base de datos.

Los archivos de logs puden ser localizados el directorio (extrañamente llamado) miaplicacion/logs.

Tip para los usuarios Linux:

Los archivos de logs pueden ser limpiados por medio de la instrucción

$ rake log:clear (esto tambien aplica para otros SO)

y pueden visualizarse de una manera simple con:

$ cat log/development.log  | less -R

Y si desean ser un poco mas minuciosos con su trabajo,  les recomiento encarecidamente que instalen el plugin para MySql,  Query Analyzer. El cual modificará la salida de los archivos de log para incluir el resultado del comando DESCRIBE por cada query que se ejecute. La combinación de estos comandos y el entender que es lo que los logs muestran es tal vez la herramienta más poderosa para mejorar el rendimiento de una aplicación de Rails.

3. Poco conocimiento sobre el manejo del modelo de objetos de datos

La forma en que Rails por medio de la clase ActiveRecord obtiene el acceso a los manejadores de base de datos en simplemente una delicia en cuanto a la claridad y calidad de código que nos permite escribir, y en mi opinión Active Record es la pieza mas importante del asernal de RoR.

Nota: Si desean entender mejor su funcionamiento (por cierto ActiveRecord puede ser usado por cualquier aplicación escrita en Ruby) les recomiendo leer el libro  Pro Active Record : Databases with Ruby on Rails.

Ahora con lo concerniente a rendimiento RoR nos permite hacer cosas como:

personas = Persona.find(:all, :conditions=>condiciones_para_encontrar_personas)

lo cual ejecutará el query

select * from personas where "condiciones para encontrar personas"

Si nosotros deseásemos obtener la información de los paises de los  amigos de esta persona podríamos escribir el siguiente código:

persona = Persona.find(:all, :conditions=>condiciones_para_encontrar_persona)

@pais_de_amigos = persona.amigos.collect {|amigo| amigo.pais.nombre }

ahora eso funcionara sin problema, pero generará un query para obtener los amigos y un query por cada amigo para poder obtener la información del país. Ahora estó talvez no se note al principio, pero piensen en una aplicación como Twitter y la cantidad de amigos que puedan seguir a una persona, y verán que ese código es super ineficiente.

La solución de este problema cabe simplemente en conocer como funciona el módelo de objetos de RoR y poder hacer uso de él. El código anterior puede ser mejorado con solo usar eager associations, es decir traer toda la información necesaria con un solo query, tal y como se ha hecho por generaciones en cualquier otro ambiente de trabajo. Al agregar el parámetro :include a nuestra metodo find nos es posible obtener la información necesaria de nuestra tablas asociadas en un solo query. El anterior código sería rectificado de la siguiente manera:

persona = Persona.find(:all, :conditions=>condiciones_para_encontrar_persona, :include => :pais)

@pais_de_amigos = persona.amigos.collect {|amigo| amigo.pais.nombre }

lo cual generaría

select * from personas inner join paises on personas.pais_id = pais.id where condiciones_para_encontrar_persona

Como ven nada del otro mundo… simplemente saber que estamos haciendo nos puede brindar grandes satisfacciones al trabajar bajo Ruby on Rails. Así que ya saben, a estudiar diseño de base de datos y darle una miradita a la clase Active Record. Nada les cuesta y verán como sus aplicaciones se transforman de “esa cosa en Rails” a “la aplicación con la que quiero pasar el resto de mis días mientras me hace millonario”.

Saludos y Exitos en su lucha contra el mal!!


¡Hola comunidad! ¿Cómo les va a todos?

Finalmente, la espera ha terminado, yeeeee :D. La segunda parte de nuestra serie sobre migraciónes esta finalmente aquí. Mis disculpas si me tarde un poquito en llegar aquí, pero como verán en el video, no era posible mostrar este contenido sin tener un conocimiento básico del lenguaje Ruby. Si no han tenido la oportunidad de hacerlo, les recomiendo buscar el tutorial “Ruby en 20 minutos” en la sección de screencasts.

Bueno aquí se los dejo, en espera de sus comentarios.

Exitos.

Ps. recuerden que si tienen dudas sobre Ruby on Rails pueden dejarlas en la sección de comentarios o en el grupo de google rails-guatemala.


Por experiencia se que la parte mas complicada de iniciar con una nueva plataforma o lenguaje es poder hacer todas las instalaciones y configuraciones necesarias para tener un ambiente de trabajo funcional.

Dado el hecho de que normalmente no tenemos ni idea de que estamos haciendo 😉 esto se convierte en un calvario que normalmente nos hace decir “Meeeehh… lo dejo para otro dia”

Una forma sencilla y practica de obtener un ambiente de desarrollo (algunos dice que de producción también) para Ruby on Rails es usar los stacks de instalación de Bitnami.

Estos señores han hecho un fantastico trabajo creando paquetes de instalación de los productos open source mas populares, entre ellos WordPress, Joomla y Alfresco. Y al mismo tiempo han generado paquetes diseñados para reproducir ambientes como LAMP (Linux Apache MySQL y PHP/Perl/Python).

Para no hacercela cansada Bitnami ofrece un paquete de instalación de Ruby on Rails + MySql + Subversion + etc, que viene listo para meter al microondas y comercelo. Los paquetes suelen ser auto contenidos y permiten cambiar la configuracion de los puertos donde las servicios escuchan, lo cual nos brinda la ventaja de no aruinar nuestra bien cuidado ambiente de trabajo :s

El RubyStack esta disponible para Windows, Mac y Linux y pueden descargarlo gratuitamente desde el sitio de Bitnami.

Si lo descargan y les funciona bien dejen un comentario para ver que tal les fue.

Buena Suerte!!!


Sigueme…

Categorías

Cosas que salen de mi cabeza

Error: Twitter no responde. Por favor, espera unos minutos y actualiza esta página.

Anuncios