April 2009 - Posts
El Curso que Ha Dado La Vuelta Al Mundo Regresa a Guadalajara
La próxima semana regresa el Silverlight Tour Workshop en Español a la tapatía ciudad de Guadalajara, Jalisco, México… y actualizado a Silverlight 3 Beta 1. Si quieres aprender a desarrollar con Silverlight 2 y 3 este es el entrenamiento para ti!
El Silverlight Tour Workshop es un curso de capacitación en español de tres días de alta profundidad técnica acerca de Silverlight 2 y 3. El curso se imparte en varios idiomas en diferentes países en todo el Mundo.
Los lugares casi se agotan así que regístrate ya!!!
Los que son seguidores de este blog sabrán que desde el lanzamiento de Silverlight 3 Beta 1 por parte de Microsoft en el MIX09 hace un mes, he estado escribiendo artículos y ejemplos relacionados con las nuevas características que tenemos en esta última versión. Tomando en cuenta que ya son varios artículos -y que faltan más- he creado una sección especial en mi blog dedicado únicamente a Silverlight 3 Beta 1.
La dirección es:
Ahí podrán leer todos los artículos escritos hasta el momento y revisar próximamente los siguientes.
Salu2!
Silverlight 3 Beta 1: Enlace entre Elementos
El enlace entre elementos (Element Binding), presente en WPF, es una de las nuevas características que podemos encontrar en Silverlight 3 Beta 1 y que nos brinda una mayor potencia al crear nuestras aplicaciones en esta plataforma, ya que permite hacer atado de propiedades (binding) de manera directa entre elementos, sin tener que utilizar code-behind o alguna clase intermediario que controle esta relación (similar a lo que sucede con un ViewModel en el patrón MVVM).
Les recuerdo que ya estamos a escasos 7 días de iniciar el curso Silverlight Tour Workshop en Español en la ciudad de Puebla, Pue. en México. El Silverlight Tour Workshop es un curso de Silverlight 2 y Silverlight 3, de tres días completos, intenso y de alta profundidad técnica !
Quedan muy pocos lugares así que les sugiero que se registren en el sitio del curso.
Puebla es la primer ciudad que tendrá el curso actualizado a Silverlight 3 Beta 1 anunciado en el MIX09 hace algunas semanas!
Nos vemos en Puebla!!!
Silverlight 3 Beta 1: Conexión Local
Introducción
Nuevo en Silverlight 3 tenemos una nueva característica que permite comunicarnos entre diferentes aplicaciones dentro de la misma máquina. Esta característica está bautizada como Conexión Local (Local Connection en inglés). Si bien en Silverlight 2 tenemos la posibilidad de comunicarnos entre diferentes aplicaciones dentro de la misma página no es una tarea trivial; además tratar de hacerlo entre diferentes instancias de navegadores es prácticamente un infierno.
Esta nueva funcionalidad nos ofrece un mecanismo poderoso para poder complementar nuestros aplicativos que requieran tener comunicación entre sí, ya que implementar esta característica es bastante sencillo como lo demostraremos en este artículo.
System.Windows.Messaging
Todas las clases necesarias para la implementación de la conexión local entre aplicaciones están incluidas en el espacio de nombres System.Windows.Messaging
Clase LocalMessageSender
Esta clase permite el envío de mensajes a un receptor por medio del nombre especificado. Además permite establecer el nombre del dominio en el que se encuentra el receptor. Incluye el método SendAsync() el cual enviará el mensaje de manera asíncrona al receptor. Una vez enviado el mensaje se disparará el evento SendCompleted, el cual incluye en sus argumentos la propiedad Error la cual nos indica si sucedió una excepción durante el envío del mensaje.
Clase LocalMessageReceiver
Análoga a la clase LocalMessageSender, esta clase nos permite recibir mensajes. También aquí establecemos el nombre del receptor, que deberá concordar con el nombre establecido en el objeto de tipo LocalMessageSender. Una vez recibido un mensaje se dispara el evento MessageReceived el cual incluye en sus argumentos la propiedad Message de tipo string, misma que contiene el mensaje enviado por la aplicación origen.
Además de esto podemos especificar los dominios válidos de los que puede recibir mensajes este objeto!
Modelo Publicador-Subscriptor
Es a través de este modelo publicador-subscriptor por el cual podemos implementar comunicación entre diferentes aplicaciones de Silverlight 3 en la misma página, o en diferentes pestañas del Navegador… incluso entre diferentes instancias de Navegadores, INCLUSO entre diferentes tipos de Navegadores (IE, FF, GC, etc.!).
Es importante mencionar además que una aplicación de Silverlight no está limitada a ser únicamente publicador o subscriptor, sino que puede ser ambos! Esto es, podemos establecer una comunicación local bidireccional entre aplicaciones. El único requisito es tener los objetos LocalMessageSender y LocalMessageReceiver en cada aplicación de manera correcta.
La Solución
La solución que crearemos estará compuesta de dos aplicaciones Silverlight. La aplicación Origen permitirá la captura de contenido Xaml dentro de un TextBox e incluirá un botón para enviar el Xaml a la aplicación Destino.
La aplicación Destino por su parte estará escuchando nuevos mensajes que le envíe la aplicación Origen. Cuando llegue efectivamente un mensaje, interpretará el Xaml convirtiendo todo el árbol de contenido en los elementos visuales correspondientes al código, y los dibujará dentro de un Grid llamado LayoutRoot.
Ambos proyectos de Silverlight estarán contenidos en una misma solución, la cual también incluirá una Aplicación Web para poder probar la funcionalidad. Además ambos proyectos estarán relacionados a la misma Aplicación Web para que nos cree automáticamente las páginas de prueba. La siguiente figura muestra la estructura de la solución:
Origen
La aplicación Origen contiene un TextBox para escribir una cadena de Xaml válida que se enviará al destino. Además contiene un botón que hará efectivamente el envío del mensaje. El siguiente fragmento de código muestra la implementación de la aplicación Origen:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Messaging;
namespace SL3ConexionLocal.Origen
{
public partial class MainPage : UserControl
{
LocalMessageSender sender;
public MainPage()
{
InitializeComponent();
sender = new LocalMessageSender("SL3ConexionLocal");
SendXamlButton.Click += (s, a) =>
{
sender.SendAsync(XamlTextBox.Text);
};
sender.SendCompleted += (s, a) =>
{
if (a.Error != null)
{
MessageBox.Show(a.Error.Message);
}
};
}
}
}
Destino
La aplicación Destino recibirá el mensaje enviado por el Origen:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Messaging;
using System.Windows.Markup;
namespace SL3ConexionLocal.Destino
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//Receptor/Receiver
//Podemos especificar los dominios válidos de los que podrás recibir mensajes!
//We can specify the domains where this object can receive messages from!
LocalMessageReceiver receiver = new LocalMessageReceiver("SL3ConexionLocal");
receiver.MessageReceived += (s, a) =>
{
string message = a.Message;
try
{
UIElement newContent = (UIElement)XamlReader.Load(message);
LayoutRoot.Children.Clear();
LayoutRoot.Children.Add(newContent);
}
catch (Exception)
{
MessageBox.Show("No es un Xaml válido");
}
};
receiver.Listen();
}
}
}
Noten cómo se establece el nombre del receptor como “SL3ConexionLocal”. Posteriormente se comienza a escuchar por mensajes usando el método Listen() y cuando uno es recibido efectivamente se interpreta a un objeto de tipo UIElement a través del método XamlReader.Load().
Al ejecutar la aplicación Origen en un Navegador y la aplicación Destino en otro (usando las páginas de prueba creadas automáticamente para cada aplicación) podemos comprobar esta funcionalidad:
El siguiente ScreenCast muestra la solución construida en este artículo ejecutándose incluso usando un segundo publicador (aplicación Origen corriendo en FireFox). También es notable el uso de tres diferentes tecnologías de Navegadores lo cual muestra la capacidad que tiene Silverlight para ejecutarse en múltiples ambientes.
Silverlight 3 - Conexión Local
Resumen
La Conexión Local incorporada en Silverlight 3 permite comunicarnos de una aplicación a otra a través de un mecanismo de publicación-subscripción. Esta interesante y poderosa funcionalidad abre nuevos paradigmas en el desarrollo de aplicaciones RIA, ya que su modelo de programación es bastante sencillo y sus alcances en soluciones con Silverlight son innumerables.
Silverlight 3 Beta 1: Conciencia de Conexión
El nuevo espacio de nombres System.Net.NetworkInformation de Silverlight, incorporado en Silverlight 3 Beta 1 nos permite implementar una funcionalidad de “conciencia” de conexión en nuestras aplicaciones, esto es, saber en un momento dado si la aplicación está ejecutándose en un ambiente conectado o ha perdido la conexión; para poder determinar un comportamiento correcto en cada uno de esos escenarios. Esta funcionalidad nos sirve tanto para aplicaciones que se estén ejecutando dentro del Navegador como en aplicaciones Fuera del Navegador, es por eso que dejé este tema como un artículo por separado (ver el artículo Silverlight 3 Beta 1: Fuera del Navegador para más información al respecto de este tipo de aplicativos).
Clase NetworkInterface
Esta clase abstracta incluye el método estático GetIsNetworkAvailable(), el cual nos indica si hay una conexión de red o no.
Es muy importate mencionar que este método NO indica si hay una conexión a Internet, es decir, no está directamente relacionado una conexión de red disponible a una conexión en Internet efectivamente. Una manera para conocer si tenemos una conexión a Internet es hacer ping a un sitio conocido y con alta disponibilidad (ejemplo: www.microsoft.com, o www.yahoo.com) y/o utilizar las clase WebClient para descargar un archivo conocido en nuestro servidor donde esté hospedada la aplicación, por ejemplo: un archivo de texto pequeño que podamos descargar y leer para determinar si efectivamente tuvimos acceso a través de Internet.
El siguiente fragmento de código muestra cómo podemos utilizar NetworkInterface.GetIsNetworkAvailable() para determinar si tenemos una conexión de red:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
btn.Click += (s, a) =>
{
txt.Text = NetworkInterface.GetIsNetworkAvailable().ToString();
};
}
}
Clase NetworkChange
Un paso más adelante en esta funcionalidad está la clase NetworkChange la cual incluye el evento NetworkAddressChanged.
Silverlight 3 Beta 1: Aplicaciones Fuera del Navegador
Introducción
Una de las características nuevas incluidas en la última versión de Silverlight: Silverlight 3 Beta 1 es el soporte a que nuestras aplicaciones puedan ejecturse fuera del navegador (OOB por sus siglas en inglés Out Of Browser), esto es, que no tengas que navegar a página equis de sitio ye para poder correr dicha aplicación. Más que un simple código que debemos agregar a nuestra aplicación, esta característica tiene muchos detalles que vale la pena explicar paso a paso. El objetivo de este artículo es precisamente eso.
Elemento Deployment.ApplicationIdentity
Para que nuestra aplicación pueda ser ejecutada fuera del navegador necesitamos habilitar esta opción modificando el manifiesto (implementado en el archivo AssemblyManifest.xml) de nuestro proyecto de Silverlight 3 agregando el elemento ApplicationIdentity. Con este elemento podemos establecer diversas propiedades para nuestra aplicación como el nombre, el título de la ventana, la descripción y los iconos a mostrar cuando esté la aplicación como acceso directo en el escritorio, en la barra de tareas, etc.
Cabe mencionar que las plantillas de Silverlight 3 Beta 1 para Visual Studio .NET 2008 ya incluyen el elemento ApplicationIdentity encerrado en un bloque de comentario, para simplemente “descomentarlo” y habilitar la opción de una manera sencilla. Por el otro lado, si estás convirtiendo un proyecto de Silverlight 2 a Silverlight 3 Beta 1 –como es el caso de este artículo-, el Asistente de Conversión NO agregará de manera automática el elemento ApplicationIdentity y lo tendrás que agregar manualmente. A esto debemos añadir que no hay actualmente soporte de Intellisense para este elemento cuando lo estamos editando en Visual Studio.
Ahora para que este artículo esté basado en una aplicación real voy a utilizar el ejemplo del Silverlight Fred (sencillo juego de memoria que asemeja al Fabuloso Fred: famoso juguete en la década de los 80) publicado hace algunos días y le agregaremos la característica de ejecutar Fuera del Navegador.
Iconos
El elemento Deployment.ApplicationIdentity soporta el subelemento ApplicationIdentity.Icons en el cual podemos establecer los iconos que nuestras aplicación requiera. Podemos establecer cuatro tamaños para los iconos:
- 128x128
- 48x48
- 32x16
- 16x16
El tamaño de 128x128 es utilizado por la caja de diálogo cuando estemos “instalando” la aplicación Fuera del Navegador, el resto son utilizados por el Sistema Operativo para el acceso directo del escritorio (en Windows), el icono para la ventana de la aplicación, el taskbar, etc.)
Les recuerdo que el próximo 15 de Abril a las 7:00pm (-06:00 GMT) tendremos la Primer Reunión Virtual de La Liga Silverlight, en donde @jluisestrada y un servidor estaremos hablando de la comunidad, de Silverlight y de cómo construir Gadgets para Windows Vista con Silverlight 2
+
Agenda
7:00pm – 7:15pm : Introducción a La Liga Silverlight e Introducción a Silverlight
Expositor: Rodrigo Díaz Concha
7:15pm – 7:50pm : Desarrollo de Gadgets para Windows Vista con Silverlight 2
Expositor: José Luis Estrada
7:50pm – 8:00pm : Sesión de Preguntas y Respuestas. Invitaciones y Anuncios
Expositores: José Luis Estrada y Rodrigo Díaz Concha
Registro
http://msevents.microsoft.com/CUI/EventDetail
.aspx?EventID=1032413178
&Culture=es-MX
Los esperamos!!!
Si bien este artículo está totalmente basado en el hecho de que mi blog está implementado en WordPress, de fondo son los mismos conceptos si es que utilizas cualquier otro motor de blogging.
WordPress cuenta con una vasta galería de Widgets que podemos utilizar en nuestro sitio para extender su funcionalidad. Uno de estos Widgets, que ya viene incluído de manera predeterminada es el Text/HTML. Este componente te brinda la oportunidad de implementar cualquier tipo de código HTML arbitrario incluso Javascript.
Por el otro lado, hay diferentes maneras de instanciar el plugin de Silverlight en una página Web, una de ellas es utilizar el elemento <object> de HTML indicando los parámetros correctos para su inicialización. Además, una de las características que tiene Silverlight es que podemos tener nuestro archivo .XAP en un dominio diferente a la página que donde lo vamos a instanciar; por lo tanto el único requisito es que tu archivo .XAP esté accesible.
Así que:
- Sube tu archivo .XAP
- Agrega el Widget de Text/HTML en tu página
- Instancia el plugin de Silverlight usando el elemento <object> indicando como fuente el archivo .XAP
- Si tu aplicación hace uso del Puente HTML de Silverlight, habilítalo por medio del parámetro enablehtmlaccess y establécelo en “true”
El siguiente código es el que estoy utilizando para instanciar el Widget del Silverlight Tour Workshop en Español, noten cómo el archivo .xap vive efectivamente en el dominio silverlight-tour.com.mx y no en rdiazconcha.com. También vale la pena notar que se está habilitando el Puente HTML y además se está estableciendo un parámetro necesario para la aplicación con initparams.
<div id="silverlightControlHost" style="width:100%; height:400px;">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="http://silverlight-tour.com.mx/ClientBin/DevMasters.SilverlightTour.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="minRuntimeVersion" value="2.0.31005.0" />
<param name="autoUpgrade" value="true" />
<param name="initParams" value="widget=true" />
<param name="enablehtmlaccess" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
</div>
También recuerda que tienes la opción de modificar la imagen que les aparece a los usuarios que no tienen instalado Silverlight simplemente cambiando el atributo src del <img> en el código de arriba.
Ahora bien, también puedes instanciar el plugin de Silverlight utilizando la función createObjectEx() del archivo Silverlight.js incluído en la plantilla de Visual Studio, pero tendrías que subir el archivo .js a tu servidor, referenciar el script, y utilizar la función. <object> parece ser mejor opción si lo único que necesitas es ejecutar una aplicación en tu página.
Sea una opción u otra, instanciar una aplicación de Silverlight en tu sitio es una tarea muy sencilla.
Salu2!
En el MIX09 nos fue regalado un código de invitación para probar de primera mano el Widget para páginas Web de Microsoft Translator. Este componente brinda el servicio de traducción de Microsoft Translator en tu sitio / página Web sin necesidad de instalar algo extra en tu servidor. Simplemente agregas el script necesario para que su invocación en alguna parte de tu sitio (en mi blog, que está implementado en WordPress podrán checar que está implementado usando un widget de Texto/HTML que el mismo WordPress ofrece).
Es una gran oportunidad para que tus amigos y lectores que no tengan la misma lengua materna que tú puedan leerte, claro está, la traducción no es perfecta pero resulta bastante entendible.
Si están interesados en obtener un código de invitación, simplemente solicítenlo en la página de Microsoft Translator.
Salu2!
Si fueron niños en la década de los ochenta como yo, podrán recordar que en aquel entonces en México un muy codiciado juguete era el Fabuloso Fred, el cual tenía varios juegos en uno siendo el juego de la memoria su principal característica (tenía otras funciones como piano y otras más que ignoro ya que nunca lo tuve :() Ayer en la noche decidí hacer una implementación básica de este juguete usando Silverlight 2.
El código fuente está disponible para que lo descarguen y modifiquen a su gusto. Algunas de las áreas de oportunidad que tiene son:
- Diferentes sonidos para cada botón
- Incremento de velocidad según vayas pasando de nivel
- Fuera del Navegador (portándolo a Silverlight 3)
El código fuente lo pueden descargar aquí y el demo en vivo lo pueden ver en la sección “Ejemplos” de La Liga Silverlight.

Salu2!
Una de las *desventajas* que tiene hoy el desarrollar aplicaciones para Silverlight 3 Beta, es que no soporta una instalación de lado a lado con las plantillas de Visual Studio .NET 2008 de Silverlight 2, es decir, o tenemos las plantillas de Silverlight 3 o tenemos las plantillas de Silverlight 2: pero no al mismo tiempo. Esto será resuelto en Visual Studio .NET 2010 ya que permitirá efectivamente seleccionar la versión de Silverlight a la que queremos apuntar.
No obstante hay una manera rápida de pasarnos de una versión a otra, y es ejecutar un archivo de procesamiento por lotes incluido en un archivo .zip que podemos descargar de aquí. Básicamente lo que hace el archivo es crearnos un par de archivos .bat (VS_2-TO-3.BAT y VS_3-TO-2.BAT) que podremos ejecutar posteriormente cuando necesitemos tener activa una versión de Silverlight en específico. Estos archivos .bat no hacen más que desinstalar la versión actual e instalar la otra; por lo tanto necesitamos tener los siguientes archivos en un mismo fólder en nuestra máquina:
Al ejecutar Setup_SLTools_Util.bat se crearán los archivos .bat necesarios para pasarnos de una versión a otra (tanto para Visual Studio como para Visual Web Developer):
Figura 1: Fólder con todos los archivos necesarios
Tomen en cuenta que deberán ejecutar los archivos .bat con permisos elevados para que no tengan ningún problema. Además no deberá estar ejecutándose Visual Studio / VWD en el momento que ejecuten los .bat
Otra cosa importante mencionar es que el cambio de una versión a otra no es silenciosa, es decir, aparecerán las cajas de diálogo para la instalación y tendrán que aceptar la licencia, etc.
Figura 2: Herramientas de Silverlight 2 habilitadas en Visual Studio
Figura 3: Herramientas de Silverlight 3 habilitadas en Visual Studio
Supongo que un futuro no muy lejano tendremos mejores opciones que esta, pero por el momento funciona y es un camino rápido para cuando necesitemos desarrollar aplicaciones de Silverlight 3 sin perder la opción de desarrollar para la versión 2.
Salu2!
Silverlight Spy es una herramienta que no debe faltar en nuestros equipos de desarrollo cuando construímos aplicaciones con Silverlight. La herramienta nos permite inspeccionar el contenido de una aplicación en su totalidad, desde la IU, el XAML que lo constituye y también el código fuente de la aplicación (siempre y cuando registremos Reflector en la herramienta).
Para que puedan apreciar más su funcionalidad chequen este video que fue grabado durante el MIX09:
El Simposio
Tengo el honor de invitarles a todos ustedes al 2do Simposio Latinoamericano de SharePoint, que se llevará a cabo el día 23 de Abril del 2009 de 9:00 a 19:00 hrs. en el Auditorio Telmex Hotel Fiesta Americana Reforma (Av. Paseo de la Reforma No.80) de la Ciudad de México. Este es un evento realizado por la Comunidad de SharePoint México en conjunto con Microsoft México y demás banda ruidosa! :)
La cuota de recuperación es de 250.00 pesos M.N. (Fe de erratas: El día de ayer en Byte Me con el mismísimo FerGlo mencioné que la entrada era libre. Mil disculpas por esta omisión :P)
(Haz clic para ver el poster más grande)
Los Expositores
Por mi parte estaré compartiendo escenario con Mauricio en el tema:
“Experiencia de Usuario en sitios de SharePoint 2007: Conozca cómo puede mejorar la experiencia del usuario con Silverlight” a las 11:20 a.m.
(sí niños y niñas…. Silverlight sobre SharePoint!, leyendo los datos de las listas de SharePoint para mostrarlos de una manera menos fea más agradable!) ;)
Además… estaré obsequiando / rifando tres Vales de Descuento de 50% para asistir al Silverlight Tour Workshop en alguna de las ciudades destino durante el 2009 !!!!!!!!! :D
El Registro
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032413075&Culture=es-MX
Es muy importante que se registren al evento en la página y lleven su registro impreso el día del evento para ingresar al mismo, ya que les servirá para entrar en la rifa de los premios, tenemos 2 teléfonos con Windows Mobile y una licencia profesional de Kaldeera Workflow 2009.
Además el cupo es limitado a 250 personas… así que regístrate ya!
La Cuota
La cuota de recuperación es de: $250 pesos M.N.
(La cuota se pagará ahí mismo)
Las Ligas y Más Información
Únete a la comunidad en: http://mssharepoint.multiply.com/
Síguenos en Facebook: http://www.facebook.com/group.php?gid=56850858767
Los esperamos!!!
[UPDATE 08 de abril 2009]
El Simposio será en el Hotel Fiesta Americana Reforma
Av. Paseo de la Reforma No. 80
Si van por transporte público vayan al Metro Hidalgo o al Metro Auditorio y tomen el autobús
Les invito cordialmente a que asistan a la 1er Reunión Virtual de La Liga Silverlight la cual se llevará a cabo el próximo miércoles 15 de abril a las 7:00pm (GMT –06:00) a través de un Web Cast que será impartido por un servidor y por mi buen amigo y colega José Luis Estrada (o el “Jocho” para los cuates ;)).
Esta será la primer reunión que tendremos de esta índole en los próximos meses y que dará inicio a los eventos virtuales que La Liga Silverlight persigue desde su fundación.
No está por demás decirles que la entrada es totalmente libre :)
Agenda
7:00pm – 7:15pm : Introducción a La Liga Silverlight e Introducción a Silverlight
Expositor: Rodrigo Díaz Concha
7:15pm – 7:50pm : Desarrollo de Gadgets para Windows Vista con Silverlight 2
Expositor: José Luis Estrada
7:50pm – 8:00pm : Sesión de Preguntas y Respuestas. Invitaciones y Anuncios
Expositores: José Luis Estrada y Rodrigo Díaz Concha
Registro
http://msevents.microsoft.com/CUI/EventDetail
.aspx?EventID=1032413178
&Culture=es-MX