Archive for the RubyOnRails Category

BARCELONA!!!!!!!
Si señores el año que viene tenemos Euruko en España. Para ello se está creando una asociación de programadores en Ruby de la que formo parte.

Os dejo los enlaces oficiales:

Nos vemos en Barna!!!!

En la última semana tuve que trabajar con maquinas de estado y probe el plugin de acts_as_state_machine y la verdad es una maravilla. Este plugin nos permite definir una serie de estados para un objeto junto con las transicciones de los estados. Cada estado lleva asociados tres tipos de callbacks en tres momentos temporales:

1
2
3
:enter => Proc.new { |bar| foo } #antes de entrar al estado.
:after => Proc.new { |bar| foo } #después de entrar al estado.
:exit  => Proc.new { |bar| foo } #al salir del estado.

El uso del plugin es bastante sencillo. Empezamo con la instalación:

1
2
$ script/plugin install / 
http://elitists.textdriven.com/svn/plugins/acts_as_state_machine

Una vez instalado solo tenemos que definir el modelo de la siguiente manera (para no liarlo mucho solo pondré los elementos realcionados con el plugin):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Ticket << ActiveRecord::Base
  acts_as_state_machine :initial => :opened
 
  state :opened, :enter => Proc.new { #Validates something }
  state :asigned, :after => Proc.new { #Add to TODO }
  state :closed,  :exit   => Proc.new { #Audit ticket }
 
  event :asig do
    transitions :from => :opened, :to => :asigned
  end
 
  event :close do
    transitions :from => :opend, :to => :closed
    transitions :from => :asigned, :to => :closed
  end
end

Con esto nos creariamos una clase Ticket con tres estados, opened, asigned y closed. Los eventos son los encargados de desencadenan las transiciones entre los estados.

Una vez en el controlador podríamos hacer:

1
  @ticket.close!

y el estado de la incidencía pasa a cerrado.

En la base de datos el campo por defecto que Act_as_state_machine usa es el state que podeís modificarlos usando :column como opción. Ahora queda trastear. espero que os ayude en algo.

Saludos.

Referencias:
acts_as_state_machine en Agil Web Development

La gestión de la configuración es uno de los temas más importantes dentro del mundo del desarrollo de software. Por el año 1970 se comenzaron a usar los VCS (Version Control System) que mejoraron la ayuda a desarrolladores permitiendo tener un control sobre diferentes versiones del código en el que trabajaban. Por aquella época se usaban bastos mainframes para realizar esa tarea de forma CENTRALIZADA.

Años más tarde se lanzó CVS (Concurrent Version System) desarrollado por GNU que dió paso a Subversion (SVN) uno de los VCS más usados hoy en día.

Pero una nueva corriente de DVCS (Distributed Version Control System) está pegando con mucha fuerza desde el 2004. Hoy tenemos una oferta muy amplia de DVCS: Monotone, Darcs, Bazaar, Mercurial y GIT desarrollado por Linus Torvalds y que sin duda es mi preferido.

De GIT destacaría su rápided y facilidad a la hora de trabajar con Branches y solucionar problemas. El concepto de Branch difiere del de SVN. En SVN erán ramas estables y finales (esas que no se deben tocar :P ) mientras que GIT las trata como puntos de inflexión en las que se separa de la rama principal (master branch). Poniendo un ejemplo: Supongamos un escenario en el que estamos desarrollando una aplicación para crear una ToDo-LiST y queremos desarrollar dos nuevas funcionalidades independientes (FA y FB) y tenemos dos desarrolladores (D1 y D2).

D1 se crea una branch nueva llamada FA y comienza a trabajar en ella a su bola.

D2 continua su desarrollo en la rama principal.

Cuando D1 acabe puede empujarle (push) los cambios a la principal y fusionar todo de nuevo (merge).

Si alguien difiere de esto por favor que me corriga ;)

INSTALACIÓN EN UBUNTU

sudo aptitude install git gitk

CREACIÓN DE CERO DE UN REPO

cd ~/foo/bar

git init

git add .

CLONACIÓN DE UN REPO EXISTENTE

git clone URI

STATUS Y DIFFERENCIAS

git status

git diff

MANEJO DE BRANCHES

git branch foo #Crea la rama foo

git checkout foo #Cambia a la rama foo

PUBLICACIÓN Y ACTUALIZACIÓN

git commit -a -m “Mensaje” #Con -a no hace falta el git add

git fetch #Actualiza

ERRORES

git fsck #Comprueba si hay errores y limpia

Para añadir patrones o ficheros a la zona ignore solo hay que crear un fichero llamado .gitingore en el que podremos introducir los ficheros que no deseamos incluir en el repositorio.

./gitignore

*.log

db/schema.rb

*.session

Puede que halla metido la pata en algún punto, pero espero que os sirva de ayuda, para empezar. Para los maqueros la instalación se puede hacer con los Ports:

sudo port install git-core

Me gustaría que comentaseis vuestras experiencia con GIT u otro DVCS.

Ruby on Rails es increíble. Usarlo es como estar viendo una película de kung-fu, donde una docena de frameworks malvados se preparan para golpear al nuevo y pequeño recién llegado, para terminar al final derrotados en una gran variedad de imaginativas formas

-Nathan Torkington (O’Reilly)

Acabo de estar leyendo en VivaLinux que el creador de Amarok (reproductor de mp3, podcasts, etc… para linux, dentro de poco para windows) tiene la intención de reescribirlo a Ruby para su versión 3.0 en su gran mayoría. Enhorabuena Mark!!

Llevo un año y medio usando Ruby y la verdad es que no he vuelto a tocar otro lenguaje, salvo por motivos profesionales. Como dice Mark es un lenguaje robusto, inteligente, con una curva de aprendizaje baja, flexible… Lo tiene todo! Y estoy totalmente de acuerdo con él.

En algunas conversaciones con compañeros de profesión me choca el echo de que aún halla gente en el sector que no lo conozca, y más dentro del mundo del desarrollo web (RoR… LoL, te quiero, gracias por hacer mi vida más productiva). Alguan vez ya comente por aquí que en la empresa en la que trabajo desde mi llegada realizamos todos los proyectos con Ruby on Rails como framework para el desarrollo y tras la 2.0 me parece que no voy a cambiar.

La semana pasada me compré un libro de ASP .NET por que me picaba el gusanillo de ver lo que me podía ofrecer y despues de leer las primeras páginas ya me di cuenta de que lo único que me podía ofrecer era un triste drag and drop de controles… nada más.

Os animo a todos a que porvéis, si os dicen algo como que Ruby y RoR no valen para proyectos grandes, escalables, etc… podéis responder directamente: “No lo habéis provados, verdad?” ;)

Aparte de otros proyectos que desarrollamos con éxito para clientes de forma interna tenemos funcionado una preciosa hoja de gastos y actualmente estamos comenzando el desarrollo de un ERP para la empresa. El problema no es Ruby son la Old School de los “Ingenieros” que se menten a desarrollar con Struts + Spring + Beans + Ants para esto + Ants para lo otros… Yo soy Javero reconocido, pero… va siendo hora de ser productivos y de disfrutar con lo importante, que es crear.

Haber si nos ponemos las pilas en España que necesitamos desarrolladores en Ruby!!!

Un saludo a todos!!!

PD: Se cada lenguaje tiene sus opciones más útiles y hay ciertas cosas para las que Ruby aún se queda un poco corto, pero tener la mosca detras de la oreja ;) Yo jamás me pondría a desarrollar una aplicación para PDA’s usando Ruby, pero seguro que es por que aún no se como, jejejeje

Esta semana se celebraró en Santiago una Jornada sobre la web semántica y la web 3.0 (solo de manera teórica de que podía ser) donde se debatió sobre la web 3.0 como la formula web2.0 más contenido semántico.

Desde hace algún tiempo venía leyendo algunos artículos sobre el tema pero no me puse nunca a investigar ni a trastear sobre ello (ya me llego con las ontologías en la carrera :P). Lo primero que hice al llegar a casa fue buscar algo para mi querido RoR y ahí estaban ellos, no me podían defrauda, ActiveRDF.

Los creadores, todos miembros del DERI, lo definen de una manera muy clara: “ActiveRDF es un sistema de mapeo, para RDFS, similar al ActiveRecord con las bases de datos”.

Echando un vistazo por encima tiene muy buena pinta, en la wiki podéis encontrar toda la información que os haga falta junto con un magnifico “GettingStarted” para no andar perdidos en el tema. Yo por mi parte comienzo a tratear :D, ya os iré contando como va el tema.

Desde el blog /dev/null leo la publicación de una serie de screencasts sobre la linea de desarrollo que va a seguir Ruby on Rails en lo que ha intefaces se refiere. Según se comenta es una mejora de las técnicas de andamiaje actuales sustituyendo el scaffold por scaffold_resources.

Las novedades que más código nos van a ahorra son las de la generación automática de los archivos de migraciones y la inclusión dentro del archivo de rutas de la directiva map.resources que nos permite trabajar con url’s más limpias.

O dejo el enlace donde están los screencasts y mejor lo veis.

http://www.vicentgozalbes.com/articles/tag/openticket

Estar atentos a actualizaciones que vayan poniendo, por que creo que aun faltan cosas.

Hace poco que me pico el gusanillo de probar a fondo el framework RubyOnRails y ver las ventajas o desventajas que me ofrece sobre PHP.

Solo llevo un par de semanas haciendo ejemplos de libros y viendo como funcionan los controladores, el ActiveRecord, migraciones, tests y otro pijón y medio y más de características que tiene, y la verdad es que me esta dejando bastante impresionado.

Lo que más me llama la atención es la facilidad que se tiene para conseguir una primera versión con la que trastear gracias al mecanismo de andamiaje (podríamos verlo como un constructor de prototipos), y la maravilla de desentenderte de sentencias SQL.

Ahora estoy metido en un proyecto del trabajo en que tenemos que diseñar un portal de servicios parecido a la página personal de Google pero más sencillo, con generación de modulos a modo de Gadgets y personalización de los mismos.

Ya os iré contando, pero de momento para mi RoR 1 - PHP 0

;