PDF de programación - Moonlight: ¿una alternativa a Silverlight?

Moonlight: ¿una alternativa a Silverlight?gráfica de visualizaciones

Publicado el 14 de Enero del 2017
481 visualizaciones desde el 14 de Enero del 2017
783,9 KB
6 paginas
Creado hace 13a (24/02/2011)
Moonlight:
¿una alternativa a Silverlight?
La luz de la luna también es plateada

El tema Silverlight recientemente se ha puesto caliente por las declaraciones de Bob Muglia en la pasa-
da PDC (ver el artículo ilustrativo que publicó dotNetManía en el número del mes pasado [1])1. El asun-
to es si los que nos enamoramos de Silverlight por sus propias bondades (alta productividad de desa-
rrollo entre ellas) podemos contar con algo similar para los sistemas y dispositivos para los que no se
disponga de Silverlight. ¿Es Moonlight una alternativa? ¿Moonlight ejecuta en Linux todo lo que Silver-
light ejecuta en Windows? Con este artículo pretendemos ofrecer un primer acercamiento a este tema.

¿Cuándo salió la luna? Un poco de historia

“No saber lo que ha ocurrido antes de nosotros
es como seguir siendo niños”

Cicerón (escritor, orador y político romano,
106 AC-43 AC)

Miguel de Icaza, líder del proyecto Mono [2], dio a
conocer allá por 2007, que presentaría una versión
alpha de Moonlight a mediados de ese año [3]. Lue-
go de un intenso trabajo por parte del equipo, la
primera versión fue presentada precisamente en el
ReMIX de Microsoft de París, el 21 de junio de 2007.
Cuando se mostró la demo, los entusiastas de la
tecnología .NET sentimos cada vez más posible de
realizar el sueño de poder escribir todas las apli-
caciones en .NET y que luego éstas pudiesen eje-
cutar en cualquier plataforma; “write once, run
everywhere” de verdad.

Pero inicialmente todo no fue color de rosa.
Para poder ejecutar en Moonlight una aplicación
de Silverlight, había que de descargar de
http://ftp.novell.com/pub/mono/sources/moon
y compilar el código fuente de Moonlight, con el

fin de probar cómo funcionaba la aplicación en
nuestro escenario. Esto implicaba, por supuesto,
disponer en Moonlight de todas las librerías nece-
sarias, y enfrentar los frecuentes errores de ejecu-
ción de las aplicaciones por usar diferentes ver-
siones.

Luego de esa presentación inicial en París,
Microsoft empezó a cooperar con Novell en el pro-
yecto, lo que le dio un gran impulso, ya que le pro-
porcionaron a los desarrolladores de Moonlight
tres aportes fundamentales:

• El paquete completo de testing de Silverlight.
• Los códecs para la reproducción de vídeo y audio
para que pudiesen ser usados “sin cargo alguno”
en Moonlight cuando se ejecutan en el navegador.
• Algunos de los detalles, especificaciones e inte-
rioridades de Silverlight que no estaban publi-
cados en la web del producto.

El 9 de febrero de 2009 se lanza la versión 1.0
de Moonlight, el cual usaba el paquete de medios
de Microsoft 1.0 para la reproducción de audio y
vídeo, y que era compatible con Silverlight 1.0. Esta-
ba implementado completamente en C/C++.

1 Usted puede ver también nuestro post al respecto, publicado en www.weboomania.com.

Camilo Abel Monreal y Miguel Katrib
Camilo Abel es desarrollador e instructor del
grupo WEBOO. Dr. Katrib es líder del grupo
WEBOO y profesor titular de Programación,
ambos en la Universidad de La Habana.

Posteriormente, en mayo del mismo año, cuando
ya Microsoft había lanzado su Silverlight 2.0, aparece
la versión alpha 2.0 de Moonlight, y más tarde en
diciembre se lanza Moonlight 2.0. Esta versión, además
de ser compatible con Silverlight 2.0, tenía algunas otras
funcionalidades añadidas, como la capacidad de utili-
zar lenguajes que se ejecutan en el DLR (Dynamic Lan-
guage Runtime), usar el paquete de medios de Micro-
soft 2.0 y ser completamente compatible con todos los
controles Silverlight 2.0 MS-PL. Es bueno que algunos
fundamentalistas conozcan el dato de que ya esta ver-
sión 2.0 contenía solo 142.000 líneas de código C/C++,
en contraste con que contaba ya con 320.000 líneas de
código C# (125.000 de las cuales provenían de los con-
troles de Silverlight de Microsoft con código abierto).
Actualmente se está desarrollando la versión 3.0,
de la cual en febrero de 2010 se lanzó la primera pre-
view y que es una suerte de híbrido entre las versiones
3.0 y 4.0 de Silverlight. Esta versión ya deberá ofrecer
una API completa. En la fecha en que se escribe este
artículo, ya Moonlight tenía un 47.77% de ejecución
satisfactoria de la suite de tests de Silverlight 4.

Pero ya se adelanta que la versión 4.0 deberá incluir
todo el soporte para webcams y micrófonos, así como
el soporte para los WCF RIA Services, entre otras carac-
terísticas; además, seguramente en esta versión apa-
recerán algunas de las características que se incluyen
en la versión 5.0 de Silverlight, si nos guiamos por el
roadmap que han venido siguiendo ambos proyectos.
Moonlight 3.0 está en la actualidad disponible ofi-
cialmente como plug-in para Mozilla Firefox y Google
Chrome. Miguel de Icaza comenta en su blog que tal
vez antes de la salida de Moonlight 4.0 se publique una
versión 3.5 con la mayor cantidad de características de
Silverlight 4.0 que puedan incluir al inicio del año.

Alunizando

El proyecto Moonlight se puede dividir, a grandes ras-
gos, de la manera que se muestra en la figura 1. Los
principales subsistemas que componen la arquitectu-
ra que se muestra en la figura son los siguientes:

• User Code. Es todo aquel código que incluimos o
generamos en nuestras aplicaciones; desde el códi-
go HTML, JavaScript, CSS, controles creados en nues-
tra aplicación, librerías propias o de terceros, etc.

• MS Code. Es el conjunto de librerías de controles y
funcionalidades de Silverlight. Aquí se usan los con-
troles de Silverlight MS-PL. Se incluye también la
implementación del DLR para la plataforma Mono,
lo que permite ejecutar código de lenguajes dinámi-
cos como IronPython, IronRuby, etc.; esta carac-
terística está presente desde Moonlight 2.0. El Media

Codec Pack, por su tipo de licencia, no viene inclui-
do de serie en Moonlight y se debe de descargar apar-
te del sitio de Microsoft. Este contiene todo lo rela-
cionado con la reproducción de vídeo y audio (VC1,
WMV, WMA, MP3, etc.).

• Mono Code. Aquí se encuentra todo lo desarrollado
propiamente en el proyecto. Como se puede ver en la
figura 1, consta de tres componentes fundamentales:

Core CLR. Aquí se encuentra el subconjunto del
runtime de Mono que se usa en Moonlight (en
Moonlight 2.0 era un subconjunto de Mono 2.6,
y en Moonlight 3.0 de Mono 2.9), la implemen-
tación de la API de Silverlight, controles, manejo
de eventos, estructuras de datos, etc.
Mozilla, Chrome Plug-in. Incluye todo lo relacio-
nado con los plug-ins para los navegadores, como
por ejemplo, la interacción con las API de cada
uno.
Libmoon. Aquí es donde se concentra todo lo rela-
cionado con la interacción con el sistema opera-
tivo bajo el que se está ejecutando Moonlight. Es
donde descansa todo lo relacionado con las lla-
madas a las funciones nativas donde se esté eje-
cutando la aplicación.

A partir de la versión 3.0, se creó Moonlight Plat-
form Abstraction Layer, que es con la que se usa actual-

Figura 1. Arquitectura de Moonlight

mente Moonlight en Android y OSX. Gracias a esta
capa de abstracción, es mucho más fácil portar la pla-
taforma a otros sistemas operativos.

Uno de los logros más significativos del proyecto
Moonlight es lo que se ha logrado en el tema de la ace-

a
í
n
a
M
t
e
N
t
o
d

41

No hay una “silver bullet” para la portabilidad

Como la mayoría de los lectores de dotNetManía segura-
mente están más familiarizados con Silverlight y Visual Stu-
dio, hagamos una demo en nuestro ambiente de desarro-
llo favorito y probémosla en Moonlight para ver qué pasa.
Desarrollemos una aplicación de visor de fotos. Para
ello, creamos en Visual Studio un proyecto de tipo Sil-
verlight Navigation Application para Silverlight 3.0. Agre-
gamos todo el código que permite mostrar las imáge-
nes, con las animaciones, etc., insertando dentro de los
recursos de la aplicación una carpeta images con nues-
tras imágenes3. Cuando se ejecuta la aplicación en Win-
dows, todo perfecto, como se muestra en la figura 2.

Lo que hace la aplicación es mostrar en un control
StackPanel varios botones con las fotos. Estas se pre-
visualizan de manera vertical a la izquierda, y cada vez
que el cursor pasa por encima de una imagen, éstas
muestran una animación, cambiando su tamaño y su
opacidad. Cuando se selecciona una imagen haciendo
clic sobre ella, entonces la imagen se muestra en el cen-
tro de la pantalla haciendo un efecto. Estas previsuali-
zaciones se obtienen con el código del listado 1.

Un fragmento del código del ControlTemplate Tem‐
plateImageBtn se puede ver en el listado 2. En éste se
ha eliminado todo lo relacionado con las animaciones
y estados del botón.

Figura 2. Visor de fotos en Silverlight

leración por hardware. Silverlight posee en estos momen-
tos aceleración por hardware solamente para algunos
pixel shaders; sin embargo, Moonlight 3.0 tiene acelera-
ción por hardware para todos los pixel shaders [4]. Esto
se debió fundamentalmente a que desde el inicio del
proyecto, David Reveman, muy conocido por sus apor-
tes en Glitz ([5], [6]), Xgl ([7]) y Compiz ([8]) trabajó en
el diseño e implementación de esta funcionalidad2.

private void CreatePreImages()
{

var fotos = new string[] {"Capitolio.jpg", "Castillo de la Fuerza.jpg",
"El Cristo de la Habana.jpg", "Fauna1.JPG", "Fauna2.JPG",
"Fauna3.JPG", "Hotel.JPG", "John Lennon sentado en el Parque.jpg" };

Template = (ControlTemplate)Application.Current.Resources["TemplateImageBtn"],
Content = StrRelativeToComponent(string.Format("images/{0}", fotos[i]))

for (var i = 0; i < fotos.Length; i++)
{

var button = new Button
{

};
button.MouseEnter += BtnMouseEnter;
button.MouseLeave += BtnMouseLeave;
button.Click += BtnClick;
ImageStackPanel.Children.Add(button);

}

}

private static string StrRelativeToComponent(string resource)
{

var name = Assembly.GetCallingAssembly().FullName;
return (new Uri(String.Format("/{0};component/{1}",
name.Substring(0, name.IndexOf(',')), resource),
UriKind.RelativeOrAbsolute).ToString());

}

Listad
  • Links de descarga
http://lwp-l.com/pdf240

Comentarios de: Moonlight: ¿una alternativa a Silverlight? (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad