Tuesday, January 27, 2009

Component Services Vista NO esta

Component Services sobre Windows Vista NO esta alli, como antes. Fue sacado, inmisericorde.

Sin embargo, NO debes deprimirte. Menos aun, desesperarte :)

Basta ejecutar comexp.msc para volver a ver la consola de administracion del Component Services.

Friday, January 09, 2009

Usando Threads con parametros

Utilizar Threads brota a la necesidad de ejecutar multiples operaciones relativamente pesadas.

Pesadas en el sentido que el tiempo para concluir su ejecucion, es relativamente indeterminado. Es decir, la aplicacion NO puede quedarse a la espera de que concluya dicha operacion sin que el usuario quede inhabilitado de continuar usando el software.

Los Threads permiten una solucion a esta necesidad.

Sin embargo, como toda operacion siempre se requerira de una especie de parametrizacion, es decir, enviarle una serie de parametros para que se ejecute con ciertas variables inicializadas previamente.

¿Que hacer ante este requerimiento? ¿Como puedo pasarle parametros a un metodo corriendo sobre un Thread?

Un metodo extenso, es casi siempre una potencial clase, es decir un class, que podras encapsular de la manera que mejor creas conveniente.

Aquel metodo relativamente extenso y pesado, podra ser abstraido a una clase, a la cual expondras un metodo publico sin parametros: Run, por ejemplo.

El constructor de la clase, tendra todos los parametros necesarios que requiera esa operacion relativamente pesada.

Entonces, tu instanciaras un objeto de dicha clase, y colocaras sobre un Thread el metodo Run de aquella class.

MyClass o = new MyClass( param1, param2 )
Thread t = new Thread( o.Run );
t.Start();

Este mecanismo te brindara la solucion a tus problemas.

Por otro lado, existe una clase propia del .NET Framework llamada ParameterizedThreadStart pero como todo lo que esta disponible para usar en el .NET Framework, tiene un costo, perder el control sobre la ejecucion interna de la operacion sobre el Thread.

Algo que a la primera, puede que NO le tomes la minima importancia, pero que luego, conforme van madurando el producto de software, este debe ajustarse a mas necesidades que la inicialmente indicadas.

Por lo que perder el control, tendra un costo mas alto despues.

Ese despues, esta solo a la vuelta de la esquina. NO lo dudes!

Wednesday, November 26, 2008

event srcElement Firefox bug

Siguiendo con la saga de posts sobre Firefox y el trabajo adicional que implica hacer que el aplicativo se vea relativamente bien sobre este browser.

Debes tener en cuenta que, en la medida de los posible, el desarrollo empieze a desarrollarse sobre Firefox pues este browser es mas estricto tanto en su presentacion como en la interaccion con el usuario y sus scripts.

El muy usado event.srcElement NO sirve para Firefox. Tan simple y claro como eso.

Lo que sucede es que cada funcion de javascript que asocies a un evento de algun element HTML deberia utilizar esta firma: Foo( this ).

De esa manera el event.srcElement quedaria relegado.

function Foo( src )
{
   /* Utilizas src como si fuese event.srcElement */
}

Good coding!

parentElement Firefox bug parentNode

Cuando desarrollas para Firefox debes liar con algunas dificultades. Firefox maneja un modelo distinto para ciertas cosas que Internet Explorer regala a discrecion.

Por ejemplo, en el modelo de objetos DOM del documento HTML a nivel de script, un elemento cualesquiera -en Firefox- NO cuenta con su correspondiente parentElement.

Esto podria traerte mas de una molestia, pero debes tener claro que Firefox implica algo mas de trabajo por parte del desarrollador.

Para superar este escollo, debes usar la propiedad parentNode.

if( obj.parentElement )
{
   /* usas parentElement */
}
else
{
   if( obj.parentNode )
   {
      /* usas parentNode */
   }
   else
   {
      throw 'What is your fucking browser?';
   }
}

Good coding!

Monday, November 17, 2008

UpdatePanelAnimationExtender loading

UpdatePanelAnimationExtender es uno de los controles mas usados del Ajax Control Toolkit.

UpdatePanelAnimationExtender brinda la facilidad de mostrar alguna animacion mientras el UpdatePanel demora en ejecutar la operacion que se le ha encomendado a realizar.

Por ejemplo si tuviese que mostrar informacion cuyo origen de datos requiere mayor tiempo de ejecucion, pues el UpdatePanelAnimationExtender es la opcion a usar.

NO deberias cambiar nada en tu UpdatePanel para utilizar el UpdatePanelAnimationExtender.

UpdatePanelAnimationExtender es una seccion declarativa a nivel de la pagina ASPx muy sencilla.

<cc1:UpdatePanelAnimationExtender ID="_animation" runat="server" BehaviorID="animation" TargetControlID="_update">

Donde _update es un UpdatePanel.

El elementos interno es <Animations> dentro del cual se declaran <OnUpdating> y <OnUpdated> en los cuales se definiran las acciones de animacion que se crean convenientes.

Dentro de cada una de estas, pueden definirse acciones que pueden ser <Sequence> o <Parallel> quienes han de ejecutar las acciones de animacion en orden secuencial -que seria lo ideal- o en forma paralela cada accion de manera casi concurrente.

La accion casi por default utilizada es <EnableAction> en cuya propiedad AnimationTarget se define el boton que ordena la ejecuion del proceso que se vaya a realizar para deshabilitar dicho boton mientras se encuentra ejecutando. Para que una vez realizado volver a su estado original.

UpdatePanelAnimationExtender brinda una serie de acciones a configurar en modo declarativo, para que finalmente esto sea interpretado con el Runtime del Ajax y hacer lo que le hayas configurado que haga.

Para hacer cosas mas raras puedes usar el <ScripAction> que en su propiedad Script solicita el metodo javascript a ejecutar.

En <OnUpdating> cambios los estados de los controles que tienes disponbles en la interfaz de usuario que luego en el <OnUpdated> regresas a su estado irginal.

Thursday, November 13, 2008

Remote Debugging Monitor Visual Studio

Remote Debugging Monitor permite depurar una aplicacion ASP.NET sobre el servidor. Por cuestiones de seguridad, debe entenderse que esto se realizara sobre un servidor en un entorno de Testing o algo relativamente similar.

Una forma sencilla de usarla al desarrolar aplicaciones con tu Visual Studio .NET 2008, donde las aplicaciones ASP.NET utilizan el ASP.NET Develoment Server sobre algun puerto en particular, dicho proceso utiliza la cuenta de usuario de la actual sesion de Windows.

Muy probablemente todo funcione de maravillas en tu pequeño entorno de desarrollo -tu PC- mas aun si estas en el grupo de Administradores de tu machine.

Bueno, puede que instales el IIS en tu PC para publicar tus proyectos ASP.NET en un entorno inicial de testeo.

Al probrar aquello en un simple http://localhost/myWebApp/ veras que empiezan a brotar excepciones que antes NO aparecian, pues el usuario en el que se levanta el w3wp.exe es el [NT Authority\Network service].

Pues depurar la aplicacion alli, seria ideal. ¿NO?

Para ello, abres el Visual Studio .NET 2008, vas al menu Tools y eleges la opcion Attach to process....

Te mostrara una ventana en la cual el Transport elegido es por Default, entonces deberas ingresar en el campo Qualifier el valor localhost, checkear Show processes in all sessions, hacer clic en en boton Refresh, buscar en la lista el proceso w3wp.exe y finalmente hacer clic en el boton Attach.

Luego podras ingresar en tu brower el http://localhost/myWebApp/ esperando que ante cualquier excepcion que se produzca en tu aplicacion -mientras que la manoseas- el Visual Studio .NET 2008 permitira visualizar la linea de codigo que general dicha excepcion.

Thursday, November 06, 2008

Entity Framework Visual Studio 2008

Entity Framework es una herramienta que se monta sobre el Linq To Sql para interactuar contra la Base de Datos, y brinda al developer facilidades de herencia y composicion en un modelo de clases, como Dios manda, con caracteristicas propias de OOP -Object Oriented Programing- que los ORM -Object Relational Mapping- NO nos brindaban, como lo aprendimos en la preciosa e inaplicable teoria.

En fin, Entity Framework hace el esfuerzo de encaminarnos al mundo de los objetos con aquellas caracteristicas de herencia y composicion de clases -que habiamos dejado de lado por los tools de mapeo entre un mundo de entidades y el mundo relacional- que posteriormente hagan el mapping contra las columnas de las tablas de nuestra Base de Datos.

Para poder utilizarlo es importante que descargues el Visual Studio .NET 2008 Service Pack 1 que viene junto con el .NET Framework 3.5 Service Pack 1.

Visual Studio .NET 2008 Service Pack 1 (ISO)

De manera que tendras los primeros parches de la herramienta de desarrollo por un lado y de la plataforma por el otro, todo en un mismo paquete.

Luego tendras que agregar un item ADO.NET Entity Data Model a tu proyecto y si tienes tu base de datos construida -con relationships- podras seguir el wizard y obtener todo el modelo de clases justo y necesario.

Ahora, si deseas, puedes seguir la opcion advanced, y contruir tus clases a pedal -es decir tu mismo pe- tomando en cuanta las caracteristicas del Entity Framework para definir tus campos y relaciones entre las clases.

Ya sabes, sigue el camino de la verdad.

ArgumentException Entity Framework

Cuando utilizas varios proyectos en tu solucion del Visual Studio .NET 2008 para organizar correctamente la arquitectura de tu producto de software, muy probablemente utilizes alguno para recibir alli el Data Model de tu Entity Framework y todas las clases que se definan en dicho Data Model.

Un archivo app.config se definira en aquel proyecto con una definicion del connectionString que deberas hacer COPY & PASTE -utlizando una neurona- en el web.config de tu proyecto ASP.NET, de lo contrario recibiras un mensaje como este:

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

Aquel mensaje nos dice que efectivamente NO encuentra una definicion de connectionString en el web.config de tu aplicativo ASP.NET, al momento de instanciar el contexto referido a tu modelo de clases.

Tuesday, November 04, 2008

Habilitar sonido en Virtual PC 2007

Cuando estas utlizando Virtual PC 2007 sobre Windows Vista Home Premium, cierto ya se que Microsoft NO brinda soporte sobre dicho HOST, es muy probable que el sonido NO este habilitado en tus GUEST SO, sean estos: Windows 98 SE, Windows 2000 + SP4 o Windows XP + SP2.

NO hay forma legal de exigirle a Microsoft el soporte necesario para esta incidencia.

Tampoco se trata de llevarlo a juicio a mi tio Bill Gates, pero en fin.

Es asunto pasa por habilitar el sonido en los SO GUEST para poder disfrutar de ciertos videojuegos disponnibles en dichos entornos ;)

Bueno, la indicendia brota pues a pesar de haber instalado el Virtual Machine Additions correspondiente en cada SO GUEST, el sonido NO esta habilitado, teniendo como HOST al menos celebre Windows Vista Home Premium.

Que de premium NO tiene nada, te dire, mas aun si el Diccionario de la Real Academia de Lengua Española nos dice que la definicion de Premium es: algo que tiene o refleja una calidad o valor superior. Plop!

Solo falto agregar que en aquel diccionario que esa definicion NO aplica a Windows Vista Home Premium, je.

Bueno, encaminado el asunto de la incidencia sobre el sonido en los SO GUEST. ¿Cual es la solucion para este issue?

Pues el omnipresente Service Pack 1 del Virtual PC 2007, llega como chapulin colorado ;)

Virtual PC 2007 Vista Home Premium

NO hay dudas pero sorprende sobremanera.

Virtual PC 2007 -aunque UD se aferre a la idea contraria- NO brinda soporte sobre Windows Vista Home y Windows Vista Home Premium edition.

Sin embargo pareciese que sobre el Windows Vista Home Premium, todo funcionase relativamente normal, pero aquello NO implica que cada vez que tengas una incidencia sobre sobre dicho escenario, es decir, un entorno donde el Virtual PC 2007 se instale sobre un Windows Vista Home Premium, Microsoft atienda y te de el soporte que esperas, para resolver aquel issue.

Estamos claros, una cosa es que el software NO este permitido o disponible sobre un Sistema Operativo -SO- anfitrion y otra legalmente distinta es que Microsoft te brinde soporte.

Microsoft formalmente NO lo brinda, pero hay mucho usuario en la Red que al igual que tu comenta sus incidencias, algunos tienen suerte y resuelve su problema que luego comparten con everyone.

Ante esa realidad aquello del soporte para Windows Vista Home Premium deja de tener interes.

Sin embargo, a nivel empresarial, donde se distribuyen miles de licencias, a todo cristo, aquello alcanza palabras mayores, y Microsoft legalmente salva su responsabilidad de brindar un soporte donde -antes de- NO lo brinda.

Claro, Microsoft difilmente distribuya Windows Vista Home Premium a nivel empresarial, pues tiene unos paquetes de licencia que incluyen tres o cuatro maquinas virtuales por HOST, todos con sistemas operativos Microsoft, teniendo a Windows Vista Business, Vista Enterprise o Vista Ultimate como su respectivo HOST con Virtual PC 2007 incluido.

En fin, son las reglas del juego. Solo queda acomodarse u optar por VMWare Workstation 6.