Acceso a la biblioteca Safari desde la UPV/EHU

Grata sorpresa la que me he llevado hoy. La Universidad del País Vasco ha llegado a algún tipo de acuerdo con la biblioteca Safari para abrirla a sus trabajadores. En la imagen he sacado una captura en la que se ve que sin haberme logueado para nada sabe que provengo de la UPV/EHU (tendrán abierto el sistema al rango de IPs, con login automático al detectar esa procedencia ….) Recordemos que la biblioteca Safari de O’Reilly es una mina de oro puro para todos aquellos a los que les guste estar a la última en informática. Una biblioteca con un fondo de libros de la propia O’Reilly, Prentice Hall, Addison-Wesley, Microsoft Press, John Wiley & Sons, Peachpit Press, New Riders, Sams, Que, Adobe Press, Apress, Manning, Cisco Press, FT Press, Dorling Kindersley Limited, AMACOM, Berrett-Koehler, Course Technology, IBM Redbooks, IBM Press, SAS Publishing, No Starch, Packt, Syngress y Wharton School Publishing. O sea, la flor y nata. Cuando digo un fondo de libros estoy hablando de de más de 5.800 libros disponibles para su lectura online, y todos los días publican alguno nuevo. Por ejemplo, en la imagen adjunta, tengo el «Programming Flex 3» publicado hace poquitos días y que casualidad estaba leyendo ahora mismo en papel. Ahora lo tengo indexado 🙂 La diferencia con la versión de acceso personal es que en el acceso vía UPV/EHU no tenemos la posibilidad de descargar capítulos en PDF ni de poner marcas/bookmarks en los libros, cosa totalmente entendible por otra parte . Un 10 para esta iniciativa.

Propiedad Intelectual y Open Source

«Intellectual Property and Open Source: A Practical Guide to Protecting Code» es el sugerente título de un libro que acabo de ver en Internet (2007, O’Reilly) y del que ya he hecho el pedido (sí, ya sé, lo puedo conseguir «de otras formas»). Escrito por Van Lindberg, un abogado que también es programador (o viceversa) se centra en los aspectos legales que atañen al desarrollo de software open source y la GPL, respondiendo a preguntas como:
* ¿Cómo interactúan los conceptos open source y propiedad intelectual?
* ¿Cuáles son los conceptos relacionados con la propiedad intelectual más importantes al lanzar un nuevo negocio o proyecto open source?
* ¿Cómo has de gestionar los temas de copyright, licencias, y otros aspectos que surgen al recibir un parche de código de otro desarrollador?
* ¿En qué aspectos has de pensar a la hora de elegir una licencia open source para tu proyecto?

«Patrón singleton» revisited

Estoy leyendo un delicioso libro, «Effective Java», de Joshua Bloch, sobre buenas prácticas Java para programadores Java (el segundo capítulo, por ejemplo, empieza explicando cómo usar métodos de factoría estáticos y sus ventajas sobre los constructores típicos, para que os hagáis una idea…). El libro es una joya, de los que merece la pena leer junto a un buen café, tomando notas en los laterales, porque está cargadito de apuntes que reutilizarás en el futuro, seguro, al menos si programas en Java (sí, ya sé, «Java is evil», etc.. etc…. ) Enumera distintos ítems, (vamos a llamarles recetas), en las que indica cómo se hace tal cosa en Java y cómo se debería de hacer. En muchas ocasiones, las recetas están directamente relacionadas con patrones de diseño, soluciones a problemas comunes. En otras, con anti-patrones : soluciones que NO se deberían de adoptar ante problemas comunes.

Sólo un comentario más de presentación, extraído del prefacio, en palabras de James Gosling, el padre de Java: «I sure wish I had had this book ten years ago. Some might think that I don’t need any Java books, but I need this one.»

Bien, una vez hechas las introducciones, pasamos a la chicha. Uno de los puntos sobre el que ya hablamos en otro post de DiarioLinux trata sobre el patrón singleton. El caso es que Bloch recomienda seguir una plantilla para aplicar el patrón singleton diferente a la que recomienda el libro de Liskov (Program Development in Java). La recomendación (de Bloch) es la siguiente:


// Singleton with public final field
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
// como todo el mundo sabe "There's only one Elvis" :-)

Yo mismo recomendaba la plantilla de Liskov frente a la de Bloch… pero visto lo visto, y sabiendo que la recomendación de Liskov podría tener condiciones de carrera… ya no hay duda. Sin embargo, el propio Bloch indica que «un consumidor de ese código con suficientes privilegios podría invocar al constructor privado usando las capacidades de introspección de Java, con el método AccessibleObject.setAccessible», así que para evitar ese problema (hay que ser rebuscado de narices), recomienda esta otra forma:


// Singleton with static factory
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}

que se parece muchísimo a la recomendación de Liskov, pero sin el problema de las condiciones de carrera.

Finalmente, llega la guinda. Bloch dice que todo lo anterior está muy bien y tal, pero que teniendo disponible Java 1.5 desde hace ya unos cuantos añitos, que nos podríamos simplificar todos un poco la vida mediante el uso de tipos enumerados (disponibles en Java desde la versión 1.5, o 5.0 para aquellos lectores más comercial-friendly):


// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}

«While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton.» Amén 🙂

PD: buscando documentación sobre esto, me he encontrado casualmente con la receta que comento en un artículo de InformIT.

Signos vitales de un proyecto software

Estoy leyendo el libro «The ThoughtWorks Anthology» dentro de la colección «The Pragmatic Programmer». Son ensayos sobre tecnologías y metodologías software de autores conocidos en el mundo de la ingeniería software (Martin Fowler, por ejemplo). Aunque algunos ensayos son duros de tragar, otros me han parecido muy interesantes de cara a la gestión de proyectos software, en especial el capítulo 8, que lleva como título «Project Vital Signs» de Stelios Pantazopoulos. Comienza diciendo : «En el campo de la medicina, un doctor o enfermera puede entra en la habitación de un enfermo, mirar la gráfica del paciente y hacerse una idea rápida y general del estado y signos vitales de dicho paciente. Con esa información a mano, el médico puede formarse rápidamente una idea sobre el estado de salid del paciente y decidir si es necesario tomar alguna acción correctiva. ¿No sería genial que existieran gráficas de ese estilo para un proyecto de desarrollo software, de tal forma que, de un vistazo nos permitieran hacernos una idea rápida de los signos vitales del mismo?» Eso es precisamente lo que el capítulo desarrolla a partir de ahí. Nos propone 5 gráficas a modo de «information radiators». Es un término acuñado por Alistair Cockburn (justo cuando estaba visitando una oficina de ThoughtWorks, la empresa de M. Fowler para la que trabajan el resto de autores del libro) para nombrar aquellas gráficas que, puestas en grande para que sean visibles por cualquier miembro del equipo, informen de los signos vitales del mismo. A partir de esos signos vitales podremos deducir el estado del proyecto. Esas gráficas se pueden dibujar sobre pizarras dentro de la sala de desarrollo o construir a través de post-its y enormes cartulinas como fondo; el estado de las graicas será actualizado por todos los miembros del proyecto (algunas sólo por ciertos roles y otras por otros). Un ejemplo para aclarar todo ésto: la gráfica «Scope burn-up»:


Es una gráfica donde vemos mucha información, muchos signos vitales del proyecto. En concreto, por cada iteración vemos:
* El número de historias de usuario sin desarrollar
* El número de historias desarrolladas pero que no han pasado aún los test de calidad
* El número de historias desarrolladas que ya han pasado los test de calidad
* La fecha en la que se pretende completar el desarrollo de todas las historias de usuario
* La fecha en la que se pretende tener validadas por control de calidad todas las historias de usuario
* Deadline
Como he dicho, la gráfica muestra los puntos anteriores por cada iteración, y además, la pendiente de cada curva (amarilla, roja, verde), nos da una idea rápida de si vamos bien o mal (si llegaremos a las fechas planificadas a tiempo o no).

Aparte del «scope burn-up chart» hay otras cuatro gráficas distintas que permiten tomar otras medidas de signos vitales (calidad de los entregables, control presupuestario, estado actual de implementación y percepción del estado del proyecto por los miembros del equipo). Lo dicho, un capítulo muy interesante y práctico para todo aquel que quiera desarrollar y gestionar proyectos software y no se conforme con los artefactos clásicos… dentro de un libro muy recomendable.