jueves, junio 25, 2009

Freakonomics

Freakonomics es un libro escrito por Steven D. Levitt (economista) y Stephen J. Dubner (periodista). Bajo el título podemos leer: Un economista políticamente incorrecto explora el lado oculto de lo que nos afecta, y es que de eso trata este libro; no tiene nada que ver con la economía que todos conocemos.
Preguntas como: ¿Qué resulta más peligroso: una pistola o una piscina? o ¿Qué tienen en común un maestro de escuela y un luchador de sumo? serán resueltas por este economista y profesor de la Universidad de Chicago.

El libro no tiene un hilo conductor sino que consta de varios capítulos que no tienen nada que ver entre si y que siempre tratan de contestar a una pregunta cuanto menos extraña. Nos sorprenderán los resultados a los que llegaremos sobre todo porque el sentido común parece creer lo contrario pero los números nunca mienten. Un apunte curioso es que en un capítulo desmonta la creencia popular de que en EEUU el candidato que más dinero ha gastado en la campaña es quien gana las elecciones, mejor dicho, desmonta la creencia de que la razón por la que gana es por gastar el dinero (gastar dinero y ganar están relacionados pero no son causa y efecto).

La idea principal que he aprendido al leer este libro es que porque dos sucesos tengan relación no significa que el primero provoque el segundo, ni que el segundo provoque el primero ya que puede haber un tercer suceso que provoca ambos.

Me gustó más El economista camuflado pero creo que este también es un buen libro que os gustará si os gustan este tipo de libros (a mi me ha gustado).

sábado, junio 20, 2009

Sun Open Communities Forum

Ayer terminó en Madrid el Sun Open Communities Forum. Han sido dos largos días de conferencias alrededor de Sun Microsystems, Java, Solaris, el software libre...
Como ya sabreis si me seguís en Twitter he estado por allí viendo que se cocía y ahora es el turno de que os lo cuente a vosotros.

No os puedo engañar. Me gustaría decir que fue todo fantástico, que aprendía cosas nuevas cada minuto, que la tecnología fluía por el ambiente pero os estaría mintiendo. Yo dividiría las conferencias a las que asistí en tres grandes grupos.

El primer grupo estaría formado por las charlas estilo a Mesa redonda: Adopción del OpenSource en la empresa o Uso de herramientas Open Source en Indra para el desarrollo de proyectos I+D+i en el área de eInclusion. En mi modesta opinión este tipo de charlas simplemente sobraban. La primera, la mesa redonda, podría haber sido interesante con un público profano que no conociera más software libre que Firefox pero no delante de 200 programadores. La segunda, me fuí a los dos minutos de comenzar. En la mesa redonda había también un tipo de Indra, que después de hablar de los beneficios que estaban obteniendo gracias al uso de software libre respondió a la pregunta de si liberaban software con que ellos no liberaban software porque eran una empresa de "integración"; vamos que nos dijo manzanas traigo.

Otro grupo de charlas estaría compuesto por las que impartió Simon Ritter y alguna más. Estas charlas a pesar de ser conferencias técnicas tenían un nivel muy bajo, no profundizaban, eran como un stand en el SIMO que te vende las virtudes de su producto pero que no te acaba de enseñar lo que hay por debajo. Para mí no llegarón al nivel exigible.

Y por fin llegamos al tercer grupo, el del contenido aprovechable. Y este lo era por dos razones o porque era realmente una buena charla, o porque debido a mi desconocimiento la charla me resultaba didáctica. Por ejemplo las charlas de OSGi y el Enterprise Service Bus y Desarrollo e Integracion con OpenESB puede que a un experto en integración no le enseñaran nada pero a mí me resultaron curiosas. Luego estaban las conferencias como Software Libre e Internet donde Alvaro López (del proyecto Cherokee) nos contó como estabamos "perdiendo" derechos debido a las aplicaciones web como Gmail (ahora el software y los datos los tienen terceros en lugar de nosotros) y también nos presento Cherokee, un servidor web que por un lado se puede configurar a golpe de click mediante una interfaz gráfica y por otro, promete un mejor rendimiento que Apache en entornos exigentes. En Escalabilidad de grandes plataformas- MySQL la gente de Tuenti nos contó lo que Gimente y Plunchete (de debug_mode=ON) siempre nos cuentan en el JUG Zaragoza (que los "join's" no escalan). Un detalle tonto que me llamó la atención de esta conferencia fue el siguiente: si tenemos que particionar una tabla de la base de datos y particionar memcached no debemos hacerlo con el mismo criterio ya que si nos fallara memcached provocaríamos tal cantidad de peticiones a su homóloga en base de datos que se nos caería también. Es un detalle obvio que me llamó la atención. Java Everywhere fue la conferencia de Peyrona, un autentico peso pesado en esto del software. Andaluz con mucha gracia con el que tuve el placer de echarme una cerveza. Su conferencia fue después de comer cuando la siesta quiere vencer a las ganas por aprender pero este hombre está muy acostumbrado a hablar en público, yo creo que el que más de todos los ponentes. Cual Steve Jobs se movía de derecha a izquierda mientras hablaba y hacía bromas. Debo decir que tenía muchas esperanzas en una charla técnica y profunda y en lugar de ello me encontré en una charla 2.0 (por lo de que allí el publico colaborabamos y hablabamos) divertida pero no muy técnicamente didáctica. Consistió en comentar entre todos los lugares donde se ha aplicado o se está aplicando Java y comentar como está hecho y opiniones al respecto. Java está por ejemplo dentro de un bolígrafo con el que tu escribes y directamente se te digitaliza lo escrito. O en el robot que mandaron a Marte... sorprendente. JRuby on Rails. Ruby on Rails sobre la JVM estuvo dividida en tres partes. Una de Ruby, otra de Rails y por último JRuby. Me gustó mucho porque yo conocía Ruby on Rails sólo de oidas y ahora ya se lo que es. Fue una de esas charlas de las que sales diciendo: A ver que se me ocurre programar para usar Rails. Desarrollo y test de componentes Ajax fue otra charla muy interesante donde se comentaron consejos a la hora de programar con javascript.

Por último estuvieron los talleres. Yo asistí a dos: Hands-on Spring 3.0: The next generation impartido por Sergi (del que si Dani no se equivoca es el único en toda España certificado por SpringSource para impartir educación sobre Spring) y Buenas prácticas en el desarrollo web con Grails donde me enteré como funcionaba Grails y vi las bondades de convención sobre configuración. Me gustó más el segundo taller porque más que taller fue una demostración de Grails mientras que el primero debido a la cantidad de gente que estabamos había cierto descontrol.

En resumen, dos días de congreso gratis, con comidas incluidas, donde conoces gente y pones caras a nombres y voces que ya conocías. Donde algunas conferencias eran muy interesantes, otras estuvieron bien y otras estuvieron mal pero eras libres de salirte con tu portatil a mirar el correo mientras esperabas a la siguiente. Las instalaciones un diez y la localización un cuatro.

Actualizado 25/06/2009:
En este enlace podéis encontrar las fotos del evento.

Actualizado 15/09/2009:
Han publicado los vídeos de las conferencias.

Rendimiento de bucles 'for' en Java 5

Hace ya algún tiempo leí un post sobre el rendimiento de los bucles 'for' en Javascript. El mencionado comentario defendía el rendimiento de los bucles decrementales sobre los incrementales alegando que en los primeros se compara la variable 'contador' con la constante 'cero' mientras en los incrementales se tiene que comparar en cada iteración con la variable que indica el número de iteraciones. Debido a que comparar con una constante es más rápido que con una variable los bucles decrementales son más rápidos.

Pues a mi se me ha ocurrido probar lo mismo en Java, en la máquina virtual que lleva Mac OS X (una JDK 5.0). Como podeis ver dentro del bucle lo único que hago es incrementar una variable (por hacer algo). Aquí teneis los resultados y el código utilizado:

Primero probé un bucle incremental; lo ejecuté tres veces saliendo un tiempo medio de 15.062 ms.
long loops = 2100000000;
long aux = 0;
long startTime = System.currentTimeMillis();
for (long cont=0; cont<=loops; cont++){
aux++;
}
long endTime = System.currentTimeMillis();
El bucle decremental también lo ejecuté varias veces consiguiendo un tiempo medio de 15.051 ms:
long loops = 2100000000;
long aux = 0;
long startTime = System.currentTimeMillis();
for(long cont=loops; cont>=0; cont--){
aux++;
}
long endTime = System.currentTimeMillis();
También se me ocurrió ver como se comporta el outboxing the Java 5.0. Le costó 15.063 ms.
Long loops = new Long(2100000000);
long aux = 0;
long startTime = System.currentTimeMillis();
for (long cont=0; cont<=loops; cont++){
aux++;
}
long endTime = System.currentTimeMillis();
Como podeis ver las diferencias son mínimas a pesar de los 2.100 millones de iteraciones. Sí que es cierto que el bucle decremental tiene un rendimiento mejor (10 ms) pero es claramente despreciable. En los cuatro años que llevo de vida profesional nunca he tenido un bucle tan grande como el que he usado para las pruebas y no se vosotros pero yo y la mayoría de la gente que conozco ven más "sencillos" los bucles incrementales. Es más fácil meter la pata con los < y <= en los decrementales y tener una iteración de más.
Otra cosa que sí que me ha sorprendido es el rendimiento del outboxing, es lo mismo usar long que Long supongo que esto es debido al compilador, es decir, que el bytecode acaba siendo el mismo.

miércoles, junio 10, 2009

El último aragonés vivo

Hoy os traigo un corto de David Terrer: "El último aragonés vivo". Es un corto gracioso, especialmente si eres o has vivido en Aragón, en caso contrario igual no conoces la cerveza Ambar ni lo que significó el gol de Nayim. Personalmente creo que otros cortos que he colgado en el blog son mejores (o más profesionales) pero este también está muy bien.