lunes, 30 de marzo de 2009

Pex Automated White box Testing for .NET

Buenas tardes. Vamos a ver si revivimos esto!!
Tenía esta herramienta aparcada en 'Pendientes' pero me he decidido hoy a retomarla y probarla y realmente para la creación de Test es una pasada. La ojeamos en su día Pablo y yo en Correos.
Permite crear, guardar y agregar proyectos de Test a nuestra solución con simples clicks. Realmente son potentes ya que no se limita a entradas-salidas con un sino que para cada posible hilo de ejecución de los métodos crea una prueba directa.
Lo mejor para verlo es por un lado ver la intro (aquí el link de Channel9) y por otro descargarlo aquí
Un saludo!!!

sábado, 7 de marzo de 2009

Dejemos de programar por un ratito

Buenos días!!!

Antes de nada quería felicitar a Mario por su graciosima entrada. Estoy totalmente deacuerdo con que la presión que sufrimos que nos hace perder mucho tiempo para nuestra vida pero también creo que, en el fondo necesitamos esa presión porque nos gusta, nos sube la adrenalina, nos sentimos grandes.

Recordar esos momentos "mágicos" cuando hacemos algo grande, cuando llegamos a tiempo a una entrega imposible, cuando despues de un montón de cambios en los requisitos nuestra arquitectura los absorbe con una Vileda, cuando los sistemas se integran sin problemas, cuando encontramos el origen de ese null que nos fastidía la ejecución, cuando nuestro wrapper mejora esa librería externa infernal, cuando "ves" la arquitectua antes de que finalice la toma de requisitos, cuando .... Joder, ¡¡¡es que somos muy buenos!!!.

Ay!!, que a gusto me quedé. Hoy no voy a hablaros de nada que tenga que ver con el desarrollo pero si de algo que nos puede hacer la vida mas sencilla, la nueva herrmienta de Microsoft "Mesh". Esta herramienta nos permite sincronizar el contenido de carpetas de nuestras máquinas a través de internet. Se acabó llevarnos el "pincho" de casa a la oficina y viceversa. Espero que la disfruteis con la estoy disfrutando yo. Ahh!! está en Beta pero a diferencia de otra herramientas de esta compañía, es una Beta con aires de Community Preview.

https://www.mesh.com/Welcome/default.aspx

Un saludo

miércoles, 4 de marzo de 2009

Seguimos vivos?

Muy buenos días a todos.

Parece que esto está un poco muerto no? La última entrada es de hace casi dos meses.
Sé de buena tinta que todos estamos con entregas y a mil cosas.
Vamos, que echamos más horas que un reloj. Alguno está más quemado que el telefonillo del windsor. Muchos estamos en proyectos que tienen más años que la hipoteca del partenón, más feos que un frigorífico por detrás y más caros que el seguro del coche fantástico. Pero bueno, no dejemos que nadie piense que no posteamos porque somos más perros que niebla. Todos sabemos que trabajamos más que el chapista de Mazinger Z. En fin, vamos a demostrar que somos mejor partido que España - Malta.

Bueno, después de la gracieta... Tengo pensados un par de posts pero que me los quiero currar bien y me van a llevar un tiempo del que no dispongo. Hoy he estado buscando y he descubierto una herramienta bastante interesante. Seguro que muchos la conocéis. Se trata de una herramienta que sirve para exportar Team Projects de un TFS a otro.

A mi me hará falta dentro de un tiempo, así que ya os contaré si funciona bien o mal.
Os dejo el link para que le echéis un ojo.

http://www.codeplex.com/tfstotfsmigration

A ver si le podemos dar un poco de caña al blog y que no se nos quede estancado.

Un abrazo a todos.

martes, 13 de enero de 2009

Microsoft Enterprise Library 4.1 – October 2008

Aunque solo sea por retomar la vida en el blog, o por felicitaros el año nuevo a todos o por escribir un rato antes de proseguir con el proceso diario de crear mundos de fantasía con Visual Studio, os informo de que ya existe una nueva versión del Enterprise Library. Más en concreto la versión 4.1.
Cabe destacar según leo en el blog de Jorge Serrano que esta versión utiliza Framework 3.5 con VS2008 tal y como se especifica en los requisitos. La actualización de la versión 3.1 parece ser que requerirá una actualización del FrameWork.
Aprovecho también para mencionar el Unity Application Block cuyas especificaciones podéis leer (siendo sincero yo estoy en ello también).

Bueno os dejo el link para que ojeéis un poco la nueva release.

Microsoft Enterprise Library 4.1:
http://msdn.microsoft.com/en-us/library/dd203099.aspx

Un saludo!!

domingo, 9 de noviembre de 2008

Sobre el casting ¿Carencia del compilador?

Hola a todos.

Bueno, seguro que cuando leáis este post lo primero que vais a pensar es "¿Qué hace el
friki este escribiendo un post un sábado a las 4 de la mañana? ¿No tiene nada mejor que hacer?"
Vale. Soy un frikazo ¿Y qué?

En fin, he estado dando vueltas a una cosa y quería comentarla con los máquinas de mis colegas de gremio.
No voy a entrar en el origen de mi problema. Voy a ir directamente a la esencia del mismo: Hacer casting entre clase padre e hija.

Voy a hacer un ejemplo que simplifica al máximo el problema.
Tenemos una clase base y una clase derivada.

public class BaseClass
{
private int property1;
public int Property1
{
get { return property1; }
set { property1 = value; }
}
}

public class DerivedClass : BaseClass
{
private int property2;
public int Property2
{
get { return property2; }
set { property2 = value; }
}
}

Vamos a ver todos los castings que podemos hacer.

De hija a base:

static void Main()
{
DerivedClass obj1 = new DerivedClass();
BaseClass obj2 = obj1;
}

Chupado. Como un objeto DerivedClass ya es un BaseClass, se puede hacer una conversión implítica.

De base a hija:

static void Main()
{
BaseClass obj1 = new DerivedClass();
DerivedClass obj2 = (DerivedClass) obj1;
}

Perfecto. Hacemos un casting de la clase base a la derivada. Es necesario hacer un casting explícito porque un objeto de la clase base no tiene por qué ser de la clase derivada. En nuestro caso sí lo es porque obj1 contiene un DerivedClass. No fallará ni en tiempo de complilación ni de ejecución. El compilador nos deja hacer esto sabiendo que nos arriesgamos a un petardazo en tiempo de ejecución, como ocurre en el siguiente ejemplo.

static void Main()
{
BaseClass obj1 = new BaseClass();
DerivedClass obj2 = (DerivedClass) obj1;
}

Compila pero da un petardazo lógico y normal en tiempo de ejecución. obj1 no contiene un DerivedClass.

En mi aplicación necesito hacer este casting. La solución es muy sencilla y a todos se nos ocurre enseguida. Haz un constructor de DerivedClass que reciba un BaseClass por parámetro. De esa forma la clase derivada queda así.

public class DerivedClass : BaseClass
{
public DerivedClass()
{
}

public DerivedClass(BaseClass parent)
{
this.Property1 = parent.Property1;
}

private int property2;
public int Property2
{
get { return property2; }
set { property2 = value; }
}
}

y el siguiente ejemplo funciona:

static void Main()
{
BaseClass obj1 = new BaseClass();
DerivedClass obj2 = new DerivedClass(obj1);
}

Hemos pasado de un objeto de la clase base a un objeto de la clase derivada.
Mi idea fue: Yo kiero ser más chulo y hacer eso con un casting (como el ejemplo que falla) en lugar de con el constructor. Pues me implemento un conversor propio (por ejemplo en la clase derivada) y a correr.
La clase derivada quedaría así:

public class DerivedClass : BaseClass
{
private int property2;
public int Property2
{
get { return property2; }
set { property2 = value; }
}

public static explicit operator DerivedClass(BaseClass parent)
{
DerivedClass result = new DerivedClass();
result.Property1 = parent.Property1;
}
}
Hago el conversor explícito en lugar de implícito para no ser demasiado chulo.

El código que lo prueba queda:

static void Main()
{
BaseClass obj1 = new BaseClass();
DerivedClass obj2 = (DerivedClass) obj1;
}

Pues bien. Esto, que a mi me parecía lógico, no compila. Da el siguiente error en la clase DerivedClass:
"user defined conversion to/from base class"
El número de error es CS0553
He investigado un poco y he visto la página de Microsoft donde está documentado el error. http://msdn.microsoft.com/en-us/library/031a701z(VS.80).aspx
Según ellos, no puedes hacerlo porque no lo necesitas.
Estamos de acuerdo en que no necesito un conversor propio para pasar de una clase hija a una clase padre, pero para pasar de una clase padre a una hija sí estaría bien. De hecho en el link que os he mandado hay un comentario de uno al que le pasa lo mismo que a mi.
Nadie le ha dado respuesta desde Microsoft...

Espero vuestros comentarios.

Saludos.

viernes, 7 de noviembre de 2008

Guía de arquitectura de aplicación - Release

He leído el tema de Laurent, acerca de la guía de arquitectura de aplicación 2.0 beta, y encontré que es efectivamente útil. Lo bueno es que ya está la siguiente versión o release. Así que Arquitectos de soluciones, desarrolladores y jefes de proyecto técnicos, podremos encontrar allí un repositorio actualizado de la guía más interesante de diseño de arquitectura.
Patterns & practices: App Arch Guide project http://www.codeplex.com/AppArch

martes, 4 de noviembre de 2008

¿Reinventar la rueda? No gracias

Buenos días, Geeks del desarrollo.
Me he decidido a escribir esta entrada a raíz de una investigación que he realizado recientemente previa al desarrollo de la web de un amigo mío. El caso es que es odontólogo y necesita (bueno yo se la voy a regalar por su cumpleaños) una web promocional para sus clínicas dentales.

Entonces me puse manos a la obra:
Abrir Visual Studio 2008 (por supuesto), New Project... Web Project... y despues de obtener el maravilloso "Empty Web Project" tuve el problema que tienen los escritores cuando se enfrentan a un folio en blanco, igualito. Decisiones sencillas como gestión de usuarios, perfiles, base de datos etc las tenía claras pero... Qué pereza empezar a desarrollar todo desde cero. Diseña la Master, estructura de la web... Realmente me gustaría saber cuánto tiempo se pierden actualmente en los proyectos, nuestros proyectos, en desarrollar módulos que ya están desarrollados. Un sabio profesor de universidad me dijo, puede haber un mismo trabajo de Ingeniería en un desarrollo a medida con un I+D impresionante, como en un análisis de mercado analizando herramientas existentes que puedan cubrir mis necesidades.

Entonces me vino a la cabeza la pregunta clave: ¿No abrá algún proyecto en el que me pueda basar, con una estructura válida que pueda utilizar, con gran parte del trabajo tedioso hecho? Pues afortunadamente la respuesta final es que sí.

Encontré los Starter Kits and Community Projects.

Nos encontramos una veriedad generosa de proyectos 'base', tales como foros, webs de anuncios, webs para comunidades y muchos mas. Algunos mediante Instaladores de Contenido para Visual Studio, otros con proyectos ya desarrollados que tendremos que abrir nosotros, copiandolos en local.
Este elenco de proyectos OpenSource nos proporcionan una estupenda base para poder empezar con un esqueleto ya realizado, ideal para vagos (como yo).

De todas formas, estos proyectos contienen detalles muy interesantes en su interior. Seguro que os sorprende a más de uno la estructura de algunos proyectos y la utilización de controles base del Framework. Que sí, que a todos se nos llena la boca diciendo las maravillas del FrameWork, que si es potentisimo, que si nos ahorra mucho trabajo, que si tal que si cual... pero la gestión de perfiles y usuarios nos la hacemos nosotros, en vez de utilizar la potente gestión del propio FrameWork xej. Ya se que esto es aplicable en función de necesidades del proyecto, pero ya me entendéis. En estos proyectos encontraréis 100% exprimidos los controles Web del FrameWork, y en muchos casos sorprende la funcionalidad conseguida en función de las líneas de código implementadas.

Bueno os animo a que le dediquéis un ratejo para investigar lo que os podéis encontrar, pero os adelanto algo:

Classifieds Site Starter Kit:
Base de un proyecto web para clasificados (anuncios que perduran un tiempo x)

Job Site Starter Kit:
Base para un proyecto web para trabajos (empresas vs empleados)

Kigg Starter Kit:
Base para un proyecto web estilo Digg

Y bueno, muchos mas en http://www.asp.net/community/projects/