Featured Posts

Diplomado de desarrollo de aplicaciones para Windows Phone 7.1–LatinoaméricaDiplomado de desarrollo de aplicaciones para Windows... Los invito cordialmente a que se inscriban al Diplomado de desarrollo de aplicaciones para Windows Phone 7.1, impulsado por Microsoft México para todo el mundo!  Completamente...

Readmore

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)Nueva carrera en Microsoft Virtual Academy: Windows... Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el Microsoft Virtual Academy (MVA): La carrera de Windows Phone 7.1 Mango. Esta es la descripción...

Readmore

Nueva carrera en Microsoft Virtual Academy: Silverlight 4Nueva carrera en Microsoft Virtual Academy: Silverlight... ¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa. La...

Readmore

Rodrigo Díaz Concha Rss

Silverlight para Ninjas–02 de Septiembre 2011 | Microsoft Costa Rica

Posted on : 19-08-2011 | By : Rodrigo | In : Cursos, Silverlight 4, Silverlight 5

Tags: , , , , , , ,

0

image

Como parte de las actividades que se estarán realizando en San José, Costa Rica con motivo del Quinto Simposio Latinoamericano de SharePoint, impartiré un curso privado en las instalaciones de Microsoft Costa Rica el 02 de Septiembre 2011. El curso es el Master Class: Silverlight para Ninjas.  Este curso está enfocado a temas avanzados de arquitectura de aplicaciones de Silverlight, por lo que una experiencia mínima de 6 meses con la plataforma es absolutamente necesaria.

Aquí la información:

Descripción

Contar con los fundamentosSilverlight de la plataforma de desarrollo Silverlight no es suficiente para construir Aplicaciones de Negocio robustas, escalables y de fácil mantenimiento.  Una noción profunda y detallada de la plataforma es necesaria para poder llevar a otro nivel tus aplicativos desarrollados con esta tecnología.

En este curso aprenderás técnicas y conceptos avanzados de Enlace de Datos, Comunicaciones y el Patrón de Diseño Model-Windows PhoneView-ViewModel (MVVM).  ¡Los conceptos que aquí aprendas se pueden emplear en Aplicaciones de Escritorio construidas con Silverlight 4 o 5, y también en aplicaciones de Windows Phone 7  y 7.5!

Temas

  • Enlace de Datos Avanzado
  • Comunicaciones
  • El Patrón de Diseño Model-View-ViewModel (MVVM)
  • … y más!

Audiencia

Desarrolladores profesionales con experiencia mínima de 6 meses en la plataforma de desarrollo de Silverlight

Costo

150 Dólares Americanos (USD) por participante (ó 75.000 Colones Costarricenses)

Fecha y Horario

02 de Septiembre 2011

09:00 a 18:00 horas

Lugar

Microsoft Costa Rica

Oficentro Plaza Roble (frente del Centro Comercial Multiplaza Escazú), Edificio El Patio, Piso 2

Escazú, San José, Costa Rica

¿Qué llevar?

  • Laptop con procesador Intel Core Duo o superior con 2 GB de RAM (4 GB o más recomendados) y 15 GB o más de espacio disponible en el disco duro
  • Visual Studio .NET 2010 en inglés (cualquier edición)
  • Visual Studio .NET 2010 Service Pack 1 en inglés
  • Visual Studio .NET 2010 Tools For Silverlight 5 Beta
  • Expression Blend Preview for Silverlight 5 Beta
  • Prism 4.0
  • Adobe Reader

Para una mejor experiencia, te recomendamos instalar en tu equipo todas las herramientas necesarias usando el Web Platform Installer. Visita http://www.silverlight.net/getstarted para mayor información.

Nota: Toma en cuenta traer el software en inglés, ya que al día de hoy las herramientas de Silverlight 5 Beta solo están disponibles en ese idioma y no pueden ser instaladas si Visual Studio está en español

¿Cuándo debo pagar?

La fecha límite de pago para participar en el curso será el día 02 de Septiembre a las 9:00 am

¿Cuáles son las formas de pago?

Las formas de pago son:

  • A través de transferencia bancaria internacional (Wire Transfer)
  • En efectivo, en Dólares Americanos (USD) o Colones.  El pago deberá ser en persona el día 01 de Septiembre o el día de inicio del curso.

Registro

¡El cupo es limitado! Para registrarte al curso, manda un correo a info@devmasters.com.mx con tu nombre completo tal y como quieres que aparezca en tu Certificado de asistencia.  Te enviaremos por correo la información bancaria en donde podrás pagar el costo total del curso antes de la fecha límite, para asegurar tu lugar. Por favor no olvides marcar la dirección info@devmasters.com.mx como dirección segura.

¿Qué incluye?

  • Un día completo de intenso entrenamiento
  • Material digital completamente en Español
  • Coffee Break
  • Al registrarte a este curso, recibe un 30% de Descuento para asistir al Quinto Simposio Latinoamericano de SharePoint que se llevará a cabo el 31 de Agosto 2011

¡Allá nos vemos!

¿Navajas o Llaves?

Posted on : 13-08-2011 | By : Rodrigo | In : General, Silverlight, Silverlight 5

Tags: , , ,

6

Permítanme presentarles a dos personas: él es una persona que se dedica a reparaciones automotrices, ella es ama de casa.  Ella, en sus labores cotidianas se encuentra a veces con la necesidad de hacer alguna reparación rápida, o el ajuste de algún aparato eléctrico en su hogar.  Él desmonta neumáticos y desarma motores en un taller mecánico.

Ella ha encontrado suficiente el tener esto a la mano en su hogar:

Swiss Army Knife

Él requiere este tipo de herramienta para realizar correctamente su trabajo:

Wrenches

¿Cuál de las dos personas aquí descritas tiene la mejor herramienta? 

La respuesta es: ambos.

Estas personas, han encontrado cuál herramienta es la mejor para sus necesidades reales.  Probablemente, si él utilizara la herramienta de ella, sería deficiente en sus tareas diarias y encontraría que no podría hacer todo lo que su trabajo –o su cliente- le exigen.  Y viceversa: ella probablemente encuentre que es un exceso el tener tanta herramienta si tan solo lo que ella necesita es apretar un tornillo, limar una astilla metálica o abrir una botella.

El escenario suena lógico ¿cierto?

Este escenario lo podríamos aplicar en una gran cantidad de casos, y en muchos de ellos probablemente estaríamos de acuerdo la mayoría de nosotros. Y la vida continuaría y seguiríamos pensando en otras cosas más importantes.

Sin embargo, esto no ha sido así con el tema de Silverlight v.s. HTML 5 (o HTML 5 v.s. .NET, o Flash v.s. HTML 5 o escribe aquí cualquier tema de discusión tecnológica: ________________), el cual ha sido hablado hasta el cansancio por una gran cantidad de personas -entendidas y no entendidas en el tema- y que ha llevado a la polarización de las opiniones, en un mundo en donde cualquier persona tiene voz y voto gracias a las redes sociales.  Esto no está mal realmente, pero es preocupante el leer opiniones tendenciosas que solicitan optar por blanco o negro.  Y esto realmente –creo- no debe ser así, ya que hay una gama infinita de grises enmedio de tan tajantes opciones.

HTML 5

Swiss Army KnifeHTML 5 es la quinta versión del estándar, el cual es el común denominador de todas la aplicaciones Web.  Además, prácticamente es visible a través de cualquier navegador en el planeta: Firefox, Chrome, Opera, Safari, IE, el navegador del Wii, el navegador del Xbox, el navegador del PlayStation, el de tu teléfono Motorola, en tu Nokia, en tu iPod, iPhone y iPad, en tu BlackBerry, etc.etc.  No cabe duda que esta es LA tecnología a escoger si tu objetivo es crear páginas/sitios Web, ya que seguramente querrás que tu sitio sea visible desde cualquier lado ¿no es así?  HTML 5 cuenta con muchas mejoras y nuevas funcionalidades para crear sitios altamente atractivos, dejando atrás la necesidad de instalar un plugin como Flash o como Silverlight, los cuales fueron creados para subsanar las lagunas de funcionalidad presentes en el estándar actual: HTML 4.01.  Estoy convencido que HTML sigue y seguirá siendo la “lingua franca” para todos los diseñadores y desarrolladores Web.

No obstante, HTML 5 aún no es implementado completamente por todos los navegadores.  Claro está, algún día todo navegador entenderá HTML 5 completamente, pero creo será un callejón sin salida ya que las empresas que crean los navegadores hacen una implementación única del estándar, por lo que el “estándar” probablemente quede en una paradoja interminable.  Seguirán existiendo las famosas páginas que dicen “Este sitio requiere _________ versión ___ o superior”.

Silverlight 5

Wrenches

Silverlight es una plataforma de desarrollo de Aplicaciones de Negocio, que utiliza el lenguaje XAML para la definición de sus Interfaces de Usuario (Vistas) y que incluye el Common Language Runtime (CLR) por lo que soporta los lenguajes de la plataforma .NET.  Está respaldado por extraordinarias herramientas como Visual Studio .NET y Expression Blend.

Silverlight 1.0 nació como “el reproductor de medios de Microsoft” y/o como “el competidor de Flash para la creación de animaciones”.  Hoy es día que estos estigmas siguen estando presentes en la percepción de muchas personas, medios e incluso empleados de Microsoft.

Posteriormente, con Silverlight 2, la promesa era algo así:

Silverlight en un inicio

Pero debido a la tracción que tuvo HTML 5 (excelente decisión) para ser la tecnología para la Web (y sumándole a que Apple decidió no soportar Flash y/o Silverlight en iOS) hubo un “cambio de estrategia” o como decimos en el medio el “BogMu-gate”.  Esta declaración ambigua y confusa (que no debe extrañar a nadie que conozca el medio informático) ayudó a oscurecer aún más la percepción que indiqué arriba.

Sin embargo, hace completamente sentido que Silverlight no se tome como un reemplazo de HTML –porque nunca ese ha sido su objetivo-, y además que se apoye completamente el estándar HTML 5 como lenguaje para la Web.  ¿Quién no quiere que su página o sitio se vea correctamente en cualquier dispositivo y navegador!? Hey, incluso aplicaciones Web también en algunos escenarios sería adecuado crearlos con HTML 5! (¿conoces SkyDrive?).  En un mundo en donde hay más dispositivos móviles que equipos de cómputo de escritorio, hace completamente sentido estandarizar la manera en la que se presenta la información.

Silverlight es una extraordinaria tecnología para la creación de Aplicaciones, principalmente de Negocios para el sistema operativo Windows y Mac OS.  Ese es su enfoque desde la versión 3.  Aplicaciones altamente funcionales, robustas y –con patrones de arquitectura adecuados- de fácil mantenimiento, flexibles, que aprovechen todo el poder de cómputo local y de la nube y que puedan ser construidos con herramientas y lenguajes modernos.  Aplicaciones que puedan ejecutar tal y como ejecutan las aplicaciones de escritorio hoy en día.

Personalmente, estoy involucrado en varios proyectos actualmente, en producción, que han sido bastante exitosos gracias a la plataforma de desarrollo de Silverlight, y que según su contexto no hacía sentido hacerlos con HTML 5 y que además, de hacerlo, se hubieran tardado mucho más tiempo del planeado.

¿Entonces?

¿Qué usar HTML o Silverlight?

¡Depende de qué necesites tú o tu cliente! ¿Funcionalidad? ¿Alcance? ¿Ambos? ¿En qué tecnologías tienes experiencia? ¿En cuáles lenguajes tienes experiencia?  Por ejemplo, si quieres hacer una página Web o sitio Web: no hay duda, HTML es y será el camino a seguir!  Para muestra, un botón: este blog usa WordPress, que está hecho con PHP y –para mí- es el mejor motor de blogging del mundo.  Punto.  Yo jamás construiría mi blog usando Silverlight o Flash, ya que resultaría contraproducente al no poder leerlo en, por ejemplo, el iPad 2.  Pero por otro lado, si mi cliente requiere una aplicación, altamente funcional, robusta, flexible, de fácil mantenimiento, reutilizando código existente de .NET… probablemente Silverlight será mi primera opción.

Recuerda, no hay solo blanco o negro, sino una gama infinita de grises.

Esto es para mí, el escenario actual:

HTML5 vs Silverlight

Obviamente, faltan en ese diagrama más tecnologías.  ¿En donde posicionarías tu tecnología favorita o la que más usas actualmente?

Según ______________, HTML 5 reemplazará Silverlight (y Flash, y .NET, y Java….)

No creo que eso suceda en muchos años por venir.  Te sugiero:

1. Cuestiona todo comentario impreso o verbal

2. Investiga y aprende.  Usa la tecnología.

3. Regresa al punto #1

Creo que la misma sentencia la podríamos formular: HTML 5 reemplazará a Objective-C/Cocoa/MonoTouch para la construcción de aplicaciones en iOS.  ¿Hace sentido esto?

Según ______________, a partir de Windows 8, todas las aplicaciones ahora serán construidas con HTML 5 y Javascript.

HTML 5 y Javascript serán una opción más para construir aplicaciones, según lo mencionado por Microsoft.

Microsoft es una empresa ENORME de tamaño, que está constituida a su vez, por “empresas” más chicas y todas ellas buscan sostenerse y justificar su existencia.  Algunos proyectos han fracasado, otros permanecen y permanecerán.  Otros se transformarán y evolucionarán.

Todo el futuro de la plataforma de Windows 8, será dada a conocer públicamente en durante el evento //Build/ que se llevará a cabo del 13 al 16 de Septiembre 2011.  La información está cerrada y hay voto de silencio hasta el evento.  ¿No podrás asistir al Build? No te preocupes, las sesiones estarán disponibles un día después (no sé si todas o solo el keynote).

Conclusiones

Usa la tecnología que más se adecúe a las necesidades de tu proyecto.  Todas tienen pros y contras; no existe la tecnología perfecta y tampoco solo blanco o negro.  Hay mucho qué aprender pero los días solo tienen 24 horas, da prioridad a lo que verdaderamente importa.

Salu2!!!!!!!!!!!!

Notas

La foto de la navaja suiza no es mía, la tomé de esta página.

La foto de las llaves no es mía, la tomé de esta página.

Quinto Simposio Latinoamericano de SharePoint–31 de Agosto 2011 en Costa Rica

Posted on : 03-08-2011 | By : Rodrigo | In : Comunidades, Conferencias, Eventos, MVP, SharePoint, Silverlight 4, Silverlight 5

Tags: , , , , , , , ,

0

Les invito a todos a que asistan al Quinto (sí, ya el quinto!!!) Simposio Latinoamericano de SharePoint, el cual se llevará a cabo el día 31 de Agosto 2011 en el centro de negocios Pueblo Antiguo, San José, Costa Rica.

Invitacion5SimpsioSharePoint2011

Este evento estará llevado a cabo por profesionales reconocidos MVP_Horizontal_BlueOnlyinternacionalmente en el ámbito de SharePoint y tecnologías relacionadas, muchos de ellos MVP’s.  La agenda está repleta de charlas de bastante interés para todos los gustos.

Esta es una gran oportunidad para tener de primera mano toda la información que ustedes requieran con respecto a esta magnífica plataforma de colaboración, y qué mejor que en la capital Costarricense!?

Por mi parte estaré dando un charla acerca de la construcción y diseño de Aplicaciones de Negocio (en el escritorio) con Silverlight que utilicen datos de SharePoint.  Si tienen algún tópico en específico que quisieran que se tratara durante la charla, ¡háganmelo saber! Me dará mucho gusto obtener su previa retroalimentación.

 

El registro está abierto, por lo que les sugiero ¡no pierdan su lugar!

Toda la información adicional está en la página del Simposio.

 

while (1==1) {

   CostaRica.PuraVida = true;

}

 

¡Allá nos vemos!

Utilizando un escáner desde una aplicación Silverlight

Posted on : 03-08-2011 | By : Rodrigo | In : General, Silverlight 4, Silverlight 5

Tags: , , , ,

2

432532_sri_scanner

Como he mencionado anteriormente aquí y aquí, las aplicaciones de Silverlight pueden ser clientes de automatización, es decir, pueden invocar los servidores de automatización registrados en el sistema operativo Windows de la máquina del usuario.

Un requerimiento bastante común en aplicaciones de negocio es poder utilizar el escáner conectado desde nuestro aplicativo, para poder digitalizar una imagen y posteriormente serializarla a disco y/o presentarla en pantalla, etc.

En sistema operativo Windows contamos con WIA (Windows Image Acquisition), la cual es una plataforma que permite a nuestras aplicaciones interactuar con hardware de imágenes y también estandariza la interacción entre las aplicaciones y los escáneres, es decir, es un común denominador entre el manufacturero del dispositivo y tú como desarrollador.  WIA está presente en Windows desde Windows ME en adelante, y su versión más reciente es la 2.0.

Es importante notar que tu hardware debe ser compatible con WIA para que el código de ejemplo de este artículo funcione.  Revisa la documentación de tu escáner para conocer si existe compatibilidad.

WIA.CommonDialog

El objeto WIA.CommonDialog tiene diferentes métodos que nos ayudan a desplegar las cajas de diálogo para poder seleccionar un dispositivo de imagen, como una cámara o un escáner, y además para escanear una imagen.  Si creamos una referencia a este objeto por medio de la clase AutomationFactory, podemos fácilmente integrar capacidades de escaneo en nuestra aplicación de Silverlight.

El objeto WIA.CommonDialog tiene algunos métodos bastantes interesantes, los cuales se destacan en la siguiente tabla:

ShowSelectDevice Muestra una caja de diálogo para seleccionar el dispositivo que deseamos utilizar, por ejemplo una cámara o un escáner.
ShowDeviceProperties Muestra las propiedades del dispositivo seleccionado en el método ShowSelectDevice
ShowAcquireImage Abre una caja de diálogo para escanear una imagen, usando el dispositivo configurado por default

Por ejemplo, al ejecutar ShowSelectDevice(), se desplegará la siguiente caja de dialogo:

SNAGHTML70d8f39

Nota cómo también se muestran las cámaras conectadas en el equipo.

Para nuestro código utilizaremos el método ShowAcquireImage().  Este método regresa un objeto de tipo WIA.ImageFile, que representa la imagen digitalizada.

El siguiente fragmento de código muestra el uso de este método para desplegar la caja de diálogo para escanear.

using (dynamic commonDialog = AutomationFactory.CreateObject("WIA.CommonDialog"))
{
    dynamic imageFile;

    try
    {
        imageFile = commonDialog.ShowAcquireImage();
    }
    catch (Exception originalException)
    {
        throw new Exception("El scanner no está listo", originalException);
    }

La siguiente ilustración muestra la caja de diálogo después de haber seleccionado la vista previa de la imagen a escanear (en mi caso, la portada de un disco bastante bueno que les recomiendo ampliamente Smile)

SNAGHTML7018e20

Al hacer clic en el botón “Scan”, la imagen será digitalizada.

SNAGHTML700ad62[4]

En este caso, estamos obteniendo la imagen escaneada y la guardamos en la variable llamada imageFile.  No obstante, en este momento la imagen aún no ha sido convertida a algún formato válido.  Para ello podemos utilizar otro objeto: WIA.ImageProcess.

WIA.ImageProcess

El objeto WIA.ImageProcess permite manejar la lista de filtros que deseamos aplicar para una imagen.  Un filtro en el contexto del objeto WIA.ImageProcess es una modificación a un objeto de tipo ImageFile.

En nuestro ejemplo, estamos creando una referencia al objeto WIA.ImageProcess, la cual guardaremos en una variable llamada imageProcess.  Posteriormente, agregamos a la colección de filtros el filtro Convert, el cual nos servirá para convertir el formato de la imagen escaneada a un formato conocido, en este caso JPEG.

El formato JPEG en WIA está representado por el GUID {B96B3CAE-0728-11D3-9D7B-0000F81EF32E}, por lo que es buena idea tenerlo en una variable: la variable wiaFormatJPEG.  Esto se lo indicamos a la propiedad FormatID del filtro Convert y finalmente aplicamos el filtro por medio de la ejecución del método Apply(), pasando como parámetro la imagen original.

using (dynamic imageProcess = AutomationFactory.CreateObject("WIA.ImageProcess"))
{
    imageProcess.Filters.Add(imageProcess.FilterInfos("Convert").FilterID);
    imageProcess.Filters[1].Properties("FormatID").Value = wiaFormatJPEG;
//wiaFormatJPEG es una cadena con el GUID descrito

    try
    {
        dynamic newImageFile = imageProcess.Apply(imageFile);
        //guardar a disco u obtener el Stream
     }
}
     

Ya con la nueva imagen convertida al formato JPEG podríamos obtener el Stream para poder usarlo en un BitmapImage, tal y como lo muestra la siguiente ilustración.

SNAGHTML70007a2

O si quisiéramos guardar la imagen a disco, sería muy sencillo hacer a través del método SaveFile().

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
string fullFileName = string.Format(@"{0}\{1}", path, fileName);
//fileName es el nombre del archivo

if (File.Exists(fullFileName))
    File.Delete(fullFileName);

newImageFile.SaveFile(fullFileName);

En este caso, se guardará la imagen escaneada, en formato JPEG, en la carpeta “My Pictures” de la máquina del usuario.

Accediendo a tus ensamblados de .NET desde Silverlight–Parte 2

Posted on : 27-07-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Silverlight 5

Tags: , ,

0

En el artículo anterior, vimos el uso de la clase AutomationFactory para poder crear objetos de tus ensamblados creados con el .NET Framework 4.0, y utilizarlos en Silverlight.

En el ejemplo, invocamos un método como cualquier otro y efectivamente obtenemos los resultados esperados, en este caso, la lista de unidades lógicas del equipo del usuario en donde está ejecutando la aplicación.  Pero ¿qué pasaría si necesitáramos manejar un evento que es disparado por el componente (tu ensamblado) de .NET?  En este caso la implementación debe cumplir con ciertos requisitos.

Atributo ComSourceInterfacesAttribute

Para que podamos exponer un evento en nuestro ensamblado, y que pueda ser manejado por la aplicación de Silverlight a través de automatización, debemos marcar nuestra clase que implementa el evento con el atributo ComSourceInterfacesAttribute, el cual indica una lista de interfaces que contienen los eventos a exponer en dicha clase.

Por lo tanto, en nuestro proyecto necesitamos crear una inteface que tenga la signatura del evento que deseamos exponer y disparar en la clase.  Asimismo, esta inteface debe ser de tipo IDispatch.

En el proyecto, he agregado la interface IInformacion, con la siguiente implementación:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IInformacion
{
    void OnGetLogicalDrivesInfo(int count);
}

El método OnGetLogicalDrivesInfo incluye como argumento un int que tendrá el conteo de cuántas unidades físicas han sido encontradas.

Una vez implementada la interface, la clase Informacion la decoramos con el atributo ComSourceInterfacesAttribute, indicando el tipo de interface que la clase expone, en este caso la interface IInformacion que creamos anteriormente:

[ComSourceInterfaces(typeof(IInformacion))]
[ComVisible(true)]
public class Informacion
{
...
}

Ahora bien, debemos implementar un delegado que empate la signatura del método incluido en la interface IINotificacion, y un evento que esté basado en dicho delegado.  Será este evento que el que dispararemos dentro de la clase Notificacion.

public delegate void GetLogicalDrivesInfoEventHandler(int count);

public event GetLogicalDrivesInfoEventHandler OnGetLogicalDrivesInfo;

 

Finalmente, disparamos el evento adecuadamente.  Esto lo estoy haciendo dentro del método GetLogicalDrivesInfo() una vez cargada la lista de unidades lógicas.

if (OnGetLogicalDrivesInfo != null)
{
    OnGetLogicalDrivesInfo(result.Count);
}

 

El ensamblado está listo para recompilarse y re-registrarse.

Clase AutomationEvent

Del lado de la aplicación de Silverlight, necesitamos manejar el evento expuesto por el componente: les presento la clase AutomationEvent.

La clase AutomationEvent representa un evento de automatización.  Necesitamos obtener una referencia del evento OnGetLogicalDrivesInfo, el cual disparará el componente de .NET una vez que hayamos obtenido la lista de todas las unidades lógicas.  Esto lo podemos hacer a través del método GetEvent() de la clase AutomationFactory, indicando primeramente el objeto que incluye el evento, seguido del nombre del evento como tal.  El método GetEvent() nos regresará un objeto de tipo AutomationEvent.

La clase AutomationEvent incluye un evento llamado EventRaised, el cual es disparado como resultado del evento del componente.  En los argumentos del evento EventRaised podremos obtener la lista de argumentos originales.  El siguiente código muestra el manejo del evento OnGetLogicalDrivesInfo, el cual una vez manejado obtenemos el conteo del total de unidades lógicas leídas.

dynamic obj = AutomationFactory.CreateObject("Utilerias.Informacion");

AutomationEvent ev = AutomationFactory.GetEvent(obj, "OnGetLogicalDrivesInfo");
ev.EventRaised += (s, a) =>
{
    MessageBox.Show(string.Format("Total de unidades: {0}", a.Arguments[0]));
};

 

Al ejecutar la aplicación con los cambios que hemos implementado, podremos obtener el valor del argumento del evento que se ha disparado.

SNAGHTML73c811

Silverlight Tour–Ciudad de México (18 al 20 de Agosto 2011)

Posted on : 27-07-2011 | By : Rodrigo | In : Cursos, Noticias, Silverlight 5, Silverlight Tour Workshop

Tags: , , , , , ,

0

EL Curso de Silverlight que da la vuelta al mundo: el Silverlight Tour Workshop en Español nuevamente regresa a la capital del país los días 18 al 20 de Agosto 2011 (jueves a sábado), con un horario de 08:00 a 18:00 horas.

slt_mexicocity

El Silverlight Tour es un curso de 3 días (27 horas) acerca de Silverlight, con un enfoque principalmente para aplicaciones de tipo LOB y está actualizado a Silverlight 5… con material completamente en español.  El temario general lo pueden revisar en esta página, además pueden checar algunos de los testimonios de los cientos de personas que ya han asistido a este curso.

teleriklogo

Además, el Silverlight Tour incluye una licencia para cada asistente de la suite de controles RadControls for Silverlight de nuestros Socios Telerik con un valor en el mercado de 999USD.

Registro

¡El registro está abierto en esta página!

Los esperamos!!!

Accediendo a tus ensamblados de .NET desde Silverlight

Posted on : 27-07-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Silverlight 5

Tags: , ,

4

El BCL (Biblioteca de Clases Base, por sus siglas en inglés) de Silverlight está reducido a comparación del BCL del .NET Framework completo que tenemos instalado en nuestros equipos, por lo que la funcionalidad no es la misma en un aplicativo de Silverlight que alguno construido con el .NET Framework completo.

No obstante, a partir de Silverlight 4, es posible que las aplicaciones de Silverlight sean clientes de automatización cuando ejecutan en Confianza Elevada, esto es, poder invocar los servidores de automatización registrados en el sistema operativo Windows.  Generalmente, la mayoría de ejemplos que podemos encontrar en la Web al respecto de esta característica van por el lado de invocar los servidores de automatización de Office (Outlook.Application o Excel.Application por ejemplo), pero ¿qué sucede si necesitamos invocar funcionalidad ya construida en alguno de nustros ensamblados que hayamos escrito en .NET 4.0?

Ensamblado

En esta solución crearemos dos proyectos, uno de tipo Class Library del .NET Framework 4.0 y otro proyecto será la aplicación de Silverlight.

En el proyecto de la Biblioteca de Clases escribiremos la funcionalidad para obtener la información de todas las unidades lógicas del equipo.  Tradicionalmente, esto lo podemos lograr por medio de la clase DriveInfo del espacio de nombres System.IO, pero justamente esa es una de las clases que no está en el BCL de Silverlight, por lo que crearemos un ensamblado de .NET 4.0 que regrese esa información, y la usaremos en un aplicativo de Silverlight.

La clave para lograr esto es abrir las propiedades del proyecto de la Biblioteca de Clases y seleccionar la opción “Register for COM interop” para poder exponer este ensamblado a través de COM.

image

En el proyecto agregaremos una clase llamada DriveInfo, la cual tendrá las propiedades Name, DriveFormat, TotalSize y TotalFreeSpace de la siguiente manera:

[ComVisible(true)]
public class DriveInfo
{
    public string Name { get; set; }
    public string DriveFormat { get; set; }
    public long TotalSize { get; set; }
    public long TotalFreeSpace { get; set; }
}

Nota cómo se está decorando la clase con el atributo ComVisibleAttribute.  Este atributo indica que este tipo estará disponible a través de COM.

Adicionalmente a esto, agregaremos una clase llamada Información.cs, la cual tendrá el método GetLogicalDrivesInfo() para regresar la información de todas las unidades lógicas del equipo del usuario.  También he agregado el método GetLogicalDrives() para obtener únicamente el nombre de todas las unidades lógicas.  De hecho, también podríamos agregar cualquier funcionalidad necesaria que utilice el .NET Framework 4.0 (métodos, propiedades y eventos).  El siguiente fragmento de código muestra la implementación de la clase Informacion.cs.   Nota cómo también se está decorando con el atributo ComVisibleAttribute.

[ComVisible(true)]
public class Informacion
{
    public DriveInfo[] GetLogicalDrivesInfo()
    {

        var result = new List<DriveInfo>();
        var drives = System.IO.DriveInfo.GetDrives();

        foreach (var item in drives)
        {
            if (true)
            {
                result.Add(new DriveInfo()
                {
                    Name = item.Name,
                    DriveFormat = item.IsReady ? item.DriveFormat : string.Empty,
                    TotalFreeSpace = item.IsReady ? item.TotalFreeSpace : 0,
                    TotalSize = item.IsReady ? item.TotalSize : 0
                });
            }
        }

        return result.ToArray();
    }

    public string[] GetLogicalDrives()
    {
        return System.Environment.GetLogicalDrives();
    }
}

 

Gracias a la opción que habilitamos en las propiedades del proyecto de Silverlight, al compilar el ensamblado este será registrado en el registro de la máquina local con un progID del tipo EspacioDeNombres.Clase, en este caso Utilerias.Información.  Para hacer esto manualmente podrías utilizar la utilería regasm.exe, cuando quisieras registrar el ensamblado en los equipos de tus usuarios.

Nota: necesitarás ejecutar Visual Studio .NET como Administrador, para que al momento de compilar el tipo sea registrado adecuadamente en el Registro de tu equipo.

Proyecto de Silverlight

Del lado del proyecto de Silverlight utilizaremos la clase AutomationFactory y su método CreateObject() para poder crear una referencia al componente con progID Utilerias.Información registrado previamente.

Además de esto, crearemos una clase DriveInfo.cs, igual a la que creamos en el proyecto de la Biblioteca de Clases.  Esto para poder crear un DataTemplate adecuado al presentar la información de las unidades lógicas en un ListBox.

if (AutomationFactory.IsAvailable)
{
    dynamic obj = AutomationFactory.CreateObject("Utilerias.Informacion");

    var drives = obj.GetLogicalDrivesInfo();

    var result = new List<DriveInfo>();

    foreach (var item in drives)
    {
        var driveInfo = new DriveInfo();
        driveInfo.Name = item.Name;
        driveInfo.TotalFreeSpace = item.TotalFreeSpace;
        driveInfo.TotalSize = item.TotalSize;
        driveInfo.DriveFormat = item.DriveFormat;

        result.Add(driveInfo);
    }

    if (result.Count > 0)
    {
        listBox1.ItemsSource = result;
    }
}

 

Nota el uso de los tipos dinámicos (palabra clave dynamic).  Debido a que se basan en Late Binding, no tendremos Intellisense para poder conocer los miembros del tipo en cuestión, por lo que es importante que los nombres correspondan correctamente.

Finalmente, al probar la aplicación te podrás dar cuenta que efectivamente tu aplicación de Silverlight utiliza el ensamblado Utilerias.dll que creamos en el primer paso, usando el .NET Framework 4.0 completo.  A través de AutomationFactory lo accedemos y obtenemos la información de todas las unidades lógicas del equipo.

SNAGHTMLf179f4[5]

Toma en cuenta que el ensamblado que vayas a utilizar, deberá estar registrado previamente en la máquina del usuario (utiliza regasm.exe), de lo contrario AutomationFactory.CreateObject() arrojará una excepción.  Probablemente necesitarás un instalador de prerequisitos antes de instalar y/o ejecutar la aplicación de Silverlight en Confianza Elevada.

¡Espero que les sea de utilidad!

Nueva ciudad para el Silverlight Tour: San Juan, Puerto Rico

Posted on : 16-06-2011 | By : Rodrigo | In : Noticias, Silverlight 5, Silverlight Tour Workshop

Tags: , , , , , , , , ,

1

San Juan Puerto RicoMe da mucho gusto anunciar que San Juan, Puerto Rico ha sido establecida como ciudad destino del Silverlight Tour Workshop en Español.  El curso se llevará a cabo del 02 al 04 de Agosto 2011 con un horario de 08:00 a 18:00 horas los tres días.

SLT_Trans_small

El Silverlight Tour es un curso de entrenamiento acerca de Silverlight, con el material completamente actualizado a Silverlight 5 Beta y en español.  El curso tiene un enfoque para el diseño y desarrollo de Aplicaciones de Negocio con esta plataforma.

teleriklogo

Además, el Silverlight Tour incluye para cada uno de sus asistentes una licencia gratuita de la suite de controles RadControls de nuestros patrocinadores Telerik con un valor comercial de 999 USD.

Todos los cursos tienen cupo limitado así que los invito que se registren y además que aprovechen la promoción: En alianza con Microsoft Puerto Rico este curso tiene un 50% de Descuento directo sobre el precio!

¡Allá nos vemos!

(fotografía: Wikipedia)

Webcast: Kung Fu Silverlight – Los mejores consejos y pautas de arquitectura y prácticas

Posted on : 08-06-2011 | By : Rodrigo | In : Comunidades, MVP, Silverlight, Silverlight 4, Silverlight 5, Web Casts

Tags: , , , , , , , , ,

2

silverlight_logoEl día de hoy 08 de Junio 2011 realicé el Webcast: Kung Fu Silverlight – Los mejores consejos y pautas de arquitectura y prácticas, que si bien tiene un nombre bastante largo el enfoque fue principalmente el patrón de diseño MVVM.

El WebCast ya está disponible para verse en línea, o también lo pueden descargar de esta dirección.  El código fuente de la sesión lo pueden obtener de esta otra.

¡Espero que les sea de ayuda!

Silverlight Tour–Santiago, Chile (08 al 10 de Junio 2011)

Posted on : 23-05-2011 | By : Rodrigo | In : Cursos, Eventos, Silverlight, Silverlight 5, Silverlight Tour Workshop

Tags: , , , , , , , ,

0

SLT_TransNuevamente El Curso que ha Dado la Vuelta al Mundo: el Silverlight Tour Workshop en Español se impartirá en la capital chilena del 08 al 10 de Junio 2011.  Hay una promoción de descuento por pronto pago que finaliza el 01 de Junio que les sugiero no dejen pasar.

El Silverlight Tour es un curso de entrenamiento de Silverlight, actualizado a Silverlight 5 Beta, de 27 horas aproximadamente que se imparte al rededor del mundo.  El material está completamente en Español.

DSC_0755

Asimismo, el Silverlight Tour incluye una licencia de la suite de controles RadControls for Silverlight de nuestros patrocinadores Telerik con un valor comercial de 999 USD!!!

Si quieres aprender a desarrollar Aplicaciones de Negocio con Silverlight 5 Beta, esta es simplemente su mejor opción.  ¡Cientos de personas al rededor del mundo así lo testifican!

¡Los esperamos!

TechEd 2011 @ Atlanta, GA

Posted on : 11-05-2011 | By : Rodrigo | In : Eventos, General, Silverlight, Silverlight 5, Windows Phone 7

Tags: , , ,

0

TENA2011_L_AskAbout

El evento de educación técnica por excelencia en tecnologías Microsoft: el TechEd 2011 se llevará a cabo del 16 al 19 de Mayo 2011 en Atlanta, GA.

Este evento –como siempre- promete ser bastante interesante, pero sobre todo por la gran cantidad de anuncios recientes y productos recién liberados. 

Nuevamente estaré como parte del staff, participando como Guía Técnico en Silverlight y WP7, así que si tienen planeado ir al evento acérquense a saludar! Smile De lo contrario, podrán ver en vivo las transmisiones del keynote y algunas otras sesiones a través de streaming.  Les recomiendo ampliamente no se pierdan este magno evento!

!Allá nos vemos!

Tour MVP 2011 en Perú

Posted on : 18-04-2011 | By : Rodrigo | In : Comunidades, Conferencias, Cursos, Eventos, MVP, Silverlight 5, Windows 7

Tags: , , , , , , , , , , , , ,

0

¡Amigos(as) del Perú!

Mis buenos amigos y colegas Elías Mereb, Francis Urteaga y un servidor estaremos realizando el Tour MVP 2011 en su país.  Es para mí una verdadera emoción poder regresar a tan fascinante tierra, con una gran historia y una gastronomía espectacular! Y en donde me siento honrado de contar con excelentes amigos(as) y colegas del mundo de tecnologías Microsoft.

Afiche-MVP-Tour-Peru

Estaremos en las ciudades de Cajamarca, Trujillo y Lima realizando diversas charlas y actividades cada quien en su área como experto.

Por mi parte estaré hablando de Silverlight 5 Beta y Silverlight para Windows Phone, iniciando en el COREISC, y finalizando con el curso privado “Construyendo las Aplicaciones del futuro con Silverlight 5 Beta” en las oficinas Microsoft Perú.

Si están en alguna de las ciudades, no duden en asistir!  Ya sea si su interés es Windows, Internet Explorer o Silverlight estoy seguro que les será edificante.

 

¡Allá nos vemos!