…esto si es brutal: 899 millones de euros de multa!

Si la semana pasada comentábamos en Geeks.Ms una gran noticia por parte de Microsoft en cuanto a su nuevo giro estratégico y la decisión de compartir el corazón de sus productos y tecnologías clave, hoy antes de comer (a más de alguno la comida le habrá sentado mal, o el desayuno en Redmon creo) nos hemos encontrado con otro tremendo notición, pero en este caso realmente malo para Microsoft…la comisión europea ha decidido multar a Microsoft con 899 millones de euros. Sinceramente, yo me he quedado "flipao" y sin palabras, menudo palo…y no voy a entrar a si es justo o no (aunque si tengo formada mi propia opinión y convicción personal), pero si diré que los instigadores de esta multa parece que se van a salir con la suya, y muy en particular, la empresa Opera cuya actitud no entiendo porque ¿cuántas personas en el mundo utilizan su navegador? ¿es qué ellos no cobran licencias por su software?…en fin, simplemente me hago eco de la noticia y simplemente diré que me parece una "burrada" y una barbaridad la cuantía de la multa…y también considero que aunque para Microsoft supondrá un gran daño en cuanto a imagen y percepción de lo que hace, no va a hacer que su maquinaria se resienta…por algo es el líder en muchos sectores de mercado de este negocio del desarrollo de Software en general al que nos dedicamos.

Microsoft_sign_closeup logoUE

Sin duda, la de hoy es un episodio más en la batalla o guerra iniciada por la UE, a instancias de muchos instigadores que no voy a mencionar, contra Microsoft.

WSS 3.0 & MOSS: Recopilación de enlaces interesantes (XV)

Hacía tiempo que no revisaba mis RSS sobre SharePoint, y claro me ha costado ponerme al día, y aquí os dejo mi selección de recursos sobre plataforma SharePoint.


Artículos



Tips & Tricks



Recursos, Utilidades & Otros



  • En el blog de Arpan Shah’s se comenta que han subido nuevos videos y whitepapers sobre conceptos avanzados de SharePoint a Microsoft Technet.
  • Jan Tielens ha liberado recientemente la versión 1.3 de la Smart Part. En esta nueva versión se solucionan algunos errores de versiones previas, se ha añadido soporte de localización para ASP.NET AJAX, así como ejemplos diversos de controles y un asistente de instalación. Os la podéis bajar de este enlace.

SmartPartWithAJAX.gif





Sin más, aquí concluye una nueva entrega de recursos variados sobre WSS 3.0 & MOSS. Espero que os resulten útiles (hay algunos realmente novedosos ;)).

Nuberos.Net: Volvemos con fuerza!

Nuberos.Net: Introducción y Demo de Silverlight

Pues eso, este jueves 28 de febrero, y como siempre con el apoyo fundamental de MSDN,  el grupo de usuarios .NET, Nuberos.Net, de Cantabria retoma su actividad con más fuerza que nunca…iniciamos este nuevo período con una charla a cargo de Jose María Cuesta en la que sin duda nos demostrará porque le encanta Silverlight y en la que seguro que nos hará unas cuantas demos que a más de alguno van a dejar con la boca abierta ;). La agenda del evento es la siguiente:

Nuberos.Net: Introducción y Demo de Silverlight

18:15h – 18:30h Bienvenida y Registro

18:30h – 20:00h Introducción y Demo de Silverlight
20:00h – 20:30h Ruegos y preguntas

En cuanto al lugar de celebración del evento, será el de siempre:

Centro de Promoción e Innovación Tecnológica

Calle Tanos, s/n
Tanos, Torrelavega Torrelavega Cantabria 39316
Spain

Por si acaso, y para los que no conocéis la ubicación del Centro de Promoción e innovación Tecnológica, aquí os dejamos un PDF en el que se explica en detalle como llegar. Finalmente, este es el enlace de inscripción al evento, al que os animamos a asistir. Sin duda, una gran noticia que de nuevo Nuberos.Net vuelva a estar en la cresta de la ola, próximamente se publicará una agenda con los eventos previstos en los próximos meses, y verá la luz una nueva versión de la web del grupo…que estará en MOSS ;).

…la nueva vuelta de tuerca de Microsoft: ¿Qué dirán ahora desde el mundo Open Source?

Aunque seguro que muchos habéis leído la noticia respecto al nuevo giro estratégico de Microsoft, no me he podido resistir y aquí me tenéis reproduciendo parte de la misma, sobre todo por la parte que toca al tema open source, haciéndome eco de la misma…y es qué Microsoft (aunque el inicio del movimiento ya lo hemos vivido hace unos meses con la liberación del código fuente de .NET Framework) ha decidido dar un gran paso adelante y va a permitir que cualquier desarrollador (no sólo open source ;)) pueda acceder a las entrañas de sus productos para desarrollar tanto software no comercial, como comercial (en este caso estableciendo las correspondientes licencias de patentes y cobrando unas ciertas royalties que en palabras de Steve Ballmer serán realmente bajas)…tal y como se comenta en la noticia, este movimiento de Microsoft es la respuesta a la estrategia que en esta dirección lleva realizando Google desde hace varios años.

Según esta noticia, Microsoft se ha propuesto poner en marcha cuatro principios, según anunció, como son “asegurar las conexiones abiertas, promover la portabilidad de datos, aumentar el apoyo para los estándares industriales y buscar un compromiso más abierto con clientes e industria, incluidas las comunidades de código abierto“.

En un primer momento, la compañía publicará en MSDN más de 30.000 páginas de documentación, e indicará qué protocolos están protegidos por patentes, cuyos derechos renunciará a cobrar, insiste, si los desarrollos posteriores son no comerciales.

Los nuevos principios anunciados se aplicarán en productos clave de la compañía como Windows Vista, Windows Server 2008, SQL Server, Office 2007 y sus versiones futuras.

image

Sin duda, una gran noticia…¿qué dirá ahora el mundo Open Source?¿cómo se lo van a tomar desde Google? Sin duda este notición va a dar mucho que hablar.

SQL Prompt o como tener casi Intellisense al escribir tus consultas T-SQL!

Me imaginaba que seguramente alguien habría creado alguna herramienta o Add-In especial para facilitar la escritura de consultas T-SQL a ejecutar en una base de datos SQL Server…y de hecho, y como me pasó el otro día con MSND Vídeo 2008, de manera indirecta he encontrado SQL Prompt un producto de la empresa alemana Read Gate Software que facilita la creación de sentencias T-SQL ya que en tiempo de diseño nos va dando sugerencias (casi intellisense) para escribir sentencias T-SQL correctas. Si queréis probar el producto, os podéis bajar una versión trial de este enlace (permite probarla durante 14 días).

 

sqlprompt-keystrokes-2

Más información sobre esta interesante herramienta en este enlace.

Lanzamiento Visual Studio 2008, Windows Server 2008 y SQL 2008

Microsoft esta preparando para los días 26 y 27 de Febrero un gran evento en el Palacio Municipal de Congresos de Madrid en el que va a realizar el lanzamiento oficial de las nuevas versiones de Visual Studio 2008, Windows Server 2008 y SQL Server 2008.

En este evento, al que casi también le podemos denominar mini-TechEd por su envergadura, ya hay registradas un gran numero de personas (+- 4.000), se van a realizar multiples sesiones técnicas de los diferentes productos, hand on labs, zona de exposiciones,…

Una cosa importante que tenemos que tener en cuenta en este lanzamiento, ya que puede llevar a equivocación por su nombre de ‘lanzamiento oficial’, son las fechas reales en las que vamos a poder tener disponibles todos estas nuevas versiones de productos para poder trabajar con ellas:

  • Visual Studio 2008: Ya se puede adquirir en las tiendas
  • Windows Server 2008: En este evento se va a hacer público su lanzamiento oficial y a partir de esos días ya le vamos a poder adquirir. La versión de Windows Server 2008 con Hyper-V vamos a tener que esperar un poco mas, supuestamente hasta mediados de año.
  • SQL Server 2008: Este es el producto que mas vamos a tener que esperar, ya que actualmente se encuentra en la CTP 5 de Noviembre, y para el evento se espera que se publique la CTP 6 con todas las correcciones que el grupo de desarrollo del producto esta realizando. Una vez que salga la CTP 6, tendremos que seguir esperando hasta Junio para que publiquen la RTM (Release to Manufacture), es decir, se cierra el periodo de desarrollo y se manda a producción, y para principios de verano ya podremos adquirir el producto, primeramente en su versión en ingles y para la versión en español tendremos que esperar unos 40 días mas.

Una grata sorpresa: MSDN Vídeo 2008!

image Hacía tiempo que no me pasaba por desarrolla con msdn, y el caso es que el otro día de manera indirecta aparecí en esta gran fuente de recursos sobre desarrollo .NET y me encontré con que el famoso MSDN Vídeo ha sido actualizado para incluir muchas de las novedades de Visual Studio 2008 y .NET Framework 3.5…

image image image

…se trata de MSDN Vídeo 2008, y como se comenta en la sección, la nueva versión se ha preparado para facilitar el aprendizaje de las siguientes tecnologías:

  • LINQ: acceso a datos y la creación de entidades.
  • Windows Communication Foundation: exposición de los servicios.
  • ASP.NET 3.5, AJAX, Silverlight: creación del sitio web del videoclub.
  • Windows Forms 3.5: herramienta de administración para gerentes de tienda.
  • Windows Presentation Foundation: cajero automático en tiendas.

En la propia página de MSDN Vídeo 2008 podemos visualizar un vídeo en el que podemos realizar un recorrido por las características de la aplicación que actualmente está en fase beta…cómo no podía ser de otra forma, el vídeo está narrado por el genial David Carmona (felicidades crack). Os podéis descargar el código fuente de la versión beta de MSDN Vídeo 2008 en este enlace. Sin duda, el descubrimiento ha sido una sorpresa muy agradable, aún recuerdo la versión anterior de MSDN Vídeo (para Visual Studio 2005) y el tutorial de VB.NET de Jorge Serrano y El Guille…sin duda una gran fuente de aprendizaje, como lo será MSDN Vídeo 2008.

Pero las sorpresas en desarrolla con msdn no acaban aquí, puesto que en la sección cursos online aparece el anuncio de nuevos cursos relacionados con las nuevas tecnologías de .NET Framework 3.5:

  • AJAX
  • Silverlight
  • Plataforma Windows Live

ADO.NET Entity Framework: eSqlBlast…no es tan bueno como LINQPad, pero casi e igual de útil…

En el último post sobre ADO.NET Entity Framework os comentaba otras formas de realizar consultas contra un Entity Data Model (EDM) de ADO.NET Entity Framework: Entity SQL (eSQL) y Object / Entity Services. También os comentaba que existía una herramienta interesante de la que os iba a hablar en el siguiente post sobre ADO.NET Entity Framework…pues dicho y hecho. La herramienta en cuestión forma, como no podía ser de otro modo, de la correspondiente sección de Codeplex dedicada a ejemplos sobre la nueva versión de ADO.NET: ADO.NET Samples. Y la herramienta en cuestión es eSQLBlast, la cuál os podéis descargar en la pestaña releases de esta sección de Codeplex. Como se indica en la página de descarga, eSqlBlast es una suite de herramientas diseñada para editar y ejecutar consultas eSQL contra EDM’s de ADO.NET Entity Framework. La versión actual de eSqlBlast funciona perfectamente (como os demostraré) con la Beta 3 de ADO.NET Entity Framework, y la versión descargable de la misma es el proyecto de Visual Studio 2008 que hay que compilar para poder empezar a probar la herramienta. Finalmente, y no menos importante, el creador de esta genial herramienta que está sin duda al mismo nivel que LINQPad (aunque esta le gana en el aspecto gráfico): Zlatko Michailov, Program Manager de Microsoft. Sin más, veamos el funcionamiento y utilidad de eSqlBlast.

eSqlBlast en acción

Tras compilar el proyecto y ejecutar eSqlBlast, lo primero que tenemos que hacer es especificar la cadena de conexión al EDM correspondiente. Para ello, y siguiendo la pauta explicada en el post anterior para escribir cadenas de conexión a EDM’s para eSQL, eSqlBlast necesitará en primer lugar el connection string a la BD, y a continuación los archivos de metadatos que describen el modelo (archivos .csdl, .msl, y .ssdl):

Data Source=.SQLEXPRESS;AttachDbFilename=”C:Documents and SettingsAdministratorDesktopLabs LINQSoluciones & DemosBDCLIENTES.mdf”;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True

 

image image

Una vez que hemos especificado la cadena de conexión, basta con pulsar CONNECT para que eSqlBlast se conecte satisfactoriamente al EDM especificado:

image 

Una vez conectados, ¿que nos permite hacer eSqlBlast con el EDM? Pues la respuesta es que tres cosas:

  • Por un lado nos permite inspeccionar el modelo a través de la pestaña Model. Aquí tendremos que especificar el archivo de metadatos que describe a nivel conceptual el EDM (en este caso el archivo .csdl), y tras pulsar RENDER tendremos la descripción del EDM desde un punto de vista conceptual:
image image 

Como veis, eSqlBlast nos da la misma vista que tenemos con el Model Explorer en Visual Studio 2008, de manera que dado un cierto EDM podremos inspeccionar las entidades que lo componen, el tipo de las mismas en cuanto a descripción de sus  miembros, si hay tipos complejos, y las asociaciones existentes.

  • Realizar y ejecutar una consulta eSQL contra el modelo. Así, por ejemplo:

SELECT  clientes.ID_Cliente,clientes.DireccionCliente,clientes.CiudadCliente
                  FROM BD_Clientes_Entities.Md_Clientes as clientes

image

  • Visualizar los resultados de la ejecución de la consulta eSQL contra el EDM. En este caso, no solo se visualiza el resultado de la ejecución eSQL, sino también la propia sentencia eSQL, el número de filas devueltas y la consulta T-SQL real que se envía a la BD (por cierto, tengo que encontrar en el código del proyecto como se saca esto pues lo desconozco para ADO.NET Entity Framework).

image

Y hasta aquí llega este post sobre eSqlBlast. Sin duda una herramienta útil que nos permite probar las características de eSQL y que además nos da una idea de hasta que punto es extensible ADO.NET Entity Framework. Espero que el post os haya resultado interesante.

ADO.NET Entity Framework: LINQ To Entities, Entity SQL y Entity Services (II)

Hace un par de semanas escribía un primer post sobre ADO.NET Entity Framework complementario a la estupenda serie de posts que sobre esta temática ha venido realizando Jorge Serrano. En este post veíamos los fundamentos de ADO.NET Entity Framework, como construir un Entity Data Model (EDM) a partir de una cierta BD, y como realizar operaciones (de selección, inserción, actualización o borrado) mediante LINQ To Entities. La idea de este post es mostraros la flexibilidad de ADO.NET Entity Framework en cuanto a que para operar contra el EDM no sólo disponemos de LINQ To Entities, sino que tenemos otras dos opciones: Entity SQL (eSQL) y Entity Services. Empecemos.

Recordando los componentes de Entity Framework

Aunque Jorge Serrano ya nos explicó los componentes de un EDM, no está de más hacer un pequeño repaso de los mismos. Como ya comenté en el post anterior, una de las ideas claves de la nueva versión de ADO.NET es ahorrar tiempo a los desarrolladores a través de reducir la cantidad de código necesario para acceder a los datos, reducir el mantenimiento, facilitar la persistencia de los datos, etc. Todo ello es posible a través de la definición del correspondiente EDM, el cuál podemos consultar de las tres formas comentadas. Como siempre, una imagen vale más que 1000 palabras:

image Como veis, la clave de la realización de operaciones contra el EDM mediante cualquiera de los tres métodos está en un nuevo proveedor de datos: el Entity Client. Este proveedor permite interactuar contra el EDM mediante eSQL, que como veremos se trata de un nuevo lenguaje muy similar a T-SQL (sólo que las sentencias se ejecutan contra el EDM), Entity Services o LINQ To SQL que en este caso interactúan con el EDM a través de un objeto ObjectQuery (que representa una consulta que devuelve un cierto objeto con los datos).

Como nos comentaba Jorge Serrano, para entender como se realizan las operaciones contra el EDM es necesario conocer los componentes claves del mismo en la forma de tres capas:

  • Conceptual, definida mediante un archivo .CSDL (Conceptual Schema Definition Language, o en otras palabras un archivo XML con información relativa a las entidades del modelo), el cuál incluye las entidades y las relaciones tal y como la capa de negocio de la aplicación las conoce.
  • De asignación, definida con MSL (Mapping Schema Language, de nuevo otro XML con la información de mapeo entre la capa conceptual y la capa lógica), establece el mapeo entre las entidades del modelo conceptual y sus correspondencias con la BD.
  • Lógica, definida con SSDL (Store Schema Definition Language), y representa el esquema de la BD

image

Realizando consultas con eSQL

Como hemos comentado, este nuevo lenguaje similar a T-SQL nos permite interactuar con el EDM de manera similar a como estábamos acostumbrados a realizar operaciones contra una cierta BD en ADO.NET 2.0: define objetos específicos para la conexión al EDM, objeto EntityConnection, para devolver los datos en una consulta de selección, objeto DBDataReader, o ejecutar comandos eSQL contra el modelo…todas las clases que siguen estos objetos están definidas en el System.Data.EntityClient. Por lo tanto, el primer paso para realizar operaciones contra el EDM vía eSQL es instanciar la clase EntityConnection especificando la correspondiente cadena de conexión, que por cierto no es nada trivial:

EntityConnection ecConexion = new EntityConnection( @”metadata=.CLIENTES_EDM.csdl|.CLIENTES_EDM.ssdl|.CLIENTES_EDM.msl;provider=System.Data.SqlClient;” + “provider connection string=’Data Source=.\SQLEXPRESS;” + “AttachDbFilename=”C:\Documents and Settings\Administrator\Desktop\Labs LINQ\Soluciones & Demos\BD\CLIENTES.mdf”;” + “Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'” );

ecConexion.Open();

Como se observa, en la cadena de conexión es necesario especificar los distintos archivos de metadatos que configuran las distintas capas del EDM, así como la cadena de conexión para la BD. Una vez que hemos definido la cadena de conexión para el objeto EntityConnection, abrimos la conexión…esto se parece mucho al clásico ADO.NET…el siguiente paso es definir un comando eSQL mediante un objeto de tipo EntityCommand…dicho y hecho:

EntityCommand ecComando =
     new EntityCommand(“SELECT  clientes.ID_Cliente,clientes.DireccionCliente,” +
         “clientes.CiudadCliente FROM Entidades_BD_Clientes.Md_Clientes as clientes”, ecConexion);

Lo que hemos hecho es definir una sentencia eSQL, que parece T-SQL, pero que no lo es porque estamos realizando las consultas contra una entidad del EDM (en este caso Md_Clientes que pertenece al EDM Entidades_BD_Clientes)…¿y cómo ejecutamos este comando? Pues a través del método ExecuteReader (para este caso en el que estamos realizando una Select) del objeto EntityCommand anterior. Lógicamente los resultados los recogeremos para su procesado en un objeto de tipo DbDataReader:

using (DbDataReader dbdrReader =
    ecComando.ExecuteReader(CommandBehavior.SequentialAccess))
{
    while (dbdrReader.Read())
    {
        Console.WriteLine(dbdrReader[“ID_Cliente”] + “, ” +
            dbdrReader[“DireccionCliente”] + ” ” +
            dbdrReader[“CiudadCliente”]);
    }
}

Sin duda espectacular…y la salida por pantalla correspondiente es la siguiente:

image

Realizando consultas con Entity Services (u Object Services)

Finalmente, y para concluir el post, vamos a ver la tercera opción para realizar operaciones contra un EDM: los Entity Services (u Object Services). Esta alternativa permite devolver estructuras de información del EDM a través del método CreateQuery asociado al objeto ObjectContext (y que implementa una interfaz de tipo ObjectQuery<T>), que acepta una instrucción eSQL o LINQ To Entities con parámetros que define una consulta que recuperará una cierta lista de entidades. Así, un ejemplo de ejecutar una sentencia eSQL con Entity Services sería:

Console.WriteLine(“Entity Services”);
string sCiudad = “Santander”;
//ObjectQuery
ObjectQuery<ClientesModel.Md_Clientes> esQuery =
    ModeloClientes.CreateQuery<ClientesModel.Md_Clientes>
    (“SELECT VALUE c FROM Md_Clientes AS c WHERE c.CiudadCliente=@CiudadCliente”,
    new ObjectParameter(“CiudadCliente”,sCiudad));

foreach (var c in esQuery)
{
    Console.WriteLine(c.ID_Cliente);
}

Y la correspondiente salida por pantalla sería la siguiente:

image

Y hasta aquí la segunda entrega de la serie de posts sobre ADO.NET Entity Framework. En el siguiente post os presentaré una utilidad muy interesante para realizar operaciones contra el modelo. Espero que el post os haya resultado interesante.

Novedades en C# 3.0: Propiedades automáticas…¿Se permiten propiedades automáticas Read-Only o Write-Only?

Hace unas semanas José M. Alarcón nos hablaba de una de las innovaciones en el lenguaje que aparecen en C# 3.0: las propiedades automáticas. En ese post, nos explicaba como de manera muy sencilla, rápida e intuitiva podemos definir una propiedad de manera automática utilizando una sintaxis como la siguiente:

public string Nombre { get; set; }

De manera que es el compilador el que generará todo el resto de elementos que constituyen la variable privada. Ahora bien, (y esta cuestión surgió en el último seminario que sobre Visual Studio 2008 hemos impartido en el CIIN) una pregunta que nos pueden hacer es la siguiente: ¿Es posible definir propiedades automáticas que sean Read-Only o Write-Only? La respuesta es que no, de hecho en esta entrada ya se adelantaba que en las propiedades automáticas es obligatorio tener declarado un "getter" y un "setter", es decir, no se permiten propiedades automáticas Read-Only o Write-Only…y como una imagen a veces vale más que mil palabras, aquí tenéis la correspondiente prueba:

 

image