Compartir a través de


Este artículo proviene de un motor de traducción automática.

Windows 8.1

Creación de una aplicación de alarma para Windows 8.1

Tony Champion

Entre los cientos de nuevas características de Windows 8.1 es el concepto de una aplicación de alarma. En pocas palabras, una aplicación de alarma es una aplicación Windows Store que puede programar notificaciones brindis al segundo. Debido a las manera Windows procesos tostadas, esto no es una precisión ofrecida a la mayoría de aplicaciones. En este artículo te explorar el concepto de una aplicación de alarma y mira lo que se necesita para desarrollar uno de los suyos.

¿Qué es una aplicación de alarma?

Antes de mirar debajo del capó de una aplicación de alarma, es importante considerar qué tipo de aplicaciones sería buena alarma aplicaciones. La clave es tener en cuenta la exactitud de la entrega de notificaciones. Por ejemplo, no es necesario para una aplicación de calendario notificar al usuario de cumpleaños de un amigo en un momento exacto. Sin embargo, existen varios tipos de aplicaciones que requieren esta precisión.

La opción más obvia es una aplicación buena despertador anticuado. Cuando un usuario pone una alarma, su aplicación debe notificar al usuario en ese momento. Ahora puede crear aplicaciones gestión del tiempo más precisos, como una aplicación de Pomodoro, con una aplicación de alarma. Una aplicación de alarma podría utilizarse también en los entrenamientos de intervalo corto, tales como Tabata, donde es muy importante la sincronización de rondas y silencios.

Todos los desarrolladores de aplicaciones Windows Store deben estar familiarizados con el concepto de Windows 8 de bloqueo pantalla aplicaciones. Aplicaciones que se colocan en la pantalla de bloqueo están permitidos publicar cambios a la pantalla de bloqueo. Además, una aplicación de pantalla de bloqueo tiene acceso a capacidades más que una aplicación típica. Esto es importante cuando su aplicación necesita hacer cosas tales como la actualización de la pantalla de bloqueo o ejecutar muchas de las tareas de fondo disponible.

La necesidad de las capacidades adicionales en aplicaciones de pantalla de bloqueo es consecuencia directa de los cambios en Windows 8 para mejorar el rendimiento y batería de vida. Windows está diseñado para impedir que aplicaciones corriendo cuando ellos no están siendo utilizados y consolidar las tareas cuando sea posible. Por esta razón, usted encontrará los eventos programados, como las tareas secundarias y notificaciones, siempre se ejecutarán en un tiempo aproximado. Windows lotes estas actualizaciones y les funciona cuando hay un proceso listo para hacer el trabajo.

En Windows 8 podría definir hasta siete aplicaciones para estar en la pantalla de bloqueo en cualquier momento dado. Estas siete ranuras incluyó una ranura especial para una estado detallado de la aplicación. 7 Tenga un dispositivo de bloqueo pantalla aplicaciones que pueden mostrar texto o insignias, pero sólo una aplicación que es capaz de proporcionar una interfaz de usuario personalizada para la pantalla de bloqueo. 8.1 Windows guarda esta configuración y agrega la aplicación de alarma como un nuevo tipo especial de bloqueo pantalla de la aplicación. Figura 1 muestra las nuevo "bloqueo pantalla aplicaciones" parte de la configuración de la pantalla de configuración del PC. Como el estado detallado de la aplicación, cada dispositivo sólo puede tener una sola alarma la aplicación a la vez.

Lock Screen Part of PC Settings
Figura 1 bloqueo pantalla parte de configuración de PC

La única diferencia entre una aplicación de alarma y otras aplicaciones de la pantalla de bloqueo es la capacidad de proporcionar notificaciones de alarma brindis al usuario dentro de un segundo el tiempo de entrega programada. Como mencionado anteriormente, enviar o programación de un brindis en una aplicación Windows Store no garantiza cuando se entregará la tostada. Se entrega en un plazo aproximado, pero el tiempo exacto depende de Windows. Si una aplicación es identificada por el usuario como la aplicación de alarma, tostadas programadas se entregan a tiempo.

Configuración de una aplicación de alarma

Antes de que una aplicación puede ser seleccionada como una aplicación de alarma, el manifiesto de aplicación debe estar configurado correctamente. Si la lista no incluye las características necesarias, luego al intentar establecer la aplicación como la aplicación de alarma en código generará un error y el usuario no tiene la opción para configurar la aplicación manualmente.

Porque una aplicación alarma horarios tostadas, primero necesitas habilitar tostadas. Puedes hacerlo en el diseñador de manifiesto en la pestaña de interfaz de usuario de aplicación. Un brindis con capacidad desplegable puede encontrarse en la sección notificaciones visuales activos. La sección de notificaciones puede encontrarse debajo de todos los activos de imagen así como el subgrupo de placa insignia. Para habilitar el brindis de la aplicación, debe establecer el menú desplegable de brindis con capacidad en sí.

La otra propiedad en la sección de notificaciones es la posibilidad de activar notificaciones de pantalla de bloqueo para la aplicación. Como se mencionó anteriormente, la aplicación de alarma es un tipo especial de aplicación de la pantalla de bloqueo; por lo tanto, la aplicación debe configurarse para estar en la pantalla de bloqueo. Se deben establecer el bloqueo pantalla notificaciones desplegables que divisa o insignia y azulejo de texto.

Una vez que ha activado el bloqueo pantalla notificaciones sobre una aplicación, el manifiesto debe tener unos elementos adicionales. Por ejemplo, un logotipo distintivo debe asignarse a la aplicación. El logo es necesaria para ser una imagen de píxeles de 24 x 24, y como todos los logotipos en un app Store de Windows, puede especificar escala de varios tamaños para manejar Windows resolución escalamiento. Figura 2 se muestra un ejemplo del diseñador manifiesta con tostadas y notificaciones de pantalla de bloqueo activadas.

Notifications Section of the Manifest Designer
Figura 2 sección notificaciones del diseñador manifiesto

Cualquier aplicación que tenga las notificaciones de pantalla de bloqueo activadas también debe declarar una tarea en segundo plano en el manifiesto de aplicación. La parte interesante de este requisito es que no es necesario aplicar en realidad una tarea en segundo plano en una aplicación de pantalla de bloqueo; Sólo tiene que ser declarado.

Una tarea en segundo plano se declara en la sección declaraciones del diseñador manifiesto de aplicación. En las declaraciones disponibles, seleccione las tareas secundarias y haga clic en agregar. La tarea de fondo para una aplicación de pantalla de bloqueo debe apoyar uno de los siguientes tipos de tareas: Canal de control, temporizador, notificación Push o ubicación. En la sección de configuración de la aplicación de la tarea en segundo plano, se debe establecer el valor de la Página inicial o punto de entrada. En una aplicación XAML que utiliza la tarea en segundo plano, se establece el punto de entrada a la clase que implementa la interfaz IBackgroundTask. Si la aplicación no está implementando realmente una tarea en segundo plano, el valor puede ajustarse a cualquier cosa. Figura 3 muestra una tarea de fondo configurado correctamente para permitir una aplicación que se añade a la pantalla de bloqueo.

Configuring a Background Task
Figura 3 Configuración de una tarea en segundo plano

El paso final en la configuración del manifiesto de la aplicación es para identificar la aplicación como una aplicación de alarma. Para ello mediante la adición de una extensión de alarma en el manifiesto. Por desgracia, no es posible añadir esta extensión el diseñador manifiesta; debe hacerse a mano. Para hacer eso, primero debes llegar a XML subyacente del manifiesto del paquete. Hacer esto haciendo clic en package.appxmanifest en el explorador de soluciones y seleccione Ver código.

El XML en un manifiesto de aplicación Windows 8.1 utilizará dos espacios de nombres. El primer espacio de nombres (que es el valor por defecto) contiene los elementos definidos en Windows 8. El segundo espacio de nombres debe agregarse y es identificado por el prefijo m2. Incluye adiciones y cambios agregados en el punto 8.1 de Windows. Debido a la función de alarma de app es nueva en Windows 8.1, tienes que añadir una extensión "8.1" a la colección de extensiones dentro del elemento de aplicación. Debe establecerse la propiedad Category de la nueva extensión para windows.alarm. Aquí hay un ejemplo de lo que la colección de extensiones debe parecer con la nueva extensión y la tarea de fondo previamente declarados:

<Extensions>
  <Extension Category="windows.backgroundTasks" 
      EntryPoint="App">
    <BackgroundTasks>
      <Task Type="timer" />
    </BackgroundTasks>
  </Extension>
  <m2:Extension Category="windows.alarm" />
</Extensions>

Solicita acceso de alarma

Una vez efectuadas los ajustes apropiados y declaraciones, su aplicación puede entonces solicitar acceso a establecerse como la aplicación de alarma para el dispositivo. El usuario puede hacerlo manualmente desde la configuración del PC; Sin embargo, su aplicación puede solicitar acceso a través de la ejecución de Windows (WinRT).

El tiempo de ejecución de Windows incluye una clase estática de AlarmApplicationManager en el espacio de nombres Windows.ApplicationModel.Background. Esta clase tiene un método RequestAccessAsync que se le pedirá al usuario permiso configurar la aplicación como la aplicación de alarma del dispositivo, como se muestra en la figura 4. Si una aplicación diferente actualmente se identifica como la alarma de la aplicación, se sustituirá por el actual si el usuario selecciona Sí cuando se le solicite.

An Alarm App Permission Prompt
Figura 4 un símbolo del sistema de alarma App permiso

El método RequestAccessAsync devuelve una enumeración de AlarmAccessStatus que tiene tres valores válidos: Negó, AllowedWithWakeup­capacidad y AllowedWithoutWakeupCapability. Esto es impor­alarmas tant si estás creando aplicaciones de alarma para cosas tales como la activación del mañana. Si el dispositivo está en modo de reposo y no está configurado para permitir brindis notificaciones reactivarlo, no disparen sus alarmas.

Es importante recordar que Windows 8 pone al usuario en el control de un dispositivo. Como se muestra en la figura 1, un usuario puede cambiar fácilmente la aplicación de alarma. Su reto es que cada aplicación puede sólo solicitar acceso desde el AlarmApplicationManager una vez. Si la aplicación hace una segunda solicitud de acceso — para este usuario y el dispositivo — no le pida al usuario y sólo volverá a la situación actual de la alarma de la aplicación. Una vez que su aplicación ha sido negada, sustituida por una aplicación diferente o quitar manualmente por el usuario, su única opción es informar al usuario que la aplicación debe añadirse manualmente como la aplicación de alarma para el dispositivo.

El AlarmApplicationManager también incluye un método GetAccessStatus que devuelve el estado actual de la alarma de la máquina. Al igual que con el método RequestAccessAsync, se devuelve una enumeración de AlarmAccessStatus y es una gran manera de determinar lo que está pasando con el dispositivo. Por ejemplo, su aplicación podría informar al usuario si las notificaciones no se despierta el dispositivo.

Programación de alarmas

Las alarmas son en realidad sólo una notificación de tostado programado con un poco más fuerte. El proceso de programación de la alarma es idéntico al programar una notificación de brindis, la única diferencia es la notificación XML. El XML que se utiliza para definir una notificación contendrá información sobre su aspecto, así como cualquier características incluídas.

Una tostada puede ser sólo texto o una combinación de texto y una imagen, tal como se define por una de las plantillas proporcionadas por el tiempo de ejecución de Windows. Existen actualmente ocho diferentes plantillas XML de la cual usted puede elegir. Redactar este artículo, 8.1 Windows no soporta diseños personalizados tostada, así que usted debe seleccionar una de las plantillas proporcionadas.

Se define el tipo y el diseño de un brindis en un bloque de XML. El XML identifica la plantilla brindis a utilizar, el texto y las imágenes con las que rellenar la plantilla y varias otras opciones que analizaré más adelante. Aquí está un ejemplo de una notificación de brindis básica:

<toast duration="long">
  <visual>
    <binding template="ToastText02">
      <text id="1">Sample Toast App</text>
      <text id="2">The is a sample message.</text>
    </binding>
  </visual>
</toast>

Hay varias maneras para generar la plantilla de brindis. El tiempo de ejecución de Windows creará un XmlDocument de cada plantilla de la ToastNotificationManager, que puede encontrarse en el espacio de nombres Windows.UI.Notification. El ToastNotificationManager tiene un método GetTemplateContent estático que lleva un enum ToastTemplateType que tiene un valor para cada una de las plantillas disponibles. Aquí hay un ejemplo de cómo conseguir un XmlDocument del ejemplo anterior:

XmlDocument content =
  ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
content.DocumentElement.SetAttribute("duration", "long");
var textLines = content.GetElementsByTagName("text");
textLines[0].InnerText = "Sample Toast App";
textLines[1].InnerText = "The is a sample message.";

Este es un gran punto de partida; Sin embargo, dependiendo de su uso, puede ser un poco incómodo. Por esta razón adiciones o modificaciones a la plantilla normalmente se hará mediante la API de XmlDocument. Esto puede conducir a unas líneas de código para unas simples adiciones. Con esto en mente, no es raro encontrar el XML construido como una cadena y luego se carga en un XmlDocument una vez que la plantilla está completa. Figura 5 muestra cómo alcanzar el equivalente del ejemplo anterior al generar el XML como una cadena.

Figura 5 generar XML como una cadena

string textLine1 = "Sample Toast App";
string textLine2 = "This is a sample message.";
string contentString =
  "<toast duration=\"long\">\n" +
    "<visual>\n" +
      "<binding template=\"ToastText02\">\n" +
        "<text id=\"1\">" + textLine1 + "</text>\n" +
        "<text id=\"2\">" + textLine2 + "</text>\n" +
      "</binding>\n" +
    "</visual>\n" +
  "</toast>\n";
XmlDocument content = new Windows.Data.Xml.Dom.XmlDocument();
content.LoadXml(contentString);

Si vas a esta ruta, usted debe tener cuidado de dos cosas. En primer lugar, debe asegurarse de que estás generando XML con formato correcto — cuidar para escapar de los caracteres especiales que podrían incluirse en la cadena. En segundo lugar, asegúrese de que seguir el esquema de la notificación de brindis. El centro de desarrollo de Windows proporciona las especificaciones completas para el esquema de bit.ly/172oYCO.

Todos los ejemplos anteriores tienen un elemento que no forma parte de la plantilla por defecto. Usted puede haber notado se ha establecido el atributo de duración sobre el elemento de brindis en mucho tiempo. Estás creando alarma brindis notificaciones, no quieres que la alarma que aparecen y luego desaparecen sin interacción del usuario. Ajuste de la duración a cuánto tiempo va a mantener el brindis en la pantalla durante unos 25 segundos.

Una vez que tienes tu XML configurados y cargado en un XmlDocument, usted puede programar su brindis. El primer paso es crear una instancia de un ScheduledToastNotification. Se necesitan dos cosas para crear una ScheduledToastNotification: el objeto XmlDocument que contiene la definición de pan tostado y un tiempo para el brindis que se programe.

El ScheduledToastNotification está programado con un ToastNotifier. Se crea una instancia de un ToastNotifier de la ToastNotification­Manager clase utilizando el método estático CreateToastNotifier. Una llamada al método ToastNotifier AddToSchedule entonces programará su brindis para entregarse. Tostadas normalmente se crean como resultado de alguna acción del usuario, tales como presionar un botón o un evento que se genera dentro de la aplicación. Aquí está un ejemplo de creación y programación de un brindis por 1 minuto de la hora actual:

ToastNotifier toastNotifier =
  ToastNotificationManager.CreateToastNotifier();
var scheduledToast = new ScheduledToastNotification(
  content, DateTime.Now.AddMinutes(1));
toastNotifier.AddToSchedule(scheduledToast);

El brindis resultante que se genera puede verse en figura 6. Aviso debe parecer más tostadas que has visto en Windows.

A Basic Toast Notification
Figura 6 tostadas básica notificación

Una notificación de brindis puede fallar por varias razones diferentes. La razón más frecuente es que el XML está formateado incorrectamente. Esto puede ser causado por tener una identificación incorrecta de la plantilla o no definir todos los atributos necesarios, así que es importante que te asegures de que hagas bien el XML.

Si usted intenta programar un brindis durante un tiempo que ya ha pasado, se iniciará una excepción durante la llamada AddToSchedule. Si está planificando un brindis durante unos segundos en el futuro, asegúrese de que el cálculo del tiempo es una de las últimas cosas que hacer. Un tiempo de fraguado durante 2 segundos y ahora tomar 4 segundos para ejecutar el código antes de programar en realidad ese brindis producirá una excepción.

Finalmente, su aplicación sólo puede tener 4.096 tostadas programados en un momento. Su primer pensamiento es, "de ninguna manera que va a pasar", pero para una aplicación de alarma es más fácil de lo que se podría pensar. Supón que tienes una aplicación de alarma que permite al usuario programar una alarma diaria. Si su código de programas múltiples alarmas diarias para cada día para el próximo año, entonces 12 alarmas diarias serán max fuera. Esto significa que usted necesita para asegurarse de que los algoritmos para la programación de las alarmas son pensadas y que una vez consigues las alarmas se crean.

Gestión y eliminación de alarmas

Para construir con éxito una app de alarma, tienes que tener la capacidad de revisar y eliminar cualquier alarmas programadas. El ToastNotifier puede lograr ambas de estas tareas. Al llamar al método GetScheduledToastNotifications devolverá una lista de sólo lectura de ScheduledToastNotifications. La colección contendrá sólo las notificaciones programadas para la aplicación actual.

Para quitar una notificación prevista, la notificación al eliminarse debe pasarse al método RemoveFromSchedule. Entre estos dos métodos, puede mantener las notificaciones programadas. Una vez que la notificación ha sido publicada y luego despedido por el usuario, ya no aparece en la colección de la aplicación de notificaciones y no cuentan hacia el máximo número de notificaciones programadas permitidos. Aquí está Cómo borrar todas las notificaciones programadas:

var toastNotifier = ToastNotificationManager.CreateToastNotifier();
var notifications = toastNotifier.GetScheduledToastNotifications();
// Remove each notification from the schedule
foreach (var notification in notifications)
{
  toastNotifier.RemoveFromSchedule(notification);
}

Puedes poner este código en un controlador del evento o comando atado a un botón Borrar todo, por ejemplo.

Agregar comandos

Si su aplicación es actualmente la aplicación de alarma para el dispositivo, entonces el ejemplo anterior que generan las tostadas se muestra en la figura 6 mostrará el tiempo, pero figura 6no se parece mucho a una alarma, ¿verdad? Principalmente, faltan un par de características comunes para una alarma: SNOOZE y despedir. De forma predeterminada, haga clic en el brindis o birlarlo despedirá Sin embargo, la alarma debe ser un poco más intuitivo.

Además de las tostadas < > elemento de apoyo < visual > elemento secundario, también soporta un < comandos > elemento. Este elemento permite añadir comandos predefinidos para el brindis. El propio elemento admite un atributo único escenario opcional. El atributo de escenario puede definirse para alarma o incomingCall. Para mi propósito aquí, siempre se establecerá en la alarma.

Los comandos de < > elemento contiene una colección de individuos < comando > elementos. Cada comando debe tener un atributo id identificar qué tipo de comando es. Para una alarma, esto debe o dormitar o despedir. Al agregar la sección comandos a su anterior tostada, su brindis ahora parece un poco más a una alarma y ha despedido a la capacidad no sólo pero to repetición así como. Aquí está el código tostadas recién generado (puedes ver los resultados de este código en figura 7):

<toast duration="long">
  <visual>
    <binding template="ToastText02">
      <text id="1">Sample Toast App</text>
      <text id="2">The is a sample message.</text>
    </binding>
  </visual>
  <commands scenario="alarm">
    <command id="snooze"/>
    <command id="dismiss"/>
  </commands>
</toast>

An Alarm Toast Notification
Figura 7 una notificación de alarma por tostada

Ajuste el Snooze

De forma predeterminada, Windows establece el tiempo de pausa para una alarma a los 9 minutos. Sin embargo, puede definir la duración de la pausa en la clase ScheduledToastNotification. Esta clase tiene un constructor segundo con dos parámetros adicionales. La primera es la longitud de tiempo para la siesta. El intervalo de repetición se define como un intervalo de tiempo y puede variar de 1 a 60 minutos.

El segundo parámetro nuevo es el número máximo de veces que el usuario puede golpear la repetición de la alarma. Establecer este valor en cero permitirá al usuario a la repetición de un número ilimitado de veces. Aquí está un ejemplo de ajuste de la frecuencia de repetición:

DateTime scheduledTime = DateTime.Now.AddMinutes(1);
TimeSpan snoozeInterval = TimeSpan.FromMinutes(5);
var scheduledToast = new ScheduledToastNotification(
  content, scheduledTime, snoozeInterval, 0);

Cambiar el sonido de la alarma

Si el usuario ha habilitado el sonido para notificaciones, entonces cada tostada hará el mismo "ding" sonido cuando aparece un mensaje de brindis. Esto hace que algunos problemas cuando se trata de crear una aplicación de alarma. En primer lugar, el usuario se acostumbra a oír el mismo sonido para todas las notificaciones. Esto significa una alarma puede desvanecerse en el ruido de las otras notificaciones y no destaca. La segunda cuestión es que generalmente una alarma continúa a hacer sonido hasta que el usuario lo reconoce. Por lo tanto, quieres una alarma para tener algún tipo de bucle de sonido.

Afortunadamente, la definición de brindis también soporta audio < > elemento que le permite personalizar el sonido que hace cuando aparece el brindis. El < audio > elemento tiene dos atributos: src y lazo. Antes de que se entusiasme demasiado, el valor del atributo src debe ser uno de los valores predefinidos proporcionados por Windows. Esto significa que no puede proporcionar audio personalizado para las notificaciones de tostadas, pero tienes una decente colección de sonidos para elegir.

El valor de la fuente debe ser uno de los 25 valores predefinidos. Los sonidos se dividen en categorías de bucles y bucle de no. Los sonidos bucles se construyen para la perfección del lazo y deben usarse cuando se crea una bucle audio notificación. Allí es 10 alarma bucle sonidos y 10 entrante llamada bucles sonidos proporcionados. Una lista completa de los valores predefinidos puede encontrarse en bit.ly/16HV2xm.

Si desea reproducir un sonido bucle, el bucle atributo debe estar establecido en true. Además, el atributo de duración en el brindis < > elemento debe establecerse a largo con el fin de darle tiempo a jugar los sonidos. Figura 8 se muestra un ejemplo de la creación de un sonido bucle personalizado para el brindis.

Figura 8 establecer una costumbre bucle Audio sonido para un brindis

<toast duration="long">
  <visual>
    <binding template="ToastText02">
      <text id="1">Sample Toast App</text>
      <text id="2">The is a sample message.</text>
    </binding>
  </visual>
  <commands scenario="alarm">
    <command id="snooze"/>
    <command id="dismiss"/>
  </commands>
  <audio src="ms-winsoundevent:Notification.Looping.Alarm2"
     loop="true" />
</toast>

Si no desea que su brindis para reproducir cualquier sonido, puede establecer un atributo silencioso en true. Esto anulará cualquier defecto en exhibir tostadas. Figura 9 muestra cómo se utiliza.

Figura 9 establecer el atributo silencioso para que un brindis no juega ningún sonido

<toast duration="long">
  <visual>
    <binding template="ToastText02">
      <text id="1">Sample Toast App</text>
      <text id="2">The is a sample message.</text>
    </binding>
  </visual>
  <commands scenario="alarm">
    <command id="snooze"/>
    <command id="dismiss"/>
  </commands>
  <audio silent="true" />
</toast>

Pensando más allá de su aplicación

Usted puede tomar una app de alarma en muchas direcciones distintas. Porque cada dispositivo sólo puede tener una sola alarma app, es importante pensar más allá de su aplicación. Si el alcance de su aplicación es demasiado limitado, entonces el usuario podría reemplazarlo con una aplicación diferente. Esto, por supuesto, depende del propósito de su aplicación y su público objetivo. Considerar cosas como el uso del contrato de participación objetivo para permitir que otras aplicaciones para programar las alarmas a través de su aplicación.

Con la adición de la función de alarma de app en el punto 8.1 de Windows, ahora puede crear una amplia gama de aplicaciones basadas en el tiempo con la exactitud esperada por el usuario. He mostrado lo que se necesita para que usted consiga a funcionar con una aplicación de alarma. Ahora, basta pulsar el botón snooze. Salir y crear la siguiente aplicación de alarma increíble!

Tony Champion es Presidente de DS campeón y es un Microsoft MVP. Es activo en la comunidad como un orador, blogger y autor. Mantiene un blog en tonychampion.net y se puede llegar por correo electrónico a tony@tonychampion.net.

Gracias al siguiente experto técnico por su ayuda en la revisión de este artículo: Pete Brown (Microsoft)
Pete Brown es un administrador de programas en el equipo cliente y dispositivos de evangelismo, centrándose en XAML y modernas aplicaciones a través de todos los dispositivos de Windows. Su objetivo es ayudar a los desarrolladores crear aplicaciones hermosas, alta calidad, que permiten la creatividad. Está en twitter en @pete_brown y en la web en 10rem.net.