format internet:

…please wait (42% completed)…

Posts Tagged ‘rails madrid’

video de la mesa de frameworks del SIMO

Posted by javier ramirez on November 12, 2007

Por gentileza de Sergio, acabo de ver que el video de la mesa redonda de frameworks en la que participé en SIMO ya está colgado en google video.

Lo podeis ver directamente en este blog o si lo preferís podéis ir directamente a la web de google video

(dura más de una hora, pero realmente se puede dejar de fondo porque la imagen no es significativa, solamente el audio)

Advertisements

Posted in conferences, internet, javier ramirez, ruby on rails | Tagged: , , , , | Leave a Comment »

Creación de plugins con rails

Posted by javier ramirez on November 7, 2007

Si quieres desarrollar tus propios plugins para rails pero no tienes muy claro por dónde empezar, puede interesarte la charla que daré el viernes 23 de Noviembre en la conferencia rails 2007. Bajo el no demasiado inspirado título ‘Programa en Rails como si jugases con Lego’, presentaré los puntos más importantes que necesitas para poder programar plugins con modelos, vistas, controladores y tareas rake.

Además, hay muchas otras charlas que prometen ser interesantes. Para los que no os podais pasar, colgaré en este blog el material que use para mi ponencia y, si todo va bien, habrá streaming de video en vivo y se subirán las grabaciones a la web oficial (aunque como hay que editar el video, eso seguro que lleva unos meses).

searchwords: rails plugins, conferencia rails 2007

Posted in conferences, conferenciarails, conferenciarails2007, development, javier ramirez, ruby on rails | Tagged: , , , , | Leave a Comment »

splat operator

Posted by javier ramirez on November 4, 2007

Cuando crees que ya sabes Ruby, de repente te encuentras con algo que no conocías. A mí me pasó hace unas semanas con el splat operator (lo que David A. Black llama “the unary unarray operator” o “el operador unario de desarraymiento” :p )

El splat operator, que se representa con el asterisco en ruby, lo había visto para pasar un número variable de argumentos en definiciones de métodos, por ejemplo en el find de ActiveRecord, pero nunca me había planteado qué es lo que hacía exactamente.

Pues bien, básicamente lo que hace el splat operator es o bien separar un array en diferentes objetos, o bien agrupar diferentes objetos en un array, dependiendo si lo usamos a la derecha o a la izquierda de una expresión ruby.

Por ejemplo, en ruby podemos utilizar una expresión tal que

variable1,variable2=['valor1','valor2','valor3']

En ese caso, la variable1 acaba valiendo ‘valor1’ y la variable dos acaba valiendo ‘valor2’. El valor ‘valor3’ se pierde.

Usando el splat operator, podemos escribir esta expresión

variable1,*variable2=['valor1','valor2','valor3']

En este caso, la variable2 acabará siendo un array que contiene dos elementos [‘valor2′,’valor3’]. Éste es precisamente el uso que se hace cuando se define un argumento de una función con el splat operator. Todos los objetos que se pasen en la invocación al método a partir de ese argumento, se recibirán directamente como un array.

Si intentamos hacer algo como

variable1,*variable2,variable3=['valor1','valor2','valor3']

Obtendremos un error. El asterisco indica que se va tomar todo lo que venga a partir de esa posición para componer un array. Por este motivo, no podemos tener una variable para asignarse después, ya que no quedaría nada en el lado derecho de la expresión para ser asignado. Por este motivo, cuando usamos un número variable de argumentos solamente podemos aplicarlo en el último argumento de nuestro método.

Creo recordar que en una entrevista a Matz que lei una vez, hablaba de que una de las mejoras en Ruby 2 sería la posibilidad de definir argumentos variables al principio o al final de la cadena de argumentos, así que puede que el comportamiento del splat operator cambie para entonces, si finalmente se implementa esa funcionalidad.

Hasta aquí hemos visto cómo se comporta el splat cuando se usa en el lado izquierdo de una expresión, es decir, cuando lo usamos para convertir diferentes objetos en un array. Pero el splat tiene aplicaciones muy interesantes cuando se usa en el lado derecho de una expresión, es decir, cuando se usa para separar un array en diferentes objetos.

Uno de los casos interesantes es el uso en un when para ver si un valor está incluído en un array. Copio aquí un ejemplo directamente del antiguo blog de why

BOARD_MEMBERS = ['Jan', 'Julie', 'Archie', 'Stewick']
HISTORIANS = ['Braith', 'Dewey', 'Eduardo']

 case name
 when *BOARD_MEMBERS
   "You're on the board!  A congratulations is in order." 
 when *HISTORIANS
   "You are busy chronicling every deft play." 
 end

Francamente interesante. En lugar de hacer un include?, directamente el splat expande el array in situ a sus valores, de forma que a todos los efectos es como si estuviera escribiendo inline el contenido del array separado por comas. Rizando el rizo, esto me permite hacer un case tal que

when 'admin'|*HISTORIANS|*BOARD_MEMBERS

Y por último, una de mis aplicaciones favoritas del splat operator: guardar en un array los argumentos para la llamada a una función que espera un número fijo de argumentos, y usar el splat para convertir el array en los argumentos individuales en el momento de la llamada.

Un ejemplo de la vida real. Tengo un método definido con la siguiente signatura

def Red.upload_indexes(producto_id, max_per_batch=REDCFG::MAX_PER_BATCH, output_file=nil )

Como se puede ver, este método puedo invocarlo con uno, dos o tres argumentos. Ahora quiero escribir un script que me permita lanzar este método desde la línea de comando mediante script/runner. Una opción sería modificar mi método para que reciba siempre un array y que en función de cuántos argumentos lleguen discrimine. Sería una solución, pero mi signatura pierde expresividad, y eso no me gusta.

¿Qué tal si hago lo siguiente?

ruby script/runner "Red.upload_indexes(*$ARGV[1..-1])" %1 %2 %3 

¡¡¡Funciona!!! ¿Qué estamos haciendo exactamente? Estoy recogiendo el array de parámetros de entrada ARGV, y me quedo con todos los parámetros excepto el primero, que es el nombre del script. Ahora al array de argumentos le aplico el splat operator, con lo que se expande en sus variables individuales. Si me llaman con un argumento, se invocará a mi método con un sólo argumento, si se pasan dos o tres, se invocará correctamente.

Este mismo uso lo puedo aplicar con técnicas de metaprogramación, por ejemplo si estoy componiendo llamadas a métodos sobre la marcha y usando send.

mi_objeto.send('nombre_de_metodo',*array_con_los_argumentos)

Y ya por último, otro ejemplo más de la vida misma. En esta ocasión extendí la clase Array para que me de todos los elementos de un array excepto los que estén en las posiciones que a mí me interese. Es el inverso a values_at

class Array
  def select_except(*indexes)
    self.values_at(*(Array.new(self.size).fill{|i| i} - indexes)) 
  end
end

Aquí me defino un método que acepta un número variable de índices. Después, me creo un nuevo array con tantas posiciones como el actual, y que tiene como contenido los índices en sí mismos (0,1,2…). Ahora tomo este array y le aplico la operación de resta entre Arrays, con lo que obtengo como resultado un nuevo Array en el que están todos los índices que quiero extraer de mi array.

Ahora ya sé todos los índices que necesito extraer, y tengo un método values_at que me permite pasar una lista de índices y me devuelve el array correspondiente. El problema es que values_at no me admite un Array como argumento. No hay problema, aplicando el splat operator, consigo separar el Array en sus objetos miembro, con lo que todo funciona. Para clarificarlo, las siguientes dos líneas de código son equivalentes

[obj0,obj1,obj2,obj3].values_at(0,3)
[obj0,obj1,obj2,obj3].values_at(*[0,3])

Y con esto, que no es poco, se acabó lo que el splat operator da de sí.

searchwords: splat operator, variable number of arguments, metaprogramming, unary unarray operator

Posted in development, javier ramirez, ruby, uncategorized | Tagged: , , , | 2 Comments »

Ruby on Rails en SIMO 2007

Posted by javier ramirez on October 31, 2007

Cuando estudiaba informática en Zaragoza, fui un par de veces a SIMO en Madrid y a INFORMAT en Barcelona. Después de acabar con bolsas llenas de folletos y con merchandising de todo tipo, además de un GUPTA SQL que me tocó en un sorteo con su instalación en 9 floppies de 3,5″ decidí que no me valía la pena visitar esos sitios porque eran más un zoco que otra cosa.

Parece que se quiere que SIMO sea algo más (por lo pronto ya no dicen que sea el Salón Internacional del Mobiliario de Oficina) y se están dando los pasos para ello. Este año se va a celebrar dentro del SIMO el evento SIMO 2.0.

SIMO 2.0 trata de llevar al SIMO las iniciativas que se mueven en la informática moderna, y además de los stands y los panfletos, cuenta con unas interesantes conferencias que pueden ser lo que necesitaba el evento para convertirse en la feria de informática que una ciudad como Madrid necesita.

Tras años sin aparecer por ahí, vuelvo al SIMO este año, y lo hago además como parte de la mesa comparativa de frameworks que se celebra el próximo martes. Hablaré de porqué en ASPgems utilizamos Ruby On Rails como herramienta de desarrollo. En la misma mesa, expertos en Drupal, Code Igniter, Zend Framework y .Net expondrán los motivos por los que ellos hacen lo mismo con sus respectivos frameworks. Me hubiera gustado quizás algo más de variedad en cuanto a los lenguajes de programación en lugar de contar con tres frameworks de PHP, pero en cualquier caso promete ser interesante y seguro que tenemos varios puntos en común que refuerzan la idea de que los paradigmas de desarrollo están cambiando de ciclo.

Agustín también cuenta con otra charla sobre Ruby On Rails al día siguiente. Es bueno que SIMO se modernice y es bueno que podamos participar ahí para exponer nuestro punto de vista sobre las nuevas formas de desarrollo de software y las herramientas que nos permiten ajustarnos a la realidad de los proyectos en el mundo web saliendo de la rigidez que venía siendo la norma hasta hace poco.

searchwords: simo, conferencia, ruby on rails, frameworks, comparativa

Posted in conferences, development, internet, javier ramirez | Tagged: , , , , | 1 Comment »

RadRails 0.9.1

Posted by javier ramirez on October 27, 2007

Después de que la anterior beta de RadRails funcionase solamente para eclipse 3.2, finalmente hay disponible una nueva beta, la 0.9.1, que puede correr en Eclipse Europa (he probado en 3.3 y todo funciona bien, aunque no sé si en la 3.4 se comportará igual).

La url para el update manager de eclipse es http://update.aptana.com/update/rails/beta/3.2

Si todavía no usas ningún IDE para tu desarrollo con Ruby o Rails, te recomiendo que le eches un vistazo. Aunque es cierto que Eclipse es algo pesado, en un ordenador moderno no debería tener mucho problema para ejecutarse de forma fluída. El conjunto de aplicaciones mínimo que ejecuto a la vez en mi máquina cuando desarrollo es un Eclipse 3.3 con RadRails, una o dos instancias de Mysql, FireFox, Thunderbird, Pidgin, Winamp, Notepad++, Console2, Kerio PF y AVG. Además, es muy habitual que tenga de fondo Emule o Skype, algún documento de OpenOffice y un Internet Explorer para ir probando. Y por supuesto todo el resto de servicios normales que corren normalmente en un XP.

Con esa configuración y con 2 megas gigas de RAM en un portátil normal comprado en el MediaMarkt hace más de un año, no noto ningún problema cuando trabajo con RadRails. Muy de vez en cuando, en algún caso raro de autocompletado se me queda pensando medio minuto, pero no es lo normal. En mi máquina anterior, un portátil con 4 años de antigüedad y 1 año giga de RAM, RadRails era usable pero de vez en cuando me hacía esperar más de la cuenta.

Hay otros IDEs y seguro que todos tienen sus puntos fuertes y sus puntos débiles. De momento no he visto ninguno que tenga nada tan espectacular como para hacerme plantearme un cambio. Mis motivos para escoger Eclipse son principalmente que lo conozco desde hace años como IDE para desarrollo en Java y me siento cómodo con él, que tiene una cantidad desorbitante de plugins para casi cualquier cosa, que es open source y multiplataforma, y que es un entorno que soporta muy bien el desarrollo en prácticamente cualquier lenguaje de programación. Profesionalmente lo he usado para desarrollar/editar Java, JavaScript, ASP, HTML, CSS, PHP, C++, y Ruby.

Entre mis características favoritas de Eclipse con RadRails están la navegación entre diferentes clases con un click, la búsqueda de clases y recursos, la integración con subversion y con la base de datos, la depuración gráfica, la gestión de los servidores Rails, la refactorización de código y vistas, y la asistencia al programar Ruby, HTML, CSS, o JavaScript.

Aparte de eso hay muchos detalles que hacen el día a día del desarrollo mucho más cómodo que usar un editor plano y la línea de comandos, a la que cada día recurro menos.

Bueno, llegados a este punto y como acabo de entregar el cuarto capítulo de una serie de nueve, ya es prudente anunciar que desde hace unos meses ando metido en la creación de un libro sobre RadRails.

A raíz de una conversación en la lista rubyonrails-talk me surgió la oportunidad de escribirlo y a pesar de que inicialmente no estaba muy seguro de querer dedicar el tiempo libre que me queda a esa tarea, acabó pudiéndome la curiosidad. Si todo va bien, terminaré de escribirlo para principios de 2008.

El título bajo el que previsiblemente se publicará es “RoR Made Easy with Aptana Radrails” y la editorial que anda detrás de esto es Packt Publishing

searchwords: RadRails, Aptana, Eclipse, PacktPublishing, javier ramirez, book

Posted in development, javier ramirez, radrails, ruby on rails | Tagged: , , , , | 2 Comments »