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.

InvalidOperationException ServiceModel

Cuando trabajas con WCF utilizando diferentes proyectos en tu solucion, para organizar correctamente la arquitectura del producto de software que vienes construyendo, te encontraras con algunos detallitos que debes superar.

Pues el Visual Studio .NET 2008 te ayuda en lo posible pero NO resuelve por defecto todos tus problemas ;)

En fin, si realizas algun Service References para un EndPoint sobre WCF desde un proyecto del tipo Class Library, el Visual Studio .NET 2008 creara un app.config en dicho proyecto con ciertos elementos de configuracion que despues deberas hacer COPY & PASTE al web.config de tu proyecto ASP.NET.

Dichos elementos de configuracion deberan ser colocados dentro del <system.serviceModel> de tu web.config.

Y tendras tantos, como Services References consumas en tu solucion.

De lo contrario al ejecutar tu aplicativo recibiras este mensaje, en el momento de ejecutar alguna funcionalidad expuesta en aquellos EndPoints, similar a este:

Could not find default endpoint element that references contract 'Brokers.Security.EndPointSoap' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

Claro, si haces tus Service References dentro del mismo proyecto ASP.NET jamas te encontraras con este mensaje.

Pero muy probablemente pierdas escalabilidad.

Windows Communication Foundation WCF

Cuando trates de consumir algun EndPoint sobre Windows Communication Foundation - WCF, el proyecto del tipo Class Library -desde donde realizas el Service References a dicho EndPoint publicado en algun servidor de la red- del Visual Studio .NET agregara un par de assemblies automaticamente: System.ServiceModel y System.Runtime.Serialization.

Bueno, para todo proyecto dentro de tu solucion que haga referencia al proyecto que realiza el Service Reference deberas -por ende- hacer una referencia manual a dichos assemblies.

De lo contrario recibiras un error al hacer build a tu aplicativo, similar a este:

The type System.ServiceModel.ClientBase'1<T0>' is defined in a assembly that is not referenced.

o el otro conocido mensaje de error:

The type System.Runtime.Serialization.IExtensibleDataObject is defined in an assembly that is not referenced.

Pequeño detalle que tendrias que tomar en cuenta :)

Monday, November 03, 2008

Application Error Global asax

Un mecanismo para gestionar los errores por el lado del servidor en las aplicaciones web ASP.NET, es a traves del:

Application_Error( Object sender, EventArgs e )

Alli dentro debes implementar el codigo que permita capturar la excepcion NO controlada que se produjo dentro de tu aplicativo ASP.NET.

HttpContext.Current.Server.GetLastError().GetBaseException();

Esta linea de codigo, te permitira obtener la excepcion de menor nivel, la que realmente origino la excepcion.

Es una forma de obtener el InnerException por cada una de las excepciones que fueron desencadenadas.

¿Para que usar HttpContext.Current? ¿NO bastaria con utilizar this.Server.GetLastError()?

Pues la respuesta es contundente, un reverendo NO.

En un entorno de desarrollo, en tu PC local donde tu eres amo, dueño y señor de tu develop machine, pues probablemente NO se manifiesten ciertas excepciones, que en un entorno de produccion, con mucha seguridad si se manifiesten, es por ello que es necesario una gestion de errores para tu aplicativo ASP.NET

Pero ademas, debido al mecanismo con el que funciona ASP.NET y el ciclo de manejo propio de este, en un entorno de produccion el this.Server.GetLastError() en ocasiones puede retornar un valor NULL, a pesar que se haya generado la excepcion por el lado del servidor.

HttpContext.Current.Server.GetLastError() si devuelve la informacion solicitada, es decir, la excepcion desencadenada.

Luego de capturar el Exception, puedes hacer lo que quieras con el, enviarlo por email al equipo de soporte a traves del SmtpClient del System.Net.Mail, o guardar el contenido de la excepcion en un archivo de texto a modo de log, o utlizar el EventLog del System.Diagnostics para preservar la excepcion el Visor de Eventos de las Herramientas Administrativas de tu servidor web.

En fin, muchas formas, para todos los gustos y de todos los colores.

NRG files Virtual PC 2007

NRG files es el formato de la imagen de un CD bajo el formato del Nero Burn.

Gracias al Nero podemos tener versiones compiladas de un CD en un solo archivo y distribuirlo por doquier.

Pero al usar esa imagen con el Virtual PC 2007 es probable que tengas algunos problemillas, si es que dicha imagen requiere hacer boot para el instalador de un SO.

Por ejemplo una imagen de los instaladores de un Sistema Operativo sobre ISO funciona de maravilla, en contraste con la imagen de otro SO en formato NRG.

Para muestra un boton.

La salida inmediata seria quemar la imagen en NRG a un CD y utilizarlo posteriormente a traves del uso de la unidad fisica para el lector sobre el Guest.

Otra solucion podria ser convertir el NRG a ISO, utilizando cualquier herramienta del mercado para estos menesteres.

En fin, ten encuenta que los ISO vienen soportados por default en el Virtual PC 2007.

Pero si utilizas el Virtual PC 2007 + SP1 puede ser que todo sea de maravilla :)

Sunday, November 02, 2008

Virtual PC 2007 wireless network adapter

Virtual PC 2007 es uno de los juguetes de Microsoft que mas usamos todos los dias.

Pero tiene un detallito si usas el Adaptador de Red Inalambrico, para acceder a la Red desde tu Host.

El Equipo de Virtual PC 2007 decidio NO habilitar el acceso a la Red sobre un wireless network adapter, por defecto. Es decir que nuestro Host, NO levanta el Virtual Machine Network Services para los adaptadores de red inalambricos.

Pequeño detalle, la people se pasa todo el dia buscando una solucion para este tipo de incidencia. Hay que leer.

En fin, la solucion inmediata es utlizar el Adaptador de Red tradicional, y un cable largooo de tu PC al Router :)

La solucion profesional -claro esta- pasa por ingresar a las propiedades de la Conexion de Red Inalambrica, y checkear el Virtual Machine Network Services, de manera que cuando vayas a la consola de administracion de tu Virtual PC 2007, podras configurar el Network Adapter de tu Guest PC y encontrar el Adaptador de Red Inalambrico, que antes NO encontrabas, NI de a patadas.

Claro, siembre veias las mismas cuatro opciones disponibles, en las cuales incluia, tu adaptador de red tradicional y el Shared Networking (NAT), pero al elegir este ultimo y levantar tu Guest PC, NO se podian ver en la misma LAN con tu HOST, por asuntos extremadamente tecnicos.

Pero ya tienes la solucion aqui. Choprove!

Firefox plugins web developer

Firefox es el browser ideal para desarrollar aplicaciones web con conectividad a Base de Datos, y en general todo lo que tenga que ver con la web.

https://addons.mozilla.org/en-US/firefox/

Los diferentes plugins disponibles desde el sitio web oficial de Firefox, entregan una serie de herramientas y utilidades que brindan informacion de interes tecnico para quienes desarrollamos aplicaciones web.

Facilidades de uso para todo lo que tenga que ver con el diseño y la apariencia de tus aplicaciones web, asi como con el tiempo de respuesta, volumen y contenido de los HTTP requests.

NO hay dudas Firefox es el browser!

Thursday, October 23, 2008

Group box en HTML Web Form

Muchas veces queremos que ciertos controles de WinForms tengan su respectivo equivalente en el mundo de las aplicaciones Web.

Group box es un control que agrupa un conjunto de controles en un formulario windows.

Bien, su correspondiente para el mundo WebForm es el menos conocido elemento HTML: fieldset.

Este elemento tiene un elemento hijo, llamado: legend, para establecer la etiqueta del Group box para HTML en la parte superior izquierda.

En fin, tu codigo HTML para un formulario de ingreso de datos deberia quedar, mas o menos asi:


<fieldset>
<legend>La descripcion de mi Group box</legend>
<table>
<tr>
<td>Campo 1:</td>
<td><asp:textbox /></td>
</tr>
<tr>
<td>Campo 3:</td>
<td><asp:dropdownlist /></td>
</tr>
</table>
</fieldset>


Ya sabes, luego aplica correctamente los estilos CSS para formatear los elementos de formulario en el codigo HTML.

Friday, October 17, 2008

Error connecting to undo manager

Error connecting to undo manager of source file namefile.aspx.designer.cs

Cuando te encuentras desarrollando con el Visual Studio 2008 es muy probable que recibas este mensaje al debuggear tu ASP.NET web application.

Algunas veces al editar -agregar o cambiar la definicion- de algunos elementos de servidor: textbox, dropdownlist, radiobuttonlist, etc. mientras te encuentras trabajando con la interfaz de usuario, este mensaje aparece y NO te dejara realizar tranquilamente tus proximas debuggeos.

Por algun motivo los archivos temporales NO son cambiados con el proximo resultado del rebuild de tu ASP.NET web application.

Una solucion, sin usar muchas neuronas, es simplemente editar los archivos aspx y luego el correspondiente aspx.cs para que la proxima vez dicho mensaje ya NO aparezca.

Lo unico que debes hacer es agregar un simple caracter en blanco y eliminarlo seguidamente, o alguna otra accion relativamente similar.

Al estar los dos archivos editados, el debug actualizar los archivos que antes se encontraban errados y NO se muestra el bendito mensaje.

Lo curioso es que el rebuild de la aplicacion NO da como resultado ningun warning, ni mucho menos un error.

Al parecer seria un bug del Visual Studio 2008 que con el Service Pack 1 sea superado.

Monday, October 13, 2008

Server error in asp.net application

Server error in asp.net application. Configuration error.

<authentication mode="Windows" />

Este mensaje puede ser visto cada vez que haces el deploy en el servidor web y el folder donde has colocado los archivos de tu aplicacion ASP.NET aun NO han sido configurados como un Directorio Virtual con la caracteristica de resolver las paginas aspx.

Para ello debes ir al IIS Management Console, desplegar Default Web Site, hacer clic derecho y seleccionar la opcion Add Application.

Alli indicaras el Alias para tu futura aplicacion y el folder fisico donde se encuentran los archivos que haz desarrollado.

MSDTC on server myserver is unavailable

MSDTC on server myserver is unavailable.

Este mensaje es recibido cuando estas intentando usar las bondades del System.Transactions para gestionar las transacciones de tu aplicativo con acceso a base de datos.

Lo que sucede es que el Microsoft Distributed Transaction Coordinator se encuentra desahiblitado, por lo que cuando utilizas el TransacionScope del System.Transactions este NO te permitira manejar las transacciones como tu esperas.

Para ello debes ingresar al Component Services, expandir el Distributed Transaction Coordinator, hace clic derecho sobre Local DTC, seleccionar la opcion Properties y mostrar la pestaña Security para habilitar el Netwotk DTC Access.

Del mismo modo, habilitar el Allow Inbound y Allow Outbound.

Thursday, October 09, 2008

Login failed for user NT AUTHORITY

Login failed for user NT AUTHORITY\Network service, es el mensaje que nos muestra un aplicativo ASP.NET con conectividad a Base de Datos, al intentar establecer la conexion con el repositorio de datos y NO tener los privilegios correspondientes.

Si tu conectionstring o cadena de conexion utiliza la Autenticacion Integrada de Windows para conectarse a la DataBase, este mensaje podria ser visto NO si antes se hayan realizado los ajustes correspondientes.

server=myserver;database=mydatabase;integrated security=true;

Lo que debes hacer es darle el acceso al usuario NT AUTHORITY\Network service a la base de datos deseada.

sp_grantlogin 'NT AUTHORITY\Network service'

Podrias ejecutar dicho store procedure sobre el contexto de la base de datos requerida o hacerlo sobre la carpeta Security del SQL Server Management Studio.

This configuration section cannot be used

This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false".

Este mensaje nos muestra el IIS 7 del Windows Vista debido a que NO se han instalado todos los componentes del lado del servidor necesario para resolver ASP.NET.

Windows Vista no activa estos componentes en la instalacion por defecto del IIS.

Para poder visualizar aplicativos ASP.NET sobre una PC con Windows Vista, es importante que tus componentes activados se parezcan a los que se muestran en la imagen.



Windows Vista esta orientado a colocar mas trabas para realizar ciertas tareas que en las versiones anteriores de Windows NO se mostraban.

Una caracteristica de seguridad.

Linq support server-side data paging

Cuando estas desarrolando software con Visual Studio 2008 para utilizar todos los beneficios de usar Linq, te encontraras con este mensaje de error, al intentar enlazar un origen de datos Enumerable.SelectIterator sobre un GridView:

The data source does not support server-side data paging.

Apesar de haber configurado las propiedades AllowPaging="true" del GridView, este mensaje te saca de las casillas y puedes equivocadamente sospechar que las expresiones Linq NO pueden enlazarse a un simple GridView.

var q = from item in Clients select item;
this._grid.DataSource = q;

Donde la variable Clients es una coleccion de datos, cualesquiera.

Sin embargo, al enlazar el objeto de estructura de datos inferida, es decir: q, sobre el DataSource del GridView, debe utlizar el metodo ToList()

this._grid.DataSource = q.ToList();

De esta manera superaras un inconveniente tecnico, que antes NO se habia experimentado, es decir en las versiones anteriores.

Linq brinda una serie de beneficios para poder trabajar con colecciones de objetos en el mundo .NET de una manera similar a SQL, sin que esto implique necesariamente una operacion hacia la Base de Datos.

Naturalmente, entre los pro y contra encontra algunas dificultades tecnicas que se deben superar.

Tuesday, October 07, 2008

SQL Server 2005 Setup Log Files

There was an unexpected failure during the setup wizard. You may review the setup logs and/or click the help button for more information.

Este es uno de los mensajes que puedes recibir cuando el proceso de instalacion del Microsoft SQL Server 2005 Standard Edition haya fracasado.

Evidentemente tienes que revisar los archivos de LOG que haya generado el Microsoft SQL Server 2005 Setup durante su ejecucion.

Estos archivos se encuentran en la carpeta:

c:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files\

Veras alli una lista de archivos de texto con extension .log para que puedan ser revisados y verifiques, cual fue el motivo para el fracaso del proceso de instalacion del Microsoft SQL Server 2005.

Monday, October 06, 2008

Visual Studio 2010 y Rosario

Microsoft anuncio que Visual Studio 2010 y .NET Framework 4.0 seran los proximos productos para el desarrollo de aplicaciones y su respectiva plataforma.

NO pasaron solo 10 meses desde que las versiones anteriores salieron al mercado.

Estamos jodidos, cada vez es mas facil programar. NO hay dudas. Un chiquillo de primero de secundaria podria sentarse al frente del Visual Studio .NET 2010 y construir una sencilla interfaz de usuario y luego darle una trivial funcionalidad, sin mayores inconvenientes.

Con mayor razon, si tienes algunos años mas de experiencia.

Visual Studio Team System VSTS 2010 comunmente llamado Rosario, esta orientado a ser el siguiente pilar para el desarrollo de software.

Al lado de Windows Comunication Fundation WCF, Windows Presentation Fundation WPF, y Windows Workflow WF, el proximo Visual Studio Team System 2010 trae consigo ALM Application Life-cycle Management, una especia de gestor de ciclo de vida del software.

En fin, NO hay dudas que al coger Visual Studio 2010 hace que las cosas sean mas sencillas de lo que eran ya con la version anterior, el Visual Studio 2008.

Venga Rosario!

Tuesday, September 16, 2008

CSS tablas filas estilos TBODY

Las hojas de estilos en cascada, popularmente conocidos como Cascade Stylesheet, es una de las cosas maravillosas que nos brindaron los browsers -hace unos años atras- para establecer la apariencia de nuestras vistas al usuario en los aplicativos web que desarrollasemos, reduciendo el codigo redundante del formato entremezclado con el HTML.

NO hay duda, las hojas de estilos en cascada o CSS, nos salvaron la vida.

Llegaron para quedarse. Para brindarnos facilidad de uso y ahorro de energia en la construccion de nuestras vistas.

Sin embargo, aquellos que usabamos las tablas para diseñar el layout de nuestras paginas vivimos en carne propia que los DIV brindaban un manejo mas sencillo para la configuracion del layout de nuestras vistas orientadas al usuario.

Las tablas cedieron terreno para dejarle el trabajo del layout a los DIV.

Algunos mencionaban que el performance de pintar: TABLE, TR, TD y demas era mucho mas bajo que al usar los DIV para hacer algo relativamente similar.

Pero entre otros tantos mitos, uno quedo muy claro, usar CSS sobre tablas se complicaba mas de lo debido.

¿A que se debia esto? ¿Acaso NO era sencillo establecer una clase TABLE > TR para aplicar un estilo en particular a dicha combinacion de elementos?

Pues, alli radica uno de los problemas.

El operador > : mayor que, implica que la combinacion se establece entre el ascendente y el descendiente inmediato, sin embargo NO era comunmente usado.

En comparacion al operador tacito, TABLE TR, que aplicaba el estilo a todos los descendientes TR, de primer o enesimo nivel, con respecto al elemento TABLE.

Lo mejor es usar combinaciones de TABLE > TR para aplicar estilos a los elementos internos a un TABLE. Por que de esa manera NO pierdes el control de las cosas que estas desarrollando sobre la vista.

Sin embargo, dicha combinacion nunca funcionaba. ¿Que es lo que pasaba?

Bueno aqui viene la parte mas triste de todo esto embrollo.

Sucede pues, que el elemento TBODY es implicito en la construccion jerarquica de los TABLE, TR y TD.

Es decir, a pesar que explicitamente NO colocases el TBODY luego del TABLE y antes del TR, dicho elemento -el TBODY- se encontraba alli.

Entonces, necesariamente debias establecer tus estilos para las combinaciones TABLE > TBODY > TR si querias aplicar algun estilo para las filas inmediatamente inferiores de un TABLE en particular.

Pequeño detalle ¿cierto? Ahora todo encaja ¿verdad?

Ante dicho truquillo, poco difundido, es que las tablas se alejaron del diseño de los layouts para dejar ese trabajo a los DIV usando propiedades float y clear, segun sea el caso.

Las tablas solo seria usadas para mostrar informacion tabularmente.

Las clasicas grillas de datos y demas relativamente similares.

Monday, August 25, 2008

Bottom Up para desarrollar software

La perspectiva Bottom Up para desarrollar software provoca que una de tus primera tareas sea modelar la estructura logica de la Base de Datos que soportara el producto de software que vayas a construir.

Muchas veces se cae en la simpleza de mencionarse que si la base de datos esta bien modelada cualquier cambio posterior NO tendra un impacto muy grave.

Los que estamos involucrados en el mundo del desarrollo de software con conectividad a Base de Datos, hemos modelado una estructura de datos, si o si, y hemos visto hasta Base de Datos en produccion, sin primary keys, constraints, relations ships, sin nada.

Con campos redundantes de informacion de una tabla en otra, entre quienes existen solo algun tipo de relacion.

Entonces, ¿hasta que punto es valido rasgarse las vestiduras para aferrarse a la fragil idea de que la base de datos debe estar MUY bien modelada?

En la fase de la contruccion del software, aquella en la que los developers empiezan su tarea, desarrollan las vistas del usuario y demas, por alguna u otra circunstancia se haran necesarios diferentes cambios en la estructura de datos original de la base de datos que hayas modelado.

NO existe el modelamiento preciso y exacto que resuelva todas las incidencias posteriores, sin requerirse cambios en los objetos de la base de datos: tablas, campos, relaciones, etc.

Si aun puesto en produccion, el software al ser usado por un mayor volumen de usuarios, brotaran incidencias que traeran como consecuencias cambios en las vistas y muchas veces -algunos de esos cambios- requeriran cambios en la estructura de datos original, pues con mayor razon que en la fase de la construccion del software seamos testigos presenciales y activos de esos cambios.

La Base de Datos NO tendria por que ser necesariamente la mayor de las prioridades, pues las vistas del usuario NO interacturan directamente con dicha estructura.

La capa de negocio o Business Layer adquiere mayor relevancia.

Friday, August 22, 2008

Clases parciales con Visual Source Safe

Una de las tantas aplicaciones que puedes darle a las clases parciales esta directamente asociada con el uso del Visual Source Safe 2005.

Cuando tienes algunos developers en tu equipo de trabajo, dedicados a la construccion de un producto de software y se apoyan en Visual Source Safe para la gestion y cuidado del codigo fuente, sucede una necesidad.

Acceder a un archivo .cs en particular para agregarle alguna funcionalidad o aplicar un pequeño refactory en el mismo.

Sea como fuese, es necesario poder acceder a un mismo archivo fisico a la vez.

Justamente el Visual Source Safe existe para todo lo contrario. Impedir el acceso de escritura a un mismo archivo fisico, a la vez.

Ante el requerimiento de poder hacerlo y la funcionalidad de la herramienta que te lo impide, utilizar Clases Parciales o Partial Classes es una solucion al problema.

Al utilizar mas de un archivo fisico para definir una entidad logica, solo te quedara la tarea de agrupar ciertas funcionalidades en el primero de los archivos y otras funcionalidades en los archivos fisicos restantes.

Puedes utilizar tantos archivos fisicos requieras para la definicion de tu entidad logica, la clase.

Wednesday, August 20, 2008

Web Client Software Factory

Una propuesta para desarrollo de software en modalidad web con la propuesta Model View Presenter MVP, es el llamado Web Client Software Factory.

Este interesante add-on para el Visual Studio .NET 2005 propone una forma peculiar de desarrollar software para ASP.NET.

Web Cliente Software Factory se monta sobre el Composite UI Application Block.

Esto es una ladilla pues cuando te encuentres desarrollado alguna vista en particular te encontraras con un error mas deconocido que el anterior.

Unos errores realmente espantosos.

Ello es consecuencia directa de utilizar el Composite UI Application Block como base para el Web Client Software Factory.

Por otro lado, el Web Cliente Software Factory propone un marco para desarrollo de una aplicacion ASP.NET en lo correspondiente a la capa del usuario. El manejo de las vistas a traves de un presenter.

Escucharas sobre Presenters, Controllers y Views a diestra y siniestra.

Sin embargo, debes y tienes que encontrar una forma creativa de fusionar la propuesta del Web Client Software Factory con tu capa de negocio y posteriormente con tu capa de acceso a datos.

De una forma u otra, sentiras en carne propia que requieres utilizar mas tiempo -que el que utilizabas antes- para construir un aplicativo cualesquiera bajo la propuesta del Web Client Software Factory.

Los Views solo deberian gestionar los eventos de los controles que estan disponibles al usuario.

Los Presenters son los encargados a establecer la logica de presentacion de la informacion en los Views. Pues los Presenters tiene una referencia a los Views.

Esto podria sonar relativamente extraño, pero es asi. Pues uno espera que sea el View que tenga una referencia al Presenter, sin embargo la referencia es a la inversa y eso ayuda a poder utilizar los elementos definidos en los Views desde el Presenter.

Los Controllers hacen justamente eso, controllar la forma en que los Presenters han de interactuar.

Sin embargo, queda en un limbo como hacer para que tu Business Layer se integre facilmente con la propuesta del Web Client Software Factory.

Cada quien tiene su propio criterio y encontraras soluciones buenas y otras NO tan buenas.

En el intento esta la respuesta. Y en las pruebas de stress la mejor solucion.

Monday, August 18, 2008

Tipos anonimos en C# 3.0

Una de las cosas que me fascinan del C# 3.0 es el uso de tipo anonimos.

Las tipos anonimos o anonymous types, tambien conocidos como clases anonimas, brindan una posibilidad interesante que nos hubiese gustado poder disfrutar en la version C# 2.0 del Visual Studio .NET 2005.

Una de las primeras aplicaciones de los tipos anonimos lo encontramos en el desuso de los RowDataBound del GridView al mostrar informacion de vistas relativamente sencillas.

Gracias a que existen los tipos anonimos, puedes entregar un lista de elementos cuya estrutura NO se encuentra definida previamente.

Muchas veces, al usar un modelo de objetos basado en Collections and Business Entities, se hacia necesario utilizar el RowDataBound del GridView para poder enlazar los controles definidos en los TemplateColumn -que hayas diseñado en el GridView- con el dato que deseas.

Por ejemplo, si tenias un collection de Clientes y tienes una propiedad para cada cliente llamada TipoCliente.

Evidentemente NO hibas a enlazar en una columna del GridView solo el ID del TipoCliente.

Era requerido por el usuario final, mostrar la descripcion del TipoCliente en la grilla de datos.

Ese tipico escenario, era motivo para utilizar el RowDataBound del GridView, con la intencion de enlazar el Label que habias definido en el TemplateColumn con el dato que se encontraba en ICliente.TipoCliente.Descripcion que habias establecido segun el modelo de objetos a nivel de la capa de negocio del producto de software que te encontrabas construyendo.

Gracias a las clases anonimas y su facil uso, hemos dejado de usar los RowDataBound del GridView en algunos tipicos escenarios.

Esto ayuda mucho en la mejora del tiempo para el desarrollo del software.

Al poder definir un collection de tipos anonimos de una forma relativamente similar a: new { item.Entity.ID, item.Entity.Nombre, item.TipoCliente.Descripcion }; donde item es un objeto del tipo ICliente y naturalmente la clase Cliente implementa la interfaz ICliente, todo se hace mas sencillo y menos trabajoso para el developer.

Los tipos anonimos han logrado facilitarnos la vida, como NO tienes idea.

Thursday, August 07, 2008

Partial Class en Visual Studio .NET

Una de las mejoras del C# 2.0 son las Partial Class o clases parciales.

Partial Class permite definir una misma clase y sus miembros en archivos .cs distintos.

Una de sus primeras aplicaciones lo encontramos en los .designer de las ASPx web pages.

Pues en las versiones anteriores del Visual Studio .NET previas al 2005 los elementos definidos en el diseñador de las paginas ASPx eran plasmados en un solo archivo aspx.cs.

Lo cual se le hacia muy complicado gestionar al Visual Studio .NET 2002 y 2003, por ejemplo.

Hoy esto ha sido superado. Facilitando el manejo del designer y la estabilidad del Visual Studio .NET 2005 y con mayor razon en el Visual Studio .NET 2008.

Usar las Partial Class es un primer ejemplo del Divide y Venceras.

Thursday, July 31, 2008

MARS MultipleActiveResultSets True

Cuando estas trabajando con SqlDataReader para obtener informacion del SQL Server 2005 muy probablemente te encuentres con este mensaje al ejecutar el metodo ExecuteReader del SqlCommand:

There is already an open DataReader associated with this Command which must be closed first.

En terminos sencillos, se nos dice, que ya tenemos un SqlDataReader que se encuentra abierto y NO seria posible aperturar otro al mismo tiempo, mientras NO se cierre el primero.

Para este incidente, el SqlServer2005 brinda la posibilidad de agregar una propiedad al ConnectionString para permitir multiples SqlDataReader abiertos, al mismo tiempo.

Agregando MultipleActiveResultSets=True al ConnectionString se resuelve el problema.

Sin embargo recuerda que esta facilidad solo esta permitida en SQL Server 2005 y superiores.

En la version del SQL Server 2000 esta propiedad para el ConnectionString NO esta factible de utilizar. Por lo que el error aun prevalecera.

Monday, July 28, 2008

SetValue PropertyInfo FieldInfo Struct

Cuando defines tus Business Entities como structuras y NO como clases, es decir como struct.

Estableciendo sus diferentes atributos, para que posteriormente manejar el mapping correcto con su correspondiente tabla a nivel de base de datos, requeriras de una mecanismo generico para hacer la lectura de los registros de dicha tabla de base de datos hacia una coleccion de Business Entities, para manejarlos como tal dentro del mundo .NET

Hasta alli, todo relativamente normal.

Pero al usar un struct para definir cierto Business Entity, te daras cuenta que el metodo SetValue del PropertyInfo o el FieldInfo -dependiendo lo que estes usando para definir las propiedades o atributos de tu Business Entity- NO estan funcionando como tu esperas.

Lo que sucede es que las estructuras o struct, son tipos de datos por valor a diferencia de las clases o class.

Y este es uno de los puntos en contra al utilizar estructuras o struct para definir tus Business Entities.

En este incidente la clase ValueType resuelve tu problema.

TEntity entity = new TEntity();

Debera ser reemplazado por:

ValueType entity = new TEntity();

Dentro del bucle que este leyendo el SqlDataReader para iterar cada uno de los registros de la consulta que hayas realizado, mapeando cada uno de estos registros dentro de su Business Entity para retornar finalmente a una coleccion de Business Entities, a quien haya utilizado el metodo generico que implementaste.

IEnumerable ExecuteReader( String sql ) where TEntity : struct

Vale recalcar que es importante utilizar la clausula where TEntity : struct para poder instanciar el template TEntity dentro de la implementacion de dicha funcion y para poder castearlo a un ValueType, posteriormente.

Wednesday, July 23, 2008

Top Down versus Bottom Up

Cuando desarrollamos software con conectividad a Base de Datos, nos encontramos con diferentes herramientas, en el mercado, que facilitan la construccion de los Business Entities a partir de una estructura de datos relacional.

El resultado es alentador. Gracias al Drag & Drop o algo relativamente similar obtenemos los Business Entities para el mundo .NET desde el conjunto de tablas que se encontraban ya definidas en la Base de Datos.

Esta es una perspectiva Bottom-Up.

Pues partimos del nivel mas bajo de la arquitectura de un producto de software, la Base de Datos, para facilitar la contruccion de las demas capas de la arquitectura, aquellas que estan por encima de la Base de Datos.

Pero existe la posicion contraria. Un punto de vista distinto, llamado Top Down.

A partir del cual prototipeamos las interfaces de usuario, con las cuales este -el usuario- ha de interactuar con el producto de software que vayamos a construir, para ir construyendo conceptualmente las demas capas de nuestra arquitectura de software.

Seguidamente un modelo de clases que se desprendera a partir de la discusion y analisis de los casos de uso, sera nuestro siguiente paso.

Dicho modelo de clases orientados al negocio del producto de software, que tenemos la mision de construir, estan relacionados en funcion a: herencia, asociacion, agregacion y otros mecanismos de relacion los cuales NO necesariamente deberian plasmarse tal cual en la estructura de datos final, ya en la Base de Datos.

Y he aqui la moraleja.

Ambas perspectivas tienen sus pros y contras, cada una de ellas validas desde sus respectivos puntos de vista.

Pero ambas perspectivas: Top Down y Bottom Up, se encuentran en ese punto. Aquel punto donde la conciliacion es el mejor fusible, para tener contentos a la mayoria, pero NO siempre la mejor solucion.

Para Bottom Up un Business Entity en terminos sencillos deberia ser tal cual una tabla que esta definida a nivel de Base de Datos. Tantas propiedades en cada Business Entity como columnas existan en la tabla correspondiente.

Por otro lado, Top Down propone algo diferente pues la relacion de una herencia o una agregacion a nivel de un modelo de clases de negocio NO se plasman tan facilmente a nivel de Base de Datos.

Menudo problema.

Monday, April 21, 2008

Web Service Software Factory

El Web Service Software Factory es una verdadera cochinada.

Más de cuatrocientos archivos que construye aquel bendito tool, de un modelo de NO mas de 20 tablas en mi base de datos, son prueba indubitable e insoslayable de la afirmación inicial.

Por cierto, recuerdo que tuve que renombrar a nivel del tool, todas la tablas e inclusive los campos de las mismas, para poder obtener un resultado relativamente decenten, en principio, a nivel de Business Entities.

Pero conforme vas haciendo cambios a nivel de la estructura de datos, te das con la amarga sorpresa, que esto trae como consecuencia que tengas que zambullirte en las cuchumil cuatrocientas clases creadas en el Data Access de tu solución.

Yo solo quiero hacer un UPDATE en un campo de una de mis tablillas. ¿Por que me complicas la vida?

¿Acaso no pensaron colocar un boton en el tool que diga algo asi como REFRESH?

En fin, esas son una de las razones por la que usar esta cochinada es una verdadera perdida de tiempo.

Nada como el BusinessLayer.Components y el BusinessLayer.Entities liberado hacer unos años atras, y que fue un golazo en su momento.

Hoy sin embargo, en los cuarteles de invierno, construyendose la version para LINQ aprovechando los lambda expression y clases anonimas para acelerar la construcción del Desarrollo de Software y que favorezca la estabilidad en dicha fase de producción.

Tan distante de las actuales realidades.

Thursday, March 27, 2008

Beta vs Release Visual Studio 2008

Cuando estas trabajando con el Visual Studio .NET 2008 version de evaluacion BETA, te sientes algo ofuzcado. Pero luego haces el cambio a la version RELEASE, la firme pe, la que se distribuye comercialmente y notaras ciertos cambios inmediatamente.

Uno de los cambios que se percibien con mayor claridad estan orientados a la velocidad con la que carga el Visual Studio .NET 2008 version comercial.

Haces click y ya tenemos el entorno de desarrollo abierto en el escritorio de trabajo. Sin tanto loading!

Y es que la version BETA se demora un siglo en abrirse y posteriormente cuando trabajas con la apertura de archivos en tiempo de diseño muestra cierto LAG.

Algo muy distinto en la version comercial.

Instala tu Visual Studio .NET 2008 ya!

Sunday, March 09, 2008

Page LoadControl UserControl OnInit

Cuando tecnicamente decides usar el Page.LoadControl( path ) para cargar dinamicamente en tiempo de ejecucion los UserControls definidos en tu web application, tienes que tener en mente ciertas caracteristicas que por cuestiones de diseño de ASP.NET son aplicables en este contexto.

Sucede que el evento OnInit del UserControl que se desea cargar dinamicamente no trabaja de la misma forma en la que se manifiesta cuando es cargado en tiempo de diseño.

En se caso, solo te queda realizar una llamada a un metodo que tu definiras en aquel UserControl donde estableceras explicitamente los EventHandlers de los Controles que alli este definidos.

Por ejemplo, si tuvieras un DataList, naturalmente es muy probable que necesites enlazarte al ItemDataBound de este DataList.

Algo que normalmente tendrias que definir en el OnInit del UserControl que contiene a este DataList.

Pero si este UserControl va a ser cargado dinamicamente en tiempo de ejecucion entonces te daras cuenta que algo no esta funcionando bien si lo haces de esa manera.

Por lo que corresponde realizar el enlace al ItemDataBound del DataList en el mismo metodo que es llamado por la pagina que contiene al UserControl para que en dicho metodo se realize dicho enlace.

Y ver que todo vuelve a la normalidad.

Tuesday, February 19, 2008

Planillas Electronicas SUNAT en Enero

La version 1.1 del software de Planillas Electronicas es una reverenda porqueria.

Por decir lo menos, merece aquel calificativo con todos los honores.

Alertas que no se ajustan a la realidad de los hechos. Lag en cada pantalla de la aplicacion. Y de pronto se congela tu aplicativo. Son algunas perlas del primer virus que debemos instalar en nuestra PC de acuerdo a Ley.

El reporte de alertas no brinda una interfaz amigable. Con toda seguridad en el primer año de la universidad hemos hecho mejores reporteadores, que aquel adefecio que vemos en este programita llamado planilla electronicas.

Todas las empresas del medio han tenido que moldearse a las caracteristicas que ha establecido SUNAT en el punto neuralgico de todo esto, con particular enfasis, conceptos remunerativos.

Sin embargo los conceptos remunerativos 2000 y posteriores no son posibles habilitar desde este programita. ¿Entonces para que diablos lo han puesto alli estos salvajes?

En fin, vergueza ajena nos embarga al ser obligado a usar este programilla de practicante de laboratorio.

Sunday, February 03, 2008

Sql Membership Provider

Cuando estas desarrollando un producto de software y decides que la authentication se realize a traves de Forms y NO a traves de otro mecanismo, por alguna circunstancia.

Debes evaluar si manejas los usuarios dentro del web.config. O decides manejar el provider de SQL, para este tipo de cosas.

Para lo segundo, debes ejecutar el aspnet_regsql que se encuentra en el folder correspondiente al .NET Framework 2.0 dentro de tu carpeta Windows.

Esta pequeña herramienta, te crea las tablas en la Base de Datos que tu hayas elegido utilizar para tu producto, con el prefijo aspnet para cada uno de los objetos de base de datos.

Lo curioso de todo esto es que, el tool, crea las tablas sin registros. Por ende, NO veras al user administrator por ningun lado.

Entonces debes crearlo manualmente para poder tener por lo menos al usuario: amo, dueño y señor de tu aplicativo, alli presente.

Ahora, cuando digo manualmente NO debe entenderse que hagas tu INSERT a nivel de Base de Datos.

Todo lo contrario, debes crear una pagina sencilla que permita utilizar el modelo de objetos que propone el .NET Framework dentro del namespace System.Web.Security, para crear el primer user y el primer role.

La clase Membership te brinda esta posibilidad a traves del metodo CreateUser y luego debes crear el role Administrators a traves de la clase Roles con el metodo CreateRole.

Finalmente asocias este role con tu primer user creado previamente, usando el metodo AddUserToRole de la clase Roles.

Pero aqui tenemos un pequeño detalle. Cada vez que realizes algun cambio en el web.config con respecto a la configuracion de tu provider, los usuarios creados hasta antes del cambio, NO podran ser visualizados luego.

Y tendras que llamar a esta pagina FirstStep para volver a crear el estado inicial de roles y usuarios.

Este ultimo detalle es una ladilla.

Pero tiene cierto fundamento logico. No te pelees con lo creado por los High Level Developers, esto ya esta disponible en el .NET Framework. Y se integra facilmente con todo el contexto del producto a nivel tecnico.

No te compliques la vida.

Row not found or changed

Uno de los exceptions que por lo general aparecen cuando estas trabajando con Linq to Sql, es el ChangeConflictException.

El mensaje tradicional correspondiente a este exception es: Row not found or changed.

Cuando recien estas construyendo el software. Muy probablemente te encuentres con este mensaje. Si no te calmas en encontrar la solucion, te podria sacar de tus casillas.

Lo que sucede es que generalmente la base de datos esta aun ajustandose, cambiando si un campo de la tabla permitira nulo o NO, por ejemplo. Si un tipo de dato BIT sera cambiado a un CHAR(1), por decir algo.

Y otras simpleces a nivel de base de datos.

Pero aquellos cambios, por la premura del tiempo o por alguna circunstancia, NO son plasmados tambien en el modelo que propone Linq To Sql, dentro de tu aplicativo.

Y he alli el origen del problema.

Cuando estas desarrollando software y te apoyas en Linq To Sql para facilitarte la construccion de los Business Entities, debes estar pendiente que la estructura de tablas de tu Base de Datos sincronize con las caracteristicas de los Business Entities asociada a cada tabla.

Al realizar una operacion de actualizacion o eliminacion contra la Base de Datos de un elemento en particular, Linq To Sql no construye la sentencia SQL en funcion a un WHERE mykeyfield = @mykeyfield

Linq To Sql realiza un WHERE en funcion al estado actual del registro previo al cambio.

Y si alguna caracteristica de tu Base de Datos NO esta sincronizada con el modelo de Linq To Sql, pues veras este mensajito constamente: Row not found or changed.

Por citar una ejemplo, que un campo en la base de datos haya sido cambio para NO permitir nulo, cuando antes si lo permitia. Pero sin embargo dicho cambio NO se realizo de la misma manera en el modelo de Linq To Sql, se entiende que para Linq To Sql aquel campo aun permite nulo.

Entonces al construir su WHERE, Linq To Sql, constuira una lista de campos para hacer el match del estado anterior del registro y con un myfieldchange IS NULL dentro de todos ellos.

En lugar de algo distinto al nosotros saber, que a nivel de Base de Datos, esto ya NO esta permitido.

En consecuencia, Linq To Sql NO puede encontrar el registro anterior, debido a que efectivamente este ya NO existe, bajo esas circunstancias.

La solución pasa por simplemente sincronizar la estructura de tu Base de Datos a nivel de campos con tu modelo de Linq To Sql.

Trabajo facil!

El arte de construir software

El desarrollo de software es un arte. El don de hacerlo simple y facil, pocos seres sobre la faz de la tierra pueden materializarlo.

La posibilidad de gestionar personas es una tarea algo distinta.

Hacerlos sentir a cada uno de ellos importantes. Coger sus buenas ideas y canalizarlas de alguna forma para que se sientan participes activos del producto a construir, es el reto.

Como Jefe de Proyectos tu requieres el cumplimiento de ciertas tareas, por parte de tus desarrolladores, lo mas ajustado al cronograma.

Pero existen ciertas tareas encomendadas que por su relativa complejidad requieren de tu apoyo.

Te encontraras con algunos que su idea, ciertamente, es buena. Solo debes ajustarla un tanto para que pueda engranar con el contexto. Recuerda, tu tienes la vision del bosque.

En otro casos, los más operativos aquella ideas no tienen mucho sustento. Se basan en un clasico COPY & PASTE luego un SEARCH & REPLACE para finalmente, tu al ver toda esa mazamorra, hacerle un SHIFT + DEL.

En fin, lo que sucede es que desarrollar software no es hacer CLICK & CLICK. O un nada ingenioso COPY & PASTE. Se requiere de cierto talento.

Dentro del mundo de los developers, ver algo distinto e interesantemente construido, por lo general se le califica, como "fumada", a primera vista. Pero luego se dan un tiempo para analizarlo y verlo detenidamente, y terminan por llamarlo: arte, en ciertos casos.

Y ese es el meollo del asunto desde un punto de vista lirico.

Cuando se requiere el cumplimiento de las tareas para ayer. Bienvenido tu COPY & PASTE, pero entonces saltara una pregunta. ¿Por que aceptaste una fecha asi?

Sunday, January 27, 2008

BECTA por el software libre

Asi es, la agencia gubernamental encargada del Desarrollo Informatico y Tecnologico del Sistema Educativo Britanico le dijo NO a Windows Vista y Office 2007.

Duro golpe a la tecnologia vanguardista.

BECTA propone reducir hasta en un 50% los costos utilizando software libre.

Alguna distribucion de Linux en lugar del agradable Windows Vista y Open Office en lugar del precioso Office 2007.

BECTA en terminos sencillos no encuentra argumento solido para dar el visto bueno para el despliegue de ambas nuevas herramientas de Microsoft, en los centros de enseñanza britanicos.

Me imagino que ahora, vendra Bill Gates y en reunion privada con la Reina de Inglaterra haran un sancochado. Y tendremos Windows Vista con Office 2007 corriendo en cada PC del Reino Unido.

¿Alguien lo duda?

Bill Gates y la creacion

La historia de los tiempos segun Linux.

1. Al principio Dios creó el Bit y el Byte. Y de ellos creó la Palabra.

2. Y hubo dos bytes en una palabra; y nada más existía. Y Dios separó el Uno del Cero; y vio que esto era bueno.

3. Y Dios dijo: "Hágase el Dato". Y así sucedió. Y Dios dijo: Que los Datos vayan a su correspondiente lugar. Y creó los disquetes, discos duros y los CD

4. Y dijo Dios: "Háganse los computadores, así habrá lugar para poner los disquetes, discos duros y CD". Así Dios creó los computadores y los llamó Hardware.

5. Y no había Software aún. Pero Dios creó programas, chicos y grandes. Y les dijo: "Vayan y multiplíquense por si mismos y llenen toda la Memoria".

6. Y dijo Dios: "Crearé al Programador; y el Programador hará nuevos programas y gobernará sobre los computadores, programas y datos".

7. Y Dios creó al Programador y lo puso en el Centro de Datos; y Dios le mostró al Programador el Árbol de Directorios y le dijo: "Puedes usar todos los volúmenes y subvolúmenes, pero NO USES Windows".

8. Y Dios dijo: "No es bueno para el Programador este solo". Tomó un hueso del cuerpo del Programador y creo una criatura que buscaría al Programador, lo admiraría y amaría las cosas que hiciera el Programador; y Dios llamó a la criatura el Usuario.

9. Y el Programador y el Usuario fueron dejados bajo el DOS desnudo y vio que esto era bueno.

10. Pero Bill fue más listo que todas las otras criaturas de Dios. Y Bill le dijo al Usuario. "¿Realmente Dios te dijo que no ejecutaras ningún programa?"

11. Y respondió el Usuario: "Dios nos dijo que podíamos usar cualquier programa y cualquier dato pero nos dijo que no ejecutáramos Windows o moriríamos."

12. Y Bill dijo al Usuario: "¿Cómo puedes hablar sobre algo que no has probado? En el momento que corras Windows te convertirás en igual a Dios. Podrás crear cualquier cosa que desees con un simple clic del ratón."

13. Y el Usuario vio que los frutos del Windows eran buenos y fáciles de usar. Y el Usuario vio que cualquier conocimiento era inútil, pues Windows podía reemplazarlos.

14. Así que el Usuario instaló Windows en su computador y le dijo al Programador que era bueno.

15. Y el Programador empezó a buscar nuevos drivers. Y Dios le preguntó: "¿Qué buscas?" Y el Programador respondió: "Busco nuevos drivers porque no puedo hallarlos en el DOS. Y Dios dijo: "¿Quién te dijo que necesitabas drivers? ¿Ejecutaste Windows?" Y el Programador dijo: "¡Fue Bill quien nos lo dijo!"

16. Y Dios dijo a Bill: "Por lo que hiciste serás odiado por todas las criaturas. Y el Usuario estará siempre descontento contigo. Y siempre venderás Windows."

17. Y Dios dijo al Usuario: "Por lo que hiciste Windows te decepcionará y se comerá todos tus recursos, y tendrás que usar programas piojosos; y siempre confiaras en la ayuda del Programador."

18. Y Dios dijo al Programador: "Porque oiste al Usuario nunca serás feliz. Todos tus programas tendrán errores y tendrás que arreglarlos hasta el fin de los tiempos."

19. Y Dios los echó del Centro de Datos y cerró la puerta y la aseguró con un contraseña.

20. Fallo de protección general. Pantallita azul!!! (Press any key).

Saturday, January 26, 2008

Usando Interfaces en Linq To Sql

Una de las cosas que me incomoda de Linq To Sql, es que no brinda la posibilidad inmediata de construir un modelos de clases orientada al uso de Interfaces.

En terminos sencillos, Linq To Sql te brinda un modelo de clases basada en el modelo entidad relacion de tu base de datos.

Si el objetivo es llenar un GridView y mas nada. Seguramente estaras contento con Linq To Sql. Pero si no. Uhmmm.

Un producto de software no solo es llenar GridViews. Es mucha más que solo aquello.

Las reglas del negocio traen como consecuencia contruir un modelos de clases basada en la implementación de Interfaces: IUser, IGroup, IPurchaseOrder, IInvoice and others.

Te das cuenta. ¿Por que? Pues porque es la forma profesional de construir software.

Pero me quita tiempo. Dicen algunos. Si pues efectivamente, construir software no es hacer click and click.

¿Cual es el objetivo desde la perspectiva de nosotros, los Jefe de Proyecto?. Pues que el producto de software pueda escalar en el mediano y corto plazo. Desde el punto de vista tecnico. Sin embargo desde el punto de vista comercial, de la casa de software, es entregar el producto a tiempo.

Estas dos posiciones se contraponen y se enfrentan en algun momento.

Y es justamente el Jefe de Proyecto, quien ponen de manifiesto toda su capacidad para satisfacer ambos objetivos.

En consecuencia, Linq To Sql nos esta nativamente orientada a satisfacer el objetivo tecnico. Esta orientada mas al otro objetivo, el comercial.

Entonces ¿que hacer?. Meterle mano para que tu producto de software pueda ser escalable en el tiempo. Y sino quiero. Pues click and click. Tranquilo, no se te quemara neurona alguna. Je!

Monday, January 21, 2008

Linq To Sql y Business Entities

Linq To Sql basicamente facilita la construccion de los business entities, que antes teniamos que construir a pedal, si no contabamos con un tool como CodeSmith o NHibernate, que se especializaban en este tipo de cosas, los business entities.

Y ademas, Linq To Sql facilita las operaciones contra la Base de Datos.

En terminos sencillos, Linq To Sql es la aplicacion de un punto de vista para la construccion de la capa de negocios de un producto de software, en particular.

Muy valido punto de vista, por cierto.

Pero este punto de vista de construir software, dista mucho de la forma actual en la que se ha venido desarrollando productos de software, por los common developers de hoy. Muchos de ellos no usan business entities o tienen el paradigma de los stored procedures entre las cejas.

Algo que es contrastable con el uso de Linq To Sql.

Toda vez que este, te brinda inmediatamente los business entities a partir de la estructura de tu base de datos. Y ademas, el uso de los stored procedures no son estrictamente necesarios, al empezar el desarrollo de una aplicacion desde cero.

Para aquella gente que estaba acostumbrada a desarrollar aplicaciones sin business entities o que no conciben una base de datos sin stored procedures, sera un golpe muy duro de asimilar.

Y muchos de ellos que son renuentes al cambio, veran en esta propuesta de Microsoft, una de las tantas cosas por las que consideran no seguir ciertas mejoras, ideadas y aplicadas por arquitectos de software ubicados en la cuspide de la piramide.

Algunos de aquellos developers, los menores en cantidad, con algun buen argumento. Otros tantos, la gran mayoria, por que veran que su aplicativo que les costo tres años en construir pero que aun se cae a pedazos estando en producción y que recibe constantes correos electronicos de sus usuarios con el repetido asunto "Y ahora sabes que sucedio otra vez con tu sistema", vean que el piso les baila como no tienes idea.

En fin, a veces el cambio es seguir un camino o alejarte del mismo. Seguir la antorcha o buscar el sendero de la verdad.