FIL.2008 = new FIL.2008();

Los ojos de toda América Latina están puestos en la emblemática ciudad de Guadalajara, Jalisco, México debido a la más reciente edición de la Feria Internacional del Libro que en esta ciudad se lleva a cabo desde hace más de un par de décadas.  En especial esta edición me parece de lo más interesante -y obligada para todas aquellas personas que gustamos de la letra-, ya que el país invitado en esta ocasión es Italia; país de grandes iconos de literatura moderna y clásica, país del buen comer y por qué no, del buen beber.

Sin embargo, no solamente se engalana por la presencia del mediterráneo país sino también por una serie de eventos y presentaciones efectuadas por grandes luminarias nacionales y extranjeras en el plano literario.  Por ejemplo, tendremos el estreno mundial de la últimamente multi-mencionada obra operística “Santa Anna” de Carlos Fuentes, gran escritor mexicano nacido -por accidente- en Panamá, acerca de los últimos años de vida de este personaje ligado íntimamente a la historia de nuestra nación.  También tendremos diversos estrenos en papel y tinta como por ejemplo la más reciente obra del maestro Monsiváis, el nuevo libro de Martha Chapa -ipso facto antojable al simple oído- acerca de los Tacos de México (de dónde más caray…), diferentes lecturas públicas de poesía llevadas a cabo por personas como José Emilio Pacheco, entre otros momentos invaluables.

Un plato fuerte de esta edición será el encuentro de magníficos moneros como Sergio Aragonés, Rius y Trino (no me lo puedo perder :) ), y claro está, la estupenda oportunidad de adquirir algunos buenos ejemplares para las bibliotecas personales a excelentes precios (espero).  Toda la semana que sigue, a partir del día de mañana podremos disfrutar de este espléndido evento.  Si estás en la ciudad, o vienes durante la siguiente semana por negocios / placer: aprovecha.

Más que nunca me da mucha alegría vivir en esta ciudad, que, como en pocas, se pueden disfrutar eventos de este calibre cultural de gran importancia internacional.

Quien tenga oídos para oír, que oiga.

Saludos!

Reunión de la Comunidad Guadalajara .NET en el ITESO y premier de La Liga Silverlight

 

El próximo día 4 de diciembre, de 3:00pm a 6:00pm tendremos una reunión en el ITESO por parte de la Comunidad Guadalajara .NET, en donde –como siempre- platicaremos diversos temas de suma importancia del mundo de la plataforma Microsoft.

Por mi parte estaré platicando acerca de Silverlight!… Así que para todos aquellos que estén interesados en asistir revisen la página de la comunidad en donde publicaremos más información al respecto y la agenda final en los próximos días.

Asimismo, dentro de la misma reunión tendremos la premier de La Liga Silverlight:  La primer comunidad MSDN de habla hispana acerca de Silverlight.  Si quieres conocer de qué se trata y/o cuál es el objetivo de este gremio !no faltes!, habrá una sesión de preguntas y respuestas y algunos regalillos sorpresas.  Ojo: no es una reunión de La Liga Silverlight, esa la tendremos próximamente! ;)

Así que no hay pretextos!  Nos vemos en el ITESO !!!

De traumas, estrés y otras incomodidades

No hay nada que me estrese más que mudarme, sin embargo, lo he hecho muchas veces.  No sé si sea el duendecillo de la costumbre a algún lugar, o el tener que bucear entre escombros de bobadas y recuerdos inútiles lo que me pone los nervios de punta.

No obstante, es y será siempre un buen momento para inventariar y re-considerar nuestros tesoros personales.  Yo por mi parte me considero un melómano-bibliófilo-cinéfilo, y por lo tanto –analizando bien este asunto- lo que más me incomoda y preocupa por encima de muchas otras cosas es que mis discos, libros y películas no les afecte el cambio de domicilio.  Creo que simplemente por estar guardando los cd’s en una caja atascada ya rompí como 5 cajas :(

También una de las cosas que es digna de mis más terribles fiacas es el re-acomodo de tooooodo y peor si no tendrás el lugar adecuado o de buen tamaño como lo tenías antes.

Y qué me dicen de los nuevos vecinos?  Si de por sí es complicada la convivencia con personas cercanas y queridas, aún más lo es el tratar con criaturas totalmente extrañas y ajenas.  Claro está, siempre existirá desde la típica señora con perfil de detective hasta las familias que viven en comuna dentro de la misma casa.

En fin, siempre son buenos los cambios.  Siempre es bueno sacudirse la mala energía que nos ahoga y detiene, ya que esto siempre nos llevará a nuevos buenos caminos.

Sino, a ver.. Cómo termina The Godfather Parte 1??? Claro! Con una mudanza.  La mudanza representa en la película el fin de una etapa en la vida de la familia Corleone para comenzar otra con nuevos bríos y oportunidades, sino, no hubiera hecho toda la fortuna e imperio Michael Corleone… o sí???  Por qué estoy escribiendo esto?

No lo sé.  Pero lo que sí sé es que todo cambio es bueno,… aunque el cambio de domicilio sea a solo 10 minutos :P ….  La mala vibra se queda y nosotros nos vamos.  Ah! y también se mudan conmigo “Family Guy meets the masked Chamulas”.

Salu2!

Nuevo dashboard de Xbox 360

Si tienes Xbox 360 y Xbox Live seguramente ya descargaste el nuevo dashboard de la consola, o como Microsoft lo promociona: “La experiencia Xbox 360”.

En lo personal me gustó muchísimo más que el dashboard tan horrendo poco amigable que teníamos antes, ah! y qué tal el cinemático de inicio??? WOW… un aplauso Microsoft!

<Pero>Ok, los Avatars a simple vista son una copia flagrante de los Mii’s de la consola Wii de Nintendo.  <Ok>Sin embargo hay diversas personalizaciones que puedes hacer como cambiarles sus ropitas y otras monadas</Ok></Pero>

En fin, en general una gran mejora al querido Xbox que sin lugar a dudas les quedó espectacular.

Por cierto, alguien ya jugó Rock Band 2 con la batería del Guitar Hero World Tour???  Alguien tiene algo bueno o malo qué decir al respecto?

Salu2!

Generación Grunge en su máxima expresión…

Solo si han vivido debajo de una piedra no sabrán que el Grunge fue un movimiento que transformó la música a como la conocemos actualmente.  Si fuiste adolecente en la década de los noventas (especialmente a principio de), sabrás perfectamente de lo que estoy hablando.  No niños/as no todo en la vida es U2, Rasmus o Amandititititita: NO.

Y bueno, como buen exponente de esa época y de la Generación X me gustaría mostrarles un pequeño tesoro para que se deleiten sus pupilas.  Considerados como Patrimonio Rockero de la Humanidad por la UNESCO, este par de drumsticks engalanarán una de las paredes de mi nuevo hogar:

Así es, un par de drumsticks autografiados por el mismísimo, incomparable, grandioso, poderoso y legendario Matt Cameron; especialmente para mí =D.  Que cóooomo los conseguí??? Eso es secreto de Estado.  Es como decirles cómo ganar la lotería, o decirles exactamente cuántos vuelos de Aeroméxico llegarán retardados hoy (sí, son más de 20 :) ),…. no no no.

Salu2! :)

Políticas en Workflow Foundation

Políticas en Workflow Foundation

Como ya hemos visto en capítulos anteriores, una regla es un conjunto de expresiones condicionales que nos permiten evaluar ciertos valores para determinar un resultado verdadero o falso. En este capítulo profundizaremos un poco más acerca de las reglas y su relación que guardan con los Conjuntos de Reglas o RuleSet, usado por la actividad Policy.

La actividad Policy y los Conjuntos de Reglas

La actividad llamada Policy nos permite en un flujo de trabajo evaluar un RuleSet, el cuál es una colección de reglas relacionadas o no entre sí.

El Conjunto de Reglas o RuleSet es una colección de reglas relacionadas o no entre sí. Nos referimos a que dos o más reglas están relacionadas entre sí cuando ellas leen o actualizan el mismo campo o propiedad de alguna clase.

Veamos ahora en la práctica cómo podemos utilizar esta actividad dentro de nuestros flujos de trabajo en Workflow Foundation.

Para comenzar, abramos Visual Studio .NET si es que no está actualmente abierto. Posteriormente crearemos un nuevo proyecto llamado PolicyWF de tipo Sequential Workflow Console Application tal y como lo muestra la siguiente figura:

Ya que deseamos mostrar la funcionalidad de la actividad Policy, junto con la evaluación de su RuleSet relacionado, necesitamos escribir un poco de funcionalidad para nuestro flujo de trabajo. Sin embargo, esta es una tarea muy sencilla: vamos a crear cuatro variables públicas de tipo int llamadas a, b, c y d. Estas variables (comúnmente denominados “campos”) le permitirán al RuleSet evaluar sus reglas y su posible re-evaluación. Muy bien, manos a la obra. Hagamos clic en el botón “View Code” de la ventana Solution Explorer de Visual Studio.NET para desplegar la vista de código de nuestro flujo de trabajo. Posteriormente escribamos el código para crear esas variables a nivel de clase:

Ahora, necesitamos asignarle un valor a cada variable para que las reglas en el RuleSet que vamos a crear lean esos valores. Esto lo podemos hacer inmediatamente después de la invocación al método InitializeComponent() en el constructor de la clase:

El siguiente paso es seleccionar la actividad Policy del Toolbox y arrastrarla al diseñador de Workflow Foundation. Cuando la actividad es colocada en el diseñador, automáticamente Visual Studio .NET le asigna un nombre el cual en nuestro caso eso policyActivity1. Asimismo esta actividad muestra un símbolo de admiración en color rojo, esto significa que la actividad aun no ha sido configurada (tal y como sucede al configurar una actividad de tipo IfElseActivity como vimos en los capítulos anteriores).

Como podemos apreciar en la ventana de propiedades, la actividad policyActivity1 tiene una propiedad llamada RuleSetReference, la cual indica el nombre del RuleSet que deseamos asociar a esa actividad. Ya que en este caso acabamos de crear un proyecto nuevo no tenemos un RuleSet definido. Esto lo podemos hacer en la caja de diálogo llamada “Select Rule Set”, la misma que es desplegada al hacer clic en el botón con tres puntos “…” en la propiedad RuleSetReference de policyActivity1 tal y como lo muestra la siguiente figura:

Esta caja de diálogo nos permite crear, modificar o eliminar los Conjuntos de Reglas que hayamos definido dentro de nuestro proyecto. Ya que no tenemos nada definido aún, es buena idea hacer clic en el botón “New…” para poder crear un nuevo RuleSet. Al hacer clic en este botón Visual Studio .NET despliega la caja de diálogo llamada “Rule Set Editor” la cual nos permite establecer las reglas que componen ese RuleSet, su configuración de encadenamiento o Chaining (el mismo que explicaremos más adelante), su prioridad, su comportamiento de re-evaluación, la expresión condicional, las acciones a ejecutar si esa expresión es verdadera (THEN) y las acciones a ejecutar si esa expresión resulta ser falsa (ELSE). Podemos apreciar esta caja de diálogo en la siguiente figura:

Es tiempo de crear la primera regla de nuestro RuleSet. Hagamos clic en el botón “Add Rule”. Al hacer clic en este botón, es creada una nueva regla con nombre predeterminado “Rule1”. A esta regla le asignaremos una prioridad con valor 100, dejaremos el resto de sus propiedades con el valor por defecto y la condición la expresaremos como “Si a es igual a 20…”, es decir:

Ahora bien, escribamos la expresión para cuando esa condición sea verdadera. Queremos que en el caso que a sea 20, entonces d sea 50: esto lo haremos en la caja de texto para THEN:

Hemos completado la primera regla de nuestro RuleSet. La regla completa la podemos ver en la siguiente figura:

La prioridad de las reglas permite al motor de reglas de Workflow Foundation determinar qué reglas se evalúan primero y cuáles después. En un RuleSet, las reglas serán ejecutadas en el orden del valor de prioridad que tengan asignadas, siendo la regla que tenga el valor más alto la que se evaluará primero y así consecutivamente.

Continuemos ahora agregando una segunda regla a nuestro RuleSet, haciendo clic en el botón “Add Rule” de la barra de botones para crear una regla llamada Rule2. La expresión condicional para esta regla será “Si b es igual a 1, a será 20 de lo contrario d será 90”, de ahí que la condición será:

El bloque THEN:

Y la expresión ELSE:

A esta regla le asignaremos la prioridad con un valor de 99. Agreguemos otra regla llamada Rule3 a nuestro RuleSet con prioridad 98 y con la expresión condicional: “Si d es 50 entonces c es 100 de lo contrario c es 60”. La siguiente figura muestra las reglas Rule2 y Rule3 terminadas:

Muy bien, es hora de poner en marcha nuestro RuleSet y comprobar su funcionamiento, para esto agregaremos una actividad de tipo Code después de la actividad policyActivity1 en nuestro diseñador. Le asignaremos como valor “DisplayResults” en la propiedad ExecuteCode en la ventana de propiedades de esta nueva actividad (codeActivity1). La siguiente figura muestra el diseñador de Workflow Foundation incluyendo esta nueva actividad:

Después de teclear <Enter> Visual Studio .NET nos mostrará el código fuente de nuestro flujo de trabajo y el cuerpo del método DisplayResults(). Completemos el código:

Este código mostrará en la consola el valor de cada una de los campos que creamos.

Ejecutemos el código y veamos el resultado:

¿Por qué los resultados son así? Es muy importante hacer un alto y hacer notar la Dependencia que tienen las reglas Rule1 y Rule2 y Rule 3 entre sí.

Podemos decir que, existe Dependencia entre reglas cuando una regla modifica un campo o propiedad que otra regla está leyendo como parte de su expresión condicional, tal y como sucede en Rule1 y Rule2 en donde Rule1 está evaluando el valor de a y asimismo Rule2 está modificando el valor de a.

Asimismo, Rule3 tiene dependencia tanto con Rule1 y Rule2:

Con Rule1 porque modifica el valor de d cuando su expresión condicional es verdadera (THEN) .

Con Rule2 porque esta modifica el valor de d cuando su expresión es falsa (ELSE).

En este caso específico, el motor de reglas de Workflow Foundation usa el concepto de encadenamiento de reglas o Chaining, para determinar si una regla se re-evalúa como resultado de la modificación de un campo o propiedad que otra regla haya modificado.

Chaining es el proceso en donde el motor de reglas de Workflow Foundation re-evalúa las reglas dependientes entre sí, encadenando efectivamente una con otra hasta que todas las reglas de un RuleSet son evaluadas. Hay tres tipos de Chaining: Implícito, Basado en Atributos y Explícito.

Tipos de Control de Chaining

A continuación se explican cada uno de los tipos de Chaining que el motor de reglas de Workflow Foundation implementa:

Implícito (default)

En este tipo de Chaining el motor de reglas de Workflow Foundation es el responsable de asegurarse que las reglas se evalúen y re-evalúen según sus dependencias entre sí. Este es el mecanismo de Chaining por defecto ya que es el más sencillo de usar para nosotros los desarrolladores ya que el motor de reglas se encarga de todo el proceso de encadenamiento.

Basado en Atributos

Este tipo de Chaining utiliza atributos especiales con los que podemos decorar nuestros métodos para determinar si un campo o propiedad será modificado después de ejecutar dicho método. Este mecanismo es usado para escenarios de Chaining más sofisticados y complejos. Los atributos usados en este tipo de Chaining son los siguientes:

  • RuleRead. Le indica al motor de reglas que un campo o propiedad está siendo leído.
  • RuleWrite. Le indica al motor de reglas que un campo o propiedad está siendo modificado.
  • RuleInvoke. Le indica al motor de reglas que el método especificado será invocado, el cuál muy probablemente esté a su vez decorado con ReadWrite. Este atributo es usado cuando un método ejecuta otro.

Explícito

Este tipo de Chaining hace uso de la cláusula Update, la cual le indica de inmediato al motor de reglas que un campo o propiedad ha sido modificado. Prácticamente este mismo comportamiento lo obtenemos con el Chaining implícito o por medio del atributo ReadWrite, sin embargo este mecanismo es necesario cuando estamos invocando un método o función que no hayamos escrito nosotros en nuestras reglas. Por ejemplo:

Ejemplo

Modifiquemos nuestro proyecto agregando un método llamado Modifica_A() que reciba como parámetro un entero. A este método lo decoraremos con el atributo RuleWrite(“a”) para indicar al motor de reglas que este método está actualizando el valor del campo a. El código es el siguiente:

Asimismo, modifiquemos la acción THEN de Rule2 para invocar el método Modifica_A() enviando como parámetro el valor 20 en vez de hacer la modificación directamente en el código de la acción:

El resultado será el mismo. Ahora quitemos el atributo [RuleWrite(“a”)] del método Modifica_A(). Ejecuta de nuevo el proyecto. ¿Qué sucede?

Tipos de Comportamiento de Chaining

Tenemos la posibilidad de modificar el comportamiento de Chaining para nuestro RuleSet, ya que existen tres tipos de comportamientos los cuales están listados en la siguiente tabla:

Tipo de Comportamiento

Descripción

Encadenamiento Completo (Full Chaining)

Este es el comportamiento por defecto

Solo Actualización Explícita (Explicit Update Only)

Como su nombre lo indica este comportamiento desactiva todos los atributos y el Chaining implícito y únicamente usará las cláusulas Update para llevar a cabo el proceso de Chaining.

Secuencial (Sequential)

Con este comportamiento, el motor de reglas evalúa las reglas una sola vez en el orden indicado por su prioridad.

Debemos tener especial cuidado al seleccionar tanto el tipo de control como el tipo de comportamiento de Chaining, ya que podríamos llegar a una situación de un bucle infinito en donde una Regla A modifique un valor que cause que otra Regla B se evalúe, y esta a su vez modifique un campo que Regla A utiliza.

Ejemplo de Comportamiento Secuencial

Modifiquemos el comportamiento del Chaining en nuestro RuleSet a Sequential. Esto lo podemos lograr en la caja de diálogo “Rule Set Editor” y seleccionando apropiadamente el valor de la lista desplegable. Hagamos clic en el botón OK y otra vez OK. Ejecutemos otra vez nuestro proyecto. El resultado ahora será:

Comportamiento de Re-evaluación

Existen dos tipos de comportamientos de re-evaluación para las reglas dentro de un RuleSet: Siempre (Always) o Never (Nunca).

Always es el comportamiento por defecto en donde la regla se re-evaluará tantas veces como sea necesario según la dependencia y el mecanismo de Chaining. Por el otro lado, Never como su nombre lo indica evaluará solo la primera vez la regla pero nunca se re-evaluará. Podemos hacer uso de este mecanismo para evitar bucles infinitos entre las reglas.

La cláusula Halt

Esta cláusula sirve para terminar la ejecución del RuleSet. La podemos equiparar a la función break dentro de un bucle for de Visual C# ya que nos sirve para regresar el control al código origen cuando cierto objetivo ha sido logrado dentro de nuestro RuleSet y ya no sea necesario ejecutar las demás reglas.

Resumen

En este capítulo profundizamos acerca de las reglas y vimos el uso de la actividad Policy. También se explicó el término RuleSet y vimos en la práctica cómo crean. Posteriormente hablamos del mecanismo de Chaining y sus diversos comportamientos y opciones incluídos en el motor de reglas de Workflow Foundation para resolver escenarios sencillos o más sofisticados en nuestras aplicaciones que necesiten usar este motor.

Este artículo fue creado para el curso Desarrollador .NET de la revista Users.  http://desarrollador.redusers.com/

Otro mapa de México en XAML

Siguiendo la iniciativa que mencioné hace algunos días, mi buen amigo y colega Martín Uresti me pasó otro mapa de la República Mexicano en XAML más detallado y preciso para usarlo en nuestras aplicaciones Silverlight / WPF.  Muchas gracias Martín por tu colaboración y por compartirnos este gran recurso que será sin duda alguna de mucha ayuda para más de una persona.

El mapa lo pueden descargar de La Liga Silverlight en su sección “Contenido” o haciendo clic directamente aquí.

Haz clic en la foto para verla más grande

Espero les sea de ayuda!

Mapa de México en XAML

Acabo de terminar la primer versión del mapa de mi querido país México en versión XAML (de hecho, creo que es el primer mapa de México con sus estados en XAML :) ) para todos aquellos desarrolladores y entusiastas de las tecnologías Silverlight o Windows Presentation Foundation –principalmente mexicanos- que deseen incorporarlo en sus soluciones.  Este mapa puede ser punto de inicio para nuevas y emocionantes interfaces de usuario para brindar a los usuarios de nuestras aplicaciones una mejor experiencia en su uso.  Incluso para aplicaciones didácticas novedosas que deseen mostrar información relacionada con cada estado de la República, o para aplicaciones que necesiten filtrar información para cada estado, etc.  (Atención INEGI) ;) .  Crearlo me llevó algunas horas de trabajo y el uso de diversas herramientas como Expression Design, Photoshop y Expression Blend.

El mapa incluye los 32 estados de la República Mexicana, cada uno implementado en un <Canvas> con el nombre de estado para poder identificarlos apropiadamente cuando deseemos programar algún tipo de comportamiento o funcionalidad en ellos.

Visual Studio .NET 2008 mostrando el mapa de México hecho XAML

Haz clic en la imagen para ver la versión completa

Asimismo, para aquellos desarrolladores que deseen tener un código de ejemplo de cómo podemos utilizar este mapa, aquí les dejo a continuación el código necesario para identificar por medio de un color diferente el estado que esté seleccionado (que esté obteniendo el foco por medio del cursor del mouse):

Y claro está, no olviden modificar la propiedad RootVisual de la aplicación para ejecutar correctamente Mexico.xaml:

El mapa de México en XAML lo pueden descargar aquí

Próximamente estaré escribiendo un artículo de cómo podemos hacer un control reutilizable para Silverlight utilizando este mapa de México hecho XAML.

Espero les sea de utilidad.

Salu2!

Presentando: La Liga Silverlight

Es para mí un verdadero honor y orgullo comunicarles de manera oficial el lanzamiento de La Liga Silverlight:  Un gremio de habla hispana para desarrolladores profesionales y entusiastas acerca de la tecnología Silverlight de Microsoft.  Esta comunidad es el resultado de una serie de ideas y sueños en donde la principal meta es el establecimiento de un gremio no necesariamente reducido a un espacio físico (como sucede con la mayoría de comunidades MSDN) en donde todas las personas interesadas y apasionadas con la tecnología puedan participar y aprender de los demás.  Estamos totalmente convencidos de que todos podemos aprender de todos y que las distancias geográficas deben desaparecer para poder llegar a todas aquellos lugares y rincones del planeta:  y qué mejor que hacerlo ahora que la tecnología nos lo permite de una manera barata y rápida.

La Liga Silverlight es una comunidad 90% virtual y 10% presencial enfocada a discutir, enseñar y aprender todo de Silverlight y sus tecnologías íntimamente ligadas como XAML, Expression Blend y WPF.  A continuación les presento el Manifiesto de La Liga Silverlight para que todos conozcan más acerca de este gremio:

Manifiesto

Somos un gremio auto-organizado y participativo de habla hispana enfocado a la tecnología Silverlight deMicrosoft (y tecnologías íntimamente relacionadas como XAML, ASP.NET, ADO.NET Data Services)

Creemos que la especialización y enfoque en las comunidades y sus contenidos es la única manera de aprender con más detalle cualquier tipo de tecnología

Nuestra comunidad es de origen mexicano, con miras a agrupar a cualquier persona que esté dispuesta a participar en nuestras iniciativas sin importar su nacionalidad o posición geográfica

Creemos que nuestro idioma y pasión por la tecnología son los comunes denominadores para alcanzar nuestros objetivos

Nuestras iniciativas y esfuerzos no tienen fines de lucro y por lo tanto no estamos atados, amarrados, vinculados u obligados con ningún tipo de empresa ni mexicana ni extranjera

La participación de todos sus integrantes es la única manera de producir contenido global y útil para todos

Si bien las reuniones presenciales son importantes, la disponibilidad del contenido y participación en línea son aún más importantes para poder llegar a todas aquellas personas que por su disposición geográfica les es imposible unirse a una reunión física

El tiempo de las personas es lo más valioso que hay, y por ello trataremos que todos nuestros esfuerzos sean para aprender más en menos tiempo, utilizando el tiempo de manera eficaz y eficientemente

Creemos en la privacidad de todos los integrantes y es por ello que toda información personal (como correos electrónicos o nombres) no será distribuida de ninguna manera a terceros con fines de lucro

-La Liga Silverlight

El día de hoy sin duda alguna es un gran día lleno de honor para todos los que conformamos La Liga Silverlight ya que estamos seguros que será un gremio de alta importancia para todos los desarrolladores de Silverlight de habla hispana, y además porque en ella se ve y verá reflejada nuestra pasión por la tecnología y por aprender más de todos y de todas.

Sean ustedes bienvenidos/as a La Liga Silverlight!

– Guadalajara, Jalisco, México, 20 de noviembre 2008

Vínculos y Direcciones

La Liga Silverlight

La Liga Silverlight – Manifiesto

La Liga Silverlight – Preguntas Frecuentemente Preguntadas (FAQ)

La Liga Silverlight – Blogs

La Liga Silverlight – Registro

Salu2!!!