sábado, 25 de febrero de 2012

Usando datos de ejemplo (Sample Data) en prototipos Sketchflow para Windows Phone (2/2)

Bueno siguiendo con el Sketch de Pillbox vamos a añadirle algunos datos de ejemplo, para ello vamos a buscar en la pestaña Data el botón que nos permite crearlos.


Seleccionamos nuevos datos de ejemplo


Se nos pedirá un nombre para los datos que se van a crear y la ubicación de los mismos, esto puede ser a nivel de la página en la que estamos trabajando o a nivel del proyecto para que esté disponible en otras páginas.


Después de aceptar la creación del origen de datos, veremos que en Data aparece un nuevo elemento con el nombre que hemos asignado y una estructura simulada.


Si lo deseamos podemos añadir al nivel de la colección más propiedades, por el momento nosotros usaremos las que se crean por defecto.


Para hacer esto damos clic sostenido en la colección y lo arrastramos sobre el pivot, verificando que se nos indique qué se creará un Listbox con los items de la colección, si ya tuviésemos un Listbox, los datos simplemente se enlazarían.


Al crearse la lista vemos que aparecen algunos items simulados y que en Data el recuadro aparece marcado con una linea amarilla, esto es por que tenemos seleccionado el Listbox y se nos está indicando que está enlazado con los datos de ejemplo.


 Para hacer más realista la presentación de los datos vamos a editar los datos ejemplo con el otro botón que hay al lado de la colección.


Al presionar este botón vemos que podemos editar la cantidad de datos simulados que aparecen e incluso los valores de estos datos.


Al aceptar los datos que se ven serán actualizados. Ahora bien, para editar la presentación de esos datos de ejemplo, damos clic derecho sobre el Listbox y buscamos la ruta para editar el Template de los items.


Si observamos con detenimiento lo que sucede, la jerarquía cambia y muestra el arbol visual que está contenido dentro de los items del Listbox, además de permitirnos manipularlo.


Yo por ejemplo quiero que el Checkbox aparezca primero y el nombre no debajo si no al lado. Si conocemos el contenedor Stackpanel sabemos que tiene la posibilidad de mostrar vertical u horizontalmente, así que lo cambiaré a horizontal y arrastraré el checkbox sobre el Textblock, lo que debe dejar el ejemplo así


Como vieron además subí el tamaño de la fuente y le puse margen derecha al Checkbox, todo esto se hace en la ventana de propiedades, que es bastante intuitiva.


Si ejecutamos el proyecto veremos como queda


Los invito a hacer este pequeño ejemplo para familiarizarse con el Sketchflow y con Expression Blend, verán que cuando estén construyendo su aplicación definitiva, ya sabrán como manipular la herramienta.

Hasta la próxima.

Sorey

Entendiendo los agentes en segundo plano de Windows Phone

Siguiendo con la aplicación que les presenté en el post anterior, Pocket Pillbox, planeo que los recordatorios los haga un agente en segundo plano, meramente por aprender a usarlos, ya que podría usar simplemente notificaciones y alertas teniendo en mente como les comenté en otro post que las alertas y notificaciones tienen un límite de 50 por aplicación.

Actualmente no existe la posibilidad de ejecutar nuestras aplicaciones en background (segundo plano) en Windows Phone 7 a 7.5, esto significa que nuestras aplicaciones solo puede estar en primer plano, sin embargo en algunas ocasiones como en la aplicación que les presento de ejemplo, podríamos querer ejecutar un fragmento de código o una funcionalidad especifica aunque nuestra aplicacion no este funcionando, pues bien para eso existen los agentes en segundo plano o background agents.

Lo primero que debemos saber es que solo podemos tener una agente de segundo plano en nuestra aplicación y este aparece en la sección de configuracion del telefono y el usuario puede detenerlo a su gusto.


Los agentes en segundo plano pueden ejecutarse de forma periódica o de forma intensiva (basadas en la clase PeriodicTask, o las tareas intensivas, basadas en la clase ResourceIntensiveTask). Las tareas periódicas funcionan ejecutándose cada X tiempo, las tareas intensivas se ejecutan durante 10 minutos siempre y cuando la batería sea superior al 90%, se esté conectado a la energía externa y ademas si esta conectado por Wifi o conexión a PC a internet, no por GPRS, además no debe existir una llamada activa, es un escenario bastante restrictivo. Como siempre el detalle de estas restricciones lo pueden encontrar en MSDN.

Con los agentes en segundo plano, debemos cuidar que el proceso que lancemos no sea pesado para consumir mucha bateria, ya que este puede ser un criterio por el cual nuestra aplicación sea rechazada en el Marketplace, por eso tenemos que tener en cuenta las restricciones. Debemos saber además que si se activa el modo ahorro de batería, esto puede retrasar hasta 10 minutos la ejecución de las tareas periódicas e incluso podria llegar a no ejecutarse.

Una de las restricciones que manejan los agentes  tiene que ver con la memoria, si usamos más de 6 MB el sistema terminará la tarea. Además aunque disponemos de la ExpirationTime en nuestro agente, la fecha nunca podrá ser superior a dos semanas desde la fecha establecida en la propiedad BeginTime y tendremos que renovarlo.

Además debemos tener presente que no todas las APIs del teléfono están disponibles para los agentes en segundo plano, es el caso de la cámara, la radio, los sensores, el reproductor de audio, las transferencias en segundo plano, la navegación entre otras, las cuales encontrarán detalladamente en la documentación oficial de MSDN.

Recuerda que las notificaciones toast si están disponibles si lo que quieres es llamar la atención de un usuario desde tu agente en segundo plano.

Por el momento aquí dejo esta pequeña contextualización y ya vendrán más post donde les cuento como me va con mi implementación.

Sorey

Conociendo Expression Blend + SketchFlow para prototipos de Windows Phone (1/2)

Por estos días empecé una aplicación sencilla que llamé Pocket Pillbox, como siempre usé Inkscape para maquetar su estilo Metro base, se los comparto como en el anterior post, por si les da ideas sencillas para sus aplicaciones y no cuentan con un diseñador



Pues bien además de eso quise empezar a planear algunos de sus flujos de navegación y recordé que para esto contamos en las herramientas de Microsoft con el Expression Blend + SketchFlow de la versión Ultimate de Visual Studio o de Expression.


Muchos se asustan con Expression Blend, a mi me pasó, después de aprender a usar un tiempo no lo cambio por nada, eso si, hay que aprender a manejarlo de verdad tanto la herramienta como los conceptos de diccionarios de recursos animaciones y enlaces de datos para organizar correctamente nuestro código y no terminar diciendo como escuché por ahí, que Expression generaba código desordenado, más bien es posible que un desarrollador o diseñador desordenado esté usando la herramienta, y siempre igual estará la opción de manipular el código y será mejor empezar de algo que de cero (en la mayoría de casos).

Lo muy positivo es que si aprendes a usar el Expression para hacer estos prototipos, verás que es tal cual como hacer la

Bueno, para empezar a usar la herramienta para hacer el prototipo de nuestra aplicación Windows Phone, debemos descargar la plantilla desde Codeplex e instalarla. A partir de ese momento podemos empezar a crear nuestro nuevo proyecto en Expression


Si la instalación fue correcta encontraremos en las plantillas de Windows Phone y podremos continuar, asignando un nombre a nuestro proyecto y eligiendo un lenguaje de trabajo.


Como ustedes si están leyendo este post, yo estoy aprendiendo, así que veamos, lo primero que encontré fue el Sketflow Map un espacio en el que podemos ver de manera macro cuales son las rutas disponibles desde cada una de las pantallas.


La otra zona representativa que veremos es nuestro Sketch o área de trabajo que presenta la forma de un Windows Phone.


Desde aquí y para familiarizarse un poco con el asunto, puedes ir al menú Projects, Run Project o presionar F5 y se abrirá un explorador con una aplicación de Silverlight que nos muestra la simulación del teléfono en Sketchs.


Empezando con mi aplicación y siendo que esta es un pivot con los días de la semana, tal cual como un pastillero, para esto debemos ir a los Assets y en los Controles buscar Mockups en donde encontraremos varios controles, Panoramas, Pivots, Mapas, en fin!

Seleccionando el control lo arrastramos hasta la parte inferior donde está el arbol de elementos visuales que tiene nuestra aplicación.


El añadir el pivot nos coloca dos secciones y nosotros podemos añadir más usando el control PivotItem y arrastrándolo igual que en el anterior paso.


Ahora vamos a añadir una barra para los iconos de acción de nuestra aplicación, veremos como Expression nos ayuda controlando que no agreguemos ciertos ítems en un lugar de la jerarquía que no corresponda, por ejemplo un ApplicationBar debe estar dentro del LayoutRoot, así que cuando lo intentamos soltar fuera, veremos algo así.


O así, si intentáramos reemplazar algún elemento superior, veriamos algo así.


Cuando la agregamos en la posición correcta observaremos que la barra queda ubicada en la parte superior del Layout


Así que seleccionando la barra vamos a la zona de propiedades y la anclamos en la parte inferior


Bueno, hasta aquí esta primera parte, en el próximo post añadiremos datos falsos para ver como queda nuestra aplicación, usando Data Samples, no se lo pierdan, ah por cierto, así quedó hasta el momento y podemos ver como se desplaza el Pivot si ejecutamos el proyecto.


Ojalá les empiece a gustar Expression Blend tanto como a mi ;)

Sorey

miércoles, 22 de febrero de 2012

Hablando de pruebas de software y calidad

Con esta imagen empecé hace 2 años una de mis exposiciones favoritas en la especialización, 5 minutos 10 diapositivas, los límites impuestos por uno de mis profes favoritos @betancur en la materia Verificación y Validación.

El tema que escogí para la exposición probar el software completamente es imposible, y que mejor que una referencia como Cem Kaner, experto en el tema de Pruebas de Sotfware para hablar sobre esto en su publicación The Impossibility of Complete Testing (a quien no le gusten los documentos densos, esta publicación tiene una versión corta que les recomiendo leer).

Bien los tuits que me hicieron pensar nuevamente en este tema fueron estos:


Una de las ideas gráficas más claras acerca de las pruebas de software es pensar en los programas como "campos minados" donde evidentemente los bugs (o fallas de calidad) son las minas, la diferencia frente al tema del campo minado, es que no hay como en el espacio físico, fronteras claras sobre el espacio a explorar, y entre otras, en cada revisión existe la posibilidad de que los errores ya encontrados continúen o se introduzcan nuevos, así que ¡vaya tarea!

En este punto es donde siempre recuerdo lecciones aprendidas con @betancur, la primera es clara y es que si tienes un terreno desconocido por explorar, encontrar errores en ese terreno se tratará de tener ideas, los testers deberían ser los mejores compañeros de un emprendimiento, deberían ser profesionales admirables por su capacidad de tener diferentes ideas para explorar y encontrar escenarios nuevos o derivados, entendiendo la heurística como fuente de las ideas, que lejos de ser un escenario de descontrol o desorden busca que además de tener esa chispa de encontrar diferentes vías se usen metodologías, técnicas y mecanismos de investigación para descubrir, develar o encontrar diferentes escenarios y resultados, y es que ni todos los programas de software, ni todos los equipos de trabajo, ni todos los proyectos son iguales, citando a betancur: "Diferentes objetivos requieren diferentes estrategias e implican distintas pruebas, documentación y resultados". 

La segunda de mi más valiosas lecciones aprendidas es:

"Quality is a value for someone"

En esa perspectiva es obvio que el tema resulta bastante subjetivo, pero esa frase es tan real y casi hace alusión a otra frase más típica que dice que "El cliente tiene la razón", esto en cualquier ámbito profesional está lejos de hacerse solo por seguir caprichos, tiene que ver fuertemente con los deseos (sensatos) de las personas y está sustentado en sus necesidades, finalmente y citando otra frase: "Si alguien que no importa encuentra que el producto es terrible es probable que no cambiemos nada".

Ahora bien, si ubicamos la calidad en contexto de tiempo y dinero, bajo nuestro escenario de no tener un espacio de exploración preciso, obtener un punto donde nuestro cliente considere que el software esta 100% probado, podría suponer un escenario de tener un software extremadamente probado en unos varios años cuando el promedio de errores por mes encontrados sea absolutamente insignificante (Insignificante es bien diferente a inexistente). En este punto podría casi escuchar a un cliente preguntando ¿Cuántos años? ¿Cual es el costo? ¿Qué obtenemos a cambio de invertir tanto tiempo es protegernos de posibles errores? No se ustedes que digan, parece un poco difícil convencer a alguien de asumir semejante inversiónLes invito a leer una última frase, con detenimiento:

Probar completamente significa que al final de las pruebas, usted sabe que no quedan mas bugs desconocidos.
Cem Kaner 

Creo que sobran las explicaciones. Por otro lado y para finalizar, algo que nunca debemos perder de vista es que la calidad no se logra encontrando al final de todo un proceso los errores que quedaron, parte de la calidad se logra con el compromiso de los individuos que hacen parte de un equipo en seguir un proceso y mejores prácticas, en tener técnicas y desmitificar el tema de que la improvisación en software es suficiente.

El tema de pruebas de software es un universo completo, como lo es en ingeniería de software cada una de las disciplinas existentes, razón por la que siempre me ven por estos lados discutiendo con los programasoes que se creen que hacer software en "solo" un arte, yo si creo firmemente que hacer software es un arte, pero no es eso solamente y creo que eso falta dejarlo claro.

Una última frase de reflexión
“Aunque haga muchos experimentos, mi hipótesis no queda confirmada, pero basta un solo experimento para confirmar mi errorAlbert Einstein

Espero les haya resultado útil

Sorey

Con Windows Phone en Version Beta TV

Se hizo la tarea, gracias a Version Beta TV de Canal UNE por el espacio.



Debido a temas de edición algunas opiniones quedan fuera de contexto o incompletas, pero para eso está el resto de este blog ;)

martes, 21 de febrero de 2012

Consideraciones para el uso del servicio de localización en Windows Phone

Para continuar con nuestra demo de Bing, antes haremos un apartado para aprender a usar el GPS de nuestros dispositivos con Windows Phone.

Cuando hablamos de usar el GPS generalmente encontraremos el término asociado Location o Localización (en este contexto, ubicación).

En Windows Phone, tenemos la posibilidad de obtener los datos de posición provenientes de múltiples fuentes, tales como GPS, Wi-Fi y la celular, además se puede utilizar uno o más de estas fuentes para eso, sin embargo debemos considerar el equilibrio de rendimiento con relación al uso de la batería de acuerdo a las necesidades de una aplicación teniendo en cuenta que estos dos requisitos de la aplicación tienen una relación inversa.

El hardware que produce información menos precisa sobre la ubicación, como el Wi-Fi y radio celular, utiliza menos energía que el receptor GPS que, en general, puede obtener los datos de localización más precisos. Al diseñar su aplicación, hay dos reglas básicas a seguir: utilice la menor exactitud a menos que su aplicación lo requiera y desactive o apague el servicio cuando no lo esté usando.

Aunque el servicio de localización utiliza múltiples fuentes de información sobre la ubicación, cualquiera de las fuentes pueden no estar disponible, de ahí que al crear la instancia de la clase a través de la que accedemos a datos de localización, el GeoCoordinateWatcher podemos decidir la fuente, bien sea por defecto o alta (Default o High en la enumeración GeoPositionAcurracy)
1:  GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);  
Además, para empezar a usar el servicio de localización es recomendable suscribirnos al evento StatusChanged de la instancia que creemos del GeoCoordinateWatcher el cual nos indica cada vez que el estado del servicio de localización cambia, y lo indica a través de la enumeración GeoPositionStatus cuyos posibles estados son: Disabled, Initializing, NoData y Ready.
1:  watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);  
2:  watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);  
3:  watcher.Start();  
Otra consideración importante a tener en cuenta es establecer un umbral razonable de movimiento o MovementThreshold. Esta propiedad especifica la distancia entre un cambio de posición y otro que queramos que sea notificado. Si se establece la MovementThreshold propiedad en un valor muy bajo, se pueden recibir señales erradas a causa de ruidos en la señal por la alta sensibilidad. Para suavizar la señal a representar sólo los cambios significativos se puede establecer el MovementThreshold al menos 20 metros. Esto también ayudará a un menor consumo de batería.

Cuando el servicio de localización esta enviando datos se dispara el evento PositionChanged de acuerdo al MovementThreshold que configuramos, en ese momento se entrega un objeto de tipo GeoPosition que consiste en un tiempo de captura y un objeto GeoCoordinate que contiene la latitud y longitud, datos que representan la ubicación.

Para probar el GPS en el emulador tenemos entre las herramientas avanzadas una disponible para este propósito.


Como recomendación final no debemos perder de vista la experiencia de usuario, esto por que la primera lectura del servicio de localización suele durar 15 segundos, pero puede tardar hasta 120 segundos, así que es muy importante comunicarle al usuario de tu aplicación lo que esta ocurriendo y también ubicar barras de progreso.

Debemos tener en cuenta que debido a que aunque el ajuste de precisión baja (o por defecto) no espera al GPS para devolver los datos, por lo general será más rápido si el GPS no ha sido activada. Si otra aplicación está utilizando el GPS y ya está la recuperación de datos, el ajuste de alta precisión devolverá los datos tan rápido o más rápido que el ajuste de baja precisión.

Por último, recuerda que si no vas a usar más el servicio, para optimizar el uso de la batería, debes detenerlo, para eso puedes usar el método Stop a través de tu instancia del GeoCoordinateWatcher.

Los ejemplos de este código son muy sencillos y se encuentran en MSDN por lo que los invito a tomarlos desde allí.

Hasta el próximo post
Sorey

domingo, 19 de febrero de 2012

Configurando una aplicación Windows Phone para usar Mapas de Bing

Bueno, ahora vamos a aprender a usar algunas de las características de los mapas de Bing. Agregar un mapa a nuestra aplicación es muy simple, seleccionamos y arrastramos el control Mapa a la página donde lo vamos a usar


Lo primero primero que debemos hacer es obtener un key o clave autorizada para nuestra aplicación, de otro modo cuando ejecutemos la aplicación veremos una advertencia sobre nuestro mapa, así:


Así que lo que debemos haces es visitar http://www.bingmapsportal.com/ y crear una nueva cuenta de Windows Live o iniciar sesión con un Live ID existente, que bien puede ser su misma cuenta del APPHUB

Lo primero en el portal de Bing será crear una nueva cuenta para nuestras aplicaciones si es que ya no la tenemos creada

En mi caso que la tengo creada hace un tiempo accediendo al menú Create or view key maps

De acuerdo a las instrucciones de MSDN y al mensaje que nos aparece en la vista anterior, solo podemos crear una clave y si necesitamos más es necesario contactarlos. 
También en MSDN podemos ver que significa el tipo de aplicación que elegimos y sus restricciones, evidentemente para nuestra aplicación seleccionamos Mobile.


Vamos entonces a configurar el estado inicial de nuestro mapa, a mi particularmente me resulta más cómodo trabajar en Expresión Blend, así que desde Visual Studio podemos abrir nuestro proyecto dando clic derecho sobre el proyecto que deseamos editar en Expression.


Seleccionamos nuestro control y vamos a la pestaña de Misceláneo en las propiedades que típicamente encontramos a la derecha y configuramos el punto central y el zoom inicial.


Para encontrar nuestro punto inicial central recuerden que podemos usar las herramientas disponibles en el emulador, en este caso el emulador del GPS. Más adelante veremos como establecer programáticamente esta ubicación o bien establecer la posición actual del dispositivo.


Y para terminar nuestra primera parte, configuramos la clave que obtuvimos para el mapa, con el fin de que funcione correctamente, para eso crearemos un nuevo recurso, así:


Mi recomendación y para el código de nuestras páginas quede más limpio, es que usemos diccionarios de recursos, así que crearemos uno.


Establecemos el nombre del diccionario y aceptamos.


Vemos como aparece ahora el diccionario disponible en la lista y aceptamos.


Además la propiedad que estábamos enlazando cambia de color indicándonos que tiene un recurso asociado.

Ahora buscamos en la vista de proyectos generalmente en la zona izquierda superior el archivo de recursos para establecer nuestra clave.


Recibiremos un mensaje que nos indica que no se puede editar en vista de diseño y que vamos al panel de recursos


Sin embargo lo que nosotros haremos es ver el XAML del archivo


Allí establecemos la clave que obtuvimos en el portal de mapas de Bing, en el atributo ApplicationId


Ahora podemos ejecutar de nuevo nuestra aplicación y ver que el mapa funciona correctamente.


Espera los siguientes post, pronto.

Sorey