martes, 27 de marzo de 2012

Hablando del Estilo Metro en Mobile Monday Medellín

Ayer estuve en el Mobile Monday Medellín (#MomoMed en Twitter), nuevamente representando a Avanet y hablando acerca del Estilo Metro desde las implementaciones en Windows Phone y Windows 8, les comparto las diapositivas de mi exposición, se veían mucho mejor con las animaciones de Power Point pero espero les resulten de utilidad.

Actualización: Ahora también está disponible el video de mi charla


Siempre me resulta muy agradable hablar de los principios del estilo Metro y como Microsoft se ha dado a la tarea de poner gente y las nuevas interacciones entre personas a través de los diferentes servicios de redes sociales, antes que los escritorios llenos de iconos en nuestros dispositivos móviles.

Además no hay mejor forma de conocer Metro que ver algunas de las aplicaciones que ya les he recomendado antes en mi blog, analizando la forma en que Metro lleva a los desarrolladores, diseñadores y dueños de aplicaciones a pensar en la recordación de marca, la facilidad de uso, la generación de contenido gráfico y con significado, y la redistribución del mismo de formas atractivas e intuitivas.

En esta ocasión y después de haber participado recientemente en el Developer Camp de Windows 8 por hacer parte del programa MCS, les compartí como Metro sigue siendo la filosofía base, y como ha sido la evidente evolución de Microsoft con Metro que hace que se vayan acentuando los conceptos que se presentaron inicialmente para Windows Phone y que crece entornos de mayores dimensiones y capacidades como lo son las tabletas, computadoras personales y portátiles.

La primera idea, dejar el miedo a los espacios vacíos. pasar de las experiencias complejas de las aplicaciones actuales y re-imaginarlas de formas simples, dando protagonismo al contenido, planeando rutas de navegación y ofreciendo niveles de visualización de los datos, intermedios y detallados, y usando la nueva propuesta de zoom semántico, además de la posibilidad de compartir y comunicarse con el usuario aun fuera de la aplicación, permitiendo que el usuario se concentre en lo que hace, dejando las operaciones complementarias fuera del contenido y pensando en que nuestra aplicación pueda adaptarse para permitir el trabajo de forma simultánea.

Lo mejor de todo con Windows 8 y que no mencioné en mi charla es que si trabajas con tecnologías .NET hacer aplicaciones Metro solo dará continuidad a tu trabajo y si no, podrás usar HTML 5 y CSS3 y hacer que tus aplicaciones se vean exactamente igual a las creadas con tecnologías .NET sin ningún esfuerzo adicional, y las expectativas que se tienen es que esto un día sea igual para Windows Phone.

Los siguientes son algunos apartados de Centro de Desarrolladores de Windows y el Blog de Windows para Latinoamérica, que confirman, detallan y amplían, los conceptos de los que antes les he hablado.

  • Las aplicaciones estilo Metro comparten un conjunto de rasgos que conforman una experiencia del usuario coherente, elegante y atractiva
  • Las aplicaciones estilo Metro son inmersivas y sin contenedor visual, por lo que llenan la pantalla completa y no provocan distracciones. 
  • Las aplicaciones estilo Metro trabajan en colaboración, lo que hace que sea fácil buscar, compartir y enviar contenido entre ellas. 
  • En las aplicaciones Metro las animaciones no son solo adornos Los tiles o mosaicos son una extensión de las aplicaciones, y deben usarse para mantener conectados a los usuarios con la aplicación e invitarlos a usarla. 
  • El movimiento es una parte fundamental del lenguaje de diseño Metro. Unas animaciones bien diseñadas dan vida a las aplicaciones y ofrecen una experiencia que se percibe elaborada y elegante. Usa animaciones con propósito para enlazar las experiencias visuales y contar una historia. En una interfaz fluida, todo viene de algún lugar y va a algún lugar.

Además les comparto este video también del Centro de Desarrolladores de Windows en el cual se mencionan los 8 principios que deberán seguir las aplicaciones Metro en  Windows 8.

 

Espero que todo esto les sea útil y empiecen a animarse a intentar hacer sus propias aplicaciones, ahora para Windows 8.

Sorey

miércoles, 21 de marzo de 2012

Con Windows 8 en Versión Beta TV

Una vez más gracias a los amigos de Versión Beta TV por la invitación a su programa, esta vez para hablar un poco sobre Windows 8 :)


Watch live streaming video from puntolink at livestream.com

lunes, 19 de marzo de 2012

Manipulando Contenedores de Windows Phone en Expression Blend

En este video les explico brevemente como manipular algunos contenedores básicos de Windows Phone usando Expression Blend. Estos controles contenedores son muy usados y aprenderlos a manejar nos ayuda a aprender a distribuir mejor los elementos de nuestras aplicaciones Windows Phone.

Los controles que les explico en el video son:

Canvas: Este contenedor permite mostrar elementos hijos en coordenadas específicas.
Grid: Este contenedor permite crecer filas y columnas para mostrar elementos hijos.
StackPanel: Este contenedor permite mostrar elementos secundarios en una línea, ya sea horizontal o verticalmente.
ScrollViewer: Este contenedor permite desplazarse para mostrar un elemento hijo que tiene una superficie superior.


Espero que les sea útil

Sorey

Más ejemplos de buenas implementaciones del estilo Metro en Windows Phone

Después de mi primer post sobre Ejemplos de buenas implementaciones del estilo Metro en el Marketplace de Windows Phone, varios me han recomendado algunas aplicaciones. En este nuevo post les menciono algunas de las que me gustaron a mi y espero que nuevamente les sirva de inspiración para sus propias aplicaciones. Si no sabes que es el estilo Metro de invito a que lo leas antes en mi post.

To Do: Esta es una aplicación de Telerik, una de mis compañias favoritas para controles de .NET (aclaro que este post no es pago o nada por el estilo). Esta aplicación es uno de los varios ejemplos que tienen para mostrar sus controles. Lo que más me gusta de su implementación Metro es que se atreven a proponer el uso de figuras diferentes a los cuadros que son tan típicos además de aplicarles inclinaciones, por otro lado la aplicación visualmente es bastante alegre y divertida, y no es monótona, no conserva el mismo estilo en todas las ventanas.


Cine Colombia: Esta es una aplicación de Colombia (mi pais), a mi particulamente me ha gustado la implementación que hicieron en la mayoría de las páginas de la aplicación, definitivamente un muy digno representante del buen trabajo hecho en casa ;)


Flickr: Confieso que por alguna razón los fondos de la aplicación no me gustaron mucho al principio, teniendo en cuenta que solo pensar en Flickr te genera un montón de sensaciones por la cantidad de buenas imágenes que encuentras, sin embargo esta aplicación esta totalmente alineada con la marca y resulta muy cómodo usarla para explorar las cosas bonitas de este servicio, lo que de alguna forma te hace pensar en todo ese ecosistema de conceptos e implementación que es Metro. Esta fue una de las sugerencias que hicieron en mi post en MiWindowsPhone.Net


Social Mints: Esta aplicación la encontré accidentalmente en el Marketplace, nunca la he usado sin embargo su icono me causó curiosidad y entré a ver las pantallas de muestra. La verdad que no sé que tan cómodo resulte usar frecuentemente una aplicación con estos colores pero, creo que no es ahí donde me centro al decir que es una buena implementación de metro, quizá me gusta por que lo considero algo diferente, como ya he resaltado en otras ocasiones, Metro no indica que debemos usar siempre cuadros y parecer un ejercito de aplicaciones todos uniformados, se dan unos puntos claros con los principios y filosofía Metro, pero igual indican que está igual colocar la marca y el estilo personal y yo creo que esta aplicación se atreve a poner este toque, de verdad muy bonita y llama la atención solo ver las imágenes de muestra, provoca descargarla y finalmente eso es l que queremos que suceda con nuestras aplicaciones.


TuneIn Radio: Ayer estuve mirando una aplicación que me recomendaron, me pareció bonita al abrirla pero no pensaba colocarla aquí, después de varios minutos usándola, sencillamente solo pensaba en una cosa "Metro". Es increíble la forma tan intuitiva como se manipula esta aplicación, todo está claramente identificado y a pesar de la cantidad de información a mostrar todo está muy bien distribuido. La verdad verla no es tan bueno como usarla, así que los invito a usarla y a seguirla de ejemplo.


Espero que les hayan gustado estas recomendaciones y que sigan dejando las suyas, hasta la próxima.

Sorey

domingo, 18 de marzo de 2012

Coding4Fun - Controles Open Source para Windows Phone

Bueno les escribo esta vez para contarles sobre un proyecto Open Source para Windows Phone llamado  Coding4Fun, otro de esos buenos aportes que le dan un plus a desarrollar aplicaciones para Windows Phone y es que muchos siguen con la idea errónea de que desarrollar usando tecnologías Microsoft es supremamente costoso, pero Windows Phone es una clara muestra de que, de hecho es absolutamente gratuito y proyectos Open Source como los disponibles en  Codeplex solo confirman lo positivo que logra ser generar comunidad de Software Libre también alrededor de este tipo de tecnologías.

Muchos de los que trabajamos con aplicaciones Winforms o ASP.NET tradicional estamos acostumbrados a tener muchos controles disponibles, provistos por Microsoft para construir nuestras aplicaciones, sucede que cuando llegas a XAML la situación cambia un poco, y aunque el paradigma mental te dice que no será tan divertido, con el tiempo, se vuelve así y más, al poder crear con los controles básicos disponibles, muchas combinaciones para presentar contenido en tus aplicaciones WPF, Silverlight,  Windows Phone  y ahora Metro con Windows 8, pero sobre todo se vuelve útil cuando entendemos el enlace de datos de XAML.

Sin embargo, los controles básicos hacen falta y aunque se vuelve fácil y hasta divertido desde mi punto de vista construir interfaces usando XAML, la mayoría de veces requerimos algunos de esos controles típicos a los que estábamos acostumbrados y que damos por hecho que existen, si bien no que funcionen de la misma forma, si que ofrezcan lo que necesitamos para obtener o mostrar un dato a un usuario.

El equipo de Silverlight ha publicado ya en Codeplex uno de estos paquetes de controles el Silverlight for Windows Phone Toolkit, el cual incluye selectores de fecha y hora, un contenedor nuevo llamado Wrap Panel, que nos permite dar una excelente distribución a los elementos, un textbox con autocompletar entre otros.

Pues bien Coding4Fun es otro paquete de controles disponible en Codeplex y por tanto Open Source, así que nos podrá servir en 2 vías, tanto para usarlo como para aprender a hacer nuestros propios controles, o bien para aportar a este u otros o proyectos Open Source.

Coding4Fun contiene varios controles muy útiles como el dialogo "Acerca de" para nuestra aplicación con el AboutPrompt, el cual tiene una lista de items en los cuales podemos mostrar los nombres de los desarrolladores de nuestras aplicaciones de forma individual.


Además tenemos un control que los programadores de antaño extrañamos y es el InputPrompt, ya que podemos capturar un dato simple a través de un mensaje sencillo.


Otro control de todo mi gusto son los RoundButton, botones circulares estilo metro, para no desgastarnos en eso de construirlo y poderlos usar en un lugar diferente al Application Bar.


Les comparto los enlaces de la documentación oficial de los controles a la fecha y los invito a conocerlos y usarlos en sus aplicaciones.

Controles

Convertidores

Hasta la próxima

Sorey

Sobre la docencia de Ingeniería de Software y Programación

Bueno, siempre tiendo a escribir sobre aquello que me pasa o me pone a pensar, en esta ocasión además de llevar varios dias pensando esto, me han llegado varios mensajes de docentes de otros paises pidiendo consejos sobre que deberian hacer en sus clases de Ingeniería de Software y Programación Orientada a Objetos, temas por los que accidentalmente llegan a mi blog.

Pues bien, la verdad es que no soy ni menos la indicada para dar consejos, en agosto cumplo apenas 7 años de ser docente y cada semestre, cada universidad y cada grupo que he tenido ha representado una experiencia diferente cada una con sus retos y particularidades. 

Sin embargo la mayoría de ellos mantienen una tendencia que es creciente conforme pasan los años y es el desinterés por temas abstractos como lo son la programación y por temas teoricos como lo son las disciplinas relacionadas con la ingeniería de software.

Viéndolo así uno se pregunta reiterativamente, ¿qué es entonces lo que esperaban aprender los adolescentes que eligieron por profesión esta carrera si esos temas no les gustan? 

Es una tendencia mundial que las personas interesadas en temas relacionados con la ingeniería de sistemas o informática sean cada vez menos, el deficit de profesionales es creciente, y por el contrario el numero de personas que quieren hacer programas de computador sin profesionalizarse si va en aumento. Pues bien, repito mi pregunta, los pocos que han elegido profesionalizarse ¿qué era lo que esperaban encontrar? 

Quizá el tema de la consumerización de IT que tanto preocupa a las empresas por estos dias tenga variada incidencia tambien en el ámbito académico, el hecho de que los jóvenes accedan a tecnologías de última generación en su infancia temprana, hace que se manifieste un interés por hacer parte de esta industría, pero no todos son concientes al tomar esa decisión que hay un gran brecha entre ser usuario de la tecnología y ser parte de aquellos que la construyen, por variadas situaciones que entienden quienes llevan años en esto tratando de no improvisar si no de crear mejores practicas adaptables a los diferentes escenarios en la construcción de software.

Pues bien, volviendo al tema de la academia y la docencia, el tema supone un gran reto para nosotros los docentes, mantener la atención de los estudiantes mientras luchas con su deficit de atención al estar permanentemente conectados a redes sociales desde sus dispositivos móviles o el los equipos de computo destinados a su formación, se vuelve aún más complejo.

Por otro lado, parece una constante tambien que los temas que resultan de mayor complejidad han dejado de tener atractivo para muchos y es así como las materias que implican lógica y razonamiento abstracto resultan ser las menos apetecidas en las ingenierías, y por el contrario muchos se inclinan por temas de hadware y mantenimiento de equipos de computo, además de temas de redes e infraestructura, y entonces ¿Qué va a pasar con el software? 

Hace poco en una reunión comentaba a los asistentes como hoy en día temas como el emprendimiento están en boca de todos, todos creen y quieren tener la idea que los hará millonarios, la mayoria de esas ideas estan apalancadas en herramientas tecnológicas, razón por la cual en su camino a la riqueza buscan "hacedores", si, personas que saben de tecnología, que saben construir software, y eso, bajo lo anteriormente planteado hace que el numero de hacedores profesionales sea cada vez sea menos, y pues bien, para muchos está el tema de que si va en aumento el número de empíricos, de hecho muchos de esos mismos emprendedores inician el camino de aprender como hacer la cosas por si mismos. Lo que termina pasando con el tiempo es que van aprendiendo paulatinamente de todos los errores que se pueden cometer en esto de hacer software, recorriendo los equivocados caminos que muchos ya habian recorrido y para los cuales habian al menos acercamientos y propuestas de mejores practicas en el ambito academico y empresarial, pero que nunca conocieron, por que nunca les interesó.

Como explico en mis charlas sobre ingeniería de software, nadie en su sano juicio se atrevería a extraerse el apendice por encontrar un video tutorial en internet, de hecho lo que harían es recurrir a un experto. Ya quisieramos los ingenieros de sistemas y/o informática que nuestra profesión tuviese ese nivel de reconocimiento y respeto, mientras tanto a nosotros nos tildan de "solo" Geeks, Nerds y gente extraña que parecen robots por tener poca vida social y pasarsela pegados permanentemente a aparatos.

Así pues, en mi experiencia como docente, lejos de puntualmente cada uno de los ya demasiados y diferentes intentos por conectar a la gente, me deja como reflexión que el tema es bastante complejo, y se ve afectado también por la clase de docentes que terminan siendo personas meramente academicas, y que si bien algunos ponen su esmero en ello, se han quedado en teorias desde los libros, que aunque son el fundamente de todo, hoy en dia ya no son lo único y tampoco logran cubrir las necesidades de empresas o de los tipos de proyectos de emprendimiento que tanto motivan a las generaciones actuales.

¿Qué hacer? ¿Que acciones tomar desde la academia? ¿Desde el rol individual de docente? La verdad es que me resulta difícil como persona responderlo y me entristece como la academia intenta resolverlo en mil foros cuyas memorias quedan en el olvido sin tener impacto sobre las empresas o esos nuevos entornos que se están gestando.

Sobre los consejos, para quienes me han escrito, disculpen si antes hice este preámbulo, lo que sucede es que probablemente solo les terminaré contando mis intentos unos más infructuosos que otros, mucho más que darles consejos, pero creo que serán ya para otro post.

Hasta la próxima

Sorey

Navegación y nombres cortos para Uris en Windows Phone

A través de este video aprenderas a navegar entre páginas en Windows Phone, enviando parámetros de una pagina a otra. Además hay un ejemplo sencillo acerca de como de usar un UriMapper para acortar las direcciones (Urls) de los recursos de la aplicación, tema que te recomiendo estudiar y ampliar para mejorar la mantenibilidad y evolución de tu aplicación.


Recuerda considerar que la navegación entre páginas en Windows Phone es circular, sin embargo el blog de desarrolladores de Windows Phone, te ofrecen una alternativa a este tipo de navegación.

La recomendación para ambas opciones es que planifiques muy bien las rutas de navegación entre tus pantallas y procures que el usuario no se confunda además de no entorpecer la tarea que se encuentra realizando.


Este tema pueden repasarlo también en el paso a paso que existe en Channel 9. Espero les sea de utilidad, hasta la próxima.

Sorey ;)

Mostrando una lista de coordenadas en un Mapa de Bing en Windows Phone

Continuando con nuestra serie de post sobre Mapas de Bing, vamos a continuar personalizando los pushpin o marcadores de nuestra aplicación Windows Phone.

Para esto vamos a graficar una lista de puntos fijos (en el post) pero que bien pudimos haber obtenido a través de un servicio que haga parte del back end de nuestra aplicación, y para obtener esos puntos vamos a usar el emulador


Seleccionamos la opción guardar para almacenar las coordenadas en nuestro disco.


En el archivo de coordenadas veremos algo como esto.

Si recuerdan nuestro objetivo es que los puntos alrededor queden con un estilo diferente a nuestra posición actual, por eso debemos repetir los pasos del post donde aprendemos a personalizar los pushpin antes de empezar a crear nuestro demo, en el caso de este pushpin que no tiene texto al interior, pueden colocar como contenido en la plantilla simplemente una imagen, pero no olviden colocar las dimensiones del pushpin.


Bien, ahora al nivel de la clase de nuestro ejercicio anterior, vamos a declarar para propósitos de este ejercicio un diccionario.

Luego en el constructor agregamos datos a la lista y vamos a graficarlos cuando la pantalla esté cargada, por lo que debemos suscribirnos al evento Loaded de esta.

Y lo implementamos para que muestre los puntos de la lista, usando nuestra plantilla nueva para el pushpin y estamos usando la propiedad Content para almacenar la clave, ya que este ejemplo no usamos el Content para mostrar algo como si lo hicimos en el  ejercicio anterior .

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            foreach (int key in this.placesList.Keys)
            {
                Pushpin newLocation = new Pushpin();
                newLocation.Template = (ControlTemplate)(App.Current.Resources["PushpinSuggested"]);
                newLocation.Content = key;
                newLocation.Location = this.placesList[key];
                map1.Children.Add(newLocation);
            }

            watcher.Start();
        } 

Como pueden ver además cambié el momento del inicio del Servicio de Localización para este momento cuando ya esten los lugares que queremos marcar, puestos en el mapa. De esta forma vemos los puntos en nuestro mapa.


Espero que sigan completando este demo de Mapas de Bing y aprendiendo, hasta la próxima.

Sorey

sábado, 17 de marzo de 2012

Archivos básicos, Orientación, System Tray, AppBar y Tipos de Teclado en Windows Phone

En este video podrás aprender algunas indicaciones básicas sobre la orientación de tu aplicación en el teléfono, el System Tray, el Application Bar y los tipos de teclado disponibles para controlar la entrada de datos a tus aplicaciones.

El System Tray es una barra que aparece en la parte superior del teléfono mostrando diferentes indicadores.

El Application Bar es la barra que se puede establecer en la parte inferior de las páginas con el fin de ofrecer opciones adicionales o navegación a otras páginas. Es preferible usar el Application Bar antes que botones en la pantalla, ya que cuando el teclado se muestra la barra de aplicación sigue siendo visible

Con los tipos de teclado puedes ayudar al usuario a ingresar fácilmente el contenido en un Textblock de acuerdo al propósito del mismo, para conocer los diferentes tipos de teclados existentes en Windows Phone visita MSDN.


Como dato adicional en el video te explico los archivos iniciales de un proyecto de Windows Phone, estos archivos son:

App.xaml / App.xaml.cs
Define el punto de entrada de la solicitud, se inicializa con ámbito de aplicación de los recursos, y muestra la interfaz de usuario de la aplicación

MainPage.xaml / MainPage.xaml.cs
Define una página con la interfaz de usuario de la aplicación

ApplicationIcon.png
Un archivo de imagen con un icono que representa el icono de la aplicación en la lista de aplicaciones del teléfono

Background.png
Un archivo de imagen con un icono que representa el icono de la aplicación en la pantalla de inicio

SplashScreenImage.jpg
Esta es la primera imagen que se mostrará al iniciar la aplicación. La pantalla de bienvenida da al usuario información inmediata de que la aplicación está poniendo en marcha y permanecerá encendida hasta que el de navegación a la primera página se ha completado. Su pantalla de inicio puede ser similar a la primera página con el fin de dar la apariencia de que la aplicación se carga rápidamente.

Propiedades \ AppManifest.xml
Un archivo de manifiesto de la aplicación necesario para generar el paquete de aplicaciones

Propiedades \ AssemblyInfo.cs
Contiene el nombre y versión de los metadatos que se incrusta en el ensamblado generado

Propiedades \ WMAppManifest.xml
Los metadatos que contiene la información del teléfono de aplicaciones como el título, ubicación del icono, capacidades, etc

Referencias carpeta
Lista de las bibliotecas (Ensamblados o Assemblies) que prestan servicios y la funcionalidad que requiere la aplicación para poder trabajar

Espero que les resulte de utilidad, hasta la próxima.

Sorey

jueves, 15 de marzo de 2012

Iniciando el desarrollo para Windows Phone

Un video para empezar a conocer las herramientas que necesitamos para iniciar con el desarrollo de aplicaciones para Windows Phone


Rutas de descarga
Windows Phone SDK 7.1: 
http://www.microsoft.com/download/en/details.aspx?id=27570
Update SDK 7.1.1: http://www.microsoft.com/download/en/details.aspx?id=29233


Windows Phone SDK incluye lo siguiente
  • Microsoft Visual Studio 2010 Express para Windows Phone
  • Windows Phone Emulator
  • Ensamblados de Windows Phone SDK 7.1
  • Silverlight 4 SDK y DRT
  • Extensiones de Windows Phone SDK 7.1 para XNA Game Studio 4.0
  • Microsoft Expression Blend SDK para Windows Phone 7
  • Microsoft Expression Blend SDK para Windows Phone OS 7.1
  • Cliente de Servicios de datos de WCF para Windows Phone
  • Microsoft Advertising SDK para Windows Phone
Es importante que conozcas Expression Blend y le saques el mayor partido, identificando cuales son las funciones que tiene versus Visual Studio


Requisitos del sistema
  • Sistemas operativos compatibles:Windows 7;Windows Vista
  • Windows® Vista® (x86 y x64) con Service Pack 2, todas las ediciones excepto Starter Edition
  • Windows 7 (x86 y x64), todas las ediciones excepto Starter Edition
  • Para la instalación se requieren 4 GB de espacio de disco disponible en la unidad del sistema.
  • 3 GB de RAM
  • Windows Phone Emulator requiere una tarjeta gráfica con funcionalidad DirectX 10 o superior y un controlador WDDM 1.1
Les recomiendo revisar además mis post sobre el Marketplace Test Kit y el Windows Phone Performance Analysis

Hasta la próxima


Sorey

miércoles, 14 de marzo de 2012

Consejos para freelance en desarrollo de software

Empezaré este post por decir que ni mucho menos soy experta en este tema, recien estoy ofreciendo servicios freelance para aplicaciones en Windows Phone y sitios web en MojoPortal, pero me gusta escribir sobre las cosas que me preguntan y compartirlas con personas a quienes algunos consejos empíricos podrían ayudarles.

Los que me conocen saben de mi amor por las mejores prácticas de Ingeniería de Software, pero la vida es la vida, y lo ideal es lo ideal, y la teoría es bonita, pero no aplica en todos los ámbitos, sin embargo antes de continuar no voy a dejar de invitarlos a leerse algunos de mis post y reflexiones sobre ingeniería de software.

¿Que tanto nos permite cada escenario aplicar mejores práctica? es tema de otro post, sin embargo haciendo pauta publicitaría a las buenas practicas los invito a conocer Personal Software Process (PSP) para aprender variadas cosas útiles. Aquí trataré de mencionar algunas ideas sencillas para tratar de no ser embaucados o salir tan mal librados de un contrato de construcción de software por internet.

Si hablamos bien, si escribimos mejor: No hay mejor consejo que darles, por favor, no se metan en lios sin necesidad, la buena práctica de escribir los correos con las conclusiones de una reunión o confirmando que algo que no es muy claro lo entendimos, nos puede librar de más de un dolor de cabeza. Escuchar a su cliente es tan importante como cuidarse ustedes mismos de un mal entendido, que podría provocar reprocesos u horas extras no pagas. Por favor guarden ordenadamente respaldos de sus correos por Cliente y por Proyecto, esto ante un proyecto problema servirá de muchísima ayuda.

Muchas de estas contrataciones son informales, pero no por que lo sean significa que no tenemos derechos y obviamente deberes, si bien en muchas ocasiones no tenemos un contrato legal, es importante que al conocer cual es nuestra labor, sea un cambio, afinación o construcción de algo nuevo, dejemos en un pequeño documento (si pequeño para que el cliente lo lea y valide de verdad), los acuerdos y el consenso al que se llegó con las funcionalidades acordadas, este documento lo podemos ir refinando a medida que vamos avanzando en la estimación de tiempos y siempre trataremos de pedir amablemente al cliente que lo valide, si no lo hace aduciendo que confía en nosotros, sería preciso justamente mostrarle que el documento es una evidencia de que queremos hacer las cosas bastante bien. Solo eviten hacer de este proceso de validación algo complejo, ya que el exceso de protocolo es algo con lo que algunos de estos "tipos de clientes" podrían no identificarse.

Y si el problema es que esté en un documento, envíe el texto en uno o varios correos y vaya obteniendo la aprobación de cada uno de los puntos.

¿Como sabemos cuanto cobrar?: Creo que este es el tema que más nos duele como freelance, cuanto cobrar sin que el cliente me diga no y sin tener que regalar mi trabajo. La verdad es que es bastante difícil medir esto, hasta las mejores casas de software se equivocan haciendo presupuestos y flujos de caja. Cobrar un trabajo de software tiene muchas implicaciones, de tiempo, de materiales (si, papel, internet, la depreciación misma de nuestros equipos de computo) como encontrar un punto equilibrado, creo que solo lo va ajustando el tiempo, si nosotros conocemos nuestro trabajo y cuanto tiempo tardamos en ejecutar una actividad es probable que cada vez seamos más precisos en determinar un proyecto nuevo cuanto esfuerzo podría tomarnos y eso lo pueden aprender ejecutando PSP, así que no olviden leer sobre eso.

Pero bueno, si yo no sé PSP y mucho menos tengo historia de las cosas que he realizado ¿que puedo hacer? Voy a tratar de listarle algunos pequeños consejos desde mi óptica.
  • Enumere en forma detallada las funcionalidades que tiene que construir, no escatime en detalles si una funcionalidad del sistema le parece que lleva varias funcionalidades considerables dentro, enumere cada una de ellas hasta que sienta que ve la funcionalidad y puede determinar su complejidad, si al analizarla ve que dentro hay cosas que quedarían ocultas, construya una lista y por supuesto valide con el cliente.
  • Trate de asignarle un nivel de complejidad a cada una de las funciones de la lista y determine cuanto tiempo le tomaría construirla, pero además incluya en ese tiempo un poco de análisis, documentación si así lo acordó, planificación e investigación si tiene que estudiar para poder construirla.
  • Cuando estamos estimando es importante considerar los imprevistos, algunas técnicas de estimación plantean 10% o poco más en imprevistos, ¿que significa esto? Qué al tiempo que estimó le sume un 10% adicional, y como obviamente esto no es un rubro independiente, distribúyalo entre las funciones o los módulos del sistema si tiene que pasar alguna relación o estimación de tiempo a su cliente. 
¿Y las pruebas que?: Resulta que construir no es suficiente, aunque no sea de las mejores prácticas que probemos solos nuestros proyectos, tenemos que tratar de hacerlo, y mejor si alguien externo nos ayuda para que así las pruebas no se sesguen a nuestro conocimiento del software que construimos.

Hacer pruebas y llevar una bitácora sencilla de los errores que vamos encontrando es muy importante, además de tener escritas algunas pruebas básicas que siempre deberíamos hacer a nuestro software antes de una entrega, de esa forma los beneficiados somos nosotros, evitamos reprocesos y logramos entregar un producto de mejor calidad.

¿Son gratis las pruebas? No señor, hay que tratar de determinar cuanto tiempo nos toman e incluirlo como costo. No a muchos clientes que contratan de esta forma les parece que las pruebas se cobren (los equivocados son ellos) todo se cobra, si usted sabe que su cliente es así trate de distribuir este tiempo en los ítems relevantes de desarrollo que deba presentarle como relación de tiempo.

Los cambios cuestan: Dar por sentado o por entendido todo (incluso lo que no han dicho) es una de las prácticas favoritas de muchos clientes, sin embargo hacer software también se trata de eso, si como dije antes fuimos ordenados guardando los acuerdos que realizamos inicialmente y además creamos un pequeño documentos de acuerdos, tendremos más herramientas para mostrarle siempre amablemente al cliente, que lo que estaba pidiendo nunca lo había dicho, de nosotros depende que así sea, o entrar en pelas de "su palabra contra la mía" ya que muchos clientes tratarán de decir que eso lo dijeron de forma verbal.

Recuerden en ese pequeño documento de acuerdos, colocar una frase directa en donde se especifique que, cualquier cambio o modificación que pudiese sobrevenir después de validado el acuerdo podría incurrir en cobros adicionales.

Por otro lado, dije mucho de protegernos pero yo creo que es importante resaltar que tampoco estamos por aprovecharnos de los clientes, ser éticamente responsables, tener presentes los acuerdos y dar tiempos prudentes de garantía sobre nuestro trabajo es algo que seguramente será valorado y tenido en cuenta.

En fin, estos son algunos tips, de seguro muy alineados a algunas de las mejores prácticas de ingeniería de software, pero que podemos aprovechar en nuestros trabajos y evitarnos problemas innecesarios y trabajo extra injustificado.

¿Que tal si me cuentan sus tips para trabajar como freelance en construcción de software?

Sorey

jueves, 8 de marzo de 2012

Desarrollo para dispositivos de bajo costo - Windows Phone SDK 7.1.1 Community Technology Preview (CTP)

Desde hace un tiempo venimos escuchando rumores sobre Windows Phone Tango, la versión de Windows Phone para teléfonos de bajo costo y de acuerdo a varios blogs de tecnología en el Mobile World Congress 2012, se dieron a conocer dispositivos con esta versión.

Hoy 7 de Marzo se ha publicado algunas instrucciones para la optimización de nuestras aplicaciones para dispositivos con 256 MB de RAM (Curiosamente no se usa nunca la palabra Tango, a diferencia de como se usaba bastante el codename Mango). Además desde el 26 de Febrero hay publicado en el sitio de descargas de Microsoft una actualización del SDK de Windows Phone el Windows Phone SDK 7.1.1 CPT o Community Technology Preview y su correspondiente post de referencia

Ten en cuenta que esta actualización no incluye una licencia para publicar aplicaciones que se compilen usándola, la licencia estará incluida en la próxima versión oficial del SDK.

Pues bien, como dicen en el Blog para Desarrolladores de Windows Phone, la introducción de dispositivos de menor costo y el apoyo a nuevos mercados trae consigo una oportunidad para alcanzar una nueva audiencia grande con sus aplicaciones de Windows Phone. La optimización de las aplicaciones para estos dispositivos de bajo costo es fundamental para garantizar que los usuarios obtener la mejor experiencia posible, sin importar el dispositivo, y para eso debemos empezar a conocer sobre las actualizaciones que se vienen.

Lo primero que debemos tener en cuenta que en la documentación de MSDN cuándo exista una advertencia especial sobre funcionalidades que aplican o no sobre dispositivos 256 MB de RAM veremos un ícono especial

Hay algunos puntos destacables en esta actualización, entre ellos que contaremos con una opción adicional al probar nuestras aplicaciones, podremos desplegarla como es típico en un dispositivo, y tendremos 2 tipos de emuladores uno que emula un dispositivo con 512 MB de RAM y otro que emula un dispositivo con 256 MB de RAM. El framework de XNA está totalmente soportado y se recomienda como siempre ver la documentación para mejorar el uso de la memoria en aplicaciones basadas en el mismo.

Algo bastante importante es que los agentes en segundo plano (Background Agents) no están soportados para estos dispositivos por lo que si intentamos usarlos recibiremos la excepción InvalidOperationException la cual deberíamos controlar de forma adecuada para que la aplicación no finalice abruptamente.

Una consideración adicional que debemos tener en cuenta refiere al uso de las animaciones, si bien estas se implementan para lograr generar esa sensación de movimiento y dinamismo de nuestras aplicaciones que propone Metro, es importante no excederse y considerar escenarios de este tipo en los cuales no existen muchos recursos disponibles.

El escenario de dispositivos con 256 MB de RAM nos llevan a necesitar identificar en nuestras aplicaciones si tenemos uno u otro tipo de dispositivo y deshabilitar las funciones de acuerdo con las restricciones. La recomendación es guardar un valor de configuración en nuestro almacenamiento aislado un valor que indique que el dispositivo tiene 256 MB, así:

 private static bool isLowMemDeviceValue;  
 public static bool IsLowMemDevice  
 {  
   get  
   {  
     if (IsolatedStorageSettings.ApplicationSettings.Contains("IsLowMemDevice"))  
       isLowMemDeviceValue = (bool)IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"];  
     return isLowMemDeviceValue;  
   }  
   
   set {  
     if (value != IsLowMemDevice)  
       IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"] = value;  
   }  
 }  

Para establecer este valor debemos evaluar la propiedad extendida ApplicationWorkingSetLimit, cuando el valor de esta sea 90 MB (94371840) o menos el dispositivo se catalogará como de baja memoria.

Este valor podemos establecerlo cuando se lance la aplicación y debemos recordar controlar los errores con un bloque try ... catch y controlar la excepción ArgumentOutOfRangeException debido que el dispositivo puede no haber sido actualizado a la última versión.

 private void Application_Launching(object sender, LaunchingEventArgs e)  
 {  
   try  
   {  
       
     // Check the working set limit and set the IsLowMemDevice flag accordingly.  
     Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");  
     if (result < 94371840L)  
       MainPage.IsLowMemDevice = true;  
     else  
       MainPage.IsLowMemDevice = false;  
   }  
   catch (ArgumentOutOfRangeException)  
   {  
     // Windows Phone OS update not installed, which indicates a 512-MB device.   
     MainPage.IsLowMemDevice = false;  
   }  
   
 }  

Si deseamos prevenir que nuestra aplicación se ejecute sobre dispositivos de 256 MB podemos hacerlo estableciendo en el Manifiesto de nuestra aplicación una zona de requerimientos inmediatable después de la zona de capacidades, así:



Esto es apenas preliminar, pero si queremos que nuestras aplicaciones tengan cobertura en este tipo de dispositivos debemos tener en cuenta los cambios en nuestro mapa de ruta, el detalle lo pueden encontrar en MSDN.

Hasta la próxima 

Sorey

domingo, 4 de marzo de 2012

Ejemplos de buenas implementaciones del estilo Metro en el Marketplace de Windows Phone

He escrito algunos post con ideas básicas para comprender un poco el estilo Metro y como aplicarlo en nuestras aplicaciones para Windows Phone, sin embargo, no considero mejor práctica para acostumbrarse a Metro y tener nuevas ideas, que usar y mirar aplicaciones que lo implementen bien. No soy mi mucho menos experta en Metro pero intentaré opinar sobre los detalles que me gustan.

Skype Beta: Yo no sé si así va a quedar, pero si así es la versión beta ya quiero ver la versión final. La identidad de Skype está presente en toda la aplicación, los detalles de las nubes me parecen de fina coquetería y muy bien puestos, sin exceso ni defecto. También observen como eligen una gama de colores para la zona del chat que así lo requiere y como usan muy bien el Application Bar para poner opciones de acuerdo al contexto, en estos pantallazos ni siquiera se ven botones. Un detalle que me gusta y que había visto primero en la aplicación de foursquare es el contador que muestra las notificaciones, con un color en alto contraste sobre lo demás para que evidentemente llame la atención.


Foursquare: Definitivamente una de mis aplicaciones Metro favoritas, en especial por su bien implementado Panorama.


En esta aplicación todo es resaltable para mi, el buen uso de los colores, la distribución del contenido, las marcas de agua que me resultan toda una inspiración, para mi es de las mejores implementaciones Metro que he visto.


Evernote: La implementación de Metro en esta aplicación es bastante sencilla pero hay algo de resaltar, permite anclar a la pantalla de inicio de nuestro teléfono varios accesos a funciones rápidas y también las notas y es sencillamente muy bonito.


IMDb: Esta aplicación me parece muy bonita, pero sobre todo me parece que la distribución del contenido es excelente ya que se usan bastantes imágenes, lo que te hace permanecer más conectado, me parece de resaltar el buen uso de los colores de fondo y de las fuentes sobre ellos, definitivamente un muy buen trabajo.



Calorie Tracker: Esta aplicación no tiene buenos pantallazos de muestra en el Marketplace, pero en el teléfono hay algo que la hace ver muy bien, y es la textura de fondo de sus páginas. La mayoría de aplicaciones Metro de Microsoft vemos que no se usa mucho los degradados o tramas, pero la textura de fondo de esta aplicación cuando la vez en el teléfono la hace resaltar y verse bastante bonita, detalles de esos para volver más atractiva nuestra aplicación.


¿Tienes alguna aplicación de la que te guste su implementación Metro? Cuéntame cual.

Hasta la próxima

Sorey

Personalizando la apariencia de los marcadores en un Mapa de Bing en Windows Phone

Continuando en esto de aprender a añadir funcionalidades a los mapas de Bing, ahora vamos a darle un toque personal a los marcadores o pushpin que colocamos en el mapa.

Si bien podemos hacerlo manualmente a través de Visual Studio, vamos a ayudarnos más usando Expressión Blend. Recuerda que desde Visual Studio puedes abrir tu proyecto en Expression Blend, solo con un clic derecho sobre el nombre del proyecto y dando seleccionando abrir.


Cuando nuestro proyecto se abra buscamos en la lista de controles el Pushpin y lo añadimos sobre el mapa.


Ajustamos el tamaño del pushpin al de la imagen que tenemos para personalizarlo


Damos clic derecho sobre el pushpin o marcador para editar su plantilla asociada


Se asigna un nombre a la copia de la plantilla y si han seguido los pasos hasta este momento deberán tener un diccionario de recursos en su aplicación


Al entrar a la edición de nuestro marcador agregamos un Grid o Canvas si es que queremos ubicar más controles dentro en una posición determinada


Luego establecemos su apariencia, en mi caso usaré una imagen personalizada


Si deseamos que el texto de la propiedad Content del Pushpin se muestre debemos añadir un ContentPresenter 


Podemos ir a la vista de diseño para ver como queda, sin embargo allí mismo removeremos este marcador ya que los marcadores los crearemos en tiempo de ejecución


Guardamos en Expression Blend y podemos volver a Visual Studio. Buscamos el lugar donde estamos instanciando nuestro pushpin en el post anterior y allí añadimos la linea que asigna al marcador la plantilla que creamos.

 void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)  
     {  
       if (actualPosition != null)  
         map1.Children.Remove(actualPosition);  
   
       actualPosition = new Pushpin();  
       actualPosition.Template = (ControlTemplate)(App.Current.Resources["PushpinActualPosition"]);  
       actualPosition.Location = e.Position.Location;  
       actualPosition.Content = "Me";  
       map1.Children.Add(actualPosition);  
   
       map1.SetView(actualPosition.Location, 10);  
     }  

Probamos nuestra aplicación y ya tenemos nuestro marcador o pushpin personalizado


Espero que este post les allá gustado y vean los fácil que es crear nuestras propias plantillas en Expression Blend.

Hasta el próximo post.

Sorey

Identificando el estado e información de la red en Windows Phone

Este es uno de esos post de referencia básica que nos puede ser útil en cualquier momento, además de que muestra una vez más lo muy sencillo que es el desarrollo sobre Windows Phone.

Parte de la experiencia de usuario en las aplicaciones, se encuentra en proporcionarle información sobre lo que sucede que la aplicación o lo que sucede con el dispositivo y que afecta nuestra aplicación, uno de esos datos es la información sobre los servicios de red, con la clase DeviceNetworkInformation del espacio de nombres Microsoft.Phone.Net.NetworkInformation.

Una aplicación disponible en el Marketplace y que se basa en estas funciones es Network Dashboard

Bien, hacerlo nosotros mismos es muy fácil con la clase DeviceNetworkInformation podemos determinar facilmente si la red local esta disponible, si el plan de datos celular local o via roaming está habilitado o si la red inalambrica está habilitada, para ello usamos lineas tan sencillas como las siguientes:

DeviceNetworkInformation.IsNetworkAvailable 
DeviceNetworkInformation.IsCellularDataEnabled DeviceNetworkInformation.IsCellularDataRoamingEnabled 
DeviceNetworkInformation.IsWiFiEnabled 

Tambien podemos conocer de forma fácil cual es el operador celular del teléfono, así:

DeviceNetworkInformation.CellularMobileOperator

También podemos monitorear los cambios en la disponibilidad de la red facilmente suscribiéndonos a el evento NetworkAvailabilityChanged de la clase DeviceNetworkInformation, así:

 DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(ChangeDetected);  

He implementando la interpretación de los datos que arroja en el método que usamos para suscribirnos con un código como este:

 void ChangeDetected(object sender, NetworkNotificationEventArgs e)  
 {  
   string change = string.Empty;  
   switch (e.NotificationType)  
   {  
     case NetworkNotificationType.InterfaceConnected:  
       change = "Connected to " + e.NetworkInterface.InterfaceName;  
       break;  
     case NetworkNotificationType.InterfaceDisconnected:  
       change = "Disconnected from " + e.NetworkInterface.InterfaceName;  
       break;  
     case NetworkNotificationType.CharacteristicUpdate:  
       change = "Characteristics changed for " + e.NetworkInterface.InterfaceName;  
       break;  
     default:  
       change = "Unknown change with " + e.NetworkInterface.InterfaceName;  
       break;  
   }       
 }  

Para finalizar con otra de esas cosas fáciles de hacer en Windows Phone, existe una tarea que permite cambiar el estado de un tipo de conexión, es decir activa o desactivar el Modo Avión, Wifi, Bluetooth o Celular, así de sencillo:


Esta tarea lo que hace es abrir la el modo seleccionado para que el usuario lo encienda o apague, por ejemplo si seleccionamos Modo Avión veremos algo así:


En fin, espero que estas sencillas funciones les sirvan para complementar alguna de sus aplicaciones, hasta el próximo post.

Sorey

sábado, 3 de marzo de 2012

Mostrando la ubicación actual en un Mapa de Bing en Windows Phone

Después de haber configurado nuestra aplicación para poder usar Mapas de Bing y de tener en cuenta algunas consideraciones para el uso de los servicios de localización de nuestro dispositivo, vamos a aprender a marcar ubicaciones o locaciones en nuestros mapas usando Pushpins o marcadores.

El ejercicio consistirá en marcar nuestra ubicación con un color y un conjunto de coordenadas de sitios conocidos a nuestro alrededor.

Primero empezaremos entonces por declarar a nivel de nuestra página la clase GeoCoodinateWatcher a la instancia le daremos el nombre de watcher, luego de eso en el constructor creamos un nuevo objeto y nos suscribimos a los eventos PositionChanged y StatusChanged, esto debería generar el siguiente código:

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Net;  
 using System.Windows;  
 using System.Windows.Controls;  
 using System.Windows.Documents;  
 using System.Windows.Input;  
 using System.Windows.Media;  
 using System.Windows.Media.Animation;  
 using System.Windows.Shapes;  
 using System.Device.Location;  
 using Microsoft.Phone.Controls;  
   
 namespace BingMaps.Demo  
 {  
   public partial class MainPage : PhoneApplicationPage  
   {  
     GeoCoordinateWatcher watcher;  
   
     // Constructor  
     public MainPage()  
     {  
       InitializeComponent();  
       watcher = new GeoCoordinateWatcher ();  
       watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);  
       watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);  
     }  
   
     void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)  
     {  
       throw new NotImplementedException();  
     }  
   
     void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)  
     {  
       throw new NotImplementedException();  
     }  
   }  
 }  

Recuerda agregar el nivel de sensibilidad al que se someterá el servicio de localización, ya que esto determina cada cuanto se dispara el evento PositionChanged, para eso usamos la propiedad MovementThreshold, además no debemos olvidar invocar el método Start para iniciar el servicio de localización. El código del constructor quedaría así:

     // Constructor  
     public MainPage()  
     {  
       InitializeComponent();  
       watcher = new GeoCoordinateWatcher ();  
       watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);  
       watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);  
   
       watcher.MovementThreshold = 20;
       watcher.Start();  
     }  

En este momento las dos suscripciones a los eventos no tienen implementación, están lanzando por defecto una excepción, limpiamos los dos métodos y vamos a implementar como obtener nuestra posición actual implementando el método asociado al evento PositionChanged. Para hacer que nuestra posición actual varie, vamos a declarar un marcador o pushpin a nivel de la clase justo al lado del watcher, asi;

     GeoCoordinateWatcher watcher;  
     Pushpin actualPosition;  

Y en el método asociado al evento PositionChanged vamos a controlar que este marcador no haya sido instanciado antes para removerlo del mapa y volverlo a instanciar para cambiarlo de posición. Aquí tengamos en cuenta si hemos dejado nuestro mapa tal cual como quedó al tomarlo del cuadro de herramientas, su nombre por defecto es map1, de otro buscamos cual es su nombre. El código de este método quedaría así:

     void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)  
     {  
       if (actualPosition != null)  
         map1.Children.Remove(actualPosition);  
   
       actualPosition = new Pushpin();  
       actualPosition.Location = e.Position.Location;  
       actualPosition.Content = "Me"; //Esta será la etiqueta del marcador
       map1.Children.Add(actualPosition);  
   
       map1.SetView(actualPosition.Location, 10); //El 10 es el zoom del mapa 
     }  

Si probamos en este momento veremos como la posición que simulemos en el emulador se muestra en el mapa


Para implementar el método StatusChanged vamos a crear en la pantalla 3 nuevos controles solo para efectos de este demo, yo sugeriría que se añadiera un botón de iniciar y uno de detener al Application Bar pero para aprender más del Application Bar, haré un post más adelante.


En MSDN hay un  código de referencia para implementar StatusChanged para efectos de este post lo tomaré tal cual, por lo que si lo están siguiendo recuerda recuerda nombrar los nuevos controles como los llaman en el código: statusTextBlock, startLocationButton y stopLocationButton.

     void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)  
     {  
       switch (e.Status)  
       {  
         case GeoPositionStatus.Disabled:  
           // The Location Service is disabled or unsupported.  
           // Check to see whether the user has disabled the Location Service.  
           if (watcher.Permission == GeoPositionPermission.Denied)  
           {  
             // The user has disabled the Location Service on their device.  
             statusTextBlock.Text = "you have this application access to location.";  
           }  
           else  
           {  
             statusTextBlock.Text = "location is not functioning on this device";  
           }  
           break;  
   
         case GeoPositionStatus.Initializing:  
           // The Location Service is initializing.  
           // Disable the Start Location button.  
           startLocationButton.IsEnabled = false;  
           break;  
   
         case GeoPositionStatus.NoData:  
           // The Location Service is working, but it cannot get location data.  
           // Alert the user and enable the Stop Location button.  
           statusTextBlock.Text = "location data is not available.";  
           stopLocationButton.IsEnabled = true;  
           break;  
   
         case GeoPositionStatus.Ready:  
           // The Location Service is working and is receiving location data.  
           // Show the current position and enable the Stop Location button.  
           statusTextBlock.Text = "location data is available.";  
           stopLocationButton.IsEnabled = true;  
           break;  
       }  
     }  

Recuerda además implementar el código de los dos nuevos botones

     private void startLocationButton_Click(object sender, RoutedEventArgs e)  
     {  
       startLocationButton.IsEnabled = false;  
       stopLocationButton.IsEnabled = true;  
       watcher.Start();  
     }  
     private void stopLocationButton_Click(object sender, RoutedEventArgs e)  
     {  
       startLocationButton.IsEnabled = true;  
       stopLocationButton.IsEnabled = false;  
       watcher.Stop();  
     }  

Y probar tu aplicación :D


Vamos a implementar además el poder cambiar el tipo de mapa que vemos, para esto vamos a habilitar el botón vista que tenemos en el Application Bar



Y en el código asociado podemos establecer el tipo de vista, por vista aérea o vista de calles.

En la vista aérea el mapa se vería así


No olviden que para los mapas de Bing también pueden usar Mapas Estáticos. Espero les haya sido útil

Sorey