Jaimir G. blog

Experiencias de mi trabajo diario construyendo soluciones sobre plataformas Microsoft
Gracias Microsoft® por Windows 7™

Yo sé que desde este espacio, no todos consideren esta nota como algo imparcial. Sin embargo la escribo como el socio de una empresa de desarrollo de software que se ve obligado a adquirir continuamente hardware para los miembros de los equipos de desarrollo.

No voy a referenciar Benchmarks realizados por prestigiosas empresas o estadísticas de ventas (que entre otras cosas ya superaron las propias expectativas de Microsoft). Simplemente como una persona que puede experimentar como la inversión en hardware se ha maximizado y disminuido el costo de propiedad, gracias a la forma como Windows 7™ explota y utiliza los recursos de computo de las estaciones de trabajo.

Las personas que trabajan en esta estaciones (las cuales no fueron repotenciadas al momento de la migración a Windows 7®) me han manifestado que su experiencia como usuarios ha mejorado sustancialmente, en maquinas con 2 gigas de memoria solamente.

En mi caso, el primer semestre adquirí un portátil AMD x64 con 4gb de memoria, el cual traía instalado Vista Ultimate x64, y era frustrante sentir como la operaciones cotidianas congelaban la maquina y hacían pesado su desempeño. Vista calificó esta máquina como 3.6, apenas la actualice a Windows 7® Ultimate para x64, la calificación subió a 4.3, pero lo importante es que el rendimiento también subió exponencialmente. Hace poco tuve que preparar una charla, tenia abierto: Visual Studio 2008, SQL Server 2008, Camtasia Studio, LiveMeating y una maquina virtual, y aun podía seguir trabajando sin ningún problema.

Adicionalmente al rendimiento, debo manifestarme fan de la nueva Barra de Tareas, su facilidad de manejo y sobre todo las miniaturas de cada ventana de aplicación, resultan muy útiles a la hora de desarrollar software. Lo más importante, Windows 7® reafirma mi convicción que cualquier programa es factible de mejorarse, sin importar el grado de madurez en el que esté, si no me creen los invito a ver la Calculadora y se encontraran con un aplicativo totalmente renovado.

Mi especialidad no son los temas de plataforma y esta podrá se la reseña menos técnica sobre Windows 7® que hayan leído, simplemente tómenlo como la opinión de otro usuario más, espero que les sea de utilidad.

ScreenCast en Community Media Center

Como dirían las abuelas "no hay mal que por bien no venga". Gracias a la colaboración de Karina Leal y Sergio Victorio los videos de los screencast y webcast que he realizado se encuentran ahora publicados en el sitio web .

En este portal pueden encontrar videos sobre temas de desarrollo y plataformas Microsoft®, adicionalmente la programación de los próximos WebCast en vivo y la programación de los eventos presenciales para todos los países de la región latinoamericana. Por tratarse de expositores de la misma región todo el material y los eventos son en español y dirigidos a nuestras audiencias. Por estos días se encuentran realizando el concurso "Community Quest", pueden usar el link del banner de la derecha.

Aunque corregí cada link del blog, aquí una lista de los videos publicados:

Windows Presentation Foundation usando Microsoft Visual Studio 2008.
Windows 7- Creando proveedores de sincronización.
Administración del proyecto e ítems de trabajo.
Windows Comunication Foundation Y Typed DataSet.
Lleve su Aplicación Web al siguiente nivel con Minería de Datos.
Final del servicio Soapbox en MSN video

Antes de iniciar, agradezco a William por informarme que los videos de mi blog no estaban funcionando.

Desafortunadamente por temas de derecho de autor o simplemente de mercado, el portal de MSN videos tomó la decisión de cancelar de forma unilateral el servicio de publicación de videos para los habitantes de ciertos países. Quienes quieran conocer que países están excluidos de este servicio pueden dirigirse a las políticas de uso del portal en la siguiente dirección http://help.live.com/help.aspx?mkt=en-US&project=tou&querytype=keyword&query=coc#PU.

Para quienes han leído mi blog, saben que los ScreenCast que he publicado se encontraban en SoapBox y por ende todos los vínculos actuales están desactualizados. Estoy buscando un portal que me de la misma calidad de servicio, permitiéndome subir los videos completos, sin tener que partirlos en fracciones de 10 minutos. Si alguien tiene alguna sugerencia se los agradecería. Por ahora un poquitico de paciencia mientras soluciono el problema.

Consejo de Arquitectos - Cliente Liviano vs Cliente Enriquecido

Hola,

Para los asistentes al Consejo de Arquitectos sobre la selección de la interfaz correcta: liviana o enriquecida.  Aqui pueden obtener una copia de la presentación.

Sincronizando UpdatePanels

Partamos de lo básico, un control <asp:UpdatePanel> viene en las extensiones de AJAX para ASP.Net y tiene por objetivo marcar una región de la pagina web. Interactuando con el <asp:ScriptManager>, el UpdatePanel puede actualizar el contenido de esa región de la página en respuesta a un llamado realizado a través de AJAX. En su forma más simple, el UpdatePanel es capaz de tomar todos los eventos de los controles contenidos y convertirlos en llamados asincrónicos a través de AJAX. Este mecanismo reduce la cantidad de código en javascript a cero (0) y permite implementaciones rápidas de AJAX en sitios web donde los desarrolladores no son expertos en el tema. También es cierto que este no es la mejor opción en todos los escenarios y se debe utilizar de forma conservadora.

El principal problema de esta estrategia de programación está en sincronizar varios UpdatePanels que se encuentran en la misma página web.

Siguiendo el ejemplo de la imagen 1: se necesita que cada vez que se seleccione un nodo del árbol de la derecha (región roja) se muestre el nombre de la ciudad en el texto superior (región verde), y cada vez que se marque o se desmarque una ciudad del mismo árbol con un check, la ciudad debe alimentar la lista del grilla de la izquierda (región azul) .

Primero, la peor solución es encerrar todos los controles dentro de un único UpdatePanel, ya que esto desvirtúa una de las principales ventajas de usar AJAX , la cual es reducir la cantidad de información que viaja entre el cliente y el servidor para responder a un evento de usuario.

Segundo, deben analizar la funcionalidad implícita de cada control antes de incluirlos dentro de un UpdatePanel, por ejemplo, el árbol (TreeView) perite marcar y desmarcar nodos de forma implícita y para tal efecto NO debe realizar viajes entre el cliente y el servidor, por eso la región roja NO se encuentra dentro de un UpdatePanel. Adicionalmente, en caso de controles proveídos por terceros, deben revisar la documentación del fabricante para asegurarse que el comportamiento esperado del control no se vea afectado por el UpdatePanel. Todos los controles de última generación vienen con esta información técnica.

Ahora bien, las regiones se deben actualizar frente a diferentes eventos del árbol: OnNodeSelectionChanged para la región verde y OnNodeChecked para la región azul. Por tal razón no se puede dejar el comportamiento por defecto del UpdatePanel el cual "siempre" actualiza su región (léase: 'envía y recibe información') en cualquier acción de tipo AJAX. Es entonces que resulta necesario sincronizar la acción de los UpdatePanels dependiendo de las necesidades funcionales de la página.

Inicialmente, se debe asegurar que el ScriptManager habilite el rendering parcial de la página web:

<asp:ScriptManager EnablePartialRendering="true" ID="ScriptManager1" runat="server"></asp:ScriptManager>

 Es cierto que en la versión 3.5 de este control, la opción EnablePartialRendering viene en verdadero por defecto, pero….

Para la región verde, se necesita que el control de texto muestre el nombre del nodo seleccionado. Para tal efecto, esta sección se enmarca con un UpdatePanel, el cual tenga la opción UpdateMode en "Conditional".

Esta opción le indica al UpdatePanel que no debe enviar información en todas las operaciones de AJAX y que tampoco actualizará esta región siempre. La condición bajo la cual se actualiza esta región se especifica en la colección de "Triggers"

<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
   <contenttemplate>
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
   </contenttemplate>
   <triggers>
      <asp:AsyncPostBackTrigger ControlID="UltraWebTree1" EventName="NodeSelectionChanged" />
   </triggers>
</asp:UpdatePanel>

 Existen dos clases de Triggers:

PostBackTrigger: En los cuales se indica cual control que se encuentre dentro de la región del UpdatePanel dispara la operación AJAX a través de sus eventos.

AsyncPostBackTrigger: Asocia la ejecución de la operación AJAX a un evento especifico (no a cualquiera) de un control que NO se encuentre dentro de la región del UpdatePanel.

Adicionalmente existe la propiedad ChildrenAsTriggers. Le indica al UpdatePanel que además de los Triggers configurados, los eventos de los controles contenidos en la región enmarcada se consideran para ejecutar operaciones AJAX.

En el ejemplo, la región enmarcada en verde, se debe actualizar frente al evento NodeSelectionChanged del árbol y no debe ejecutarse ninguna operación AJAX frente a PostBack realizados por los controles internos, en este caso un label.

Para la región azul, se cambia la propiedad ChildrenAsTriggers a verdadero con el fin de permitir que los eventos ejecutados por la grilla interna también se ejecuten a través de operaciones de AJAX.

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="True" UpdateMode="Conditional">
   <triggers>
      <asp:AsyncPostBackTrigger ControlID="UltraWebTree1" EventName="NodeChecked" />
   </triggers>
   <contenttemplate>
      <igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server" Height="100%" Width="100%"

 En conclusión, el UpdatePanel es una poderosa estrategia que habilita rápidamente a los equipos de desarrollo a implementar estrategias AJAX dentro de sus aplicaciones web, sin embargo, es necesario ahondar en todas la opciones diferentes a las utilizadas por defecto para lograr un equilibrio en las páginas y un desempeño optimo de la aplicación.

Workshop de Linq (.NET Language-Integrated Query)

Te invitamos a que participes de nuestro Workshop de Linq (.NET Language-Integrated Query) una tecnología que típicamente se usa operaciones con base de datos, lo cual está dejando a un lado una de las más grandes ventajas del uso de Linq como una tecnología que permite la realización de consultas sobre estructuras de datos y conjuntos de objetos. Ven y particip de nuestro Workshop para sacarle más ventajas a esta potente tecnología

 

MARTES 9 DE JUNIO, 6:30PM

¡Regístrate Ya!

Registrarse Evento en línea

Registrarse Evento Presencia

Posted: Fri, Jun 5 2009 0:26 by Jaimir Guerrero | with no comments
Filed under:
Desarrollar aplicaciones y servicios Web a gran escala

El equipo de Event Production de Microsoft MSDN & TechNet para América Latina, me invitó a dictar un webcast sobre la manera que Microsoft SQL Server 2008 y otros servicios de plataforma de datos le ayudan a crear su arquitectura y desarrollar sus aplicaciones para lograr gran rendimiento, baja latencia y alta disponibilidad, además de predecir el rendimiento y el costo total. Los interesados en el evento se pueden conectarse y compartir sobre los últimos adelantos en esta área.

Actualización:  Como el evento ya paso pueden bajar el video utilizando el mismo URL.

 URL del Evento: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032407066&Culture=es-AR

Fecha: el 2-jun-2009 a las 3:00:00 PM (GMT -5).

Antes de conectarse les recomiendo los siguientes sitios para asegurar que su computador tenga la configuración necesaria:

  1. Descarga cliente Live Meeting 2007
  2. Ayuda Live Meeting 2007 (Inglés)
  3. Recomendaciones con Live Meeting 2007  
{Activa} tu Curiosidad

Microsoft Colombia y explícitamente el área de Divulgación De Nuevas Tecnologías, lanzaron este mes de abril el portal web {Activa} www.microsoftactiva.com, desde mi perspectiva personal, es un esfuerzo muy interesante para unificar en un solo portal diferentes programas y eventos dirigidos a los profesionales de tecnología interesados en conocer, aplicar o que ya son usuarios de productos de Microsoft®, no solo desde la punto de vista del desarrollador de software, sino también para la gente de infraestructura y plataforma. Igual, nos reúne en diferentes niveles: estudiantes, profesionales, independientes, empresas de tecnología, etc.

A través de este portal se pueden enterar de eventos, capacitación (en algunos casos gratuita), programas e iniciativas realizadas por Microsoft® Colombia y dirigidas a cada uno de ustedes. Por ejemplo, sabían que cada semana después de las 6:00 pm se están realizando dos Workshops sobre tecnologías puntuales.

¿Qué deben hacer? Simplemente visitar el sitio web www.microsoftactiva.com. Si quieren recibir información a través de correo, suscribirse al MSDN o al Technet flash. Sí quieres participar de los eventos, inscribirte y ASISTE.

Dos puntos a resaltar:

  1. Es realizado directamente por Microsoft Colombia y entre sus objetivos está la de mostrar soluciones a problemas dentro del contexto colombiano, utilizando talento colombiano.
  2. Para que estas iniciativas tengan continuidad a largo plazo lo único que se necesita es que participemos, simplemente eso, que asistamos a los eventos, que apoyemos los grupos y comunidades de nuestras ciudades, que entreguemos retroalimentación de los temas, que solicitemos eventos de interés, etc..

Espero que les guste y apoyen este proyecto para todos tengamos un beneficio común.

{Windows Day}

El 3 de marzo, día de mis cumpleaños, Microsoft nos invita a un evento online, interactivo, en el que les ofrecerá una experiencia similar a la que tienen asistiendo a una conferencia presencial en el mundo real, pero con la ventaja de poder asistir a las sesiones y tener acceso a los contenidos desde la comodidad de su PC. Está dirigido a los dos mundos: profesionales IT y desarrolladores de software.

Windows Day

El sitio oficial del evento donde se podrán registrar y asistir es www.microsoft.com/latam/windowsday. Sin embargo ya se ha colgado mucha información al respecto, la cual pueden leer y obtener a través de los blogs del evento en http://windowsdayblog.net . Además para los amantes de en Twitter: http://twitter.com/msdntechnet y los agrupados en FaceBook http://www.facebook.com/event.php?eid=47845639610 (ojo no se registren en Facebook solo por el sitio web oficial).

En estos links pueden encontrar la agenda los eventos, los contenidos y mucha más información. Ahhh y además podrán chatear con expertos en vivo y en directo el día del evento. No se lo pierdan.

Invitación al Workshop productividad con Visual Studio 2008

Microsoft Colombia inicia un ciclo de charlas, dirigidas a la comunidad de desarrolladores de software. El objetivo es el de mantenernos actualizados sobre los últimos avances de tecnología y la funcionalidad de sus herramientas de programación. Les paso los datos de la primera reunión y próximamente les estoy comunicando toda la agenda completa. Para las personas que no se encuentran en Bogotá pueden ver la trasmisión vía Live Meeting.

Workshop

 Productividad con Visual Studio 2008

Los invitamos a participar en nuestro Workshop de Productividad con Visual Studio 2008,  donde veremos cómo obtener el máximo provecho de esta herramienta para desarrollar aplicaciones más rápidas.

Miércoles 11 de Febrero a las 6 PM.

Speaker: Jaimir Guerrero, MVP y arquitecto de soluciones de software

Lugar:  Microsoft Colombia

Bogota, Cr 7 # 71 -21 Torre B Piso 15

Auditorio General

   

Transmisión Live Meeting

            Meeting ID:        35e5717b85e9442eae5249864c68e278

            Entry Code:        6019

            Location:          Click Aqui

 

Si está interesado en asistir, envíe un correo a: devcol@microsoft.com

 

 

 

Riesgos de la ley 1273 del 2009 para delitos informáticos.

Gracias a Juan Carlos Coronado.
Gracias a Juan Carlos Coronado por la ilistración

El 5 de enero del 2009 entró en vigencia la nueva ley colombiana contra delitos informáticos denominada "De la Protección de la información y de los datos".  Basada en leyes de otros países, el espíritu de la misma es convertir en delito todos los "atentados" contra la información y los sistemas informáticos dándole castigos ejemplares a nuestros "Hackers" criollos.  La verdad, el tema dejó de ser un chiste pues las penas van desde 48 a 96 meses de cárcel y en multas de 100 a 1000 salarios mínimos legales mensuales vigentes.

A primera vista la ley no solo parece justa sino necesaria, pues la principal actividad criminal informática en este país es clonar nuestras tarjetas bancarias con el fin de robarnos los fondos, por lo tanto merecen todo el peso de la ley.  Además le da que pensar a más de un estudiante desocupado de ingeniería de sistemas que quieren parecerse a "Hugh Jackman" en la película "Swordfish" y lo único que logran es crear más de una molestia.

Sin embargo, como toda ley de la nación, ésta incluye un mico que incrementa el riesgo de ejercer nuestra profesión:

"Artículo 269D: DAÑO INFORMÁTICO. El que, sin estar facultado para ello, destruya, dañe, borre, deteriore, altere o suprima datos informáticos, o un sistema de tratamiento de información o sus partes o componentes lógicos, incurrirá en pena de prisión de cuarenta y ocho (48) a noventa y seis (96) meses y en multa de 100 a 1000 salarios mínimos legales mensuales vigentes."

Podría asegurar que todos los ingenieros de sistemas que trabajamos en mesas de soporte, hemos cometido nuestros pecadillos: Borrar carpetas de usuarios, formatear discos sin tomar copias, eliminar información de bases de datos, actualizar versiones de programas que hacen incompatibles los datos actuales, etc.  Anteriormente, a parte del susto del momento y de vernos obligados recuperar la información, todo termina como una anécdota con la promesa de no volver a hacerlo, incluso después de los años nos da risa cada vez que nos acordamos.   A partir de la nueva ley, el propietario de la información nos puede denunciar (no demandar) cual delincuentes y si un juez lo considera, podríamos terminar en la cárcel.

Para hacerlo más interesante, según el artículo 269H, la pena se puede duplicar sí el hecho se da "Sobre redes o sistemas informáticos o de comunicaciones estatales u oficiales o del sector financiero, nacionales o extranjeros.", esto incluye a los hospitales públicos del estado.

La ley existe y es necesaria, pero ahora se incrementa el riesgo de ejecutar nuestro trabajo.  Muchas personas se preguntan: ¿por qué en otros países la hora ingeniero de soporte es tan costosa? o ¿por qué las empresas multinacionales de informática cobran tan alto sus servicios?   Una de las razones principales es porque estas compañías toman pólizas de seguro que mitigan estos riesgos, y esos costos incrementan el valor de sus servicios.   Creo que en Colombia debemos considerar seriamente seguir este ejemplo.

No queda por demás recomendarles que mantengan sus copias al día, prueben que las copias restauran y dejan sus sistemas en el estado esperado; antes de hacerle mantenimiento a una máquina tengan una copia actualizada, actualicen la ficha de inventario de cada computador; NUNCA realicen pruebas de software sobre servidores que están en producción, tengan siempre un ambiente de pruebas al menos con maquinas virtuales; y finalmente, no toquen ningún computador, así se sea de su mejor amigo, sin la autorización explícita del propietario (preferiblemente por escrito).

El texto completo de la ley lo pueden obtener en http://web.presidencia.gov.co/leyes/2009/enero/ley127305012009.pdf.

Error “Attempted to read or write protected memory. This is often an indication that other memory is corrupt” con Oracle.

Al ejecutar un procedimiento almacenado de Oracle desde una aplicación que utiliza ADO.NET, se genera el siguiente mensaje de error:


Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:

[AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.]

   Oracle.DataAccess.Client.OpsSql.ExecuteReader(IntPtr opsConCtx, IntPtr& opsErrCtx, IntPtr& opsSqlCtx, IntPtr& opsDacCtx, IntPtr& opsReaderErrCtx, IntPtr opsSubscrCtx, Int32& isSubscrRegistered, Int32 bchgNTFNExcludeRowidInfo, Int32 bQueryBasedNTFNRegistration, Int64& query_id, OpoSqlValCtx*& pOpoSqlValCtx, String pCommandText, OpoDacValCtx*& pOpoDacValCtx, IntPtr[] pOpoPrmValCtx, String[] ppOpoPrmRefCtx, OpoMetValCtx*& pOpoMetValCtx, Int32 NoOfParams) +0
   Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) +2789
   Oracle.DataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior) +42
   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10


En internet se encuentran muchas razones validas, conflicto entre las versiones del cliente Oracle y el servidor, algunos problemas de configuración del ODP.NET y el Oracle Cliente (home, tsnames, register, etc..), que no permite seleccionar la versión correcta de las librerías cliente al momento de comunicarse con el servidor. Básicamente cualquier cosa que afecte el búfer de ejecución o la transferencia de datos entre cliente y servidor de Oracle puede generar esta excepción. Sin embargo, todavía existen muchos reportes en los foros donde se corrigen todo los puntos referentes al ambiente y la configuración de la plataforma y aun sigue presentándose el error.

Debo decir que antes de llegar a estas conclusiones y solucionar el problema, pase mucho tiempo probando diferentes soluciones y siguiendo recomendaciones hechas en muchos foros. Cuando nada de esto funciono, empezamos a comparar que diferenciaba este procedimiento en especial a los demás y de allí llegamos al acercamiento que el problema estaba en la declaración de los parámetros. Para esta investigación conté con el apoyo de Beatriz Sanchez, una compañera que domina PL de Oracle.

En mi caso se presentaban las siguientes características:

  1. El procedimiento almacenado tiene un parámetro marcado como "IN OUT" de tipo "DATE".
  2. Dentro del cuerpo del procedimiento almacenado se asigna un nuevo valor al parámetro.
  3. En el comando de ADO.NET, en la colección de "Parameters", este parámetro se adiciono como "DbType.DateTime".

Colocando cometarios para inhabilitar parte del código del procedimiento almacenado, llegamos a la conclusión que el error se generaba cuando se cambiaba el valor o se asignaba un nuevo valor al parámetro, como esta misma acción se realiza con parámetros de tipo "VARCHAR" y "NUMERIC" sin ningún error, nos concentramos en la declaración del tipo de dato del parámetro.

Es importante aclarar que cuando los parámetros en Oracle son definidos utilizando los tipos genéricos ADO.NET ("DbType") el ODP.NET realiza el respectivo mapeo a los tipos "OracleDbType". En el caso del "DbType.DateTime" es mapeado a "OracleDbType.TimeStamp" con el fin de conservar las milésimas de segundo, pues el tipo de dato en Oracle "DATE" solo almacena hasta segundos.

La primera aproximación fue editar la definición del procedimiento en Oracle y cambiar la declaración del parámetro al tipo de dato "TIMESTAMP", sin embargo el error se volvió a generar, lo cual nos lleva a la primera conclusión:

"Los parámetros de un procedimiento almacenado de tipo "TIMESTAMP" declarados como "IN OUT" para poder asignarles un nuevo valor, generan error "System.AccessViolationException" al ejecutarse desde ADO.NET."

Después cambiamos en la declaración del comando de ADO.NET y utilizando "OracleParameter" se asignó el tipo de dato "OracleDbType.Date". En este caso la aplicación corrió sin errores y permitió cambiar el valor del parámetro dentro del procedimiento. Lo cual nos lleva a otras dos conclusiones:

"El mapeo realizado por ODP.NET entre "DbType" y "OracleDbType" no es acertado en todos los escenarios y en varios casos es necesario crear un función propia que realice la equivalencia", esta es nuestra función.

private static OracleDbType EquivalenciasOracle(DbType dbType)
{
    switch (dbType)
    {
       case DbType.AnsiString: return OracleDbType.Varchar2;
       case DbType.AnsiStringFixedLength: return OracleDbType.Char;
       case DbType.Binary: return OracleDbType.Raw;
       case DbType.Boolean: return OracleDbType.Byte;
       case DbType.Byte: return OracleDbType.Byte;
       case DbType.Currency: return OracleDbType.Decimal;
       case DbType.Date: return OracleDbType.Date;
       case DbType.DateTime: return OracleDbType.Date;
       case DbType.Decimal: return OracleDbType.Decimal;
       case DbType.Double: return OracleDbType.Double;
       case DbType.Guid: return OracleDbType.Raw;
       case DbType.Int16: return OracleDbType.Int16;
       case DbType.Int32: return OracleDbType.Int32;
       case DbType.Int64: return OracleDbType.Int64;
       case DbType.Object: return OracleDbType.Blob;
       case DbType.SByte: return OracleDbType.Int16;
       case DbType.Single: return OracleDbType.Single;
       case DbType.String: return OracleDbType.NVarchar2;
       case DbType.StringFixedLength: return OracleDbType.NChar;
       case DbType.Time: return OracleDbType.TimeStamp;
       case DbType.UInt16: return OracleDbType.Int16;
       case DbType.UInt32: return OracleDbType.Int32;
       case DbType.UInt64: return OracleDbType.Int64;
       case DbType.VarNumeric: return OracleDbType.Decimal;
       default: return OracleDbType.Varchar2;
    }
}

Finalmente, "Es muy importante seleccionar el tipo de dato correcto en los parámetros, sobre todo si estos se van a utilizar como espacios de memoria donde se van a intercambiar valores entre Oracle y ADO.NET (IN OUT), pues NO existe un validación real en tiempo de desarrollo y esto puede generar problemas en tiempo de ejecución de asignación de memoria que derivan en errores de tipo "System.AccessViolationException""

Ambiente
Sistema Operativo Windows Vista Ultimate + Sp1
Microsoft .NET Framework 3.5
Microsoft Visual Studio 2008 Versión 9.0.21022.8 RTM
ODP.NET 11.1.0.6.20
Oracle 10g
Error 401.3 en SQL Reporting Services 2008

Cuando ejecutan un reporte publicado en SSRS 2008 y obtiene el siguiente mensaje de error:

 

 

Server Error in '/Reports' Application.


Access is denied.

Description: An error occurred while accessing the resources required to serve this request. You might not have permission to view the requested resources.

Error message 401.3: You do not have permission to view this directory or page using the credentials you supplied (access denied due to Access Control Lists). Ask the Web server's administrator to give you access to 'C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportManager\home.aspx'.


Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053

Evidentemente esto se debe a un problema de seguridad, sin embargo cuando van a IIS a ver la configuración del sitio web se encuentran que no existe un directorio virtual llamado Reports.   Esto se da porque la versión de SSRS 2008 no utiliza IIS para administrar sus servicios, lo hace a través de un servicio de Windows el cual toma control sobre el puerto 80 y publica tanto el web site como el web services de SSRS 2008 (esto es configurable mediante el "Reporting Services Configuration Manager").

Por otro lado SSRS 2008 utiliza la seguridad integrada de Windows para administrar la autorización y la autenticación de sus servicios, preferiblemente utilizando un servidor de directorio activo de dominio.

Básicamente el error se produce porque las credenciales de seguridad del usuario que ejecuta el reporte o navega a través del sitio web "SQL Server Reporting Services" viajan al servidor para autorizar la ejecución, pero muy seguramente no tienen permiso de "Read & Execute" sobre la carpeta "'C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services" que es donde se instalan y  almacenan las páginas web y los web services de SSRS 2008.

¿Qué hacer?  Cree un grupo local de su servidor, asígnele permisos de "Read & Execute" a la carpeta "'C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services" (o donde realizo su instalación) y finalmente adicione los usuarios del dominio que van a consultar los reportes y listo eso soluciona su problema.

Instalando Visual Studio Team System 2008® y Project Server 2007®, todo en un solo servidor.

Esta semana estuve instalando un servidor con Visual Studio Team System 2008® y Project Server 2007® para explotar la integración y la complementación que existe entre estos dos productos. Durante el proceso comité algunos errores y me encontré con algunos tropiezos, por eso decidí escribir esta guía de instalación.

La primer pregunta es ¿por qué en una empresa debe implementar Visual Studio Team System 2008® y Project Server 2007®?

Básicamente, porque para administrar equipos de trabajo que participan en varios proyectos al mismo tiempo y donde los recursos se comparten de forma dinámica, los work items de Visual Studio Team System 2008® no son suficientes para las labores del Project Managment. Hacer balanceo de cargas, optimización del uso de recursos, identificar sobrecostos de proyecto, tiempos muertos, etc… son tareas para las cuales Visual Studio Team System 2008® no tiene reportes, ni almacena la información suficiente. En ese orden de ideas Project Server 2007® nos entrega todo lo necesario para lograr completar con todos estos requerimientos del Project Managment. La integración de estos dos productos se logra a través del Connector, componente de software de libre distribución que crea un mapa entre los work items de un proyecto y las respectivas task, logrando sincronización en ambos sentidos. Microsoft®, consiente de estas limitantes, el 1 de Octubre del 2008 se comprometió a integrar esta solución para la versión de Visual Studio Team System 2010®. A continuación los vínculos de cuatro (4) videos donde se marcan los derroteros de la siguiente versión.

Ahora, ¿Por qué instalar todo en un solo servidor, teniendo en cuenta que escenario más recomendado para implementar la solución de Microsoft® cuenta mínimo con tres servidores (3)? La respuesta es muy sencilla: aunque cada vez más empresas son consientes de la necesidad de automatizar las herramientas para la administración y control de los proyectos de construcción de software, muchas de ellas, y principalmente en nuestras latitudes, consideran un verdadero lujo dedicar tres servidores exclusivamente para esa tarea y por razones presupuestales se ven limitados a usar una solo máquina para esta función dentro de la empresa.

Finalmente, en mi caso instalé TODOS los productos en su versión en inglés, ¿Por qué? No fue por simple chovinismo, la mescla de idiomas puede crear conflicto entre productos, principalmente en los portales web. Partiendo del hecho que no todos los productos tienen versión en español, la mejor opción es usar las versiones en inglés. Como punto adicional, los parches y service pack salen primero para las versiones en inglés.

Mano a la obra:

Lea aquí cuidosamente la guía de instalación de Porject Server 2007®

Baje la Team Foundation Installation Guide for Visual Studio Team System 2008, la nueva versión trae las consideraciones necesarias para incluir el SP1.

A continuación, un cuadro con los productos en el orden de instalación y algunas observaciones:

Producto / Tarea

Observaciones

Windows server 2003 r2 + iis

Yo no utilicé Windows Server 2008® porque este ejercicio lo hice sobre una maquina virtual, en las cuales con 2003 obtenía mejor desempeño. Sí va a utilizar Windows Server 2008® sea muy cuidadoso con las guía de seguridad, pues existen grandes diferencias con los sistemas antecesores. Recuerde, aunque el usuario TfsSetup es administrador de la maquina, varias tareas de configuración es necesarias ejecutarlas con la opción de "Ejecutar como Administrador".

   

TIP 0: El servidor NOOO puede ser un controlador de dominio.

Crear los usuarios como lo plantea "Team Foundation Installation Guide for Visual Studio Team System 2008"

   

Project profesional 2007®

OPCIONAL. Las herramientas clientes no deben ir sobre el servidor. Yo lo instalé porque necesitaba hacer algunas demostraciones. Sin embargo si las va a instalar debe hacerlo antes que los Service pack de Visual Studio Team System 2008®.

Service Pack 1 Project profesional 2007

   

Microsoft SQL Server 2005®

Según las instrucciones del "Team Foundation Installation Guide for Visual Studio Team System 2008", principalmente lo relacionado con el tema de SQL Reports.

No instalé SQL Server 2008 de forma intencional. Para su perfecto funcionamiento con Visual Studio Team System 2008® y Project Server 2007®, necesita seguir una serie de instrucciones especiales, por ejemplo para Team Foundation Server se debe integrar el SP1 con el directorio \AT del DVD de instalación (How to: Integrate the Installation of Team Foundation Server and Service Pack 1), y la verdad tuve muchos problemas al respecto, así que termine siguiendo los concejos de geekswithblogs: Instalar SQL Server 2005 y cuando todo este perfecto actualizar a SQL Server 2008.

Service Pack 2 Microsoft SQL Server 2005®

   

Framework 3.5

   

Ejecutar el Windows Update 

Instale TODOS los parches marcados como obligatorios

Windows SharePoint Services 3.0 + sp1

Según las instrucciones del "Team Foundation Installation Guide for Visual Studio Team System 2008".

Los dos productos viene con la capacidad de instalar Sharepoint services, pero es mejor instalarlo de forma independiente con la última versión que se pueda obtener en el sitio de descargas (aquí) de Microsoft®.

   

TIP 1: Es muuuuy importante que si está utilizando cuentas locales para la seguridad, siempre que le pregunten por la cuenta del usuario de servicios, escríbala incluyendo el nombre de la maquina: maquina\usuario, por ejemplo "michaelvm04\TfsService".

   

TIP 2: Pruebe cada producto instalado y revise constantemente el "Event Viewer", en las secciones "Application" y "Server". Sí encuentra algún evento de error relacionado con los componentes instalados, soluciónelo inmediatamente antes de continuar con los siguientes productos.

Project Server 2007® + sp1

Es realmente importante que se instale antes de los productos de Visual Studio Team System 2008®. Utilice las mismas cuentas de servicios que va a utilizar para Team System 2008®

Crear una granja de servicios (farm's shared services)

Siga detalladamente el instructivo "Deploy Project Server 2007 to a server farm environment".

Utilice las mismas cuentas de servicios que va a utilizar para Visual Studio Team System 2008®.

NO utilice el puerto 80 o el Default Web Site para crear esta granja (farm), use un puerto alterno.

   

TIP 3: Si en este punto no puede iniciar el servicio Windows SharePoint Services Search, debe revisar los siguientes puntos:

  1. Lea el TIP 1.
  2. A través de las herramientas administrativas, Servicios, busque el servicio "Windows SharePoint Services Search". Edite las propiedades y sobre la pestaña de "LogOn", asegúrese que la cuenta para iniciar el servicio es la misma de SharePoint, o en su defecto la de "TfsService".
  3. Por herramientas administrativas, abrir Servicios de Componentes. Sobre el nodo "DCOM Config", busque el componente "IIS WAMREG admin service" y edite sus propiedades. En la pestaña de "Security", en la sección de "Lunch and Activation Permissions" oprima el botón para editar los permisos: Asigne los permisos locales (no son necesarios los remotos) de "Lunch" y "Activation" a las cuentas de servicios que utilizó para la instalación (TfsService), también agregue la cuenta "NETWORK SERVICE".
  4. Finalmente, si no es posible activar el servicio "Windows SharePoint Services Search" a través del portal administrativo de SharePoint, inténtelo en la línea de comando con la siguiente instrucción:

    stsadm -o spsearch -action start -farmserviceaccount MICHAELVM04\TFSSERVICE -farmservicepassword ioioioio -farmcontentaccessaccount MICHAELVM04\TFSSERVICE -farmcontentaccesspassword ioioioio -databaseserver MICHAELVM04 -databasename WSS_Search_01.

Si no funciona, por lo menos obtiene un mensaje de error que le ayude a determinar la causa original.

Team Foundation Server 2008®

Según las instrucciones del "Team Foundation Installation Guide for Visual Studio Team System 2008"

   

TIP 4: Error 28002 durante la instalación de Team Foundation Server 2008®:

  1. Lea el TIP 1.
  2. Lea el TIP 2.
  3. Deben asegurarse que el servicio de SQL Reports 2005® funcione correctamente. Suele crearse un conflicto en la configuración del "Session State" entre los sitios web del SQL Reports y el MOSS. Edite los archivos "web.config" de los directorios virtuales "/reports" y "/reportserver":
    1. Elimine o comentaré la línea <identity impersonate="true"/>
    2. Cambie la línea <sessionState mode="InProc" cookieless="false" timeout="20"/> por <sessionState mode="InProc" partitionResolverType="" cookieless="false" timeout="20"/>
    3. Reinicie el IIS, "iisreset /noforece"

Team Foundation Server Builder 2008®

Según las instrucciones del "Team Foundation Installation Guide for Visual Studio Team System 2008"

Team Explorer 2008 ®

OPCIONAL. Las herramientas clientes no deben ir sobre el servidor. Instalé al versión que viene en el DVD de Visual Studio Team System 2008® el cual instala Visual Studio 2008 y los adicionales para Project Profesional 2007®.

Windows PowerShell 1.0 for Windows 2003

OPCIONAL. Es necesaria para poder implementar el TFS Best Practices Analyzer el cual viene incluido en el Microsoft Team Foundation Server 2008 Power Tools, se puede obtener aquí.

Microsoft Team Foundation Server 2008 Power Tools - July 2008

OPCIONAL. Herramientas y comandos para extender y mejorar la experiencia de uso del Team Foundation Server 2008. Obtener aquí.

Team Foundation Sidekicks 2.2

OPCIONAL. Herramientas visuales que facilitan la administración del TFS, principalmente en los temas de autorización sobre los componentes del proyecto. Más información aquí.

TFS Administration Tool 1.3

OPCIONAL. Esta aplicación permite sincronizar las autorizaciones entre el Microsoft Team Foundation Server 2008, el SharePoint Services y SQL Reports. Se puede descargar aquí.

Visual Studio Team System Project Server 2007 Connector 

OPCIONAL. Conjunto de servicios que permiten sincronizar la información entre Visual Studio Team System 2008® y Project Server 2007®, creando un mapa entre los campos de los Work Items y las Task. Toda la información aquí.

  1. Lea cuidadosamente las instrucciones del "Setup Guide", principalmente los permisos que son necesarios asignar a la cuenta de "TfsService".
  2. No utilice el puerto 80 o el "Deafult Web Site" para instalar los servicios de Connector, es mejor crear un sitio web independiente sobre el cual se configuren los tres servicios.
  3. Recuerde durante el proceso de instalación que el "SSP url" NO ES el del sitio web administrativo http://michaelvm04:8080/ssp/admin, en genera por defecto es http://michaelvm04:56737/SharedServices1.
  4. Este punto me funcionó personalmente, aunque no está documentado: Edité los dos archivos web.config, tanto del "Connector Web Site", como del "Connector Web Services", y en la respectiva sección, agregue la línea <identity impersonate="true"/>, para asegurar que el identity viajara entre los web services.

Service Pack 1 Framework 3.5

   

Service Pack 1 Visual Studio 2008

   

Actualizar de Microsoft SQL Server 2005® a Microsoft SQL Server 2008®

OPCIONAL. Si planea actualizarse a Microsoft SQL Server 2008® debe hacerlo antes de aplicar el Service Pack 1 Visual Studio Team System 2008®, e inmediatamente aplicar los SP. Durante este proceso, el Team Foundation Server no va a funcionar hasta que se actualicen los SP.

Service Pack 1 Visual Studio Team System 2008®

   

Visual Studio Team System Web Access 2008 SP1 Power Tool

OPCIONAL. Interfaz 100% web que permite utilizar toda la funcionalidad del Visual Studio Team System 2008®. Se puede descargar aquí.

Windows Presentation Foundation usando Microsoft Visual Studio 2008

Latam Technet 

El equipo de Event Production de Microsoft MSDN & TechNet para America Latina, me invitó a dictar un webcast sobre el diseño de las nuevas interfaces con Windows Presentation Foundation – WPF, y como hacer desarrollos utilizando esta tecnología de forma productiva utilizando las nuevas herramientas que vienen incorporadas en Microsoft Visual Studio 2008®, incluyendo la integración con Microsoft Expression Blend®.

 Video:

URL del Evento: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032389725&Culture=es-AR

Fecha: el 10/15/2008 a las 10:00:00 AM (GMT -5).

Antes de conectarse les recomiendo los siguientes sitios para asegurar que su computador tenga la configuración necesaria:

  1. Pruebe su Browser: http://esd.placeware.com/wintest
  2. Requisitos del sistema: http://www.placeware.com/support/sys_req.cfm
  3. Plug In's Live Meeting: http://www.placeware.com/support/plugins.cfm
Lleve su Aplicación Web al siguiente nivel con Minería de Datos

Latam Technet 

El equipo de Event Production de Microsoft MSDN & TechNet para America Latina, me invitó a dictar un webcast sobre minería de datos y su utilización en aplicaciones web. Los invito a todos para conectarse y compartir sobre los últimos adelantos en esta área.

Video:

URL del Evento: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032386335&Culture=es-AR

Fecha: el 9/26/2008 a las 2:00:00 PM (GMT -5).

Antes de conectarse les recomiendo los siguientes sitios para asegurar que su computador tenga la configuración necesaria:

  1. Pruebe su Browser: http://esd.placeware.com/wintest
  2. Requisitos del sistema: http://www.placeware.com/support/sys_req.cfm
  3. Plug In's para Live Meeting: http://www.placeware.com/support/plugins.cfm
ScreenCast-Typed DataSet y Windows Communication Foundation 3.5

Muchas personas me preguntas acerca de los typed datset y su aplicabilidad en los nuevos escenarios que se plantean desde el lanzamiento del framework 3.0 y 3.5.  Sobre todo porque existe un grupo de desarrolladores para los cuales los DataSet siguen siendo una opción valida al momento de manipular sus datos.

Por eso tomé la decisión de realizar una demostración en la cual se construye una aplicación distribuida, donde la capa de acceso a datos (DAL) sea implementado a través de un Typed DataSet, y este mismo sirve como entidad de transporte a través de las diferentes capas de la aplicación.  Para lograr la comunicación entre las capas utilice una fachada con Windows Communication Foundation 3.5, utilizando protocolos TCP/IP, para variar un poco de los demo con WebServices.

Adicionalmente en este ScreencCast se pueden ver las nuevas ventajas de productividad incluidas en Visual Studio 2008, que facilitan el desarrollo de este tipo de aplicaciones.

Ambiente

Sistema Operativo

Windows Vista Ultimate + Sp1

Microsoft .NET Framework

3.5

Microsoft Visual Studio

2008 Version 9.0.21022.8 RTM

Screencast - Administración del proyecto e Ítems de trabajo.

Este primer screencast que grabé y lo puede recuperar para utilizarlo en mi blog. El tema es la administración de proyectos utilizando Microsoft Team System®. Aunque se haya grabado sobre la versión 2005, gran parte de la información contenida sigue estando vigente para la versión 2008.

Originalmente lo había almacenado en el portal de Youtube, pero por las limitaciones del portal me vi obligado a dividirlo en seis (6) partes porque solo se pueden subir videos con máximo 10 minutos de duración. Ahora lo moví al Soapbox del portal Msn video Soapbox el cual me permite subir videos hasta de 100mb de tamaño, lo suficiente para subir mi video sin necesidad de dividirlo.

Espero que les sea de utilidad.

Ahora el video se encuntra en www.latamcmc.com

Ambiente

Sistema Operativo

Windows Vista Ultimate + Sp1

Microsoft Visual Studio Cliente

Team Suite 2005 Versión 8.0.50727.859

Microsoft Visual Studio Servidor

Team Foundation Server 2005

Video

Camtasia Studio 5

Otros

Microsoft Office 2007

Microsoft Office Project 2007

SqlServer 2008 Ya está disponible!!!!

sql_header3.jpg

Announcing the release of SQL Server 2008, the enterprise data platform
for data warehousing, business intelligence, and LOB applications

The wait is over!  SQL Server® 2008 is now available and is ready for purchase.  For customers who have Enterprise Agreements, SQL Server 2008® will be available for Volume Licensing download on August 21.

 

TechNet Magazine recently published an overview of the key changes and what you can expect from SQL Server 2008. You can also get a rundown of the various Editions and Components of SQL Server 2008 and take part in SQL Server 2008 Tutorials.

 

An Overview of SQL Server 2008 installation will help you get started with your deployments.  You can also find guidance for Upgrading to SQL Server 2008 or Migrating to SQL Server 2008.  And if you are upgrading, be sure to check out Using Upgrade Advisor to Prepare For Upgrades.

 

From the August edition of TechNet Magazine, here are answers to your SQL Server questions, showing you how to perform consistency checks, how to handle an accidental upgrade, and more in the SQL Q&A column.

 

Finally, you can easily find local partners offering SQL Server 2008 solutions, find training partners near you offering official Microsoft courses on SQL Server 2008, as well as attend local in-person events and online webcasts on SQL Server 2008.

 

© 2008 Microsoft Corporation. All rights reserved. Microsoft and SQL Server are either trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.

mslogo.gif

Linq – Método Cast<TResult>() para listas non-generic

Trabajando con Linq me encontré el siguiente error al intentar hacer una consulta sobre dos colecciones utilizando la instrucción "Join":

The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.

La instrucción que genera el error:

DbCommand Comando = obFactory.CreateCommand();

foreach (var mapaEntity in from mapa in obEntityHelper
                           join param in Comando.Parameters
                           on mapa.Parametro equals param.ParameterName
                           where
!String.IsNullOrEmpty(mapa.Parametro)
                           select
mapa)

Básicamente el problema se debe a que la colección "Parameters" de la clase "DbCommand" no implementa una interfaz genérica, en otras palabras es una "non-generic list", razón por lo cual no puede identificar el tipo correcto de cada uno de los elementos de la colección. Este problema se presenta en cualquier lista de elementos no específicos de tipo "Object".

La solución consiste en utilizar el método extendido "Cast< TResult >" para convertir los elementos de la lista a un tipo específico:

DbCommand Comando = obFactory.CreateCommand();

foreach (var mapaEntity in from mapa in obEntityHelper
                           join param in Comando.Parameters.Cast<DbParameter>()
                           on mapa.Parametro equals param.ParameterName
                           where
!String.IsNullOrEmpty(mapa.Parametro)
                           select
mapa)

De tal forma que dentro de la instrucción de consulta, el compilador pueda utilizar la clase específica para poder refernciar sus propiedades y atributos, además los elementos de la colección resultante serán de un tipo de datos específico.

Ambiente
Sistema Operativo Windows Vista Ultimate + Sp1
Microsoft .NET Framework 3.5
Microsoft Visual Studio 2008 Version 9.0.21022.8 RTM
More Posts Next page »