Indigo: Videos Didácticos

De a poco, y con cuentagotas, vamos recibiendo noticias de Indigo, el codename que agrupa las tecnologías de comunicación y transporte para aplicaciones ditribuidas de la nueva generación de aplicaciones .NET. Desde aquí pueden bajar dos videos, uno explicando conceptos muy básicos de Indigo (casi diría SOA) y otro mostrando código. Debi decir que el código sorprende por su simpleza. Armar una comunicación utilizando Indigo se asemeja mucho a Remoting, y tiene todas las ventajas de WebServices o MBI, además, ya se pueden ver los primeros usos interesantes de los templates, un nuevo feature del .NET Framework 2.0.

Workshop Visual C++ en Buenos Aires

La semana pasada tuve el agrado de asistir a uno de los eventos más interesantes organizados por Microsoft Argentina en los últimos tiempos: Visual C++ Workshop. Si bien el Visual C++ no es mi especialidad, siempre es interesante estar en contacto con gente interna de la sección de desarrollo de Microsoft. La conferencia fue dada por cinco especialistas en el tema, de todas las latitudes (USA, Brazil, Guatemala, Puerto Rico, Bélgica) de los cuales algunos hablaban en español y otros no, aunque esto no es una barrera cuando uno esta dispuesto a entenderse y aprender cosas nuevas. Debo destacar que la organización estuvo muy bien, el lugar elegido para el workshop fue la UAI (Universidad Abierta Interamericana), y como decía al principio, hacía mucho tiempo que no veía un evento realmente interesante organizado por Microsoft, con contenidos de avanzada. Los temas que se trataron iban desde las nuevas optimizaciones a nivel del compilador, que incluirá el nuevo Visual C++ 2005, hasta como aprovechar .NET para la migración de aplicaciones legacy que utilizan MFC y otras cosas. Es muy bueno saber que la actitud que hay que tomar es una convivencia pacífica entre el código heredado y las nuevas tecnologías, ya que muchas veces el costo de pensar una migración de una aplicación hacia .NET se hace impensable. Mis felicitaciones al grupo de trabajo de MS Argentina que organizó este evento, y las gracias a los expositores que vinieron desde tan lejos a compartir sus conocimientos y su trabajo con nosotros!

Enterprise Library

Avalon ya esta disponible para bajarse!

Avalon, la nueva tecnologia de presentacion de Microsoft, ya esta disponible para bajarse desde este link. Avalon iba a estar disponible en un principio solo como parte de Windows Longhorn, la proxima version del sistema operativo de escritorio de Microsoft, pero en vistas de que el lanzamiento de Longhorn va a tomar tanto tiempo, decidieron que iba a estar disponible desde antes, para poder instalarse como parte de Windows XP y Windows 2003 Server.
Un articulo muy interesante en MSDN les explica que se puede hacer con este SDK y como evaluarlo.

Tendencias en la instalacion del .NET Framework

Recien leido en Brad Adams [MSFT]

Estas son estadisticas que indican como se esta distribuyendo el .NET Framework en las instalaciones actuales de Windows. Es uno de los principales problemas que limita a .NET para convertirse en la plataforma de desarrollo por default para Windows, como en su momento lo fue Visual Basic cuando comenzo a distribuirse el VBRUN (la libreria necesaria para correr programas en VB) en todas las instalaciones basicas de Windows.

1. Mas de 120 millones de copias del .NET Framework fueron bajadas e instaladas (usando tanto Microsoft Downloads como Windows Update)
2. Mas del 85% de las PCs hogareñas vendidas en el 2004 ya vienen con el framework instalado. Mas del 58% de las PCs de negocios tenian el .NET Framework preinstalado o precargado.
3. Cada nuevo dispositivo de imagenes hogareño de HP (impresora, scanner, camara) ya viene con una aplicacion en codigo manejado (es decir, requiere el .NET Framework), cada CD de software del Microsoft Intellipoint, que acompaña a los mouse Microsoft, viene con el .NET Framework.
4. Entre el 3er cuatrimestre del 2003 y el 2do cuatrimestre del 2004 hubo un incremento del mas del 30% de instalaciones del .NET Framework en el segmento de negocios.
5. La mayoria de las instalaciones del .NET Framework son en maquinas con Windows XP y Windows 2000.
6. Mas del 95% de la gente que tiene Microsoft Internet Explorer, tiene la version 5 o mayor.
7. Windows 98 y Windows ME son menos de un tercio del mercado de PCs hogareñas.

Igual, queda un largo camino por transitar, no veo a alguien bajando 25 megas de Internet (el .NET Framework) solo para probar un juego o una aplicacion shareware/freeware. Y es este mercado, lamentablemente, el que va a hacer que el framework se desparrame por todas las maquinas del mundo o no… Encima, faltan unos largos años hasta Longhorn, que era mi esperanza de tener una version desktop de Windows con .NET preinstalado.

Ebook gratis: diseccionando una aplicacion en C#

Esta disponible en esta URL el ebook en ingles Disecting a C# Application: SharpDevelop que les recomiendo leer. Es una muy interesante recopilacion de la experiencia que reunio el equipo de desarrollo de SharpDevelop (para quienes no lo sepan, es un entorno de desarrollo para .NET gratuito y libre), y hay bastante material para leer de las experiencias ajenas de desarrollo con estas tecnologias, en una aplicacion de un tamaño considerable.

DotText Password Hashing

Volviendo un poco a temas mas mundanos, mientras termino la configuracion de un nuevo site de weblogs con DotText, y revisando un poco el codigo, me encontre con la necesidad de cambiar un password de usuario en uno de los weblogs creados.

DotText guarda los passwords de usuario/administracion como un hash en Sql Server, asi que extraje esta parte del codigo del DotTextHelper que es la aplicacion que viene por default para crear los weblogs en la base de datos.

using System;
using System.Text;
using System.Security.Cryptography;

namespace DotTextPasswordHasher
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			if(args.Length == 0 || args.Length > 1)
			{
				Console.WriteLine("Error: only one parameter expected, that is, the password to hash");
			}
			else
			{
				string cleanString = args[0].ToLower();
				byte[] buffer1 = new UnicodeEncoding().GetBytes(cleanString);
				byte[] buffer2 = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(buffer1);
				Console.WriteLine(BitConverter.ToString(buffer2));

			}
		}
	}
}

Pueden bajar la version compilada desde aqui.

Evaluando los riesgos en el desarrollo del software

Una de las principales tareas en el proceso de desarrollo de software es lidiar con los riesgos que aparecen ligados a todos los proyectos. Es uno de los requisitos del proceso unificado de desarrollo el tener una lista de riesgos, pero esto no significa que una vez elaborada esta lista se guarda en un cajon o se archiva en un documento de los tantos que se elaboran. Al contrario, esta lista debe servir como guia a lo largo del ciclo de vida, de manera de ir reduciendo estos riesgos en forma paulatina. Esto es, la lista de riesgos debe ocupar un lugar importante en la documentacion de soporte del proyecto, los riesgos deben ser identificados tempranamente, documentados con su descripcion, impacto, tamaño, importancia e ideas acerca de como deben reducirse. Debe haber un responsable en el equipo de trabajo que se encargue del seguimiento, y lo mas importante, los riesgos deben identificarse y enfrentarse tempranamente, reconocerlos, asumirlos y enfrentar los problemas anticipadamente.

SWEBOK – Software Engineering Body Of Knowledge

El SWEBOK (cuerpo del conocimiento de la ingenieria del software), elaborado por la IEEE es un proyecto para lograr condensar el conocimiento aceptado generalmente (las practicas establecidas tradicionalmente y recomendadas por multiples organizaciones) y lograr un consenso en un cuerpo de conocimientos central acerca de la ingenieria del software.

A pesar de los millones de profesionales del software que existen en todo el mundo, y la amplia presencia y ubicua del software en nuestra sociedad, la ingenieria del software no ha alcanzado el estado de una disciplina de ingeniera y reconocimiento profesional. Desde 1993, la IEEE Computer Society y ACM han venido promoviendo activamente la ingenieria del software como una profesion.

En otras disciplinas, la acreditacion de contenidos universitarios y el licenciamiento y certificacion de la practica profesional se toman muy en serio. Estas actividades estan vistas como criticas para la constante actualizacion y mejora profesional y, por lo tanto, la mejora de los niveles de la practica profesional. Reconocer un cuepo de conocimientos central es fundamental para el desarrollo y acreditacion de contenidos universitarios y el licenciamiento y certificacion de profesionales.

Alcanzar este consenso mediante la realizacion de un cuerpo de conocimiento es un paso clave en todas las disciplinas y ha sido identificado como crucial para la evolucion de la ingenieria del software hacia un estatus profesional. El proyecto de la Guia del Software Engineering Body of Knowledge es una iniciativa que apunta a alcanzar este consenso.

Aqui puede descargarse una presentacion donde se explica el porque del SWEBOK, y aqui puede descargarse la version Ironman del 23 de Junio de 2003.

Diseño y Modelado de Sistemas

Todas las metodologias mas conocidas para desarrollo de software, establecen que el desarrollo completo de un proyecto es un proceso iterativo (esto es, que se realiza como una serie de pasos repetitivos) e incremental (con cada repeticion nos vamos acercando mas al resultado deseado).
Aquellos viejos “ciclos de vida” (procesos de desarrollo de software) en cascada donde primero se comenzaba con la captura de requerimientos, luego el analisis, diseño, implementacion y testing, ahora se ven reemplazados por versiones iterativas de los mismos pasos. Uno de las metodologias mas populares ultimamente es el Proceso Unificado de Desarrollo de Software. No voy a intentar una aproximacion al proceso unificado, sino intentar explicar de que se trata el diseño y modelado de sistemas dentro de este proceso.

Todos sabemos que lo que conocemos por realidad esta moldeada por la percepcion que tenemos de esta, nuestros sentidos (vista, oido, tacto, olfato, gusto) nos permiten percibir ciertos aspectos de la realidad, y cada ser humano (con sus diferencias) tiende a percibirla de manera ligeramente distinta. Bien, podemos entonces establecer aqui una analogia: la realidad es la selva en la que vivimos, y nuestra percepcion de la realidad es solo un plano de esta selva. Con este ejemplo podemos entender que no es lo mismo un plano de la selva (en 2D, en escala, con aclaraciones, puntos cardinales, etc.) que la selva misma (en 3D, con otros objetos, que no aparecen representados en el mapa, en tamaño real, etc.).

Lo mismo sucede con el modelado de sistemas. A medida que vamos avanzando en las iteraciones de los diferentes procesos de desarrollo de software, vamos aproximandonos en la construccion de un “mapa de la selva”, y vamos creando un modelo del problema que estamos intentando comprender. Un modelo es una simplificacion del tema en cuestion, es por esto que en las primeras iteraciones (analisis) tenemos una aproximacion simple (que en el proceso unificado llamamos “casos de uso”) que nos permite comprender el problema desde el punto de vista de quien va a usarlo.
En iteraciones mas avanzadas (diseño) nos paramos sobre los resultados de nuestra primera aproximacion, y vamos refinando los detalles que ya habiamos recolectado anteriormente. Volviendo a encarar el problema es que podemos comprenderlo y abarcarlo mas ampliamente. Asi vamos ahondando en detalles, volviendo a pensar conceptos, contrastando nuestras ideas con la realidad, es que refinamos el detalle de nuestro “mapa”.

Esto no es una tarea menor, se considera que el diseño (nuestra segunda iteracion) es por lo menos cinco veces mas larga (en tiempo) que la primera iteracion de analisis. En la etapa de diseño no solo debemos comprender en profundidad nuestro problema, sino hacer consideraciones respecto a donde va a estar funcionando (hardware, entornos de red, etc.) y como va a estar distribuido. Al final de esta etapa, debemos tener un mapa 90% definitivo de que es lo que queremos hacer.

Sin un mapa de nuestro sistema, como podremos construirlo correctamente?