Mis Aventuras con AutoCAD MAP: Acceso a datos Geoespaciales

|

En posts anteriores prometi ir indicando este tipo de cosas para que la gente que se inicia en esto vaya teniendo idea de como funciona el famoso AutoCAD MAP y como usarlo con .NET, pues bien algo fundamental es como acceder a los datos Geoespaciales...
Primero que son los datos Geoespaciales?? Es sencillos terminos son los graficos de los mapas, estos normalmente estan divididos en capas en las cuales se tienen representaciones graficas de objetos de distintos tipos, es decir se tiene una capa que tiene los graficos que representan a las calles, otra capa tendra los hidrantes, otra capa tendra las casas (lotes, parcelas, o como les denominen)....
Estas capas fisicamente pueden estar almacenadas en una base de datos como en uno o varios archivos, como ustedes se imaginaran no es una buena practica desarrollar sistemas de informacion geografica sobre archivos, esto nos deja la opcion de la base de datos...
Es posible almacenar estos datos en algunas bases de datos como por ejemplo Oracle, MySQL y SQL Server, la verdad la que mas avanzada esta en el tema es Oracle, al punto de tener su propio visor de datos geoespaciales en las versiones 9i y 10g y prometen una mejora sustancial que aun no evaluo en 11g, SQL Server 2008 promete tambien soportar bien este tema, sin embargo se pueden usar las versiones 2005 e incluso 2000, con MySQL no tengo experiencia en el tema, pero claro si desean bajar un poco los costos de su solucion podrian evaluar esta opcion...
Asi mismo por varias razones se eligio usar Oracle, se intento con la version 9i pero la verdad tuvimos problemas un poco extraños como por ejemplo que a veces AutoCAD dibujaba los datos pero a veces no, las conversiones de sistemas de coordenadas no siempre funcionaban como debian, etc....
Decidido, se uso 10g una version Enterprise con AutoCAD MAP 3D 2008 SP1, lo del Service Pack del AutoCAD es importante por que quita una serie de Bugs molestosos cuando desarrollas, les cuento ademas que yo uso Visual Studio Team System SP1 sobre Windows Vista Business y no he tenido problemas con eso, una recomendacion si es que hagan que AutoCAD MAP funcione con permisos de administrador, asi cuando una excepcion es arrojada Vista no usara el control de excepciones propio del SO si no te mostrara la excepcion y podras saber que esta sucediendo...
Muy bien ahora la parte de la conexion de datos, como he mencionado en posts anteriores AutoCAD tiene la habilidad de hostear aplicaciones .NET, con esto uno puede hacer lo que desea en cuanto a programacion, pero claro el objetivo es usar las facilidades de AutoCAD, especialmente la concatenacion de datos geoespaciales y datos "normales" en la base de datos...
Me costo un poco de tiempo entender un poco la evolucion de este tema, AutoCAD MAP puede acceder de 2 formas a los datos espaciales de un modo nativo:

OSE: Esta es la primera forma de acceder a los datos, pero no los trata como ciudadanos de primera clase, es decir uno obtiene los datos, los modifica pero es dificil manipular datos "normales" asociados con estos...

FDO: Esta es una forma abierta de acceder a los datos, no solo en cualquier base de datos si no tambien en archivos SDF y servicios web geoespaciales (yo tampoco sabia que existian estos pero es cierto!!!), ademas de que es un proyecto Open Source, lo pueden encontrar aqui http://fdo.osgeo.org, con esto si se puede usar los datos graficos de un modo muy interesante, mas aun para mi si funciona con C#, en el caso de AutoCAD MAP 3D 2008 usa la version 3.2.1 que es uno de los ultimos releases, pero esto no lo libra de los bugs...

Para mi caso es claro que si deseo usar Oracle necesito tambien en la maquina cliente tener el famoso Oracle Client, yo les recomiendo la version 10.2.0.3 es la mas estable al momento y funciona en Windows Vista, las anteriores tienen problemas con Windows Vista...

He decidio usar FDO por muchas razones, la mas fuerte es que AutoCAD MAP 3D 2008 ofrece muchas facilidades para usarla como interfaz al usuario final y tambien al programador .NET, esto se refleja por ejemplo que para obtener los datos desde Oracle se pueden usar DataReaders, claro estos son especializados pero se los puede usar tal cual se usan DataReaders, ademas permite ver los datos adjuntos a los datos espaciales y modificarlos de un modo sencillo para un usuario comun, etc..., es un tanto dificil explicar en un solo post el uso de FDO por eso ire explicando por pasos como usarlo, desde la conexion, creacion de capas, actualizacion de objetos y datos, etc...

Bien con estas decisiones tomadas se puede decir que se puede inciar el trabajo, como les comentaba el problema mas grande que encontre yo es la falta de informacion sobre el tema, es por eso que ahora que ya he descubierto muchas de esas cosas he querido compartir esto para que no pasen lo que yo he pasado, y claro si tienen alguna pregunta con mucho gusto los ayudare, por lo pronto es todo por hoy!!!

Un ejemplo de ADO Entity Framework y LinQ

|

He estado un poco mas libre estos días así es que por esto he decidido poner mas cosas interesantes en mi blog, cuando me refiero a cosas interesantes me refiero a código útil, que en algún momento ya sea de ocio o desesperación, ha hecho que mi vida valga la pena!! Pues bien hay una revolución en nuestro mundo .NET que se está acercando a pasos agigantados como es el ADO Entity Framework, antes solo he escrito solo para anunciarlo o para comentar sobre el mismo, pues hoy les quiero mostrar como se puede usar el Entity Framework combinado con LinQ, es decir ustedes requieren o el Beta 2 de Visual Studio 2008 (Este es mi caso), o su RTM y el ultimo CTP del EF, es el de diciembre, en uno de mis anteriores post esta como descargarlo...


Muy bien!! Primero que es el EF?? El ADO Entity Framework permite que se cree una capa de persistencia automáticamente, cuando hablo de capa de persistencia me refiero a que se crean clases que manejan la interacción entre la Base de Datos y la solución, esta capa esta representada por clases que reflejan los elementos de la base de datos como las tablas, vistas, procedimientos almacenados, funciones, etc. a diferencia de otras soluciones existentes de este tipo (NHibernate y Hibernate para Java) esto es completamente VISUAL!!! A lo que nos tiene acostumbrado MS, es decir hago una conexion en Visual Studio 2008 en el Server Explorer, arrastro las tablas sobre mi modelo, especifico unos NameSpaces y voila!!! Capa de persistencia!! Y es realmente completa, uno ejecuta operaciones sobre las clases y esto se refleja automáticamente sobre la base de datos, además tiene cosas interesantes como el deferred execution, esto significa que la capa ejecuta las instrucciones solo cuando es realmente necesario, incluso se puede indicar que ciertos "campos" de la base de datos no sean obtenidos hasta que sean explícitamente utilizados, para que es útil esto?? Es bueno cuando almacenas archivos en campos binarios por ejemplo...


Como se lo hace?? Bien abren su Visual Studio 2008, se crean una librería de clases y la llaman como quieran, en mi caso TestLibCSharp, y le agregamos un archivo de tipo LinQToSql Classes como este:



Listo ahora desde el Server Explorer se debe arrastrar lo que uno desea incluir como objetos, si no tienen una conexión en el Server Explorer pues no es difícil crearla, al momento con mi versión y con el CTP de EF no es posible usar mas que SQL Server, pero al momento el resto de proveedores de datos como DataDirect ha anunciado que van a soportar también el EF por lo cual absolutamente todas las bases de datos comerciales que normalmente se usan podrán ser usadas también, bueno al arrastrar algunas tablas les debe quedar algo así:





Con eso ya se puede empezar a trabajar, pero antes revisen un poco las propiedades, si presionan F4 puede observar algunas cosas interesantes, como por ejemplo la conexión que usa, el NameSpace en donde puede ser referenciada, algo asi como lo de abajo:




Bueno como se imaginaran ahora lo que falta es usar la capa de persistencia, la verdad seria desaprovechar todo el potencial de .NET si no lo hago con LinQ, asi es que voy a incluir una clase dentro de la misma librería que hace uso del EF con LinQ y claro voy a explicar, de paso topo un par de nuevas características de C# 3.0:



Ahora vamos a seccionar el método LinQExample para indicar que se hizo:


En las líneas 14 y 15 se encuentra la creación de un nuevo DataContext, como recordaran mas arriba se veian propiedades como por ejemplo el NameSpace en el que se encuentra nuestro DataContext, en este caso BudgetClassesDataContext, en su constructor podemos especificar la cadena de conexión que deseamos usar, en mi caso la saco del archivo de configuración de la aplicación.


En las líneas 16, 17 y 18 se encuentra algo muy interesante, hace tiempo atrás en Visual Basic se podían usar tipos de datos Variant, es decir uno podía guardar cualquier cosa ahí, en C# el tipo var no es lo mismo, se la llama una variable de tipo implícito, es decir el tipo de esta variable es inferido basado en el tipo asignado con esto los programadores no están atados a declarar exactamente que tipo es hasta no instanciar la variable, de paso usamos LinQ, como ustedes saben LinQ es un lenguaje de consultas integrado a los lenguajes .NET el cual permite extraer datos en forma de objetos, no solo se puede actuar como en mi caso sobre el EF si no también sobre ciertos objetos, XML e incluso DataSets!! Es muy parecido al SQL, por no decir igualito, y básicamente se lo usa con un generador que es la clausula from, se la llama generador por que inicia la sentencia, en esta se especifica primero un objeto que representa a una entidad del conjunto sobre la cual se puede trabajar en el resto de la consulta, se le agrega un in para indicar de donde van a ser tomadas las entidades, en nuestro caso del DataContext instanciado y a su ves una clase que representa una tabla especifica de la base de datos, con esto ya especificamos el origen de los datos y un objeto sobre el cual podemos especificar condiciones en la siguiente clausula que es el where, como ustedes ven en la línea 17 el where especifica que de la entidad declarada en el from anterior se tome una propiedad de la misma y se cumpla con una condición, en palabras simples que se escoja las entidades que tengan en Active el valor de 1, para finalmente terminar con un select, en este podemos decir si se toma todas las propiedades de la entidad o solo algunas, en mi caso al poner solo el nombre de la entidad se traduce en un select *, esto retorna en este caso una lista de un tipo FiscalPeriod que es un tipo generado por el EF que representa una tabla y estas entidades cumplen con la condición de que el valor de la propiedad Active sea igual a 1.


Listo!! Pero esperen, si ejecutan esto o un ejemplo propio suyo paso a paso resulta que esto funciona muy rápido!! Es sospechoso verdad?? Pues esta correcto, LinQ ejecutara realmente la consulta la primera vez que se use el objeto resultante de la consulta, es decir en la línea 21, que ganamos?? Pues velocidad en el procesamiento y es oportuno además, claro que la línea 21 no es un buen ejemplo de cómo se debe programar en .NET pero es tan solo un ejemplo….


Espero que esta breve guía les sirva y puedan empezar a utilizar LinQ y el EF, realmente es algo muy prometedor y ayuda a reducir aun mas los tiempos de desarrollo, esperemos que tenga un buen futuro!!!

Web 2.0: Que mismo es?

|

Tengo que reconocerlo: No me agrada el termino!!! Definitivamente!!! Lamentablemente un monton de gente experta le da esa denominacion, para lo que a mi respecta, a un paso logico que es la evolucion y mejora de la experiencia del usuario en la Web, y para colmo de males mucha de la gente tecnica piensa que usar Ajax es suficiente!!! Realmente estoy en desacuerdo, es por eso que lo expreso aqui en mi blog!! Quieren una defincion que me agrado bastante??

Wikipedia: http://en.wikipedia.org/wiki/Web_2

Estoy en una especia de campaña de difusion del tema, es bastante ya con que los gobernantes de paises mantengan ignorantes a la gente para que no opine, no debemos dejar que algo similar suceda con el conocimiento en la Web!!!

El Gourmet .NET: Que es mas eficiente, un if, un ?: o un ??

|

Hace tiempo que no hacia una entrega del Goumet .NET, pues bien hace dias estaba preguntandome esto, es que mas eficiente? una instruccion if, el operador ?: o el operador ?? (Este operador lo he descubierto recientemente!!! Es tan grande C# que a uno se le pasan estas cosas...), bueno para probar esto hice el siguiente codigo:


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CSharpTestHost
{
public class clsTest
{
///
/// Prueba con instruccion If
///

/// pdtbData1: Parametro a ser evaluado
/// Devuelve: Un datatable instanciado
public DataTable IfTest(DataTable pdtbData1)
{
DataTable dtbResult;
if (pdtbData1 != null)
{
dtbResult = pdtbData1;
}
else
{
dtbResult = new DataTable();
}
return dtbResult;
}

///
/// Prueba con operador ?:
///

/// pdtbData1:Parametro a ser evaluado
/// Devuelve: Un datatable instanciado

public DataTable InLineIfTest(DataTable pdtbData1)
{
return (pdtbData1 != null) ? pdtbData1 : new DataTable();
}

///
/// Prueba con operador ??
///

/// pdtbData1: Parametro a ser evaluado
/// Devuelve: Un datatable instanciado

public DataTable InLineIfTest2(DataTable pdtbData1)
{
return pdtbData1 ?? new DataTable();
}
}
}

Despues de esto si ustedes revisan los 3 metodos de esa clase cumplen exactamente la misma funcion, es decir evaluan si el objeto parametro, en este caso un DataTable, es diferente de null y devuelven un nuevo objeto de ser esto cierto, debemos recordar que el hecho de usar menos codigo no necesariamente quiere decir que es mas eficiente, como ustedes saben cuando uno usa C# la implementacion de operadores es posible y detras de esos tambien se puede poner bastante codigo!!
Con esta duda en mente, se me ocurrio utilizar ildasm (para quienes no la conocen a esta herramienta lo que hace es desemsablar el codigo de tu assembly .net y te lo muestra en MSIL, que es muy parecido al assembler y la verdad es bastante facil de leer) y compare los 3 metodos, con la referencia de que MSIL es casi assembler es un punto perfecto para comparar los 3 metodos, aqui estan los resultados:

Metodo con If:


.method public hidebysig instance class [System.Data]System.Data.DataTable
IfTest(class [System.Data]System.Data.DataTable pdtbData1) cil managed
{
// Code size 29 (0x1d)
.maxstack 2
.locals init ([0] class [System.Data]System.Data.DataTable dtbResult,
[1] class [System.Data]System.Data.DataTable CS$1$0000,
[2] bool CS$4$0001)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldnull
IL_0003: ceq
IL_0005: stloc.2
IL_0006: ldloc.2
IL_0007: brtrue.s IL_000f
IL_0009: nop
IL_000a: ldarg.1
IL_000b: stloc.0
IL_000c: nop
IL_000d: br.s IL_0017
IL_000f: nop
IL_0010: newobj instance void [System.Data]System.Data.DataTable::.ctor()
IL_0015: stloc.0
IL_0016: nop
IL_0017: ldloc.0
IL_0018: stloc.1
IL_0019: br.s IL_001b
IL_001b: ldloc.1
IL_001c: ret
} // end of method clsTest::IfTest

Metodo con In Line If u operador ?:


.method public hidebysig instance class [System.Data]System.Data.DataTable
InLineIfTest(class [System.Data]System.Data.DataTable pdtbData1) cil managed
{
// Code size 17 (0x11)
.maxstack 2
.locals init ([0] class [System.Data]System.Data.DataTable CS$1$0000)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: brtrue.s IL_000b
IL_0004: newobj instance void [System.Data]System.Data.DataTable::.ctor()
IL_0009: br.s IL_000c
IL_000b: ldarg.1
IL_000c: stloc.0
IL_000d: br.s IL_000f
IL_000f: ldloc.0
IL_0010: ret
} // end of method clsTest::InLineIfTest

Metodo con operador ??:


.method public hidebysig instance class [System.Data]System.Data.DataTable
InLineIfTest2(class [System.Data]System.Data.DataTable pdtbData1) cil managed
{
// Code size 16 (0x10)
.maxstack 2
.locals init ([0] class [System.Data]System.Data.DataTable CS$1$0000)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: dup
IL_0003: brtrue.s IL_000b
IL_0005: pop
IL_0006: newobj instance void [System.Data]System.Data.DataTable::.ctor()
IL_000b: stloc.0
IL_000c: br.s IL_000e
IL_000e: ldloc.0
IL_000f: ret
} // end of method clsTest::InLineIfTest2

Ganador: Definitivamente el operador ?? es el ganador, por 1 byte!!

Ahora claro esta comparacion esta basada en la comprobacion de si un objeto esta vacio (es decir tiene una referencia a null) y que devolver, no siempre es practico el operador ??, por ejemplo en objetos que tienen solo valores (tipos primitivos como int, double, etc...) no es aplicable, a menos claro que uses nullable types, y en otros casos en los que tienes que ejecutar varias operaciones definitivamente el tradicional if sera el llamado a ejecutar las operaciones!!!

Espero que esto les ayude en sus decisiones sobre como escribir codigo, a veces 1 milisegundo menos de ejecucion ayuda a todo el perfomance de la aplicacion!!!

ADO Entity Framework Beta 3!!

|

Hace tiempo comentaba yo acerca de este Framework que permitira crear las famosas capas de persistencia con solo tener el modelo fisico de tu base de datos lista!! Si asi es, este mapea las tablas, vistas, stored procedures y demas a entidades en forma de clases, tambien claro hace el trabajito de poner el codigo y generar las sentencias sql necesarias para que estos datos esten siempre sincronizados!!!
La novedad es que se ha anunciado que oficialmente se dara soporte no solo a sql server si no a otros proveedores de datos!!
Para quienes ha utilizado Hibernate u otra solucion de este tipo van a ver que es tan sencillo usar el EF que el tiempo de desarrollo se vera cortado por la mitad!!!

Hay de todas maneras algunas dudas que tengo, por ejemplo con SQL Server estoy seguro que la generacion del SQL sera muy buena y funcionara muy bien, pero en otras bases de datos como por ejemplo Oracle que es muy sensible a como esta generada la sentencia se tendra en cuenta este tipo de cosas?? Espero que si!!!

Quieren saber un poco mas??
Revisen esto:
http://visualstudiomagazine.com/news/article.aspx?editorialsid=9323

Que pasa cuando mi Task Pane se pone en blanco??

|

Hace unas semanas en una de mis instalaciones de Smart Documents me tope con algo interesante, resulta que habia instalado normalmente un SmartDoc de Excel sobre un Office 2007 en Windows XP, todo fue normal, unos dias despues resulta que al iniciar el documento el panel de tareas de las acciones de documentos estaba en blanco, hagas lo que hagas, no sirvio reinstalar Office (es lo primero que se me ocurrio), buscar programas recientemente instalados, cambiar de usuarios, revisar permisos de ejecucion, nada!!! Entoces comence a buscar por los foros y encontre un problema con Office 2003, pero leyendo un poco mas resulta que no era problema con Office si no con IE, al parecer un parque de seguridad pone en lista negra el id del control ActiveX del task pane y simplemente no ejecuta nada!! Como uno puede imaginarse algo asi??
Bien aqui esta el link de donde encontre la solucion:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2278405&SiteID=1

Y la solucion es quitar esta clave del registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{5f61f809-422a-4152-91f5-9ec1b935efd7}

Busquenla, si la encuentran no lo duden, quitenla intenten de nuevo y funciona como magia!!!

ParallelFX: Codigo Manejado en paralelo de verdad!!

|

Escucharon de ParalleFX?? Si no esta es una extension al Framework 3.5 que permite utilizar de verdad y facilmente la capacidad multicore o multiprocesador de tu sistema, y claro como siempre en .NET esta se puede usar muy facil y en cualquier lenguaje como C# o VB, quieren saber mas?? Aqui esta un link a un articulo muy interesante:

http://msdn.microsoft.com/msdnmag/issues/07/10/Futures/default.aspx

Y si quieren bajarlas vayan al sitio de ParallexFX (Parallel Computing Develper Center):

http://msdn2.microsoft.com/en-us/concurrency/default.aspx

Espero que esto marque de verdad una diferencia!!!

Visual Studio Team System 2008 Liberado!!!


si bien aun no hay versiones para el publico ya se puede encontrar para quienes tienen subscripciones MSDN, este tan esperado release, desde hace 2 años, tiene entre sus nuevas caracteristicas en las diferentes ediciones estan las siguientes:

Development Edition
Code Analysis Checkin Policy
Code Metrics
JavaScript debugging
Performance run comparison
Hot pathing
Code Analysis Rules
Rules Management
Analyze menuSpelling rules
Database Edition
Integrate TeamData v1 into Team Suite
Test Edition
Auto cleanup of results
Control Load Modeling
New default views
Devices Unit testing
Test performance improvements
Inherited test classes
Load test and profiler integration
Web test correlation
Right-click test execution
Test generation from a compiled assembly
Webtest recorder support for AJAX and popups
Webtest playback improvements
Architecture Edition
Architectural RolesConform to WSDL
Top-down system design
Web application projects
Team Foundation Server
SharePoint 3.0 / 2007 supportImproved deployment experience
Better offline supportContinuous integrationBuild queuing & scheduled buildsDrop ManagementAnnotate
Folder Diff
Get latest on checkout
Performance and scale improvements (Work Item Tracking / Version Control)
Destroy files
Improved source control merging
Workspace mapping improvements
Team System Web Access (power tool)

La verdad tiene tantas cosas que mejoran mucho la herramienta!! Cada ves se pone mas bueno!!!

.NET Framework 3.5 Liberado!!!

|

Listos?? Desde hoy en la madrugada esta liberado al publico el .NET Framework 3.5, quieren bajarlo??

http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en

Espero lo aprovechen!!!

VSTO Client Troubleshooter

|

Saben tengo algun tiempo desarrollando aplicaciones con Office, especialmente SmartDocs, la verdad hoy por hoy es tan facil desarrollarlas!!!

Hace tiempo los mensajes de error decian algo asi: "Ha ocurrido un error. Contacte con su administrador o la persona que desarrollo el paquete".... Pero si yo soy el que desarrollo el paquete!!

Bueno ademas de ya usar las facilidades como los controles de windows forms (antes no podias aunque no lo crean), usar Windows Installer de forma precisa (si tampoco podias), o incluso ClickOnce(antea habia no touch deployment y si funcionaba, a veces!!) me encontre una herramienta genial, el VSTO Client Troubleshooter!! Este te ayuda revisando que las dependencias de componentes y parches esten cumplidas y lo hace de una manera amigalbe y facil, lo quieren probar?? Vayan a este link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=C9FB6A54-8069-4918-A6F9-E744928DFAC3&displaylang=en

Espero les ayude mucho!!!

Model Driven Development con MS, al FIN!!!!

|

Hace bastante tiempo se viene librando una guerra no ten visible entre los gigantes del Software IBM y MS en el tema desarrollo, esta guerra al momento tenia un claro dominio por parte de IBM con sus productos Rational, que se basan en los estandares de OMG, y claro MS al parecer no tenia nada parecido, claro is ustedes revisan, incluso mis post anteriores, resulta que estaban preparandose para el tema de un modo interesante, ahora lo llaman "Oslo"!!

En esta iniciativa participan Biztalk Server R6, Biztalk Services R1, .NET 4.0, Visual Studio 10 y aun estan por develarse otros detalles...

Con esto se pretende que el modelado sea la principal actividad dentro del desarrollo, ademas de que los desarrolladores no tengan que aprender nuevos lenguajes si no que usen lo que ya saben y tambien tener la facilidad de poder crear aplicaciones compuestas de una manera muy sencilla: Drag and Drop!!!

Pues esperemos que esto se vaya cumpliendo, es un objetivo bastante ambicioso y las promesas de este tipo ya tuvieron antes su implementacion, quien no recuerda las herramientas CASE??

Ademas actualmente IBM, aunque lleva ventaja, no es exactamente una implementacion exitosa de MDD, hay algunas barreras como el mismo UML que la verdad no es tan bueno para representar partes del negocio, etc...

MS tiene en ese punto una clara ventaja que es DSL, en los cuales uno puede crear su propio lenguaje y sortear este tipo de cosas, ademas con WWF y Biztalk Server el desarrollo de codigo se puede cortar hasta en un 80%, y claro ya de hecho el desarrollo .NET es mas rapido que el Java, y se lo puede hacer un 80% mas rapido!!!
Hay gente que aun piensa que .NET no es para aplicaciones empresariales, pero cuando les comento que se usa en bancos, petroleras, bolsas de valores, hay casos de exito de todo y por todos lados, pues ya piensan 2 veces...
Wow, si esto sigue asi realmente deberian pensarlo 2 veces en realizar un proyecto con herramientas que usan Java, por que claro les toma mas tiempo realizarlo y depende las herramientas tendran su costo, si usan herramientas IBM pues deben tener bastante dinero y si usan Eclipse u otro IDE y servidores de aplicaciones como JBOSS u otros pues piensen bien si no les cuesta (bajar la herramienta, tiempo de aprendizaje, tiempo de customizacion, etc...)

Espero que todo esto se vaya conviertiendo en una realidad, MS planea lanzar betas en el 2008, y no espera tener nada de releases antes del 2009, mas detalles de la noticia aqui:

http://www.sdtimes.com/article/LatestNews-20071015-24.html

Best Practices Analyzer


Sabian ustedes que existen una serie de herramientas para analizar si estamos usando las mejores practicas en los productos MS?? Pues si no lo sabian hoy por hoy existen estas herramientas para Windows 2003 SBS, Exchange Server, ISA Server, Biztalk Server, SQL Server, ASP .NET, etc...

Quieren encontrarlas???

vayan a
http://download.microsoft.com y en su busqueda incluyan las palabras "Best Practices Analyzer" y se encontraran con algunas sorpresas!!!

AutoCAD y sus versiones

|

No he posteado mucho ultimamente pero aqui esta lo prometido:
AutoCAD: La clasica herramienta de dibujo arquitectonico, esta puede ser expandida a el dibujo tecnico mecanico, automotriz, etc., tiene millones de prestaciones!!

AutoCAD Civil 3D: Este un una derivacion del AutoCAD mas especializada para la parte de Ingenieria Civil, claro el 3D le da una gran ventaja por que todo lo que dibuje lo puede ver en 3D!!!

AutoCAD MAP 3D: Es otra derivacion que en cambio es especializadad para temas de informacion geografica y topologica, este es con el que yo me tope!!!

De lo que se desde la version 2004 AutoCAD nos abre los brasos a los programadores .NET, uno puede hacer Host de las aplicaciones que uno desarrolla en AutoCAD tal cual uno las escribe, claro con la diferencia de que se tienen que derivar ciertas clases de tipos especificos, registrarlas en AutoCAD para que inicien solas o cargarlas...

Claro es logico tambien que se nos provea con Assemblies para acceder a las funcionalidades de AutoCAD, y ademas tambien lo podemos usar como objetoc COM especialmente para temas de interfases menus y ese tipo de cosas...

En los siguientes Posts pondre el procedimiento y el codigo para usar el famoso AutoCAD con .NET!!!

Silverlight al fin!!!

|

Desde hoy esta disponible Silverlight 1.0 en su version final, MS decidio al fin liberarlo, pero lgo que no esta disponible es el mini CLR que va dentro, este va a estar incluido en su version 1.1, tendremos que esperar un poco, pero tambien se anuncio que MS si esta colaborando con Novel para la version para Linux Moonlight a pesar de que no es un producto de MS...

Mis aventuras con AutoCAD MAP 3D 2008 y .NET 2.0

|

En estos meses he estado desarrollando un proyecto para uno de nuestros clientes, y por esas cosas de la vida he incursionado en el mundo GIS, ahora tengo muy claro todo el panorama pero al principio no tenia ni por donde irme!! Fue realmente dificil salir del apuro, por cuanto tenia que poner a funcionar AutoCAD MAP 3d 2008 e integrar datos graficos y de otros tipos en una sola interfaz, afortunadamente este paquete CAD soporta que ejecutes codigo .NET en su ambiente, claro sujetandose a ciertos wrappers que te provee el mismo vendedor, y no puedes bajarlos vienen con el paquete, y a cierta interoperabilidad COM....
Primero que nada quiero referenciarlos a otro blog que me salvo la vida: Through the Interface, http://through-the-interface.typepad.com/ este pertenece a un miebro de AutoDesk y claro tiene acceso de primera mano a todo lo relacionado con el CAD y de paso es un muy buen conocedor del .NET lo cual ayuda mucho...

Tambien he decidido hacer varios post sobre el tema tratando de seccionar los temas en un orden adecuado para explicar las relaciones y conceptos de Acad MAP con .NET 2.0, esto es para no asimilar mucha informacion de golpe!!

Los temas que tratare van a dividirse asi:

AutoCAD sus versiones y su relacion con .NET
AutoCAD MAP 3d 2008 y sus caracteristicas .NET
GIS con AutoCAD MAP 3d 2008 y .NET usando Oracle Spatial

Espero que estos siguientes posts les sirvan!!!

SDK para OpenXML

|

Hace unos meses tuve el gusto de ir a Bogota a recibir un entrenamiento sobre OpenXML, fue realmente interesante pero en ese momento me asalto una gran duda, como hago para que la construccion del documentos basados en OpenXML sea facil para un programador?? Claro como ustedes saben OpenXML se basa en un paquete Zip que contiene archivos XML para describir todo lo que contiene el documento, pero claro generar esto solo con las funciones XML de .NET era algo bastante duro, pero mis plegarias fueron atendidas!!
Se ha generado ya un SDK que esta en CTP para poder construir documentos basados en OpenXML con un modelo de objetos fuerte, lo cual quiere decir que no tenemos que conocer todos los tags y estructuras de la espcificacion y menos aun construir a mano los archivos XML!!!
Es cierta tanta maravilla?? Compruebenlo ustedes mismo!!

http://blogs.msdn.com/erikaehrli/archive/2007/06/04/announcing-the-new-open-xml-object-model.aspx

Traductor OpenXML a ODF

|

Conocen de los formatos OpenXML y ODF?? Pues OpenXML es el formato que usa Office 2007 para almacenar sus documentos, este es de especificacion abierta y es muy sencillo de usar, ODF es similar pero es una iniciativa de la comunidad Open Source, no hay que negar que hay una batalla por la aceptacion de estos 2 formatos, MS claro esta facilitando la adopcion de estos con iniciativas como el Traducto de OpenXML a ODF, este lo puedes encontrar aqui:

http://sourceforge.net/projects/odf-converter

Tambien es un proyecto Open Source y ya tiene un buen avance, pruebalo!!!

El CTP de Visual Studio Team System "Rosario" ha sido liberado!!

|

Este release apunta a mejorar el manejo del ciclo de vida del desarrollo de las aplicaciones incluyéndole muchos features en cuanto al manejo de WorkItems, manejo de requerimientos y mejora en las pruebas y manejo de dependencias, esto agregado a Orcas mejora increíblemente la predictibilidad de un proyecto en todos los aspectos sin dejar de brindar una espectacular visibilidad a quienes manejan el proyecto...

Un whitepaper con detalles mas completos puede ser encontrado aquí:
http://www.microsoft.com/downloads/details.aspx?familyid=0ADE6C5D-BE17-4168-B57B-4C2FA36EAD3E&displaylang=en

Y el VPC bajalo aqui:

http://www.microsoft.com/downloads/details.aspx?FamilyId=8450EFF5-24AD-44C3-AB91-1ED88EF2F4F0&displaylang=en

Llamar a un Servicio Web en forma Asincronica

|

Es muy común en nuestros días que se cuide mucho de la apariencia de las aplicaciones, una de las técnicas muy amplia mente empleadas para esto es la llamada asincrónica a los procesos, esto claro le da al usuario la comodidad de que su interface no se bloquee y claro de una buena impresión, también un efecto importante es que el usuario siente la aplicación que funciona mas rápido, aunque esto no sea verdad!!!

Siendo esto así, se han hecho muchos artículos de como usar esta técnica, en algunos de los casos he notado que los hacen de una forma bastante compleja para los principiantes (delegados, métodos anónimos, etc...) entonces decidí mostrar como ejecuto yo esta técnica consumiendo un Servicio Web desde una forma Windows, para lo cual escribí este código:

//Instancia del Servicio Web Referenciado
//Este tambien puede ser agregado como un componente desde el diseño de la forma
MDMQ_BC.Service objService = new Service();

private void Load()
{
//Este metodo debe ser ejeutado una sola ves en la vida de la forma, puede ser en el Constructor
//Event Handler necesario para ejecutar acciones cuando llegue la respuesta
objService.ConsultaNombresCompleted += new ConsultaNombresCompletedEventHandler(objService_ConsultaNombresCompleted);
}

void objService_ConsultaNombresCompleted(object sender, ConsultaNombresCompletedEventArgs e)
{
//Preguntamos si la consulta fue bien
if (e.Error == null)
{
//Si la consulta se ejecuto sin problemas revisamos el resultado de la misma
if (e.Result.Codigo_error == "0")
{
//Si el resultado del proceso es correcto mostramos los datos
MessageBox.Show("Los datos estan correctos");
}
else
{
//Si el resultado del proceso no es correcto mostramos la razón
MessageBox.Show(e.Result.Codigo_error + ": " + e.Result.Texto_error);
}

}
else
{
//Se muestra el error, en una aplicación consistente se debe tambien guradar los detalles del error
//con una estrategia de Loggin correcta (EventLog, Archivos, Mails, etc...)
MessageBox.Show("Ha ocurrido un error realizando la consulta. " + e.Error.Message);
}

}

private void CallAsync()
{
//Lamada al metodo asincronico, este se ejecuta y el Event Handler maneja la respuesta cuando llegue
objService.ConsultaNombresAsync("LOMAS");
}

Aqui unas aclaraciones:
MDMQ_BC es un NameSpace que contiene los objetos que se crean cuando se hace referencia a mi servicio Web de Pruebas, este contiene el Objeto Service que es el proxy que hace las llamadas al Servicio, así mismo tiene métodos que ejecutan las operaciones que posee el Servicio, tanto de modo sincrónico como asincrónico, estos están claramente diferenciados pues el método asincrónico tiene un sufijo "Async"...

Si bien la respuesta va a ser manejada por un método es importante mostrarle al usuario que se esta ejecutando la operación como también que se ha completado, para esto se puede tener un PictureBox con un gif animado que mientras la operación se ejecuta esta visible y cuando esta termina se vuelve invisible al Picturebox, también sería conveniente bloquear controles que ejecuten otras operaciones...

También hay que tomar en cuenta que siempre se deben tener estrategias claras de manejo de excepciones y loging, así la operación de tu aplicación sera consistente y tendrás datos completos y detallados de que sucedió, en este caso del ejemplo hay una estrategia simple que solo muestra el error pero te hace acuerdo que hace falta mas trabajo sobre el tema...

Algo importante que debo mencionar que si se fijan bien no van a encontrar ni una sola estructura try - catch, eso es importante para el performance de la aplicación, en lo posible no se deben usar estos bloques por que aunque no se note siempre degradan el funcionamiento del código, y su finalidad es encontrar EXCEPCIONES no controlar el flujo normal de una aplicación...

Espero que les sirva este codigo y si desean comentar, adelante!!

El nuevo Coldfusion 8 soporta .NET!!!

|

Este servidor de aplicaciones web dinamicas de 12 años de edad en su nuevo release ha incorporado la capacidad de llamar objetos .NET nativamente, antes solo se podía hacer esto con objetos Java, muchos productos de otras compañías han tomado este rumbo hace bastante tiempo, por que tardo tanto Adobe???

El articulo completo aquí:

http://www.ftponline.com/channels/net/2007_07/jwaters/

Visual Studio Beta 2 ha sido liberado!!!

|

La semana pasada se esperaba que sea liberado Visual Studio 2008 Beta 2, Orcas, a diferencia del Beta 1, que contiene updates como LinQ, VSTO para Office 2007, Ajax, etc... Este tiene incluido ya Silverlight y unos updates al Framework 3.5, la entrega final se propone que sea en Febrero del 2008, junto con SQL Server 2008 y Windows Server 2008, pero hay rumores de que estará listo antes!!! Si es así WOW!!!

Quieren bajarlo??? Aquí esta el link!!!

http://msdn2.microsoft.com/en-ca/vstudio/aa700831.aspx

Quieres usar JSON con tus servicios Web??

|

Con la aparicion de Ajax se cambiaron algunos paradigmas y claro se crearon otros, por ejemplo el intercambio de mensajes entre los servidores y clientes es bastante pesado especialmente cuando tienes un viewstate muy grande, y asi por esas cosas de la vida nace JSON (Java Script Object Notation), por default tus servicios web .net no los aceptan, pero aqui esta un articulo que te permite hacer que funcione!!!

http://www.ftponline.com/channels/net/2007_07/dwahlin3/

Data Access Layer con LinQ a SQL

|

Desde hace algun tiempo se viene dando el fenomeno del paso de los objetos planos a capas de acceso a datos mucho mas estructuradas las cuales ahorran tiempo y esconden la logica por detras de acceso a la base de datos, esto ya era posible con NHibernate, ahora con el anuncion de VS 2008 y el Framework 3.5 se ha incluido LinQ, aqui hay un articulo que muestra como se construye una DAL con LinQ a SQL de un modo rapido y sencillo...

http://www.ftponline.com/vsm/2007_07/magazine/features/rjennings/

Visual Studio 2008: Metricas en tu codigo!!!

|

Asi como leen!!! Con Visual Studio 2008, a parte de todas las maravillosas cosas como LinQ, C# 3.0, VB 10 y demas van a incluir un analizador que da las metricas del codigo que has escrito!!!

No me creen??? Visiten este link:

http://www.ftponline.com/channels/net/2007_07/jlevinson/

Todo sobre WCF!!!

|

Te has preguntado como usar el Famoso WCF?? Pues en este articulo te muestra todas las posibilidades de como y cuando usar WCF, es realmente ilustrativo!!!

http://msdn2.microsoft.com/en-us/library/bb332338.aspx

Acropolis: Construir aplicaciones mas rapido y realmente orientadas al cliente!!!

|

Acropolis es un set de herramientas que pretenden que se contruyan mas rapido aplicaciones modulares orientadas al negocio y al cliente!!
Esta herramienta se basa en componentes del .NET Framework 3.0 como WPF y WCF para usar servicios de un modo desacoplado, quieres probalo??

Bajalo de aqui!!

http://www.microsoft.com/downloads/details.aspx?familyid=72386ce5-f206-4d5c-ab09-413b5f31f935&displaylang=en&tm

Microsoft dice que el movimiento OpenSource infringe mas de 235 patentes!!!

|

Asi es MS alega por medio de Brad Smith que el kernel de Linux infringe 42 de sus patentes y que en itnerfase y diseño infringe unas 65 mas. Ademas la suite de productividad de OpenOffice.org infringe otras 45 patentes. Adicionalmente otras 83 patentes de Microsoft son infringidas por varios otros programas open source...

Estoy de acuerdo con que el conocimiento debe ser de todos, pero nadie trabaja gratis!!
Si hay una patente que cubre algo no se deberia infringirla por cualquiera sea el motivo!!!

10 Tips de Seguridad que todo Desarrollador debe saber!!

|

Todo desarrollador deberia saber y tomar en cuenta los 10 siguientes temas de seguridad:

1. Confia en lo que el usuario ingresa solo bajo tu propio riesgo!!!
2. Protegete contra el Buffer Overrun
3. Cuida el Cross-site Scripting
4. Evita que se puedan hacer SQL Inyections
5. Usa los algoritmos de Encritacion Standart
6. Reduce tu superficie de ataque
7. Usa el principio del menor privilegio
8. Usa un manejo de errores apropiado
9. La impersonacion es fragil
10. Escribir aplicaciones que no requieran de privilegios administrativos

Mas detalles de cada una?? Vean este articulo:

http://msdn.microsoft.com//msdnmag/issues/02/09/securitytips/default.aspx

Desarrollo de aplicaciones mobiles!!

|

Por lo general en nuestro medio (Quito, Ecuador) no se escucha mucho del asunto de desarrollo de aplicaciones mobiles, pues bien encontre un mini articulo en el cual se indica que es lo que se necesita en cuanto a software y paso a paso como se debe realizar una aplicacion....

Entren a este link:
http://www.ftponline.com/channels/net/2007_05/dfergus/

Windows Vista Beta 2, RC 1 y 2 por expirar

|

Nada es para siempre y asi mismo las versiones Beta 2, RC 1 y RC 2 de Windows Vista expiraran este 31 de mayo, por lo cual MS recomienda claro que se migren de versiones para evitar cualquier problema como perdida de datos, interrupciones en el trabajo, etc...

Enterprise Library 3.0

|

Como ustedes saben MS Patterns and Practices ha hecho un trabajo muy extenso al recopilar las mejores practicas de desarrollo .NET, claro uno de esos esfuerzos se llama la Enterprise Library, esta se compone de bloques de aplicaciones que permiten agregar cache a tu aplicacion, usar tecnicas de criptografia de una manera sencialla, accesar a los datos consistentemente y con las mejores practicas, manejar las excepciones de un modo seguro y eficiente por medio de las capaz de la apicacion, etc...
Esta esta ya en su version 3.0 que fue liberada el mes pasado...
Desean probarla y obtener informacion y entrenamiento sobre esta??

Vayan a este link:
http://msdn2.microsoft.com/en-us/library/aa480453.aspx

Un Java SDK para Team Foundation Server

|

Teamprise ha anunciado la disponibilidad de un SDK para que quien desarrolla en Java pueda usar TFS!!

En ese caso pueden usa estas APIS para incorporar en sus IDEs, persoanlizar aplicaciones, etc...

Visitenlo:

http://www.teamprise.com/news/2007/05/teamprise_announces_java_sdk_f.html

Se anuncia SQL Server "Katmai"!!!

|

Esto se publico en SD Times:

"The next generation of Microsoft SQL Server, code-named Katmai, is slated for release next year. Microsoft corporate vice president Ted Kummert will divulge selected details about Katmai during his keynote address at the Business Intelligence conference today.
Preliminary product literature reveals that Katmai will be more deeply integrated with Microsoft Office 2007 system front-end tools. Katmai's reporting capabilities will be more robust, supporting any report size or complexity.
Additionally, it will manage and accept nonrelational data types, including documents, geographic information and XML. Katmai adds new data warehousing capabilities, enables applications to interact with local stores, and can synchronize data from devices to the central data store.
What's more, Katmai supports the next-generation ADO.NET data access framework to define business entities and has LINQ support.
Katmai has shifted SQL Server from scripts to a rules-based management framework, and the contents of entire databases may be encrypted. A resource governor defines individual resource limits and can prioritize workloads.
Private beta testing could begin as early as June, according to an Austrian TechNet blog post published in April. "

PackageThis!!! Llevate el Contenido de MSDN que quieras!!

|

Recientemente se ha liberado una herramienta con la cual se pueden crear archivo HxS o chm extrayendo el contenido que se seleccione desde MSDN y ademas es multilenguaje!!
Es decir si quieres construir tu libreria de ayuda a medida basada en MSDN con esta herramienta lo puedes hacer!!

Quieres probarla?? Aqui esta el link:

http://www.codeplex.com/packagethis

CLR multiplataforma!!!

|

A proposito de que silverlight ha sido liberado en version Beta, y un 1.1 Alpha en el cual se puede usar todo el CLR, resulta que para hcer esto se tiene que incluir una porcion del mismo para que pueda funcionar en otros ambientes como Mac!!
Bueno que quiere decir esto: Por lo pronto cuando uses Silverlight 1.1 sobre Mac puedes usar C#, VB, Python .NET, etc... pero claro aun no puedes usar las librerias del Framework ni crear aplicaciones de escritorio .NET que funcionen en Mac, por lo pronto....
La version probada al momento es Mac OS X!!!

SilverLight: El reemplazo de Flash??

|

MS ha dado a conocer la primera Beta oficial de Silverlight, antes conocido como WPF/E (Windows Presentation Foundation Everywhere), esto permite que Windows Presentation Foundation sea multiplataforma, por medio claro de un plugin en tu navegador, este plugin puede ser usado tanto en IE como en Firefox y claro esto significa que puede ser usado tambien en Mac, posiblemente despues entraran otros sistemas operativos, tambien se prevee que se pueda usar en Safari y Opera!!
Ademas puedes usar ademas de JScript tambien todos los lenguajes del CLR es decir C# y VB!!

Ademas hay algo interesante, ya hay un traductor de SWF (Adobe Flash) a XAML lo cual facilita mucho la migracion!! Tambien para AI (Adobe Illustrator) a XAML!!!

Aqui estan los links:
http://www.mikeswanson.com/swf2xaml/
http://www.mikeswanson.com/xamlexport/

Una nueva forma de Autenticacion: Windows CardSpace

|

Sabian que esta nueva tecnologia realmente es muy segura y ademas muy comada para los usuarios?? Si .NET Framework 3.0 incorpora esta nueva forma de autenticacion para que nosotros como desarrolladores y nuestros usuarios tengan una mejor experiencia!!!
Miren este articulo y pruebenlo!! Es realmente facil!!

http://msdn.microsoft.com/msdnmag/issues/07/04/identity/default.aspx

WorkFlow Foundation con Sharepoint 2007

|

Personalmente desde que vi lo que es capaz de hacer un sharepoint 2007 me he quedado sorprendido, esta tan integrado con casi todas las tecnologias MS de desarrollo y IT, que la verdad hay muy pocas cosas que programar :P!!
Asi es que decidi claro informarme mucho mas del asunto y encontre este articulo en el cual se muestra mas de Sharepoint 2007 y su integracion con Windows Workflow Foundation, revisenlo es realmente interesante!!!

http://msdn2.microsoft.com/en-us/library/aa830816.aspx

Por que no se usa Team System??

|

Esta tarde me comentaron de un post de Edgar Sanchez, que esta aqui http://ecuador.latindevelopers.net/blogs/edgarsanchez/archive/2007/03/28/por-qu-la-gente-no-usa-team-system-parte-1-de.aspx, lo lei y me parecio muy interesante y me moleste tambien, lean el articulo completo y los comentarios por favor!!! Apoyen con sus comentarios tambien!!!

Update: Es importante por que topa, sin querer, un tema de la estructura de la educacion del Ecuador!! Por eso es importante y tambien que apoyen con sus comentarios, asi se tiene una perspectima mas amplia del tema!!!

Windows Vista: Sera??

|

Bueno aqui en Latinoamerica no hemos tenido el Boom!! de Windows Vista por lo pronto pero claro los gringos si, muchos analistas claro han indicado que mas de un 50% de la gente no piensa cambiarse hasta que exista un Service Pack para el sistema operativo...
Siempre un cambio es duro, Vista ha puesto muchas nuevas caracteristicas y claro muchas de ellas ya han sido explotadas creativamente por muchos Hackers, siempre pasa, y claro que tire la primera priedra quien este libre de bugs!!!
Lo unico que realmente no me ha gustado es que es tan pero tan poderoso, que posiblemente tu hardware no aguante!! Claro en gringolandia esto no es un problema, pero si para nostros latinoamericanos que no podemos cambiar tan facil de compu...
Esperemos que como con XP en un tiempo Vista sea el preferido en los escritorios del mundo, no solo por su Aero si no por ser un robusto sistema operativo, despues de todo cuando Linux incorpore capacidades de reconocimiento de voz, interfases graficas a nivel Mac y otras cosas, claro si se ponen de acuerdo todos los que fabrican linux, estaremos en un nuevo sistema operativo que posiblemente sea muy inteligente!!!

MSBuild y WIX

|

Que acronimos!!!
Bueno al buen MSBuild creo que todos los conocemos, es nuestro agente constructor de Team System y WIX??
Windows Installer XML es una caracteristica de Windows Installer que te permite a punta de archivos XML generar ciertas acciones como por ejemplo despues de terminar de generar un Release MSBuild de una ves instalar en los clientes!!!

Genial idea verdad?? Como??

Vayan a este link:

http://msdn.microsoft.com/msdnmag/issues/07/03/wixtricks/default.aspx

Centro para Desarrolladores Principiantes

|

Microsoft como una buena inciativa ha lanzado un Centro para Desarrolladores principiantes!!
Aqui puedes encontrar lecciones sobre programacion incluso si no tienes experiencia alguna!!
Aqui claro ellos te guian y proveen de sus versiones Express de Visual Studio de acuerdo claro a lo que te orientes!!!

No dejen de probarlo y recomendarlo!!!

http://msdn.microsoft.com/vstudio/express/beginner/

IIS 7 al Aire!!!

|

Saludos!!!
En estos dias fue liberada la version final de IIS 7, quien tiene ya Windows Vista en cualquiera de sus ediciones pues ya lo tiene, la falta algo de funcionalidad pero nada grave y cuando salga el primer Service Pack de Vista, que al parecer no sera en un dia muy lejano como van las cosas, obtendra IIS 7 completo, claro tambien en Windows Longhorn sera una base fundamental, IIS 6 ya era una verdarea maquina en todo aspecto, sabian que solo salio 1 parche para IIS 6?? y la falla que cubria no podia ser explotada remotamente!!! Esto si que me da confianza!!
Si quieren mas detalles puede ir a http://www.iis.net o el articulo de overview en http://msdn.microsoft.com/msdnmag/issues/07/03/iis7/default.aspx?loc=es

Espero que lo prueben pronto por que de verda esta muy bueno!!!

Windows Communication Foundation: No mas productos Next, Next, Next...

|

He estado desarrollando un proyecto desde el año pasado, tome la desicion de usar WCF (Windows Communication Foundation) basado en la facilidad con la que Edgar Sanchez (Un reconocido desarrollador ecuatoriano que tiene su empresa Logic Studio), realizo un demo en el Andean Developer Days, tambien tuve la suerte de ser speaker en ese evento, era realmente algo prometedor...

Pues bien la configuracion por default funciono bien para el ambiente de desarrollo, pero adivinen?? En una pequeña prueba de carga con apenas 10 conexiones concurrentes, se fue al piso y dejo de funcionar por completo!!

Empece a buscar la razon del problema, la base de datos, que es una Oracle 10g, estaba de maravilla, la red completamente libre, el codigo en pruebas unitarias estaba funcionando de maravilla, algunas pruebas mas y nada...

Cuando empece a reviasr un poco mas las configuraciones de WCF en el servidor y me encontre con algunas cosas...

La primera era que los Bindings(Conexiones de cualquier tipo que soporta WCF, Http, TCP, MSMQ, etc...) tenian un tamaño maximo de mensaje, habia olvidado que WCF funciona como un sistema de mensajeria y claro parametriza ese tipo de cosas, al aumentar ese tamaño se fueron algunas excepciones, pero tambien note que no eran tan claras las excepciones en los clientes... Si pensaron que WCF no pasa los detalles de las excepciones a menos que se le indica lo contrario, tienen toda la razon, tienes que en la configuracion del servicio agregar un comportamiento que le indica al servicio que te de detalles sobre la excepcion...

Extraño verdad?? "Normalmente este tipo de cosas en productos vienen listas para usar..." Asi pense, y dije bueno adelante!!

Despues encontre algo un tanto magico: la rzon por que a las 10 conexiones dejaba de funcionar, el binding Tcp tenia especificado que maximo acepta 10 conexiones!!
"Voila, lo cambio y asunto solucionado", aliviado pense asi, sabran que no, a las mismas 10 conexiones se caia, y es cuando comence a dar vueltas por la Web en busca de respuestas...
Encontre de todo la vedad pero para esto ya cambie a un binding Http, que de paso no tiene limite de conexiones teoricamente, pero encontre otro comportamiento de WCF que limitaba su funcionamiento, y era cuantas instancias de objetos de servicio podia crear, ademas de cuantas peticiones podia procesar simultaneamente y cuantas podia tener en cola mientras procesaba, despues de eso comenzaba a rechazar peticiones, bueno lo configure para las pruebas a un numero bastante mas grande de modo que no moleste, se resolvio el problema claro, pero note algo mas, los mensajes comenzaban a ser bastante grandes, claro necesitaba pasar de 16000 registros cada mensaje, tenian que ser grandes, y mis bindings estaban configurados por default excepto por lo que ya les mencione, nuevamente mis investigaciones me llevaron a determinar que la codificacion del mensaje no era la apropiada: estaba usando Texto Plano, ahi se me hizo claro, estaba poniendo un DataSet relativamente grande y serializado a XML, dentro de un mensaje XML, definitivamente tenia que ser grande!!
Bueno experimiente cambiando a una codificacion llamada MTOM, definitivamente mejoro mucho el tamaño ya era mas aceptable y claro esto hacia que los mesajes viajen mas rapido...

Estas y tantas otras experiencias me han resultado a ratos un poco tensionantes, y mas cuando tuve que poner en produccion el sistema, no es muy grande son 60 usuarios, pero a ratos son los 60 concurrentes y tienes como una salida de 25 mensajes por segundo que ya es respetable, y ahi tambien tuve que afinarlo un poco mas...

Estoy preparando un articulo sobre WCF para aclarar este tipo de cosas, espero que con eso menos gente pase lo que yo pase y se cambie tambien la idea de Microsoft tiene solo productos que se instalan y funcionan!!!

Windows Communication Foundation es muy conservador instalado por default, definitivamente tienes que afinarlo....

Tantas maravillas juntas!! Hacia donde vamos??

|

Cada vez y cuando estamos siendo invadidos con mas y mas tecnologia nueva en cuanto a software, es impresionante a la velocidad que estos cambios se dan, en todo sentido, esto claro me ha llevado a preguntarme: "Como desarrollaremos software dentro de 5 o 10 años??"
Pues bien, como va la tecnologia me atrevo a decir que en 5 o 10 años estaremos solo "dibujando" modelos de como queremos que el software se comporte, desde diferentes perspectivas claro, me atrevo a decir esto por las diversas tecnologias emergentes, tanto en el mundo .NET como en el mundo OpenSource...

En general mi afirmacion esta apoyada por lo que se conoce como Model Driven Development, este esta tomando fuerza ya en muchos paises y especial en la plataforma de Java, con sus IDEs y demas, la idea claro es usar diagramas basados en estandares para generar codigo, el gran problema ahi es que las representaciones universales como UML 2.0 no pueden representar por completo las reglas de negocio y claro como normalmente sucede en esa plataforma, hay tantos esfuerzos por separado y cada cual jalando para su lado, que hasta no tener algo como la recientemente formada Linux Foundation, no tendra una clara direccion...

Y Microsoft??

Pues la verdad si uno se pone a revisar, tiene muchas iniciativas para acelerar el desarrollo de aplicaciones, Windows WorkFlow Foundation es la mas recientemente liberada, asi como complementos a esta como son Windows Communication Foundation y Windows Presentation Foundation, es cierto tambien que persiguen no solo el objetivo de mejorar el tiempo de desarrollo de aplicaciones si no otros mas como llevar a un nivel de abstraccion mas alto las comunicaciones, etc...
Pero tambien hay otras iniciativas muy interesantes, LinQ por ejemplo (http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx), permite extraer datos de una forma natural para un desarrollador de C# o VB, es decir adios a SqlConnection y otros objetos ADO .NET, a muchos desarrolladores antiguos les resultara muy familiar poder utilizar un lenguaje de consulta dentro de su codigo, por ejemplo Fox lo tenia hace mucho tiempo, tambien tiene la base integrada a su entorno, pero LinQ no se limita a extraer datos de una manera natural de cualquier base de datos a la que se le configure, si no tambien puede extraerlos desde fuentes de datos XML, podria ser un Web Service, o incluso de un DataSet, lo cual realmente expande las posibilidades!!

A esta iniciativa le complementa ADO Entity Framework (http://msdn2.microsoft.com/en-us/library/aa697427(VS.80).aspx), este Framework genera todas las clases necesarias para tratar a la base de datos tal cual fuera un objeto, por detras claro hace toda la carpinteria de los conocidos DataProviders, y claro ya se imaginaran todo esto tendra sus Wizards y diseñadores incluidos, al momento como esta en beta funcionan bastante bien los wizards pero aun te toca cambiar en XML ciertas cosas...

Muy bien esto ayuda mucho, pero aun hay mas, han escuchado de la iniciativa de los Software Factories?? (http://msdn2.microsoft.com/en-us/teamsystem/aa718951.aspx) Estos son un conjunto de practicas probadas, de Microsoft Patterns and Practices, que se integran en tu IDE y a manera de Wizards "conversan" contigo para estructurar proyectos de diversas indoles, desde Sevicios Web o de Windows Communication Foundation, hasta SmartClients, ademas tienen "Recetas" para ejecutar algunas tareas muy comunes, nuevamente esto te ahorra mucho tiempo...

Hay otras mas como los DSL (Domain Specific Lenguages, http://compose.labri.fr/documentation/dsl/dsl_overview.php3) que pretender mejorar la definicion de las reglas de negocio, etc, etc, etc....

Claro tambien hay herramientas que cubren otros aspectos como Team System el asunto de colaboracion y metodologia de desarrollo, Project Portfolio Server (http://office.microsoft.com/en-us/portfolioserver/FX101674151033.aspx) el desarrollo de los proyectos, etc, etc, etc...

Para verlo mejor si les recomiendo que lean y experimenten con estos productos, tanto los de dearrollo como los de administracion, asi uno nota algo muy interesante: nada de esto esta desconectado entre si!! Eso es de verdad genial por que la iniciativa tiene metas claras y todas jalan para un mismo lado lo que permite que Microsoft avance rapido en el tema...

Como ven no se ha quedado muy atras Microsoft, en un fututo no muy lejano me atrevo a decir que no tendremos Visual Studio, tendremos algo asi como Visual Software Factory o algo por el estilo, asi es que posiblemente todos estemos un poco mas dedicados a resolver problemas a un nivel mas de procesos, antes de que lidiar con el lenguaje o las conexiones a la base de datos...

Hay empresas como Rational que tienen tambien suites muy aproximadas a lo que menciono aqui, claro esto es bastante caro por lo pronto y en consecuencia prohibitivo para muchos desarrolladores que no tienen la suerte de estar en una empresa que pueda utilizar estas herramientas, y tendran que esperar un poco a que la comunidad OpenSource se ponga de acuerdo con respecto al tema...

Por lo pronto yo espero ancioso la salida de LinQ y ADO Entity Framework, que dicen ustedes???