Hace tiempo que tenía ganas de leer algún libro técnico 'filosófico', que hablará más sobre la forma de trabajar y buenas prácticas que sobre programación sin más.
En la Conferencia Rails, Sergio Gil en su charla recomendó un par de libros, y finalmente me he comprado Practices of an Agile Developer. Supongo que tarde o temprano tambien me acabaré leyendo el otro (The Pragmatic Programmer)
No habla de nada revolucionario ni reinventa la rueda, pero te explica todo eso que ya sabes y que no siempre aplicas. Y después de leerlo dan ganas de intentar hacer las cosas un poco mejor, que era mi objetivo al leerlo
El libro tiene una frase que me ha gustado mucho y que he puesto de título en esta entrada
Is Everyone Better Than You? Good!
Ya que me he sentido muy identificado tanto con esa frase como con el parrafo que viene despues en el libro. Viniendo de la tierra de los ciegos donde el tuerto era el rey, cuando empecé a trabajar en ASPgems, una de las cosas que más me gusto fue ese sentimiento de 'soy el más torpe de todos, cuanto por aprender!!!'
Y el día que ya no me pase... pues me tendré que plantear cambiar de trabajo :)
viernes, 23 de enero de 2009
lunes, 29 de diciembre de 2008
Código duplicado en Ruby
En mi anterior trabajo, las raras veces que entre reunión y documento y reunión me dejaban trabajar un rato, una de las herramientas imprescindibles para mi en Netbeans era PMD, tanto para detectar errores como para intentar hacer mejor código.
Netbeans da algunas sugerencias de código en Ruby, subraya las variables no usadas, pone en negrita las variables/métodos no definidos,... pero todavía le falta para llegar al nivel de PMD en Java.
He estado buscando a ver si hay algo parecido para Ruby y dentro de PMD he encontrado que tiene un módulo para detectar código duplicado: Copy paste detector que se puede ejecutar desde linea de comando o usando Java Web Start.
Dependiendo del tamaño del bloque repetido a buscar a veces da un
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(Unknown Source)
at net.sourceforge.pmd.cpd.SourceCode.getSlice(SourceCode.java:133)
at net.sourceforge.pmd.cpd.MatchAlgorithm.findMatches(MatchAlgorithm.java:84)
Pero jugando un poco con el tamaño funciona y he encontrado unos cuantos trozos de código a refactorizar :-)
Y como ejemplo, la salida que da al ejecutarlo sobre el directorio rails. Con un tamaño de chunk menor de 60 da la excepción anterior, pero con un tamaño mayor funciona bien, y sólo encuentra duplicados en los test y en ficheros de zonas horarias, así que parece que por lo que respecta a código duplicado, rails está bien hecho :-)
Netbeans da algunas sugerencias de código en Ruby, subraya las variables no usadas, pone en negrita las variables/métodos no definidos,... pero todavía le falta para llegar al nivel de PMD en Java.
He estado buscando a ver si hay algo parecido para Ruby y dentro de PMD he encontrado que tiene un módulo para detectar código duplicado: Copy paste detector que se puede ejecutar desde linea de comando o usando Java Web Start.
Dependiendo del tamaño del bloque repetido a buscar a veces da un
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(Unknown Source)
at net.sourceforge.pmd.cpd.SourceCode.getSlice(SourceCode.java:133)
at net.sourceforge.pmd.cpd.MatchAlgorithm.findMatches(MatchAlgorithm.java:84)
Pero jugando un poco con el tamaño funciona y he encontrado unos cuantos trozos de código a refactorizar :-)
Y como ejemplo, la salida que da al ejecutarlo sobre el directorio rails. Con un tamaño de chunk menor de 60 da la excepción anterior, pero con un tamaño mayor funciona bien, y sólo encuentra duplicados en los test y en ficheros de zonas horarias, así que parece que por lo que respecta a código duplicado, rails está bien hecho :-)
jueves, 11 de diciembre de 2008
Curioso comportamiento de nil.id
En un trozo de código similar a este:
user_id = User.find_by_email(email).id rescue nil
if user_id.nil?
....
Me he vuelto a encontrar otra vez con un curioso comportamiento. En desarrollo funciona bien, pero en producción devuelve un user_id incorrecto en lugar de un nulo cuando el usuario no existe.
Es debido la forma de acceder del objeto nil a su atributo id. En modo desarrollo devuelve una excepción, pero en cambio en modo producción, sólo da un warning
$ ruby script/console
Loading development environment (Rails 2.1.2)
>> nil.id
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
from (irb):1
>> exit
$ ruby script/console production
Loading production environment (Rails 2.1.2)
>> nil.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 4
La solución es muy simple, o acceder al objeto a traves de []
user_id = User.find_by_email(email)[:id] rescue nil
if user_id.nil?
....
o acceder al id despues de comprobar el nil
user = User.find_by_email(email)
if user.nil?
Es algo trivial, pero a ver si escribiéndolo no me vuelve a pasar... :-p
user_id = User.find_by_email(email).id rescue nil
if user_id.nil?
....
Me he vuelto a encontrar otra vez con un curioso comportamiento. En desarrollo funciona bien, pero en producción devuelve un user_id incorrecto en lugar de un nulo cuando el usuario no existe.
Es debido la forma de acceder del objeto nil a su atributo id. En modo desarrollo devuelve una excepción, pero en cambio en modo producción, sólo da un warning
$ ruby script/console
Loading development environment (Rails 2.1.2)
>> nil.id
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
from (irb):1
>> exit
$ ruby script/console production
Loading production environment (Rails 2.1.2)
>> nil.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 4
La solución es muy simple, o acceder al objeto a traves de []
user_id = User.find_by_email(email)[:id] rescue nil
if user_id.nil?
....
o acceder al id despues de comprobar el nil
user = User.find_by_email(email)
if user.nil?
Es algo trivial, pero a ver si escribiéndolo no me vuelve a pasar... :-p
jueves, 20 de noviembre de 2008
Conferencia Rails 2008 - Impresiones
Este año he salido de la conferencia con la impresión de que ha sido un poco más floja que el año pasado, aunque puede ser algo subjetivo, ya que el año pasado fue la primera a la que iba y muchos de los conceptos eran nuevos para mi
Bueno, en mi opinión las charlas dignas de mención son:
Son dignas de mención más que por su contenido, ya que al final hay cosas que ya habia oido y leido varias veces, por tener ponentes competentes, con capacidad de mantener la atención, que se saben explicar, que se han preparado el contenido, que saben contestar a las preguntas... vamos, los requisitos minimos que debería tener una presentación para ser aceptada
El resto, o no fui o no merecen la pena ser comentadas....
Bueno, en mi opinión las charlas dignas de mención son:
- Apertura de la conferencia y Keynote por FXN
- Buenas prácticas de desarrollo en Ruby on Rails
- Rails HOT or NOT
- BDD desde las trincheras
- XING.faster! Speeding up our site with frontend optimization
- Optimización, rendimiento y escalabilidad en ActiveRecord
- Keynote por Obie
Son dignas de mención más que por su contenido, ya que al final hay cosas que ya habia oido y leido varias veces, por tener ponentes competentes, con capacidad de mantener la atención, que se saben explicar, que se han preparado el contenido, que saben contestar a las preguntas... vamos, los requisitos minimos que debería tener una presentación para ser aceptada
El resto, o no fui o no merecen la pena ser comentadas....
lunes, 13 de octubre de 2008
Conferencia Rails 2008
Ya queda menos de un mes para la Conferencia Rails, y de nuevo este año tenemos varias conferencias de miembros de ASPgems:
Seguiremos informando... :-)
- Apertura de la conferencia y Keynote por Xavier Noria
- Rails HOT or NOT por Javier Ramírez
- Harder, Better, Faster, Stronger: Rendimiento en servidores de aplicaciones Rails por Jacobo García
Seguiremos informando... :-)
Suscribirse a:
Entradas (Atom)