format internet:

…please wait (49% completed)…

Archive for November, 2007

Desarrollo de Plugins Rails (programa en rails como si jugases con lego)

Posted by javier ramirez on November 24, 2007

Tras mi charla de ayer sobre desarrollo de plugins con rails dejo disponible por aquí el material que usé durante mi presentación (la tira de cartón negra y las piezas de lego no van incluídas en el pack).

La podeis ver online un poco más abajo o descargarla en pdf desde la página de descargas.

Así en frío, sin los comentarios que iba haciendo, quizá la presentación no os diga demasiado (aunque da varias pistas), pero en cuanto se publique el video de la conferencia anunciaré el link para que podais ponerlo todo en contexto. *update* el video está publicado más abajo.

Un punto que me gustaría destacar es cómo la ponencia ha crecido un poquito gracias a una aportación realizada durante la conferencia. Durante mi sesión hablé de problemas derivados de la prueba de plugins que trabajen con modelos (el típico, acts_as_xxx).

Nada más terminar, y ya en la zona del coffee break, Sergio Gil Pérez de la Manga me comentó que él se encontró ese mismo problema y que implementó una solución para resolverlo. He añadido una página más a la presentación para reflejar esta solución y ahorrar trabajo a quien se encuentre con esta situación. Otra prueba más de que tener una comunidad activa y amigable es toda una garantía para mejorar tu productividad. Gracias Sergio!

Este material tiene una licencia Creative Commons Atribución-NoComercial-LicenciarIgual 2.5

searchwords: rails plugins development, plugins howto, conferenciarails2007, acts_as plugin

Posted in conferences, conferenciarails, conferenciarails2007, development, javier ramirez, plugins, ruby on rails | Tagged: , , , , , | 5 Comments »

desde la conferencia rails

Posted by javier ramirez on November 22, 2007

La conferencia rails 2007 ya ha empezado. Este año el panel de conferencias tiene muy buena pinta.

Posted in conferences, conferenciarails2007, javier ramirez | Tagged: , , , , , | Leave a Comment »

[off-topic] descargas legales

Posted by javier ramirez on November 18, 2007

Llevo años cansado de que la industria audiovisual mundial en general y la española en particular -con el agravante de tener como cómplice a los diferentes gobiernos de turno- me llame pirata, ladrón y todo tipo de lindeces por hacer algo totalmente legal bajo la Ley española.

Estoy cansado de que diversos cantantes y cantamañanas con fecha de caducidad (en concreto hasta la siguiente edición de OT o hasta que su serie de televisión consiga menos share del deseado) me acusen de robar su música. Precisamente en muchos casos soy sufridor de la misma y pagaría un (pequeño) canon por no escucharla a todas horas porque a la hija de mis vecinos le han lavado el cerebro con el marketing y de repente no puede vivir sin escuchar al pelele de la discográfica de turno.

Llevo años cansado de que si me compro un cd, un dvd o una entrada de cine tenga que soportar como me ponen diferentes trabas a ejercer mi derecho a usar como me de la gana mi copia o me llenan de publicidad insultante y tendenciosa y supuestamente intimidatoria los primeros momentos de la copia (y para colmo sin posibilidad de saltárselos). De hecho, con estas técnicas han conseguido que no compre originales de gente como ColdPlay de los que tenía sus primeros CDs y estaba dispuesto a comprarme los siguientes, pero luego decidieron complicarme la vida y decidí bajarlos directamente y dedicar mi dinero a gente con algo más de respeto por sus seguidores.

He discutido de estos temas con gente de todo tipo, incluyendo gente de SGAE* que, a pesar de tenerlo bien clarito en su propia web desde hace al menos tres años, siguen dando mensajes falsos y difamatorios.

Por cierto, si visitais el enlace anterior, los primeros dos párrafos son exactos, pero el tercero vuelve a ser tendencioso con su “Es obvio que cada vez que se hace una copia de un disco para uso privado”. Yo me bajé la discografía de The Smiths o de Madonna hace un par de años y no tenía ni un disco de ellos anteriormente. Teniendo en cuenta que hace más de 20 años que se han editado, lo mismo no es tan obvio que me los fuera a comprar si no los hubiera descargado gratis.

Afortunadamente muchos autores, cantantes (e incluso algunos artistas, que no siempre coinciden las dos facetas en una misma persona) y otras personas relacionadas con el sector audiovisual, se han pronunciado ya a favor del uso de las descargas sin afán de lucro y se muestran orgullosas de que su arte alcance al mayor número de personas posible.

Ellos saben que mientras hagan lo que saben hacer, van a estar ahí. Que su espónsor sea una discográfica, un agente o ellos mismos, es lo de menos. El problema es para la gente que vive del esfuerzo de estos artistas, pero en fin.. es el progreso… a ver si ahora vamos a escandalizarnos porque los faroleros no tienen trabajo por culpa del señor Edison.

El motivo de este post, por otro lado tan off-topic en la temática habitual de mi blog, es que acabo de leer las declaraciones de una persona muy relevante que claramente dice que lo que todos sabemos es cierto: que en España podemos descargar lo que nos de la gana mientras sea para nuestro propio uso y no lo vendamos. Y eso que descargamos lo podemos compartir con otros para su propio uso si no lo venden.. y así ad infinitum.

En el congreso de webmasters celebrándose en Madrid este fin de semana, el actual Jefe del Grupo de Seguridad Lógica de la Brigada de Investigación Tecnológica en la Comisaría General de Policía Judicial, Jorge Martín, ha hecho estas declaraciones:

No pasa nada, podéis bajar lo que queráis del eMule. Pero no lo vendáis

Lanzo una pregunta a toda esa gentuza que me viene insultando llamándome ladrón, pirata y patrocinador del tráfico de niños por ejercer mi derecho legal. Si me bajo algo del Emule, ¿Quién va a venir a detenerme? ¿El triunfito de 18 años al que vendisteis la moto de que iba a ser el nuevo Ricky Martin y ahora se pregunta porqué ya nadie se acuerda de él y porqué dejó sus estudios y su vida normal para esto? Porque me temo que los cuerpos de seguridad del Estado no están por la labor.

——

*He mencionado a SGAE y no quiero focalizar en ellos la culpa, ya que creo que recae en mucha más gente con menor repercusión mediática. El motivo de que haya hablado con ellos de estos temas es que durante un tiempo estuve vinculado profesionalmente a un proyecto tecnológico muy interesante allí, en el que coincidí con estupendos profesionales que tenían su visión de las cosas y simplemente intercambiábamos puntos de vista.

Creo que incluso en un mundo sin canon y sin limitaciones en las descargas para uso privado, una organización que represente a los autores -aunque quizás no a la vez a autores y editores- tiene todo el sentido del mundo. Pero para tener sentido, lo primero que hay que hacer es respetar al público (clientes) de sus representados y saber adaptarse a los tiempos en los que vivimos.

searchwords: descargas, ley de propiedad intelectual

Posted in internet, javier ramirez, off topic | Tagged: | 2 Comments »

yellow pages hecho en rails

Posted by javier ramirez on November 17, 2007

Gracias a happycodr acabo de enterarme de que AT&T ha lanzado su web yellowpages.com en Rails.

Me parece muy relevante porque yellowpages lleva un montón de tiempo online (no sé si era con la misma empresa detrás, pero yo la usaba sobre el 2001 bajo el mismo dominio) y porque AT&T no es precisamente ‘Cooperativa de Almacenes Ruipérez’. Otro caso de negocio para tener en la recámara cuando hable de sitios relevantes usando Rails.

update: investigando un poco más, me he ido a su web y he visto que entre las actuales ofertas de empleo tienen dos en las que entre varios otros lenguajes ponen Ruby como deseable (junto a Java, PHP y Python), y como cualidades deseables del candidato indican

  • Contributions to open source community
  • Experience working in AGILE environment

A ver si cunde el ejemplo y este tipo de requisitos se empieza a hacer genérico no sólo en empresas pequeñas sino en entornos corporativos.

searchwords: relevant sites using rails

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

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)

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 »