September 2008 - Artículos
Microsoft Visual Studio 2008 y Microsoft .NET Framework 3.5 SP1
Con la aparición de Microsoft Visual Studio 2008 se dio un giro de tuerca más a todas las herramientas y tecnologías que estaba presentando Microsoft en el mercado.
Con Microsoft .NET Framework 3.5 SP1, Microsoft ha puesto sobre la mesa interesantes novedades.
Aún nos falta por ver cosas como Silverlight 2.0 y ASP.NET MVC (+ información) en pleno rendimiento.
Y por delante de ellas, cabalga a toda velocidad una locomotora... Visual Studio Team System 2010 y a la par, Microsoft .NET Framework 4.0.
Microsoft Visual Studio 2010 y Microsoft .NET Framework 4.0
En una recomendable entrada de Miguel Llopis, podemos ver de forma resumida algunas de las características del futuro Microsoft Visual Studio 2010. No son pocas y eso que están resumidas, pero el colmo es no están todas, porque claro... yo hecho en falta cosas que no se han comentado (porque nadie ha dicho nada de nada vamos), como la "presumible" versión 2.0 de LINQ to SQL y LINQ to Entities o los "presumibles" LINQ to Access o similares (ojalá, aunque a este último lo veo difícil).
Pero todo no acaba ahí. También tenemos la posibilidad de leer el enlace de la nota de prensa oficial de Microsoft sobre Visual Studio 2010 y .NET Framework 4.0.
Dejadme deciros que si Microsoft está anunciando esto con tanta prontitud (es la primera vez que veo avisar de estos detalles bastante tiempo antes y con la contundencia que lo está haciendo Microsoft) es porque vienen curvas... es decir, cambios muy importantes y muy destacables, y lo que quiere Microsoft, es que vayamos asentando poco a poco todas esas novedades, algo que me parece muy adecuado y correcto, más que nada para no ir saturando al personal... porque... ¿nadie conoce el síndrome del estrés tecnológico?, ¡pues existe!, y tan bueno es que la tecnología avance como tan inversamente negativo es saturar al espectador con torrentes de novedades tecnológicas que hacen entrar en pánico más que otra cosa, así que las cosas... a cucharaditas entran mejor que a cucharadas soperas.
En la nota de prensa que os citaba, se detallan algunos aspectos interesantes sobre el futuro Microsoft Visual Studio 2010 y Microsoft .NET Framework 4.0. Aspectos relativos por ejemplo a ALM y el soporte a las nuevas plataformas y tecnologías. En esa misma nota de prensa, Microsoft adelanta que VSTS 2010 proporcionará un producto unificado para el VSTS Development y el VSTS Database (¡ya era hora!). De esa manera, todos los usuarios (reza la misma nota de prensa) que tengan VSTS 2008 Development Edition o VSTS 2008 Database Edition, recibirán los siguientes productos gratis: VSTS 2008 Development Edition, VSTS 2008 Database Edition, VSTS 2005 for Software Developers, y VSTS 2005 for Database Developers. No está mal...
Además de esa nota de prensa, Somasegar agrega en su blog sus puntos de vista en este otro enlace dentro. Una entrada que recomiendo leer, porque Somasegar es de esas personas que saben comunicar perfectamente todo.
Y para completar toda este movimiento abrumador de Microsoft, aparece un White Paper en inglés sobre Visual Studio Team System 2008 de menos de 2 Mb y de poco más de 30 páginas, donde tiene un apartado dedicado a los requerimientos futuros de Visual Studio Team System 2010, ahí es nada, se nota que Microsoft va a por todas.
Lo que está claro, es que .NET Framework y su entorno de desarrollo rápido, van a seguir evolucionando. Cosas como RIA, ALM o SOA tendrán mayor cabida si cabe y lo iremos nombrar cada día más, es lo que toca.
Lo que más atención me ha llamado sin embargo, es que Microsoft se haya puesto a hacer sonar a bombo y platillo todas estas novedades cuando aún falta mucho recorrido. La semana pasada ya sabía que el Lunes se iba a anunciar algo importante y "grande", pero no tenía ni idea de que iba a ser de esta envergadura.
Creo que tenemos un año por delante muy muy interesante para todos, así que... coged vuestro refresco, las palomitas,... y ¡que empiece la función!.
Acceso a la página oficial de MAD.NUG.
Para los más despistados.
No os olvideis que este Jueves teneis una cita en MAD.NUG, donde tendremos un evento dedicado a las novedades de Visual Basic 9.0 (ó Visual Basic 2008 si lo prefieres).

El evento tendrá lugar en las oficinas de Microsoft en Madrid de 19:00 a 21:00 horas, y podremos contar en ese evento, no solo con el Guille, sino también con David Salgado de Microsoft DPE.
¿Te lo quieres perder?.
Haz clic en este enlace para más información, y en este otro enlace para registrarte en el evento.
Esta vez me salgo un poco de la normalidad de mi blog para traeros un off-topic como una catedral de grande.
Se trata de una imagen creada por Scott Johnson, en la que reúne según él, los 56 tipos de Geeks.
Es sin lugar a dudas, una imagen muy currada, aunque hecho de menos algún tipo de Geek que otro.
Hay por otro lado, Geeks muy raros, como el Spartan Geek... :-¿?,... yo en mi caso, me veo de los 56 más cerca del Code Geek y del R.C. Geek que de cualquier otro...
Curioso cuanto menos... ¿con quién te identificas tú?.
El enlace de la imagen lo encontraréis aquí, y la descarga directa en este otro enlace.
Microsoft ha publicado una visión preliminar del App Arch Guide en su versión 2.0, un documento de 38 páginas escrito en inglés que consiste en una visión inicial de lo que llevará la guía sobre diseño y arquitectura de aplicaciones desarrolladas con .NET Framework. Temas relativos a como elaborar arquitecturas basadas en capas, componentes y servicios, están recogidas de forma esquemática en este documento.
El documento de la visión preliminar y otra información del equipo de Patterns & Practices de Microsoft lo podreis encontrar en este enlace.
Introducing WPF Application Quality Guide v.0.3 es una guía preliminar en inglés elaborada por el equipo de Microsoft WPF para la adopción de WPF.
La guía en formato Microsoft Word 2007, ocupa unos 890 Kb y puede ser descargada directamente desde este enlace.
La página web de WPF Application Quality Guide puede ser accedida desde este otro enlace.
Recuerda dar tu feedback si tienes comentarios y sugerencias que hacer al respecto.
Microsot España comienza una serie de eventos denominados Microsoft TourNet08.
Este evento subre diferentes perfiles, los desarrolladores Web, los comerciales, y los técnicos en sistemas, y es que Microsoft ha aglutinado sus eventos en tres secciones, especializada por perfil, para dar una formación más personalizada.
| Valladolid |
2 de Octubre de 2008 |
| Valencia |
7 de Octubre de 2008 |
| Murcia |
8 de Octubre de 2008 |
| Tenerife |
14 de Octubre de 2008 |
| Las Palmas |
16 de Octubre de 2008 |
| Zaragoza |
21 de Octubre de 2008 |
| Barcelona |
23 de Octubre de 2008 |
| A Coruña |
28 de Octubre de 2008 |
| Madrid |
30 de Octubre de 2008 |
| Sevilla |
13 de Noviembre de 2008 |
| Bilbao |
19 de Noviembre de 2008 |
Las fechas y sitios (el tour se realiza por 11 ciudades de España) son:
Valladolid el 2 de Octubre de 2008.
Más detalles del evento por perfiles:
Microsoft ha publicado la versión preliminar (Preview) del SP1 (Service Pack 1) de Microsoft Expression Blend 2.
La descarga, disponible solo en inglés y de un tamaño aproximado de 18 Mb, está disponible en este enlace.
De nuevo Juan Palacio nos sorprende con un nuevo libro gratuito en formato pdf.
En este caso, es un libro que tiene que ver con la gestión de proyectos ágiles y la formación del Scrum Manager.
Encontraremos el libro en la sección de libros, y dentro de esta sección en esta entrada de su blog.
El libro se puede descargar en formato pdf o adquirir la versión impresa del mismo por un módico precio.
En sí, esta obra reúne los puntos de vista y anotaciones personales de Juan en la gestión de proyectos ágiles. Recordad que los diferentes puntos de vista siempre enriquecen, y ser coincidentes con algunos o muchos de ellos nos produce autoestima. :-)
Espero que lo disfruteis.
Otra referencia: Flexibilidad con Scrum de Juan Palacio.
Actualizado el 25/09/2008
Microsoft ha publicado las Microsoft Silverlight Tools for Visual Studio 2008 SP1 (RC0), disponibles en inglés por el momento y descargables desde este enlace (72 Mb). El problema, es que la información de la página de descarga no es nada clara, porque parece ser que es un paquete para Visual Studio 2008 SP1, pero en las notas finales nos indica lo siguiente: Note: This release will not work with the Visual Studio 2008 RTM or Visual Studio 2008 SP1 BETA. Por lo que uno no sabe a que atenerse, aunque pienso que lo de Visual Studio 2008 RTM es un error.
Actualizado el 24/09/2008
Hoy día 24 de Septiembre he tenido la suerte de estar por la tarde en el taller del evento Arquitectura y desarrollo de aplicaciones RIA que se ha celebrado en las oficinas de Microsoft España en Madrid. La gente de Barcelona y alrededores, tienen otra cita con la misma temática para el próximo 8 de Octubre (registro gratuito aquí).
El caso es que en este evento o talleres han surgido los típicos problemas de trabajar con versiones Beta, así como con las instalaciones del producto. Y yo, pese a tener supuestamente mi equipo totalmente preparado, no he sido menos en sufrir lo suyo. A continuación, expondré sobre el artículo original, algunas puntualizaciones.
Por si a alguien se le ha olvidado o se ha liado, para trabajar con Silverlight 2.0 Beta 2, necesitaremos algo más que Visual Studio 2008.
La Beta 2 de Silverlight 2.0 fue publicada por Microsoft hace poco tiempo, y las herramientas para trabajar con Visual Studio 2008 hace aún menos, concretamente el pasado mes de Agosto.
En mi caso dispongo de Visual Studio 2008 SP1, pero lo que indico aquí sería válido igualmente con Visual Studio 2008 sin SP1. Parece ser que hay alguna modificación en los paquetes de distribución e instalación que hacen que sin el SP1 de Visual Studio 2008 no funcione bien. Si tienes en tu disco duro la versión que no tiene esa actualización (te pide como requisito que tengas el SP1 instalado), entonces podrás instalarlo sin problemas sobre un Visual Studio 2008 sin SP1, pero si te descargas de Internet la última versión, necesitarás instalar el SP1 previamente. Para preparar mi entorno para trabajar con Silverlight 2.0 Beta 2, además de instalar el Service Pack 1, he hecho lo siguiente:
Con estas breves y pequeñas instrucciones, deberíamos ser capaces de ver un grupo de plantillas nuevas en Visual Studio 2008, llamadas Silverlight. Ojo, ver las plantillas instaladas no implica que estén bien instaladas.
Dentro de ese grupo de plantillas, encontraremos dos plantillas que nos servirán para iniciar los proyectos en Silverlight 2.0.
¡Y que no se me olvide!. Información adicional de Scott Guthrie sobre Silverlight 2.0 Beta 2.
¡A disfrutar!
Microsoft, en el sitio Web sobre SilverlightShow, ha creado un concurso denominado Silverlight Contest, que tiene por misión, animar a que la gente escriba artículos en inglés sobre Silverlight y pueda así ganar premios.
Hay muy pocos artículos escritos aún, y los premios serán repartidos para los tres mejores artículos de todos los presentados.
Este concurso finaliza el próximo 28 de Septiembre... es decir, queda muy poco... pero no por eso va a ser imposible ganar algún premio ¿verdad?.
En esta ocasión, me voy a salir un poco de la línea regular que llevo en mi blog para hacer una pequeña, pero espero que interesante y fructífera, recomendación.
Quizás muchos no conozcan a César de la Torre, pero somos también muchos otros los que lo conocemos desde hace años, algunos más, otros menos,... pero a modo de pequeña introducción, César fue cofundador de la empresa Renacimiento Sistemas en España y Microsoft MVP (durante 3 años) hasta hace poco, Mayo del 2007, momento en el que Microsoft España lo fichó.
Inicialmente, César ha estado trabajando en el rol de Dynamics ISV Evangelist, pero desde finales de Agosto de este año, César ha cambiado ese rol. Ahora es Architect Evangelist (no quiero pensar lo divertido que puede ser una reunión de trabajo en DPE España [División de Desarrolladores y Plataforma] con craks como David Carmona, David Salgado, César de la Torre,... etc).
Si acudimos al blog de César de MSDN, veremos que hay multitud de noticias de referencia a todo lo que tiene que ver con CRM, pero dado que ha cambiado su rol, ahora está empezando a deleitarnos con entradas más relacionadas con la Arquitectura del Software (por otro lado su gran pasión como él mismo la define) que con entradas de CRM.
Os invito para ir abriendo boca, ver la entrada del pasado 4 de Septiembre y 5 de Septiembre.
El único "pero" es que sus entradas están en inglés, pero vamos, creo que eso no es muy problemático hoy día (o no debería serlo).
Así que ya sabéis, apuntad ese blog si es que no lo conocíais. ;-)

Ayer estuve presente en la presentación que se hizo en MAD.NUG sobre la gestión de código con Visual Studio Team System y la verdad es que la sesión me gustó mucho.
Tuvimos problemas para grabar la sesión (esperamos que la próxima vez no nos ocurra lo mismo) y la asistencia fue nutrida, aunque en honor a la verdad, esperaba que hubiera más gente.
Lo mejor de este tipo de charlas y sesiones es que en ellas se puede no solo aprender cosas de la presentación en cuestión, sino que los comentarios y preguntas que se hacen pueden ayudar a todos en algún momento dado.
De hecho, el motivo de esta entrada llega gracias al comentario de una de esas personas que en mi caso, me hizo cuando acabamos la sesión.
¿Cómo obtener el identificador de la sesión de un determinado proceso en ejecución?.
En un primer momento pensé en WMI, pero luego en mi cabeza y dándole vueltas mientras iba a casa me acordé que había otra forma, gracias al nombre de espacio System.Diagnostics.
Así que me puse a pensar como obtener el identificador de la sesión y otros valores, y este es el resultado que he obtenido:

¿Cómo llegar a esto?.
En el formulario principal he añadido dos controles Button, un control ComboBox, y contenedores y separadores a parte, 5 controles Label donde volcar la información que obtiene la aplicación.
El código está comentado, así que tampoco hace falta que comente más, lo único, que creé además del formulario principal, una estructura.
Aquí va el código:
Estructura (ProcessStructure.vb):
''' <summary> ''' Estructura que contendrá algunos de los elementos de un proceso ejecutado en memoria. ''' </summary> ''' <remarks></remarks> Public Structure ProcessStructure ''' <summary> ''' Nombre del proceso ''' </summary> ''' <remarks></remarks> Public Name As String ''' <summary> ''' Programa o aplicación del proceso ''' </summary> ''' <remarks></remarks> Public ModuleName As String ''' <summary> ''' PID del proceso o process identifier, que es el número utilizado ''' por el sistema operativo para identificar a un proceso de forma única. ''' Este identificador se puede utilizar para eliminar un proceso en ejecución. ''' </summary> ''' <remarks></remarks> Public PID As Integer ''' <summary> ''' No soportado en Windows 98, indica la sesión en la que está ejecutándose una aplicación. ''' </summary> ''' <remarks></remarks> Public SessionID As Integer ''' <summary> ''' Función ToString() que devuelve uno de los elementos de la estructura. ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Overrides Function ToString() As String Return Name End Function End Structure ' ProcessStructure |
Código del formulario (MainForm.vb):
''' <summary> ''' Clase del formulario principal de la aplicación. ''' </summary> ''' <remarks></remarks> Public Class MainForm ''' <summary> ''' Evento que se lanza al cargar el formulario. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Limpiamos los controles de información de los procesos ClearProcessesControls(True) End Sub ''' <summary> ''' Evento que se ejecuta para obtener todos los procesos del sistema. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub btnGetProcesses_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetProcesses.Click ' Limpiamos los controles de información de los procesos ClearProcessesControls(False) ' Obtenemos la lista de procesos GetProcessesList() End Sub ''' <summary> ''' Método privado que se encarga de limpiar todos los controles y dejarlos vacíos. ''' </summary> ''' <param name="flag">Si el valor pasado como parámetro es True, limpia todos los controles de la ventana. ''' Si es False, limpia solo los controles relacionados con la obtención de todos los procesos del sistema.</param> ''' <remarks></remarks> Private Sub ClearProcessesControls(ByVal flag As Boolean) ' Limpiamos los controles de información de los procesos Me.cboProcesses.Items.Clear() Me.lblProcessName.Text = "" Me.lblProcessModuleName.Text = "" Me.lblProcessPID.Text = "" Me.lblProcessSessionID.Text = "" If flag Then ' Limpiamos todos los controles del proceso en ejecución Me.lblMyProcess.Text = "" Me.lblMyProcessName.Text = "" Me.lblMyProcessModuleName.Text = "" Me.lblMyProcessPID.Text = "" Me.lblMyProcessSessionID.Text = "" End If End Sub ''' <summary> ''' Método privado que se encarga de obtener la lista de procesos del sistema en ejecución. ''' </summary> ''' <remarks></remarks> Private Sub GetProcessesList() ' Obtenemos la lista de procesos Dim processList As System.Diagnostics.Process() processList = System.Diagnostics.Process.GetProcesses() ' Obtenemos la información por cada proceso en la lista de procesos For Each process As System.Diagnostics.Process In processList ' Instanciamos una estructura de proceso Dim processDetailStructure As New ProcessStructure() ' Indicamos el nombre del proceso processDetailStructure.Name = process.ProcessName ' Si el nombre del proceso es "SYSTEM" o "IDLE", entonces ' no podemos obtener el ModuleName, ya que es un proceso de sistema If processDetailStructure.Name.ToUpper() = "SYSTEM" Or _ processDetailStructure.Name.ToUpper() = "IDLE" Then processDetailStructure.ModuleName = "System Process" Else processDetailStructure.ModuleName = process.MainModule.ModuleName End If ' Obtenemos el PID o process identifier del proceso processDetailStructure.PID = process.Id ' Obtenemos el id de sesión en la cuál se está ejecutando nuestro proceso processDetailStructure.SessionID = process.SessionId ' Mostramos la estructura del proceso en el control ComboBox Me.cboProcesses.Items.Add(processDetailStructure) Next ' Seleccionamos el primer elemento si hay elementos seleccionables If Me.cboProcesses.Items.Count > 0 Then Me.cboProcesses.SelectedIndex = 0 End If End Sub ''' <summary> ''' Evento que se lanza cuando se selecciona un elemento del control ComboBox, ''' mostrando en pantalla la información contenida en el elemento seleccionado. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub cboProcesses_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) & _ Handles cboProcesses.SelectedIndexChanged ' Obtenemos la información del elemento seleccionado Dim processDetailStructure As ProcessStructure = Me.cboProcesses.SelectedItem() ' Mostramos los detalles Me.lblProcessName.Text = processDetailStructure.Name Me.lblProcessModuleName.Text = processDetailStructure.ModuleName Me.lblProcessPID.Text = processDetailStructure.PID Me.lblProcessSessionID.Text = processDetailStructure.SessionID End Sub ''' <summary> ''' Evento que se ejecuta para obtener los detalles del proceso en ejecución. ''' Muestra los detalles de la propia aplicación que se está ejecutando. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub btnMyProcess_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMyProcess.Click ' Obtenemos información del proceso en cuestión Dim process As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess Me.lblMyProcess.Text = System.Environment.CurrentDirectory.ToString() Me.lblMyProcess.Text = Application.ExecutablePath.ToString() Me.lblMyProcessName.Text = process.ProcessName Me.lblMyProcessModuleName.Text = process.MainModule.ModuleName Me.lblMyProcessPID.Text = process.Id Me.lblMyProcessSessionID.Text = process.SessionId End Sub End Class ' MainForm |
Finalmente, si lo que quieres es descargarte el código completo de la aplicación, lo podrás hacer
desde el siguiente enlace (17 Kb).
Interesante lugar Get the Point, el blog del equipo de trabajo de SharePoint donde nos informan de aspectos puntuales respecto a SharePoint, ese gran producto de Microsoft.
Allí podemos encontrar auténticas joyas, y otras cosas a priori no tan destacables, por esa razón, quería traeros en esta ocasión una entrada que destaco no por el excelente contenido técnico que contiene sino porque es una de esas entradas que le viene siempre bien a cualquier persona que trabaje con SharePoint.
En esta entrada hacen un resumen (imágenes de captura incluidas) de todos y cada uno de los grupos y plantillas de sitio que podemos encontrar por defecto en SharePoint (Colaboración, Encuentros, Empresarial, Publicación) y por cada grupo las correspondientes plantillas con una pequeña descripción de lo que podemos hacer. Con esta lista en mano, podemos elegir sin miedo a confundirnos, la plantilla de sitio adecuada para nuestro sitio. ¿A quién no le ha pasado que ha elegido una plantilla de sitio de SharePoint y nada más darla de alta se ha dado cuenta de que "esa no era sino la de más abajo"?. Yo que soy un despistado, sí he estado en situación en alguna ocasión.
Aunque la entrada esté escrita en inglés, creo que merece la pena echarle un ojo.
Plantilla Microsoft Visio para las viñetas de David Salaguinto. Crea tus propios comics aquí.
Hace algunos años tuve la necesidad de utilizar Microsoft Windows Media Encoder para grabar todo lo que hacía en mi PC, incluida la voz que le ponía al video. Videos como los de la web desarrollaconmsdn.com o videos de tipo How-To han sido grabados con aplicaciones de este tipo. Sin embargo, siempre se me quedó algo corto el uso de Windows Media Encoder.
El caso es que aquí aparece en escena Community Clips, de Office Labs.
Esta herramienta (las hay y muchas en el mercado), se instala en Windows y se acopla a Microsoft Office 2007, permitiéndonos grabar las acciones que realizamos no sólo sobre Office 2007, sino también sobre todo el sistema (cualquier aplicación) de una forma rápida y sencilla. Además de grabar la imagen, también nos permite grabar el sonido, por lo que es una herramienta muy útil para grabar nuestros propios tutoriales, cursos, laboratorios o representación de fallos o acciones sobre el sistema.
Si de por sí, el funcionamiento es suficiente, es aún mejor ya que no hay que pagar nada por utilizarla.
Podrás descargarte Community Clips desde este enlace.
P.D.: gracias a David Salgado por chivarme la existencia de este programa.
Acceso a la página oficial de MAD.NUG.
Nuevamente el grupo de usuarios de .NET de Madrid a la carga... y en esta ocasión con el evento titulado "Gestión de código fuente con Visual Studio Team System".

De la mano de Jesús Jiménez, nos llega este evento en el que nos comentará cosas muy interesantes respecto a la gestión de código fuente con Visual Studio Team System.
El evento se celebrará el próximo 18 de Septiembre de 19:00 a 21:00 en las oficinas de Microsoft en Madrid. El registro y la asistencia son gratuitas.
Podréis acceder a la información de este evento en este enlace de Jesús Jiménez o en el enlace oficial del evento de MAD.NUG.
También podéis registraros para asistir al evento en este otro enlace.
Como novedad, trataremos de grabar el evento para que pueda ser visualizado cuando se quiera, por aquellas personas que no puedan asistir físicamente al evento.
Esperamos veros en este interesante evento el próximo día 18.
Interesante lo que comenta Rodrigo en su blog y que me hace reflexionar o mejor dicho recordar reflexiones pasadas que me he hecho en alguna ocasión y que aprovechando la entrada de Rodrigo, me he visto animado a hacerlas aquí públicas.
Me remontaré a hace ya algunos años (unos 6 para más señas), cuando el jefe del área instó a todos los empleados del departamento a pensar en migrar todas las aplicaciones de escritorio a la Web. De forma más personal y terminada la reunión, le comenté que porqué se había tomado esa decisión (lo siento, pero soy de esas moscas cojoneras a la que le gusta dejar hacer. sí, pero a la que le gusta también saber muchas veces el porqué de las cosas) y me comentó que la decisión estaba motivada en que todas las aplicaciones Windows podrían funcionar como aplicaciones Web de igual forma, que eran mucho mejor, que se actualizaban en un único sitio, que todo el mundo tenía navegador Web, que eran más potentes y cómodas para el usuario, y que las grandes empresas como en la que estaba trabajando yo en aquel momento, estaban haciendo lo mismo.
En aquel instante recuerdo perfectamente aún hoy que le dije que las razones lógicas de implantación y algunos de los argumentos que me daba no era motivo de discusión por la evidente coincidencia de reflexiones, pero solo le apunté algo mucho más importante desde mi punto de vista en aquel momento, desde el punto de vista técnico, ese punto de vista que en muchas ocasiones no cuenta, sobre todo para las ocasiones estratégicas. Ese punto de vista personal era que en mi opinión, cualquier aplicación Windows no tiene porqué ser migrada a Web porque sí, por esa moda irrefrenable o por las pajas mentales de determinados "gurús". En otras palabras, hay aplicaciones que siendo aplicaciones Web, serán mucho más complejas y dañinas que las aplicaciones Windows que en muchas ocasiones se tienen funcionando desde hace años en una determinada empresa. El caso es que aquel jefe que tuve, entre masters de dirección de empresa que estaba haciendo y entre que se reunía con gente y amigos de altas esferas (reuniones que dan para hablar largo y tendido en otra entrada, y a las que tuve la oportunidad de asistir en una ocasión fuera de España) para hablar de temas tecnológicos, económicos y de actualidad, pensaba que estaba tocado por la varita de la verdad.
¿Cuántas veces se ha tomado una decisión de altas esferas como digo yo sin haber consultado antes a los técnicos, sin haber hecho grupos de trabajo o sin haber hecho un brainstorming (soy un enamorado de la lluvia de ideas, lo siento)?... ¿decenas, cientos, miles,...?. Normalmente, las personas que han llegado a ser jefes, pensaban antes de tener ese puesto de responsabilidad que todo iría mejor si sus superiores se comunicaran en multitud de ocasiones con ellos para solicitarles sus puntos de vista técnicos, personales o de experiencia, por muy jefe que fuera. Cuando esos técnicos llegan a ser jefes o responsables, pierden muchas veces aquella bonita visión que tenían y pasan ahora a creerse que saben de todo, que poseen mucha experiencia y que no necesitar esa ayuda técnica... esto en argot castellano se denomina la pescadilla que se muerde la cola, o mejor... dime de que presumes y te diré de que careces.
En el tema del desarrollo de aplicaciones Windows y aplicaciones Web, veo que hay en el mundo del desarrollo mucha paja mental. Mucho vende motos. Mucho vende humo. Mucho gurú y mucho charlatán que vende crecepelos.
Siempre me expreso de igual forma: ¿piensa alguien que si existiera el lenguaje, tecnología, desarrollo perfecto habría tanta diversidad?. Obviamente no, y por cierto, me alegro, porque sino, el desarrollo del Software sería por un lado aburrido con una y única verdad absoluta, y por otro lado, ya exisitiría un proceso automático que hiciera todo por nosotros y ahora mismo estaríamos dedicando nuestro tiempo a otros menesteres en lugar de al desarrollo del Software.
En el desarrollo del Software tenemos muchas posibilidades, pero hay una que siempre funciona... me refiero a las aplicaciones Windows. Sin embargo, muchas aplicaciones Windows serían más beneficiosas en un ambiente Web, y ahí es donde voy... ¿eso significa que cualquier aplicación Windows será beneficiosa en un ambiente Web?. Como ya he dejado entrever anteriormente, NO.
Y en todo esto, Rodrigo apuntaba muy bien (al menos en el sentido en el que yo he entendido su queja)... "AJAX es una mierda", y eso me recuerda a varias cosas:
¿Alguien sabe lo que es XML?... bien,... veo que hasta aquí llegamos.
Lo que no mucha gente sabe es la historia de XML, así que aprovecho para hacer un pequeño paréntesis de tipo recordatorio.
XML nació gracias a una adaptación de SGML. SGML es además, la base de HTML.
El tema es que la gente del W3C estuvieron dándole vueltas a como crear un lenguaje de etiquetas que fuera más abierto que HTML y que permitiera crear etiquetas personalizadas para trabajar con cualquier fuente de información existente. Estuvieron pensando y pensando, no sé en realidad cuanto tiempo, pero alguien dijo de repente,... "oyes, ¡en aquel cajón del olvido hay algo así como SGML!". Echaron un vistazo y vieron que GML fue creado por IBM en los setenta, y que en la década de los ochenta, la ISO lo normalizó para crear el SGML. A finales de la década de los ochenta, se creó el famoso HTML partiendo de la base del SGML, y de la base del SGML aparece también el ya famoso XML.
Sobre AJAX, ocurre otra particularidad vinculada de alguna manera con lo anterior, en base y en historia.
AJAX como tal, está unido con la necesidad de sincronizar la información, y para ello se une el famoso XML. AJAX por otro lado, representa la base de creación de aplicaciones RIA (Rich Internet Applications) que Rodrigo comentaba en su entrada. La idea es que el cliente pueda sincronizar la aplicación web con el servidor de forma transparente, evitando recargar la página web entera o actualizando o refrescando una parte de toda la aplicación web.
El tema no obstante, es que AJAX no es nuevo, al menos no la técnica. El nombre de AJAX se acuñó alrededor del año 2005, pero la técnica de sincronización o de "asincronización" (si me permitís el término, ya que es sincronización de ida y vuelta, es decir, comunicación asíncrona), es una técnica de mediados de la década de los noventa. De hecho, Sun y Microsoft han estado trabajando años atrás en estas técnicas. Cosas como los ActiveX o los Java applets ya utilizaban técnicas de este tipo y creo que a casi todo el mundo le suena.
Entonces, ¿que hay de nuevo en eso que mucha gente llama la Web 2.0?.
De nuevo de nuevo, la verdad es que muy poco o casi nada.
Mucho ruido y pocas nueces.
Lo único que realmente me parece novedoso, es que desde los años noventa a ahora, los ordenadores son más potentes, existen más sistemas intercomunicados, la informática ha entrado en muchas más empresas, las comunicaciones son más rápidas, hay más usuarios que utilizan Internet e Internet está presente en más hogares y empresas, los discos duros tienen mayores capacidades de almacenamiento y son más rápidos los procesos de lectura y escritura, y los conocimientos y los lenguajes de desarrollo han mejorado así como las técnicas de programación.
¿Que hay de nuevo entonces en lo que se ha denominado Web 2.0?, pues como decía antes, no mucho, ya que la tecnología es la misma aunque mejorada, pero quizás la novedad es que cada vez más empresas utilizan esas técnicas antiguas que casi nadie utilizaba. ¿Y a eso lo llaman Web 2.0?... ¡pues sí!.
Parece paradógico denominar Web 2.0 a "algo" que ya existía hace años. Es como si por ejemplo, todos fuéramos en triciclo existiendo la bicicleta desde hace años, y una década después, todo el mundo se maravillara por la bicibleta como el gran invento del siglo. ¿Humo tal vez?.
Claro que la Web 2.0 no solo es AJAX, hay más técnicas, pero prácticamente todas ellas, son refritos de técnicas ya existentes, mezcladas y agitadas... chás chás chás...
Creo que Rodrigo exageraba un poco (desde mi punto de vista a propósito) al decir de AJAX que era una "mierda". Yo no creo que sea una "mierda", incluso lo encuentro útil, pero aunque una bicibleta esté muy bien en lugar del triciclo, ambas nos sirven para movernos y dependiendo de las situaciones, podría interesarnos tener los dos vehículos en nuestro poder. Sin embargo, la diferencia de usar AJAX y otras técnicas de la Web 2.0 o no, no es tan grande como para que nos embadurnen a los usuarios y a los programadores con una intensa capa de marketing que trata intencionamente de confundirnos.
Y es que ni tan malo es programar aplicaciones Web en HTML, CSS o AJAX, como con Flash, Silverlight o Air.
Lo que sí está claro, es que hoy por hoy y bajo mi punto de vista, las aplicaciones Windows poseen una mayor "experiencia" (como lo llamó Microsoft al sacar Windows XP) para el usuario que las aplicaciones Web. La idoneidad de qué utilizar es lo que realmente hay que preguntar a los técnicos, y esa es la discusión que realmente debemos tener, por esa razón, AJAX es una "mierda", no sé si la intención de Rodrigo era la misma que la mía aquí, pero para mí AJAX es así porque no resuelve el problema que muchas empresas tratan de resolver... hacer que todas las aplicaciones Web sean tan poderosas o más que cualquier aplicación Windows. La diferencia entre Windows y Web se ha acortado, pero todavía falta camino por recorrer, mucho camino. Mientras tanto, yo me he comprado una mascarilla para no ahogarme con la cantidad de humo que sale en la red de redes.
Hace ya algunos meses, que os anuncié la última revisión del Entity Framework FAQ que está realizando Danny Simmons, pero desde entonces, Danny ha actualizado su FAW en varias ocasiones, incluso ya ha cambiado la versión del FAQ a versión 1.0, y así, hasta el pasado mes de Agosto en el que sacó la última actualización de su FAQ, la versión 1.1 a la que podrás acceder desde este enlace.
Una de las novedades de las últimas actualizaciones, es que la FAQ ha sido reorganizada en secciones, se ha realizado interesantes actualización, y se han añadido cambios importantes.
Hay que recordar, que estas últimas actualizaciones tienen mucho que ver también con Visual Studio 2008 SP1.
Microsoft, y en su caso el equipo de trabajo de Visual Basic, ha modernizado o cambiado la cara del sitio Visual Basic Developer Center.
En este sitio, encontraremos información de alto interés para el programador de Visual Basic.
Deberíamos además, prestar una especial atención al apartado de aprendizaje (Visual Basic Developer Center - Learn) con sus videos, tutoriales, webcasts, etc.
En la solapa de descargas, encontraremos también utilidades y programas de alto interés y una serie de HOLs o laboratorios.
Espero que toda esta información le resulte útil a más de uno.
Todo el mundo habla en Internet durante estas últimas horas del efecto Beta de Google Chrome. Me sorprende ver la emoción que embarga el fenómeno Google a todos los seres humanos del planeta.
Me recuerda muchísimo a los empujones de la gente en Estados Unidos por hacerse con la primera copia de Windows 95, las histerias de los japoneses empujándose en el centro comercial más importante de Tokyo por conseguir la primera PlayStation 3, los fans de Mac por apoderarse del primer IPhone, o los seguidores de Google por quedarse atónitos ante un nuevo navegador Web que no es mucho más diferente de los que tenemos hoy día. ¿Marketing?... ¡habilidad por el marketing y mucha!.
Llevaba desde el Lunes esperando la Beta de Google Chrome, de hecho tenía preparada ya una entrada para mi blog acerca del tema, pero al ver el revuelo que se montó después de la entrada de Juan Carlos (CIIN), pensé que no era la mejor de las ideas y la borré de la caché de entradas de mi blog.
Sin embargo, he estado utilizando en la sombra este navegador y debo admitir que me ha causado una buena impresión, aunque aún le faltan cosas como es lógico.
Es rápido y fiable, aunque es una Beta y eso no evita que haya "petes" como el del famoso :%, y es que lo han querido hacer tan simple o tan sencillo que a veces es difícil encontrar alguna cosa como ocurre en Internet Explorer o Firefox, donde todo está a la mano... aunque con un poco de ingenio (poquito ingenio diría yo) y tiempo se consiguen cosas muy similares de igual forma.
En esta entrada no quiero decir si Google Chrome es muy bueno o muy malo, si es novedoso o no... simplemente quiero reunir algunos atajos y truquitos.
La versión Beta que estoy utilizando en Google Chrome es la 0.2.149.27 en español.
Aquí van las curiosidades:
Para saber que versión estás ejecutando, basta con escribir about: en el navegador web.
Por otro lado, los atajos de teclado funcionan aunque están ocultos. Los atajos de teclado están en inglés, así que utilizando un poco de imaginación...
Ctrl+W [cierra la pestaña abierta]
Ctrl+P [imprime la página web]
Ctrl+O [abre la caja de diálogo para abrir "cualquier" fichero ¿?]
Ctrl+F [abre la opción para buscar un texto en la página web abierta]
Ctrl+G [igual que Ctrl+F]
Ctrl+N [abre una nueva ventana]
Ctrl+T [abre una nueva pestaña]
Ctrl+B [abre/oculta la ventana de marcadores - la pone en flotación]
Ctrl+L [nos posicionamos en la caja de texto para escribir la dirección web]
Ctrl+J [muestra la ventana de últimas descargas realizadas con el navegador]
Ctrl+H [muestra el historial del navegador, permitiendo gestionar sus entradas]
Ctrl+D [abre la ventana para añadir a los marcadores]
Ctrl+A [selecciona el cotenido de la página web]
Ctrl+C [copia la selección realizada en Ctrl+A]
Ctrl+U [abre una nueva pestaña con el código HTML de la página web activa]
Y ahora... una de las mejores...
Ctrl+MAY+N [navegar en modo incógnito]. Con esta opción se abre una página web con un icono nuevo y un color distinto, con la cual navegaremos en modo incógnito. En esa ventana se indica en qué consiste esta opción. Está bien pensado. :-)
Y finalmente, una característica que me ha encantado.
Abre una página web y pulsa el botón derecho del ratón sobre la página web y selecciona la opción Inspeccionar elemento.
Se abrirá una nueva ventana dentro de la cual tendremos el código fuente de la página web, lista para ser inspeccionada.
Podremos interactuar con esta ventana y la página web. Si pasamos el puntero del ratón sobre las etiquetas HTML, en el navegador web se iluminará la parte sobre la que estamos posicionados. En la misma ventana de inspección, podemos acceder a los recursos.
Esta ventana para depurar la presentación de algunas aplicaciones Web, es a mi juicio muy interesante.
Y ahora y para cerrar, algunas cosas que he encontrado por Internet:
Si lo que quieres es acceder a lo que se denomina Easter Egg o huevo de pascua de Google Chrome, entonces deberás escribir about:internets
Una curiosidad sobre este Easter Egg es que parece ser que utiliza (esto no lo he podido verificar) el fichero sspipes.scr que está en Windows\System32. Si se borra ese fichero y se escribe en Google Chrome el comando about:internets, el fichero aparece nuevamente. De ser así, no es que me parezca lo más seguro del mundo, pero...
Otras etiquetas curiosas son:
about:cache [muestra la caché del navegador]
about:crash [muestra la pantalla que aparecerá en el navegador al encontrar un error no esperado]
about:dns [muestra algunos datos respecto a registros dns y sus beneficios]. Muy curioso.
about:histograms [muestra un histograma con porcentajes]. Es más un histograma de procesos internos que un histograma más útil de cara al usuario.
about:memory [muestra la memoria del sistema y lo compara con Internet Explorer y Firefox]. Iniciar Internet Explorer, Firefox y Google Chrome para verlo.
about:network [inicia un profiling con varias características útiles]. Inicia un nuevo profiling y agrega una nueva pestaña. Escribe una dirección web y mira los resultados.
about:plugins [lista los plugins instalados, las extensiones de los archivos y si está instalado o no]
view-source:[URL] [muestra el código fuente de la página web indicada en una nueva pestaña]
about:stats [muestra las estadísticas y permite incluso filtrarlas]
about:version [tiene el mismo efecto que about:]
Hay alguno más, pero algo más chorra. Si tienes instalado Google Chrome Beta, ahora puedes cacharrear un poco. :-)
[Ref.: La compleja toma de decisiones sobre la migración desde Visual Basic 6.0 a .NET (II)]
Parece claro que en esta entrada dejo claro que personalmente prefiero rehacer el programa partiendo de cero que migrarlo, pero trataré de justificar teóricamente porqué en la mayoría de las ocasiones prefiero rehacer el Software en lugar de migrarlo:
- Los GoTo han pasado a mejor vida en .NET. Una migración de Visual Basic 6.0 a Visual Basic para .NET los podría respetar, pero es en sí una mala práctica que denota errores conceptuales de base sobre el desarrollo Software.
- El manejo de excepciones en .NET es completamente diferente al manejo de errores de Visual Basic 6.0. En muchas ocasiones, estaremos obligados a cambiar manualmente la forma en la que debemos o queremos gestionar los errores y excepciones en nuestra aplicación.
- El trabajo con multihebras en .NET ha cambiado mucho con respecto a Visual Basic 6.0. Incluso ha habido cambios entre las versiones iniciales de Visual Basic 2002 y Visual Basic 2003, y la posterior actualización de Visual Basic 2005.
- La aplicación de Visual Basic 6.0 podría tener multitud de controles ActiveX. Salvo que tengamos el código del control ActiveX, que no siempre es así, sobre todo al utilizar controles no estándar de Microsoft (controles ActiveX de otras compañías por ejemplo), la migración de los controles ActiveX sin código, es prácticamente imposible, y dada la naturaleza de desarrollo de los controles ActiveX, podemos tener más problemas que ventajas. Microsoft .NET Framework es un entorno de desarrollo de código manejado que utiliza unos tipos de datos diferentes a los que utiliza Visual Basic 6.0. A veces es necesario crear un envoltorio (wrapper) que permita utilizar los controles ActiveX sin problemas, pero eso no significa que estemos exentos al 100% de posibles fallos, errores o problemas. Otra diferencia de .NET con respecto a los ActiveX, es que la gestión de memoria de los objetos de una aplicación .NET la realiza Microsoft .NET Framework, por lo que el usuario debe preocuparse únicamente de codificar.
- Los eventos en Visual Basic 6.0 son parecidos en funcionamiento a los utilizados en Visual Basic para .NET pero diferentes en cuanto a declaración. Adicionalmente, hay otros aspectos nuevos a tener en cuenta en .NET como por ejemplo los delegados.
- Al trabajar con matrices, debemos tener en cuenta algunos cambios incorporados en .NET. Estos cambios pueden incluso provocar que nuestra aplicación migrada no funcione perfectamente.
- La conversión de tipos puede generar errores no esperados. El tipo de datos Variant ya no existe, y como contraprestación, el tipo de dato Object es el tipo de dato a partir del cual derivan el resto de tipos de datos de .NET.
- Si con Visual Basic 6.0 podíamos utilizar diferentes paradigmas para acceder y trabajar con datos (RDO, DAO, ADO), con .NET tenemos ADO.NET. El acceso a fuentes de datos a través de ADO.NET cambia radicalmente, y es necesario que el desarrollador conozca, al menos de forma teórica, cómo trabajar con fuentes de datos en .NET antes de adentrarse en el código migrado. De hecho, la migración requerirá casi seguro que tengamos que personalizar o modificar algunos cambios manualmente. Por otro lado, es muy posible que la arquitectura cambie de forma que tengamos que rehacer la capa de acceso a datos, y ya no digo nada si lo que queremos es trabajar con n-capas, WCF o LINQ.
- Un desarrollo de Visual Basic 6.0 no está orientado a objetos, carece de los mecanismos puros de la reutilización de código, no posee una nomenclatura idónea y hace que su mantenimiento sea complejo. Arrastrar esos defectos a una aplicación .NET al migrar ésta, es una mala práctica que deberemos evitar manualmente en la inmensa mayoría de los casos.
- La reutilización de código es en algunos escenarios, mucho más importante de lo que a priori puede significar. Con Visual Basic para .NET podemos desarrollar aplicaciones para diferentes entornos (Windows, Web, Mobile, etc).
- Las aplicaciones de Visual Basic 6.0 abusa por lo general, del uso de APIs. En .NET, debemos evitar al máximo el uso de las APIs. Recordemos que las APIs no se ejecutan en un entorno de ejecución de código manejado como lo hace .NET, y por lo tanto, mezclar código manejado con código manejado no es la mejor práctica. Además, debemos tener en cuenta que muchas de las APIs que usábamos en Visual Basic 6.0, tiene su correspondiente función o método manejado en .NET.
- La arquitectura utilizada en el desarrollo de Visual Basic 6.0 será arrastrada a .NET, y con ella los malos hábitos o incluso quizás una arquitectura obsoleta que es la utilizada en la aplicación original.
Como podemos ver, la toma de decisión sobre migrar una aplicación de Visual Basic 6.0 a .NET no es una tarea banal. Muchas empresas han dado pasos atrás cuando se han enfrentado a todas las cuestiones que propongo en esta entrada y a alguna más que se me escapa ahora.
No se trata de tener miedo, solo de analizar y tomar la decisión que consideremos adecuada sin mirar atrás.
En el mercado hay muchas empresas y personas dispuestas a ayudar a aquellos equipos de desarrollo que deseen realizar la migración de sus aplicaciones. Muchas veces no nos atrevemos a cruzar solos el puente que va al otro lado del río, pero acompañados sí nos encontramos más confiados. Lo que sí tenemos que tener claro, es que la migración tendrá una serie de costes asociados que deberemos asumir si queremos dar ese paso.
Pero los costes no solo son computables a la propia migración, debemos tener en cuenta también los “famosos” vicios de los programadores de Visual Basic 6.0.
Antes de migrar, conviene tener unos conocimientos base sobre .NET y en su caso, sobre Visual Basic para .NET. O incluso sobre C# si se decide dar el paso desde Visual Basic 6.0 a C#, pero en esta serie de entradas y de momento, solo tendré en cuenta la migración de Visual Basic 6.0 a Visual Basic para .NET.
Un desarrollador de Visual Basic 6.0 que desee pasar a .NET debe en mi modesta opinión, conocer los siguientes aspectos (no digo aprender, sino conocer):
- Teoría de la programación orientada a objetos.
- Arquitectura de Microsoft .NET Framework.
- Curso introductorio de Visual Basic 2005 para desarrolladores de Visual Basic 6.0 (dentro de poco disponible con los cambios de Visual Basic 2008).
- Conocer el entorno de desarrollo y de ejecución.
Desde el punto de vista de buenas prácticas, debería conocer estos otros aspectos:
- Nomenclatura de las aplicaciones en .NET para programadores de Visual Basic.
- Comentarios XML en el código.
- Organización del código en .NET (uso de Region).
- Guías de desarrollo y arquitectura (manejo de excepciones, pruebas y testing, refactoring, etc). Los P&P de Microsoft son una base de conocimiento ideal, una forma de hacer las cosas, no la forma en la que se deben hacer las cosas.
Debemos tener claro por lo tanto, que la migración de una aplicación de Visual Basic 6.0 a .NET requiere de un esfuerzo inicial con una serie de costes asociados. Al equipo de trabajo se le debe proporcionar los recursos que le permitan conocer el funcionamiento de un desarrollo en .NET para abordarlo con las máximas garantías posibles. También es indispensable utilizar una metodología de desarrollo adecuada. Como posible metodología de desarrollo del proyecto, aconsejo Scrum, si bien no es ni la única, ni tampoco tiene porqué ser la mejor.
Más artículos
Página siguiente >