jueves, noviembre 23, 2006

Post para matar el tiempo.... Code Analysis

Estoy trabajando en un proyecto que al ratito les platico y está tardando mucho en realizar algunas cosas que luego les comento. Mientras esperaba me desesperaba y me ponía a buscar páginas de internet. Después de agotar los últimos posts de Martin Fowler y revisar el foro de discusión de roller.com.mx termine revisando mi blog. Me di cuenta que agote tenía casi un mes sin postear algo.

Después de un tiempo sin que se me ocurriera nada de que postear, me doy cuenta de que casi todo lo que hago vale la pena por un post, naaaa no es cierto, no soy todavía tan creído, pero si hay muchas cosas que me gustaría poder compartir. Por ejemplo, justo ahora estoy usando Code Analysis en un proyecto, aunque ya había usado FxCop en .NET 1.1 con excelentes resultados y un par de veces había curioseado con Code Analysis en VS 2005, no me había puesto a usarlo desde un principio en un proyecto.

Bueno ahora estoy haciendo un framework como parte de un proyecto de un cliente. Un framework es de esas partes en los proyectos que más debes de cuidar sobre todo porque son componentes que usaran muchos desarrolladores en diferentes proyectos, por lo que las sugerencias de Code Analysis resultan muy útiles aunque muchas muy enfadosas.

Code Analysis ha resultado ser muy lento, al menos como para correrlo cada vez que quiero compilar, pero si es tolerable como para correrlo como parte de mi suite de pruebas. Algún día creo que voy a hacer o a buscar algo que se encargue de en el background mientras yo sigo codificando se ponga a correr mis pruebas y code analysis y se vayan automáticamente corrigiendo los errores que aparecen en VS, pero de mientras, tendre que irlo corriendo manualmente de vez en vez.

Más adelante les platicare más de Code Analysis. Ahora voy a resumir un poco de lo que he hecho en estas tres semanas de ausencia.

Bueno el 3 de Noviembre di un curso en el Tec de Monterrey como parte de la serie de conferencia del MDCD, hable de lo que es el .NET Framework 3.0.

Luego fuí a Cd Victoria en Tamaulipas a una reunión de Clústers. Lo interesante es ver como los demás clusters del país tiene los mismos problemas que encontramos nosotros en Torreón, inclusive los grandes como el caso de Jalisco o TI Baja, aunque tenemos mucho que aprender del camino que ellos han recorrido.

Leí un libreo de XP (Extremme Programming), lo que más me gusto es que no es a las prácticas que se han vuelto buzz words como pair programming o TDD a lo que le dan la importancia si no a los valores y principios que deben de tener las personas, los equipos y la organización en general para que el proceso funcione bien. En general, has aquello que aporte valor al proyecto. XP es otro tema para platicar por si sólo, aunque soy más fan de muchas prácticas de Scrum y EssUP resulta otra metodología ágil interesante, la escencia de XP es algo que toda metodología debería tener: valores y principios pensados por el bien del proyecto.

Ya no avance con el libro de CSLA, pero lo poco que he leído me ha ayudado mucho, no para el propósito de ese framework, sino para la elaboración de otros. Es interesante ver desde adentro como esta armado y porque algo es internal en lugar de public o private por ejemplo.

Recién empiezo un libro de Team System que se ve muy prometedor.

Le ayude a Carina Casco a hacer un concurso nacional de patines (ufff que friega, pero ya salimos).

Terminamos algunos proyectos (entre ellos el primer piloto de MoProSoft) y estamos empezando otros, tal vez es por eso que no he tenido tiempo de postear.

Bueno y que sigue. Jugueteando con .NET el 8 de Diciembre, la idea es que lleven un juguete para poder entrar y estos sean donados, así DotNetLaguna aporte algo a la comunidad lagunera. Voy a estar viajando a Monterrey por motivo de un proyecto así que cada 15 días andare por allá. Seguirle con MoProSoft y la guerra con metodologías ágiles y formales. El fïn de año es de buenas ventas tanto para Integradores como para roller.com.mx así que esperemos que haya mucha chamba.

viernes, octubre 27, 2006

CodeSnippet Manager en Team System

Despues de casi un año de estarlo buscando, por fin, "helo" aquí. Todo gracias a Alex y su post, la verdad es que era algo muy sencillo, pero nunca se me había obucrrido buscar ahí.

Problema: En Team System no aparece el Code Snippets Manager.
Solución: Ve a Tools/Customize y luego busca la opción dentro del menú Tools y reagregala.

Ahora si a hacer mis snippets para algunos patrones de diseño.

lunes, octubre 23, 2006

Lo primero que querrás cambiar de Windos Vista

Ok, Windows Vista es mucho más seguro que los demás Windows, ¿por qué?. Aún y que entres con tu cuenta de administrador, por default, todos los threads estan corriendo con una cuenta de menores privilegios.
Ventjas: si un usuario abre un attachment que dice love.zip o conejitas.exe, el virús no podrá hacer gran daño. Lo mismo aplica a muchos otros escenarios.
Desventaja: si abres por ejemplo en Visual Studio un proyecto que no este dentro del folder "Documentos" (antes "Mis Documentos") o en el folder del usuario no podrás guardar los archivos, compilar, etc, porque por más que seas administrador, VS se abrió bajo una cuenta sin permisos.
Otro ejemplo es mi outlook, resulta que mis data files (donde estan todos mis mails) estan en otro disco duro, por lo tanto en en el folder del usuario (users/miguel/ antes era algo como Documents and Settings/miguel/). Así que outlook simplmente no habría a menos.

Como arreglarlo, hay tres formas:
1. Da click derecho y luego run as Administrator y luego da clic en Si a las 22 alertas que salen.
2. Da click derecho, ve a propiedades, pestaña de compatibilidad y dale en siempre correr esa aplicación como administrador. Ahora cada vez que abres la app te pregunte si le das permiso de iniciar, ya que explicítamente la app lo solicitará desde un inicio.
3. Ok, para permitir que corra toodo siempre bajo tu cuenta de admin, ve al menú inicio y en la barra de busqueda (antes run) escribe "secpol.msc" y deshabilita Local Policies/Security Options/User Account Control: Run all administrators in Admin Approval Mode. Reinicia y listo. Ahora todo lo que tendrás que soportar es una anuncio que dice que tu máquina no es segura.

El tipo de usuarios de "mi mamá" deberían de usar siempre todo sin permisos y no complicarse con clic derecho y propiedades y nada de eso.

La primera opción del clic derecho es muy enfadosa, pero útil para usuarios con algo de experiencia.

La segunda opción es la ideal para quien sabe como tener en control sus aplicaciones y administrar cuales tendrán permisos.

La tercera opción es para descuidados y gente inconsciente que o sabe el daño que podría ocasionar dejar a su máquina siempre corriendo como administrador.

Yo en lo personal me quedo con la tercera opción. Entro en el grupo de los flojos que no quieren estar dando ok a las alertas de seguridad.

Como funciona esto. Una parte interesante es que una aplicación puede desde atributos del Assembly (en AssemblyInfo.cs) específicar el nivel de permisos deseado. Si yo desde estos atributtos solicito permisos de administrador para mi aplicación, al momento de que alguien la ejecuta Windows Vista le pregunta al usuario si la quiere dejar similara a si el mismo usuario hubiera dado clic derecho y run as admin. Si tu aplicación explicítamente solicito que quiere pocos permisos, la opción de "always run as admin" estará deshabilitada.

Es buena práctica el que tus aplicacione siempre pidan los minímos permisos necesarios para que trabaje bien. Es decir si tu aplicación realmente no necesita full control, no lo solicites, simplemente pide lo que sabes que necesitarás, el hacer esto hará funcionar un modelo de seguridad similar al de Windows Vista en sistemas operativos anteriores, es decir, si tu app trata de hacer algo que excede los permisos solicitados explicítamente, truena.

jueves, octubre 19, 2006

Aplicación de Patrones de Diseño

El día de hoy Jaime y yo dimos un taller en el Tec Laguna sobre la aplicación de patrones de diseño. Para los que asistieron les dejo el material y para los curiosos, pues igual bájenlo, aunque la verdad el material no es suficiente como apoyo didáctico, se debe complementar con la explicación del taller.
Viene mucho código fuente, muchos ejemplos que por tiempo no alcanzamos a ver. El zip incluye la presentación de powerpoint y junto a esta la solución de Visual Studio. Dentro de esta solución hay muchos proyectos de C#, los interesantes (o al menos los que vimos en el taller) son Strategy.Ducks, Strategy.Chafa, Factory.Docks y Strategy.Winforms. Todo el resto se los dejo como ejemplo.
Si tienen Nunit podrán correr el proyecto DeveloperTests que prueba todos los patrones de diseño.
Espero y este material les sea útil. Si tiene cualquier duda, sólo dejen un mensaje.
Les recuerdo que las vacantes siguen abiertas para desarrolladores y practicantes con deseos de aprender y desarrollar con nuevas tecnologías. Manden currículum a recursoshumanos@integradorestecnologicos.com.

viernes, octubre 06, 2006

Segundo Evento Comunidad .NET

Hoy realizamos el segundo evento de la Comunidad .NET Laguna. El proximo es para el 3 de Noviembre en el ITESM CL.

No pude asistir a la primera conferencia y la segunda la dimos nosotros, por lo que mejor espero comentarios de ustedes. Estuve en la inauguracion y vimos una presentacion de Armando Perez sobre el desarrollo de las TIs en la region y el plan que tiene Gomez para impulsar este sector o mas bien para que este sector pueda impulsar a Gomez. La verdad es que es un apoyo mutuo, las ciudades que decidan ahorita subirse al barco les puede ir bien y tanto nos beneficiamos nosotros que estamos en el sector, como los ayuntamientos que van a generar empleos y sobre todo la sociedad en general que podra tener mejores fuentes de empleo. Bueno pero para que meternos en cosas de politica, mejor pasamos a hablar del taller.

Yo entre al taller de WCF fue un poco lento el ritmo, aunque muy interesante el taller. Se veia que Paco (Francisco A. Juarez Figueroa) ya se habia metido un buen tiempo a WCF, traia bien preparado el tema. A proposito de este tema, vale la pena un post nuevo sobre WCF y sus ancestros.

TDD

Este sera mi primer Post de una serie de publicaciones sobre TDD. Tengo un ejemplo paso a paso de una pequena prueba con esta metodologia, pero antes de meterme a la practica, les dejo un poco de teoria.

http://msdn.microsoft.com/vstudio/teamsystem/tester/default.aspx?pull=/library/en-us/dnvs05/html/GuidelinesforTDD.asp

Estuve revisando mis posts y en todo un mes, hice solo 4 posts. Ya necesito publicar mas. Tengo algunos temas pendientes... vamos a bloggear mucho mas ahora, tanto que parecera spam...

viernes, septiembre 29, 2006

Segunda Reunión Comunidad DotNetLaguna

Invita: A su segunda reunión de la comunidad.

Microsoft tiene el gusto de invitarlo a la Segunda Reunión de la Comunidad de Desarrolladores de la Comarca Lagunera.Se llevara a cabo este viernes 06 de octubre del 2006 a las 9:30 a.m. en la Sala de Usos Múltiples del Instituto Tecnológico de la Laguna.
Lugar de las conferencias:
Sala de Usos Múltiples del Instituto Tecnológico de la Laguna.Lugar de los talleres: CITIGP (Blvd. Rebollo Acosta y Czda. Lázaro Cardenas 481 Gomez Palacio).

Conferencia:Expression Designer e Interactive con Visual Studio 2005Hora: de 10:00 a 11:20 hrs. Lugar: Tecnológico de la Laguna Expositor: R. Benjamin Romeo Tanús

Mesas Técnicas:Compartiendo Experiencias en: Inicios en .Net Instaladores, Web Services, Mobile, etc. Hora: de 13:00 a 14:00 hrs. Lugar: Tecnológico de la LagunaExpositores: La Comunidad

Taller: Expression Web/Interactive con Visual StudioHora: de 16:00 a 17:30 hrs.Lugar: CITI-GPExpositores: Bayardo Edel Cruz Velázquezy Gustavo Mesta Ortega

Conferencia: Ciclo de desarrollo de Software con Visual Studio Team SystemHora: de 11:30 a 13:00 hrs.Lugar: Tecnológico de la LagunaExpositor: Miguel A. Madero Reyes.

Taller: Windows Communication FoundationHora: de 16:00 a 17:30 hrs.Lugar: CITI-GPExpositor:Francisco A. Juarez Figueroa

Convivio: Preparando el siguiente evento Hora: 18:00 hrs. Lugar: CITI-GP


¡Ven, participa y forma parte de esta gran comunidad de desarrolladores ahora cerca de ti!

jueves, septiembre 21, 2006

Platicas del Microsoft Developer Community Day

Como les comentaba en mi post anterior el 3 de Noviembre será el MDCD. Los temas son los siguientes:
Desarrollo con .Net 3.0, la evolución del .Net framework (yo voy a dar este tema)
Preview nuevas características en Windows Vista (mmmm).
Desarrollando con Visual Studio 2005 y Microsoft Office 2007 (suena chido, este lo dará alguien que mande Microsoft).
AJAX y su integración con las plataformas de desarrollo (este lo va a dar Benjamin Romero de dotNetLaguna).

Espero y les resulente interesantes los temas.

sábado, septiembre 09, 2006

ITunes PodCasts

Similar a como funciona un RSS Reader, ITunes funciona como un lector de PodCasts, lo que te permite mantener una lista de suscripciones a tus programas de audio favoritos. ITunes se encarga de descargarlos por ti y los deja listos para que los quemes o escuches en offline.


Esto es genial para no tener que ir a la página de cada uno para checar si hay algo nuevo y luego descargar uno a uno los audios, guardarlos, etc…


Así que bajen ITunes y vayan a Advanced y Seleccionen “Subscribe to PodCast”.

Microsoft Developer Community Day

El próximo 3 de Noviembre en el Auditorio Santiago A. Garza de la Mora en el ITESM CL se llevará a cabo este evento de Microsoft, que incluye una serie de conferencias sobre el tema. Este tipo de eventos (MDCDs) son los sucesores a lo que antes conocíamos como DevDay’s. Microsoft cambio el nombre e imagen de estos eventos, para manejarlos ahora como eventos de las comunidades de .NET. Por esto, DotNetLaguna, estará a cargo de la organización de este.


Los temas aún están pendientes por definirse y estos los escogeremos entre todos, así que vayan y voten por sus preferidos y con suerte hasta ganan un Xbox 360.

lunes, agosto 28, 2006

Mobile Client Software Factory

Guidance, Tools, Frameworks and Tips for Developing Windows Mobile 5.0 Applications.Mobile Client Software Factory


Les paso la presentación y algunas anotaciones que hice de la plática que di el Viernes pasado. Espero y les sea útil.

Le sugiero revisar los links al final de la presentación.

Cualquier duda, pueden dejar un mensaje o escribir en dotNetLaguna.com

Miguel Madero.

jueves, agosto 24, 2006

Comunidad .NET Laguna Primer Evento

InvitaciónMayor información:mailto:informes@dotnetlaguna.commVisítenos en:www.DotNetLaguna.com

Microsoft tiene el gusto de invitarlo a la Inauguración de la Comunidad de Desarrolladores de la Comarca Lagunera.Se llevara a cabo este viernes 25 de agosto del 2006 a las 9:30 a.m. en el auditorio del Instituto Tecnológico Superior de Lerdo.Mostraremos en ese día conferencias y talleres a 2 niveles (Avanzado y Principiante) donde trataremos temas como Visual Studio 2005, Ajax, Remoting, Mobile, etc.Presentación de la comunidad Microsoft: DotNet Laguna viernes 25 de agosto.Lugar de las conferencias: Instituto Tecnológico Superior de LerdoLugar de los talleres: CITIGP(Blvd. Rebollo Acosta y Czda. Lázaro Cárdenas 481 Gómez Palacio)


Actividades de nivel Básico

10:00 - 11:20

Conferencia: "Programación rápida con Visual Studio 2005"

Por: Juan Pablo Burciaga

11:30 - 13:00

Conferencia: "Caso de éxito: Windows y Web Services"

Por: Gustavo Mesta Ortega

16:00 - 18:00

Taller: "Introducción a ASP.Net"

Por: Ricardo Escajeda


Actividades de nivel Avanzado

10:00 - 11:20

Conferencia: "Ajax en .Net: Atlas"

Por: Benjamin Romero

11:30 - 13:00

Conferencia: "Desarrollo de Aplicaciones en Mobile 5.0"

Por: Miguel Madero

16:00 - 18:00

Conferencia-Taller: "Utilizando .Net Remoting"

Por: Carlos Alcántara

¡Ven, participa y forma parte de esta gran comunidad de desarrolladores ahora cerca de ti!

© 2006 Dot Net Laguna. Todos los derechos reservados. Microsoft, BizTalk, Microsoft Dynamics, SharePoint, SQL Server, Visual Studio, y Windows son marcas registradas Microsoft Corporation en Estados Unidos de Norte America y/o otros países. Todas las marcas son propiedad de sus respectivos dueños.Fe de Erratas: Los acentos y caracteres especiales han sido eliminados por compatibilidad con los clientes de correos

sábado, agosto 19, 2006

Que son Software Factories?

Tengo yo varios posts sobre el tema de Software Factories y siempre que escribo prometo publicar más al respecto.... bueno Jaime recien escribio un post bastante interesante para todos aquellos que quieran una introduccion sobre Software Factories. Me ahorro más de 1 hora y media de mi vida porque es precisamente el tipo de introducción que tenía en mente escribir. Así que vayan y lean más sobre Software Factories.

ElCerDo -- Blog: Que son Software Factories?

lunes, agosto 14, 2006

MoProSoft e Integradores Tecnologicos

Recien publicaron en el Siglo de Torreón una nota de una entrevista que me hicieron.

lunes, julio 31, 2006

Windows Vista Gadgets

Los Gadgets son un nuevo tipo de aplicaciones usadas en Windows Vista. Los que han usado este OS los habrán visto en su Sidebar. Bueno, investigando un poco de que opciones hay para desarrolladores de Vista, enconte como desarrollar Gadgets. No es nada espectacular, sobre todo para aquellos que han desarrollado web.

Ok, de esto se trata, necesitas un archivo de manifiesto (gadget.xml con ciertos datos sencillos como decirle donde está el Gadget, el titulo de este, una descripción, información del autor, etc. Todo lo demás es hacer una página web a ciertas medidas. Dentro del mismo folder puedes tener tus imágenes, archivos de javascript y css. Puedes configurar una página de Settings y guardar la configuración de tu Gadget, también podrás tener muchas instancias de tu Gadget abierto cada uno con su propia configuración. Estos Gadgets los puedes depurar desde Visual Studio. Por último una vez listo tu Gadget, simplemente comprime todo el folder en un zip o lo empaquetas en un cab y le cambias la extensión a .gadget y listo, lo distribuyes desde tu sitio web.

Una gran ventaja es que estos Gadgets pueden usar el Gadget Object Model que nos permite desde JavaScript acceder a información del Sistema Operativo como variables de entorno información de la batería, uso de CPU y muchas otras cosas. Al parecer es bastante poderos.

Un área interesante de explotar seria la manera en que pudiéramos combinarlos con Ajax para estar trayéndonos información, pudieran ser anuncios, alertas de un sitio web como alguna venta del sitio que la persona este administrando, traerse imágenes de un fotoblog.

Bueno no quiero aburrirlos con tanto rollo, lo mejor es que vean directamente el ejemplo introductorio a como crear Gadgets.

domingo, julio 30, 2006

Más de VSTS for DB Pros

Aquí les dejo algunas pantallitas con comentarios.



DB for Pros, agrego nuevos Project Templates, vamos a probar con el de SQL Server 2005 y agregarlo SourceControl a nuestro proyecto de Investigaciones.



Uuups. Nunca me preguntaron por una instancia de SQL y al parecer no se pudo conectar a ninguna. “Project Creation Failed”.


Intentemos de nuevo, pero en esta ocasión sin agregarlo a SourceControl.


Mismo error, nuevamente. ¿Hasta aquí llegamos? No… vamos a intentar con otro tipo de proyecto.


No es exactamente lo que buscábamos, pero a ver, agreguemos un proyecto para crear clases que se usen en SQL Server.


Tal como esperábamos, ahora nos pide la instancia.


Wow, desde VS 2002, siempre fue algo complicado el depurar SQL, y esto parece que va a dejar todo listo para poder hacerlo de manera sencilla. Sólo no hay que depurar en un servidor de producción. Hagan esto en alguno de prueba. Según la nota: “Todos los managed threads se detendrán durante la depuración”.


Al agregar un nuevo Item, estas son nuestras opciones. Se está volviendo lento y tardado poner una imagen de cada paso. Por lo que voy a probarlo sólo y luego les paso lo más importante. Este es mi primer post con imágenes desde Word 2007 directo a blogger, así que quería probar que tal se subían. Pero bueno, suficientes imágenes para mi prueba.

Bueno realmente no hubo mucho más que mostrar.

  • Agregue el proyecto a SourceControl sin problemas.
  • Le agregue uno de cada uno de los ítems que mostré anteriormente.
  • Les hice cambios a estos y cree unos tipos de datos, clases y otras cosas sencillas. Nada que no hubiéramos podido hacer desde otro lugar.
  • Al presionar F5 me empezó a hacer el deployment y todo fue a dar a mi base de datos sin problemas.
  • Al final me dijo que no tenía suficientes permisos para depurar.


Bueno y a que le hizo el deployment. Me copio mi Assembly, creo un StoredProcedure y mi type.

Es importante mencionar que el proyecto tiene unos Test Scripts. Estos Scripts se corren al momento de hacer el deployment, para estos prueban tus StoredProcedures u otros objetos de SQL.

Ok, vale la pena entonces probar alguna otra funcionalidad aparte de el puro deployment y SourceControl.

Refactoring: hice un simple rename a mi tipo para que ahora se llame Type2 y voila!!! F5 y todos los cambios aplicados también en mi base de datos y afectando a mi StoredProcedure.

CREATE
PROCEDURE [dbo].[StoredProcedure1]

@miTipo [dbo].[Type2]

Algo que me llamo la atención es la manera en que podemos crear Stored Procedures. Finalmente es un metodo estático dentro de una clase decorado con ciertos atributos. El metódo puede regresar algún tipo de dato y recibir tantos parametros como sean necesarios, esto finalmente se traduce en código como el que vimos arriba.

Unit Testing: cree una sencilla prueba unitaria para algunas propiedades y metodos y todo sin problema. Sin embargo, no se que tal se comporte al querer hacer unit testing sobre un stored procedure ya en la base de datos o sobre algún mock database. Aún no se como vaya a trabajar eso.


Hay mucho por conocer de está herramienta, les sugiero que la bajen y se pongan a jugar un rato. Aunque no estoy completamente satisfecho con el producto, parece ser algo prometedor.

sábado, julio 29, 2006

Problemas instalando Windows Vista Beta 2

Les dejo el link de un Post muy interesante respecto a como instalar Windows Vista.

Word 2007 y mis Posts pendientes

Les comento que Word 2007 tiene una nueva funcionalidad para publicar directamente a diferentes proveedores de blogs, entre ellos blogger. Bueno mis últimos posts prometían ser algo más completos con mejor formato y colorsitos y más importante aún fotos. Sin embargo, Word 2007, al parecer aún no puede subir bien las fotos.

Así que les debo tres posts más hasta que tenga oportunidad de subir las fotos manualmente a algún otro lugar. Mientras les dejo un abstract de los posts:
1. Como usar Continuous Integration con VSTS TFS, hay una herramienta que permite que se automatice está tarea, en lugar de que se configure por tiempo, ahora detecta que hay cambios en el código y corre el build al momento.
2. Algunos Screenshots de la spruebas con DataDude (VSTS for Database Professionals).
3. SmallDtoWrapper, es un patrón de diseño de arquitectura que nos ha resultado muy útil para optimizar el consumo de ancho de banda al usar WebServices. Desde que empece a leer de patrones de diseño, siempre quise tener el mio, bueno, porfín posteo respecto a mi primer patrón de diseño.... Espero comentarios...

martes, julio 25, 2006

Visual Studio Team System for Database Professionals

Esta es la descripción que encontré de la herramienta:

Herramientas para construir bases de datos de SQL en un entorno de proyecto administrado con soporte para versiones, despliegue (deployment), pruebas unitarias, refactorización, y desarrollo SQL desconectado. Este release (CTP de Junio de 2006) está enfocado en un escenario de funcionalidad completa para SQL 2000 e incluye el sistema base con ingeniería en reversa, un nuevo editor de consultas, comparador de esquema y datos, generador de datos, pruebas unitarias y refactorización de nombres.

En un post anterior ya les había hablado de DataDude (codename) para este nuevo producto. Bueno, ya pueden bajar los bits de Junio, pero no les dejo ese link, mejor el del CTP4.

Estos son links de algunos bloggers the DataDude:

Luego que lo prueba más publicare algunas fotos.

miércoles, julio 19, 2006

DataEventArgs

Despues de publicar mi post anterior, me di cuenta de que la clase DataEventArgs<T> no forma parte del .NET Framwork. Nosotros usamos Mobile CAB y resulta que la clase pertenece a este framework. Muy seguramente el CAB para Windows tambien lo use, pero bueno si ustedes estan programando para Web o simplemente no usan CAB, pueden usar la siguiente clase en su proyecto. Es tan sencillo el código que toma lo mismo hacerla que haber hecho algún otro EventArgs.

using System;

namespace Microsoft.Practices.Mobile.CompositeUI.Utility

{

/// <summary>

/// Generic arguments class to pass to event handlers that need to receive data.

/// </summary>

/// <typeparam name="TData">The type of data to pass.</typeparam>

public class DataEventArgs<TData> : EventArgs

{

TData data;

/// <summary>

/// Initializes the DataEventArgs class.

/// </summary>

/// <param name="data">Information related to the event.</param>

/// <exception cref="ArgumentNullException">The data is null.</exception>

public DataEventArgs(TData data)

{

if (data == null)

{

throw new ArgumentNullException("data");

}

this.data = data;

}

/// <summary>

/// Gets the information related to the event.

/// </summary>

public TData Data

{

get { return data; }

}

/// <summary>

/// Provides a string representation of the argument data.

/// </summary>

public override string ToString()

{

return data.ToString();

}

}

}

Más Generics - DataEventArgs

Cada vez le encuentro más usos a los delegados. Hace poco postee respecto al uso del generic EventHandler, que te permitia no tener que declarar un delegado para todo.

 

Sin embargo, por si sólo el EventHandler, aún necesitaba ser acompañado de algún EventArgs.

 

Bueno recapitulando normalmente haríamos lo siguiente para poder tener un evento que mande a sus suscriptores quien mando el metodo y una string con la clave del articulo seleccionado.

 

 

public delegate void ClaveSelectedEventHandler(object sender, ClaveSelectedEventArgs e);

 

Esa firma es necesaria para cumplir con las convenciones de nombres, todos los eventos en .NET tienen un delegado que requiere un objeto que indique quien lanzo el evento y unos event args con datos del evento.

 

Bueno, ahora necesitamos crear la clase ClaveSelectedEventArgs

 

 

public class ClaveSelectedEventArgs:EventArgs

{

public ClaveSelectedEventArgs(string clave)

{

this.clave = clave;

}

private string clave;

public string Clave

{

get { return clave; }

}

}

 

Note que ClaveSelectedEventArgs debe heredar de EventArgs, esto es muy útil, aunque para algunos pudiera parecer un simple capricho de convención de nombres, pero sirve para que metódos más genéricos (no generics, sino que no esperen un EventArgs tan específico aún puedan suscribirse a nuestro evento).

 

Por pen-último declaramos un evento del tipo ClaveSelectedEventHandler

 

public event ClaveSelectedEventHandler ClaveSelected;

 

Ahora si por último, lanzamos el evento:

 

if (ClaveSelected != null)

ClaveSelected(this, new ClaveSelectedEventArgs("clave");

 

Es importante validar si el evento no es nulo antes de querer lanzarlo, esto nos garantiza que realmente haya alguien suscrito y nos evita la posibilidad de generar un NullReferenceException.

 

Bueno todo listo para que alguien se suscriba de la siguiente manera:

 

this.ClaveSelected+=new MiEventHandler(View_ClaveSelected);

 

void View_ClaveSelected(object sender, SplashView.ClaveSelectedEventArgs MiEventArgs)

{

throw new Exception("The method or operation is not implemented.");

}

 

Como les comentaba, el metodo que usamos para hacer algo con ese evento, pudiera ser algo más genérico:

void View_ClaveSelected(object sender, EventArgs MiEventArgs)

{

throw new Exception("The method or operation is not implemented.");

}

 

Ese metodo puede escuchar a cualquier evento que cumpla con los naming conventions.

 

 

Bueno, ahora si, quieren ver la parte fácil? Creo que fue mucho rollo introductorio:

 

public event EventHandler<DataEventArgs<string>> ClaveSelected;

 

Eso es todo lo que tenemos que hacer en lugar de declarar un delegado y una clase EventArgs que encapsule un string. Todo el resto del código (lanzar el evento y suscribirse es identico).

 

Pero bueno como un string se puede usar para muchas cosas, valdría la pena decir que significa para nosotros:

///

/// Se lanza sl momento de que se seleccione una clave y la manda en los DataEventArgs

///

public event EventHandler<DataEventArgs<string>> ClaveSelected;

 

Eso se ve mejor.

 

Bueno, sólo para que lo vean completo, así lanzamos el evento:

 

if (ClaveSelected != null)

ClaveSelected(this, new DataEventArgs("Clave"));

 

Así nos suscribimos a el:

 

this.ClaveSelected += new EventHandlerDataEventArgs<string>>(SplashView_ClaveSelected);

 

Y así lo cachamos:

 

void SplashView_ClaveSelected(object sender, DataEventArgs e)

{

throw new Exception("The method or operation is not implemented.");

}

 

O así si quisieramos hacerlo más genérico:

 

void SplashView_ClaveSelected(object sender, EventArgs e)

{

throw new Exception("The method or operation is not implemented.");

}

 

Algo muy importante es que DataEventArgs lo puede usar con cualquier otra cosa que necesiten mandar como argumento, por ejemplo:

DataEventArgs<MiClase>

DataEventArgs<int>

martes, julio 18, 2006

Software Guru 2006

20,21 y 22 de Septiembre en el WTC y CompuSoluciones.

Si ya vieron la ultima revista de SG, es de llamar la atención que no este Microsoft en la primera de forros (luego luego dandole vuelta a la portada), así que para que hayan quitado a Microsoft uno de sus más fuertes patrocinadores para anunciar este evento es porque realmente ha de valer la pena jejeje, bueno igual MileStone Consulting le quito la contraportada a IBM, mmmm ha de ser algo importante tambien....

Bueno ya en serio, realmente si es un evento importante, basta con ver algunos de los temas. La verdad es que parecen ser tan prometedores todos que no me gusta tener que decidir cual track tomar.

Lamentablemente me ha tocado jugar un poco de cada rol, por lo que tengo ahora me interesa todo lo relacionado con mejora de procesos, pero tambien estoy muy al tanto de herramientas y tecnologías y bueno, ingeniería de software siempre será algo indispensable, pero por otro lado estrategías para empresarios presenta temas que pueden ser muy útiles para Integradores. Ya viendo todo, tal vez dirección de TI es el único no tan tan interesante, aunque pensandolo bien ahí hay muchos clientes potenciales y necesitamos saber como piensan los directores de TI, por ejemplo hay un tema "Outsourcce exitoso: Mejores prácticas y leccciones aprendidas", apoco no sería interesante al ofrecer servicios de este tipo conocer eso para tener más herramientas de venta con el cliente.

Bueno en resumen lo malo de SG06 es tener que escoger a que track entrar.

Estos son algunos de mis temas preferidos:
Herramientas y Tecnología
Windows Presentation Foundation (que parece que la va a dar Christian).
Software Orientado a Aspectos.
Desarrollo para Dispositivos Inteligentes, :( era la propuesta de tema que iba a mandar yo.
Mejora de Procesos:
Entendiendo la Arquitectura de MoProSoft para extenderlo.
MoProSoft 16 veces: leccciones aprendidas.
CMMI y/o/vs Agilidad.
Direccion de Proyectos:
Administración ágil de proyectos. (Se empalma con WPF).
Ingeniería de Software:
Especificación de Requerimientos con PNL. (Se empalma con AOP)
Desarrollo Dirigido por pruebas TDD. (Se empalma con Desarrollo para dispositivos inteligentes).
Estrategia para Empresarios:
Todas.
Dirección de TI:
Outsourcing Existoso

Bueno esos solo son los tracks.
Chequen las conferencias magistrales.
Business Collaboration Software Factories, Mauro Regio y quien es Mauro Regio, por alguna razón no le pusieron su foto como a los demás expositores ni su pérfil, pero vamos Software Factories? A quien van a mandar para hablarnos de eso? Bueno busque el pérfil de Mauro y resulta que mandaron al indicado para venir a hablar de este tema. Creo que está puede ser la mejor platica para mi gusto.
Ajax + SOA, John Crupi, de JackBee si alguien sabe de AJAX es la gente de JackBee.
Software Develpment as a cooperative game, Alistair Cockburn.
Tendencias Internacionales en Ingeniería de Software, el tema pudiera parecer no tan interesante, pero es Hanna Oktaba.

El último día hay unos talleres. Estos son los que me llemaron la atención
Desarrollo Empresarial con VSTS, llevamos trabajando casi un año con VSTS, pero siempre hay algo que podamos aprender.
Arquitecturas basadas en componentes con .NET Library 2.0.


Bueno, espero y también les llame la atención algo de esto, aunque seguramente no tendremos el mismo gusto, mejor les sugiero que vean al programa completo y escojan a que quieren entrar.

lunes, julio 17, 2006

DataDude or VSTS for Database Professional

Ok, para los que conocemos VSTS, sabemos que tiene sus ediciones de Tester, Architect y developer y que comparte una base común por ejemplo Team Explorer para navegar por los ítems de Team Foundation Server.

La mayoría de nosotros, bueno excepto aquel que no tenga mucho que ver con las bases de datos, aún usa Management Studio o Enterprise Manager y Query Analyzer. Bueno Datadude, va será el ambiente de trabajo para bases de datos.

Que ofrece?
Bueno la verdad es que después de escuchar el podcast de .NET Rocks que quedo con la idea de que está primera versión no ofrecerá cambios impresionantes, pero esto es algo de lo que están haciendo:
Partienda de que tenemos el esquema offline, es decir, creas un nuevo proyecto de base de datos y te traes el esquema a tu maquina. Ya aprovechando que tenemos esto es posible lo siguiente:
Mantener un control de cambios (Team Foundation).
Trabajar con diferentes desarrolladores y hacer merge de cambios a la base de datos.
Programar deployments y reflejar estos cambios en las bases de datos.
Proveer el impacto que pudiera tener cambios en el esquema en los datos.
Refactorizar la base de datos (como clic derecho en una columna y luego Rename) y actualizar StoredProcedures, vistas, rules, etc.

Bueno si eso les parece interesante, se decepcionaran un poco al saber que no está listo aún:
Intellisense :(


Bueno faltan algunas otras cosas a mi parecer no tan criticas como, integración con LINQ (para Diciembre que liberen DataDude aún no estará listo LINQ). Que trabaje con diferentes DBMS (actualmente sólo soporta SQL 2000 y 2005), toda la versión 2.0 de Datadude trata de esto. Algunos extension points para proveedores (hacer plugins, etc).

Bueno traen el tiempo encima, se supone que esto lo liberan para Diciembre.

Ojala y para el próximo año podamos contar con algo mejor para trabajar sobre bases de datos.

Net Framework 3

Al parecer ya está esto más listo, al menos a un nivel tan estable como para empezar a hacer nuestros primeros pininos en está nueva tecnología...

Esperamos que en próximos proyectos podamos empezar a usar algo de esto.

Pueden ver más info de lo que se incluye en un post de Christian Strevel.

Integración Continua

La integración continua es una práctica muy útil en el desarrollo de software (lastima que no la usamos, bueno no al 100%).
Recientemente escuche algo de un servidor de integración y me llamo la atención. Pense, en que podrá servirnos a nosotros, recuerdo haber visto algo de esto en internet, de pronto recorde que ya teníamos uno, que se empezo a utilizar en tres proyectos, uno de los cuales se cancelo y se quedo en un proof of concept, otro fue tan sencillo que nunca realmente se notaron los beneficios que CI (Continuous Integration) pudo haber brindado y en este último que nos hubiera servido muchísimo en algún momento se desconfiguro el Build Server y se dejo de utilizar.

Bueno en resumen, teníamos el servidor, pero no la práctica de integración continua. CI es de esas cosas como control de versión y administración de proyectos que por más que tengas CVS o MS Project (o algo mejor), si tu equipo no tiene buenas prácticas de Administración de la Configuración o Planeación de Proyecto de poco sirve. Lo mismo nos ocurre ahora...

Bueno volviendo al tema. Martin Fowler reescribió sobre CI, si quieren conocer un poco más de esto se los recomiendo.

Por último, aunque Team Foundation Server aún le falta madurar un poco en algunas de sus áreas (al igual que otras de VSTS), trae ya un servidor de Integración con el que Christian y yo estuvimos jugando.

Como funciona, simplemente creas un nuevo build, le dices que proyectos de Visual Studio o que soluciones quieres compilar, cuales dependen de cuales y que pruebas quieres correr sobre el build. Una vez que haces esto y programas la frecuencia (minímo diario), todo funciona en automático. El build server tomara del repositorio los archivos que necesita, compilara lo que le indicaste, correrá las pruebas y te deja todo el output (dlls, archivos de pruebas, exes, etc) en un dropbox (un folder compartido en red). La mejor parte es que todo esto se integra con los reportes de Sharepoint que tiene el Team Foundation, por lo que podemos ver estadísticas como las siguientes:
Pruebas fallando con bugs activos y con bugs activos,
Regresiones: pruebas que ya pasaban y ahora no.
Otros indicadores de calidad,
% de pruebas que pasan.
% de codigo cubierto por pruebas (Code Coverage).

También se pueden hacer otro tipo de revisiones aparte de las pruebas automatizadas, como para poder hacer el deployment o release de un build en partícular.

La verdad es que nosotros estamos medio güeyes, la regamos, pensamos que los builds eran para tenerlos. Como? Si pensabamos que para tenerlos y poder obtener de una fecha en partícular los ejecutables y librerías necesarias para de ahí poder hacer un release. La verdad es que esto de los builds tiene mucho mayor sentido que eso: Continuous Integration. Esto nos va a permitir saber como vamos, que tal trabajamos juntos, si vamos mejorando o empeorando, detectar rápidamente como nos pegan los cambios de otros y arreglarlos rápidamente y más que nada, tal como dice martin fowler "treat integration as a non-event", "trata la integración como si no fuera un evento", es decir, no vamos a estar al final del proyecto integrando todos los modulos.

Cómo usar ActiveSync Remote Display con Windows Mobile 5.0.

Remote Display es una herramienta bastante útil. Para hacerla funcionar con Windows Mobiles, sólo hay que copiar los archivos de "C:\Program Files\Windows Mobile Developer Power Toys\ActiveSync_Remote_Display\devices\wce400\armv4t" a "\Windows" en el dispositivo y listo.

En el link les da un poco más de rollo.

viernes, julio 14, 2006

Lazy Load usando delegates


Hace mucho un par de meses, nos vimos en la necesidad de implementar nuestro Lazy Loading a mano.
Hay diferentes formas de hacerlo, la mejor explicación que he leído es la de fowler. En su libro Patterns of Enterprise Application Architecture viene más detallado.

Bueno lazy load tiene 4 formas de ser implementado, Virtual Proxy, Ghost, Lazy Initialization y Value Holder. Frameworks de ORM como NHibernate lo manejan muy bien y de una manera casi transparente, pero en este caso no pudimos usar ningún framework de esos, por lo que tuvimos que usar muchos de los patrones que fowler describe en su libro.

Hizimos una combinación de Lazy Initialization con Virtual Proxy.

La diferencia principal con los ejemplos que da fowler, es que nosotros desde el business object, en este caso un cliente, no teníamos acceso a la capa de acceso a datos, ni siquiera a una interfaz, por lo que todo el truco fue usar un delegado. Esto último nos permitio también la posibilidad de reutilizar este mismo VirtualProxy para otras plataformas, la primera va y saca la información de una base de datos local y la otra va a sacarla de un servidor que tiene un esquema distinto, pero ambos mapean las columnas a las propiedades del business object de la misma forma.

Bueno resumidamente el diseño quedo así:
Tenemos un ClienteCoporativo que es una lista de clientes y al igual que las otras dos clases, tambien implementa ICliente, aparte de permitirnos iterar sobre la colección de clientes, tiene propiedades que nos regresan los acumulados, por ejemplo saldos.
ICliente define las propiedades y metodos que debe tener la clase.
Cliente es nuestro business entity.
ClienteLazy es nuestro Virtual Proxy y ahí está la parte interesante.

Ahora, para que es útil hacer un Lazy Loading. Bueno cuando cargamos de la base de datos información de una colección de clientes, nos interesa tener al menos el nombre y la descripción, lo cual podemos hacer directamente.

Ahora se presentan diferentes escenarios:
1. Con la lista de cliente simplemente mostramos estos al usuario quien podra seleccionar alguno de la lista y trabajar sobre uno en partícular, por lo que hasta aquí no existe la necesidad de crear completo todos los demas objetos cliente de la lista, simplemente hasta el momento en que se seleccione alguno nos terminamos de traer su información completa.
2. Seleccionaron algo como ver todos, por lo que hasta este momento es cuando necesitamos cargar toda la información en todos los objetos.
3. Simplemente resulta información suficiente el nombre y descripción, por lo que esto términa la interacción con el usuario.

El cargar un entity de este tipo se puede volvier pesado, si se considera que hay muchos objetos relacionados con este, como saldos, pudiera haber facturas, consignatarios, etc y no queremos traernos toda una gráfica compleja de objetos sino hasta el momento en que se necesite. Por otro lado no queremos que el usuario del business entity tenga que estar al pendiente de si se cargo o no ya el objeto, por ejemplo:
if(cliente.Facturas==null)
cliente.Facturas = FacturasDataAccess.GetFacturas(cliente.Clave);
cliente.Facturas.DoSomething()

Ok es enfadoso tener que estar haciendo esas validaciones, pero lo de menos es que sea enfadoso, lo malo es que es propenso a tener errores en tiempo de ejecución cuando se nos llega a olvidar (NullReferenceExcepction). Por otro lado, pudieramos no tener disponible FacturasDataAccess en todo momento. Si tenemos que hacer este tipo de validaciones pierde completamente el sentido de que el cliente tenga una propiedad Facturas si siempre que se vaya a usar debemos estar al tanto de como podríamos obtenerla de ser necesario.

Ok, así es que se vuelve impractico el querer cargar todo a la primera y se vuelve enfadoso el tener que validar y cargar las propiedades en el momento que las queramos usar.

Nuestro ClienteLazy es simplemente un wrapper para un Cliente.
De tal forma que podemos cargar nuestra colección con puros IClientes (que son más ligeros y rápidos de cargar) y cuando a un ICliente le piden algo como
Corporativos[0].Saldo
El ICliente verifica si ya tiene creado un objeto cliente con información real y de no tenerlo va y lo busca, lo crea y luego delega en el cliente para regresar la información. Los accesos subsecuentes ya no requieren ir a traerse nuevamente el cliente.

Ok, así es como lo define Fowler, como hicimos nosotros?

Como ClienteLazy y en general toda la capa de Business Objects y Business Entities no tenía acceso a la(s) capa(s) de DataAccess, tuvieron que usar un delegate para que este supiera como obener el cliente.

Este es parte del código de ClienteLazy

private Cliente c;
private GetCliente Get;
public ClienteLazy(GetCliente delegado, string clave, string nombre)
{
this.clave = clave;
this.nombre = nombre;
this.Get = delegado;
}
private void Check()
{
if (c == null)
c = Get(clave);
}


public string FormaDePago
{
get
{
Check();
return c.FormaDePago;
}


public string Nombre
{
get
{
return this.nombre;
}
}


Esta es la definicion del delegado, que marca la firma para el metodo.
public delegate Cliente GetCliente(string clave);

Si se fijan, al momento de acceder a forma de pago, vamos y nos aseguramos de tener al cliente listo y luego accedemos a su propiedad, pero al momento de regresar el nombre simplemente usamos nuestra variable local. La parte mas interesante esta en que el metodo Check usa el delegado para obtener al cliente.

Asi que los pasos son los siguientes.
Tenemos una clase (Virtual Proxy) que recibe en el constructor, la clave, nombre y otras propiedades que ustedes quieran dejar accesibles sin necesidad de ir a traerse el cliente completo. Tienen un delegado (la parte mas importante) que sabe que como crear un cliente, y por ultimo implementamos una interfaz común para hacer lucir al Virtual Proxy como el objeto real y al implementarla simplemente encapsulamos las propiedades del objeto real verificando en cada acceso que ya lo tengamos listo.

jueves, julio 13, 2006

Los sapitos


Ahora cambiando un poco del tema habitual de mi blog, les comento de un divertido y medio adictivo juego. Los sapos saltarines.

Lastima que me duro poco la adiccion porque estaba empzando a gustarme....


Para los que el juego no ha llegado a su inbox, mandenme un mail y se los paso.

miércoles, julio 12, 2006

Descubri el RSS de Blogger.com

Ayer escribí decepcionado de blogger, porque ofrecía RSS. Pero acabo de descubrir que si, sólo que no lo muestran explicítamente por alguna extraña razón.

Bueno el chiste es que aquí les paso el link para mi RSS, para los que tengan RSS Readers se pueden suscribir a miguelmadero.com/atom.xml, para los que no, les recomiendo www.SharpReader.com Para los que esten en blogger.com y quieran publicar su RSS a quien sea que los lea, pongan un link a http://sunombre.com/atom.xml

Más de delegados anónimos

Hoy necesitabamos tener toda una lista de partidas que están dentro de una compra.
Una compra es una lista de pedidos y un pedido es un diccionario de partidas, así que como sacarlo de manera sencilla.


public List Partidas
{
get
{
List partidas = new List();
ForEach(delegate(Pedido pedido) { partidas.AddRange(pedido); });
return partidas;
}
}

No sólo esto simplifico nuestro código, sino que lo hizo más seguro, encapsulando variables que no necesitaban ser de instancia.
Había otras soluciones, pero la más obvia era hacer algo como lo siguiente

List partidas; // Ahora es variable de instancia para que el delegate lo pueda usar.
public List Partidas
{
get
{
partidas = new List();
ForEach(new Action(AddPartidas)); // Ahora usamos un metodo como delegado
return partidas;
}
}

public void AddPartidas(Pedido pedido)
{
partidas.AddRange(pedido);
}

No solo el código es más largo, creamos un metodo extra muy sencillo que sólo se usa desde un lugar, sino que aparte y lo peor de todo, es que ahora cualquier metodo o propiedad de la clase puede usar la variable partidas, pensando que sirve para algo más que para regresarla a algún cliente de este objeto desde la propiedad Partidas.

RSS Readers

Ayer baje el http://www.sharpreader.net/ le configure algunos blogs y ya esta mas saturado que me Outlook, pero con información que yo seleccione como interesante.

Un RSS reader, baja todo el contenido de cierto sitio web y lo deja listo en tu máquina para que puedas leerlo offline, funciona algo similar a un cliente de correo. Si leen mucho en blogs y a veces batallan para tenerlo organizado y saber que ya leyeron o si hay algo nuevo, etc, bueno un RSS Reader seguramente será su solución, excepto para mi blog ni algún otro de blogger, que no ofrecen el contenido en formato RSS. Esto es razón suficiente para cambiarme.....

Bueno ya una vez que bajen el software, les sugiero agreguen los siguientes links:
http://www.netfx3.com/blogs/MainFeed.aspx?GroupID=-1&Type=MirrorBlogsOnly Habla de .NET 3.0 (W*F)
http://martinfowler.com/bliki/bliki.rss Martin Fowlers bliki
http://blogs.msdn.com/rjacobs/rss.xml Ron Jacobs blog
http://team.intellekt.ws/blogs/chris/rss.aspx Blog de Chrisitan Strevel
http://www.intellectualhedonism.com/SyndicationService.asmx/GetRssCategory?categoryName=dnr El RSS de DotNetRocks Audio Show.
http://channel9.msdn.com/rss.aspx?ShowID=5&format=mp3 Los audios de Channel9 en XML/Mp3

Bueno tienen ahí buen contenido para rato.

martes, julio 11, 2006

ScrumForTeamSystem

A poco no estan padres las páginas que dicen algo así como, seccionamarilla.com o integradorestecnologicos.com o computers.com, páginas que dicen exáctamente lo que estás buscando.

Hay una que me gusta mucho roller.com.mx, es una tienda de patines y es de méxico, así que que mejor dirección de roller.com.mx, patines.com.mx hubiera sido buena, pero bueno saben la idea.

Siempre que me preguntan algo como, oye donde puedo ver los resultados del prep digo bromeando, entra a resultadosdelprep.com. No sería bueno que fueran las cosas tan sencillas con los nombres de dominio?

Bueno, ahora si quieren bajarse unos templates para VSTS y dejar de manejar esos procesos de MSF, que sólo Microsoft entiende, si les gustan las metodologías ágiles y sobre todo si programas en .NET, usas Team System y Scrum es el proceso de trabajo utilizado por tu equipo... bueno entra a scrumforteamsystem.com

Hasta ahorita he estado leyendo un poco de esto y de aquello, viendo templates, etc... despues de conocerlo más (uno dos meses probalemente) les escribire más al respecto, pero si no quieren esperar tanto, vayan bajenlo, instalen los templates, usenlo en un spritn (una iteración de Scrum) y me platican.

domingo, julio 09, 2006

Software Factories

Sin duda el concepto de fabricas de Software se está convirtiendo en el nuevo parádigma de Software y a muchos nos tocara pasar la transición entre OO y SF, no se como sea esto, pero ya me estoy imaginando que será un gran cambio en nuestra industria. No me toco vivir la transición anterior (estructurado/OO), pero aquellos con más experiencia seguramente la recordaran bien.

Aunque aún falta tiempo para que estemos trabajando completamente bajo este nuevo concepto
al día de hoy existen ya varias "Fabricas de Software", algunas de ellas como HL7 no son muy relevantes para nosotros, pero existen otras tres que seguramente serán de mayor interés popular y estás dependen del tipo de aplicaciones que esten desarrollando:
Web Services
Windows Forms
Mobile

La tendencia está en que cada vez se desarrollen Software Factories más específicas, buscando atacar diferentes nichos de negocio o mercados más vertícales o aplicaciones en lugar de pensar en algo tan genérico como Windows Forms, tal vez pensar en aplicaciones Bancarias o Médicas o aún más específico, para consumir y proveer Servicios en el área médica (tal como es el caso de HL7 SF).

Bueno aquellos que programan en ASP.NEt seguramente estaran interesados en saber porque no puse un link para estas, sin embargo aunque no está realmente lejos de ser un SF el proyecto de Atlas es algo muy prometedor que seguramente cambiara la manera en que hacemos aplicaciones Web. Para los que no programan en .NET, hay otras soluciones de Ajax para plataformas como J2ee y me imagino que habrá algo para PHP.

La razón por la cual microsoft le dio prioridad a los SFs de WS, Mobile y Windows es porque creen que ASP.NET estaba más completo, tenía más herramientas, mayor soporte y una arquitectura mejor definida que las de las otras tecnologías, lo cual es un tanto cierto, sin embargo, una vez que trabajamos con un SF, vemos que no caería nada mal tener algo similar para ASP.NET. Hasta donde se aún no hay planes oficiales de hacer algo, pero seguramente una vez terminado el proyecto de Atlas, pensaran en integrar todo como un Software Factory.

El potencial real de una Fabrica de Software, está cuando empezamos a utilizarla desde que comenzamos a definir la arquitectura base de nuestra aplicación de tal forma que podamos proveer una gran punto de partida y apoyos a los desarrolladores para que tengan claro como hacer las cosas. Ya no basta con naming conventions, con plantillas de documentos como ERS, etc, ahora se vuelve importante el tener definido que patrones de diseño y de arquitectura usar en cada caso y proveer la guía para como usarlos, proveer frameworks para fácilitar ciertas tareas y darles herramientas generadoras de código que puedan automatizar ciertas partes de la aplicación.

Más adelante publicare un glosario de términos de SF y les hablare en general de los principios que propone para despues podeer entrar más a detalle a hablar del Mobile SF

viernes, julio 07, 2006

Probar un WebService desde una maquina remota.

Encontre un post muy breve e interesante respecto a como hacer esto.

Cuando entras a un WebService de IIS o del WebServer de VS te aparecen campos para que puedas pasarle parametros a los WSs sencillos para invocarlos y probarlos directamente desde web. Bueno está funcionalidad está deshabilitada cuando necesitas hacer las pruebas de manera remota.

Para arreglarlo simplemente escribe los siguiente en el web.config dentro de system.web

<system.web>
    <webservices> 
        <protocols>   
            <add name="HttpPost">   
            <add name="HttpGet"> 
        </protocols>
    </webservices>
</SYSTEM.WEB>

jueves, julio 06, 2006

Anonymous Delegates

VS 2005 viene con 400 nuevas caracteristicas, según nos presume Microsoft. Esto es para el puro IDE, aparte de los cambios en la arquitectura del framework y sus nuevas clases

Bueno entre algunas de las mejores novedades hemos encontrado obviamente Team System, todo lo relacionado con pruebas, diagramas de clases, intellisense en la ventana del Watch del depurador, code snippets.

El framework trae un monton de novedades como generics, del que ya he escrito anteriormente (DataAccess), bueno el chiste es que aunque ya la conocíamos nunca nos había parecido util el usar delegados anónimos y hoy descubrimos lo simple y prácico que es no tener que hacer todo un metódo que estorba en tu código que contiene una línea sencilla y sólo se manda llamar desde un lugar.

Por ejemplo tenemos una lista de Threads que queremos poner a todos a correr y luego esperar a que todos terminen.

threads.ForEach(delegate(Thread thread) { thread.Start(); });
threads.ForEach(delegate(Thread thread) { thread.Join(); });

Wow!!!! antes hubieramos necesita crear dos metodos aparte nada más para hacer un thread.Start y un thread.Join para el predicate del foreach de la lista.

Bueno espero y les sea útil.

A nosotros nos hubiera ayudado mucho si se nos hubiera ocurrido usar esto para unos controles EditableGrids y EditableList que usamos para pocket pcs, que usan intensamente delegados y en la mayoría de los casos hacen cosas tan sencillas como asiganarle un valor a un textbox o realizar alguna validación sencilla.

miércoles, julio 05, 2006

Team System desde fuera de la oficina.

Es triste saber que Team System, aun y que esta basado en WebServices y supondríamos que se podría trabajar directamente desde Internet, este aún tiene problemas para hacerlo de manera optima, por lo que nuestra solución estos días fue el montar una VPN y conectarnos de está manera.


Esperamos en próximas versiones ya se pueda hacer la conección direccto por internet.

:`(

Al parecer esto es por los metodos de autentificacion que por default debe usar el IIS para trabajar con los WSs del TFS.

sábado, junio 10, 2006

MoProSoft

Ya oficialmente arrancamos la definción de procesos de MoProSoft, por lo que tendremos mucho trabajo sobre esto durante los próximos 10 meses.
Innevo nos va a estar ayudando con la consultoría y fácilitaran un poco las cosas.

Tuvimos una evaluación inicial y al parecer nos fue muy bien, algunas buenas prácticas que nos ayudaran a hacer más rápido todo y por otro lado Team System será de gran ayuda y esperamos poder automatizar los procesos de desarrollo desde está herramienta para que queden alineados a lo que definamos de MoProSoft.

De aquí en adelante bastantes de mis posts estarán relacionados con este tema. Espero poder abrir alguna categoría aparte para ir clasificando por temas.