Y el ganador fue…

El ganador del vale de descuento de 1000USD para asistir al Silverlight Tour Workshop en Español fue José Carlos Flores Ornelas de Aguascalientes!  Muchas felicidades José Carlos, esperamos verte pronto en el curso.

El Silverlight Tour Workshop es un curso de tres días completamente en Español y de alta profundidad técnica acerca de Silverlight 2. Incluye los comos y por qués de XAML, el hospedaje en el navegador, las herramientas y el uso de Silverlight 2 en el servidor.  El curso utiliza Silverlight 2 así como las últimas herramientas tecnológicas de Microsoft (incluyendo Visual Studio .NET 2008 y Expression Studio).

Salu2!

MSP Summit 2009 – ¡Gran Premio!

¿Eres MSP?

¿Asistirás este próximo viernes 16 de enero al MSP Summit 2009 en la ciudad de Guadalajara, Jalisco?

Si contestaste a estas dos preguntas entonces tienes muchas oportunidades de ganar un Vale de Descuento de $1,000 USD para asistir a un curso del Silverlight Tour Workshop en Español en México.

Sí ! Así como lo estás leyendo:  El próximo día viernes 16 de enero al finalizar mi sesión en el MSP Summit regalaré un vale de descuento de mil dólares para que puedas asistir a un curso del Silverlight Tour Workshop en Español, en alguna de las ciudades destino de este curso.  El vale será rifado así que no se te ocurra ir al baño en ese momento!

Conviértete en el(la) afortunado(a) ganador(a)!

El Silverlight Tour Workshop es un curso en español de Silverlight 2.  Incluye los comos y por qués de XAML, el hospedaje en el navegador, las herramientas y el uso de Silverlight 2 en el servidor.  El curso utiliza Silverlight 2 así como las últimas herramientas tecnológicas de Microsoft (incluyendo Visual Studio .NET 2008 y Expression Studio).

¡Espero que seas el/la ganador(a)!

Hey!… Ya notaron que el vale trae un código de Microsoft Tag? :)

Microsoft Student Partners Summit 2009

Tengo el honor de haber sido invitado por Microsoft México para participar como orador en el MSP Summit 2009 en la ciudad de Guadalajara, Jalisco.  Este evento se hace año con año y reúne a todos los Socios estudiantes de Microsoft.  El Programa Microsoft Student Partner (MSP) es un reconocimiento anual para los estudiantes que efectúan contribuciones sobresalientes en la comunidad técnica de estudiantes y en este año le tocó a la tapatía ciudad de Guadalajara ser sede de este importante evento los próximos días 16 y 17 de enero 2009.

La sesión que estaré presentando es “Construyendo aplicaciones de última generación con Silverlight y Windows Azure”, en donde veremos primeramente cómo Silverlight se está convirtiendo en la opción perfecta al construir aplicaciones RIA (Rich Internet Applications) debido a sus poderosas características para crear Interfaces de Usuario enriquecidas, y posteriormente veremos la oferta tecnológica que la plataforma de servicios Windows Azure nos ofrece para complementar y potencializar nuestras aplicaciones.

No obstante a que este evento es exclusivo para los MSP, estaré subiendo el material el mismo viernes aquí para que lo puedan descargar y ver de qué se trató el tema.

Así que, ahí los espero!

[UPDATE 10/Feb/2009]  Aquí están las fotos del evento:

https://cid-01595dc6386bc6ba.skydrive.live.com/browse.aspx/MSP%20Summit%202009

Reunión de la Comunidad Guadalajara .NET (Enero 2009)

Les invito cordialmente a la primer reunión de la Comunidad Guadalajara .NET, la cual vamos a tener este jueves 15 de enero a las 18:30 horas en la Sala 2 del Centro del Software en Guadalajara, Jalisco.

La agenda de la reunión es la siguiente:

18:00 – 18:30  Registro y Bienvenida a la Reunión

18:30 – 19:30  SQL Server 2008 – José Luis Pérez

19:30 – 20:30  Introducción a ASP.NET 4.0 – Rodrigo Díaz Concha

Como podrán ver son dos temas bastante interesantes y vale la pena que se den una vuelta, nos visiten y podamos aprender algo entre todos juntos.

Los esperamos!

UPDATE [10 Febrero 2009]  Aquí están las fotos del evento:

http://www.flickr.com/photos/roklib2/tags/reunion15enero2009/

Código fuente de los controles de Silverlight 2

A partir del día de hoy podemos descargar el código fuente de los controles que incluye Silverlight 2!

La descarga incluye el código fuente de los siguientes controles:

  • ButtonBase
  • Button
  • HyperlinkButton
  • CheckBox
  • RadioButton
  • CheckBox
  • ToogleButton
  • RepeatButton
  • RangeBase
  • Slider
  • ScrollBar
  • ProgressBar
  • Calendar
  • DataGrid
  • DatePicker
  • GridSplitter
  • TabControl

Para nosotros desarrolladores básicamente significa que podemos ver exactamente cómo están implementados ya sea como referencia o tal vez, por qué no, para extenderlos y agregarle algún tipo de funcionalidad muy específica.

Es esto una gran noticia o no? :)

Salu2!

Creando un control de usuario reutilizable : El mapa de México en XAML en acción – Parte III

Esta es la continuación del artículo “Creando un control de usuario reutilizable : El mapa de México en XAML en acción Parte II”

El portal que estamos desarrollando con Silverlight 2 tiene un control de usuario que representa el mapa de México.  El control es sensible a los clics del mouse y levanta un evento cuando un estado es seleccionado.  No obstante, la solución en este momento no es muy funcional ya que lo único que hace es mostrar el nombre del estado en un TextBlock.  En este artículo veremos cómo extender la funcionalidad del Portal agregando una funcionalidad sencilla pero poderosa: obtenendremos una serie de fotografías relacionadas con el estado seleccionado usando los servicios REST públicos de Flickr.

REST

REST es el acrónimo de REpresentational State Transfer, el cual es una serie de lineamientos y prácticas para la arquitectura de servicios usando las propias bondades de HTTP y sus verbos (PUT, GET, DELETE, POST) los cuales pueden derivar fácilmente en acciones CRUD (Create, Read, Update, Delete) y por ende en acciones para obtener o modificar datos. 

Comunmente en el ámbito de Servicios Web tradicionales (ASMX o WCF) tenemos métodos marcados especialmente para responder a peticiones y regresar algún conjunto de datos o realizar alguna operación.  No obstante, para cada operación o acción requerimos crear un endpoint diferente cada vez (no necesariamente, pero muy comunmente es así), es decir, vamos creando métodos y más métodos para satisfacer las necesidades operativas de nuestro servicio.  En REST no necesariamente es lo mismo.

Un ejemplo de un servicio REST puede ser:

/productos”>http://<sitio>/productos

para regresar una lista completa de productos, o

/productos/1001″>http://<sitio>/productos/1001

para regresar únicamente el producto con identificador 1001.

API de Flickr

Vamos a utilizar los servicios REST que expone Flickr de manera gratuita y pública para implementar la funcionalidad de obtención de imágenes en nuestro Portal que estamos desarrollando.  La documentación completa de estos servicios la pueden consultar aquí.  Es importante mencionar que para la correcta ejecución de los servicios y obtención de datos necesitan un identificador único, el cual es obtenido de manera sencilla inscribiéndote al sitio de Flickr.  Ese identificador está relacionado con tu cuenta así que mucho cuidado en dónde lo usen o muestren.

El API de Flickr indica la manera en la que puedes consultar sus servicios y cómo serán regresados esos datos.  Para nuestra aplicación utilizaremos el método flickr.photos.search para buscar todas aquellas fotos que están etiquetadas con el nombre del estado que hemos seleccionado en el mapa.  Cabe mencionar que los servicios de Flickr tienen muchas más funcionalidades para usarlas en nuestras aplicaciones, como etiquetado de fotos, consulta de grupos, contactos, modificación de los metadatos de las fotos, etc.  Para más información, consulta la documentación en línea.

URL del servicio

La dirección, entonces, del servicio que estaremos usando es:

http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=AQUI VA TU API KEY&tags=NOMBRE DEL ESTADO”

URL de las fotos

Cada foto en Flickr tiene un URL el cual está constituído de la siguiente manera:

http://farm{FARM}.static.flickr.com/{SERVIDOR}/{ID}_{SECRETO}.jpg

Tal es el caso de la siguiente imagen, que tiene el URL http://farm4.static.flickr.com/3159/3046189596_1e8821aaaf_o.jpg

Implementación

Estados

Primero lo que vamos a hacer es corregir el hecho de que algunos estados de México tienen más de una palabra, y que los Canvas que representan cada estado de la República tienen un nombre corto, por ejemplo Baja California Sur es BCSur o San Luis Potosí es SanLuisP.  Dudo mucho que las personas que suban imágenes a Flickr etiqueten sus fotos de esa manera.  Por lo tanto, vamos a agregar la siguiente clase a nuestro proyecto de Silverlight la cual es una clase que hereda de la clase genérica Dictionary<T, T>, y en nuestro caso la implementaremos como Dictionary<string, string>.

Posteriormente, es buena idea tener un control que muestre las fotos relacionadas al estado seleccionado y eso lo vamos a lograr con un control de tipo ListBox en Page.xaml.  El control lo vamos a situar en la segunda columna y en la segunda fila, ocupando dos filas de espacio.

Es importante hacer notar que estamos modificando la plantilla del ListBox para cada uno de sus elementos, y estamos usando el elemento <DataTemplate> en el cual definimos lo que queremos que se vea para cada uno de los elementos.  En nuestro caso implementamos un elemento <Image> y hacemos atado de datos a la propiedad Url explicada anteriormente en este artículo.  El atado de datos (data binding en inglés) es una característica sumamente importante y poderosa de Silverlight la cual tendrá su propia saga de artículos más adelante en este blog.

Después lo que vamos a hacer es agregar a nuestro proyecto de Silverlight una clase que represente una foto o imagen de Flickr.  El siguiente fragmento de código muestra la clase Foto con sus respectivas propiedades (Farm, Server, ID, Secret) y una quinta propiedad llamada Url la cual regresará la cadena compuesta, es decir, el Url tal y como lo espera Flickr para poder mostrar fotos.

Además, vamos a modificar un poco nuestro control Mexico.xaml, agregando un segundo evento llamado EstadoSeleccionadoMouse el cual se disparará cuando simplemente pasemos el cursor del mouse sobre alguno de los estados.  Esto lo queremos hacer así por el hecho de determinar con anticipación el nombre del estado antes de hacer click, y evitar peticiones innecesarias al servidor de Flickr y de esta manera ahorrarnos ancho de banda.  El evento EstadoSeleccionadoMouse estará también basado en el mismo delegado MexicoEventHandler creado y explicado en los artículos anteriores.

Ahora bien, cuando se levante el evento EstadoSeleccionado de nuestro control (cuando el usuario haga clic en algún estado) vamos a hacer una petición al servicio de Flickr para obtener todas las fotos relacionadas con el estado seleccionado (aquellas que estén etiquetadas con ese nombre). 

Esto lo vamos a hacer utilizando un objeto de tipo WebClient, el cual encapsula la funcionalidad necesaria para hacer llamadas asíncronas al endpoint que definas en el método que estés utilizando: DownloadStringAsync o OpenReadAsync.  En nuestro caso usaremos DownloadStringAsync ya que la respuesta del servicio de Flickr es texto plano expresado ya sea en XML o en JSON.

Asimismo, es importante notar que estamos usando una consulta de LINQ To XML para obtener todas las fotos que regresa el servicio en forma de elementos Xml y por cada una de ellas regresaremos una instancia de Foto, la cual tiene implementada la propiedad Url que regresa ya armada el URL correcto y es la propiedad a la que se ata o liga el elemento <Image> dentro del <DataTemplate>… todo concuerda!

Todo listo

Ejecutemos la aplicación y veamos que inicialmente tiene la misma apariencia que la aplicación del anterior artículo, no obstante, si hacemos clic en algún estado, en la parte derecha se muestran todas las fotos relacionadas con él.

Incluso, podemos corroborar que efectivamente sean las fotos correctas desde el mismo sitio de Flickr, haciendo una búsqueda por la palabra completa “Nuevo León” (como se muestra en el ejemplo).  Ojo: hay que incluir las comillas para determinar que es una palabra compuesta y no dos  palabras por separado (Nuevo y León).

El código fuente de este artículo lo pueden descargar de la sección “Contenido” de La Liga Silverlight o haciendo clic directamente aquí.

Consumiendo Servicios Web en Workflow Foundation

Consumiendo Web Services en Workflow Foundation

Hasta este momento hemos visto y explicado una gran cantidad de funcionalidad de Workflow Foundation implementada en varias actividades que vienen incluidas, y en este capítulo explicaremos una más: la actividad InvokeWebService la cual nos permite realizar la invocación a un servicio Web XML y de esa manera extender la funcionalidad de nuestros flujos de trabajo.

Si bien está fuera de alcance en este capítulo explicar a detalle el funcionamiento de los servicios Web, debemos recordar que son componentes implementados en servidores Web y que exponen una serie de funcionalidades que podemos utilizar y reutilizar en nuestras aplicaciones que desarrollemos.

Para demostrar lo fácil que es consumir servicios Web desde nuestros flujos de trabajo en Workflow Foundation, iniciemos abriendo Visual Studio .NET y creemos una nueva aplicación de consola de flujo de trabajo secuencial. Esto lo logramos seleccionado la plantilla “Sequential Workflow Console Application” en la ventana de New Project de Visual Studio .NET. A esta solución le pondremos el nombre de ConsumiendoWebServices tal y como lo muestra la siguiente figura:

A nuestro proyecto le agregaremos un nuevo sitio Web de tipo ASP.NET Web Service y le pondremos el nombre WSPrueba. Este será el sitio en donde desarrollaremos un servicio Web de prueba para demostrar la invocación desde un flujo de trabajo. Cuando creamos un proyecto de este tipo automáticamente Visual Studio .NET agrega un servicio Web llamado Service.asmx y su archivo de code-behind relacionado Service.asmx.cs. Nuestro servicio Web tendrá un método público que regresará el día de la semana actual, para esto necesitamos implementar el siguiente código:

Recordemos que aquellos métodos que deseamos invocar a través del servicio Web deberán estar decorados con el atributo WebMethod y tener el modificador de acceso public

Ahora bien, en el diseñador de nuestro flujo de trabajo agreguemos una actividad de tipo InvokeWebService. Al hacer esto Visual Studio .NET automáticamente nos presenta la caja de diálogo Add Web Reference –la misma que se muestra al agregar una referencia Web en cualquier tipo de proyecto-. El objetivo de esta caja de diálogo es indicar cuál es el servicio Web que deseamos invocar por medio de la actividada InvokeWebService. En nuestro caso seleccionaremos “Web Services in this solution” ya que esta opción buscará los servicios Web implementados en la misma solución. Una vez seleccionada esta opción, la caja de diálogo nos muestra una lista con los servicios Web encontrados y posteriormente seleccionaremos el servicio llamado “Service” el cual es el que creamos en los párrafos anteriores. Al hacer clic en este servicio, la caja de diálogo nos muestra su detalle completo. La siguiente figura muestra la caja de diálogo desplegando el detalle de Service.asmx:

Hagamos clic en el botón Add Reference. Como es esperado, Visual Studio .NET agrega al proyecto de nuestro flujo de trabajo la referencia Web correspondiente al servicio seleccionado. Además de lo anterior la actividad InvokeWebService es mostrada en el diseñador. No obstante, a este momento aún no hemos configurado dicha actividad, lo cual requiere establecer la propiedad MethodName que indica el método del servicio Web que se va a ejecutar. En la ventana de propiedades MethodName se muestra como una lista desplegable, la cual al hacer clic sobre ella muestra la lista de todos los métodos disponibles en el servicio. En nuestro caso seleccionaremos RegresaDiaDeLaSemana. Al seleccionar dicho método la ventana de propiedades es actualizada mostrando una nueva propiedad llamada (ReturnValue). Esta propiedad nos permite mapear el valor de retorno del método a alguna propiedad o campo dentro de nuestro flujo de trabajo; esto lo podemos lograr al hacer clic en el botón de tres puntos “…” en la propiedad (ReturnValue) y configurar el mapeo, en nuestro caso, a un campo llamado “resultado”. El mismo mecanismo de asignación es usado para cuando el método Web requiere parámetros. La siguiente figura muestra la actividad InvokeWebService configurada:

Muy bien, ahora para probar la invocación del servicio Web agreguemos una actividad de tipo Code al diseñador del flujo de trabajo. A esta actividad le relacionaremos el método Consulta en su propiedad ExecuteCode tal y como lo muestra la siguiente figura:

El método Consulta tendrá el siguiente código, el cual muestra el resultado de la invocación de nuestro servicio Web:

Hemos finalizado. Para probar nuestro trabajo ejecutemos nuestra aplicación haciendo clic en Ctrl-F5 o haciendo clic en el menú Debug->Start Without Debugging. Dependiendo del día en el que se esté ejecutando el código, el resultado nos mostrará el día correcto de la semana tal y como lo podemos corroborar en la siguiente figura:

Creando un control de usuario reutilizable : El mapa de México en XAML en acción – Parte II

Esta es la continuación del artículo “Creando un control de usuario reutilizable : El mapa de México en XAML en acción – Parte I”.

Crear un control de usuario reutilizable en Silverlight 2 es una tarea muy sencilla y más si organizamos e identificamos bien los pasos a seguir.

Actualmente en nuestra solución de Silverlight tenemos varios archivos entre ellos Page.xaml y Mexico.xaml.  Page.xaml es el archivo que incluye por default la plantilla de proyectos Silverlight 2 para Visual Studio .NET 2008.  Este archivo representa una página en nuestra aplicación; podemos tener más de 1 página por proyecto no obstante la página que estaremos viendo en la aplicación es aquella que asignes en la propiedad RootVisual lo cual podemos comprobar si abrimos el archivo de code-behind App.xaml.cs:

El fragmento de código muestra el comportamiento predeterminado de una aplicación Silverlight 2: la aplicación mostrará una instancia de Page.xaml, la cual no es mas que una clase que extiende la clase base UserControl; esta instancia es asignada a la propiedad RootVisual de la aplicación y todos felices y contentos.

Ahora bien, queremos crear nuestro control del mapa de México como un control reutilizable para poder usarlo en Page.xaml, Page2.xaml o CualquierOtroArchivo.xaml.

El siguiente paso será importar el namespace del proyecto en la declaración del UserControl de Page.xaml, asignándole un alias (por ejemplo “mapas”) para poder nombrar las nuevas instancias del mapa de una manera sencilla:

Tenemos nuestra primer instancia del control de usuario en Page.xaml ! No obstante, el mapa del control de usuario tiene un tamaño superior al tamaño de Page.xaml.  Esto es fácilmente corregido si eliminamos las declaraciones fijas de tamaño que tiene Mexico.xaml (Width y Height) en los Canvas LayoutRoot y MapaMexico y en la declaración del UserControl.  Además es buen momento para quitar la declaración de color azul del Canvas MapaMexico para que el mapa sea totalmente transparente cuando lo coloquemos en una página:

Estos últimos pasos nos permitirán declarar el mapa de México como cualquier otro elemento o control de Silverlight 2.  La siguiente figura muestra cómo se dibuja el nuevo control de usuario en el diseñador de Visual Studio .NET 2008:

Ya que el mapa de México lo podemos tratar como cualquier otro elemento o control de Silverlight, apliquemos una transformación de escala (ScaleTransform) para manipular su tamaño y mostrarlo un poco mejor en la página:

Es buen momento para diseñar la página de nuestra aplicación (Page.xaml).  Al diseño agregaremos 2 columnas y 3 filas ya sea manualmente en el archivo Page.xaml o por medio de Expression Blend.  La primer fila nos servirá para colocar el título de la aplicación, la segunda para colocar el mapa de México y la tercera para indicar cuál estado ha sido seleccionado.

El siguiente fragmento de código muestra las modificaciones realizadas a Page.xaml y la figura la aplicación ejecutándose en el navegador:

Al ejecutar la aplicación nos damos cuenta que el mapa de México continúa sirviendo, pero aún necesitamos una manera de avisarle a la página Page.xaml que un estado ha sido seleccionado!  Esto lo haremos creando un evento en Mexico.xaml.cs.

Primeramente necesitamos definir una nueva clase de Argumentos.  Esta clase incluirá una propiedad llamada Estado la cual indicará qué estado ha sido seleccionado por el usuario:

Posteriormente un nuevo delegado que sea la base para el evento que estamos buscando disparar.  Este nuevo delegado usará dos parámetros: object y MexicoEventArgs; siendo el primero el objeto (instancia del mapa) que ha disparado el evento y el segundo los argumentos del evento.  Sin sorpresa alguna vemos que estoy usando MexicoEventArgs ya que precisamente usaremos su propiedad Estado para indicar el estado seleccionado.

Ahora bien, declaremos el evento dentro de la clase Mexico:  Este evento estará basado en MexicoEventHandler (el nuevo delegado):

Finalmente, vamos a disparar este evento en el clic de cada estado en vez de estar mostrando la ventana de alerta:

Este último fragmento de código  demuestra varias cosas:

  1. Estamos obteniendo el nombre del estado haciendo un cast a Canvas de la propiedad sender para determinar qué estado fue seleccionado y
  2. Estamos creando una nueva instancia de MexicoEventArgs a la cual le estaremos asignando en su propiedad Estado el nombre del estado obtenido del punto número 1.
  3. Estamos usando una nueva característica del .NET Framework 3.5 la cual es “Object Initializer” o “Inicializadores de Objectos”.  Con ella podemos en la misma línea de código establecer las propiedades públicas que necesitemos sin necesidad de contar con un constructor adecuado para ello.

Perfecto!  Por último, necesitamos “inscribirnos” al evento EstadoSeleccionado en Page.xaml, para poder establecer el texto del TextBlock tbEstado con el nombre del estado seleccionado:

Estamos usando una expresión Lambda, en vez de la declaración del método en el cuerpo de la clase.  Las expresiones Lambda son un tipo especial de Métodos Anónimos (concepto introducido desde la versión 2.0 del .NET Framework) y su sintaxis incluye el operador => que significa “se va a”.  Es notable cómo el compilador conoce de antemano el tipo de los parámetros de la expresión Lambda sin necesidad de explícitamente indicarlos (o es Object, args es MexicoEventArgs).

Listo!  Hemos creado nuestro primer control de usuario y lo hemos utilizado en Page.xaml. Si ejecutamos la aplicación podemos darnos que el comportamiento esperado es correcto:  al hacer clic en un estado del control de usuario mapaMexico, el TextBlock tbEstado cambia su texto correctamente: (la propiedad ShowGridLines del Grid en Page.xaml ha sido establecida a false en la siguiente figura)

Puedes descargar el código fuente de este artículo en la sección Contenido de la La Liga Silverlight en esta dirección.

En el siguiente artículo veremos cómo extender la funcionalidad de nuestra aplicación para crear un portal que muestre fotografías relacionadas con el estado seleccionado del control de usuario!

Creando un control de usuario reutilizable : El mapa de México en XAML en acción – Parte I

Hace algunas semanas creé el primer mapa de México en XAML.  Esta iniciativa animó a unos buenos amigos a perfeccionar esta primer aproximación del mapa de México en XAML para poder utilizarlo en nuestras aplicaciones Silverlight / WPF.  En este artículo veremos cómo crear un control de usuario reutilizable a partir de este XAML para poder usarlo en la plataforma Silverlight.

Para iniciar, es buena idea mostrar el mapa de XAML que usaremos.  El mapa de México en XAML lo pueden descargar del sitio de contenido de La Liga Silverlight.  Para mostrar el mapa estoy usando KaXaml, una excelente herramienta para edición de XAML alternativa a las ya conocidas herramientas como Visual Studio .NET 2008 o Expression Blend.

Muy bien, para iniciar debemos hacer notar los siguiente:

  • Cada estado de la república es un Path, el cual está envuelto en un contenedor <Canvas> con el nombre de cada estado en la propiedad x:Name, esto para poder tener control sobre cada uno de los estados (al darle click sobre cada uno de ellos o al mover el mouse encima de él). 32 estados = 32 Path = 32 Canvas.
  • El <Canvas> raíz de todo el mapa se llama MapaMexico.  Este <Canvas> es el contenedor de los 32 estados del país

Comenzando

Crearemos una aplicación de tipo Silverlight por medio de Visual Studio .NET 2008 y usando las plantillas.  A esta aplicación le llamaremos PortalMexico como a continuación se muestra en la ilustración:

Posteriormente seleccionamos la opción de crear una aplicación Web y cerramos la ventana de diálogo.  Una vez descargado el mapa de México en XAML, agregamos los dos archivos Mexico.xaml y Mexico.xaml.cs al proyecto de Silverlight.  Estos archivos son el diseño en XAML y el code-behind relacionado a ese XAML respectivamente.

El mapa de México en XAML ya incluye código preconstruído el cual colorea el estado de la república Mexicana que esté seleccionado a través del cursor del mouse.  Este código es bastante sencillo y se logra de la siguiente manera:

Vale la pena notar que el código itera sobre todos los estados (Canvas) que están en el Canvas raíz (MapaMexico) y por cada uno ejecuta el método RegisterEvents() que a continuación se muestra:

Como podrás notar, para los eventos MouseEnter (al entrar el cursor del mouse sobre el Canvas), MouseLeave (al salir el cursor del mouse del Canvas) y MouseLeftButtonUp (al hacer clic completo con el mouse sobre un estado (Canvas)) se asignan los manejadores de evento:

estado_MouseEnter

estado_MouseLeave

estado_MouseLeftButtonUp

…respectivamente.  Esto quiere decir que, estos métodos (denominados manejadores de eventos por tratarse de métodos que se ejecutan cuando se dispara un evento) se comparten para los 32 estados!  librándonos de escribir más código del necesario, el cual también pudo haber sido resuelto de la siguiente manera pero menos eficiente:

O peor aún:

Asimismo, cuando haces clic sobre un estado del mapa de México, te muestra el navegador un mensaje de alerta con el nombre del estado que has seleccionado.  De hecho lo que te muestra no es más que el nombre del Canvas que envuelve el Path que representa el estado, tal y como lo podemos apreciar en el siguiente fragmento de código tomado del code-behind del mapa:

Es notable la presencia de la clase HtmlPage de Silverlight, la cual encapsula toda la funcionalidad necesaria del HTML Bridge de Silverlight.  Esta característica permite manipular el DOM del navegador con .NET dentro del plugin de Silverlight!!!  Esta es uno de los componentes que en lo personal considero bastante potente en esta plataforma y motivo suficiente para incluir Silverlight en todos nuestros proyectos Web ya que si abrimos un poco nuestra imaginación podremos darnos cuenta que tal vez, y digo, tal vez… no volvamos a necesitar crear scripts de Javascript para nuestras aplicaciones Web.  Este tema merece artículos en específico que próximamente estarán publicados en este blog y en La Liga Silverlight.

Vale la pena probar el mapa de México en XAML tal cual se puede descargar de La Liga Silverlight, sin modificaciones para poder entender lo que hemos explicado hasta el momento.  Para que la aplicación PortalMexico inicie con Mexico.xaml en vez de con Page.xaml, simplemente modifica la siguiente línea en el archivo App.xaml.cs, el cual es el archivo de código global para toda nuestra aplicación Silverlight, y posteriormente ejecuta la aplicación presionando la tecla F5 o eligiendo la opción Start Debugging del menú Debug en Visual Studio .NET 2008 (por favor toma en cuenta el nombre de espacio Mexico que contiene la clase Mexico)

Muy bien, ya que explicamos la manera de cómo se están adjuntando los manejadores de eventos a los diferentes eventos para cada estado y qué sucede cuando un usuario hace clic en algún estado es momento de implementar nuestro control de usuario en la aplicación Silverlight:  Es hora de reutilizar Mexico.xaml en Page.xaml :)

C# a la alza, Basic a la baja

Según el índice TIOBE, este año cierra con una interesante estadística acerca de los lenguajes de programación más populares, en donde podemos ver repuntar a un C# al lugar número 6 a comparación del lugar 8 que tenía el año pasado, mientras que los lenguajes basados en Basic (no específicamente VB.NET, hay que aclarar…) van a la baja perdiendo dos posiciones y terminando en número 5 en este año que apenas termina.

El índice TIOBE muestra las estadísticas de popularidad de los lenguajes de programación, no precisamente cuál es mejor o peor.

Para ver la estadística completa lo pueden hacer aquí.

Qué les dice a ustedes esta estadística?

Saludos!