miércoles, 23 de septiembre de 2009

TDD rulez!!

Después de mucho tiempo de leer y oír sobre TDD, hoy lo he puesto en práctica.

Haciendo un test unitario para una clase, me he encontrado que al ir describiendo los diferentes Assert de la clase de prueba, estos describían casos que la clase a probar no contemplaba.

Osea, que cuando he terminado de definir todos los casos de prueba del test, me he ido a la clase y le he añadido –como dicta el TDD- el código para pasar la prueba.

Y si, como tantas veces he leído, el código es más limpio y empiezo a entender la potencia de este paradigma de desarrollo.

Controlar si un XmlDocument está vacio

Describamos un método simple que utilice un parámetro del tipo xmlDocument:

public void leeNodo(XmlDocument configuracion)
{
string valor = string.empty;
configuracion.SelectSingleNode(
"//Nodo").InnerText = valor;
}
Si le remito un xmlDocument vacio me va a provocar la siguiente excepción “System.Xml.XmlException: Invalid XML document, The document does not have a root element... “ ya que –obviamente- no hay ningún nodo que seleccionar.

Para evitarlo podemos realizar una simple comprobación (tal vez demasiado)

if (configuracion.InnerXml.Length > 0)
Y con ello nos evitamos esta excepción en nuestro código.

miércoles, 16 de septiembre de 2009

La belleza de la sencillez. Gestor de web.config

A veces nos complicamos la vida por no leernos los manuales de nuestras herramientas. Durante años llevo sufriendo los inesperados errores de web.config por una mala declaración o implementación de valores. Y hete aquí que el propio Visual Studio tiene un pequeña pequeña herramienta de Administración de sitios web que te permite modificar el web.config sin los temidos “pantallazos amarillos”.

Para ello solamente tienes que acceder por el menú principal dentro del menú Sitio Web y seleccionar “configuración de Asp.net”. Y desde está página Web se pueden realizar operaciones básicas de gestión en tres configuraciones claves:
  • Seguridad: O por medio de un Wizard o accediendo a las pestañas de Usuarios, funciones y Reglas de acceso, puedes configurar la seguridad de tu aplicación web.
  • Aplicación: Crear o editar el web.config en su sección de configuración de la aplicación. Definir el servidor smtp para correo electrónico, situar la aplicación off-line y configurar las trazas, depuraciones y páginas de errores predeterminadas.
  • Proveedor: Y finalmente la gestión de las cadenas de conexión a las fuentes de datos.

Vamos, que con esto te quitas un montón de tiempo pegándote con el web.config.

lunes, 14 de septiembre de 2009

Nuevo proyecto, nuevas metas.

Poco a poco me voy convirtiendo en un especialista en proyectos en el Estado. Desde que cerré mi empresa e inicié mi andadura en el mercado de la consultoría llevo pasado por el Ministerio de Hacienda, el Congreso de los Diputados, la Dirección General de seguros y Fondos de Pensiones, el Ministerio de Exteriores, Dirección General de Patrimonio, Servicio de Salud de Castilla la Mancha y, ahora, Ministerio de Industria.

Me he puesto la gorra de líder de equipo/analista funcional, y he de reconocer que las condiciones laborales tanto materiales como de horario son las mejores halladas hasta el momento.

Nuevo camino en donde voy a utilizar todo lo aprendido de CMMI para poner un poco de orden y concierto en mi desempeño.

Ya os iré contando…

domingo, 13 de septiembre de 2009

Construir un XML con XMLDocument.

Lo primero declaramos nuestro flamante objeto XmlDocument que nos permite hacer todo tipo de virguerías.
XmlDocument peticion = new XmlDocument();


Lo siguiente es cargar en él la estructura o el xml entero (en este caso muy simple para no liarnos más)
// Introduciendo la declaración y la estructura manualmente
peticion.LoadXml("<?xml version='1.0' encoding='UTF-8'?>" +
"<peticion>" +
"<cuerpo>"+
"<id></id>"+
"<secreto></secreto>"+
"</cuerpo>"+
"</peticion>");

Sencillo, no? Pero muy poco útil obviamente porque perdemos toda la potencia de poder crear los XML de forma dinámica.

El siguiente método es mucho más complejo pero a la par que nos permite el control total de nuestra construcción:
XmlDocument peticion = new XmlDocument();
XmlNode xmlnode;
XmlDeclaration xmldeclaracion;

// Creo la línea de declaración de dos formas diferentes.
// Esta por métodos de Xdocument
xmlnode = peticion.CreateNode(XmlNodeType.XmlDeclaration, string.Empty, string.Empty);
peticion.AppendChild(xmlnode);

// Le indico el encoding
xmldeclaracion = (XmlDeclaration) peticion.FirstChild;
xmldeclaracion.Encoding
= "UTF-8";

// Añado el raiz peticion
xmlnode = peticion.CreateNode(XmlNodeType.Element, "peticion", "");
peticion.AppendChild(xmlnode);


// Le añado el nodo cuerpo
XmlNode nodoPeticion = peticion.DocumentElement;
XmlNode nodoCuerpo
= peticion.CreateNode(XmlNodeType.Element, "cuerpo", null);
nodoPeticion.AppendChild(nodoCuerpo);

// Le añado los elementos id y secreto y le doy valores.
XmlElement elementoId = peticion.CreateElement("id");
XmlElement elementoSecreto
= peticion.CreateElement("secreto");

nodoCuerpo.AppendChild(elementoId);
nodoCuerpo.AppendChild(elementoSecreto);

Y con esto obtenemos el mismo XML que con el ejemplo anterior.

Más adelante, os contaré como manipular los valores en estos elementos.

miércoles, 9 de septiembre de 2009

VS2010. Un muy buen framework imposible de utilizar.

Hoy es el segundo compañero que conozco que ha desinstalado su versión Beta1 del VST2010 y yo estoy a punto de volverlo a hacer por segunda vez.

No se puede negar que sea una herramienta IMPRESIONANTE, que te permita hacer de todo de muchas y variadas formas. Pero aún es una beta y tiene una cosilla que, para las personas normales con portátiles de empresa más bien de gama baja, hace imposible su uso productivo: su lentitud.

image 
Más de cinco minutos para obtener esta imagen…

Hace unos meses me encontré con la queja de un bloguer acerca de la lentitud que tiene el VS2XXX para picar código. Y realmente es un tostón tirarte laargos segundos esperando que se abra la barra de herramientas para poner un label en un fichero .aspx o que el intellisense no solamente tarde una eternidad sino que además te tape el código de las líneas adyacentes.

En resumen el VS2010 es lento para trabajar en cuanto tengas un nivel medio en codificación y pierdes muchísimo tiempo en las compilaciones para pruebas. Y por ello yo lo he desinstalado una vez y más personas que conozco han hecho lo mismo y se han vuelto al VS2008 (que ya es lento y se queda congelado de vez en cuando con operaciones simples).

Microsoft… como desarrollador senior y jefe de proyectos estoy dispuesto a pagar por algo tan simple como un worpad con intellisense solo y exclusivamente para desarrollar. Y que, con la potencia de un Cry II que tengo en mi portátil, no se tire 10 o 15 segundos en compilar un Hello World.

lunes, 7 de septiembre de 2009

Cargar XML a xmlDocument o DataSet

En la entrada anterior estaba dispuesto a comprobar qué tal funciona el SketchFlow para realizar prototipos, pero un proyecto del trabajo me ha hecho volver mi mirada en mi tiempo libre hacia el XML y las construcciones en WCF. Esto me ayuda para repasar los conceptos de la certificación que fue el origen de este blog, y a acercarme de una vez y en profundidad a los entresijos del XML, de los Webservices y de la firma digital.

Y para abrir estos post, un pequeño error que me ha dejado un poquito loco que trata la diferencia entre cargar un xml a un DataSet y a un xmlDocument.

En el primer caso es muy simple, le dices al DataSet que lea un fichero de tipo XML, le dices el path físico del fichero y listo.

DataSet ds = new DataSet();
ds.ReadXml(fichero);

La duda vino con el segundo, ya que el objeto XmlDocument también tiene un método LoadXML… pero mejor no usarlo J y utilizar el Load que nos cargará correctamente el fichero.

XmlDocument documento = new XmlDocument();
documento.Load(fichero);

Parece sencillo pero a mí me complicó la vida un ratito.

martes, 1 de septiembre de 2009

Prototipado con SketchFlow

Bueno, hoy he vuelto al trabajo después de unas larguísimas vacaciones. De hecho las vacaciones más largas de mi vida al verme “obligado” a consumir cuatro semanas contiguas que cubrieron el mes de agosto.

También he decidido meterme en un nuevo proyecto personal que va a ser un CMS básico en asp.net con C# intentando utilizar las capacidades del 4.0 e instalando el VST2010.

Pero antes de liarme a descargar y configurar todo lo que tengo que configurar, me dispongo a hacer un prototipo/análisis funcional de lo que quiero hacer y me pongo a buscar herramientas de prototipado… llegando al resultado del SketchFlow de Blend de Microsoft. Y teniendo en cuenta lo contento y fanático que soy de TODAS las herramientas de construcción de la empresa de Redmon, inmediatamente me la he bajado y me voy a ponerme a trastear ahora mismo.

Os iré contando según vaya saliendo el prototipo y, si me gusta lo que va saliendo, lo pondré públicamente para compartirlo junto con las entradas del blog.

… a ver qué sale…