miércoles, marzo 21, 2012

La mirada del bosque

La mirada del bosque es un libro escrito por el aragonés Chesús Yuste conocido por, entre otras muchas cosas, su blog Innisfree, o al menos así fue como yo lo conocí y a través del blog encontré este libro.

En año 1992, en un pequeño pueblo del norte de Irlanda sucede algo inédito hasta la fecha: un asesinato. El grupo más inquieto de lugar (el alcalde, la maestra, el cura...) se propone investigarlo hasta dar con el culpable. Ese es el argumento del que se sirve Chesús para mostrarnos como era la vida en un pueblo del Ulster antes de la entrada de la República de Irlanda en la Unión Europea y el despertar del Tigre Celta.

No voy a negar que compré el libro básicamente por estar ambientado en Irlanda y estar escrito por un aragonés.

El libro tiene menos de 200 páginas y ya os puedo decir que en mi opinión le faltan otras 100 pues tan pocas páginas no dan para contar la historia de un asesinato, describir a los muchos personajes principales, crear intriga y describir Irlanda. Y lo digo porque este libro si que describe Irlanda, si que cuenta la historia del asesinato pero no describe o dedica las suficientes páginas a describir a los personajes ni llega a crear una intriga real. Por ejemplo, hay un personaje, irrelevante completamente para la historia principal, que es un chino-irlandés. Es un personaje que me gusto mucho y que podría haber formado parte de una historia corta paralela que mareara un poco al lector para hacerle creer que tenía relación con la principal pero, por la falta de páginas, este personaje se queda "cojo" (y aun así es mi personaje preferido).

Es un libro entretenido, muy fácil de leer (tanto que se puede leer en una tarde) y que muestra Irlanda de una forma bastante fidedigna pero un libro al que como digo le faltan páginas.

lunes, febrero 13, 2012

En la cabeza de Steve Jobs

En la cabeza de Steve Jobs es un libro escrito por Leander Kahney en el año 2009 que relata en poco más de 200 páginas el carácter de Jobs y la influencia de este en Apple y toda la industria de la informática/música/etc.

El libro es fácil de leer aunque en ocasiones te produce sensaciones de déjà vu al estar dividido en ocho cápitulos relacionados entre sí por lo que en ocasiones se repite. Por ejemplo en un cápitulo en el que habla del primer Mac explica que era un sistema cerrado y en el último cápitulo donde explica como le gustaban a Jobs los sistemas cerrados/completos vuelve a poner el ejemplo del Mac repitiendo prácticamente un par de líneas.

Creo que es un libro que hace dos años podía ser muy recomendable para alguien con interés en la vida y/u obra de Jobs y que no siguiera el día a día de Apple. Pero a día de hoy, con la biografía oficial en las tiendas y sobretodo con Jobs ya fallecido, ha quedado completamente obsoleto.

Para que os hagais a la idea en un cápitulo comenta que a Jobs le diagnosticaron un cáncer pero que finalmente era operable y que ahora "esta vivo y contento"... al leerlo parece un chiste de humor negro pero hay que recordar que el libro fue escrito en 2009, todavía no existía el iPad, Jobs estaba vivo, ni siquiera la AppStore había sido lanzada...

Resulta graciosa una de las críticas en la contraportada: "Entretenido, bien escrito, muy informativo y, lo más importante, actualizado".

En resumen, un libro completamente desfasado y que no os recomiendo.

domingo, enero 22, 2012

The Girl Who Kicked the Hornets' Nest

The Girl Who Kicked the Hornets' Nest es el tercer y último libro de la trilogía Millennium. Al igual que pasa con los dos libros anteriores, el titulo cambia respecto a la versión sueca (los libros en castellano si que traducen fielmente los titulos).
Este libro es una continuación del segundo y empieza justo donde el segundo acaba. Da la sensación que más que una trilogía es un 1+2. Me explico, este tercer libro continua la historia comenzada en el segundo mientras que el primero era una historia independiente. Pero al contrario de lo que ocurría en el segundo, donde la acción comienza casi desde la primera página, aquí tenemos que esperar hasta mitad del libro (a partir de la página 300 o quizá más) para que empieze lo divertido.

Creo que estaban en lo correcto los que me dijeron que se puede leer el primer libro y parar... pero que si lees el segundo debes leer el tercero. En este la historia se acaba, no deja cabos sueltos.

En resumen, y con cuidado para no estropearos el segundo libro, aquí Salander se ve envuelta en un proceso judicial y Blomkvist tendrá que usar todos los medios (legales o ilegales) para probar la inocencia de Lisbeth. Y la verdad es que tampoco puedo contar mucho más sin revelar el final del segundo libro asi que tendreís que leerlos si quereis saber de que van.

Una vez acabada la trilogía me reafirmo en decir que son unos libros entretenidos pero no me parecen tan buenos como la gente dice.

lunes, septiembre 26, 2011

The Girl who Played with Fire

The Girl who Played with Fire es el segundo libro de la trilogía Millennium. Los protagonistas vuelven a ser los mismos que en el primer libro aunque en esta ocasión se verán envueltos en una trama de trata de blancas y asesinatos.

Al contrario de lo que ocurría en el libro anterior, en este no tenemos que esperar a la página 200 para que empiecen a ocurrir sucesos interesantes que le darán el libro mayor dinamismo y lo harán mucho más fácil de leer, de hecho me parece que este es un libro muy adictivo.

La historía vuelve a estar entretenida pero me sigue sin parecer tan bueno como la gente dice que son. Para mi las novelas policiacas son las de Agatha Christie, esas donde te presentan a todos los personajes y mientras leer hace conjeturas de cual puede ser la realidad. Un libro donde al final aparecen personajes transcendentales producen cierta frustración si has estado todo el libro haciendo tus conjeturas.

De todas formas como dije del The Girl with the Dragon Tattoo son libros muy recomendables y entretenidos.

Para un resumen más completo y otro punto de vista podéis visitar Libroesfera.

domingo, agosto 21, 2011

Effective Java: Methods Common to All Objects

El capítulo tres de Effective Java explica los métodos que podemos sobrescribir de Object (equals, hashCode, toString, clone y finalize).

En el caso del equals lo más importante es recordar el contrato y las propiedades que este tiene que cumplir lo que provoca que no haya forma de extender una clase instanciable añadiendo un nuevo atributo y seguir cumpliendo el contrato. Para este tipo de situaciones la única solución es optar por la composición en lugar de la herencia (pág 37-41).

El hashCode deberá ser sobrescrito siempre que el equals lo sea y en caso de que este se complicado de calcular podremos optar por usar lazy loading.

El toString debería ser siempre sobrescrito y es aconsejable en según que situaciones explicar claramente en el javadoc del método el formato en el que se devuelve la información. Por ejemplo:
/**

* Returns the string representation of this phone number.
* The string consists of fourteen characters whose format
* is "(XXX) YYY-ZZZZ", where XXX is the area code, YYY is
* the prefix, and ZZZZ is the line number. (Each of the
* capital letters represents a single decimal digit.)
*
* If any of the three parts of this phone number is too small
* to fill up its field, the field is padded with leading zeros.
* For example, if the value of the line number is 123, the last
* four characters of the string representation will be "0123".
*
* Note that there is a single space separating the closing
* parenthesis after the area code from the first digit of the * prefix. */
@Override public String toString() {
return String.format("(%03d) %03d-%04d", areaCode, prefix, lineNumber);
}
En cuanto al clone debemos recordar que si sobrescribimos este método en una clase no-final tendremos que invocar el super.clone(). Otros consejos que da son que las clases inmutables no deberían ofrecer un clone porque generaría otro objecto exactamente igual que el anterior y que no se va a modificar. Y para terminar explica todos los problemas que conlleva este método aconsejando que en ocasiones es más simple ofrecer un copy constructor:
public Yum(Yum yum);
O una copy factory:
public static Yum newInstance(Yum yum);
También hay unas lineas dedicadas al compareTo de la interfaz Comparable y explica el "truco" de devolver la resta cuando comparamos dos números además de explicar que esto no funciona cuando comparamos un números positivo grande y un negativo ya que puede desbordar y devolver un resultado engañoso.

Para terminar finalize no debería ser utilizado.

miércoles, agosto 03, 2011

Effective Java: Creating and destroying objects

En el capítulo dos del libro Effective Java se tratan los temas relacionados con la creación y destrucción de objetos. Es un capítulo bastante básico donde explica que hay que usar Boolean.TRUE en lugar de new Boolean(true) y que nunca hagas un new String("ejemplo").
Podemos destacar dos puntos de este capítulo:
  • A partir de Java 5.0 la mejor forma de crear un singleton es usando un Enum:
public enum Elvis {

INSTANCE;

public void leaveTheBuilding() { ... }
}
  • Cuando tenemos un constructor con muchos parámetros algunos de ellos obligatorios y otros opcionales, la mejor opción es crear un Builder:
// Builder Pattern

public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;

public static class Builder {
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;

public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}

public Builder calories(int val)
{ calories = val; return this; }
public Builder fat(int val)
{ fat = val; return this; }
public Builder carbohydrate(int val)
{ carbohydrate = val; return this; }
public Builder sodium(int val)
{ sodium = val; return this; }

public NutritionFacts build() {
return new NutritionFacts(this);
}
}

private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}

sábado, julio 30, 2011

Effective Java Second Edition

Ayer terminé de leer Effective Java (2nd Edition), el libro de Joshua J. Bloch.
El libro no resulta cómodo de leer de principio a fin, a veces pienso que es mejor leer el índice para saber que contiene y usarlo como libro de referencia. No es que el libro sea denso o aburrido, es que simplemente te explica y comenta puntos que ya te has encontrado y con los que has peleado en tu día a día. Otros capítulos sí que son interesantes porque te ofrecen soluciones efectivas a problemas muy comunes. Ese tipo de problemas que sabes que tienen varias soluciones cada una con sus pros y sus contras y no sabes muy bien por cual decidirte.

El punto clave de leer este libro fue el autor. Saber la respuesta que da el hombre que diseño el API de Collections a ciertos problemas es muy útil para ganar discusiones en la oficina. La típica cuestión de poner las constantes en una clase o en una interfaz se soluciona con el comodín del: "Joshua Bloch dice que en una clase con el contructor privado". Se acabó la discusión.

En definitiva me parece un libro imprescindible si tienes poca o ninguna experiencia profesional, de lo contrario podrás encontrar capítulos curiosos e interesantes pero otros te resultarán obvios porque ya los has aprendido con el tiempo.

Resumen de los diferentes capítulos (iré actualizando la lista conforme los vaya escribiendo):