Mar 18, 2012

jorgeu

Ruby on Rails. Un frameworks que deberías tener en cuenta

Ruby on rails Logo

Sin importar en qué framework o lenguaje estés trabajando y cuán satisfecho estés siempre es recomendable tener presente cuáles framewors están ganando popularidad.

Es posible que para tu próximo proyecto se te exija usar alguno de ellos y nadie querrá que te nieges por "no saber nada de ese framework".

En este artículo se discute brevemente Ruby on Rails. Un framework que sigue creciendo en popularidad a varios años de su creación.

Seguir leyendo...

Tags: ruby rails

Mar 04, 2012

uokesita

Ruby tips - Cambiando el contexto con irb

Podemos cambiar el contexto en el que nos encontramos cuando hacemos script/console en nuestra aplicación Rails. Veamos un ejemplo (suponemos que tenemos un modelo User en nuestra app)

              >> script/console 
              Loading development environment.
              
              >> irb User
              >> self
              => User(id: integer, username: string, first: string, last: string, email: string, phone: string, password_salt: string, password_hash: string, created_at: datetime, updated_at: datetime)
              >> find(:last)
              => #<User id: 12784, username: "test", first: "FirstName", last: "LastName", email: test@mail.com, phone: nil, password_salt: "am2r+CLM", password_hash: "e9d933c05f7c4ef1f3008d31fdwe31c622753dfe7c83bef8cb1...", created_at: "2012-01-18 06:50:43", updated_at: "2012-02-10 23:26:12">
              
              >> irb User.find(:last)
              >> username
              => "test"

Podemos incluso usar nuestros controladores o helpers:

              >> irb ApplicationController
              >> self
              => ApplicationController
              >> self.before_filters
              => [:check_authentication, ...]

Ya que esto es irb, tambien nos sirve en cualquier script dentro o fuera de Rails. Espero les sea de utilidad.

Tags: rails ruby

Jan 27, 2012

uokesita

Aplicaciones Rack

Que es una aplicación rack?

Una aplicación rack es cualquier objeto que responda al metodo call(), toma un solo argumento y retorna un arreglo que contiene el código de respuesta, los headers de respuesta HTTP y el cuerpo que debe responder al metodo each() por ejemplo un string, esto es lo que se llama la especificación de una aplicación rack.

Rack provee una interfaz minima, modular y adaptable para desarrollar aplicaciones en ruby, se ubica entre tu aplicación web y el servidor web manejando peticiones y respuestas HTTP de una manera simple.

Seguir leyendo...

Tags: ruby

Sep 20, 2011

jorgeu

Rendimiento Java vs. Ruby vs. JRuby

Java Ruby

Una de las páginas sobre pruebas de rendimiento que más frecuento es Computer Language Benchmarks Game donde se muestra el redimiento de varios lenguajes de programación en problemas cuya solución usa muchos recursos del computador.

Desde hace años tenía la concepción de que el runtime de Ruby era lento y pesado basado en las pruebas vistas en esa página. También de que JRuby debería superarlo ampliamente. Recientemente vuelvo a revisar y resulta que las cosas han cambiado con los años.

Seguir leyendo...

Aug 07, 2011

hugorincong

BDD con RSpec y Cucumber! (Parte III)

Describiendo Features

Para empezar a hacer BDD con RSpec y Cucumber, vamos a crear un juego de problema-solucion llamado Codebreaker. Nuestra version sera jugada en el terminal pero esta basado en clasico juego a papel y lapiz llmado "Toros y Vacas".

Vamos a desarrollar este juego usando los procesos y las practicas del BDD que se explicaron en la Parte I.

Pero antes de desarrollar nada empezemos ojeando el juego y sus reglas.

Seguir leyendo...

Jun 28, 2011

uokesita

Creando una aplicacion sinatra en Cloud Foundry

Cloud Foundry es la primera plataforma de código open source como servicio (PaaS), y no esta atada a ningún entorno en la nube concreto. Esta plataforma la podemos descargar y correr en nuetra maquina local, o bien pudiéramos correrla bajo vmware en AWS, RackSpace, etc.

Cloud Foundry te permite desarrollar bajo varios lenguajes de programación y frameworks a saber, Spring para Java, Grails, Ruby on Rails, Sinatra (Ruby) y Node.js, además de soportar 3 motores de BD diferentes, MongoDB, MySQL y Redis.

En este momento puedes probar la beta del servicio solicitando una invitación en cloudfoundry.com

He preparado un screencast del proceso que lleva deploy un sinatra app en CloudFoundry, bastante sencillo y rapido.

Seguir leyendo...

May 14, 2011

ivanacostarubio

Refactor : Extraer una Clase y Metodo

Podemos hacer muchos tipos de Refactor pero hoy nos concentraremos en la extracción de una clase "extract class". Este se refiere al extraer una clase y agrupar los metodos relacionados con esta para terminar con dos clases que definan un poco mejor lo que esta pasando. Aqui les dejo un ejemplo:

              
              class CachedEvent
              
                def self.destroy_all
                  @db = Mongo::Connection.new('localhost').db("mydb")
                  coll = @db.collection('cached_events')
                  coll.remove()
                end
              
                def self.destroy(options={})
                  @db = Mongo::Connection.new('localhost').db("mydb")
                  coll = @db.collection('cached_events')
                  coll.remove(options)
                end
              
                def self.create(attributes)
                  ## PROBLEM
                  @db = Mongo::Connection.new("localhost").db("mydb")
                  coll = @db.collection('cached_events')
                  coll.insert(attributes)
                  return coll
                end
              
                def self.all
                  @document = Array.new
                  @db = Mongo::Connection.new("localhost").db("mydb")
                  coll = @db.collection('cached_events')
                  coll.find().each {|doc| @document << doc }
                  @document
                end
              
                def self.last
                  self.all[-1]
                end
              end
              

En el código anterior podemos ver que hay bastante duplicación. Esto es un olor que nos indica que algo esta mal. Recuerden que la duplicación es la causa de muchos problemas en la programación. Pedemos ver que duplicamos la llamada a la conexión a la base de datos, en este caso MongoDB, como tambien duplicamos el llamado a la colección llamada "cached_events".

              
              class MongoC
                def self.conection
                  $mongo_connection ||= Mongo::Connection.new('localhost').db('mydb')
                end
              end
              
              MongoC.conection
              
              class CachedEvent
              
                def self.collection_name
                   self.name.underscore.pluralize
                end
              
                def self.find_collection
                  $mongo_connection.collection(collection_name)
                end
              
                def self.destroy_all
                  self.find_collection.remove()
                end
              
                def self.destroy(options={})
                  self.find_collection.remove(options)
                end
              
                def self.create(attributes)
                  self.find_collection.insert(attributes)
                end
              
                def self.all
                  document = Array.new
                  self.find_collection.find().each {|doc| document << doc }
                  document
                end
              
                def self.last
                  self.all[-1]
                end
              end
              

En este segundo ejemplo podemos ver que el código esta factorizado mucho mejor. Tenemos dos clases. La primera clase se encarga de hacer la llamada de conexión a la base de datos. En la segunda clase podrán ver que realizamos algo parecido al "extract class" pero con el metodo find_collection. Esto lo llamamos "extract method".

Recapitulando podemos decir que:

Una señal para realizar un Refactor es ver parte de nuestro código que son parecidas o identicamente iguales.

Extract Class: es una tecnica en la cual de una clase extraemos otra para separar responsabilidades.

Extract Method: es una tecnica en la cual extraemos un metodos para rehusar en varios metodos dentro de la misma clase.