July 2007 - Posts

¿Qué trae de nuevo Visual Studio 2008?

OK, OK, todos sabemos que Visual Studio 2008 Beta 2 ya está aquí y todo mundo está descargándolo para empezar a probarlo. Pero, ¿sabes realmente qué es lo que trae de nuevo esta nueva versión?

El día de ayer Microsoft publicó un whitepaper a manera de overview de las nuevas características de VS 2008. Lo nuevo se resume en estas categorías:

  • Desarrollo de Clientes Inteligentes
  • Creación de Aplicaciones para Office
  • Creación de Aplicaciones para Windows Vista
  • Mayor Productividad en el Manejo de Datos
  • Habilitar la Creación de Nuevas Experiencias Web
  • Mejor Experiencia del Desarrollador
  • Mejorar la Administración del Ciclo de Vida de la Aplicación

Puedes descargar el documento completo desde acá. No es muy largo y te dará una vista rápida de todo lo nuevo que trae esta joya para los developers.

Julio.

Lanzamiento de Expression Studio - Diapositivas y Demos

El día de ayer pasamos un muy agradable momento junto a la comunidad de desarrolladores de Guayaquil durante el Lanzamiento de Expression Studio realilzado por MSGuayaquil en colaboración con Microsoft. Muchas gracias al EDCOM por brindarnos todas las facilidades para presentar este evento y mil gracias también por la entusiasta participación de todos los asistentes.

Las diapositivas y demostraciones presentadas están ya disponibles para su descarga:

Expression Studio en Acción - Diapositivas

Expression Studio en Acción - Demo

Expression Web - Diapositivas

Expression Web - Demo

Un Vistazo a Silverlight - Diapositivas

Un Vistazo a Silverlight - Demo de Aerolíneas Silverlight (el resto de las demos vienen en el SDK de Silverlight)

Durante la primera sesión realicé un recorrido por Expression Studio, empezando con un video que codifiqué con Expression Media Encoder, luego creando un sencillo diseño en Expression Design, uniendo después el video y el diseño en una simpática animación hecha en Expression Blend y finalmente integrando esa animación en un website creado en Expression Web. También presenté algunos otros ejemplos de Design y Blend que ya vienen incluidos en los productos, para que tengan una idea de lo que puede hacer gente que sí sabe de diseño y animación :).

ExpressionStudioDemo

ColorSwatchDemo

La segunda sesión estuvo dedicada a Expression Web. Yessenia Villacís nos dio un paseo por las diversas características de esta herramienta orientada al diseño profesional de sitios Web, que por cierto va mucho más allá de lo que podíamos hacer con Frontpage.

ExpressionWebDemo2

ExpressionWebDemo

En la última sesión presenté Silverlight, el nuevo plugin multi browser y multi plataforma de Microsoft para generar experiencias web dinámicas y con todo tipo de medios. Vimos los escenarios que cubren Silverlight 1.0 y 1.1 y presenté varias demos de lo que se puede hacer con cada uno de ellos, incluyendo la de Aerolíneas Silverlight, que creo es una de las que más gustó por la forma como aprovecha el poder de Silverlight 1.1 para dar una experiencia súper chévere al usuario final.

SilverlightPageTurnDemo

AerolineasSilverlightDemo

Realizamos también la premiación a nuestros súper entusiastas amigos que formaron parte del Top 10 de la comunidad. Felicidades a todos y muchas gracias sobre todo a nuestro amigo Franklin, ganador del primer premio, por la gran cantidad de contribuciones que ha realizado al sitio.

No olviden que todas las herramientas, descargas, ejemplos y tutoriales para trabajar con las herramientas Expression y con Silverlight los pueden encontrar en estos sitios:

http://www.microsoft.com/expression

http://www.microsoft.com/silverlight

Espero que el evento haya sido del agrado de todos y me encantaría que empiecen a probar desde ya las diversas herramientas presentadas. Estoy seguro que les van a sacar mucho mayor provecho que yo :)

Hasta la próxima!

Hands On Labs y Ejemplos para Visual Studio 2008

Visual Studio 2008 Beta 2 ya está disponible y, con ello, llegó la hora de actualizarse y empezar a sacarle provecho a la gran cantidad de nuevas características que incorpora esta nueva versión. Quisiera aquí entonces compartirles algunos de los recursos que estoy utilizando para ponerme al día:

Blogs

Hands-On Labs

Virtual Labs

Ejemplos

 

Y por supuesto, por acá los links para descargar Visual Studio 2008 Beta 2 en todas sus formas:

 

Hasta pronto!

La Evolución de las APIs de Acceso a Datos de Microsoft - Parte II

La semana pasada publiqué la primera parte de un post acerca de la evolución de las APIs de Acceso a Datos de Microsoft. El mismo es una trascripción resumida de la excelente serie de artículos publicada por Mike Pizzo, Arquitecto en el equipo de Data Programmability de Microsoft. Este post es la segunda y última parte en la que se relata el aparecimiento de ADO.NET y los últimos avances en acceso a datos.

Acceso a Datos Desconectado: ADO.NET

Teniendo ya un framework común, coherente y administrado para escribir aplicaciones (.NET Framework), Microsoft se preguntó una vez más: "Cuál sería la mejor forma de acceder a datos?" Inicialmente se pensó en reutilizar la mayoría de la arquitectura ADO/OLE DB, pero el mundo ya no era el mismo.

Dada la creciente popularidad del Internet, la programación desconectada se estaba haciendo más importante en la industria y XML era ya una forma popular de trabajar con datos. ADO.NET enfrentó estos nuevos retos haciendo una separación explícita entre acceso a datos conectado (a través de "Proveedores de Datos" específicos) y acceso a datos desconectado (a través de un "DataSet" común manejado en memoria) con un mecanismo explícito y extensible conocido como "DataAdapter" para hacer un puente entre ambos.

Arquitectura de ADO.NET

Esta separación entre acceso a datos conectado y desconectado contrastó con ADO/OLE DB, el cual trataba de abstraer las diferencias en las funcionalidades de acceso remoto y orígenes de datos. Aún cuando el modelo de ADO de tener un RecordSet único que podría ser "forward-only" ó "scrollable" y que podría representar datos locales ó remotos, parecía una simplificación agradable, en la práctica las diferencias en funcionalidad, latencia, uso de memoria y los lugares donde podrían ocurrir errores hacían difícil esconder los detalles de dichas diversas implementaciones bajo una fachada común. Aún haciendo que las interfaces parezcan iguales, dichas diferencias afectaban fundamentalmente la forma en la que la aplicaciones se comportaban. Entonces, para construir aplicaciones confiables y que respondan en el momento apropiado, el acceso remoto necesitaba hacerse de forma asincrónica y de una forma tal que se eviten bloqueos, lo cual significaba conocer cuándo una operación era (potencialmente) remota.

Aún cuando se intentó preservar lo mayor posible del paradigma de programación ADO, el paso a ADO.NET fue dramático para la mayoría de los programadores. Inicialmente la pregunta "Qué pasó con mi ADO?" fue la primera reacción de los programadores, pero con el tiempo se dieron cuenta del poder que la separación explícita entre conectado y desconectado proveían, y con ello un sentimiento de "Nunca podría volver atrás".

Cada una de estas evoluciones fue impulsada por un cambio mayor en la plataforma; una interfaz de cliente para comunicarse con almacenes de datos relacionales; escenarios de scripting y RAD (rapid application development); COM/DCOM; un .NET Framework cohesivo. Y en cada caso se trató de proveer la API apropiada para la nueva plataforma mientras se mantenían conceptos de APIs previas y se consideraban las lecciones aprendidas y cambios en la industria.

El Modelo Conceptual: ADO.NET Entities y LINQ

ADO.NET Entities aprovecha la inversión realizada en ADO.NET agregándole la habilidad de escribir aplicaciones contra un esquema conceptual enriquecido llamado "Entity Data Model", en lugar de utilizar un esquema relacional de base de datos. El Entity Data Model (EDM) extiende el modelo de datos relacional con Entity-Relationships (ER) para modelar conceptos del mundo real como Herencia (autos y camiones son vehículos), Relaciones (los clientes tienen órdenes), y miembros complejos (calle, ciudad, región y código postal compuestos como una sola propiedad "dirección" de un cliente). Una gramática SQL extendida llamada "Entity SQL" permite consultar directamente el modelo conceptual, aprovechando herencias, accediendo a miembros complejos y navegando relaciones. En muchos casos, el utilizar el esquema conceptual y el lenguaje de queries elimina la necesidad de joins, uniones y subqueries complejos para hacer operaciones conceptualmente simples.

Estos esquemas conceptuales son expuestos y consultados a través de un "Entity Client", el cual es un Proveedor de datos ADO.NET que construye queries contra proveedores de almacenamiento específico usando "vistas" de lectura/escritura en el lado cliente. Toda la ejecución del query como tal se la realiza en el almacén (mas no en el cliente), y los resultados son ensamblados en resultados que pueden ser jerárquicos, polimórficos, anidados y con miembros compuestos. Esta separación entre el modelo conceptual que la aplicación utiliza y el esquema de almacenamiento de la base de datos es un poderoso concepto que simplificará enormemente la creación y mantenimiento de aplicaciones de bases de datos.

ADONETEntityFramework

El exponer vistas de cliente a través de un Proveedor de Datos ADO.NET permite mantener el modelo de programación familiar de ADO.NET, aprovechando la inversión en código, herramientas y conocimiento existente y dicho proveedor pasa a formar parte del popular conjunto de Proveedores de Datos disponibles.

El Entity Client aprovecha la inversión e investigación significativa que ya existe en el campo de la teoría de bases de datos relacionales. Las actualizaciones, por ejemplo, se realizan aplicando técnicas de mantenimiento de vistas bien definidas a las "update views" para así producir un conjunto de expresiones delta que se combinan con "query views" para producir expresiones de actualización.

Para quienes prefieren trabajar con datos como objetos CLR tipificados en lugar de registros sin tipo, ADO.NET Entities incluye "Object Services", el cual se basa en Entity Client y permite realizar queries y traer resultados en la forma de "Clases de Datos" cuya identidad y cambios son administrados por el desarrollador.

"LINQ" significa "Language INtegrated Query" y, como su nombre lo indica, integra conceptos de consultas directamente en los lenguajes de programación, permitiendo que el código de acceso a datos sea verificado por el compilador y las herramientas de desarrollador, como Intellisense para hacer que los desarrolladores escriban queries. Esto, junto con conceptos de modelos conceptuales (como Entidades), contribuye a reducir el abismo entre aplicaciones y datos.

LinqArch

LINQ tiene soporte completo en el ADO.NET Entity Framework a través de "LINQ to Entities". Este último es parte de la capa de Object Services, el cual permite construir queries a través de expresiones de lenguaje tipificadas así como sentencias textuales de Entity SQL. Esto significa que las mismas vistas conceptuales de cliente están disponibles a través de patrones de programación ADO.NET existentes o a través del consumo de Object Services utilizando ya sea queries textuales ad-hoc o queries integrados en el lenguaje.

Entity Data Model: solo el principio

Microsoft está apostando fuerte con respecto al Entity Framework y el Entity Data Model en particular. Se espera que haya cada vez más y más servicios en SQL Server, así como diversas tecnologías, que aprovechen el Entity Data Model como una forma natural de describir datos en términos de conceptos del mundo real.

Para mi, como desarrollador, este es un momento fascinante en el que finalmente podré pensar y trabajar con la libertad que me brinda este modelo conceptual y concentrarme en dar mayor funcionalidad a mis aplicaciones, ser mucho más productivo y satisfacer las necesidades de mis clientes de formas mucho más robustas y creativas.

Julio.

La Evolución de las APIs de Acceso a Datos de Microsoft - Parte I

En este increíblemente amplio mundo del desarrollo de software existen temas que realmente me fascinan por su gran impacto en la forma como construimos software hoy en día. Entre estos temas están las metodologías de desarrollo, orientación a servicios, arquitecturas de referencia, clientes inteligentes y acceso a datos, entre otros. Este último tema, en particular, es uno de los que más llama mi atención, puesto que, por años, la forma en que accedemos a los datos y los transformamos para utilizarlos en nuestra aplicación cliente ha sido motivo de grandes frustraciones y mucha, pero mucha polémica.

En vista de ello, recientemente he estado revisando las últimas propuestas de Microsoft en torno al tema de acceso a datos y me he topado con que actualmente existe toda una revolución en la forma como pensamos y trabajamos con los datos. Esto se origina en la Plataforma de Datos y Entidades (Entity Data Platform) que Microsoft ha planificado y que estará implementando incrementalmente en futuras versiones de ADO.NET, SQL Server y varias tecnologías y herramientas relacionadas.

Me gustaría entonces, antes de empezar a abordar toda esta nueva serie de innovaciones, transcribir aquí un resumen de la evolución de las APIs de acceso a datos que Microsoft ha desarrollado hasta la fecha. Esto permitirá tener una mejor comprensión de cómo llegamos hasta aquí y hacia dónde vamos. Dado que yo ingresé al mundo del desarrollo de software apenas un poco antes del advenimiento de la plataforma .NET, me es imposible describir por mi mismo esta evolución, y es por ello que más bien me apoyaré en la experiencia de alguien que estuvo presente durante todo este trayecto, como Mike Pizzo, Arquitecto en el equipo de Data Programmability de Microsoft. Mike ha escrito una excelente serie de artículos que transcribiré (y resumiré un poco) en este y en un siguiente post.

Los Primeros Años

Uno de las primeras tecnologías que ofreció una forma estándar de conectarse a bases de datos fue ODBC (Open DataBase Connectivity). ODBC fue diseñado con un propósito específico: ser una interfaz común hacia una base de datos relacional y ha sido tan exitoso y popular que incluso se lo incorporó como anexo a la especificación SQL 92.

Más adelante, Visual Basic se convirtió en un lenguaje muy popular por sus capacidades de automatización y, como era de esperarse, la gente empezó a requerir invocar las APIs ODBC desde Visual Basic. Sin embargo, la interfaz de de tipo C de ODBC no podía ser consumida por VB. Afortunadamente Microsoft Access sí soportaba la ejecución de queries contra orígenes de datos ODBC y también soportaba el tipo de automatización que utiliza VB a través de su API Data Access Object (DAO). Con ello ya era posible escribir aplicaciones contra ODBC utilizando VB.

El problema de DAO radicaba en que necesitaba pasar por el motor "Jet" (Joint Engine Technology), el cual construía conjuntos de claves para cada resultado para así lograr hacer luego queries más avanzados contra datos remotos. Esto constituía una sobrecarga en rendimiento (por sucesivos viajes de ida y vuelta) para quienes no necesitaban la funcionalidad adicional.

Fue entonces cuando, respondiendo a la creciente demanda de una forma más eficiente de conectarse a ODBC, el equipo de Visual Basic creó RDO (Remote Data Objects). RDO ofrecía los mismos patrones de programación que DAO pero consumiendo directamente a ODBC (en lugar de pasar por Jet). RDO se hizo muy popular, pero así mismo dió inicio a la confusión entre cuál es la forma apropiada de acceder a orígenes de datos ODBC. Esto empeoró cuando se introdujo ODBCDirect, que no era más que una nueva modalidad de DAO que no creaba conjuntos de claves de forma predeterminada, mejorando así considerablemente el rendimiento.

Luego de eso la industria introdujo una gran oleada de ideas acerca de la construcción de componentes orientados a objetos que pudieran trabajar de forma distribuida. Llegó entonces el momento de agregar soporte para acceso a datos al popular Component Object Model (COM) de Microsoft.

Componentes de Acceso a Datos

COM encajó muy bien con la idea de construir componentes de acceso a datos reutilizables y fué así que nació OLE DB (OLE DataBase). OLE DB no solo era una interfaz basada en COM especialmente diseñada para trabajar con datos, sino que también soportaba el concepto de base de datos "federada" (o componetizada). Esto significa que podía definirse una interfaz base común llamada "Rowset" que pudiera usarse para representar una serie de "tuplas" (filas) sin importar de dónde vinieran ó qué representaran (el resultado de un query, una tabla o vista, un ISAM, un archivo de texto ó de Excel, el Registro de Windows, un email, servicios de directorio, etc). Y sobre esta interfaz Rowset base, se podía usar la QueryInterface de COM para detectar si se soportaba alguna funcionalidad adicional, como scrolling, actualizaciones, navegación por índices, etc.

Gracias a esta representación común de datos, ahora era posible construir componentes comunes para agregar funcionalidad contra cualquier tipo de dato, como por ejemplo un motor común de indexamiento, un componente común para manejo de cursores, un procesador de queries común que pudiera proveer funcionalidad de bases de datos sobre una multitud de orígenes de datos tanto relacionales como no relacionales. Así mismo, el hecho de que la representación de los datos de origen fuera la misma de los resultados finales agregaba beneficios de rendimiento así como un modelo común para que código y herramientas puedan trabajar con conjuntos de datos.

Esta habilidad de OLE DB de exponer interfaces comunes sobre una multitud de tipos de orígenes de datos facilitó la creación de servicios distribuidos. De hecho, Microsoft SQL Server usa un OLE DB Rowset hoy en día como su interface interna entre el Motor Relacional y el Motor de Almacenamiento, así como soporta queries distribuidos entre SQL Server y otros orígenes de datos heterogéneos.

Tal como ODBC, OLE DB era una interfaz de "bajo nivel" que usaba punteros, manejo explícito de memoria y control del tiempo de vida explícito. Así mismo, requería de una API que lo envuelva (wrapper) para que pueda estar disponible para lenguajes de automatización como Visual Basic. Fue por ello que llegó ADO (ActiveX Data Objects).

ADO seguía el mismo modelo de Conexión/Comando/Recordset de DAO, pero incluía tecnología de equipo de Fox para proveer un motor de cursores local avanzado. Este "Recordset Desconectado" exponía el modelo del Recordset en la forma de un cursor sobre un flujo (stream) de resultados desde la base de datos y las propiedades del Recordset se utilizaban para determinar si los resultados eran "scrollable" ó actualizables y qué tipo de aislamiento tenían los resultados con respecto a los cambios hechos al almacén de datos. El Recordset Desconectado usaba metadatos del query original para generar sentencias de inserción, actualización y eliminación para propagar los cambios locales de regreso al almacén de datos.

Juntos, ADO y OLE DB formaron lo que Microsoft denominó "Microsoft Universal Data Access".

Y una vez más, vino un momento de grandes cambios. Microsoft reconoció que estaban perdiendo popularidad entre los desarrolladores en favor de Java, dado que COM, en su forma original, era complejo y cosas como el conteo de las referencias, manejo de memoria, etc, eran difíciles de manejar. Así, Microsoft inició un proyecto ambicioso para desarrollar un nuevo framework administrado, independiente del lenguaje, para escribir aplicaciones (.NET Framework), junto con un nuevo lenguaje de programación (C#). Una de las fortalezas de esta nueva plataforma era que sus varios componentes y APIs fueron diseñados y revisados como un todo, en lugar de una serie de tecnologías semi-relacionadas creadas por equipos aislados.

En el próximo post cubriré la parte restante del artículo de Mike en la cual veremos cómo Microsoft concibió ADO.NET y recientemente las nuevas ADO.NET Entities y LINQ.

Serie de Videos de Team System - Parte 3

Aquí presento la tercera y última parte de mi serie de videos de Team System, dedicada en esta ocasión a las tareas del Tester y un breve vistazo a Análisis Estático de Código:

Trabajando con Team System - Web Test

Trabajando con Team System - Listas de Pruebas

Trabajando con Team System - Análisis Estático

Trabajando con Team System - Load Test

En estos videos presento los siguientes tópicos:

  • Cómo crear un Web Test para hacer una pequeña prueba de seguridad sobre una aplicación web existente.
  • Cómo crear un Bug a partir de los resultados del Web Test y publicar dichos resultados para que el resto del equipo pueda consultarlos.
  • Cómo crear una Lista de Pruebas para agrupar una serie de pruebas y luego asociarlas a la política de check-in, asegurando así que los desarrolladores ejecuten las pruebas la próxima vez que intenten ingresar código a Team Foundation.
  • Cómo utilizar Análisis Estático de Código para permitir que Visual Studio detecte errores comunes que comenten los desarrolladores y cómo asociar este análisis estático con la política de check-in del proyecto.
  • Cómo reproducir, corregir y marcar como resuelto un Bug asignado a un desarrollador.
  • Cómo utilizar un Load Test para asegurar que la aplicación web está lista para ser sometida a los más intensos requerimientos de rendimiento, simulando varios usuarios concurrentes y distintas condiciones de entorno.

Espero que estos videos hayan sido de utilidad para todo aquel que se está iniciando en el tema de Team System y por su puesto me encantaría conocer sus opiniones con respecto a estos videos. Así mismo, si tienen ideas sobre temas para futuros videos por favor háganmelas conocer y haré todo lo posible por ponerlos a su disposición.

¡Hasta la próxima!

Serie de Videos de Team System - Parte 2

Continuando la serie de videos de Team System (la parte 1 está por acá), les dejo aquí la segunda entrega en la cual incluyo 3 videos orientados a la parte de Desarrollo:

Trabajando con Team System - Pruebas Unitarias y Code Coverage

Trabajando con Team System - Profiling

Trabajando con Team System - Preparando el Build

En estos videos demuestro lo siguiente:

  • Cómo crear una prueba unitaria a partir de una clase escrita en C#
  • Cómo aplicar code coverage para determinar las porciones de código cubiertas por la prueba unitaria
  • Cómo detectar cuellos de botella en la aplicación utilizando el Profiler
  • Cómo prepara un build en el servidor utilizando Team Build

Recuerden que para realizar las tareas de desarrollo que presento en los dos primeros videos necesitarán el VS Team Edition for Software Developers (ó Team Suite) y para la generación del build pues se necesitará Team Build (parte de VS Team Foundation Server). 

Espero sean de utilidad y dentro de poco tendré ya la última parte de esta serie en la que presentaré un par de videos relacionados con la parte de Testing con VS Team Edition for Software Testers.

Hasta la próxima!

Serie de Videos de Team System - Parte 1

Acabo de publicar un par de videos cortos en los que demuestro cómo realizar tareas de administración del proyecto y de arquitectura utilizando Visual Studio Team System. Estos videos se derivan de las demos realizadas en el evento Andean Technology Day realizado la semana pasada en la universidad ESPOL (Las Peñas).

Los videos demuestran, entre otras cosas:

  • Cómo agregar un nuevo escenario al proyecto utilizando Team Plain Web Access.

  • Cómo asignar las tareas correspondientes a los miembros del equipo utilizando Microsoft Project 2007.

  • Cómo definir la política de check-in desde el Team Explorer de Visual Studio 2005.

  • Cómo agregar un nuevo servicio web a una aplicación web existente desde los diseñadores de VS Team Edition for Architects.

  • Cómo validar la definición de la arquitectura contra las restricciones del centro de datos ó infraestructura de IT existente.

  • Cómo generar la implementación del esqueleto del servicio web en C# automáticamente a partir del diseño de la arquitectura.

Trabajando con Team System - Preparando el Proyecto

Trabajando con Team System - Definiendo la Arquitectura

Tengo planeados cuatro videos más en esta serie de Team System, con lo cual cubriré las fases de implementación y pruebas de este escenario de ejemplo. Espero publicarlos esta misma semana.

Que los disfruten!

Más envíos