Blog suspendido hasta nuevo aviso (actualizado)



Los observadores deben haber detectado que últimamente no estoy respondiendo tan seguido los correos ni los comentarios en este blog. He recibido en los últimos tiempos amenazas y difamaciones de todo tipo, desde el ámbito laboral como en el personal, tanto físicas como legales, por medios digitales y analógicos.

Es imposible mantener un blog con opiniones personales sin estar recibiendo constantemente presiones de censura por parte de mentes mediocres pero que tienen poder. En países desarrollados la "comunicación" es viable, y está en nuestros derechos poder opinar y criticar libremente, sean personas, empresas u organizaciones.

Pero Uruguay es el centro del "tercer mundo" y aquí las cosas son distintas. Es un país chico pero un infierno grande. La democracia ni la libertad de expresión existen.

Es difícil ser transgresor en esas condiciones, pero por seguridad de mi familia he decidido suspender mis blogs hasta nuevo aviso.

No me doy por vencido, pero tengo otras prioridades antes.

Abrazos.

Artículo publicado: "La Era de los Frameworks: Ruby On Rails"

El año pasado me puse en contacto con la editorial MP Ediciones de Argentina para estudiar la posibilidad de escribir un libro con ellos. Entre medio de varias conversaciones sobre el tema, me invitaron a escribir un artículo para su Revista .Code. El contenido, por ser la primera vez que se tocaba el tema en la revista, explica como iniciarse en Ruby On Rails, partiendo desde la instalación en cualquiera de las dos plataformas más populares: Windows y GNU/Linux.

Este artículo se publicó recientemente en el número 26 de este mes, que calculo estará llegando a Uruguay el mes que viene.

Como "gaje del oficio", es siempre de esperar que el editor de turno modifique el contenido del artículo del autor, tal vez intentando mejorar la redacción, suprimiendo partes redundantes, o tal vez, disminuyendo el tamaño por una cuestión de espacio en la revista.

Generalmente, y este caso no es la excepción, una vez que el trabajo es entregado por el autor al editor, el resto es responsabilidad del último, no comunicando sus acciones al primero (hecho que no comparto mucho).

Para que el mismo no se pierda en el tiempo ni la intención original del mismo (entre otras cosas, dejaron solo la parte que habla de Windows), y por que finalmente yo soy el autor ;-), voy a publicar a continuación la "versión original y completa" de mi artículo.

Parafraseando a la película animada "La Era del Hielo", lo titulé de la siguiente manera ;-)

------------------------------------------------

DESARROLLO WEB AGIL

La Era de los Frameworks: Ruby On Rails

Ruby on Rails es un framework de desarrollo web diseñado para aumentar extremadamente la productividad y que está empezando a causar furor entre los desarrolladores expertos.

Introducción

Aproximadamente desde el año ‘97 que me desempeño como consultor en proyectos relacionados con Software Libre, y con el correr de los años, la temática de los mismos se ha orientado progresivamente al ambiente web. Desde mis inicios me he decantado por PHP, pues era (en mi experiencia) la mejor alternativa disponible entre los lenguajes de desarrollo web.

Descarté opciones propietarias como ASP, y otras Open Source como Perl, principalmente porque PHP me ofrecía la mayor libertad al más bajo costo.

Hasta el día de hoy sigo pensando lo mismo; pero algo ha cambiado. Cada vez disponemos de menos tiempo para concretar nuestros proyectos, necesitamos dar más valor agregado a nuestros desarrollos y debemos adaptarnos más rápido a los cambios: lo que sucede es que nos están obligando a ser cada vez más productivos.

Si hace algunos años que trabajas en ambientes web y no tienes la filosofía de reaprovechar los avances de tu desarrollo de software en beneficio de los proyectos futuros, estarás siendo parte de la famosa “fábrica de ruedas”, es decir, estarás reinventando la rueda de forma constante sin aprovechar la experiencia adquirida con el pasar de los años.

De esta forma, será imposible ser “extremadamente productivo”.

¿Qué es Ruby On Rails?

Como no debemos tener miedo a lo nuevo, a los cambios, y debemos estar informados y lograr hacer juicios de valor apoyados en experiencias reales y no en meras suposiciones, es que me animé experimentar con otras alternativas.

“Ruby On Rails”, muchas veces abreviado como RoR, significa en castellano “Rubí Sobre Rieles” y por definición es un Framework Open Source para Desarrollo Rápido de Aplicaciones Web. Si somos estrictos con la definición, el nombre está compuesto por dos palabras clave: Ruby por un lado y Rails por otro. En realidad el framework se llama simplemente Rails y fue desarrollado enteramente con el lenguaje de programación Ruby. A pesar de que usas Rails, en algún momento necesitarás escribir código en el lenguaje Ruby. Por todas estas razones es que el nombre combina ambas cosas: Ruby On Rails

Está basado fuertemente en una estructura con persistencia de datos, pero lo que no nos debe preocupar es que las grandes bases de datos del Software Libre se encuentran disponibles: por ejemplo MySQL y PostgreSQL.

El creador, David Heinemeier Hansson (DHH), desarrolló este framework para cubrir las necesidades de desarrollo de un proyecto web. Este programador danés ha sido galardonado por haber desarrollado este framework con el título ”Best Hacker 2005” en el evento O´Reilly Open Source Awards, organizado por Google.

Según ha expresado en entrevistas, el origen se debe a que tenía dos ámbitos de experiencia cuando comenzó con RoR: PHP (rápido y sucio) y Java/J2EE (lento y limpio). El objetivo de ROR era conseguir unir lo mejor de ambos (rápido y limpio).

El lenguaje de programación Ruby

Vale decir que llegamos indirectamente al lenguaje. A pesar que la mayoría de las distribuciones GNU/Linux incluyen (entre muchos lenguajes) a Ruby, este es un lenguaje que hasta hace poco tiempo no era extremadamente popular si no fuera por el éxito del framework. El autor del lenguaje Ruby se llama Yukihiro Matsumoto, de origen Japonés, y es más conocido por el seudónimo de Matz.

Entre sus cualidades se encuentra que es totalmente Orientado a Objetos (más que otros lenguajes muy populares), de alto nivel, y sobre todo, “divertido de programar” (según las palabras de su autor).

Concepto base I: el patrón MVC

Los Patrones de Diseño evitan que reinventemos la rueda para resolver problemas ampliamente conocidos y resueltos innumerables veces, y a su vez, hasta nos sirven de modelo para hacer soluciones "reutilizables" y "extensibles" porque aplican las mejores prácticas del Diseño Orientado a Objetos.

Este framework se basa en un patrón de diseño muy conocido, el “Modelo, Vista, Controlador” (MVC). La idea del patrón es separar el problema en tres capas: el modelo, que representa la lógica del sistema, la vista, que se encarga de mostrar la información del modelo, y el controlador, encargado de tomar las acciones del usuario del sistema e interactuar con el modelo y con la vista.

Diagrama que describe el funcionamiento de RoR

Nuestro sistema quedará estructurado en tres capas independientes que tienen responsabilidades distintas y bien diferenciadas, logrando que nuestro sistema sea más fácil de desarrollar y mantener.

Concepto base II: el patrón ActiveRecord

En Ruby On Rails el Modelo del patrón MVC se implementa a través del mapeo del “objeto” con su correspondiente “tabla” en la base de datos.


Representación UML del patrón de diseño ActiveRecord

Este patrón resuelve el eterno problema de la comunicación entre modelos de datos distintos, entre el Relacional y el Orientado a Objetos.

¿Cómo se instala?

Existe mucha información en Internet, pero a veces peca de inexacta o se comete pequeños errores. Si no tenemos experiencia en RoR, es frustrante iniciarse con tanta dificultad extra.

Instalación en Windows (3 pasos)

El primer y mejor tutorial que existe hasta el momento para hacer una instalación es de O'Reilly: Rolling with Ruby on Rails ("Rodando con Rubí sobre Rieles"), pero solo contempla al sistema operativo Windows. Por esa razón vamos a hacer una explicación que abarque a ambas instalaciones, que a pesar de que son muy parecidas, tienen pequeños detalles a tener en cuenta.

Paso 1: Instalar Ruby

Primer paso, bajar el instalador de Ruby desde RubyForge.org.

El instalador ya incluye el Gems, la aplicación que permite instalar el framework Rails, y que usaremos en el paso siguiente.



Pantalla de instalación de Rubyinstaller con las aplicaciones que incluye por defecto

Paso 2: Instalar Rails

Si ya tienes instalado Gems, solo debes abrir una ventana que permita escribir comandos desde la línea. Presiona desde la barra de tareas:

Botón de Inicio-> Ejecutar -> y escribe “cmd”

Al presionar ENTER deberá ejecutar una consola DOS que nos permitirá digitar los comandos del instalador del framework. Deberemos posicionarnos primero en el directorio donde instalamos Ruby (realizado en el Paso 1):

cd c:\ruby\bin

C:\ruby\bin>gem install rails --remote --include-dependencies

Attempting remote installation of 'rails'

Updating Gem source index for: http://gems.rubyforge.org

Successfully installed rails-1.0.0

Successfully installed activesupport-1.2.5

Successfully installed activerecord-1.13.2

Successfully installed actionpack-1.11.2

Successfully installed actionmailer-1.1.5

Successfully installed actionwebservice-1.0.0

Installing RDoc documentation for activesupport-1.2.5...

Installing RDoc documentation for activerecord-1.13.2...

[Mensaje resumido]

Si no se agrega el último parámetro ("incluir dependencias") por cada software que falte va a preguntar si quieres instalarlo, lo que sucede casi en seis oportunidades.

Paso 3: Instalar MySQL

Al principio, no debemos complicarnos. Si lo que queremos es probar el entorno de desarrollo, cuando el instalador de MySQL nos pregunte por el usuario administrador digitaremos “root” y su clave “root”. Más adelante podremos asegurar todas estas configuraciones.

Windows Essentials (x86) 4.1

http://dev.mysql.com/downloads/mysql/4.1.html

Instalación en GNU/Linux (3 pasos)

En mi caso particular uso GNU/Linux y no Windows para desarrollar. La distribución que estoy usando actualmente es Fedora Core 4. Las distribuciones no son todas iguales, y siempre tienen sus peculiaridades. De todas formas, no debiera existir mayores problemas con las indicaciones que detallaremos a continuación. Si no cuentas con algunas de las herramientas que menciono y que simplifican la instalación, siempre está la alternativa de bajar los fuentes e instalarlos a mano.

Paso 1: Instalar Ruby

Si la instalación de la distribución no incluyó por defecto a Ruby, lo puedes hacer desde los CD's. También puedes usar un instalador en línea, para bajar las últimas versiones de los paquetes desde Internet.

El más famoso es el apt-get de Debian. En el caso de Fedora GNU/Linux disponemos de Yum.


Con Yum, todo es más sencillo:

yum install ruby

Si la instalación concluye sin errores, ya estás casi pronto para empezar a trabajar.


Paso 2: Instalar “Gem”, el “Instalador de Rails”

Rails cuenta con un propio instalador en línea que se llama Gem (vendría a ser el Yum de Fedora GNU/Linux, pero solo sirve para instalar Rails). Para poder instalar el framework hay que bajar primero el Gem y luego correrlo para que inicie la instalación. La dirección oficial es: http://docs.rubygems.org/shelf y en la sección de download deberás bajar la última versión.

Cuando dispongamos del archivo comprimido de extensión tgz, lo descomprimes en tu directorio preferido, o en el directorio estándar para estas tareas: /opt.

tar zxvf rubygems-0.8.11.tgz


Y para instalarlo, luego de entrar en el directorio generado, hay que ejecutar:

cd rubygems-0.8.11
ruby setup.rb


En todas la pruebas realizadas, la instalación no dio errores.

Paso 3: Instalar Rails

Ya estamos prontos para instalar Rails usando nuestro instalador Gem.
La sintaxis deberá ser:

gem install rails --remote --include-dependencies


Si no agregas el último parámetro ("incluir dependencias") por cada software que falte te va a preguntar si quieres instalarlo, lo que sucede casi en seis oportunidades.

En este caso, sí surgieron problemas.

gem install rails --remote --include-dependencies

Attempting remote installation of 'rails'
Successfully installed rails-1.0.0
Successfully installed activesupport-1.2.5
Successfully installed activerecord-1.13.2
/usr/lib/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- rdoc/rdoc (LoadError)


Esto significa que el software rdoc no se encuentra instalado en el sistema. Para solucionarlo simplemente ejecuté el Yum:

yum install rdoc

Installing:
rdoc i386 1.8.4-1.fc4 updates-released 119 k
Installing for dependencies:
irb i386 1.8.4-1.fc4 updates-released 62 k

[Mensaje resumido]

Y de paso, me avisa que hay una "dependencia a cumplir" que es instalar el irb, lo cual acepté.

Volví a correr la instalación del Rails y esta continuó con éxito:

gem install rails --remote --include-dependencies

Attempting remote installation of 'rails'
Successfully installed rails-1.0.0


Probar la instalación de RoR (Windows/Linux)

En primera instancia, debemos tener disponible el comando "rails" desde nuestra consola. Para probarlo, nos posicionamos en un directorio que alojaremos nuestros proyectos web basados en RoR. En el caso de GNU/Linux, lo estándar es usar subdirectorios a partir del “directorio base” llamado /var/www. Si usamos Windows, podremos crear la misma estructura a partir del “directorio base” llamado c:\rails.

Nuestro primer proyecto

Deberemos posicionarlos en el “directorio base” correspondiente a nuestro sistema, ejecutar el comando "rails" y el nombre del proyecto que deseamos crear. La idea es que el framework cree un subdirectorio con el nombre que le ingresamos, y luego él armará toda una serie de subdirectorios y archivos que corresponderán a la estructura inicial para poder comenzar a trabajar en nuestro proyecto RoR:

rails miproyecto


Esto producirá la siguiente salida por pantalla:

create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
create lib/tasks
create log
create public/images
[Mensaje resumido]

Entramos en el directorio de nuestra aplicación y ejecutamos un mini servidor web para probar que nuestro entorno RoR esté respondiendo:

cd miproyecto
ruby script/server


El último comando ejecuta el servidor, y la salida en consola es la siguiente:

=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2006-01-23 16:45:54] INFO WEBrick 1.3.1
[2006-01-23 16:45:54] INFO ruby 1.8.4 (2005-12-24) [i386-linux]
[2006-01-23 16:45:54] INFO WEBrick::HTTPServer#start: pid=7627 port=3000


Nuestro servidor atenderá el puerto 3000. Si usamos nuestro navegador y apuntamos a la dirección http://localhost:3000 (localhost representa nuestro "servidor local"), nos deberá responder un mensaje de bienvenida:


Pantalla de bienvenida que nos devuelve el servidor WEBrick, confirmando que todo fue instalado y configurado correctamente.

¡Felicitaciones! ¡El primer paso está dado!

Nuestra primer aplicación útil

Para poder hacer una prueba del nuestro entorno “veloz” de desarrollo, que mejor que hacer “esa” actividad que se repite una y otra vez en nuestros sistemas, y que el framework ya tiene sumamente resuelta: nuestro primer ABM (Altas, Bajas y Modificaciones).

Debemos crear nuestra primera base de datos y nuestra primera tabla. Ejecutaremos nuestro cliente de turno para trabajar con MySQL (existen muchos, pero puedes bajar los oficiales desde http://www.mysql.com/products/tools/), y crearemos la base de datos “miproyecto” y la tabla “cliente” con la siguiente estructura:

CREATE TABLE `miproyecto`.`clientes` (

`id` int(3) NOT NULL auto_increment,

`nombre` varchar(45) default NULL,

`telefono` varchar(45) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Y deberemos definir cual es nuestra configuración de nuestra base de datos editando el siguiente archivo:

En Windows: C:\rails\miproyecto\config\database.yml

En GNU/Linux: /var/www/miproyecto/config/database.yml

Nota: en GNU/Linux la única diferencia con los directorios de Windows es el sentido de la barra (“\” por “/”) y la ausencia de la representación de unidades a través de letras.

A continuación, deberemos modificar el nombre de la base, agregar la clave del usuario y comentar la línea “socket”:

development:

adapter: mysql

database: miproyecto

username: root

password: root

#socket: /path/to/your/mysql.sock

Si queremos ir rápido y seguro, podemos usar los “andamios” (scaffolding)

Scaffold es un veloz generador de CRUD: Create, Retrive, Update y Delete, lo que significaría en castellano: un ABM.

Posicionados en el directorio base de nuestro proyecto ejecutaremos el comando para generar el modelo:

C:\rails>cd miproyecto

C:\rails\miproyecto>ruby script\generate scaffold Cliente

exists app/controllers/

exists app/helpers/

exists app/views/clientes

exists test/functional/

dependency model

exists app/models/

exists test/unit/

exists test/fixtures/

create app/models/cliente.rb

create test/unit/cliente_test.rb

create test/fixtures/clientes.yml

create app/views/clientes/_form.rhtml

[Mensaje resumido]

Nota: si al efectuar los cambios en el código estos no se ven reflejados en el servidor web WEBrick (a pesar de restaurar el navegador), deberás reiniciar el servidor web para ver los cambios.

http://127.0.0.1:3000/clientes

Pantalla principal de nuestro CRUD desarrollada a través de scaffolding

Si presionamos sobre “New Cliente” nos habilitará a crear nuevos clientes.

Luego de ingresar el primero, nos mostrará la lista de los ingresados en el sistema y 3 nuevas operaciones que se aplican sobre nuestro ítem: Show, Edit, Destroy (Mostrar, Editar, Destruir).

Está demás decir que absolutamente toda la información que vemos, y su comportamiento, es alterable a nuestras necesidades.


Opción “New Cliente” nos permite dar nuestra primer Alta


Luego de ingresar nuestro primer cliente, tener acceso a las opciones de modificar o dar de baja



Finalmente, como se vería la página principal de nuestro ABM de Clientes luego de ingresar varios registros


La “cereza de la torta”: puliendo la castellanización

Como forma de entrar rápidamente en otro tema, para traducir a nuestro idioma los textos de nuestra aplicación (que originalmente son generados en inglés) deberemos editar por primera vez nuestras “plantillas” (templates) de código html. Como estamos dentro del patrón MVC estas plantillas se encontrarán ubicadas en la capa que representa la vista (explicado en la introducción al patrón) dentro del directorio de nuestro proyecto y con la extensión .rhtml:

C:\rails\miproyecto\app\views\clientes\edit.rhtml

Aquí podremos modificar todos los textos que están a la derecha de link_to, como por ejemplo:

<%= link_to 'Back', :action => 'list' %>

Cambiando por:

<%= link_to 'Volver', :action => 'list' %>

Si este comportamiento lo queremos hacer permanente, es decir, cada vez que nuestro sistema genere el código del “andamio”, deberemos modificar las plantillas del framework, ubicadas en:

cd [directorio_instalación_ruby]

cd \lib\ruby\gems\1.8\gems\actionpack-1.11.2\lib\action_controller\templates\scaffolds

Conclusión

Los expertos dicen que desarrollar con este framework permite crear una aplicación web en al menos diez veces más rápido que con una herramienta similar en Java. Parte del secreto está en el lenguaje de programación Ruby, en los Patrones de Diseño utilizados y en la filosofía de trabajo que sigue principios de Desarrollo Ágil.


Imagen “publicitaria”, muy provocativa, que compara la sencillez y el poder de RoR vs. J2EE de Java


¿Será el “Santo Grial” que estábamos buscando?

Aún no tengo la respuesta, pero el “lado bueno de la fuerza” está fluctuando hacia Ruby On Rails, y gracias a su popularidad, muchos otros proyectos de frameworks para desarrollo web están tomando fuerza; se puede decir que estamos entrando en “la Era” (¿o la moda?) de este tipo de estrategias de desarrollo.

Por lo pronto recomiendo empezar a conocerlo y a probarlo en ambientes “cerrados”, como una aplicación para una Intranet, implementar todas las operaciones clásicas de ABM y progresivamente implementar el resto de nuestros requerimientos para ir sumando experiencia en el framework y en este peculiar lenguaje de programación.

Y el tiempo dirá si esto es una moda pasajera o llegó para destronar a PHP, o tal vez, al mismo lenguaje Java con toda su parafernalia.

“EL REY HA MUERTO, ¡VIVA EL REY!”

"Evaluando Ruby"

"Si estás leyendo esto, asumo que estás enterado de que ha habido una gran agitación entorno al lenguaje de programación Ruby y en particular de Rails, el framework para el desarrollo de aplicaciones Web. Algunos lo ven como el futuro de la programación, otros como una diversión peligrosa.

Empecé con Ruby hace algunos años. Los Programadores Pragmáticos lograron captar mi atención y pronto se convirtió en mi lenguaje de script preferido. Con el tiempo he llegado a usarlo en gran parte de la producción de este sitio Web, en particular de este bliki. Me encanta este lenguaje.

Hay que distinguir entre mi gusto personal y si es algo que deban utilizar nuestros clientes. Podemos determinar su conveniencia en función de las características de los proyectos de estos clientes – y esto nos lleva a muchos argumentos sobre los pros y contras de la definición dinámica de tipos, convención sobre configuración, procesos versus threads (hilos) y otros. Tales discusiones son útiles, pero sigo siendo cauteloso con ellas. Hay demasiados asuntos que son difíciles de juzgar de esta forma y al final acabamos desperdiciando el tiempo en proyectos que son ralentizados por usar una tecnología que sonaba bien durante un partido de golf. Yo prefiero realizar estos juicios basándome en la experiencia – encontrar gente con experiencia exitosa en proyectos y que hayan usado Ruby.
"

Escrito por Martin Fowler
Traducido por Rafael Vacas
Revisado por Jorge Ferrer

Artículo completo en: Agile Spain

Si no sabes quién es Martín Fowler: Wikipedia (inglés)

"Patrones de Diseño en Ruby :: Singleton"

"Una critica que algunos hacen al libro "Design Patterns: Elements of Reusable Object-Oriented Software" es que las implementaciones de los patrones ahi expuestos están pensados para lenguajes estáticamente tipados (Java, C++, ...) y no cubren los lenguajes dinámicos (Ruby, Lisp, ...)

Las implementaciones de patrones de diseño en lenguajes dinámicos son por lo general mucho más sencillas que las implementaciones de los mismos patrones en lenguajes estáticamente tipados, de hecho muchas de estas implementaciones son verdaderamente triviales en los lenguajes dinámicos (en algunos casos inclusive ya son parte del lenguaje)."

Artículo completo en: La Cara Oscura

"Programar un Blog en más de 15 minutos" ;-)

Luego de leer varias veces el título me percato de la sutileza, no promete un Blog en 15 minutos, lo que verdaderamente significa es que por lo menos vas a necesitar gastar 15 minutos de tu tiempo para hacerlo ;-)

Gracias "Guille" por pasarme este enlace.



Parte 1, Parte 2, Parte 3, Parte 4


Actualización (15/05/2006): Parte 5

Actualización (26/05/2006): Parte 6

Visual Studio 2005 & Ruby


Buayacorp: "Steel es un add-in para Visual Studio 2005 que permite utilizar Ruby en este IDE. Actualmente este add-in no tiene muchas cosas, pero está previsto que para futuras versiones éste tenga: un debugger, verificación de sintáxis al estilo de los "lenguajes estáticos" como C#, soporte para Intellisense, soporte para el desarrollo de aplicaciones basadas en Rails".

Pueden descargar los instaladores de este add-in desde http://www.sapphiresteel.com/static/pages/software/download.html

"Tutor de Ruby on Rails"

"Ruby es un lenguaje de programación interpretado y orientado a objetos. La filosofía de Ruby es don't repeat yourself (DRY) - no te repitas. La idea de ruby es que usted no necesita repetir lo que ya ha definido en otro lugar. Esto hace a ruby muy compacto.

Rails es un armazón de librerías diseñado específicamente para crear aplicaciones de web. Como está hecho en ruby, es compatible con la filosofía de DRY. En vez de configuración, Rails prefiere convención y anotaciones. Esto proviene principalmente de las frustraciones con plataformas que obligan a uno a repetir en archivos de configuración XML una historia que ya se ha dicho en código."

Tutorial completo en Hackerdude

Taller #2: "Introducción a Ruby y a Ruby On Rails - Conceptos básicos"

Autores: Fernando Blat, Fernando García y Álvaro Ortiz, de la empresa Cocktail.

Presentación del Taller

Taller #1: "Introducción a Ruby y a Ruby On Rails"

"Ruby on Rails es un framework de desarrollo web,open source, optimizado para la felicidad del programador y la productividad, que hace que escribir aplicaciones web sea realmente sencillo y rápido"

Autores: Fernando Blat, Fernando García y Álvaro Ortiz, de la empresa Cocktail.

Presentación del taller

Traducción de "Rolling with Ruby on Rails" (I y II)

En el sitio Sobre Raíles están disponibles las dos traducciones de los artículos que iniciaron la fiebre por "RoR":

En Marcha Con Rails
En Marcha Con Rails 2