He leído: The Best Software Writing I de Joel Spolsky


Lo primero que debemos decir es que este no es un libro de Joel Spolsky, aunque a primera vista pudiera parecerlo. Se trata de una serie de articulos recopilados por Joel, y que en su gran mayoría están en internet.


¿Entonces por qué comprar el libro os preguntaréis muchos? Pues por que la recopilación es excelente, porque es mucho más facil de leer, porque no es caro y porque cada artículo está brevemente introducido por Joel. En este libro encontramos todo tipo de artículos, desde algunos más técnicos a otros que van más hacia el lado de la psicología, pero sin duda si la informática y todo lo relacionado con ella te apasiona debes leer este libro.


Dentro del libro hay artículos realmente espectaculares: The Pitfalls of Outsourcing Programmers, Great Hackers, Starbucks Does Not Use Two-Phase Commit, Passion, How Many Microsoft Employees Does it Take to Change a Lightbulb?, Closing the Gap o EA: The Human Story, son los que me vienen así a bote pronto a la memoría, pero niguno tiene desperdicio. Este último es el único artículo anónimo y todo un compendio sobre lo que debemos evitar en la gestión de personal, realmente me ha impactado, quizá porque no hace mucho estuve atrapado en una empresa similar.


Pero sin duda cada uno de los lectores de este libro llegarán al final con su puñado de historias favoritas.


Teniendo en cuenta todo lo que se publica en internet, que alguien como Joel separe para nosotros el polvo de la paja es todo un lujo. Si no hubiese comprado este libro, me hubiese quedado sin leer una serie de artículos realmente interesantes, y lo que es más, no hubiese descubierto a algunos autores realmente buenos.


Es uno de los libros que más rápido he leido, literalmente lo he devorado sin esfuerzo. Y estoy seguro de que volveré a leerlo.


Un consejo para todos aquellos que sufrís un jefe que ignora totalmente lo que es la informática a pesar de que es un técnico: haced que lo lea. Sin duda servirá para que logre una visión de todos los aspectos que abarca el desarrollo de software y la informatica hoy en día. Si vuestro jefe es de los que dice: “que la informática es un medio no un fin”, “eso lo desarrolla cualquiera, tengo un sobrino que programa y lo hace en dos tardes…”, “desarrollar es arrastrar controles a una pantalla”, “la calidad del software es lo de menos, lo importante es la labor comercial” y demás perlas, llenas de desconocimiento sobre de que va la industria informática y el desarrollo de software, este libro es preescriptivo.

¿Compilando JavaScript?

Sin duda JavaScript es el leguaje del presente y del futuro. Piensa en las aplicaciones que han tenido repercusión en los últimos tiempos: Google Maps, Outlook Web Access, Live.com, Hotmail, Flickr, Community Server, etc…

Todas tienen en común que usan muchísimo código JavaScript, aunque sea generado… Yo cada vez estoy más convencido de que JavaScript es el lenguaje del futuro.

Tambien ocurre que una aplicación en la que estoy trabajando desde hace algún tiempo tiene más JavaScript que código C#. Sin duda JavaScript es un lenguaje que tiene sus puntos débiles y fuertes. Desde mi punto de vista la carencia de un compilador es uno de esos puntos que me ponen nevioso de JavaScript, como ocurre con todo los lenguajes de tipado debil.

Aunque habría que discutir mucho sobre el tema, yo siempre prefiero tener un compilador que me avise de que estoy haciendo algunas cosas mal, aunque solo sea a nivel sintactico, porque en realidad que un programa compile solo es un pequeño paso hacia que sea correcto, pero todo viaje comienza con el primer paso. Una interesante discusión sobre este tema es Strong Typing vs. Strong Testing de Bruce Eckel, que resumiento lo que expone con argumentos es que un compilador nunca sustituye a un buen tratamiento de la calidad y las pruebas en tu proceso de desarrollo.

Bueno como yo ya he comentado que me gusta tener un compilador, pues hace algún tiempo que utilizo dos herramientas sumamente utiles, que en cierto modo compensan la carencia de compilador en JavaScript y que han hecho un gran favor a mi productividad y la calidad de mi código cuando escribo JavaScript.

La primera es JavaScript Lint, excelente herramienta gratuita que 'compila' nuestro Java Script y que se integra con facilidad con Visual Studio. Ya hable someramente de ella en un post anterior sobre 'memory leaks' en JavaScript. Ideal para no volverse loco buscando donde hemos cambiado un { por un (, por ejemplo, en nuestro archivo JavaScript. Además de errores tambien nos lanza advertencias sobre aquellos aspectos de nuestro código JavaScript que con correctos sintacticamente pero que necesitan de nuestra atención por temas de corrección o rendimiento.

La segunda es una herramienta online (gratuita) que tiene su hermana instalable, JSSorcerer  (no gratuita), que da muchas más posibilidades. La versión online es capaz de detectar problemas en el JavaScript de cualquier archivo la enviemos y puede sernos de gran ayuda. No he probado la versión de escritorio.

Estas dos herramientas son en cierto modo responsables de que ya no odie JavaScript, incluso empiezo a cojerle el gustillo…

Patrones de Workflow

Sin duda gran cantidad de procesos de negocio que se encuentran en los dominios de aplicación que modelamos son susceptibles de ser expresados en forma flujos o máquinas de estados.

Con la llegada de Windows Workflow Foundation cada vez más arquitéctos van a incorporar elementos de Workflow y máquinas de estado en sus arquitécturas aprovechando las facilidades y posibilidades que esta nueva herramienta nos presta.

Ya he comentado anteriormente lo importantes que me parecen los patrones, pues bien, la buena noticia es que existe un sitio web que recopila un buen puñado de patrones relacionados con workflow. Además los patrones son explicados con animaciones flash.

El efecto WINVER y tooltips de tipo balón

¿Porqué el compilador de C++ no encuentra una función, mensaje o estructura del API de Windows? A menudo recibo esta pregunta. Resulta que el compilador de C++ no encuentra algún simbolo definido en un archivo de cabecera de Windows. A menudo nos ocurre esto cuando queremos utilizar alguna funcionalidad 'recien salida del horno' y que no esta prensente en versiones anteriores de Windows.

El error que se recibe habitualmente es: error C2065: 'IDENTIFICADOR' : undeclared identifier

Evidentemente lo primero es descartar que hayamos olvidado incluir el archivo de cabecera donde este declarado el identificador en cuestión. Para ello lo mejor es asegurarse de cúal es este archivo de cabecera consultando la MSDN sobre la función, estructura o mensaje que deseamos utilizar y que está provocando el error.

Una vez optenida esta información y seguros de no haber cometidos errores podemos encontrarnos con la sopresa de que el archivo de cabecera ¡realmente no incluye el identificador en cuestión!. Bueno, que no cunda el pánico. Es habitual que para programar utilicemos las cabeceras que trae Visual Studio con sigo. Lo que ocurre es que estas cabeceras pueden tener ya unos añitos y por lo tanto no incluir la funcionalidad que nosotros necesitamos. La solución: descargar el último SDK disponible, lo que por otra parte siempre es recomendable.

Incluso con la cabecera correcta incluida y el útimo SDK podemos encontranos con que el compilador ¡sigue sin encontrar el puñetero simbolo!. ¿Pero como @$#%&¡ puede ser?, ¡si incluso viendo el archivo de cabecera el simbolo esta ahí!. El motivo es que las cabeceras del API de Windows, incorporan un mecanismo que nos permite asegurar cuales son los requisitos minimos en cuanto a sistema operativo de nuestro programa. Se trata de una serie de macros que hemos de definir para declarar cual es el sistema operativo mínimo, estás macro que debemos definir son NTDDI_VERSION o WINVER. Para conocer los valores de estas macros para cada version de Windows debemos consultar 'Using the Windows Headers' en MSDN, por lo menos hasta que nos sepamos los valores.

Para saber cual es la versión del sistema operativo que es necesaria para usar una función, estructura o mensaje debemos acudir de nuevo a la MSDN.

Asi, por ejemplo para usar el mensaje EM_SHOWBALLONTIP, que permite mostrar tooltips de tipo balón:

vímos en la MSDN que como mínimo necesitamos Windows XP y por lo tanto debemos definir _WIN32_WINNT>=0x0501 y WINVER>=0x0501. Para ello tenemos dos opciones:

Poner un #define en stdafx.h

#define WINVER=0x0501

#define WIN32_WINNT>=0x0501

O en la configuración del proyecto en C/C++->Preporcessor->Preprocesor Definitions añadir WINVER=0x0501 y _WIN32_WINNT>=0x0501. Esta es la que yo prefiero.

Aún con esto y con todo, queda otro motivo por el que puede ser que no se encuentre el identificador, porque tengamos definido WIN32_LEAN_AND_MEAN que excluye de las cabeceras de Windows las funciones que no se usan habitualmente. Bastaría con eliminar la definición

#define WIN32_LEAN_AND_MEAN   

de stdafx.h

¿Qué tiene Asp.net en la barriga?

Hay dos componentes de la arquitectura de asp.net que todos usamos y que a menudo pueden ser origen de problemas de rendimiento, la cache y el viewstate. Claramente son la 'barriga' de ASP.net (junto con la sesión), en ellas guardamos cosas que nos son imprescidibles y que nos impiden correr.
El problema biene que ninguna de estas estructuras es facilmente observable, así que como en las barrigas de verdad, necesitamos un 'bisturí' que nos permita acceder al contenido.
Pues bien, para ASP.net y Visual Studio 2005 contamos con dos herramientas que nos serviran se 'bisturí':
Para ver el contenido de la cache: Cache Visualizer, un plugin para Visual Studio que nos permite ver el contenido de la cache de Asp.net.
Para ver el contenido del ViewState Decoder, una utilidad que nos permite ver el contenido del ViewState, tanto para Asp.net 1.1 como 2.0.

Scrum for Project 2003

Aunque lleva públicado de desde hace bastante tiempo, descubro que Microsoft tiene un Solution Starter para Scrum sobre Project 2003.

El kit incluye una plantilla de Project para gestionar el backlog de producto y el de iteración, así como el código fuente para generar un Addin COM que permite exportar los datos del proyecto a Excel pudiendo generar así gráficos burn-down y diagrámas de flujo acumulado.

Nuevos editores disponibles y como publicar código coloreado

Dado el interés de algunos de los miembros de Geeks por contar con editores más avanzados he instalado el FreeTextBoxWrapper for Community Server v2.1, que cuenta con varias caracteristicas avanzadas, entre las que cabe destacar la posiblidad de formatear código fuente en varios lenguajes. En definita, dos nuevos editores (muy similares) que podéis utilizar según vuestras necesidades y gustos.

Ya explico el amigo Eugenio Estrada como selecionar el editor que más nos guste.

Aunque para poner código en Geeks.ms yo prefiero simplemente copiarlo desde Visual Studio usando CopySourceAsHtml, una herramienta que he descubierto recientemente, que añade un menu contextual a Visual Studio que permite copiar código como HTML que luego podemos pegar directamente en el editor, opteniendo resultados como el que sigue:

    1     /// <summary>

    2     /// Levels of sudoku game

    3     /// </summary>

    4     public enum GameLevel

    5         : int

    6     {

    7         Basic = 57,

    8         Medium = 47,

    9         Difficult =37

   10     };

Rectificación: NO se puede usar Google Analytics en los blog de Geeks.ms

Puesto que utilizamos Google Analytics para ver el tráfico del sitio y que según me responden desde el servicio técnico de Google:

"Google Analytics no está diseñado para monitorizar un sitio con dos perfiles diferentes sino que un sitio se monitoriza con un único perfil. Le sugiero que elimine uno de los dos códigos de seguimiento utilizando unúnico perfil para su sitio."

Resumiendo, que el código que genera Geeks y el que genera vuestro blog parecen que se pegan, a pesar de que Google Analytics diga que todo esta correcto.

Como consecuencia, los que habeís configurado las estadísticas de vuestro blog siguiendo los pasos que comente en Estadísticas del blog con Google Analytics y Community Server 2.1, que sepaís que no os va a funcionar.

La solución pasa por que utiliceís un proveedor de estadísticas que no sea Google Analytics. A ver si Microsoft lanza pronto su alternativa a Google Analytics.

StatCounter
http://www.statcounter.com/
Performancing Metrics
http://performancing.com/metrics/start
ShinyStat
http://www.shinystat.com/en/free/info_free.html

Prueba Team System sin instalarlo!!!

Instalar Visual Studio Team System puede ser una tarea tediosa, sobre todo si nuestro único proposito es 'trastear' con la heramienta para saber 'de que va'. O quizás ni siquiera tengamos acceso a una licencia.

Una opción muy útil en esto casos es utilizar la versión de prueba, completamente funcional de Visual Studio Team System que Microsoft pone a nuestra disposición online. Simplemente necesitamos una cuenta passport e instalar un control ActiveX de Microsoft, Virtual Server VRMC Advanced Control, que es un cliente Terminal Server.

Os dejo un pantallazo de la mi navegardor accediendo al VSTS alojado.

No se soportará Sql Server 2000 y anteriores en Vista

Es oficial, podeís leer la noticia en la web de Microsoft.

Básicamente Microsoft recomienda comenzar a probar las aplicaciones con Sql Server 2005. La verdad es que en mi experiencia el cambio no es muy traumatico. En la mayoria de los casos no se van a encontrar problemas y si se encuentran suele ser suficiente con establecer el modo de compatibilidad de la base de datos al nivel adecuado mientras los corregimos.