December 2007 - Artículos
"Me encantan que los planes salgan bien". Esta frase del Equipo A, concretamente de John "Hannibal" Smith, la decía siempre al acabar cada capítulo, pero no al acabar cada capítulo de cualquier manera, sino al acabar el capítulo como lo había planeado, es decir, bien. Esta misma frase la he empleado muchas veces en mis proyectos Software en plan grito de guerra cuando acababa una tarea, una fase del proyecto o el proyecto en sí.
Sería bonito que siempre pudiéramos usarla. Significaría algo bueno sin duda.
Sin embargo, hay otra frase de significado completamente diferente que también la uso cuando las cosas no salen tan bien. "La cagaste burlancaster", frase de aquel mítico álbum de los Hombres G y que se les podría soltar en alguna ocasión a la jeta de la gente de Microsoft, y en particular a la gente de SharePoint.
No dudo de que SharePoint sea un gran producto, de hecho lo amo, pero tampoco dudo de que a veces, uno piensa si detrás del equipo de SharePoint hay un gran grupo tipo Equipo A, o un grupo en el plan más cómico como el álbum de los Hombres G.
Y dado que es muy fácil hablar por hablar y no dar ninguna pista, aquí va la mía y el porqué digo todo esto.
¿Alguien conoce la KB928365?. ¿Alguien ha oído hablar de ella?. Si tu respuesta es no, a partir de hoy la recordarás para siempre.
Sería el mes de Julio, concretamente el 10 de Julio, cuando los chicos de Microsoft decidieron publicar un importante parche de seguridad, ese tipo de parches que se instalan en los sistemas operativos con poco esfuerzo y que son tan importantes (de seguridad) que son necesarios de la muerte.
El caso es que el parche de seguridad de la KB928365 corresponde con el denominado como Security Update for Microsoft .NET Framework 2.0.
Con ese nombre, ¿quién duda en instalárselo?. Indudablemente nadie.
Así que nada, a instalarlo en ese precioso sistema operativo Windows 2003 Server con mi servidor SharePoint en él, reiniciar el sistema para asegurarse de que todo está perfectamente y a seguir con la vida que es muy bonita.
Hasta aquí todo fenomenal: "Me encanta que los planes salgan bien".
Todo fenomenal hasta que pasado un tiempo, un día y de repente llama un usuario: "La cagaste burlancaster".
El usuario que me llama: "Jorge, el sistema no me deja añadir ninguna página al Wiki de la empresa". Miro, remiro, y en principio la única conclusión importante que saco es nada, es decir, un mensaje de error de los que te ponen los pelos como escarpias: "Error HTTP 403 Forbidden".
En este punto, uno piensa en alguna actualización última y poco más porque el servidor no tiene nada raro, ninguna instalación adicional, y además ha funcionado todo perfectamente porque ya me aseguré de que el Wiki y todo el SharePoint funcionara en su momento (acostumbro a hacer pruebas antes de publicar algo o abrirlo a los usuarios, y en SharePoint siempre uso la cuenta de administración y otra cuenta para chequear todas las posibilidades).
Mmmmm... no se, no entiendo nada... la única actualización importante del sistema ha sido la KB928365 que Microsoft ha propuesto como necesaria y lo cierto es que es la candidata a culpable, pero... ¿cómo va a publicar Microsoft un parche y que éste reviente otra cosa que antes funcionaba?. Sé que ha pasado más veces, pero eso era hace mil años, y últimamente no pasaba nada de esto, mejor dicho, me tengo que remontar muchos años atrás para recordar algo así...
Pues nada, me pongo a investigar más y más, y la conclusión es... ¡qué el KB928365 fastidia a SharePoint en la agregación de usuarios, en la creación de páginas como las del Wiki y alguna cosa más!. ¡Alucinante!.
En este punto, uno que no es de piedra maldice en muchas lenguas a mucha gente de Microsoft, porque yo también he hecho cagadas, pero como esta no recuerdo haberla hecho nunca.
Bien, una vez que ya sé dónde está el fallo, ahora me toca ponerme a buscar la solución en Internet, porque aunque en el KB928365 no dice nada del problema que os cuento, en Internet se encuentra uno con muchas quejas al respecto... "Mal de muchos consuelo de tontos".
Sin embargo, en Internet no encuentro ningún parche y sí muchas sugerencias. Que si no se qué con el archivo web.config que no sirve de nada, que si desinstalar el KB928365,... pero... ¿es una buena idea desinstalar un parche de seguridad para dejar que SharePoint funcione como antes?. Bajo mi punto de vista, eso es inaceptable.
Sin embargo, lo ideal es hacer un parche del parche, algo que vendría muy bien sin duda para resolver este problema.
No me queda otra, navegar y navegar, y así, me encuentro por fin con la solución:
Me froto las manos de la alegría y ansias por resolver el problema.
Todos los KB anteriores, nos llevan a esta dirección (linkid=6294451). Esto huele bien.
Ese enlace me lleva a un formulario para enviar una solicitud de hotfix.
No había visto nunca algo similar y lo primero que pienso es porqué no hacen público el hotfix, pero lejos de preguntarme por la existencia humana en el Universo, relleno el cuestionario y lo mando. Total, a estas alturas no tengo nada que perder. Un mensaje me indica que después de 8 horas recibiré un mensaje con el hotfix.
Espero las correspondientes 8 horas y recibo un mensaje genial, de los de archivar para siempre.
El mensaje empieza así:
Apreciado Cliente: Microsoft se encuentra interesado en escuchar y canalizar las consultas de nuestros clientes. Es por esto que nos complace contactarnos con usted en virtud de su solicitud.
Y continua:
En atención a ello le solicitamos haga llegar la consulta a Microsoft España, por medio telefónico se puede comunicar al 902-197-198. ...
Así que imaginaros la cara que se me ha quedado.
En este punto, uno piensa... ¿es tolerable este mareo o esta tomadura de pelo?.
¿Al final va a ser verdad eso de que hay que desintalar el ya famoso KB928365?.
Si logro avanzar en este tema os lo comentaré, pero me estoy cuestionando seriamente la posibilidad de desinstalar el famoso KB928365.
Videos en inglés sobre LINQ
Microsoft ha publicado una serie de 4 videos de la típica serie How Do I? dedicados por esta vez a LINQ.
Además de estos 4 videos, Microsoft ha publicado también 7 videos más sobre LINQ para Visual Basic, elaborado por el equipo de Visual Basic.
Todos los videos están en inglés y podréis acceder a ellos en este enlace.
Dadas las fechas en las que nos encontramos, quiero desearos a todos unas
Felices Fiestas, Feliz Navidad y Próspero Año Nuevo 2008.
Espero que no os pase como al pavo de la imagen y que sobre todo disfruteis mucho en compañía de los vuestros.
Seguramente recordarás todo lo bueno y malo acontecido en este 2007 y tendrás en mente muchos nuevos e interesantes proyectos para el 2008.
Muchos abrazos y ánimos para los que en estas fechas les vengan algunos recuerdos tristes, mucho amor.
¡Sed felices!
Microsoft ha publicado la versión definitiva de la especificación de Visual Basic 9.0 (el lenguaje de programación utilizado en Visual Basic 2008).
La especificación, escrita en inglés, la encontraremos en un documento de Microsoft Word y tiene un tamaño de 1.7 Mb.
Podréis acceder a esta documentación en este enlace.
LINQ to DataSet (L2DataSet)
Resumen general de lo publicado sobre LINQ hasta el momento:
En esta ocasión, vamos a desarrollar un ejemplo que es casi idéntico al ejemplo de LINQ y XML.
Lo que vamos a hacer, es trabajar a partir de un documento XML que vamos a cargar en en un DataSet para trabajar con el DataSet de forma directa.
Una vez más, vamos a elaborar un sencillo ejemplo del uso de LINQ con el objeto DataSet.
En primer lugar, trabajaremos con el documento XML de nombre Documento.xml y que contendrá la siguiente información:
|
<?xml version="1.0"?> <datosGenerales> <datosPersona> <nombre>Fernando</nombre> <edad>18</edad> </datosPersona> <datosPersona> <nombre>Rosa</nombre> <edad>17</edad> </datosPersona> <datosPersona> <nombre>Carlos</nombre> <edad>21</edad> </datosPersona> </datosGenerales>
|
Partiendo de este documento XML, vamos a aprovechar la base de los ejemplos anteriores de LINQ puestos al principio de esta entrada, y vamos a insertar un nuevo control Button en el formulario Windows de ejemplo.
Finalmente, vamos a escribir el siguiente código de aplicación:
|
Public Class MainForm
Private Sub btnForthTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForthTest.Click 'LINQ to DataSet Dim datos As New DataSet() ' Leemos los datos del documento XML y los ' volcamos al objeto de tipo DataSet datos.ReadXml("C:\Documento.xml") ' Declaramos una variable para obtener los datos del ' documento XML que cumplen la condiciSql programada Dim personasSeleccionadas = From seleccion In datos.Tables(0).AsEnumerable() Where seleccion.Field(Of String)("nombre") Like "??r*" Select seleccion.Field(Of String)("nombre") ' Declaramos una variable para obtener el resultado Dim resultadoObtenido As String = "" ' Recorremos los resultados de la condiciSql For Each elemento In personasSeleccionadas resultadoObtenido &= elemento & vbCrLf Next ' Mostramos el resultado final MessageBox.Show(resultadoObtenido) End Sub
End Class |
Este ejemplo en ejecución, dará el mismo resultado que el ejemplo anterior de LINQ to XML, es decir, los valores Fernando y Carlos del documento XML.
Como podemos observar, el trabajo con DataSets es o puede ser directo y transparente a la hora de ejecutar sentencias con LINQ.
Espero que este breve ejemplo sirva de muestra para el trabajo con LINQ y DataSet que contiene datos.
Microsoft ha publicado una máquina virtual con Visual Studio 2008 y Microsoft .NET Framework 3.5.
La máquina virtual de casi 4 Gb y en inglés, expirará el 8 de Marzo de 2008, lo cual no está nada mal.
En esta máquina virtual, encontraremos un sistema operativo Windows Server 2003, Visual Studio 2008 Team Suite y Visual Studio 2008 Training Kit.
El Training Kit contiene HOLs, presentaciones y demos de lo último de lo último añadido en la nueva versión de .NET.
Podréis acceder a esta máquina virtual en este enlace.
Hace más de 1 año os comentaba algunas opiniones respecto al canon digital.
En esta ocasión me hago eco de una noticia aparecida recientemente sobre unos nuevos impuesto canon que afectarán a todos los consumidores.
Según esta noticia, los teléfonos móviles tendrán un canon de 1,5 €, los reproductores MP3 y MP4 un canon de 3,15 €, y las memorias USB 30 céntimos de €.
Estas tarifas se pondrán en marcha para el próximo Enero de 2008, un regalo propio de los Reyes Magos de la SGAE.
Pero no importa todo esto, ya que por otro lado, el canon digital en CD/DVD ha sido reducido a un 20%, los equipos de impresión también bajan el precio del canon y así, con eso, nos quieren engañar, hacernos callar y hacernos creer que el canon ha bajado, pero la realidad es que por otro lado se sube el canon de algunos productos o se crean nuevos canon.
Lo que más rabia me da de todo esto es que nos tomen el pelo y que además nos tomen por delincuentes e imbéciles. Se supone que todos somos inocentes hasta que se demuestre lo contrario, y tener un teléfono móvil por ejemplo no es delito, o comprar un DVD vírgen no tiene porqué usarse en grabar música o películas piratas, aunque cualquier día le meten a uno en la cárcel por tener en el bolsillo una memoria USB con el pretexto de ser un ciber-terrorista.
En fin... tan solo quería compartir con vosotros esta noticia y pediros que movamos este tipo de noticias para protestar por estas malas artes que algunos políticos están haciendo y que muy poco tienen que ver con la realidad.
Ya sabéis que lo más fácil de hacer cuando se es incopetente y no se sabe cómo controlar las situaciones que le desbordan, es prohibir.
Finalmente, no os olvidéis de visitar la Web de todos contra el canon.
LINQ to XML (L2XML)
Continúo escribiendo ejemplos de breve introducción a LINQ, y en este caso le llega el turno a LINQ to XML.
Antes de comenzar, hago un recordatorio de algunos de los enlaces de interés que he publicado sobre LINQ:
Una vez hecho esto, comenzaremos ya con este ejemplo.
Lo que vamos a hacer, es trabajar a partir de un documento XML que vamos a cargar en memoria para trabajar con sus datos.
En sí es un ejemplo muy sencillo que nos abrirá la puerta de trabajo con LINQ to XML.
En primer lugar, contaremos con un documento XML al que he llamado Documento.xml y que contendrá la siguiente información:
|
<?xml version="1.0"?> <datosGenerales> <datosPersona> <nombre>Fernando</nombre> <edad>18</edad> </datosPersona> <datosPersona> <nombre>Rosa</nombre> <edad>17</edad> </datosPersona> <datosPersona> <nombre>Carlos</nombre> <edad>21</edad> </datosPersona> </datosGenerales>
|
Partiendo de este documento XML, vamos a aprovechar la base de los ejemplos anteriores de LINQ puestos al principio de esta entrada, y vamos a insertar un control Button en el formulario Windows de ejemplo.
Finalmente, vamos a escribir el siguiente código de aplicación:
|
Public Class MainForm
Private Sub btnThirdTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThirdTest.Click ' LINQ to XML ' Creamos una fuente de datos a partir de un documento xml Dim documento As XDocument = XDocument.Load("C:\Documento.xml") ' Declaramos una variable para obtener los datos del ' documento XML que cumplen la condiciSql programada Dim personasSeleccionadas = From seleccion In documento.Descendants("datosPersona") Where seleccion.Element("nombre").Value Like "??r*" Select seleccion.Element("nombre").Value ' Declaramos una variable para obtener el resultado Dim resultadoObtenido As String = "" ' Recorremos los resultados de la condición Sql For Each elemento In personasSeleccionadas resultadoObtenido &= elemento & vbCrLf Next ' Mostramos el resultado final MessageBox.Show(resultadoObtenido) End Sub
End Class
|
Este ejemplo en ejecución, dará como resultado los valores Fernando y Carlos del documento XML.
Como vemos aquí, trabajar con documentos XML, cargarlos y trabajar con LINQ y sus datos es una tarea muy sencilla.
AndorraDotNet
Comunidad de usuarios de .NET de Andorra
Hola a todos.
El nacimiento de una nueva Comunidad de usuarios de .NET es siempre un motivo de alegría y más en un país en el que no había ninguna.
La presente entrada es para comunicaros el nacimiento de una nueva Comunidad .NET en el mundo, concretamente en Andorra el país de los Pirineos, un pequeño país situado entre España y Francia y que nada tiene que ver con Andorra (Teruel - España) [que también existe].
Esta nueva Comunidad de usuarios .NET dirigida por Lluís Franco, MVP de Visual Basic, acaba de echar a andar y espero y deseo de todo corazón que tenga un futuro prometedor.
Echar a andar una Comunidad de usuarios .NET requiere siempre mucho trabajo, esfuerzo y sacrificio, y se de primera mano que Lluís está poniendo todo de su parte para que esta Comunidad asiente bien sus raices.
Para el que no lo sepa, Andorra es un pequeño país de apenas 80.000 habitantes, y en un país tan pequeño, es fácil pensar que no todo el mundo es informático ni trabaja con tecnologías .NET, de ahí que el esfuerzo que hay que hacer sea aún mayor. Sin embargo, no solo habría que reducir el ámbito de actuación de esta Comunidad de usuarios .NET al país andorrano, sino también a las regiones españolas y francesas que hay alrededor de Andorra, así que espero que esta sea una buena noticia para mucha más gente que encontrará en AndorraDotNet un grupo de usuarios de .NET abierto, y posiblemente más cerca de sus casas y lugares de trabajo.
En lo que a mí respecta, AndorraDotNet me ha nombrado miembro de honor, algo que me enorgullece. Algunos pensarán que porqué estando ahora viviendo en Madrid me han nombrado miembro de honor, y uno de los motivos es porque he estado trabajando y viviendo en Andorra durante algunos años y tengo allí buenos recuerdos y amigos (como Lluís & family).
Este fin de semana estuve en Andorra dándome una vuelta y aproveché para reunirme y hablar con Lluís de este fantástico proyecto. Un proyecto en el que espero poder contribuir con mi granito de arena en la medida en la que mis posibilidades me lo permita.
En AndorraDotNet hay ahora mismo una veintena de personas interesadas entre las que se pueden contar profesores de Universidad, alumnos de Universidad y Profesionales trabajando actualmente en Andorra. Para ser el comienzo de esta Comunidad no está nada nada mal.
Si alguien está interesado en colaborar y contribuir con esta nueva Comunidad de usuarios .NET no dudéis en hacerlo y poneros en contacto con Lluís.
Sé que Lluís está deseando que esta Comunidad de usuarios .NET adquiera la importancia que él mismo quiere que tenga, y conociendo a Lluís se que las personas que formen parte de esta Comunidad no se van a arrepentir, así que ánimo a quienes estén dudando en apuntarse a ella y mis felicitaciones a Lluís por esta idea y su dedicación.
¡Felicidades!
[Enlace a AndorraDotNet]

Casi de casualidad, como prácticamente ocurre la mayoría de las veces, me he topado con un conjunto de interesantes pósters de buenas prácticas.
Los pósters están reunidos en un fichero zip de casi 3 Mb y en formato PDF.
Se tratan de 7 pósters de contenido variado que pueden resultar muy interesantes.
Podréis acceder directamente a este material en este enlace.
LINQ to Object (L2Objects)
Anteriormente, pudimos ver como desarrollar nuestro primer ejemplo de LINQ con Visual Basic 2008 de la mano de Visual Studio 2008 (Empezando con LINQ y VB 2008).
En esta ocasión, vamos a utilizar una clase y a atacar a los miembros de la clase utilizando LINQ.
Reaprovechando el ejemplo que hicimos en el primer ejemplo que anteriormente comentaba o bien creando una aplicación de ejemplo completamente nueva, vamos a insertar en nuestro formulario Windows un nuevo control de tipo Button.
Para esta ocasión, vamos a crear una clase que por ejemplo tendría la composición de los campos de una la tabla (Persona).
Esta tabla tendrá 3 campos muy sencillos: DNI (de tipo Integer), Nombre (de tipo String) y Edad (de tipo Byte).
La clase PersonaTable contendrá los campos de la tabla Persona y quedará de la siguiente forma:
|
' Clase que representa la tabla Persona y sus campos Public Class PersonaTable Public DNI As Integer Public Nombre As String Public Edad As Byte End Class |
Una vez hecho esto, vamos a hacer doble clic sobre el control Button que hemos insertado y vamos a escribir el siguiente código de nuestra aplicación:
|
Public Class MainForm
Private Sub btnSecondTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSecondTest.Click ' Creamos una matriz de clases con los datos inicializados de cada clase Dim listaAuxiliar1() = {New PersonaTable With {.DNI = 1000, .Nombre = "Juan", .Edad = 23}, _
New PersonaTable With {.DNI = 1001, .Nombre = "Mar, .Edad = 24}}
' Declaramos una variable para obtener de la matriz de meses del a ' los meses que cumplen la condiciSql programada Dim empleadosSeleccionados = From seleccion In listaAuxiliar1 Where seleccion.Nombre Like "J*" Select seleccion.DNI
' Declaramos una variable para obtener el resultado Dim resultadoObtenido As String = ""
' Recorremos los resultados de la condiciSql For Each seleccion In empleadosSeleccionados resultadoObtenido &= seleccion & vbCrLf Next
' Mostramos el resultado final MessageBox.Show(resultadoObtenido) End Sub
End Class
|
El resultado de ejecutar esta instrucción es 1000, ya que en la búsqueda de datos, estamos buscando el DNI que cumple que la primera letra del campo Nombre empieza por la letra J.
No obstante, en este ejemplo, hemos inicializado la matriz listaAuxiliar1 con datos de forma directa.
Si quisiéramos hacerlo clase a clase, lo podríamos hacer de esta otra forma:
|
Public Class MainForm
Private Sub btnSecondTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSecondTest.Click ' Creamos una lista de objetos de tipo PersonaTable Dim listaAuxiliar2 = New List(Of PersonaTable)
' Definimos una clase PersonaTable Dim empleado1 As New PersonaTable ' Damos valores a sus miembros empleado1.DNI = 1000 empleado1.Nombre = "Juan" empleado1.Edad = 23 ' Ala clase a la lista de tipo PersonaTable listaAuxiliar2.Add(empleado1)
' Definimos otra clase PersonaTable diferente Dim empleado2 As New PersonaTable ' Damos valores a sus miembros empleado2.DNI = 1001 empleado2.Nombre = "Mar empleado2.Edad = 24 ' Ala clase a la lista de tipo PersonaTable listaAuxiliar2.Add(empleado2)
' Declaramos una variable para obtener de la matriz de meses del a ' los meses que cumplen la condiciSql programada Dim empleadosSeleccionados = From seleccion In listaAuxiliar2 Where seleccion.Nombre Like "J*" Select seleccion.DNI
' Declaramos una variable para obtener el resultado Dim resultadoObtenido As String = ""
' Recorremos los resultados de la condiciSql For Each seleccion In empleadosSeleccionados resultadoObtenido &= seleccion & vbCrLf Next
' Mostramos el resultado final MessageBox.Show(resultadoObtenido) End Sub
End Class
|
Evidentemente, en este segundo caso, el resultado es el mismo, el DNI con valor 1000.
Sirva este segundo ejemplo, como demostración muy liviana del poder y el uso de LINQ.
En este caso, lo que se dice es... ¡la imaginación al poder!.
Muchos desarrolladores se están empezando a preguntar que diferencia hay entre LINQ to Entities y LINQ to SQL (conocida antes como DLinq).
Aquí me gustaría echar algo de luz al mismo tiempo que traer algunas reflexiones que podréis sacar de los enlaces que os indico en esta entrada.
Con ambas (LINQ to SQL y LINQ to Entities) podemos trabajar con datos, con bases de datos y con EDM (Entity Data Model) que es como sabréis una representación lógica del modelos de datos, así que... ¿cuáles son las diferencias más notables entre ellas o cuál es la "más mejor"?.
Grosso modo, LINQ to SQL está disponible desde ya en Visual Studio 2008 (Microsoft .NET Framework 3.5 para más señas), y con él podremos acceder a los esquemas de bases de datos.
LINQ to Entities no está aún disponible en versión RTM, aunque le falta poco, y sí en versión Beta 3 aunque puede ser usada con Visual Studio 2008 RTM. El único aspecto de relevancia, es que ADO.Net Entity Framework forma parte de la próxima versión de ADO.Net (actualmente en versión Beta 3 como indicaba anteriormente).
Para utilizar satisfactoriamente ADO.Net Entity Framework Beta 3 en Visual Studio 2008 RTM (32 bits), deberemos descargarnos primero el Framework correspondiente (1.3 Mb), y posteriormente ADO.Net Entity Framework Tools CTP Diciembre 2007 (7.1 Mb). También se sugiere que descarguemos el XML Editor QFE (650 Kb). Adicionalmente a todo esto, podemos descargar los ejemplos de la Beta 3 en este enlace (29 Mb) y acceder a la documentación de ADO.Net Entity Framework Beta 3.
Pero volviendo nuevamente a la tesitura de LINQ to Entities o LINQ to SQL, debemos indicar que LINQ to SQL es válida solo para SQL Server y posiblemente para poco más (no he tenido tiempo de revisar si han incluido algún cambio de última hora). LINQ to Entities sin embargo, está pensado para trabajar incluso con diferentes sistemas gestores de bases de datos.
LINQ to SQL es una forma muy sencilla y simple de mapear datos. Para muchas aplicaciones es suficiente, sin embargo, en otras aplicaciones nos podemos quedar "cojos" y ahí aparece LINQ to Entities que mapea datos de una forma más compleja pero al mismo tiempo más potente o más apropiada muchas veces para el mundo real.
¿Cuál elegir entonces?.
Seré gallego y diré... depende.
Depende del mapeo de objetos relaciones y su complejidad, de las necesidades que tengamos y de lo que necesitemos resolver.
En estos casos siempre digo lo mismo. Si vas a circular por una carretera secundaria... ¿te merece la pena circular con un Ferrari?. En cambio, si lo que vamos a hacer es circular por autopistas y en contadas ocasiones y las que menos en carreteras secundarias, igual sí nos merece la pena circular con un Ferrari.
Por eso depende. Cada proyecto es diferente. Puede haber similitudes pero todos los proyectos son diferentes los unos de los otros. El desarrollo del Software como ya sabéis no es una fábrica de churros dónde se hacen las cosas sin esfuerzo alguno, así que elijamos LINQ to SQL o LINQ to Entities siempre tendremos que trabajar un poquito.
Lo importante es que Microsoft nos proporciona estas dos posibilidades para trabajar con entidades y con datos y aquí es donde muchos nos empezamos a hacer pajas mentales.
Finalmente, quería traeros una tabla de comparación entre NHibernate, LINQ to SQL y LINQ to Entities. No he podido verificar los datos de esta tabla, pero de ser correcta sería una interesante tabla de comparación entre estas tres formas de trabajar con entidades (no he hablado de NHibernate hasta ahora porque en realidad no venía a colación hablar de ello directamente). También es destacable unas reflexiones de hace meses sobre NHibernate y LINQ to Entities.
Espero que todo esto ayude a entender un poco más la diferencia sobre todo entre LINQ to SQL y LINQ to Entities.
Primera pregunta fácil... ¿qué significa LINQ?. Primera respuesta fácil, Language Integrated Queries. Bien,... ya sabemos algo.
Segunda pregunta fácil... ¿dónde se encuentra LINQ?. Segunda respuesta fácil, en .NET Framework 3.5, que es el Framework que acompaña a Visual Studio 2008,... bien, ahora sabemos un poquitín más.
Tercera pregunta fácil... ¿qué Software necesito para poder desarrollar una aplicación con LINQ?. Tercera respuesta fácil, indudablemente Microsoft .NET Framework 3.5 y luego un entorno de desarrollo rápido como lo es Visual Studio 2008 y que soporta Microsoft .NET Framework 3.5.
Cuarta pregunta fácil... ¿con qué lenguaje puedo desarrollar mi primer ejemplo con LINQ?. Cuarta respuesta fácil, salvo sorpresas mayúsculas con cualquier lenguaje de .NET con soporte Microsoft .NET Framework 3.5.
Quinta pregunta fácil... ¿y qué se supone que puedo hacer con LINQ?. Quinta respuesta fácil, LINQ añade el concepto o conceptos de sentencias con todos los tipos de datos de una aplicación permitiéndonos navegar y seleccionar los datos como si estuviéramos conectados directamente a una fuente de datos. La idea principal es la de poder realizar funciones de consulta de datos (XML, colecciones y objetos, bases de datos, etc) de una forma integrada. Sin embargo, no podemos hacer cualquier cosa que se nos ocurra, de hecho no podemos por ejemplo ejecutar instrucciones Update, Delete, Insert o Create.
Y con todo esto, nos entran unas ganas de probar LINQ que no podemos más... así que siempre y en este punto, aparece una pregunta más... ¿cómo hacer nuestro primer ejemplo con LINQ?.
Pues eso es justamente lo que haremos a continuación.
LINQ to Object (L2Objects)
Iniciaremos un proyecto nuevo en Visual Studio 2008 y en concreto una aplicación Windows utilizando para ello Visual Basic 2008 (Visual Basic 9.0).
Dentro de nuestro formulario Windows, insertaremos un control Button.
Y finalmente escribiremos el siguiente código de nuestra aplicación:
|
Public Class MainForm
' Declaramos una matriz con los meses del a Private meses() As String = {"Enero", "Febrero", "Marzo", "Abril", _ "Mayo", "Junio", "Julio", "Agosto", _ "Septiembre", "Octubre", _ "Noviembre", "Diciembre"}
Private Sub btnFirstTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirstTest.Click ' Declaramos una variable para obtener de la matriz de meses del a ' los meses que cumplen la condiciSql programada Dim mesesSeleccionados = From seleccion In meses Where seleccion Like "?e*" Select seleccion
' Declaramos una variable para obtener el resultado Dim resultadoObtenido As String = ""
' Recorremos los resultados de la condiciSql For Each seleccion In mesesSeleccionados resultadoObtenido &= seleccion & vbCrLf Next
' Mostramos el resultado final MessageBox.Show(resultadoObtenido) End Sub
End Class
|
Como podemos observar en este ejemplo, lo primero que hacemos es declarar una matriz y a ella la asignamos un conjunto de valores para a modo de ejemplo poder jugar con ellos.
Posteriormente, lo que hacemos es obtener los valores resultantes después de ejecutar la sentencia Sql correspondiente. Aquí nos fijamos en que la selección la realizamos por medio de Like "?e*" o lo que es lo mismo, que el segundo carácter sea e y el resto lo que sea.
La ejecución de este código nos deberá devolver como salida Febrero y Septiembre.
Sirva este primer ejemplo para aprender lo básico e inicial de LINQ y para a partir de una colección de datos (que en este caso es una matriz), realizar una búsqueda sobre estos datos y actuar en consecuencia.
¿Fácil verdad?.
Quería expresar aquí algunas reflexiones sobre las tecnologías, su evolución y el estrés que a mi modo de ver causa en muchas ocasiones.
Hay muchas empresas tecnológicas grandes que me sorprenden por sus capacidades de crear y plasmar ideas de cara al resto del mercado informático y tecnológico.

Sin embargo, de todas ellas la que más me alucina es Microsoft. Mucha gente estará en contra de Microsoft por las razones que sean, y cada uno pensará lo que quiera de esta empresa, pero creo que es innegable el aceptar que es una empresa que no para de innovar (I+D) y de crear y crear y crear.
Sin embargo, no es menos cierto a mi modo de ver, que en el caso de Microsoft tanto avance y tanta creación genera de fondo un estrés continuado que a algunos les podría incluso ocasionar un estrés postraumático.
Ahora que asoma en el horizonte Microsoft Visual Studio 2008, Microsoft .NET Framework 3.5 y unas cuantas novedades más que están a punto de llegar, cuando me ha tocado dar un curso de .NET me encuentro siempre con la misma expresión... "¿de qué nos va a servir aprender .NET Framework 2.0 (por ejemplo) si la próxima versión está a punto de salir al mercado?". "¿Para qué aprendemos esto si quedará obsoleto en seguida?".
Aún hoy existen muchas empresas y personas que siguen estancadas en el desarrollo de aplicaciones anteriores a la tecnología .NET, quizás porque usan otra tecnología de desarrollo diferente, porque no tienen la necesidad de cambiar, porque no conocen las ventajas que le ofrece .NET u otra tecnología actual, o porque simplemente no sabe desarrollar en .NET.
Sobre las empresas o personas que no tienen la necesidad de cambiar, poco que decir. Muchas de las que he visto utilizan Microsoft Visual Basic 6.0 y lo que han hecho hasta ahora resuelve sus necesidades. Ante este panorama, siempre digo lo mismo... "¿para qué cambiar algo que no necesita ser cambiado y que funciona perfectamente?". Un cambio queda justificado siempre que la inversión del mismo se vaya a rentabilizar. En caso contrario, hacerlo por moda o porque me mola más es a mi modo de ver y con perdón, una tontería.
Ante el último grupo de empresas o personas, las que no saben desarrollar con .NET pero que sí están llamadas a dar ese salto, es también frustante saber que Microsoft .NET Framework ha evolucionado en demasía en los últimos años. Microsoft .NET Framework 1.0, Microsoft .NET Framework 1.1, Microsoft .NET Framework 2.0, Microsoft .NET Framework 3.0, Microsoft .NET Framework 3.5,... de hecho muchas personas se frustan de sólo pensar (o creer) que cuando conozcan una versión de Microsoft .NET Framework, habrá otra a punto de aparecer que sustituirá a la anterior (ojo con la palabra sustituirá porque muchos sabemos que no es cierta).
Por eso, muchos desconocen que la evolución de .NET Framework no es una evolución típica de nueva versión suprimiendo lo existente y sacando algo completamente nuevo que sustituya lo anterior. Siempre puede haber ajustes menores que implican la restitución de aspectos de un Framework por otro, pero la evolución de una versión de Microsoft .NET Framework a otra lleva siempre añadidos, casi nunca restitución o suprimir cosas. Es decir, aunque aprendamos Microsoft .NET Framework 2.0 y aparezca otra versión posterior, el concepto y los conocimientos nos seguirán sirviendo al 100%. Lo único que habrá que hacer es aprender lo nuevo, lo añadido a un nuevo Framework.
De todos los modos, el avance tecnológico en .NET Framework es continuado y muchas personas se agotan aunque vengan de una versión inmediatamente anterior.
Que duda cabe que a los que nos apasiona las tecnologías nos encanta reciclarnos y aprender de forma continuada. Nunca estaremos aburridos y siempre habrá algo nuevo que aprender, es un reto y motiva, somos así, un poco masocas, un poco bichos raros, pero es lo que hay. Sin embargo, no es menos cierto que aún siendo así, a veces uno piensa... "basta ya, necesito oxigenarse y descansar".
Ante tanta evolución, uno termina estresándose en algún momento. Necesita tomarse 15 días ó 1 mes sabático y tomar aire. El estrés que genera tanta evolución tan continuada y el no parar de aprender, investigar, probar, etc, hace que uno necesite hacer un break en algún momento.
El aprendizaje es por su parte un proceso cíclico, se repite una y otra vez, pero muchas empresas ven en este proceso un problema añadido. Reciclarse tiene un coste y no asumen que los costes se realicen en fases tan cortas de tiempo, ya que eso implica que apenas puedan amortizar las inversiones realizadas. De esta manera, hay empresas que ahora mismo están empezando a adentrarse en nuevas tecnologías como Microsoft .NET Framework y otras que esperan a que aparezca la última versión queriendo estar a la última.
Las empresas que empiezan a entrar en el mundo de una nueva tecnología como Microsoft .NET Framework, ven inicialmente la inversión justificada, pero al ver que salen nuevas versiones de un producto, ven siempre que esas inversiones son innecesarias porque no estarán casi nunca a la última. La línea que divide aquí el haber hecho bien con el paso tomado y el sentirse timado (por decirlo de alguna forma aunque suene un poco dura) es muy estrecha. Y en este caso también, aparece el estrés.
A mi modo de ver, la evolución de Microsoft .NET Framework es muy agresiva y muy rápida. He discutido esto cien millones de veces, en cien millones de foros dintintos, incluso con gente de Microsoft Corp. (Redmond). Prácticamente salimos a una nueva versión cada año o cada año y medio, y aunque siempre es cuestión de añadidos nuevos al Framework anterior, no es menos cierto creo yo, que lejos de hacer una carrera continua, hacemos carrera continua y pequeños y rápidos sprints, y esos pequeños y rápidos sprints llegan a veces a agotar aunque solo sea mentalmente.
La vida informática es divertidísima, la tecnológica es fantástica, me apasiona, los retos me motivan, las ganas por aprender calman mis ansias de conocimiento, pero a veces me estresa. No es el caso actualmente pero a veces reconozco que una paradita viene de perlas. Cada uno busca sus truquitos (consolas, salidas al campo, hacer deporte, ir al cine,...).
¿Tienen en cuenta estos factores las empresas informáticas actuales y sus departamentos de RRHH?, ¿debemos actuar como robots y ser inertes a estos posibles agotamientos mentales?, ¿soy un bicho raro y el único que se estresa a veces por tanto avance tecnológico?.
Sea como sea, el caso es que cuando he tenido la oportunidad de hablar con algún cliente de temas parecidos, la mayoría termina sacando a la luz que a veces tanto avance le agobia y pasa de invertir en tecnología porque siempre está cambiando. Lo cierto es que la tecnología cambia porque la tecnología está hecha para satisfacer fundamentalmente las necesidades de las personas, y las necesidades suelen cambiar a medida que el ser humano avanza en el progreso, en el día a día.
Ya os indicaba hace algunas fechas que los HOL sobre LINQ (Visual Studio 2008) han hecho su aparición.
En aquella ocasión, os anunciaba los LINQ HOL (Hands On Labs) para Visual Basic 2008, es decir, laboratorios introductorios a LINQ para Visual Basic 2008.
Ahora le llega en turno a los HOL de C#.
Espero que os resulten útiles.
Se trata de un documento en formato Microsoft Word 2007 de aproximadamente 30 páginas, que podréis obtener desde el siguiente enlace.
Adicionalmente y sobre LINQ, también podréis conseguir los HOL de LINQ to SQL en este otro enlace.
No me cansaré de repetirlo, esta gente de Microsoft no para.
Ahora le llega el turno a Microsoft Parallel Extensions para .NET Framework 3.5 en su versión CTP de Diciembre de 2007.
O lo que es lo mismo, las versión preliminar de las entensiones para .NET Framework 3.5, que nos permitirán preparar modelos de programación aprovechando las características más avanzadas del hardware del equipo como por ejemplo múltiples procesadores, etc.
Recuerda que esta versión es una versión CTP, es decir, una versión preliminar que podemos utilizar para realizar pruebas, pero no como versión final.
Finalmente, recordad que es necesario disponer de Visual Studio 2008 y Microsoft .NET Framework 3.5.
El enlace de la descarga lo encontraréis aquí, y la descarga en sí, se realiza en inglés y tiene un tamaño máximo de 3 Mb.
Si quieres acceder a más información sobre ejecuciones en paralelo y sobre Parallel Extensions, te invito a visitar los siguientes recursos:
Microsoft ha actualizado recientemente su Software de Zune, pero un error de Software en esa actualización, hace que la asociación de los títulos al album correcto sea errónea.
Esto es lo que se puede observar en la KB de Microsoft (KB945319).
Para resolver este problema, Microsoft ha publicado rápidamente un parche que arregle este fallo.
El parche de apenas 50 Kb puede ser descargado desde este enlace, y lo encontraremos en inglés, español y francés.
Si quieres aprender LINQ para Visual Basic 2008, quizás te interesen los siguientes artículos que el equipo de VB de Microsoft está publicando.
En estos artículos escritos en inglés, se ven con ejemplos las características y partes más importantes de LINQ.
Esta información es a mi juicio muy interesante para los que empiezan con Microsoft .NET Framework 3.5.
Microsoft ha publicado recientemente Visual Studio Team System Web Access 2008 Power Tool, o lo que es lo mismo, lo que se conocía como TeamPlain.
La descarga de casi 5 Mb y en inglés, habilita una interfaz Web para Visual Studio Team System.
Para instalar este producto, se necesita tener instalado Microsoft Visual Studio 2008 Team Explorer.
La descarga se puede llevar a cabo en este enlace.
Si te mola SharePoint, o si no te mola tanto pero sin embargo te ha caído en gracia la responsabilidad de aprender más sobre este producto, quizás estés de enhorabuena.
El caso es que Microsoft ha publicado una seria de materiales muy interesantes.
Por un lado nos encontramos con Office SharePoint Server 2007 Training (Standalone Edition), y por otro lado Office SharePoint Server 2007.
Todo este material ocupa en total cerca de 300 Mb.
El primer material, Office SharePoint Server 2007 Training (Standalone Edition), lo podréis obtener en este enlace (140 Mb aproximadamente), el segundo material, Office SharePoint Server 2007 Training, lo podréis conseguir en este otro enlace (160 Mb aproximadamente).
Recordad que todo este material (videos, tutoriales y artículos), está elaborado en inglés.
Espero que este material sea del interés de más de uno.
Más artículos
Página siguiente >