jueves, 29 de noviembre de 2007

Curiosidad javascript o de cómo darte cuenta de que no lo haces bien

Dos de la mañana y descubro que mi script, en determinadas ocasiones no va. Manejando strings con fechas y parseando el año, el mes y el día. Por alguna razón cuando mezclo el 8 con números inferiores la cosa no va. DEF CON DOS¡¡ Forro mi script de alerts y descubro que lo que yo creía que era un 8 en realidad no lo es.
parseInt('01') = 1
parseInt('02') = 2
...
parseInt('07') = 7
parseInt('08') = 0 (ein?)
parseInt('09') = 0 (comor?)
Después de cagarme en todo lo cagable (laico, santo, real, imaginario...) descubro que no estoy sólo y que hay que hacer las cosas como mandan los cánones... Y me voy a dormir más feliz que un regaliz (con un blog más en mi lista de favoritos).

Viva Google¡¡¡

sábado, 24 de noviembre de 2007

Conferencia Rails II: reacciones

Me pareció bastante infantil la reacción que algunas personas tuvieron ante las palabras de los representantes de SUN y Microsoft tanto en el debate sobre frameworks como en la mesa de empresas.

El mensaje principal de ambas empresas fue bastante claro: estamos haciendo esfuerzos porque las aplicaciones Ruby corran en nuestros entornos. Es cierto que cuando los ejecutivos de estas empresas utilizan el nosotros, parecen representar a un dios único y todopoderoso cuya razón es indiscutible. Y también es cierto que, sobre todo Microsoft, tiene siempre ese tufillo a te quiero vender una moto inseparable de sus productos. Pero, no por ello, todo lo que huele a empresa grande y mundo corporativo tiene que ser malo.

La primera reacción fue de rechazo. ¿Qué pintan SUN y Microsoft aquí? se preguntaban. Este rechazo resulta incomprensible a mi modo de ver. Igual parece un poco maquiavélico pero cuantos más entornos permitan instalar mis aplicaciones RoR, más clientes potenciales tendré, más podré desarrollar mi actividad y más oportunidades hallaré de mostrar las bondades de esta tecnología.

La segunda reacción fue de temor a la invasión. ¡¡No nos moverán!! le faltó gritar a alguno. Pensar que el desarrollo de RoR va a venir marcado por lo que necesiten SUN para JRuby o Microsoft para IronRuby es un poco inocente cuanto menos.

El buen hacer está en la humildad y en el orgulllo, en la experiencia y en el talento, en la fusión y en la pureza, todo ello en su justa medida.

Conferencia Rails I: tengo una noticia buena y otra mala

El viernes pasado, según llegué a casa de la Conferencia Rails 2007, me preguntó mi chica que cómo había ido la cosa. Al mismo tiempo me pasó a mi hijo pequeño con un pañal limpio y un biberón para que me reincorporase a mis labores de hogar, con lo que intenté resumir.

'Ha habido cosas buenas y cosas no tan buenas', le dije. 'Primero las no tan buenas', dijo ella.

Las menos buenas fueron, en mi opinión, la falta de autocrítica, por una parte, y la falta de experiencia, por otra. La primera provocó que incluso cuando Obie Fernández dijo que no creía en grupos de más de cuatro personas porque es imposible juntar 4 buenos programadores de Rails (idea que suscribo a pies juntillas), algunas personas se sientieran ofendidas. La segunda, obvia, en un entorno con tan corta edad es normal que (como dijo José Cabrera) los nativos en el entorno tengan experiencias cortas. Además yo no estoy particularmente de acuerdo en aquello de que un joven que lleva picando desde los 13 por puro interés a los 23 tenga 10 años de experiencia. Para programar for the hell of it (que se dice en Texas) sí; para hacer aplicaciones que se venden, sinceramente, no.

Las buenas, muchas y variadas: mucho talento, muchas ideas, expansión en USA, aplicaciones impensables.

Jorge Valdano decía que
Un buen líder ha de apostar por el talento
, y no puedo estar más de acuerdo con él. Pero también decía que
El talento necesita su lugar. Hay que ubicar a la las personas en el lugar preciso para aprovechar las virtudes y esconder sus defectos. De este modo llegaremos a la excelencia
y tampoco creo que esté equivocado en esto.

La expansión en USA la comento Obie mientra lo llevaba a la cena en mi coche . Comentó que allí es más fácil hacer de Rails un trabajo y que Rails está en la corriente principal del desarrollo web de aquel país.

Finalmente, resalto fuera de todos los temas en boga sobre Ruby y sobre Rails, dos nuevas ideas que vi en funcionamiento: RoR aplicado a la inteligencia artificial en el marketing y RoR para voz IP. Seguro que de aquellas dos demos salen cosas interesantes.

Salud y buenos alimentos¡

martes, 13 de noviembre de 2007

Cycle

Hasta ayer, sólo había visto la llamada a cycle que hace ajax-scaffold para alternar el color de las filas de una tabla. Sin embargo, cuando necesité alternar dos tipos de elementos y resetear los dos ciclos independientemente, tuve que leer la documentación de TextHelper

En resumen: podemos llamar a la helper pasando como último parámetro una Hash donde damos un nombre al objeto Cycle que internamente crea.

cycle("rowBlue1", "rowBlue2", {:name => 'tr'})
cycle("cellText1", "cellText2", {:name => 'td'})


De esta forma, podemos resetear cada uno de ellos de forma independiente:

reset_cycle('tr') reset_cycle('td')

Rápido, sencillo, eficaz.

jueves, 8 de noviembre de 2007

Ruby on Rails en el SIMO?

Ayer me comentó mi amigo Javi que había participado en esta conferencia dentro de las conferencias del SIMO 2007. En ella se habló de distintos frameworks de desarrollo sobre distintos lenguajes y entornos (Drupal, Zend, RoR, .NET...). Por lo que me ha contado, poca chicha y poca limoná.

También ayer hubo un monográfico sobre Ruby on Rails en el que participó Agustín. Veremos qué cuenta al respecto.

Por otro lado, hay que ir pensando en pagar la Conferencia Rails, no?

Salud¡

viernes, 2 de noviembre de 2007

Un poco más de SOAP - cabecera de seguridad

En un acceso por Web Service he tenido que utilizar una cabecera de seguridad. Para crear los nodos previstos por el estándar WSSE he tenido que hacer lo siguiente:

driver = ClassThatXtendsSOAPRPCDriver.new
sh = SOAP::SOAPHeader.new
sec = SOAP::SOAPElement.new('wsse:Security')
sec.add(SOAP::SOAPElement.new('wsse:UsernameToken'))
sec['wsse:UsernameToken'].add(SOAP::SOAPElement.new('wsse:Username', 'Iamtheman'))
sec['wsse:UsernameToken'].add(SOAP::SOAPElement.new('wsse:Password', 'Iamthelaw'))
sec.extraattr['mustUnderstand'] = '1'
sec.extraattr['xmlns:wsse'] = 'url_for_wssecurity_xsd'
sh.add('wsse:Security', sec)
sb = SOAP::SOAPBody.new
sb.add('OTA_HotelAvailRQ', SOAP::SOAPElement.new('my_node'))
...
my_response = driver.invoke(sh, sb)


He tenido que trabajar de esta forma porque con soap4r no he podido generar un driver adecuado a mis necesidades. Con la versión 1.5.7 hay nodos dentro de los ficheros XSD que no sabe interpretar y por ello no genera bien los tipos de datos que utiliza el driver. Parece que esto se arregla en la 1.5.8. Tendremos que probarlo.

Salud¡