[Libro] Windows Phone 7.5 "Mango" – Desarrollo Silverlight

Lo primero que tengo que decir es que el autor de este libro, Josué Yeray, le tengo considerado como un amigo, aunque no hayamos coincidido muchas veces en persona, nuestros mails y tweets intercambiados, hacen que tenga por Josué un respeto y admiración bastante elevados, así mismo su trabajo y lo que todo el mundo dice de el hacen el resto.

Digo esto de primeras, porque aunque intentare hacer una valoración y resumen independiente de su nuevo libro, quieras que no alguien puede pensar que lo que digo es por peloteo o amiguismo. No es necesario os lo aseguro, el libro es MUY BUENO, sin necesidad de añadirle ningún tipo de extra personal.

1-d9df9f5415Este libro comienza con un prologo magistral de Unai Zorrilla y tras el mismo nos presenta un par de capítulos introductorios sobre la plataforma. El primero de ellos denominado “Conociendo Windows Phone”, nos muestra tanto la arquitectura del sistema, como un repaso de las herramientas necesarias para programar este entorno. El segundo,  con el titulo “Introducción a Silverlight para Windows Phone” es un repaso de los elementos principales de Silverlight que se usaran en la programación para Windows Phone.

Como seguro que todos conocéis existen dos modelos de programación para Windows Phone, el modelo XNA, el cual esta indicado para desarrollo de juegos y entornos gráficos complejos y el modelo Silverlight. Como se puede deducir observando el titulo del libro, este, esta totalmente enfocado en el segundo tipo de desarrollo. Y buena muestra es el capitulo 3, titulado “Silverlight para Windows Phone a Fondo”. El cual nos muestra características de esta programación mas complejas e incluso nos enseña una pincelada de la programación bajo el patrón Model View ViewModel (MVVM).

“Windows Phone A Fondo” y “Windows Phone a Fondo II”, es la denominación del 4º y 5º capitulo. Estos son la esencia del libro, los capítulos mas extensos y en donde el autor nos enseña prácticamente todo lo fundamental para controlar este tipo de programación. Navegación entre paginas, Almacenamiento relacional con SQL Server CE, Tombstoning, Launchers and Choosers, acceso a GPS, Sensores, etc, etc. Y ojo temas como Background Process, acceso a contactos y demás que son específicos de la nueva versión 7.5 del sistema. Porque otra cosa mas, el libro esta totalmente revisado y adaptado a la nueva versión “Mango”, el único libro en el mundo, hasta la fecha que puede decir eso.

Los capítulos 6 y 7, titulados “Interacción con el usuario” e “Integrándonos con nuestro entorno”, respectivamente, nos adentran primero en la espectacular interfaz de usuario de la que dispone Windows Phone, explicándonos los controles pivot y panorama y por ejemplo los magníficos Tiles y segundo nos muestran la forma de interactuar con los diferentes procesos externos, como servicios remotos, tanto en WCF, como servicios OData, acceso a Sockets y demás.

Ibon Landa, recientemente nombrado MVP en Windows Azure, deja también su sello y participa como coautor del libro en el capitulo 8, (imagino que haya colaborado en mas partes). Este capitulo denominado “Windows Azure” nos explica a grandes rasgos que es y cuales son las partes fundamentales de Azure, para a continuación mostrarnos la relación entre Windows Phone y Windows Azure a través del Toolkit creado para tal efecto.

Finaliza el libro con un apéndice sobre la publicación de nuestras aplicaciones en el MarketPlace, como y de que manera debemos de proceder para ver nuestros desarrollos en la tienda online de aplicaciones para Windows Phone.

Sinceramente, el libro es una magnifica aproximación a la programación para Windows Phone. Trata la mayoría de puntos importantes que cualquier programador debería de conocer y dominar si quiere realizar buenos desarrollos en esta plataforma y los trata de forma fácil y muy bien explicada. Cuenta con nada mas y nada menos que 99 proyectos (uno mas y hubiera sido redondo) de ejemplo, con su código fuente descargable, que detallan al milímetro cada palabra que se cuenta en sus paginas.

A mi modo de ver es un libro de iniciación, básico para cualquier programador que se inicie en la plataforma, pero que ojo no debería tampoco faltar en la librería de un experto en esta tecnología, ya que seguro que alguna cosa se va a aprender con este libro, completo, bien escrito y mejor documentado. Es mas, según algunas fuentes será usado como material de referencia en cursos y masters impartidos por universidades.

Mi recomendación: Comprarle sin falta.

Por ultimo no me gustaría olvidarme de Krasis Press, que con sus libros en español de autores de gran calidad técnica, nos alegran la vida a los que como yo tenemos en la mesilla de noche en vez de “El quijote”, “Windows Phone 7.5, Desarrollo en Silverlight”. (entre otros).

Acceso a Hotmail, Messenger y Skydrive desde Windows Phone, con Live Connect SDK – Parte I

Una de las cosas que eran de extrañar en el ecosistema de Windows Phone, era que nosotros podíamos (sobre todo ahora con Mango) acceder a nuestros contenidos alojados en Skydrive, almacenar información de forma fácil, etc..  pero no podíamos hacer esto mismo desde una aplicación desarrollada por nosotros mismos.

Existía en codeplex una herramienta o API cliente que nos permitía hacer alguna que otra cosa, el Skydrive .Net API Cliente, pero nada serio…..

Lo mismo pasaba con el acceso nativo a nuestros contactos de Hotmail, o directamente a las conversaciones de Windows Live Messenger.

Pues bien, esto tiene los días contados, ya que tras el reciente evento de BUILD Windows en donde se presento el flamante Windows 8, Microsoft a liberado la primera versión de su live connect SDK, actualmente la versión Developer preview, que nos permite acceder a Identity (profiles de usuarios), Hotmail (contactos y calendarios), Messenger (Mensajería instantánea)  y SkyDrive (Ficheros y fotos).

Dicho SDK, lo podemos descargar desde esta pagina. La versión final de este SDK se espera para este próximo noviembre, mientras tanto podemos visitar regularmente el site http://dev.live.com para enterarnos de mas cosas sobre este SDK y otras interesantes sobre el ecosistema de Live.

Bueno, pues manos a la obra, lo primero que debemos de saber es que para poder usar el live connect nuestra aplicación debe de cumplir dos requisitos:

  • Disponer de un Client ID.

El Client ID es un identificador único de nuestra aplicación en el ecosistema de Live, para conseguir dicho Client ID, es necesario acudir al Live Connect App management site y crear una aplicación, indicando el nombre principal y el lenguaje de la aplicación. Una vez hecho esto se nos proporciona ese Client ID.

LiveConnect1

  • Indicar un Redirect Domain.

Es el dominio que se usara para intercambiar datos, tokens y mensajes con la aplicación, mas adelante explicare que significa esto. Para indicar este Redirect Domain, deberemos de pinchar dentro de nuestra nueva aplicación creada dentro de Live Connect App management site y editar la sección de Settings. Una vez allí en el apartado de API settings, deberemos de indicar el Redirect Domain.

LiveConnect2

 

Nota: Este ultimo dato, el Redirect Domain, no es necesario gestionarlo si nuestra aplicación no va a utilizar single-sign-on o OAuth, simplemente se usara para indicarle al usuario a la hora de que este valide la autenticación o sign in de nuestra aplicación en Live, de que Uri se intenta acceder.

Muy importante en nuestro caso también, es que deberemos de marcar que la aplicación que se va a conectar con Live Connect es una aplicación Móvil.

Una vez que disponemos de estos dos datos, vamos a pegarnos con el código:

Tras instalar el developer preview de Live Connect, disponemos de dos nuevos espacios de nombres que debemos de utilizar y referenciar, se trata de Microsoft.Live y Microsoft.Live.Controls.

Lo primero que vamos a ver es como logearnos desde una de nuestras aplicaciones en Windows Live, para ello existen dos formas esencialmente de hacerlo:

  1. Control SignInButton: LiveConnect3
  2. Control visual perteneciente al namespace Microsoft.live.Controls, que es en si mismo un control Button pero con unas características muy interesantes. Esta opción digo yo que la hayan incorporado para el tema de la estandarización de experiencia de usuario, pero bueno.

La verdad es que el control es bastante personalizable, pudiendo cambiar el logo que aparece, bordes, background, fuentes, texto para iniciar sesión, cerrar sesión, etc…

Simplemente deberemos de indicar dos propiedades de este control nuevo añadido; por un lado el .ClientId: “Cadena de texto con el famoso ClientId, obtenido en el paso anterior” y por otro lado la propiedad .RedirectUri, que será también una cadena de texto con la URL que hemos introducido anteriormente en la pagina de settings de Live.

En un principio esto es lo único que deberemos de indicar al control para poder hacer Sign In. Pero aun nos queda otra cosa bastante importante, los Scopes (ámbitos).

El usuario debe de dar su consentimiento para que una aplicación acceda a la distinta información que tiene contenida en los servicios de Live, ya sea Hotmail, Skydrive o Windows Live Messenger. La Api de Live Connect divide estos permisos o consentimiento que el usuario otorga en distintos niveles o categorías, estos son lo que se denominada “Scopes”. Existen 3 tipos de Scopes y en cada tipo un scope para cada una de las cosas que nosotros queramos hacer, según esta tabla.

Core Scopes  
Scope Función
wl.basic Acceso de lectura a la información básica de la cuenta
wl.offline_access Capacidad de que una aplicación lea y actualice la información de la cuenta. Si no se indica este Scope, solo se podrá acceder cuando se inicie sesión en Live.
wl.signin Inicio de sesión único. Single Sign On.
Extended Scopes  
Scope Función
wl.birthday Acceso de lectura a la información del cumpleaños de un usuario, incluido el día de nacimiento, mes y año.
wl.contacts_birthday Acceso de lectura al día de nacimiento y mes de nacimiento de los contactos de un usuario.
wl.contacts_photos Acceso de lectura a los álbumes de un usuario, fotos y videos, y sus comentarios y etiquetas asociadas. También permite el acceso de lectura a cualquier álbum, foto o video que otro usuario haya compartido con el.
wl.emails Acceso de lectura a las direcciones de correo electrónico de un usuario.
wl.events_create Creación de eventos en el calendario.
wl.phone_numbers

Acceso de lectura a los números de teléfono del usuario.

wl.photos

Acceso de lectura a las fotos, videos y álbumes.

wl.postal_addresses

Acceso de lectura a la dirección postal del usuario.

wl.share Creación de actividad en el activity feed e indicar el mensaje de estado.
wl.work_profile Acceso de solo lectura a los datos de empleador y puesto de trabajo.
Developer Scopes  
Scope Función
wl.applications Acceso de lectura a las aplicaciones que los desarrolladores hayan creado para trabajar con Live Connect.
wl.applications_create Creación de nuevas aplicaciones con Live Connect en nombre de un desarrollador.

En este caso concreto, nosotros usaremos dos Scopes básicos, ya que de momento no queremos hacer mas que logearnos. Usaremos los scopes wl.basic y wl.signin.

Para ello en la propiedad .scopes de nuestro control indicaremos como una cadena de texto separadas por un espacio estos dos scopes.

signInButton1.Scopes = "wl.signin wl.basic";

Una vez que hemos hecho esto, al pulsar el botón «SigninButton”, nos aparecerá una pantalla de Windows Live, para que nos autentiquemos.

LiveConnect4

Si comprobamos la secuencia de pantallas de la imagen superior vemos que tras autenticarnos nos aparece una pantalla con los datos de nuestra aplicación y lo que deseamos hacer con la cuenta de Windows Live (según los scopes que hayamos indicado), para que el usuario de el visto bueno, en este caso como se ve nos dice que haremos: “Sign you in automatically”, correspondiente al scope wl.signin y “Access your name, gender, display picture, contacts and friends”, correspondiente al scope wl.basic.

  1. Programáticamente.

Como habíamos comentado anteriormente disponemos de dos formas de hacer sign in en la plataforma Live, la primera como hemos visto es a través del control personalizable SigninButton, pero existe también la opción de hacerlo de forma programática.

Para ello debemos de crearnos un objeto correspondiente a la clase LiveAuthClient, indicando en su construcción el ClientId y la RedirectUri, similar a lo que realizamos en el control físico.

Una vez hecho esto deberemos de crearnos un manejador al evento LoginCompleted de nuestro LiveAuthClient y disparar el método asíncrono .LoginAsync(), indicando como parámetro de entrada los o el scope que vamos a utilizar.

List<string> Scopes = new List<string>();

Scopes.Add("wl.basic");

Scopes.Add("wl.signin");

 

LiveAuthClient autenticado = new LiveAuthClient("00000000440XXXXX", "http://geeks.ms");

autenticado.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(autenticado_LoginCompleted);

 

autenticado.LoginAsync(Scopes);

Una buena practica seria, utilizar el botón de Signin para la primera vez que realizamos la autenticación en Windows Live, tras esto cada vez que queramos autenticarnos de nuevo, lo realizaríamos ya de forma programática, ya que una vez autenticados no se nos va a volver a solicitar ni desde la pagina de Live el usuario y la contraseña, ni la aceptación de los scopes a usar, a no ser que estos cambien.

En el siguiente Post, trataremos la forma de manejar la información que de primeras nos proporciona el logueo con Live, para mas adelante adentrarnos en las posibilidades de integración con Skydrive.

Materiales de mi charla en Málaga Dnug

Lo primero me gustaría agradecer enormemente a la gente del grupo de usuario de Málaga Dnug, por darme la oportunidad de compartir mis conocimientos con la gente y sobre todo a Pablo Núñez por llevarme, traerme y compartir una agradable tarde-noche de cervezas y raciones….

El código de ejemplo que adjunto en este post no es el que use en la charla, sino lo que tenia en un principio preparado para hacer durante la misma. El problema es que como ya sabéis todos el tiempo se va volando y al final me tuve que conformar con hacer pequeños ejemplos de cada una de las cosas que iba comentando.

Bueno, pues lo dicho, espero que la charla gustara a todo el mundo que asistió y hasta la próxima..

Malaga DNug

 

PPT y código de ejemplo:

Desde el Prototipado al Marketplace de una aplicación Windows Phone 7.5

Tengo la intención de realizar, mejor dicho ya estoy en ello una serie de post, sobre la realización desde 0 de una aplicación completa y funcional del tipo TODO List.

Quisiera incluir obviamente código fuente de ejemplo y me gustaría mucho e intentare hacerlo, realizar algún que otro Screencast sobre alguno de los temas a tratar.

Básicamente el índice de temas a tratar punto por punto es el siguiente:

  1. Sketchflow, nociones básicas de prototipado de proyectos.
  2. Mini, mini introducción a M-V-VM
  3. Acceso a Servicios externos. Azure
  4. Persistiendo la información en el Isolated Storage.
  5. Poniendo información en un control Panorama.
  6. Creación dinámica de hojas en el control Pivot.
  7. Accediendo a la información de la agenda y contactos.
  8. Notificaciones.
  9. Jugando con los sensores.
  10. Integración con Social Media.
  11. Ganando un poco de pasta con el Microsoft Advertising SDK
  12. Procesos de certificación en el MarketPlace.
  13. Y ahora que?. Seguir las estadísticas de la aplicación.

La verdad es que me reservo el derecho a cambiar tanto el orden como el contenido de este índice, tanto añadiendo, como quitando artículos.

Espero que os guste y os sirva.

Charla en Málaga Dnug sobre Windows Phone 7.5 “Mango”

dnug

 

Tengo la gran suerte de que los chicos del club Málaga Dnug me hayan invitado a realizar el próximo día 21 de Septiembre en Málaga, una charla sobre las nuevas posibilidades y las nuevas características que incorpora la versión 7.5 de Windows Phone.

En esta charla hablaremos de Cloud, bases de datos locales en SQL CE, acceso a contactos, nuevas opciones de notificaciones Push, etc…

Lo dicho, os espero el día 21 sobre las 18:30h para estar un par de horas, o lo que el cuerpo aguante compartiendo charla sobre este gran dispositivo.

Aquí tenéis el link con el registro.

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032493810&Culture=es-ES

Nos vemos.

 

Mango

Mejoras de Rendimiento en entornos SQL CE – I

Una de las cosas que debemos de tener muy en cuenta a la hora de trabajar con dispositivos móviles, es el rendimiento. Ya sabemos que pronto saldrán, si es que no lo han echo ya móviles con doble procesador y demás, pero no dejamos de necesitar controlar mas nuestro entorno en un dispositivo móvil que en un equipo de sobremesa.

Últimamente a nadie se le escapa que cualquier desarrollador en entornos de escritorio, sencillos, ha (hemos) dejado un poco de lado esta parte de rendimiento, ordenadores con 8 Gb de Ram, 4 núcleos, etc, etc, hacen que el rendimiento este en tu lista de requisitos bastante alejado de las primeras posiciones.

Como he comentado, nos encontramos con otro tipo de entornos y si queremos hacer buenas aplicaciones empresariales para Windows Phone 7 ya no puede estar el rendimiento al fondo de la lista de requisitos, sino mas bien al contrario, si no es la primera será la segunda.

El uso de SQL CE como base de datos relacional en una de nuestras aplicaciones hace que tengamos a parte un elemento mas de saturación de rendimiento, nuestra aplicación y los propios procesos internos que debe de hacer SQL CE. Pero es bastante sencillo seguir una serie de consejos que aplicándolos nos ahorran bastante tiempo de proceso.

Inserción de Datos.

Nuestro amigo el Insert. Esto que voy a comentar es mas de sentido común que de forma de hacerlo especial para ganar rendimiento.

Pongamos por ejemplo el mapeo de esta sencilla tabla.

[Table]

public class Tabla1

{

    [Column(IsPrimaryKey=true, IsDbGenerated=true)]

    public int ID { get; set; }

 

    [Column]

    public string Nombre { get; set; }

 

    [Column]

    public string Apellidos { get; set; }

 

    [Column]

    public string Email { get; set; }

}

Como digo, una sencilla tabla con 4 campos y clave primaria entera auto incremental.

Si realizamos la inserción por ejemplo de 1000 filas, podemos hacerlo básicamente de 3 formas:

Utilizando InsertOnSubmit y seguidamente realizar un SubmitChanges

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Contexto.Personas1.InsertOnSubmit(Dato);

        Contexto.SubmitChanges();

    }

}

Utilizando también el InsertOnSubmit pero dejar el SubmitChanges para el final

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Contexto.Personas1.InsertOnSubmit(Dato);

    }

 

    Contexto.SubmitChanges();

}

Usar un elemento que sea IEnumerable, utilizar InsertAllOnSubmit y realizar un SubmitChanges.

List<Tabla1> Datos = new List<Tabla1>();

 

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Datos.Add(Dato);

    }

 

    Contexto.Personas1.InsertAllOnSubmit(Datos);

    Contexto.SubmitChanges();

}

Como alguna que otra vez he oído decir a alguien, las cosas se pueden hacer mal, o muy mal y en este caso usar el SubmitChanges tras realizar un InsertOnSubmit, es sin lugar a dudas una opción malísima. Obviamente todo depende de que aplicación estemos desarrollando pero, tenemos que tener en cuenta que reflejar físicamente los datos en la base de datos y no mantenerlo en memoria hasta hacer un Submit final, salvo en casos en donde las transacciones de la información sea primordial es totalmente innecesario. Tenemos que tener en cuenta que el móvil solo lo usamos nosotros. 🙂

Insertando como decimos 1000 registros en 5 ocasiones diferentes el tiempo en realizar cada operación a sido el siguiente:

  Opción 1 Opción 2 Opción 3
1ª Inserción 28.294 ms 422 ms 529 ms
2ª Inserción 33.778 ms 399 ms 394 ms
3ª Inserción 27.331 ms 392 ms 381 ms
4ª Inserción 25.930 ms 504 ms 568 ms
5ª Inserción 26.876 ms 380 ms 390 ms

Es decir usar los métodos 2 y 3 apenas varia el rendimiento, pero estos son un 97% mas rápidos que la opción 1. Ahí queda eso.

En el siguiente post, ya veremos que realizando dos o tres toques sutiles en la definición de nuestras bases de datos, también podremos ganar mucho tiempo.

Creación de Prototipos de Proyectos para Windows Phone.

Este post lo escribi originalmente en mi blog personal el dia 08/08/2011

Cada vez que nos sentamos delante de nuestro ordenador, cada vez que hablamos con nuestro grupo de trabajo o con nuestros compañeros, o porque no cuando queremos mostrar ese proyecto tan molón a nuestro gerente, deberíamos de apoyarnos en un prototipo del mismo. Para ello estos recursos son de lo mejor que podemos usar.

 

Lápiz y Papel.

Como muy bien dice mi amigo Yeray, a nosotros los programadores esto del “Pinta y Colorea”, se nos da fatal pero no se porque razón buscamos rápidamente un lápiz y un papel para expresar nuestros esquemas o nuestras pantallas, en vez de ir al ordenador y garabatear algo con el Paint, por ejemplo. En fin para todo aquel que se sienta mas cómodo con un bolígrafo en la mano puede descargarse estas plantillas:

 Windows_Stencil-2

Los utensilios de UI Stencils aun siendo de pago, la verdad es que merece y mucho la pena disponer de estas plantillas en acero inoxidable para poder dibujar sobre sus blocs o sobre sus pantallas adhesivas, muy pero que muy recomendable para hacer cosas profesionales.

En la web de Jakub Florczyk, podemos encontrar un Pdf con la plantilla de 4 Windows Phone a tamaño natural, al menos tienen el tamaño de mi HTC 7 Trophy, para realizar nuestros prototipos. Descárgalo desde aquí

Algo parecido podemos encontrar en la web de Michael Dorian, en donde en esta ocasión disponemos de una plantilla de 3 pantallas y el espacio necesario para catalogar nuestros prototipos, como lugar donde escribir el proyecto, la pagina, etc.. Se puede descargar directamente desde aquí. Dorian

 

Fuente original para Windows.

Mas adelante hablaremos de recursos ya para aplicaciones de software, pero lo mas importante es disponer en nuestro sistema de la fuente utilizada en la UI de Windows Phone, en este caso la fuente Segoe. Se dispone de dos ramas, por un lado la fuente Segoe UI, que viene preinstalada con Windows y por otro lado la fuente Segoe WP, que es una variante de la anterior y es realmente la que el interface Metro utiliza. Viene incluida en las Tools de Windows Phone para Visual Studio, pero se puede descargar desde aquí.

 

Plantillas para aplicaciones genéricas.

Es fácil encontrar por la red innumerables plantillas para diferentes aplicaciones, pero yo estas para Visio, Powerpoint y Photoshop.

Por un lado las plantillas para Microsoft Visio de Griffin Interactive, en donde se incluyen plantillas para proyectos tanto con Pivot como con Panorama Template, las cuales se pueden descargar desde aquí.

Para PowerPoint disponemos de las plantillas de Think first code later, las cuales podemos descargar para realizar nuestras presentaciones con un fondo como si de una pantalla de Windows Phone se tratara, disponibles aquí. O el tema de Vangos Pterneas, el cual nos permite utilizar en nuestras propias presentaciones y apoyarnos en cualquiera de sus slides, esta presentación esta disponible a través de SlideShare desde aquí.

Y finalmente para Photoshop, existen múltiples recursos, pero uno de los principales y a mi modo de ver el mejor, es el compendio de PSDs del propio equipo de desarrollo de Windows Phone, el cual se puede descargar desde aquí. De nuevo, el amigo Vangos Pterneas, nos regala un par de templates tambien muy interesantes para photoshop, la primera de ellas para pantallas simples tanto en orientación portrait como landscape, descargable desde aquí y otra para pantallas Pivot y Panorama, descargable desde aquí windows-phone-7-panorama Muchas cosas como digo repartidas por la web, pero cabe destacar también estas plantillas para Adobe Illustrator de Clarity Consulting, las cuales se puede descargar desde aquí.

 

Plantillas para aplicaciones de prototipado.

A parte de poder usar aplicaciones de carácter general, para prototipar, podemos usar, obviamente aplicaciones propias para este tema, Aplicaciones de prototipado, existen como todo innumerables pero yo destaco 3, junto con sus correspondientes templates.

Microsoft SketchFlow:

Aplicación de prototipado de Microsoft que viene con la suite Expression, formando parte, como un complemente diría yo de Microsoft Expression Blend, solo disponible con la versión ultimate de Expression Studio (creo). Herramienta bastante buena, sobre todo si manejamos constantemente Expression Blend, muy integrada y bastante completa. Podemos descargarnos los templates para prototipos de aplicaciones en Windows Phone, desde este espacio en Codeplex.

skechflow1skechflow2

Axure RP:

He dicho bien, axure que no azure, es una herramienta de prototipado de todo tipo de aplicaciones, entre ellas como no Windows Phone, para ello podemos descargarnos una serie de templates para tal efecto, creadas por Andrej Skaza, las cuales podemos descargar tanto desde Axureland, aquí, como desde Studio Pesec desde aquí, el cual nos muestra también como podemos montar un ejemplo de web con nuestros prototipos exponerlo al exterior para que nuestro cliente por ejemplo lo pueda ver. Podemos verlo aquí.

Axure

Omnigraffle:

Otra aplicación de prototipado general, en este caso para MAC, muy utilizada por el mundo iOS pero que gracias a Adrian Mendoza y a su Blog Marlin Mobile, podemos descargarnos desde aquí unos templates para desarrollar prototipos de aplicaciones Windows Phone. Omni A parte de todo esto, existen como no templates directos para desarrollar aplicaciones desde Visual Studio, una de las mas completas es el proyecto “Windows Phone 7 Design Templates” alojado aquí en Codeplex. WP7DesignTempltes

Streaming de audio bajo HTML5 en Windows Phone

Este post lo escribí originalmente en mi blog personal el día 04/08/2011

Todos sabemos, y si no ya estoy yo aquí para contarlo, que Windows Phone 7 en su versión 7.5 “Mango” incorpora IE9 como navegador, lo que significa que puede reproducir contenido bajo la nueva revisión del lenguaje básico de la red HTML, lo que es lo mismo puede leer contenido en HTML5.

Hasta ahí casi nada nuevo, pero una de las características que incorporará en su versión definitiva y que aun no incorporaba en la primera beta de “Mango” es la posibilidad de escuchar streaming de audio en background. Es decir podemos entrar en una pagina que contenga un reproductor de medios, el cual reproduzca un archivo de audio y dejar esa pagina en background, (simplemente pulsando el botón home de nuestro teléfono), o incluso con el teléfono bloqueado, para continuar escuchando el sonido.

Pero lo mas atractivo del asunto es que disponemos de un control típico de reproducción de audio, al pulsa por ejemplo el botón del volumen, con lo que podremos parar, avanzar o continuar reproduciendo este archivo o archivos sin necesidad de volver a entrar en la web que lo está reproduciendo.

Pensando, pensando se abren muchas posibilidades con esto, ¿traerá la versión definitiva de Mango el streaming por Skydrive?, con esto se puede pensar que si no lo trae, es porque no han querido, ya que lo tienen a mano. Y si no es así el crearse un reproductor de nuestra propia biblioteca, no debería ser muy complicado. Ummmm.

Es mas, se rumorea que Pandora, con su servicio de Internet Music, en breve incorporaría toda su web bajo el estándar HTML5, con lo que la reproducción estaría servida.

Y como las imágenes (en este caso los videos de Youtube) valen mas que mil palabras, aquí os dejo un video con un ejemplo de lo que acabo de contar a partir del minuto 1.

Creación visual de tablas para el uso con SQL CE y “Mango”.

Este post lo escribí originalmente en mi blog personal el día 03/08/2011.

¿Pero como que creación visual de tablas?, si se nos ha dicho que no, que debemos de picarnos todo el mapeo de nuestras bases de datos para trabajar con el DataContext a mano. Quizás alguna que otra herramienta podría ayudarnos pero poca cosa mas, siempre dependiendo de una base de datos ya existente. ¿No es así?

Pues no, os engañaron, bueno vale: nos engañaron.

Vamos a darles a los chicos de desarrollo de Windows Phone, el margen de la duda y pongamos que simplemente no nos lo han contado así para no liarnos y para no pensar que las cosas están un poquito a medias. Si en el fondo son chicos majos.

Pues SI, si que se puede y además de la manera mas tonta, quizás es que nadie lo ha probado, pero bueno yo creo que es un pequeño truco o apaño, pero mejor que picarnos a mano todo nuestro mapeo, para mi es mas que suficiente. MapeoDbml1

Para ello simplemente creare una aplicación mínima, y mostrare como se tiene que hacer: Creamos nuestra solución en la cual estará incluido obviamente nuestro proyecto de “Windows Phone Application”, a parte de esto crearemos simplemente para apoyarnos en la herramienta, dentro de nuestra solución (no es esto obligatorio) una biblioteca de clases.

Una vez que tenemos este esquema montado, procedemos a crear un nuevo elemento del tipo “Clases de LINQ to SQL”, fichero del tipo “.dbml” en nuestro proyecto de biblioteca de clases. Una vez creado este elemento procedemos a crear las clases de forma visual en nuestro “Object Relational Designer”.

En este ejemplo crearemos dos clases (Tablas) con una serie de propiedades (Columnas o campos) cada una de ellas. Así mismo también crearemos una asociación entre ambas y una clave secundaria en una de ellas para comprobar que mas o menos toda la funcionalidad que nos permite LINQ to SQL en nuestro Windows Phone, la podemos mapear de forma visual desde aquí. El esquema o mapeo de datos quedaría de la siguiente manera:

MapeoDbml2

Una vez realizado el mapeo de forma visual, debemos de fijarnos que junto a nuestro fichero original “.dbml”, existen 2 ficheros mas, el que define el layout del diseñador y el que nos interesa, el fichero con extensión “.designer.cs”. Este es el fichero que contiene todo el mapeo de datos que hemos creado anteriormente de forma visual y es el fichero que vamos a agregar a nuestro proyecto de “Windows Phone”.

Una vez añadido a nuestro proyecto “principal”, simplemente quitaremos un par de constructores que crea por defecto Visual Studio en el DataContext, que por otra parte son los dos mismos constructores que deberemos de quitar si utilizamos la herramienta SQLMetal para crear nuestro mapeo de datos. Estos constructores son los que nos solicita como parámetros de entrada los objetos del tipo “System.Data.IDbConnection”. MapeoDbml3 No deberemos de olvidarnos de agregar la referencia al ensamblado “System.Data.LINQ”, si queremos que todo esto nos funcione.

Punto y final, ya tenemos nuestro mapeo de datos terminado. Ahora a crear la base de datos y trabajar con ella. La única pega, pues que cada vez que queramos modificar nuestra base de datos deberemos de volver a importar nuestro fichero “.designer.cs” y volver a quitar los dos constructores comentados. Que es eso comparado con el trabajo que llevaría mapear a mano una base de datos nueva que sea un poco compleja.

Y para muestra un botón, aquí os dejo una captura de la estructura de base de datos que nos crea nuestro nuevo DataContext y un ejemplo completo de como hacerlo. MapeoDbml4 Ejemplo de como poder hacerlo:

¿ Donde están ahora los datos y las herramientas de terceros ?

Este post, le escribí originalmente en mi blog personal el día 31/07/2011.

Una vez que hemos creado nuestra base de datos mediante SQL CE y LINQ to SQL, según las indicaciones del anterior post, estaría bien acceder a ella y poder verla editarla y manejarla de forma indirecta. Para ello existen diferentes formas de acceder a los datos almacenados en el Isolated Storage de nuestro dispositivo. Así mismo existen también otra serie de herramientas ya encaminadas a SQL CE que también pueden ser de utilidad en nuestros desarrollos.

Acceso al Isolated Storage:

Estas herramientas que voy a describir a continuación nos van a ayudar en el acceso al Isolated Storage de nuestro Windows Phone, no son especificas para SQL CE, sino que se pueden usar siempre y cuando necesitemos acceder, ver y copiar contenido del o al Isolated Storage.

Isolated Storage Explorer Tool

Es una herramienta que viene con el SDK de Windows Phone, aparece con la beta de las herramientas de desarrollo para “Mango”. Esta herramienta interna de Microsoft nos va a ayudar a listar, copiar y reemplazar ficheros y directorios del Isolated Storage se puede usar tanto para visualizar el contenido de nuestro emulador, como para visualizar el contenido de un dispositivo físico.

Como toda aplicación de línea de comandos es un tanto liosa, pero bueno, lo mejor es comenzar a saber como utilizar este tipo de herramientas antes de usar herramientas mas visuales de terceros que nos puedan facilitar mas la vida. Simplemente debemos de dirigirnos desde el prompt al directorio en donde esta el ejecutable “ISETool.exe”, que normalmente será: «c:Program FilesMicrosoft SDKsWindows PhoneV7.1ToolsIsolateStorageExplorerTool”, casi nada. Una vez allí simplemente deberemos de lanzar dicho ejecutable con la siguiente estructura:

ISETool.exe <ts|rs|dir[device-folder]> <xd|de> <GUID> [<desktop-path>]

Y esta es la explicación de los opciones posibles.

Parámetro Descripción
ts Copia de ficheros y directorios en el Isolated Storage al ordenador.
rs Reemplaza los ficheros y directorios del Isolated Storage desde el ordenador.
dir Listado de ficheros y directorios del directorio especificado del Isolated Storage
device-folder Directorio del Isolated Storage a manejar.
xd Indicamos que las funciones serán sobre el emulador.
de Indicamos que las funciones las realizaremos sobre un dispositivo físico.
GUID Especifica el ProductID de la aplicación. Este dato esta contenido en el fichero WPAppManifest.xml
desktop-path Especifica el directorio del ordenador, en donde copiaremos o de donde reemplazaremos los ficheros del Isolated Storage

En nuestro caso anterior, copiaremos el contenido del Isolated Storage de nuestro emulador, al ordenador para ver si nos ha generado correctamente el fichero .sdf de nuestra base de datos. Para ello bastaría con ejecutar la sentencia:

ISETool.exe ts xd 0368a47f-5c90-4363-9194-b5c1da3f6218 “C:WP7”

Con esta “sencilla” instrucción ya tenemos en nuestro directorio WP7 de nuestro disco C, todo el contenido del Isolated Storage del emulador.

 ISETool1

Debemos de tener en cuenta dos cosas mas; Esta herramienta nunca nos copiara las “application settings” guardadas en nuestra aplicación, y lo mas importante es que debemos de ejecutar la línea de comandos con los mismos privilegios que hayamos ejecutado el emulador, en nuestro caso, ya que si no lo hacemos así no nos funcionara.

Una vez hecho esto ya tenemos todos los datos contenidos en el Isolated Storage en nuestra carpeta indicada. La utilidad nos guarda todos estos datos dentro de una carpeta llamada “IsolatedStore” dentro de la ruta especificada que le hayamos dado para guardarlo.

ISETool2

En la esta pagina de MSDN podemos ver un poco mas en profundidad la forma de utilizar esta herramienta.

Windows Phone 7 Isolated Storage Explorer

Una vez que nos hemos pegado con la línea de comandos, siempre es bueno volver a recordar nuestra época de MS-DOS, podemos instalar esta pequeña aplicación, que es a la vez una aplicación y un plugin para Visual Studio.

Es una herramienta de terceros hospedada en Codeplex.

Su utilización es muy sencilla, y realmente son de estas aplicaciones que le hacen a uno la vida bastante mas sencilla, tanto por su fácil e intuitivo manejo como por todo lo que nos aporta. Simplemente debemos de descargarnos el fichero de instalación de Codeplex y realizar la típica instalación de la triple N (Next, Next, Next). Una vez instalado lo único que debemos de cambiar es una serie de líneas en aquellas aplicaciones en las que queramos utilizar dicho complemento.

Para ello basta con referenciar el ensamblado que viene con la instalación “IsolatedStorageExplorer.dll” y añadir dos sencillas llamadas en nuestro App.xaml.cs. La primera en el procedimiento launching

private void Application_Launching(object sender, LaunchingEventArgs e)

{     IsolatedStorageExplorer.Explorer.Start(“Localhost”);

}

y la segunda en el procedimiento de Activated

private void Application_Activated(object sender, ActivatedEventArgs e)

{     IsolatedStorageExplorer.Explorer.RestoreFromTombstone();

}

Lo único que tenemos que tener en cuenta es que en el primer caso, el procedimiento del “Launching” es en el que debemos de indicarle la IP de la maquina en donde estará corriendo la aplicación a “visualizar”, en este caso como vamos a ver directamente el emulador, este se encuentra en la misma maquina que al Explorer con lo que con poner “Localhost” es suficiente. Tras esto tanto en la aplicación de escritorio (ojo abrirla después de arrancar la aplicación), como en el plugin de Visual Studio tendremos acceso al Isolated Storage de nuestra aplicación. Podremos copiar archivos desde y hasta el Isolated Storage, crear carpetas, borrar ficheros, etc… IsolatedStorageExplorer Un herramienta sencilla pero bastante productiva.

Manejo de SQL Server CE.

Estas otras herramientas están mas enfocadas al manejo de SQL Server CE y a sus bases de datos, no son de carácter general como las anteriores, pero nos ayudaran en la gestión y administración de las bases de datos sdf.

SQL Metal.

Herramienta de línea de comandos que viene con el SDK de .NET. En este caso dicha utilidad se encuentra en el directorio “Program FilesMicrosoft SDKsWindowsv7.0Abin”, (esta dirección depende de la versión del framework y de Visual Studio que tengamos instalado) y nos ayudara a generar nuestras entidades de mapeo, para nuestros objetos en .NET. SQL Metal no es una herramienta especifica para Windows Phone, sino que genera a partir (y esto es muy importante) de un fichero de base de datos las clases necesarias para poder utilizar LINQ to SQL.

Como comento anteriormente genera dichas clases a partir de un fichero dado, es decir debemos de disponer de un fichero para poder generar las clases de entidad de dicho fichero. Así mismo como he comentado también, no es especifico de un motor de base de datos sino que funciona tanto para BBDD de SQL Server, como SQL Server Compact Edition.

Pongamos un ejemplo; A partir de la base de datos de ejemplo “Northwind”, típica base de datos de ejemplo proporcionada por Microsoft, la cual en su versión para SQL Compact podemos encontrar en “Program FilesMicrosoft SQL Server Compact Editionv3.5Samples”, generaremos las clases necesarias para poder utilizar LINQ to SQL en nuestro Windows Phone.

No es mi intención en este Post adentrarme muy de lleno en esta herramienta, ya que es bastante densa, simplemente generaremos un fichero con las entidades correspondientes a la base de datos anterior. Para ello lanzaremos la siguiente instrucción en la línea de comandos:

Sqlmetal.exe “C:Program FilesMicrosoft SQL Server Compact Editionv3.5SamplesNorthwind.sdf” /code:”C:MiProyectoMapeo.cs” /language:csharp /namespace:NortwindNS /context:NortwindContext

Con esto ejecutamos la utilidad y nos va a generar un fichero en CSharp, denominado Mapeo.cs, en el directorio C:MiProyecto de la base de datos Nortwind.sdf, creando dichas clases bajo el espacio de nombres NortwindNS y nos creara además una clase para el contexto de datos denominada NortwindContext. SqlMetal1

 

Solo existe una pequeña pega, y es que el código generado por SQLMetal no es 100% compatible con un proyecto para Windows Phone, pero es bastante fácil de solucionar, basta con eliminar dos de los constructores de la clase del contexto de datos, en donde se indica un objeto del tipo System.Data.IDbConnection. Quedándonos con los constructores que nos solicitan un objeto del tipo string para la conexión.

SqlMetal2 Para un mayor control de esta utilidad basta con acudir a la pagina de MSDN que trata sobre el tema.

SQL Server Compact Toolbox:

Esta herramienta que está hospedada en Codeplex, es obra del danés Erik EJ, MVP de SQL Server Compact, y nos va a permitir manejar nuestra base de datos de SQL Server Compact, desde un plugin de Visual Studio o desde una aplicación independiente.

Nos permitirá realizar sentencias T-SQL sobre nuestra base de datos, grabar los scripts de creación de la base de datos y del volcado de datos, generación de las clases y del contexto de datos al igual que SQL Metal, pero enfocado completamente a Windows Phone, etc….

SqlServerTool Es bastante recomendable así mismo seguir el Blog de Erik EJ, para enterarnos de alguna que otra cosa con respecto a la gestión y utilización de SQL Server Compact tanto para entornos de escritorio como para entornos móviles Windows Phone 6.x y Windows Phone 7.

Existe en la web muchas otras herramientas para la gestión y el manejo de Sql Server Compact, pero a mi modo de ver estas dos son las mas importantes, una porque viene con Visual Studio y la otra porque para ser gratuita es una herramienta muy eficaz y de gran utilidad.

Nota: «¿Dónde están ahora el caballo y el caballero? ¿Dónde está el cuerno que sonaba? ¿Dónde están el yelmo y la coraza, y los luminosos cabellos flotantes? ¿Dónde están la mano en las cuerdas del arpa y el fuego rojo encendido?…. “: Extracto del poema sobre Eorl, fundador de Rohan, recitado por Aragorn a Legolas en su camino hacia Edoras.