I’m a Plain guy

“The truth that lies before us now is plain for all to see
To grow without is not to grow within.


 


KANSAS “No one together” (1980)


 


Es para mí un orgullo anunciar mi incorporación como Development Advisor a Plain Concepts, the Microsoft technologies Know-how company, donde espero dar lo mejor de mí y crecer intelectualmente (como parece sugerir la letra de mi banda favorita) junto a excelentes amigos y grandes especialistas en sus respectivas áreas como Pablo Peláez, Iván González, Rodrigo Corral, Unai Zorrilla, Jorgito Serrano, Marco Amoedo o Cristian Manteiga, entre otros.

Arte digital con C# 3.0 y LINQ

De entre la avalancha de vídeos, documentos y enlaces que con los que nos abrumó Charlie Calvert simultáneamente con la salida de la última CTP de Orcas (marzo), me llamó especialmente la atención una referencia a un post de Wes Dyer, miembro del equipo de desarrollo de C#, en el que éste muestra una aplicación que permite, mediante un curioso algoritmo, “aproximar” una imagen en una consola DOS mediante caracteres ASCII. Algo como lo siguiente (he utilizado una foto de mi hija Diana para presumir de ella):



Aunque algunas expresiones de consulta pueden parecer algo forzadas, y se hace uso y abuso de métodos extensores, algo que está aún por ver si la práctica avalará, este programa es un buen ejemplo práctico del tipo de código C# que se podrá encontrar en un futuro nada lejano. Por ello, le recomiendo que le eche un vistazo. Si va a ejecutarlo sobre la CTP de marzo, tenga en cuenta que antes tendrá que resolver dos o tres problemillas de compilación debidos a que el autor utilizó una versión más avanzada de Orcas que la CTP. Las modificaciones del código necesarias se describen también en el blog.


 

Novedades en la CTP de Orcas de marzo de 2007

Como otros colegas ya han anunciado, está disponible desde hace unos días la CTP de marzo de Orcas, que se puede descargar desde aquí:


    http://www.microsoft.com/downloads/details.aspx?familyid=281fcb3d-5e79-4126-b4c0-8db6332de26e&displaylang=en


Yo no he tenido ni que descargármela, gracias a la gentileza de mi buen amigo Unai Zorrilla.


Aquí va un resumen de las características más relevantes de la CTP relacionadas con los lenguajes y LINQ (aunque la CTP contiene muchísimo más):


·         LENGUAJES


o        Soporte para las características de C# 3.0: Esta CTP implementa todas las características del lenguaje C# 3.0 que ofrecía la CTP de LINQ de mayo de 2006:


§         Expresiones de consulta


§         Inicializadores de objetos y colecciones


§         Métodos extensores


§         Inferencia de tipo de variables locales y tipos anónimos


§         Lambdas asociadas a delegados y árboles de expresiones


§         Soporte completo de tiempo de diseño: Intellisense, formato, colorización


o        Soporte para las características de VB 9.0: Esta CTP implementa las siguientes características del lenguaje:


§         Expresiones de consulta: soporte de consultas, filtrado y ordenación


§         Inicializadores de objetos


§         Métodos extensores


§         Inferencia de tipo de variables locales


§         Tipos anónimos


§         Literales XML


§         Propiedades XML


§         Intellisense para nueva línea y para expresiones


·         LINQ


o        LINQ to Objects


§         La API de LINQ to Objects permite consultas sobre cualquier colección .NET, como arrays y listas genéricas. Esta API se define en el espacio de nombres System.Linq dentro de System.Core.dll.


o        LINQ to XML (XLinq)


·         Añadidas las clases del espacio System.Xml Bridge, que contienen un conjunto de métodos extensores que permiten utilizar XPath y XSLT sobre árboles de LINQ to XML, producir un árbol de LINQ to XML mediante una transformación XSLT, y validar un árbol de nodos XElement contra un esquema XML.


·         Modelo de eventos, que hacen posible la sincronización eficiente de árboles LINQ to XML con una interfaz gráfica de usuario (por ejemplo, una aplicación WPF).


·         Cambios en la jerarquía de clases – añadida la clase XObject, eliminada (temporalmente) XStreamingElement.


·         Mejoras de usabilidad varias – se han realizado varias modificaciones menores en respuesta a estudios internos y sugerencias externas, para hacer la API más limpia y consistente.


o        LINQ to ADO.NET


·         ADO.NET se integra completamente con LINQ y ofrece múltiples opciones para utilizar LINQ en varios escenarios: LINQ to SQL ofrece acceso directo a tablas de bases de datos desde el entorno de programación, LINQ to Entities permite a los desarrolladores utilizar LINQ sobre modelos EDM (Entity Data Models), y LINQ to DataSet permite utilizar toda la expresividad de LINQ sobre DataSets.


·         LINQ to Entities permite a los desarrolladores programar contra una base de datos relacional utilizando una vista de los datos apropiada para la aplicación que están construyendo, independientemente de la estructura de la base de datos subyacente. El uso de modelos EDM permite a los desarrolladores diseñar modelos que sigan los conceptos naturales de la aplicación, en lugar de tener que mapearlos a las construcciones que ofrecen los almacenes relacionales. LINQ to Entities está creado sobre el modelo de proveedor de ADO.NET y permitirá trabajar contra diversos almacenes de datos relacionales, además de contra Microsoft SQL Server. Esta CTP incluye un proveedor de LINQ to Entities para SQL Server y SQL Server Compact Edition.


·         LINQ to SQL (antes conocido como DLinq) ha mejorado su funcionalidad con respecto a la CTP de mayo de 2006. Puede encontrar esta API en el espacio de nombres System.Data.Linq dentro del ensamblado System.Data.Linq.dll. Una novedad de esta edición es que la clase DataContext ofrece modos optimizados para la utilización en modo de solo lectura y la serialización. También es nuevo que la clase DataShape simplifica la carga temprana y añade la posibilidad de establecer consultas sobre relaciones.


o        Diseñador de LINQ to SQL


            ·         Ahora es posible crear métodos a partir de procedimientos almacenados y funciones dentro del diseñador.


            ·         Mejor gestión de los esquemas de bases de datos.


            ·         Soporte mejorado para la herencia en el diseñador.