Nuberos.Net & CIIN: Gestión de proyectos y metodologías con Visual Studio Team System…seguimos con fuerza!!!!!

El próximo día 4 de abril el CIIN y Nuberos.Net (esperemos que para esa fecha esté lista la nueva web implementada en MOSS) organizaremos de forma conjunta un nuevo evento en el que contaremos con la presencia de Rodrigo Corral que seguro va a impartir una charla espectacular sobre el mundo de la gestión de proyecto y las metodologías de desarrollo con Visual Studio Team System. La verdad es que la organización del evento ha sido rápida por la total disposición de Rodrigo a venirse a Cantabria para charlar sobre el apasionante mundo de la gestión de proyectos…fue comentarle que varias empresas de la región tenían ciertos problemas y necesidades en cuanto que herramientas y que pautas seguir a la hora de desarrollar sus proyectos, que el mismo se ofreció a venir a impartir una sesión de 4 horas y un viernes por la tarde…muchas gracias Rodrigo!!!

Nuberos.Net & CIIN: "Gestión de proyectos y metodologías con Visual Studio Team System"

En cuanto a los detalles del evento en sí:

Todo proceso de desarrollo de software debe combinar la optimización de personas, herramientas y procesos para obtener como resultado un software de calidad, en tiempo, presupuesto y funcionalidad definida.

La Gestión de Proyectos  es clave a la hora de identificar las variaciones que puedan hacer fracasar un desarrollo, donde la colaboración entre los distintos roles del ciclo de vida de desarrollo y el uso de las distintas metodologías: ágiles, scrum, CMMI,etc…son claves para el éxito de cada proyecto.

Durante el seminario trataremos de forma práctica todos estos aspectos.

Ponente: Rodrigo Corral González, MVP de Team System

Datos de interés:

Requisitos previos: Conocimientos del entorno Visual Studio 2005

Audiencia: Desarrolladores, Jefe de Proyecto

Fecha: Viernes, 4 de Abril

Hora:  16:30 a 20:30

Precio: GRATUITO

Lugar de celebración:

Centro de Promoción e Innovación Tecnológica
Calle Tanos, s/n , Tanos, Torrelavega
Torrelavega, Cantabria, 39316

Esperamos que el evento atraiga al mayor número de participantes (no adelanto nada, pero todo indica que así va a ser ;). Podéis inscribiros en el evento a través de este enlace.

Nuberos.Net & CIIN: "Gestión de proyectos y metodologías con Visual Studio Team System"

Microsoft Office Live Workspace: Por fin!

Aunque fue ayer a través de un comunicado de prensa cuando Microsoft anunció la disponibilidad pública a nivel mundial de la Beta 1 de Office Live Workspace, no ha sido hasta hoy cuando me he enterado después de ver que en mi cuenta de correo tenía el siguiente mensaje: Your workspace is ready!…Nada más leerlo, me he puesto a probarlo…y para los que os animéis a experimentar, no tenéis más que acceder a Office Live Workspace. Lo primero que hay que hacer es completar el proceso de sign-up iniciado previamente (en mi caso hace 3 meses), tras aceptar las condiciones del contrato, por fin aparece el citado Workspace:

image

…lógicamente me dije, no nos vamos a quedar aquí y vamos a probar algunas de las cosillas que ofrece y que prometen (Por cierto, la plataforma huele mucho a mi querido SharePoint ;)). Empecemos:

Crear un nuevo elemento

A través de la opción New podemos crear una serie de elementos típicos del espacio: Notas, Listas, Listas de Tareas, Listas de Eventos, Listas de contactos y documentos Word, Excel y PowerPoint. Vamos a elegir la creación de un documento de tipo Word…¿qué pasará?…no todo iba a ser tan fácil, lo primero que se recomienda es instalar es un update para Microsoft Office Live Workspace (no pasa nada, estamos en Beta1 :)). Pues nada, descargamos la actualización y lo instalamos (por cierto, es una descarga de 20. 4 MB).

image image

image

Una vez instalada la actualización (que por cierto tarda lo suyo…se instalan unos cuantos hotfixes por el camino…y hay que reiniciar el PC, pero merece la pena por probar Office Live Workspace), probamos de nuevo indicando en este caso que ya tenemos instalado el update anterior y aceptando el aviso de seguridad correspondiente, con lo que a continuación se abre nuestro amigo Microsoft Office Word…hasta aquí todo va bien y esto parece mucho a SharePoint como ya os comentaba :)…Guardamos el documento para ver que pasa…le cuesta, se cuelga Word…mmm, vamos a darle tiempo…por fin aparecen las credenciales de Windows Live para poder guardar el documento en el Workspace…bien!…tras introducir las credenciales y esperar de nuevo un tiempo (mi módem Vodafone a veces no está para dar muchas alegrías :PPP), se empieza a visualizar la ventana de guardar documento, con la opción de poder guardarlo en el Workspace:

image image  

image

Hasta aquí todo bien, pero…¿se habrá guardado el documento realmente en el Workspace? Para salir de dudas, nos vamos al navegador…y ahí está…impresionante:

image

Una vez creado el documento, podremos hacer con el las típicas operaciones de moverlo entre workspaces, compartirlo o borrarlo…y por encima de estas funcionalidades, visualizar el documento directamente en el Workspace…fijaros en como queda…cool!!!!!

image

A nivel de documento, podremos editarlo en Microsoft office Word, añadirle comentarios, compartirlo o guardarlo en el historial de versiones

Crear un nuevo Workspace

Lo siguiente que he probado, y aquí lo dejo en cuanto a que nos permite hacer el Workspace, es la funcionalidad de creación de un nuevo Workspace para compararlo con la creación de Site Collections y Sites de SharePoint en cuanto a como se realiza el proceso y el tipo de plantillas disponibles…y la verdad es que hay unas cuantas plantillas (un total de 12)…en mi caso he escogido la Meeting Workspace…una vez que el proceso acaba, el resultado no es tan espectacular como esperaba (no huele tanto a SharePoint :PPPP) puesto que la plantilla base en si es la misma, pero incluye una serie de documentos tipo y elementos (lista de asistentes) que se consideran como típicos en un espacio de tipo Meeting…supongo que conforme siga evolucionando la plataforma esta plantilla y otras se irán enriqueciendo..pero como dije, Office Live Workspace promete y mucho.

image image

image

Y lo último Microsoft Office Live Add-In

Esto si que es lo último que pruebo, el Microsoft Office Live Add-In que permite integrar los clientes Office con Office Live Workspace…tras instalarlo (está disponible en el propio Workspace, y la instalación es bastante sencilla), y abrir Microsoft Office Word 2007, los añadidos que tenemos son los siguientes:

  • Open from Office Live
  • Save to Office Live

image

Y hasta aquí las primeras pruebas de Office Live Workspace…no se, pero me da a mi que voy a utilizar bastante estas funcionalidades :PPPP. Espero que el post os haya resultado intersante.

Extensibilidad de LINQ: LINQ Flavours!

Como sabéis, una de las grandes novedades de Visual Studio 2008 y de .NET Framework 3.5 es el Language Integrated Query (LINQ) que habilita la definición de consultas integradas en el lenguaje de programación y es una de las piedras angulares de las nuevas versiones de C# y VB. Precisamente, muchas de las innovaciones que se han introducido en estas nuevas versiones son la base de LINQ, y el resumen de las mismas es el siguiente:

image 

Ahora bien, además de apoyarse en estas innovaciones, LINQ define un modelo ampliable y extensible para definir nuestras propias consultas o API’s de consulta, de manera que podemos ir más allá de las extensiones para LINQ que por defecto vienen con Visual Studio 2008, .NET Framework 3.5 y ADO.NET Entity Framework:

image
  • LINQ To Objects y LINQ To XML para trabajar con fuentes de datos no relacionales.
  • Para ADO.NET tenemos:
    • LINQ To Datasets
    • LINQ To SQL
    • LINQ To Entities

Tras esta pequeña introducción, la idea de este post es hacer una recopilación y recorrido por las extensiones que para LINQ se han ido creando durante los últimos dos años, algunos de los cuales presentó Octavio Hernández en su charla dentro del lanzamiento de Visual Studio 2008, SQL Server 2008 y Windows Server 2008 (me hubiera gustado estar en el evento y asistir a esta charla).. Empecemos.

Proveedores de LINQ Personalizados

Como comentábamos, LINQ es un modelo completamente extensible y aquí están algunas de las extensiones que he ido descubriendo cuando he preparado seminarios de LINQ, en los propios cursos de LINQ,…

IEnumerable<T> data = …;
var q = from x in data.AsParallel() where p(x) orderby k(x) select f(x);
foreach (var e in q) a(e);
  • CLINQ (que no es Continuous LINQ, proyecto en Codeplex que he descubierto esta tarde…), en este caso nos referimos al proyecto CLINQ que Tomas Petricek, MVP de C#, inició para que el lenguaje C++ tuviese soporte para LINQ (de hecho, cualquier lenguaje que soporte la CLS puede añadir sus propias implementaciones de LINQ). Por ejemplo, mediante las extensiones desarrolladas por Tomas para C++, la consulta a una BD en C++ quedaría:
// create connection to database 
NorthwindData db(".. connection string .."); 

// declare database query 
Expr<Customers^> cvar = Var<Customers^>("c"); 
CQuery<String^>^ q = db.QCustomers 
  ->Where(clq::fun(cvar, cvar.City == "London")) 
  ->Select(clq::fun(cvar, 
      cvar.ContactName + Expr<String^>(", ") + cvar.CompanyName)); 

// execute query and output results 
for each(String^ s in q->Query) 
  Console::WriteLine(s);

Tomas ha creado una sección en Codeplex dedicada a extensiones para LINQ. De momento está incluido CLINQ, pero según el autor, poco a poco irá añadiendo alguna más.

  • LINQ To SharePoint, como no podía ser de otro modo, existe desde hace tiempo un proveedor de LINQ específicamente pensado para realizar consultas contra listas de SharePoint usando sintaxis LINQ. Esta extensión tiene su sección correspondiente en Codeplex, y además de habilitar consultas LINQ, dispone de una herramienta de creación de clases sobre las que definir consultas a partir de listas de SharePoint: SpMetal (misma idea que el SQLMetal de LINQ To SQL). Actualmente en Codeplex tenemos disponble la versión v0.2.4.0 alfa preparada para .NET Framework 3.5 y Visual Studio 2008. Un ejemplo de uso de esta extensión es el siguiente:
var ctx = new SharePointDataContext(new Uri(http://fileserver));
ctx.Credentials = new NetworkCredential(“dimitri”,”LinqToSharePoint”);

var books = ctx.GetList<Books>();

var res = from b in books
select new { b.Title, b.Author};

foreach (var u in res)
Console.WriteLine(u);

  • LINQ To Amazon, en este caso se trata de una extensión creada por uno de los autores del libro LINQ in Action, Fabrice Marguerie, que permite consultar libros de Amazon mediane LINQ. De hecho, esta extensión permite consultas LINQ contra un cierto catálogo de libros, obteniendo las estructuras XML que devuelven los servicios web de Amazon. Un ejemplo de uso de esta extensión sería el siguiente:
var query =
  from book in new Amazon.BookSearch()
  where
    book.Title.Contains(“ajax”) &&
    (book.Publisher == “Manning”) &&
    (book.Price <= 25) &&
    (book.Condition == BookCondition.New)
  select book;

var sequence = query.ToSequence();

  •  LINQ To NHibernate, esta extensión permite escribir consultas LINQ que son posteriormente traducidas a Criteria Queries que son ejecutadas por un objeto de Sesión NHibernate. Todo el código de este proyecto está accesible en este enlace…y aunque un poco fuera de tópico, fijaros en la sorpresa que os encontraréis si entráis en la página principal Hooked on LINQ: LINQ Reference Stuff…pero fijaros en el formato 😉 :
Image Image

        Desde luego, las tazas son “molonas”, creo que me las voy a pedir por esto y porque merece la pena darle soporte a Hooked on LINQ. Están realizando un excelente trabajo.

  • DbLINQ Project, se trata de un proyecto en Code2Code en el que podéis encontrar las bases de un proveedor LINQ para bases de datos Oracle, MySQL y PostgreSQL. Como se comenta en la página del proyecto DbLINQ, se garantiza que las consultas simples funcionarán sin problemas, aunque no las complejas…precisamente la disponibilidad del código habilita que los desarrolladores puedan testear bien estas extensiones y evaluar, extender y corregir el comportamiento del proveedor al modelar consultas complejas. Las releases del código están en este enlace. Todo el proyecto se está desarrollando bajo licencia MIT para ser compatible con el proyecto Mono.
  • LINQ To LDAP, se trata de un proveedor capaz de enviar consultas LINQ a un directorio activo sobre LDAP partiendo de las expresiones de filtrado en LDAP que aparecen en la RFC 2254. Un ejemplo de uso de este proveedor creado por Bart de Smet’s es el siguiente:
var users = new DirectoryObject<User>(new DirectoryEntry(“LDAP://localhost”), SearchScope.Subtree);
var groups = new DirectoryObject<Group>(new DirectoryEntry(“LDAP://localhost”), SearchScope.Subtree);
var res1 = from usr in users select usr;
Console.WriteLine(“QUERY 1n=======”);
foreach (var w in res1)
     Console.WriteLine(“{0}: {1} {2}”, w.Name, w.Description, w.PasswordLastSet);
     Console.WriteLine();
var res2 = from usr in users where usr.Name == “A*” select usr;
Console.WriteLine(“QUERY 2n=======”);
foreach (var w in res2)
    Console.WriteLine(“{0}’s full name is {1}”, w.Name, w.Dn);
    Console.WriteLine();
  • LINQ To TFS, esta nueva extensión creada por Octavio Hernández,y de la que tuve conocimiento a raíz del post de Octavio, la podemos encontrar en Codeplex y se trata de un proveedor de LINQ preparado para consultar el repositorio de Team Foundation Server en el que se hace el almacenamiento y control de versiones de Work Items.
  • LINQ To Flickr, esta extensión al estilo de LINQ To Amazon permite consultar fotografías de Flickr por tag, fecha de creación, identificador de usuario o título. El autor de esta extensión es el egipcio

    Mohammed Hossam El-Din.

  • LINQ To JSON, se trata de una extensión para JSon.NET que permite crear y consultar objetos JSON mediante consultas de LINQ. Su creador es James Newton, y esta extensión permite trabajar con objetos JSON de manera similar a como LINQ To XML permite manipular estructuras XML.
JObject o = JObject.FromObject(new

{

  channel = new

  {

    title = “James Newton-King”,

    link = “http://james.newtonking.com&#8221;,

    description = “James Newton-King’s blog.”,

    item = from p in posts orderby p.Title

         select new

        {

          title = p.Title,

          description = p.Description,

          link = p.Link,

          category = p.Categories

        }

  }

});

  • BLINQ, en este caso no se trata de una extensión en sí, sino de una herramienta (descontinuada) que permite generar sitios ASP.NET para visualizar, crear y manipular datos obtenidos mediante LINQ a partir de un cierto esquema relacional.

Y como podéis ver en este recopilatorio Hosam Kamel, el listado completo de proveedores de LINQ que podemos encontrar en la red es este:

  • LINQ to Amazon.
  • LINQ to Active Directory.
  • LINQ to Bindable Sources (SyncLINQ).
  • LINQ to CRM.
  • LINQ to Geo – Language Integrated Query for Geospatial Data.
  • LINQ to Excel
  • LINQ to Expressions (MetaLinq).
  • LINQ to Flickr.
  • LINQ to Google.
  • LINQ to Indexes (LINQ and i40).
  • LINQ to IQueryable.
  • LINQ to JSON.
  • LINQ to LDAP.
  • LINQ to NHibernate.
  • LINQ to JavaScript.
  • LINQ to Lucene.
  • LINQ to Metaweb(freebase).
  • LINQ to MySQL, Oracle and PostgreSql (DdLINQ project).
  • LINQ to RDF Files.
  • LINQ to Sharepoint.
  • LINQ to SimpleDB.
  • LINQ to Streams.
  • LINQ to WebQueries.
  • LINQ to WMI.
  • LINQ to XtraGrid.

Está claro que el título del post de Hosam, LINQ To Everything, es muy apropiado.

Creación de proveedores de LINQ personalizados

Además de las extensiones comentadas, cualquier desarrollador puede crear las suyas propias. De hecho, estos son algunos ejemplos que muestran como habría que proceder:

  • Escribir un proveedor personalizado desde cero: en esta entrada tenéis un ejemplo.
  • Escribir proveedores personalizados partiendo del proyecto LINQExtender de Codeplex. El ejemplo en este caso está aquí.

Nota: Ambos ejemplos han sido realizados por Mehfuz Hossain.

…¿y existe LINQ fuera de la plataforma Microsoft? Buena pregunta, y la respuesta es que sí. De hecho, en el mundo Java ya ha aparecido LINQ for Java o Quaere. Como se comenta en este post, Quaere is a DSL que añade sintaxis de consultas tipo SQL en el desarrollo de aplicaciones Java basándose en el modelo del proyecto LINQ ;)…como muestra, un pequeño ejemplo de Quaere:

Integer[] numbersA = {0, 2, 4, 5, 6, 8, 9}; Integer[] numbersB = {1, 3, 5, 7, 8}; Iterable<Variant> pairs =    from("a").in(numbersA).from("b").in(numbersB).where(lt("a", "b")). select(create(property("a"),property("b"));

Sin más, hasta aquí llega este post en el que he intentado reflejar la extensibilidad de LINQ. Espero que os haya resultado interesante.