lunes, 25 de agosto de 2008

Programación Básica en Ruby

En esta sección comenzaremos a estudiar los conceptos básicos de la programación en Ruby.

Hello World

No hay buen tutorial de un lenguaje de programación que se precie de serlo que no tenga una aplicación “Hello World”, así que vamos a hacerla. Por defecto, mientras realizamos todos las pruebas en las secciones pasados, estábamos en la perspectiva RadRails de Aptana. Esto quiere decir que Aptana organizaba automáticamente las ventanas del centro y los lados para darnos vistas útiles para desarrollar en RadRails. Ahora nos vamos a olvidar que RoR existe y vamos a trabajar exclusivamente en Ruby así que vamos a pasar a la perspectiva de Ruby, que a su vez, es una organización de las ventanas para trabajar mejor con Ruby.

Presionen ‘Window->Open Perspectiva->Ruby’. Si Ruby no aparece en la lista, hagan click en ‘other’ y ahí si les va a aparecer Ruby. Ahora creen un proyecto nuevo de Ruby. Para esto hagan clic derecho sobre el Ruby Explorer, visible sobre la izquierda y elijan ‘New->Ruby Project’.

Elijan un nombre cualquiera para su proyecto y presionen “Finish”. En mi caso, yo le puse “pruebas”. Luego creen una clase nueva. Para esto hagan clic derecho sobre el Ruby Explorer y elijan ‘New->Ruby Class’.

Pónganle en nombre que quieran a su clase ya que esta sirve para hacer pruebas. En este caso yo le puse ‘Hello’. La primera letra debe ser mayúscula, por convención. Luego presionen ‘finish’. Se abre automáticamente el fuente de la clase y vemos lo siguiente.

class Hello

end

Nada mas, por ahora. A continuación del ‘end’, vamos a escribir nuestro ‘Hello World’.

class Hello

end

puts "Hello, World!"

Está pronto. Notaran que no hay separadores de linea, mas que el retorno de carro. Hagan clic derecho sobre la ventana que tiene abierto el código y presionen ‘Run as-> Ruby Application’. Automáticamente se abre la consola abajo y les muestra la salida de la ejecución de su código. También lo pueden correr con la flecha verde que hay en la barra de iconos arriba.

Comentarios

Podemos comentar lineas colocando un # delante de la misma.

Salida por consola

Existen varias formas de efectuar una salida por consola:

  • Utilizando el método ‘puts’. El método puts recibe todos los parámetros que quieran, separado por comas. Muestra cada parámetro pasado en pantalla en una linea distinta. Convierte valores numéricos a strings y por lo tanto, se le pueden pasar variables numéricas sin problema.

Ejemplo:

puts "Hello,"

puts "world!"

Devuelve por consola:

Hello,

World!

  • Utilizando el método ‘print’. Funciona de forma similar a ‘puts’ pero escribe todo en una sola linea. Los retornos de carro deben ser forzados con un “\n”, que es la secuencia de escape del enter de Ruby, es decir, la forma de representar el enter. Alternativamente, se pueden forzar con un puts vacío.

Ejemplo:

print "Hello, ", "world!", "\n"

Devuelve lo mismo que el primer “Hello World” que hicimos, es decir:

Hello, world!

  • Ademas, podemos usar ‘printf’ como si estuviéramos trabajando en C. printf acepta como parámetros un string indicando el formato en el cual queremos pasar datos y luego un numero de argumentos similar al de los datos que queremos pasar. printf toma los argumentos, los coloca en el string e imprime el string.

Convenciones

En Ruby, el nombre de una clase inicia con mayúscula. El nombre de las variables, constantes y métodos inicia con minúscula.

miércoles, 20 de agosto de 2008

Primera aplicación en Rails

El objetivo de este artículo es crear una aplicación sencilla en Rails que nos permita efectuar altas bajas y modificaciones de una tabla en una base de datos. Crearemos la tabla y utilizando los scripts que generan componentes del MVC de Rails generaremos la aplicación web.

Tema de la aplicación

Trabajaremos sobre una aplicación para una casa de alquiler/renta de películas como puede ser, por ejemplo, Blockbuster.

Creación de la base de datos

Entren al MySQL Administrator. Luego hagan clic en ‘Catalogs’. Van a ver que abajo a la izquierda les apareció un cuadro con todas las bases de datos que tienen en este momento. MySQL las llama “schemas”. Hagan clic derecho sobre el cuadro y elijan “Create new schema”. Pongan de nombre “movierent_development” y den ok. La base de datos esta creada. Por convención, “movierent” deberia ser el nombre del proyecto.

La razón por la cual al nombre le estamos poniendo “_development” es porque estamos creando nuestra base de datos de desarrollo. El proyecto creado en RadRails automáticamente trabajara con esta. Además, RadRails puede trabajar en ambientes no solo de desarrollo sino que también de prueba y producción, en cuyo caso por defecto los nombres de las bases de datos son “proyecto” + “_test” o “_production”.

Creación de la aplicación web - Proyecto

Lo primero es crear un proyecto de Rails como vimos en el artículo anterior, utilizando RadRails. Asegúrense de ponerle “movierent”. Asegúrense de que tener marcados los checkboxes que crean el skeleton, como base de datos elijan MySQL, y elijan un servidor WEBrick.

Creación de la aplicación web – Ventanas en RadRails

Vamos a precisar vistas a dos ventanas para poder hacer esto, la ventana ‘generators’ y la ventana ‘rake tasks’. Si ya las tienen, salteen el paso.

Apreten ‘window->show view->other’. Ahí abran la carpeta correspondiente a Rails y seleccionen ‘Generators’ y después hagan lo mismo para ‘Rake Tasks’. Les pueden aparecer en esa micro ventana que hay abajo a la derecha, a mi me resulto cómodo arrastrarlas y encastrarlas en la ventana de abajo al centro, la que tiene los servers.

La ventana de generators nos va a permitir crear múltiples componentes de aplicaciones de Rails mediante scripts. La ventana de ‘Rake Tasks’ sirve para ejecutar algunas tareas relacionadas con el build de nuestro proyecto con facilidad.

Creación de la aplicación web – Crear un scaffold

Ahora vamos a crear una aplicación que haga altas, bajas y modificaciones de películas con escribir prácticamente solo un par de líneas y eso será posible gracias a un scaffold. El scaffolding es una de las características mas importantes de RoR a la hora de hacerlo mas rápido en tiempos de desarrollo frente a otros frameworks.

Scaffold quiere decir andamio. El concepto es que al generar un scaffold construimos un andamio alrededor de una entidad de negocios que nos permitirá manipularlo fácilmente mediante una aplicación web sencilla. Siguiendo el patrón MVC, el scaffold creara el Model, las Views y el Controller asociadas a esa entidad.

Esto nos da una velocidad enorme para prototipar y comenzar a ver resultados rápido. A medida que vamos trabajando podemos ir reemplazando las operaciones generadas por el scaffold por las propias nuestras, hasta llegar al resultado final.

En este caso, vamos a crear uno para manipular películas. Consideraremos que una película tiene los siguientes campos:

  • Nombre

  • Duracion en minutos

  • Fecha de edicion

  • Tipo (DVD|VHS)

  • Sinopsis

Para crear el scaffold, vamos a la ventana de generators y en el combo elegimos ‘scaffold’. En la parte de parámetros es donde especificaremos el nombre de la entidad más todos sus campos. Debemos ingresar lo siguiente:

Movie name:string duration:integer releasedate:date dvd:boolean synopsis:text

La sintaxis incluye el model seguido de todos sus campos, especificados como ‘nombre:tipo’. El único tipo de datos básico que quedo fuera del ejemplo es ‘float’.

Eso debería bastar. Si en el explorador del proyec

to van a app/models van a ver un archivo movie.rb que es el fuente correspondiente a su model. En app/controllers y en app/views, aun más archivos han sido creados para completar los elementos que faltan del MVC.

Usando los generators, de la misma forma que creamos el scaffold, pudimos haber creado el model y el controller por s

eparado, si así lo hubiésemos querido.

Creación de la aplicación web – Migración de la base de datos

Lo único que falta ahora es crear la tabla en la base de datos. Esto también se hace de forma bastante automática. Si miran dentro d

el explorador del proyecto, se van a encontrar una carpeta ‘db/migrate’. Esta tiene un script correspondiente a su model, con todos los campos especificados por ustedes.

Correr ese script les genera automáticamente la tabla. Para esto previamente tienen que seguir dos pasos.

  • Editen el archivo database.yml dentro de config en el explorador del proyecto. Estamos trabajando en el ambiente de desarrollo, así que en la parte que dice:

development:

adapter: mysql

encoding: utf8

database: movierent_development

username: root

password:

host: localhost

Donde dice ‘password’ pongan su password para el usuario root de MySQL. Guarden el archivo.

  • Corran el script. Para eso elijan la ventana de ‘Rake tasks’, y en el combo pongan ‘db:migrate’. Presionen ‘Go’.

Después de esto, solo nos queda probar que efectivamente funcione lo que hicimos.

Creación de la aplicación web – Probarla

Lo primero es arrancar el servidor web sobre el cual corre la aplicación. Chequear la ventana de servers que esta abajo al medio. Busquen un server que se llama “movierentServer”.

Si en la columna de status dice ‘stopped’, hay que iniciarlo. Para eso apretan la flecha verde de arriba de la misma ventana, que corresponde con ‘start server’. Al cabo de unos momentos va a decir ‘running’.

Además, es en el server que pueden configurar en que ambiente quieren trabajar, si en desarrollo, prueba o producción. Para eso, con el server parado, hacen clic derecho sobre el mismo y presionen ‘edit server’. No lo vamos a hacer ahora.

Abran su web browser, si usan Firefox mejor. Entren a http://127.0.0.1:3000/movies. 127.0.0.1:3000 es donde esta corriendo el servidor por defecto y /movies indica que queremos entrar a la pagina principal del ABM de movies. Cuidado, si ya tienen otro proyecto es posible que el puerto 3000 ya este asignado a este y que nuestro proyecto movierental tenga otro puerto, como el 3001. Tambien lo ven en la ventana de edit server.

La pagina principal es un listado de todo lo que esta en la tabla movies, de acorde a lo que creamos en el scaffold.

Si presionamos ‘new movie’ vamos a poder ingresar una pelicula nueva.

Después de confirmar su ingreso, la vamos a ver en el listado.

¡Felicitaciones! Hemos creado nuestra primera aplicación web con RoR. Experimenten un poco más con la funcionalidad de la mini aplicación que hemos creado. La conclusión que debemos sacar es que prácticamente con una sola línea de parámetros pasada a un script pudimos crear el ABM para una tabla, completo. En otros frameworks, para crear un ‘hello world’ sencillo, sin conocimientos previos, podemos estar alrededor de dos horas.

Por supuesto que en la vida real no vamos a trabajar usando scaffolds. Pero muchas veces se demora en presentar resultados y esto es lo que justamente hace que después uno sea vulnerable al cambio. Cuando se ve el software que tenemos hecho, después de que hemos trabajado mucho, nos damos cuenta de que no cumple con las especificaciones del cliente. Al poder prototipar rápido y fácil nos volvemos más ágiles, pudiendo reaccionar al cambio más rápidamente.


martes, 29 de julio de 2008

Instalación de Ruby on Rails

Para poder desarrollar con Ruby on Rails idealmente debemos instalar seis paquetes, en el orden que se muestra abajo. El ambiente elegido en este caso es Windows. La instalación en Linux deberia ser similar. Sigan los hipervínculos para llegar a las páginas donde se puede bajar cada software. Explicaremos los pasos que hay que seguir para llevar a cabo la instalación de cada uno, en el caso de que no se explique nada es porque la instalación debería considerarse trivial.

  • El interprete de Ruby
  • El framework Rails (ver instrucciones más adelante)
  • El Java Runtime Environment (Necesario para correr RadRails)
  • Aptana Studio, una IDE a la cual le instalaremos el plugin RadRails, para desarrollar en RoR
  • MySQL, la base de datos sobre la cual trabajaremos. Bajen el MySQL community server. Viene en dos sabores, Windows Essentials y una versión completa. Yo uso la completa, ustedes si prefieren bajen la otra.
  • MySQL GUI Tools, una serie de herramientas para poder realizar tareas con MySQL de forma visual.

Ruby

Después de instalar el interprete de Ruby, es recomendable probar que funciona para verificar que esta todo en orden. Para esto, abran una consola, escriban ‘irb’ y presionen enter. Si se abre el prompt de irb (Interactive Ruby) es que esta todo en orden.

Rails

Para instalar el framework Rails, asegúrense de tener conexión a Internet, abran una consola y escriban ‘gem install rails –r –y’. ‘gem’ es un administrador de paquetes de Ruby. Si quieren más información, solo escriban ‘gem’ en la linea de comando. Básicamente, con ‘install’ le estamos indicando que queremos instalar un paquete, ‘rails’ es el nombre del paquete, -r indica que lo vamos a hacer de forma remota, -y indica que además queremos instalar todas las dependencias.

Aptana Studio

Después de instalar Aptana Studio, debemos instalar el plugin RadRails. Al abrir Aptana deberían tener en vista la start page, que en la columna del centro muestra una lista de plugins para instalar. Ahí hagan clic en ‘RadRails’.

Start Page de Aptana Studio

Después de eso verán una ventana como la de abajo. Seleccionen ‘Aptana RadRails’ y den ‘Next’. El resto de la instalación debería ser automática.

Después de instalar RadRails, hay que setear un par de valores en la configuración para que funcionen. Ir a window->preferences.

  • Elegir Ruby->Installed Interpreters. Si no esta agregado el interprete de Ruby que instalaron en los pasos anteriores, sigan el paso siguiente. Si lo esta, saltéenlo.
  • En Installed Interpreters, presionen ‘add’. En ‘Interpreter name’ pongan el nombre que quieran y en location ingresen el path donde esta el exe de Ruby, típicamente, en ‘(DIRECTORIO_RUBY)\bin\ruby.exe’

Para probar la instalación, vamos a crear un nuevo proyecto. Presionen ‘file->new->project’. Elijan un proyecto de Rails. Elijan cualquier nombre para el proyecto, asegurense de tener seleccionados los checkboxes ‘Generate rails application skeleton’, ‘Generate a WEBrick server’ y ‘Automatically start server alter project is created’.

Configuración del proyecto a crear

Después de dar ok, hagan clic en la cajita para expandir el proyecto nuevo. Si todo anduvo bien, les va a crear la estructura y van a ver la pantalla de bienvenida del proyecto que acaban de crear. Si eso no pasó, probablemente tengan hayan hecho algo mal en los pasos de configuración.

Pantalla de bienvenida del proyecto

MySQL y MySQL GUI Tools

MySQL debería ser instalado correctamente seleccionando las opciones por defecto. Cuando termine la instalación indiquen que quieren configurar el servidor. Cuando lo estén configurando también deberían elegir las opciones por defecto. Cuando les pregunte si lo quieren instalar como servicio de Windows indiquen que si. Si no quieren tener que iniciarlo manualmente cada vez que rebooteen, pongan que lo quieren lanzar automáticamente.

MySQL GUI Tools también debería ser instalado correctamente si eligen las opciones por defecto.

Para testear la instalación de MySQL, después de instalar las GUI Tools, abran el MySQL Administrator. Pongan el password de root que eligieron durante la instalación y presionen ‘ok’. Deberían ver una pantalla como la siguiente.

lunes, 21 de julio de 2008

¿Qué es Ruby on Rails?

Ruby on Rails (RoR), es un framework para crear aplicaciones web, que busca simplicidad y agilidad, permitiendo de esta forma crear aplicaciones con mucho menos código, tiempo y esfuerzo que otros frameworks mientras que reduce el trabajo de configuración al mínimo.

Cualquiera que haya participado en un proyecto de desarrollo grande esta enterado de la cantidad de papeleo y burocracia en la cual uno se va metiendo de a poco a medida que avanza en el ciclo de desarrollo y va generando más y más documentos. Frecuentemente, esta burocracia termina generando software extremadamente complejo, difícil de mantener y vulnerable a los cambios. Rígido.

El desarrollo ágil busca tener un proceso de desarrollo basado en “individuos e interacciones por encima de procesos y herramientas” y prefiere tener énfasis en “responder al cambio antes que obedecer a un plan”. El tema es lo suficientemente interesante como para escribir un articulo entero de él, pero básicamente, el desarrollo ágil busca adaptarse fácil a los cambios eliminando todas las cosas que te enlentecerían en ese sentido si uno siguiera un esquema clásico. Y no perder de vista que lo que importa son los resultados, por más que uno siga un proceso, si el proceso produce un fracaso, esta mal.

La mayoría de los frameworks para aplicaciones web no se adaptan especialmente al desarrollo ágil. Es aquí donde Ruby on Rails quiere hacer una diferencia.

Sobre Ruby

Ruby es un lenguaje de programación con tipos dinámicos, interpretado, reflectivo, orientado a objetos.

  • Que tenga tipos dinámicos quiere decir que el tipo de un objeto se determina dinámicamente cada vez que se utiliza. Por lo tanto, no tenemos que declararlo previamente. Por lo tanto en Ruby, las siguientes líneas de código son validas:

resultado = 1 + 1

resultado = “dos”

  • Que sea interpretado quiere decir que la implementación del código se realiza a través de un interprete, un programa que va ejecutando línea por línea del código, en lugar de ser compilado. Como no hay que compilar, el ciclo de modificar código, ejecutarlo y testearlo se hace mucho más rápido. Que sea interpretado facilita que pueda tener tipos dinámicos, reflection, que sea multiplataforma, y que sea más fácil de debuggear, entre otras ventajas. El código compilado se ejecuta mucho más rápido, por contraste.
  • Que sea reflectivo quiere decir que soporta reflection. Esta es una propiedad que permite que el programa se modifique a si mismo en tiempo de ejecución. Pueden leer mas y ver ejemplos acá
  • Que sea orientado a objetos quiere decir que sigue el paradigma de la Programación Orientada a Objetos. Explicar lo que es escapa al alcance de este articulo, y si uno no sabe lo que es, antes de seguir con RoR se debería leer un poco al respecto.

Sobre Rails

Rails es un agregado a Ruby. Además del framework, trae un montón de librerías y utilidades para generar código. En teoría, es tan ágil y liviano que permite desarrollar aplicaciones web diez veces más rápido que otros frameworks, como J2EE, sin sacrificar calidad.

Esto es posible porque Rails esta construido sobre dos principios, ‘convención antes que configuración’ (convention over configuration) y ‘no te repitas’ (don’t repeat yourself).

‘Convención antes que configuración’ es un paradigma de diseño que busca favorecer que los desarrolladores tomen menos decisiones y de esa forma, que la tarea de desarrollar sea más simple. En este caso, se trata de aplicar una convención de nombramiento de objetos y campos de tablas de bases de datos para que no haya que especificar como se hace.

Es decir, si tenemos una clase ‘Cliente’ es razonable que su tabla se llama ‘Clientes’. Al aprovechar esa convención nos ahorramos tener que escribir archivos de configuración que especifiquen como se hace un mapeo clases-tablas.

Tradicionalmente, los frameworks precisan muchos archivos de configuración, para mapear urls con clases y clases con tablas. Esa es una de las ventajas que tiene Rails.

Esto no nos restringe a romper la convención si queremos y especificar mapeos distintos a los que se establecen por defecto, pero perdemos parte de los beneficios.

‘No te repitas’ es un principio que intenta reducir la duplicación. La idea es que la información duplicada es difícil de mantener, da lugar a inconsistencias y por lo tanto, dificulta el cambio. Nos hace menos ágiles. Si este principio se aplica exitosamente, los cambios solo se hacen en un único lugar y todo un sistema mantiene una coherencia.

En RoR, esto se refleja de forma tal que no hay que definir los miembros de una clase que manipula datos, ya que los lee directo de las tablas correspondientes.

Además, Rails esta basado fuertemente en el patrón MVC (Model View Controller). En este patrón se busca aislar la lógica de negocios de la interfaz de usuario, donde el Model representa los datos de la aplicación y las reglas de negocios, el View es la interfaz que se usa para interactuar con los datos y el Controller se encarga de realizar la comunicación entre Model y View. Esto causa que podamos cambiar fácilmente la apariencia visual o la lógica de negocios sin que los cambios de una tengan un impacto en la otra.

  © Blogger template 'Morning Drink' by Ourblogtemplates.com 2008

Back to TOP