[Windows Phone] Marketing in a Box. Promociona tus Apps!

Introducción

Cuando desarrollamos una Aplicación la mayor
parte del tiempo estimado a la misma se queda en el análisis y
desarrollo. Incluso tras publicarla damos por terminado nuestro trabajo
cuando realmente no ha hecho más que comenzar. En este momento debemos
realizar un conjunto importante de acciones entre las que podemos
destacar la promoción de la Aplicación:

  • Página web de la Aplicación.
  • Videos promocionales.
  • Utiilizar las redes sociales.
  • Envía tus Aplicaciones a webs donde puedan hacer reviews.
  • Facilitar a tus usuarios el contacto, que publiquen reviews de la Aplicación y por supuesto responder con actualizaciones.
  • Etc.

La
mayoría de puntos aunque lógicos no se suelen hacer, ¿porque?. En
muchas ocasiones es por un cómputo de circunstancias como la falta de
tiempo o de conocimientos por ejemplo como para realizar la edición de
un video profesional para promocionar la Aplicación.

¿Y si contásemos con una herramienta sencilla que nos facilitara el proceso?.

Marketing in a Box

Marketing
in a Box es una herramienta online gratuita que permite crear con suma
facilidad una web, un video promocional, página Facebook e incluso
banners.

La herramienta la podéis encontrar en la siguiente dirección:

http://developer.nokia.com/Distribute/Promoting_your_app/Home

NOTA: Se requiere estar registrado dentro del área de desarrolladores de Nokia.

Probamos la herramienta

Vamos
a analizar todas las posibilidades de la herramienta probándola
directamente. Tras hacer Login en el área de desarrolladores de Nokia
comenzamos a trabajar con la herramienta. Todo lo que necesitamos para
crear nuestro video promocional, página web, banners, etc. es tan solo
la URL de la Aplicación en la Store y completar un simple formulario.

Para
hacer pruebas tomaremos de base por ejemplo una de las Aplicaciones
imprescindibles de Nokia en la Store como es HERE Maps. La URL de la
Store española es:

http://www.windowsphone.com/es-es/store/app/here-maps/efa4b4a7-7499-46ce-aa95-3e4ab3b39313

Comenzamos.
Lo primero que debemos hacer es definir las bases de nuestro proyecto
de Marketing, nombre, URL de la Store,  que deseamos crear entre video
promocional, web, página Facebook y/o banners, que dispositivo
utilizaremos (podemos elegir entre un Nokia Lumia, 820, 900 o 920) y el
idioma a elegir entre los que se encuentra el español.

Tras comenzar rellenando la información básica de nuestra Aplicación
comenzaremos un simple asistente donde iremos configurando cada uno de
los elementos seleccionados (video, web, etc.).

En el primer paso del asistente la herramienta toma directamente la
categoría, icono e imágenes de la Aplicación listas para utilizar en la
creación de nuestro video, web, etc:

En el siguiente paso configuraremos el video promocional de nuestra
Aplicación. La herramienta ya ha tomado las imágenes de la Store y las
utilizará para el video permitiéndonos elegir entre una selección de
adjetivos o el tipo de música:

Siguiendo con el asistente el siguiente paso nos permite configurar la
página web y la página Facebook de la Aplicación. Podemos configurar el
contenido de hasta tres párrafos (máximo 900 carácteres por párrafo) y
los enlaces a redes sociales:

En el último paso del asistente podemos configurar los Banners
publicitarios de la Aplicación. Podemos elegir el teléfono a utilizar,
los textos, etc:

Llegado al final de asistente se generarán todos los recursos.

Podéis autopublicar el video en YouTube, ver una previsualización de
las páginas y descargar en formato zip tantos la página como los
banners.

NOTA: El video promocional tardará entre 20-30 minutos en generarse.

Fácil,
¿verdad?. Recordar que vuestro trabajo no finaliza con la publicación
de la Aplicación en la Store y además ya no tenéis excusas para llegar
un poco más alla!

Más información

Material y resumen del evento Windows Phone Week Spain

Introducción

El pasado 5 de Octubre tuvo lugar el Windows Phone Week en España. El Windows Phone Week es evento mundial donde cada MVP de la plataforma organizaba un evento de
un día entero de duración en la primera semana de Octubre con el
objetivo de dar a conocer la plataforma desde un punto de vista técnico.

En España, mi compañero Josué Yeray (MVP de Windows Phone) se lanza con la organización del evento, apoyándose en Rafa Serna Alejandro Campos, Roberto Luis Bisbe y un servidor. ¿Queréis saber que dio de si el evento?

El Evento

El evento tenía una agenda repleta de charlas y el
comienzo del evento estaba previsto pronto, a las 9:00h de la mañana de
un sábado. Realmente impresionante la afluencia de personas que se
acercaron al evento, la sala de Madrid On Rails estaba practicamente al
completo durante gran parte del evento:

Sala llena!
Sala llena!

Al
comienzo retamos a los asistentes a venir disfrazados, el mejor disfraz
se llevaría un fantástico Nokia Lumia 820 con base de carga
inhalámbrico. Esperábamos arrancar con mucha diversión con esta
simpática propuesta teniendo que elegir al ganador, aunque finalmente lo
tuvimos realmente fácil, ¿que porque?

Angry Birds
Angry Birds

Este “valiente” fue el único asistente que llego disfrazado asi que la elección fue sencilla. Enhorabuena!.

Entrando
ya en materia, Josué Yeray dio comienzo al evento con una introducción
donde se presentaban a los ponentes, se recordaba la agenda,se recordaba
que contaríamos con un catering, etc:

Introducción al evento
Introducción al evento

La agenda era la siguiente:

  • 9:00 Keynote
  • 9:10 Desarrollando con MVVM
  • 10:20 Rendimiento en aplicaciones
  • 11:30 Desde Windows Phone 7 a Windows Phone 8
  • 12:40 Descubriendo Windows Phone App Studio
  • 14:40 Azure mobile services, desde las trincheras
  • 15:50 Efectos alucinantes con NOKIA IMAGING SDK
  • 17:00 NFC a tope!
  • 18:10 Distribución empresarial en Windows Phone
  • 19:20 Mejora tu App y sácale partido
  • 20:30 Clausura

La
primera sesión fue un cúmulo de buenas prácticas realizada por Josué
Yeray introduciendo el patrón MVVM, analizando las partes que lo
componen y los beneficios:

MVVM!
MVVM!

Tras
esta primera charla (y los correspondientes 10 minutos de descanso
entre ellas), llegó Alejandro Campos para hablar sobre rendimiento. Se
abordaron buenas prácticas, muchos consejos y se vieron algunas
herramientas que pueden detectar ese cuello de botella en consumo que
puede tener nuestra Aplicación.

La tercera charla vino por parte
de Roberto Luis Bisbé y trataba de como migrar aplicaciones Windows
Phone 7 a Windows Phone 8. Se abordaron problemas como los cambios de
memoria, de resolución, que ocurre con XNA entre otros puntos
interesantes:

De WP7 a WP8!
De WP7 a WP8!

A
continuación, era el turno de la última charla antes del parón para
comer, donde me tocaba en esta ocasión a mi hablar sobre Windows Phone
App Studio, la nueva herramienta de Microsoft para crear Aplicaciones
Windows Phone 8. Sin embargo, el proyector requería una conexión VGA que
mi portátil no tenía, asi que mientras entraba en modo pánico interior y
se buscaba una solución, decidimos dar paso a la siguiente charla, una
temáticamente sumamente interesante como es Azure Mobile Services de la
mano de Rafael Serna:

Azure Mobile Services
Azure Mobile Services

Tras
la charla tuvimos una hora para reponer fuerzas gracias a un estupendo
catering gracias a Microsoft. Tiempo fantástico para resolver dudas,
escuchar ideas, desvirtualizar a gente. Sin duda, a nivel personal, si
el evento ya era una gozada en si, poder desvirtualizar a personas a las
que sigues y con las que te has intercambiando ideas, tutoriales y
demás información es un verdadero placer:

Merecido descanso
Merecido descanso

Tras
reponer fuerzas, continuo Rafa hablando de… Azure Mobile Services.
¿No se había hablado ya?. Si, si, pero la charla anterior gusto tanto,
que entre los ponentes y los asistentes decidimos suprimir la charla de
NFC para tener ración doble de Azure Mobile Services.

Tras Rafa,
me toco a mi hablar de Windows Phone App Studio. Para quienes tengan
curiosidad por saber como solventamos el problema de conexiones y el
portátil, la solución fue usar el portátil de Josué para conectar al
proyector accediendo por escritorio remoto al mio. A pesar de lo que
podáis pensar, dio resultado. En la charla de Windows Phone App Studio,
introducimos la herramienta, creamos una Aplicación sobre el evento,
descargamos el código fuente y lo analizamos para finalmente acabar
extendiendolo un poco:

Windows Phone App Studio
Windows Phone App Studio

Quedaban
tres charlas aun y los ponentes nos preguntabamos si era excesivo
continuar (vistas algunas caras de cansancio) o si debíamos acortar un
poco el evento. Dimos la elección a los asistentes, si querían dejarlo
ya, continuar hasta el final (había “valientes” que si) o acortar las
sesiones. Finalmente, decidieron ver todo lo que quedaba pero acortando
las sesiones y suprimiendo los 10 minutos de descanso.

Tras la
desición, regreso Josué Yeray a escena para hablar de Nokia Imagin SDK
dejando claro el mundo de posibilidades, opciones y filtros que
aportaban el SDK de Nokia.

Tras Josué, me toco a mi de nuevo esta
vez hablando de la distribución empresarial. Vimos como adquirir un
certificado Symantec para realizar la distribución, como crear el AET,
como firmar Apps y finalmente vimos como crear un Company Hub
permitiendo realizar una gestión adecuada de Aplicaciones, descubrir
nuevas, ver las instaladas, poder instalar, etc.

Cerrando el
evento, teníamos una gran charla de Alejandro Campos donde se exponían
una enorme cantidad de consejos para lograr destacar la Aplicación
creada sobre las demas:

Buenos consejos
Buenos consejos

Terminadas las charlas técnicas faltaba algo, algo importante, que era… ah, si, regalos!

Aquí,
Rafa rescató una genial idea, el preguntón. Basicamente, entre todos
habíamos preparado un concurso de preguntas relacionadas con todo lo
visto en las sucesivas charlas. Los asistentes se pondrían de pie y ante
cada pregunta podrían elegir entre dos opciones representadas por tener
las manos alzadas o tras la espalda. Aquellos que iban fallando
preguntas, se iban retirando. Suena divertido, ¿verdad?. Lo fue. Aunque
debo decir que estamos todos enormemente contentos con el público
asistente, estuvieron todas las sesiones muy atentos. Costo muchísimo
quedarnos con los finalistas.

El listado de regalos fue:

Tras la entrega de regalos llegamos al final de evento, casi 12 horas de Windows Phone,
fantástico!. Las sensaciones no pueden ser más positivas, se abordaron
multitud de temas que el público supo apreciar con suma atención. Solo puedo terminar agradeciendo de entrada a Matteo, Joost y Rodolpho por comenzar la movida, por supuesto a Josué Yeray por gestionar el evento en España, a los chicos de Madrid On Rails por la sala, a todos mis compañeros por sus ponencias y
labores de gestión y por supuesto a todos los asistentes ya que sin
ellos no hubiese sido posible. No se vosotros, pero yo lanzo la piedra, ¿repetimos el año que viene?

Gracias a todos!
Gracias a todos!

Extra

Ya
hemos repasado que dio de si el evento, pero como todo evento, aparte
de las charlas, los regalos y demás, siempre hay un “algo” extra. Y la
verdad es que en esta ocasión hubo muchos extras!

  • Cuento con un gran nuevo compañero de trabajo:
Icinetizado
Icinetizado
  • Contamos
    con una gran visita sorpresa al evento, Desiree Lockwood, Senior
    product marketing manager de Windows Phone que vino desde USA para
    asistir al evento:
Desiree
Desiree
  • Alejandro
    Campos entre otros llevaba una amplia colección de la familia Lumia, y
    muchos asistentes pudieron probar de primera mano algunos de los últimos
    modelos de la gama:
Probando teléfonos
Probando teléfonos
  • Además,
    había personas que buscaban desarrollador Windows phone y lo
    encontraron; muchas personas que vinieron de lejos para llegar al
    evento, Jerez, Bilbao o Sevilla por ejemplo; algunos encontraron
    solución a un problema en su Aplicación, muchos (entre los que me
    incluyo) logramos desvirtualizar a mucha gente que siempre es una
    sensación fantástica y mucho más.

Material

El evento
comenzó con una pequeña keynote de introducción donde se repasó la
agenda, se presentaron ponentes, se anunciaron los regalos, etc. La
tenéis disponible a continuación:

Por otro lado, tube el placer de participar en el evento con dos charlas:

1º Descubriendo Windows Phone App Studio

¿Conocéis Windows Phone App Studio?,
¿aún no? En esta sesión vimos todas las posibilidades de esta nueva
herramienta destinada a la creación de Aplicaciones para Windows Phone
8:

Realizamos
en directo la Aplicación del evento con la agenda,el listado de
ponentes, listado de sponsors, sección de contacto y más. Podéis
descargar la misma a continuación:


2º Distribución empresarial en Windows Phone

En
esta sesión aprendimos todo lo necesario para distribuir Aplicaciones
Windows Phone en la empresa sin necesidad de pasar por la Store:

En
esta charla aprendimos como generar el archivo AET (Application
Enrollment Token), como firmar Aplicaciones y como crear un Company Hub.
A continuación, podéis descargar el Company Hub de ejemplo realizado:


Más información

Página web del evento

[Windows Phone] Crear un Company Hub (1/2)

Introducción

Antes de la llegada de Windows Phone 8, con
Windows Phone 7 en el mercado, como desarrolladores teníamos solo dos
opciones para distribuir aplicaciones empresariales destinadas para los
dispositivos de empleados:

  • Publicar la Aplicación en la Store
    protegiendo el acceso con usuario y contraseña. La Aplicación queda
    expuesta a ser descargada por cualquier usuario de la tienda aunque
    finalmente no accedan a su funcionalidad.
  • Usar un software de
    gestión de dispositivos (MDM) para la gstión y distribución de las
    Aplicaciones. Microsoft ofrece dos MDMs, Windows Intune y System Server
    2012. Sistema que encaja en muchas empresas aunque quizás el esfuerzo en
    coste y gestión no llega a permitir esta posibilidad para otras.

Windows Phone 8 incluye muchas novedades pensadas directamente para el sector empresarial.

Novedades de Windows Phone 8 para el sector empresarial

Con
Windows Phone 8, Microsoft ha realizado un esfuerzo para convencer a
las empresas de utilizar la plataforma en sus soluciones empresariales.

  • Seguridad.
    La seguridad es un punto vital sumamente importante a la hora de
    realizar aplicaciones empresariales para dispositivos móviles. En las
    aplicaciones de escritorio se suele tener el escudo de un entorno muy
    controlado como es el dominio. Para satisfacer las necesidades de
    seguridad requeridas a nivel empresarial:

    • BitLocker. Cifrado del almacenamiento.
    • Arranque
      seguro. Si algun virus o malware intenta modificar el núcleo del
      sistema, modificando la firma del mismo provocará que al ser detectado
      se detenga el arranque del mismo (UEFI Secure Boot).
    • Sandbox.
      Las aplicaciones se ejecutan todas en un entorno cerrado y controlado
      que evita que desde una aplicación no se pueda acceder al área de
      memoria asignada a otra.
  • Lync. Con la integración de Lync en Windows Phone se permite a los empleados entrar en conversaciones desde el teléfono.
  • VoIP.
    Windows Phone 8 permite a los desarrolladores crear aplicaciones que
    utilicen la conexión de datos para realizar llamadas por VoIP.
  • Office. Desde el comienzo del sistema Windows Phone puede contar la integración de Office en el sistema.
  • Portable Class Library.
    En Windows Phone 8 el núcleo ha sido actualizado. En lugar de utilizar
    Windows CE se utiliza Windows NT, es decir, el mismo núcleo que utiliza
    Windows 8. Esto supone una ventaja a la hora de promover el port de
    aplicaciones Windows 8 a Windows Phone con facilidad:

    • Portable Class Libraries
    • Windows Runtime API
    • Condiciones de compilación
    • Enlazado de ficheros, etc.
  • Distribución. Podemos realizar una distribución no administrada simplificando sumamente el proceso.

Distribución empresarial

Entre
las novedades pensadas para el sector empresarial debemos destacar las
novedades en la distribución. Podemos realizar una distribución no
administrada que permite distribuir aplicaciones de manera muy simple
mediante un simple enlace o con un archivo adjunto en un correo
electrónico.

Sin duda, esta nueva forma de distribución es
fantástica y abre muchas posibilidades aunque puede llegar a ser confusa
para el usuario. El usuario esta habituado a instalar y gestionar
aplicaciones desde la Store, no gestionando ficheros que recibe por
correo.

¿Y si pudiésemos crear nuestra propia “Store”?

Podemos!. Es un nuevo concepto disponible con Windows Phone 8 llamada Company Hub. Permite crear un Hub personalizado don mostrar y permitir instalar las aplicaciones disponibles de la empresa.

Manos a la obra…

Vamos a crear un Company Hub!. Pero… esperad!, hay una serie de requisitos que debemos tener antes de lanzarnos manos a la obra.

  • Debemos tener una cuenta de desarrollo de empresa en el Windows Phone Dev Center.
  • Debemos obtener un certificado de distribución empresarial.

https://products.websecurity.symantec.com/orders/enrollment/microsoftCert.do

  • Una vez comprado el certificado e instalado en la máquina necesitamos
    exportarlo en formato PFX (incluye la clave privada). Este certificado
    lo utilizaremos para generar la inscripción de aplicación (AET) y para
    firmar las aplicaciones. El archivo AET se debe instalar en el teléfono
    antes de que se pueda instalar una aplicación empresarial. Con la
    instalación del AET, el teléfono se incribe automáticamente en la cuenta
    de la empresa previamente establecida.

  • Generamos el archivo AET. Abrimos la Línea de Comandos de Visual Studio 2012. Utilizaremos la herramienta AetGenerator para crear el AET:

    "C:Program Files (x86)Microsoft SDKsWindows Phonev8.0ToolsAETGeneratorAetGenerator.exe" certificado contraseña
    • Certificado: Obligatorio. Archivo PFX.
    • Contraseña: Obligatoria. Debe ser la clave utilizada para leer el archivo PFX.

NOTA: El generador crea tres versiones diferentes
del AET, una versión cruda que contiene la AET en formato XML (.xml),
una versión codificada en Base64 pensada para ser utilizada conun MDM
como Windows Intune o System Center 2012  y por último, un archivo en
formato XML que puede ser instalado directamente en el teléfono a través
de un archivo adjunto del correo electrónico o mediante Internet
Explorer (.aetx). Puedes obtener más información al respecto desde el
siguiente enlace.

NOTA:
Es importante tener en cuenta el periodo de validez del archivo AET. En
efecto, como os podéis imaginar el archivo AET tiene fecha de
caducidad, que por defecto es un año. Una vez superado el periodo, las
aplicaciones o el company hub que utiliza el AET no podrán ejecutarse.
Por lo tanto, se debe llevar una gestión del archivo, renovando el mismo
antes de la fecha de expiración.

Tras completar todos los
requisitos necesarios (cuenta de desarrollador, obtener el certificado
empresarial y generar el archivo de inscripción, AET) estamos listos!

El
objetivo del Company Hub no es otro que facilitar a los empleados el
descubrir e instalar aplicaciones por lo que como requisito para
desarrollar el Company Hub necesitamos… aplicaciones!

Para
nuestro Company Hub de pruebas podríamos utilizar algunos de los
ejemplos de este mismo blog aunque por facilitar las cosas crearemos
varias aplicaciones en blanco creadas desde una plantilla Visual Studio,
todas con el mismo ID de editor, las requerimos en nuestro Company Hub
pero no necesitamos que cumplan ninguna funcionalidad especial en
nuestro caso asi que con cambiar el título cumple. En nuestro Company
Hub necesitaremos el ID de editor de las aplicaciones.
En toda Aplicación Windows Phone tenemos el archivo de manifiesto
WMAppManifest.xml ubicado en la carpeta Propiedades de la solución. Al
abrir el archivo desde Visual Studio vemos un editor visual con cuatro
pestañas, una de las cuales es la pestaña de empaquetado (Packaging).

La
pestaña de empaquetado facilita información sobre el autor, la gestión
de versiones y los idiomas soportados. Para nuestros intereses nos
interesan tres datos fundamentales:

  • El ID de editor
  • El GUID para identificar la Aplicación
  • La versión

El
GUID de la Aplicación se utiliza en el Company Hub para identificar
cada Aplicación, la versión se utiliza para determinar cuando hay
actualizaciones de la Aplicación y por último, y lo más importante, el
ID de editor debe coincidir con el ID de editor utilizado en el Company
Hub.

El SDK y el Company Hub

El SDK de Windows Phone 8
contiene un conjunto de APIs destinados a gestionar el conjunto de
aplicaciones de un Company Hub. Concretamente:

  • La clase Package.
    La tenemos disponible dentro del namespace Windows.ApplicationModel.
    Esta clase nos permite acceder a la información del archivo de
    manifiesto de un paquete como la versión o su identificador.
  • La clase IntallationManager.
    La tenemos disponible dentro del namespace
    Windows.Phone.Management.Deployment. Nos permite instalar aplicaciones,
    obtener el listado de aplicaciones instaladas, obtener el progreso de un
    proceso de instalación, etc.

Usaremos en nuestro Company Hub los siguientes métodos agrupados en las clases anteriores:

Creando un Company Hub

Todos
los requisitos preparados. Comenzamos a crear nuestro Company Hub. Como
siempre, crearemos un ejemplo práctico paso a paso. Nuestro Company Hub
constara de dos partes:

  • Servidor. Nuestro
    objetivo es un servidor que devuelve la meta información de las
    aplicaciones junto a los Xaps de las mismas a la Aplicación Windows
    Phone. Las posibilidades son múltiples, podemos utilizar blobs de Azure
    para gestionar la meta información, servicio WCF, etc. En nuestro
    ejemplo crearemos una aplicación WCF muy sencilla.
  • Cliente.
    Aplicación Windows Phone 8 que se nutre de la información del servidor
    además de apoyarse en las APIs previamente mencionadas para permitir
    gestionar las Aplicaciones (instalar, lanzar, etc.).

Manos a
la obra!. Ya tenemos todos los requisitos necesarios y podemos comenzar con el Company Hub en si aunque me temo que eso será en la segunda parte del artículo
que tendréis disponible en breve, no os lo perdáis!

Más información

[EVENTO] Windows Phone Week Spain

Introducción

Recientemente se reunieron el conjunto de MVPs
de Windows Phone a charlar sobre ciertos temas y claro… no puedes
reunir un grupo asi sin que la “lien parda”. De esta reunión sale nada
más y nada menos que…  un evento mundial sobre Windows Phone!

En España, nuestro compañero Josué Yeray (MVP de Windows Phone) se lanza de lleno a la piscina para organizar el evento, cuenta el asunto a Rafa Serna Alejandro Campos y un servidor, y surge lo siguiente…

El evento

Windows Phone Week es un evento mundial donde cada MVP de la plataforma organiza un evento de un día entero de duración en la primera semana de Octubre, en España será el próximo 5 de Octubre (sábado para que podáis asistir sin problemas), con el objetivo de dar a conocer la plataforma desde un punto de vista técnico.

Además, por si aun no hemos logrado captar tu atención, tendremos regalos
como un teléfono, licencias de desarrollador y muchas otras sorpresas
que tenemos preparadas, ¿vas a dejar escapar esta oportunidad?

Regístrate!

La agenda

El evento durará todo el día contando con un total de 8 charlas técnicas
relacionadas con la plataforma. Hablaremos de Windows Phone 8, de
Windows Phone App Studio, de NFC,  rendimiento, de Nokia Imaging SDK, de
buenas prácticas, mobile services, distribución empresarial… todo ello
con pausas entre charlas de hasta 10 minutos para poder un poco de
networking, desvirtualizar gente, conocer gente nueva y sin duda pasar
un día agradable.

La agenda es la siguiente:

  • 9:00 AM   Keynote. Introducción al evento y registro.
  • 9:10 AM   Desarrollo con MVVM  con Yeray Julián Ferreiro
  • 10:20 AM Rendimiento en aplicaciones Windows Phone  con Alejandro Campos Magencio
  • 11:30 AM Descubriendo Windows Phone App Studio  con Javier Suarez Ruiz
  • 12:40 PM Azure Mobile Services, desde las trincheras con Rafael Serna Medina
  • 14:40 PM   Efectos alucinantes con Nokia Imaging SDK  con Yeray Julián Ferreiro
  • 15:50 PM   NFC a tope!!! con Rafael Serna Medina
  • 17:00 PM   Distribución empresarial en Windows Phone con Javier Suarez Ruiz
  • 18:10 PM   Mejora tu app y sacale partido con Alejandro Campos Magencio
  • 19:20 PM Clausura y entrega de regalos.

Al medio día os invitaremos a comer, con catering gracias a Microsoft Ibérica asi que nos preocupéis por nada, solo necesitamos vuestra presencia y vuestra ilusión.

Lugar

El evento tendrá lugar en Madrid.
Aun no podemos confirmar el lugar exacto ya que seguimos esforzándonos
para determinar un lugar que permita el aforo necesario junto a los
accesos y requisitos deseados.

Más información

[Evento CartujaDotNet] De Windows Phone App Studio a la Store!

El evento

¿Conoces Windows Phone App Studio?,
¿aún no? En esta sesión conoceremos todas las posibilidades de esta
nueva herramienta destinada a la creación de Aplicaciones para Windows
Phone 8. Partiremos de una Aplicación generada desde la herramienta,
descargaremos el código para analizarlo. Una vez analizado lo
extenderemos con nueva funcionalidad, prepararemos la Aplicación para
multiples idiomas y añadiremos publicidad para terminar dejandolo todo
listo para publicar en la Store.

¿Te apuntas?

Fecha

El evento tendrá lugar el próximo Jueves, 12 de Septiembre de 19:30h a 21:30h (2 horas de duración).

Lugar

Tendrá lugar en el Cloud Pointing de Sevilla situado en el Parque Empresarial Nuevo Torneo. Tenéis la información exacta del lugar a continuación:

c Biología, 12, Edificio Vilamar 2, 3ª Planta
Parque Empresarial Nuevo Torneo
41015 Sevilla

Ponente

Javier Suárez, entusiasta de la tecnología con años de experiencia en aplicaciones de escritorio y móviles. Arquitecto de Software en Icinetic (@jsuarezruiz).

Regalos

Manteniendo la tradición comenzada ya con eventos anteriores tendremos regalos entre los asistentes:

  • Todos los asistentes tendrán un código de invitación para poder acceder a Windows Phone App Studio.

Más información

[Windows Phone] Prueba en tu teléfono sin necesidad de cuenta de desarrollador

Introducción

Desde el lanzamiento de Windows Phone 7, para
poder probar las Aplicaciones en un dispositivo físico antes de enviar a
la tienda se ha requerido contar con una licencia de desarrollador
activa. Un desarrollador con una cuenta activa puede desbloquear hasta 3
dispositivos y cargar hasta 10 Aplicaciones. La cuenta de desarrollador
tiene un coste anual de 99$.

Hace un par de semanas, el equipo de
Windows Phone ha anunciado algunos cambios sumamente interesantes.
Ahora cualquier persona interesada en el desarrollo para Windows Phone
podrá desplegar su Aplicación en su teléfono Windows Phone sin necesidad
de una licencia de desarrollador.

¿Qué ha cambiado exactamente?

A
partir de este mes cualquier persona interesada en el desarrollo de
Windows Phone podrá ejecutar su Aplicación en un teléfono sin necesidad
de cuenta de desarrollador. Las posibilidades son:

  • Desbloqueo de un único teléfono.
  • Se pueden lanzar en el teléfono hasta dos Aplicaciones.

Sin duda una noticia fantástica que incentiva el desarrollo en Windows Phone.

Por
un lado facilita a los nuevos desarrolladores a adentrarse en la
plataforma pudiendo probar sus Aplicaciones en un dispositivo físico
hasta tenerlas listas para publicar.

Por otro lado porporciona una
solución a un inconveniente que se pueden llegar a encontrar
desarrolladores comenzando con la plataforma. Hasta ahora cualquier
desarrollador sin necesidad de cuenta de desarrollador activa ya podía
utilizar el emulador de Windows Phone para probar sus aplicaciones. El
emulador es una herramienta fantástica que nos permite probar una gran
cantidad de la funcionalidad de la Aplicación. Sin embargo, recordamos
que dado que el emulador e Windows Phone 8 es una máquina virtual
completa en Hyper-V necesitamos una requisitos mínimos de hardware para
poder utilizarlo (n procesador que cuente con SLAT). Esto puede llegar a
ser un problema ya que no todos los desarrolladores cuentan con equipos
que cumplan todos los requisitos. Ahora gracias a esta opción son
realizar ningun esfuerzo económico tienen otra opción más.

Lo probamos!

De entrada se requiere el SDK de Windows Phone 8. Podéis descargarlo gratuitamente desde el siguiente enlace.
Una vez instalado el SDK tendremos instaladas el conjunto de
herramientas necesarias para desarrollar en Windows Phone 8. Entre las
herramientas disponibles tendremos una llamada Windows Phone Developer Registration tool. Esta herramienta nos permite desbloquear el teléfono para poder instalar Aplicaciones en desarrollo.

Conectamos
vía USB el teléfono donde queremos desplegar las Aplicaciones y
desploqueamos la pantalla. A continuación, abrimos la herramienta.
Veremos una ventana como la siguiente:

La herramienta debe identificar el dispositivo conectado y bastará
con pulsar el botón Register para para desbloquear el teléfono. Se nos
abrirá una ventana que nos pedirá autenticación con una cuenta Microsoft
(Windows Live ID).

Una vez realizada la autenticación la herramienta desploqueará el teléfono notificándolo con un mensaje.

Enhorabuena!. Ya podéis utilizar el teléfono para desarrollar pudiendo desplegar un máximo de dos Aplicaciones.

NOTA: Recordar que si os registráis como desarrolladores podéis desploquear hasta 3 teléfonos y desplegar hasta 10 Aplicaciones.

FAQ

  • ¿Que ocurre si intento registrar un segundo teléfono?

La
herramienta Windows Phone Developer Registration Tool notificaba al
desarrollador con suscripción anual una vez llegado al límite de
teléfonos desbloqueados. (tres dispositivos). Sin embargo, desploquear
un segundo teléfono para un usuario sin suscripción es totalmente
transparente. Es decir, no se notifica de haber llegado al límite,
sencillamente se bloquea automáticamente el primer teléfono desbloqueado
y se desbloquea el nuevo. De esta forma se simplifica el proceso de
bloqueo y desbloqueo.

  • ¿Puedo instalar más de dos Aplicaciones en el teléfono?

No,
no puedes instalar más de dos Aplicaciones en el teléfono. Si quieres
instalar otra Aplicación tienes dos alternativas. Por un lado puedes
desinstalar una de las Aplicaciones instaladas para instalar otra. De
esta forma, mantienes el límite de dos Aplicaciones simultáneas. O bien,
podéis adquirir una cuenta de desarrollador y llegar a desplegar hasta
10.

  • ¿Hay límite de instalaciones y desinstalaciones de Aplicaciones en un teléfono?

No. Podéis instalar y desinstalar tantas veces como os sea necesario para progresar en vuestros desarrollos.

Más información

[Tips and Tricks] Windows Phone. ¿Dónde consigo iconos para mi App?

Introducción

Cuando desarrollamos nuestra Aplicación probablemente llegará un momento en el que necesitamos iconos.
Un buen punto de partida es el propio SDK, si el SDK de Windows Phone.
Al instalar el SDK de Windows Phone se nos añade un pequeño paquete de
iconos. Puedes encontrar el paquete de iconos en la siguiente ruta:

C:Program Files (x86)Microsoft SDKsWindows Phonev8.0Icons

Iconos SDK

Contamos con tres versiones diferentes:

  • Light. Para el tema claro contamos con iconos oscuros.
  • Dark. Para el tema oscuro contamos con iconos claros.
  • Vector. Iconos vectoriales.

Si el paquete instalado por el SDK se nos queda corto, ¿que hacemos?.
Por suerte contamos con herramientas y otros paquetes gratuitos de
iconos a nuestra disposición.

Metro Studio

Metro Studio es una herramienta  gratuita creada por SyncFusion que nos porporciona hasta 2500 iconos adaptados al estilo Metro Modern UI (perfectos para Aplicaciones Windows Phone y Windows 8).

Podemos obtener la herramienta desde el siguiente enlace.

Descargar Metro Studio

Una vez rellenado el formulario recibirás un correo electrónico con
el enlace de descarga y la clave para desbloquear la instalación del
mismo.

La herramienta:

  • Organiza los iconos por categorías.
  • Permite realizar búsquedas.
  • Permite editar los iconos (color de fondo, color del icono, forma dle fondo, etc.).
  • Gestión del tamaño, padding, márgenes, etc.
  • Rotaciones y otras transformaciones sobre el icono.
  • Permite exportar el icono a formato imagen, obtener un Path en XAML, etc.
  • Permite crear iconos nuevos personalizados según un texto y fuente seleccionada.

Usando Metro Studio

Otras fuentes

Si aun no encuentras aquel icono perfecto para tu Aplicación que andas buscando, tranquilo, hay más opciones:

  • The Noun Project:
    Es una plataforma colaborativa y comunitaria donde se crea una
    biblioteca de iconos que va creciendo día a día gracias a la ayuda de
    diseñadores de todo el mundo. La mayoría de iconos son con licencia
    Creative Commons y aquellos de pago tienen un precio muy competitivo.

  • Modern UI Icons: En este momento, paquete con 1137 iconos con estilo Modern UI:

El paquete incluye los iconos en:

  • Estilo claro.
  • Estilo oscuro.
  • Distintos formatos, PNG, Path XAML, SVG e incluso los archivos design pensados para Expression Blend!

Podéis leer el gran tutorial de uso de los iconos con Expressión Blend disponible en el siguiente enlace.

Para quien siga sin encontrar aquel icono perfecto que encaja en su
Aplicación tenéis a continuación más packs de iconos disponibles:

Más información

[Tips and Tricks] Windows Phone. Detectar si la App se ejecuta en el Emulador

Problema

El emulador de Windows Phone es una
herramienta fantástica que nos permitirá probar de manera rápida y
efectiva la aplicación que está en desarrollo sin la necesidad del
dispositivo físico pero es importante recordar, el emulador NO equivale a
un dispositivo. Hay ciertas partes de la API que no funcionan en el
emulador como algunos lanzadores u otras partes que por requisitos de
hardware tampoco lo haran como por ejemplo el uso del Bluetooth.

Podemos
gestionar estos casos en nuestros desarrollos con técnicas como las
directivas de compilación aunque poder determinar con facilidad si
estamos en el emulador o no puede ayudar en el desarrollo.

Veamos como sería…

NOTA: Podéis encontrar un listado de opciones que no se pueden realizar en el emulador en el siguiente enlace.

Solución

Dentro del namespace Microsoft.Devices tenemos la clase estática Environment.
La clase Environment proporciona información relacionada del entorno
donde se ejecuta la Aplicación. Actualmente la única propiedad con la
que cuenta es DeviceType que indica si la Aplicación se esta ejecutando en el emulador o en un dispositivo fisico:

if (Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Emulator)
//Emulador
else
//Dispositivo

Podéis descargar y probar un simple ejemplo que verifica si la Aplicación se ejecuta o no en el emulador:


Recordar que cualquier tipo de duda o sugerencia la podéis dejar en los comentarios.

Keep Pushing!

Más información

[Windows Phone] Creando juegos con WaveEngine. 2º Parte.

Introducción

En el artículo anterior realizamos una introducción a WaveEngine con
el objetivo de analizar el arranque y la funcionalidad básica del
engine. Para ello, nos basamos en un clásico como “Super Mario Bross”.

NOTA: “Super Mario Bross” es una marca registrada por Nintendo. Este artículo es un simple homenaje a la saga.

Tras conocer el engine, la gestion de recursos y lograr plasmar el
fondo, suelo y al personaje principal, el objetivo de esta entrada es
continuar desde el punto anterior y evolucionar el ejemplo hasta
conseguir poder mover al personaje (mediante un gamepad táctil) junto al
sistema de animaciones.

¿Te apuntas?

 

Añadiendo comportamientos

El aspecto de nuestro videojuego hasta ahora es el siguiente:

Interesante pero… ¿Mario sin correr?. Tenemos que resolver esto. Veamos como añadir animaciones a Mario.

Una animación consta de estados. Cada estado a su vez consta de varias imágenes. Tendremos dos estados:

  • Idle: Cuando Mario este parado.
  • Walk: Cuando Mario camina o corre.

Ya aprendimos a utilizar la herramienta Wave Exporter para generar
los archivos .gmk de los que se nutre el juego. Podríamos generar un gmk
para cada una de las imágenes de cada animación aunque a la larga,
penalizaría el rendimiento.

¿Qué hacemos?

La solución se llamda SpriteSheet. Un spritesheet no
es más que una imagen que contiene muchas imágenes. Se utiliza en el
juego dividiendo y obteniendo cada una de las imágenes que contiene pero
todas se obtienen del mismo fichero.

Nosotros en nuestro ejemplo vamos a utilizar el siguiente conjunto de imágenes:

Asi pues, primer objetivo, crear el spritesheet. Podríamos hacerlo a
mano con los distintos editores fotográficos conocidos aunque la tarea
es bastante tediosa.

Vamos a utilizar la herramienta TexturePacker que puedes descargar desde aquí. Abrimos la herramienta y arrastramos las imágenes anteriores:

En el lateral izquierdo tenemos el panel de configuración. El primer
cambio importante que realizaremos será elegir el formato de salida
elegido. Elegiremos “Generic XML”:

Además del spritesheet en formato PNG obtendremos un archivo en XML
que indicará el tamaño y la posición de cada una de las imágenes que
componen al spritesheet. Será importante en nuestro juego.

Finalmente, en la parte superior pulsamos el botón “Publish”:

Como resultado además del spritesheet obtenemos el XML:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with TexturePacker http://texturepacker.com-->
<!-- $TexturePacker:SmartUpdate:9253cd2deaa49622a1344586a860f75a$ -->
<!--Format:
n  => name of the sprite
x  => sprite x pos in texture
y  => sprite y pos in texture
w  => sprite width (may be trimmed)
h  => sprite height (may be trimmed)
oX => sprite's x-corner offset (only available if trimmed)
oY => sprite's y-corner offset (only available if trimmed)
oW => sprite's original width (only available if trimmed)
oH => sprite's original height (only available if trimmed)
r => 'y' only set if sprite is rotated
-->
<TextureAtlas imagePath="Mario.png" width="64" height="128">
     <sprite n="0.png" x="2" y="2" w="17" h="27"/>
     <sprite n="1.png" x="21" y="2" w="17" h="28"/>
     <sprite n="2.png" x="40" y="2" w="15" h="28"/>
     <sprite n="3.png" x="2" y="32" w="17" h="28"/>
     <sprite n="4.png" x="21" y="32" w="15" h="28"/>
     <sprite n="5.png" x="38" y="32" w="17" h="28"/>
     <sprite n="6.png" x="2" y="62" w="17" h="27"/>
</TextureAtlas>

Como podéis observar en el archivo XML, contiene la posición de cada
una de las imágenes junto a su tamaño. Todo listo para comenzar!

Vamos a añadir el spritesheet y el XML en el proyecto pero … espera!.
No directamente, recuerda que tenemos que utilizar la herramienta Wave
Exporter para generar el archivo .gmk:

Nos centramos en la entidad Mario. El principal cambio con respecto a lo
que teníamos hasta ahora será la introducción del componente de tipo Animation2D. El componente Animation2D nos permite definir desde una hasta un conjunto de animaciones:

var mario = new Entity("Mario")
.AddComponent(new Transform2D()
{
     X = WaveServices.Platform.ScreenWidth / 2,
     Y = WaveServices.Platform.ScreenHeight - 46,
     Origin = new Vector2(0.5f, 1)
})
.AddComponent(new Sprite("Content/Mario.wpk"))
.AddComponent(Animation2D.Create<TexturePackerGenericXml>("Content/Mario.xml")
.Add("Idle", new SpriteSheetAnimationSequence() { First = 3, Length = 1, FramesPerSecond = 11 })
.Add("Running", new SpriteSheetAnimationSequence() { First = 0, Length = 3, FramesPerSecond = 27 }))
.AddComponent(new AnimatedSpriteRenderer(DefaultLayers.Alpha));

Nosotros necesitamos por ahora al menos dos conjuntos de animaciones
(Mario en estado Idle y Mario en estado Running). Todo ello recordar
utilizando el mismo sprite sheet.

Antes de continuar, analicemos el código anterior. Para crear la animación utilizamos el método estático Animation2D.Create
que recibe un parámetro genérico (generalmente una clase, en nuestro
ejemplo TexturePackerGenericXml) donde se definirá cada sprite
perteneciente al spritesheet utilizado en la animación.  Una vez creado
el Animation2D definimos todas las animaciones que contendrá. En nuestro
caso definimos las dos necesarias (Idle i Running).

En cada animación definida establecemos un nombre junto a un objeto de tipo SpriteSheetAnimationSecuence que definirá el frame inicial de la animación, el frame final y el número de frames a renderizar por segundo.

Continuamos. Antes de avanzar, es importante que no se nos pase añadir la entidad a escena:

EntityManager.Add(mario);

Bien, si ejecutamos en este momento… ops!, no hay cambios.
Efectivamente, hemos añadido a Mario animaciones para cuando este parado
y para cuando corra pero no tenemos forma de cambiar entre los estados,
es decir, aun no somos capaces de hacer correr a Mario.

Pongamos fin a este problema. Vamos a crear un behavior, en nuestro
ejemplo llamado MarioBehavior, que nos permitirá desplazar a Mario
horizontalmente. Este Behavior capturará las pulsaciones  en la pantalla
táctil para permitir modificar el estado de Mario y asi permitir el
desplazamiento:

protected override void Update(TimeSpan gameTime)
{
     currentState = AnimState.Idle;
 
     // touch panel
     var touches = WaveServices.Input.TouchPanelState;
     if (touches.Count > 0)
     {
          var firstTouch = touches[0];
          if (firstTouch.Position.X > WaveServices.Platform.ScreenWidth / 2)
          {
               currentState = AnimState.Right;
          }
          else
          {
               currentState = AnimState.Left;
          }
     }
 
     // Set current animation if that one is diferent
     if (currentState != lastState)
     {
          switch (currentState)
          {
               case AnimState.Idle:
                    anim2D.CurrentAnimation = "Idle";
                    anim2D.Play(true);
                    direction = NONE;
                    break;
               case AnimState.Right:
                    anim2D.CurrentAnimation = "Running";
                    trans2D.Effect = SpriteEffects.None;
                    anim2D.Play(true);
                    direction = RIGHT;
                    break;
               case AnimState.Left:
                    anim2D.CurrentAnimation = "Running";
                    trans2D.Effect = SpriteEffects.FlipHorizontally;
                    anim2D.Play(true);
                    direction = LEFT;
                    break;
          }
     }
 
     lastState = currentState;
 
     // Move sprite
     trans2D.X += direction * SPEED * (gameTime.Milliseconds / 10);
 
     // Check borders
     if (trans2D.X < BORDER_OFFSET)
          trans2D.X = BORDER_OFFSET;
     else if (trans2D.X > WaveServices.Platform.ScreenWidth - BORDER_OFFSET)
          trans2D.X = WaveServices.Platform.ScreenWidth - BORDER_OFFSET;
}

En la parte superior tenéis el código implementado en el método Update. En el método se realizan varias tareas fundamentales:

  • Captura las pulsaciones en la pantalla (izquierda y derecha).
  • Modifica el estado de la animación a la adecuada (dependiendo del valor de currentState).
  • Se mueve el sprite a la posición correspondiente.
  • Se verifica que el sprite este dentro de los márgenes.

Llegados a este punto lo tenemos todo casi preparado para ver correr
por fin a Mario pero… espera!. Debemos modificar la instancia de Mario
para añadirle el Behavior:

AddComponent(new MarioBehavior())

Ahora si!. Si ejecutamos y pulsamos en el lateral izquierdo Mario
correrá hacia la izquierda hasta el márgen izquierdo como máximo y
exactamente igual en sentido contrario. Genial, ¿cierto?. Aunque…
llevamos toda la vida jugando con Mario con una cruceta, ¿como lo
solucionamos?.

Bueno, ningun dispositivo Windows Phone cuenta con botones físicos
específicos para juegos. Sin embargo, tenemos una maravillosa pantalla
táctil con todas las posibilidades que ofrece.

¿Que tal si implementamos una cruceta virtual?.

Manos a la obra. Lo primero que debemos hacer es… tener unos gráficos
de nuestra cruceta para mostrar en pantalla. Asi que tenemos que crear
nuestro wpk correspondiente. Una vez añadido al proyecto, tenemos que
instanciarlo:

var joystick = new Entity("joystick")
.AddComponent(new Sprite("Content/Joystick.wpk"))
.AddComponent(new SpriteRenderer(DefaultLayers.Alpha))
.AddComponent(new Transform2D()
{
     X = joystickOffset,
     Y = WaveServices.Platform.ScreenHeight - joystickOffset - 300
});
De esta forma lograremosque la cruceta aparezca en la zona inferior
izquierda de la pantalla para molestar lo mínimo posible al jugador. La
añadimos a escena:
EntityManager.Add(joystick);
De momento, si pulsamos cualquier dirección de la cruceta, no hace nada…
¿no echáis en falta algo?. Tenemos que añadir comportamiento a la
cruceta digital asi que debemos crear un nuevo Behavior. Creamos un
Behavior llamado JoyStickBehavior:
protected override void Update(TimeSpan gameTime)
{
     this.UpPressed = this.DownPressed = this.LeftPressed = this.RightPressed = false;
 
     var touchState = WaveServices.Input.TouchPanelState;
 
     if (touchState.Count > 0)
     {
          var touch = touchState[0];
 
          // Up/down check
          if (touch.Position.X > (trans2D.X + 100) && touch.Position.X < (trans2D.X + 200))
          {
               // Here we're inside the vertical area defined by up/down buttons, let's check which one of those
               if (touch.Position.Y > trans2D.Y && touch.Position.Y < (trans2D.Y + 100))
               {
                    // Up
                    this.UpPressed = true;
               }
               else if (touch.Position.Y > (trans2D.Y + 200) && touch.Position.Y < (trans2D.Y + 300))
               {
                    // Down
                    this.DownPressed = true;
               }
          }
          // Left/right check
          else if (touch.Position.Y > (trans2D.Y + 100) && touch.Position.Y < (trans2D.Y + 200))
          {
               // Here we're inside the horizontal area defined by left/right buttons, let's check which one of those
               if (touch.Position.X > trans2D.X && touch.Position.X < (trans2D.X + 100))
               {
                    // Left
                    this.LeftPressed = true;
               }
               else if (touch.Position.X > (trans2D.X + 200) && touch.Position.X < (trans2D.X + 300))
               {
                    // Right
                   this.RightPressed = true;
               }
          }
     }
}
Basicamente detectamos si  el usuario toca en la cruceta. Modificamos el
Behavior MarioBehavior para añadir una instancia del Behavior Joystick y
detectar si tenemos que cambiar a Mario de estado según el estado del
Joystick:
protected override void Update(TimeSpan gameTime)
{
     currentState = AnimState.Idle;
 
     // touch panel
     if (joystick.RightPressed)
     {
          currentState = AnimState.Right;
     }
 
     if(joystick.LeftPressed)
     {
          currentState = AnimState.Left;
     }
 
     // Set current animation if that one is diferent
     if (currentState != lastState)
     {
          switch (currentState)
          {
               case AnimState.Idle:
                    anim2D.CurrentAnimation = "Idle";
                    anim2D.Play(true);
                    direction = NONE;
                    break;
               case AnimState.Right:
                    anim2D.CurrentAnimation = "Running";
                    trans2D.Effect = SpriteEffects.None;
                    anim2D.Play(true);
                    direction = RIGHT;
                    break;
               case AnimState.Left:
                    anim2D.CurrentAnimation = "Running";
                    trans2D.Effect = SpriteEffects.FlipHorizontally;
                    anim2D.Play(true);
                    direction = LEFT;
                    break;
          }
     }
 
     lastState = currentState;
 
     // Move sprite
     trans2D.X += direction * SPEED * (gameTime.Milliseconds / 10);
 
     // Check borders
     if (trans2D.X < BORDER_OFFSET)
          trans2D.X = BORDER_OFFSET;
     else if (trans2D.X > WaveServices.Platform.ScreenWidth - BORDER_OFFSET)
          trans2D.X = WaveServices.Platform.ScreenWidth - BORDER_OFFSET;
}
Añadimos a la instancia Mario el Behavior del Joystick:
AddComponent(new MarioBehavior(EntityManager.Find("joystick")))
La instancia Mario por lo tanto quedaría:
var mario = new Entity("Mario")
.AddComponent(new Transform2D()
{
     X = WaveServices.Platform.ScreenWidth / 2,
     Y = WaveServices.Platform.ScreenHeight - 46,
     Origin = new Vector2(0.5f, 1)
})
.AddComponent(new Sprite("Content/Mario.wpk"))
.AddComponent(Animation2D.Create<TexturePackerGenericXml>("Content/Mario.xml")
.Add("Idle", new SpriteSheetAnimationSequence() { First = 3, Length = 1, FramesPerSecond = 11 })
.Add("Running", new SpriteSheetAnimationSequence() { First = 0, Length = 3, FramesPerSecond = 27 }))
.AddComponent(new AnimatedSpriteRenderer(DefaultLayers.Alpha))
.AddComponent(new MarioBehavior(EntityManager.Find("joystick")));

Si ejecutamos ahora nuestro juego podemos probar que efectivamente
pulsando en la cruceta el lateral izquierdo Mario corre a la izquierda y
exactamente lo mismo en dirección opuesta ocure si pulsamos la derecha.

Convirtiendo el proyecto a Windows Phone

Pero… espera…el proyecto es una aplicación Windows de escritorio, ¿no ibamos a desarrollar el juego para Windows Phone?

Esto… efectivamente. Vamos a descubrir a continuación una de las
grandes características que ofrece el engine que no es otra que poder
convertir nuestro proyecto a las siguientes plataformas:

  • Windows Phone 7/8. Por ahora es un proyecto Windows Phone 7. Por compatibilidad binaria funciona sin problemas en Windows Phone 8.
  • IOS (iPhone, iPad & iPod Touch),
  • Windows 8 (Aplicación Windows Store).
  • Android.

NOTA: La herramienta la podéis encontrar dentro de una carpeta llamada “Tools” en el directorio de instalación.

¿Cómo la utilizamos?

Muy fácil. Pulsamos el botón Open para seleccionar la solución
(archivo .sln) a convertir. Marcamos las casillas de las plataformas que
deseamos como destino y pulsamos el boton Convert.

Una vez que termina la conversión si nos dirigimos al directorio de
la solción tendremos una nueva solución mas su carpeta asociada por cada
casilla marcada (plataforma destino).

Listo!.

¿Ya?. Casi. Las soluciones estan practicamente listas a falta de los
recursos (nuestro archivos wpk). Podemos reutilizar los ya utilizados o
podemos crear nuevos archivos de recursos adaptados a las nuevas
plataformas.

NOTA: Recordar establecer el valor Content en la propiedad Build Action.

Tras añadir los recursos, podemos ejecutar el proyecto convertido en
el emulador de Windows Phone o en un dispositivo físico donde podremos
probar nuestro juego!

En nuestro caso hemos convertido la solución a un proyecto Windows
Phone. Le hemos añadido y a continuación tenéis disponible el resultado:

Podéis ver a continuación un video del juego en funcionamiento en el siguiente enlace.

Espero que lo visto en la entrada os haya resultado interesante.
Recordar que cualquier duda o sugerencia la podéis dejar en los
comentarios de la entrada.

Extra

Es sumamente recomendable que utilicéis la herramienta Sample Browser.
Es una herramienta extra de los chicos de Wave Engine que nos permite
ver y descargar una gran cantidad de ejemplos realizados con el motor.
Una fuente sin duda excelente de aprendizaje. Todo lo visto en esta
entrada esta perfectamente cubierto en los ejemplos. Muy recomendado!

Conclusiones

Estamos ante un engine joven pero lo suficientemente sólido como para
desarrollar juegos de peso. Es gratuito, nos permite desarrollar bajo
C# y además podemos exportar nuestros juegos a multitud de plataformas.
Sin duda, gran trabajo el realizado hasta ahora por el equipo de Wave
Engine con actualizaciones periódicas constantes afinando poco a poco el
engine.

Keep Pushing!

Más información

Extendiendo el código generado en Windows Phone App Studio

Introducción

Previamente ya habíamos hablado de Windows Phone App Studio, nueva herramienta online que permite crear aplicaciones de calidad para Windows Phone 8 en cuestión de minutos.Entre sus principales características hay muchas destacables:

  • Permite crear aplicaciones Windows Phone sin tener conocimientos de desarollo.
  • Las Aplicaciones se generan en código nativo.
  • Permite instalar directamente la Aplicación sin requerir cuentas extras de ningun tipo.
  • Permite compartir la Aplicación creada con amigos.

App Studio

Sin embargo, la característica principal del sistema, es que puedes descargar el código fuente
de la Aplicación. Esto permite extender el código fuente añadiendo
nuevas características. En esta entrada vamos a analizar la estructura y
técnicas utilizadas en el código generado asi como aprener como
extenderlo con facilidad.

¿Te apuntas?

Echemos un vistazo al código…

Una vez generamos nuestra Aplicación desde Windows Phone App Studio veremos una pantalla similar a la siguiente:

Descargar el código fuente

Desde este apartado podemos:

  • Instalar nuestra Aplicación en un dispositivo para probarla de manera fácil leyendo un simple código QR.
  • Compartir vía email nuestra Aplicación con amigos.
  • Descargar el paquete de publicación (el XAP ya empaquetado listo para publicar).
  • Y por último, podemos descargar el código fuente!

Descargamos el código fuente de nuestra Aplicación:

Descomprimimos y abrimos la solución (Solution.sln) en Visual Studio.

NOTA: El proyecto es una solución para Windows Phone 8 que requiere Visual Studio 2012.

De un primer vistazo a la estructura de la solución podemos ver que la solución esta organizada en diferentes proyectos:Estructura

WP8App: Este proyecto es la Aplicación Windows Phone 8 en si. Implementa el patrón MVVM junto a otras técnicas y buenas prácticas (Ioc, servicios, etc) de los que hablaremos con calma más adelante.
Entities: Entidades utilizadas en la Aplicación. Las entidades implementan una iterfaz BindableBase que es una implementación de la interfaz INotifyPropertyChanged.
Repositories: En este proyecto tenemos disponibles todos repositorios de información utilizados por la Aplicación.

Esta
separación de responsabilidades en proyectos independientes nos permite
extender con mayor facilidad cada una de las partes implicadas asi como
la creación de test unitarios que se encargen de asegurar la calidad y
funcionamiento de todo.

 

Profundizamos en la estructura del proyecto Windows Phone:

Lo primero que llama la atención a simple vista es la implementación del patrón MVVM en el proyecto. Model-View-ViewModel (MVVM) es un patrón de diseño de aplicaciones que permite desacoplar el código de interfaz de usuario del código que no sea de interfaz de usuario.

El patrón MVVM se compone de tres partes fundamentales:

La Vista (View):
Define las vistas de la aplicación, es decir, conjunto de controles,
layout, estilos, etc. Se nutre del vista-modelo utilizando su propiedad DataContext.
Los controles se configuran mediante propiedades expuestas por el
vista-modelo e interactuan mediante el uso de comandos. Todas las vistas
están situadas dentro de la carpeta View.
El Vista-Modelo (ViewModel):
Conjunto de clases que encapsulan la lógica de presentación. Implementa
propiedades y comandos a los que se asociará la vista. Controla la
interacción de la vista con el modelo. Todos los viewmodels están
organizados dentro de la carpeta ViewModel.
El Modelo (Model):
Conjunto de clases que encapsulan los datos de la aplicación junto a su
lógica de negocio. Validan el modelo de los datos aplicando reglas de
negocio. El modelo suele implementar las interfaces INotifyPropertyChanged y INotifyCollectionChanged
para notificar cambios en propiedades y colecciones. No deben
referenciar a la vista ni al vista-modelo. En nuestra solución, tenemos
los modelos dentro del proyecto Entities (recordar que implementan la interfaz) .

A vista de pájaro ya hemos analizado la estructura del proyecto, sin embargo, creo que merece la pena que pronfundizemos más.

Con
el objetivo en mente se poder extender y reutilizar el código en la
medida de lo posible, se evita añadir código específico de la plataforma
en los viewmodels. No podemos utilizar directamente APIs de Windows
Phone en nuestros viewmodels.

¿Porque?

Hay varios motivos
para ello. Por ejemplo, si queremos portar la Aplicación a Windows 8
utilizaremos una Portable Library. Los viewmodels son candidatos
perfectos para migrar a la clase portable pero no podemos hacerlo con
código específico de la plataforma.

¿Cómo lo conseguimos?

Las operaciones que necesitemos en nuestra aplicación que requieran acceder a las APIs de Windows Phone las implementaremos en servicios. Podemos encontrar los servicios en la carpeta Services del proyecto.

Dependiendo
de los extras y otro tipo de configuraciones aplicadas en el portal
durante el proceso de creación de la Aplicación, podemos contar con los
siguientes servicios:

DialogService. Lo utilizamos para mostrar notificaciones en nuestra aplicación mediante Messagebox.
LiveTileService. El nombre deja pocas dudas. Lo utilizamos para la gestión de tiles en la aplicación, crear y eliminar tiles secundarios.
NavigationService. Utilizamos el servicio NavigationService para realizar la navegación entre páginas.
ReminderService. Nos permite crear recordatorios.
ShareService. Nos permite compartir información (Lanzador EmailComposeTask).
LockScreenService. Nos permite modificar la imagen utilizada en la LockScreen.
SpeechService. Nos permite utilizar TTS en nuestra Aplicación.
WebBrowserService. Abre una URL en el navegador (Lanzador WebBrowserTask).

Los viewmodels implementan los servicios gracias al uso de Ioc (Inversion of Control) por DI
(Dependency Injection). Se crea un contenedor donde registramos todos
los servicios que vamos a utilizar junto a los viewmodels que utilizarán
las vistas y que accederán a los servicios utilizando interfaces.

Para ello, se utiliza Unity v2.1,
el contenedor IoC de Patterns & Practices. Contamos con un service
locator (ViewModelLocator) que utilizará el contenedor creado. Está
instanciado en App.xaml y se utiliza para que cada vista pueda acceder a
la instancia de su viewmodel correspondiente cada vez que lo necesite.
Los viewmodels a su vez  accederán a los servicios utilizando
interfaces.

Llegados a este punto y tras analizar la estructura y
técnicas utilizadas en el código generado de nuestra aplicación podemos
deducir que:

  • El código generado implementa el patrón MVVM y
    utiliza conceptos y buenas prácticas como Ioc, servicios o la
    abstracción de implementaciones gracias a interfaces creando un código de calidad, además facilmente extensible.
  • El
    código viene en líneas generables perfectamente preparado para
    implementar test con facilidad o utilizar Portable Library y migrar
    nuestra aplicación a otras plataformas.
  • Para enriquecer nuestras
    vistas se utilizan algunas de las herramientas más conocidas en el
    entorno de desarrollo Windows Phone como el Toolkit o MyToolkit. Para 
    facilitar la gestión de dichas librerías se incluyen paquetes NuGet.

Asi que, analizada la estructura del código generado, ¿que tal si lo extendemos?

Extendiendo el código

Manos a la obra. Vamos a extender el código de la Aplicación generada. Para probar las múltiples opciones a realizar, vamos a:

  • Modificar uno de los servicios ya existentes para modificar la implementación del mismo.
  • Añadir un nuevo servicio que añada nueva funcionalidad a al Aplicación.

Comenzamos modificando uno de los servicios existentes. Nos centramos por ejemplo en el servicio DialogService  que utilizamos para mostrar notificaciones en nuestra aplicación mediante Messagebox:

public class DialogService : IDialogService
{
public void Show(string message)
{
MessageBox.Show(message);
}

public void Show(string message, string caption)
{
MessageBox.Show(message, caption, MessageBoxButton.OK);
}
}

Contamos
con las librerías del Windows Phone Toolkit incluidas en el proyecto.
Por lo tanto, podemos extender el servicio utilizando un control más
versátil como el CustomMessageBox perteneciente al Toolkit. Para ello,
en la misma clase, añadimos la referencia necesaria para poder utilizar
el control:

using Microsoft.Phone.Controls;

Reemplazamos la lógica de cada método:


public void Show(string message)
{
CustomMessageBox messageBox = new CustomMessageBox()
{
Message = message
};

messageBox.Show();
}

public void Show(string message, string caption)
{
CustomMessageBox messageBox = new CustomMessageBox()
{
Caption = caption,
Message = message
};

messageBox.Show();
}

Fácil,
¿verdad?. Por supuesto, podemos añadir más métodos al servicio
(recordar en dicho caso incluirlas en la interfaz) permitiendo confgurar
el botón derecho, el botón izquierdo, el contenido del mensaje (en este
control tenemos muchas posibilidades como por ejemplo incluir hasta un
Pivot como contenido), etc.

De acuerdo, hemos modificado algo
bastante simple. ¿Que pasa si deseamos añadir nueva funcionalidad a la
ya existente?. No dista mucho de lo ya realizado. Vamos a añadir un
nuevo servicio. Una acción bastante común en Aplicaciones Windows Phone
que acceden a información alojada en un servidor suele ser cachear la
información. Para ello, una buena opción es utilizar el Isolated
Storage.

Como el acceso al Isolated Storage es una funcionalidad
específica de la plataforma… si, efectivamente, va a los servicios.
Creamos entonces un servicio llamado StorageService.

Creamos la interfaz que define al servicio:

public interface IStorageService
{
T Load<T>(string fileName);
bool Save<T>(string fileName, T data);
}

Como
podéis ver muy sencilla. Tendrá un método Load que pasado un  nombre de
achivo devolverá la información almacenada y otro método Save que
tendrá como parámetros el nombre del archivo junto a la información a
almacenar.

Implementamos la interfaz:

public class StorageService : IStorageService
{

}

Creamos la clase que implementa la interfaz:

public T Load<T>(string fileName)
{
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!myIsolatedStorage.FileExists(fileName))
return default(T);

using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile(fileName, FileMode.Open))
{
var xml = new XmlSerializer(typeof(T));
T data = (T)xml.Deserialize(stream);
return data;
}
}
}

public bool Save<T>(string fileName, T data)
{
try
{
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(fileName))
{
var xml = new XmlSerializer(typeof(T));
xml.Serialize(fileStream, data);
}
}

return true;
}
catch
{
return false;
}
}

El siguiente paso necesario será el registrar este servicio en nuestro contenedor de Ioc:

_currentContainer.RegisterType<IStorageService, StorageService>();

Por último, podemos utilizar nuestro servicio en un viewmodel por ejemplo muy facilmente:

private IStorageService _storageService;

En el contructor instanciamos los servicios:

public TheTeam_AlbumViewModel(IDialogService dialogService, INavigationService navigationService,
ILockScreenService lockScreenService, ITheGuysCollection theGuysCollection,
IawardsCollection awardsCollection, IvideosDataSource videosDataSource,
IblogDataSource blogDataSource, IStorageService storageService)
{
_dialogService = dialogService;
_navigationService = navigationService;
_lockScreenService = lockScreenService;
_theGuysCollection = theGuysCollection;
_awardsCollection = awardsCollection;
_videosDataSource = videosDataSource;
_blogDataSource = blogDataSource;
_storageService = storageService;
}

Y lo podemos utilizar por ejemplo, al obtener una colección de elementos:

_storageService.Save<ObservableCollection<RssSearchResult>>("Blog_NewsListControlCollection", Blog_NewsListControlCollection);

De
esta forma podemos almacenar en el almacenamiento aislado la
información del servidor. Si el usuario vuelve inmediatamente a ver la
misma información pdríamos recueperar la existente en lugar de volver a
realizar la petición al servidor.

Podéis echarle un vistazo al código generado (asi como las extensiones realizadas) descargando el ejemplo disponible desde el siguiente enlace.

En definitiva, el tener acceso al código nativo nos permite extender el código a nuestras propias necesidades.

Conclusiones

El
código generado implementa el patrón MVVM y utiliza conceptos y buenas
prácticas como Ioc, servicios o la abstracción de implementaciones
gracias a interfaces creando un código de calidad que como hemos podido verificar es facilmente extensible.

En
las plantillas de Visual Studio para Windows Phone se está extendiendo
el uso del patrón MVVM junto a otras buenas prácticas. Que el código
generado por Windows Phone App Studio haga uso de todas las buenas
prácticas y recomendaciones en el desarrollo Windows Phone es un punto
positivo que permite no solo ayudar a cualquier usuario a crear su
Aplicación para Windows Phone sino contribuir también en el aprendizaje
en el desarrollo de la plataforma mostrando los beneficios de estas
técnicas desde el principio.

Más información