[Evento] Talks 4 Kids 2015

El evento

Todos los eventos de comunidad son especiales ya por el sencillo
hecho de compartir, comunicar y hacer networking entre todos. Sin
embargo, en ocasiones hay eventos que marcan. Lo pueden hacer por muchas
razones, un evento grande de comunidad donde compartir y aprender
mucho, el primer evento de una nueva comunidad, uno donde por temática o
novedad te encuentras especialmente ilusionado. Hay muchos motivos.

En el caso del evento que vamos a comentar, es especial por varios motivos. Hablamos de Talks 4 Kids.

Talks 4 Kids

Talks 4 Kids

Este evento es especial por varios motivos. Por un lado tendremos 9 sesiones técnicas. Por otro lado, se realiza una idea que llevaba ya tiempo rondando y que por fin se lleva a cabo, se realiza un evento solidario donde todo el dinero recaudado ira destinado a la fundación Theodora y sus doctores sonrisa para hacer la estancia de los más pequeños lo más agradable posible en hospitales.

El reto

Para ayudar todo lo posible, añadiendo un poco de humor, hemos
decidido que todos los ponentes vayamos disfrazados y caracterizados de
forma conjunta con cada sesión si se llega a una cantidad de recaudación
de 1500€.

Doctores Sonrisa

Las entradas al evento costarán 10€ mientras que cualquier empresa puede contribuir patrocinando el evento.

¿Te imaginas a los ponentes disfrazados de bailarina o de bob esponja?

La agenda

Se ha buscado tener una agenda lo más variada y potente posible.
Recordad que buscamos el toque de humor, quizás no podéis extraer todo
el contenido de alguna de ellas, solo podrás averigurarlo asistiendo.

La agenda:

  • 9:30h Keynote
  • 9:45h Windows 10: La comunidad del core por Ruben Fernández
  • 10:35h The Big Cloud Theory por Alejandro Campos
  • 11:25h Bailando con monos por Josué Yeray
  • 12:15h Conding4Fun 2.4 por Bruno Capuano
  • 13:00h Consejos Heisenberg para conseguir Apps Windows 10 con 99% de pureza por un servidor
  • 14:00h Comida
  • 15:00h El lado oscuro de la nube por Alberto Díaz
  • 15:50h Onedrive para gobernarlos a todos por Rafa Serna
  • 16:40h Por qué los espartanos molan y Gerges debe morir por Santiago Porras
  • 17:30 Confía en la fuerza Luke por Ciani Afonso

¿Te apuntas?

Fecha

El evento tendrá lugar el próximo 04 de Diciembre. Reserva la fecha en tu agenda.

Lugar

El evento se celebrará en las oficinas de Microsoft España, en el auditorio principal. Dirección detallada:

Centro Empresarial La Finca – Edificio 1
28223 – Pozuelo de Alarcón (Madrid)

Microsoft

Microsoft

Más información

[Material] Windows 10: Hel10 World! – Novedades XAML

El evento

El pasado 22 de Octubre en el Teatro Goya de Madrid tenía lugar el evento Hel10 World!,
un evento centrado en Windows 10 y sus novedades a nivel de sistema y
sobretodo cargado de sesiones técnicas destinadas a desarrolladores.

Windows 10: Hel10 World!

Windows 10: Hel10 World!

El evento comenzó con una completa keynote donde Pilar López, presidenta de Microsoft Ibérica, Emilio Salvador, director senior de Desarrollo para Windows de Microsoft Corporation y los chicos de DX España
realizarón un repaso a los pilares fundamentales de Windows 10;
unificación de plataforma, novedades en desarrollo, novedades del
sistema (Continuum, Windows Hello, etc.), facilidad de acceso desde
cualquier plataforma gracias a Bridges, IoT o seguridad. Todo rodeado
con demos y con algunas cifras espectaculares (110 millones de dispositivos).

Tras la keynote llegaban hasta 24 sesiones técnicas repartidas en 4
tracks durante todo el día con ratos para reponer fuerzas y hacer
networking y algun que otro reto en medio.

El material

En el evento pude aportar mi granito de arena con una sesión sobre
desarrollo donde repasamos nuevos controles, novedades en herramientas,
bindings o nuevas etiquetas XAML.

Tenéis disponible la presentación utilizada a continuación:

En cuanto a las demos técnicas realizadas, las tenéis disponible en GitHub:

Ver GitHub

Con 850 asistentes y entorno a 2000 realizando seguimiento online,
cifras espectaculares, grandes momentos, muy buenos compañeros y amigos,
solo me queda dar mis felicitaciones y… ¿vamos a por otro?

Más información

[Tips and Tricks] Windows 10: Gestión de la batería

Introducción

Entre la lista de factores importantes que marcan diferencia en practicamente cualquier dispositivo móvil encontramos la batería.
Hemos ido viendo una mejora paulatina pero gradual en la calidad y
duración de las mismas. Sin embargo, las exigencias requeridas también
han ido incrementando. Mayor cantidad de aplicaciones usadas por los
usuarios, más sensores, etc.

A pesar de las posibilidades ofrecidas por el sistema para poder
gestionar el uso de la batería, reducir opciones activas cuando empieza a
tener un nivel escaso, en nuestras propias aplicaciones y como
desarrolladores, contamos con APIs para poder trabajar con la batería;
detectar capacidad, porcentaje y otras opciones.

En este artículo, vamos a repasar todas las posibilidades
relacionadas con la batería disponibles en Windows 10 dentro del
namespace Windows.Devices.Power.

Trabajando con la batería

Crearemos un nuevo proyecto UAP:

Nueva App UAP

Nueva App UAP

Añadimos las carpetas Views, ViewModels y Services además de las clases base necesarias para implementar el patrón MVVM de la misma forma que vimos en este artículo.

Para acceder a información relacionada con la batería utilizaremos el
namespace Windows.Devices.Power donde tendremos acceso a la clase AggregateBattery.
Esta clase agrupa todas las baterías que pueda tener el dispositivo
(podrían ser más de una) otorgando acceso a información y reportes de
forma agrupada.

Utilizamos AggregateBattery para obtener información de la batería utilizando el método GetReport que nos devolverá una instancia de tipo BatteryReport.

var batteryReport = Windows.Devices.Power.Battery.AggregateBattery.GetReport();

Entre el conjunto de propiedades disponibles en el reporte, contamos con una propiedad llamada Status (enumeración BatteryStatus):

public string Status
{
     get { return _status; }
     set
     {
          _status = value;
          RaisePropertyChanged();
     }
}
 
Status = batteryReport.Status.ToString();

La enumeración de tipo BatteryStatus cuenta con las siguientes opciones:

  • NotPresent: No se encuentra batería.
  • Discharging: Batería descargándose.
  • Idle: Inactiva.
  • Charging: Batería cargándose.

Continuamos con otra propiedad, ChargeRateInMilliwatts:

public int ChargeRate
{
     get { return _chargeRate; }
     set
     {
          _chargeRate = value;
          RaisePropertyChanged();
     }
}
 
if (batteryReport.ChargeRateInMilliwatts != null)
     ChargeRate = batteryReport.ChargeRateInMilliwatts.Value;

Nos indica en mW el ritmo de carga o descarga en caso de valores negativos de la batería.

NOTA: El valor puede ser nulo en caso de no encontrar batería.

De igual forma que podemos saber el ritmo de carga, podemos conocer la capacidad de la batería con la propiedad FullChargeCapacityInMilliwattHours:

Y la capacidad disponible con RemainingCapacityInMilliwattHours:

public int RemainingCapacity
{
     get { return _remainingCapacity; }
     set
     {
           _remainingCapacity = value;
           RaisePropertyChanged();
     }
}
 
RemainingCapacity = batteryReport.RemainingCapacityInMilliwattHours.Value;

Ambos dados en mW-h. Con los valores anteriores, obtener el porcentaje actual de la batería es una operación sumamente simple:

public double Percentage
{
     get { return _percentage; }
     set
     {
           _percentage = value;
           RaisePropertyChanged();
     }
}
 
var percentage = (batteryReport.RemainingCapacityInMilliwattHours.Value /
                 (double)batteryReport.FullChargeCapacityInMilliwattHours.Value) * 100;
     
Percentage = percentage; 

Si ejecutamos la aplicación:

Información de la batería

Información de la batería

NOTA: Para obtener información válida en el
BatteryReport se debe ejecutar la App en un dispositivo físico. En caso
de ejecutar en emulador, se obtendrán nulos.

Podéis descargar el ejemplo completo realizado a continuación:

También tenéis el código fuente disponible e GitHub:

Ver GitHub

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

Más información

[Material Evento WPSUG] Universal Windows Platform Bridges

WPSUG

WPSUG es el grupo de usuarios hispanos de Windows donde realizamos webcasts periódicos en castellano y con contenido que piden los propios usuarios mediante Google Hangouts.

El evento

Llegar a Windows 10 es mucho más sencillo que nunca. Si tienes una
web, una App en iOS o Android e incluso si partes de una App Win32,
existen nuevas opciones destinadas a facilitar la llegada de esas Apps a
Windows de la forma más sencilla posible.

Universal Windows Platform Bridges

Universal Windows Platform Bridges

Estamos hablando de los Windows Bridge toolkits. El pasado Jueves 15 de Octubre tuvo lugar un nuevo Hangout de WPSUG en el que nos reunimos Josué Yeray, Santiago Porras y un servidor para analizar todo lo relacionado con ellos.

El material

La grabación la podéis volver a ver en:

Tenéis disponible la presentación utilizada a continuación:

En cuanto a las demos técnicas realizadas, las tenéis disponible en GitHub:

Ver GitHub

Más información

[Evento WPSUG] Universal Windows Platform Bridges

Introducción

Windows 10 ha llegado como la culminación en el viaje hacia la convergencia en el desarrollo entre plataformas Windows. Ahora hablamos de Apps Universales
escritas una única vez con un código común tanto para la lógica de
negocio como para la interfaz de usuario. Además, generamos un único
paquete que mantendrá una interfaz consistente y familiar para el
usuario pero adaptada a cada plataforma.

Podemos crear apps que funcionen en todo tipo de
dispositivos como teléfonos, tabletas, portátiles, dispositivos IoT,
Surface Hub e incluso HoloLens. Para ello tenemos las vías utilizadas
hasta este momento, es decir, u
tilizando C# y XAML (o VB, C++, etc).

Sin embargo, Windows 10 tiene como objetivo ser una plataforma
potente pero versátil y accesible para cualquier tipo de desarrollador
sin tener en cuenta su origen de partida.

Llegar a Windows es mucho más sencillo que nunca. Si tienes una web,
si tienes una App en iOS o Android e incluso si partes de una App Win32,
existen nuevas opciones destinadas a facilitar la llegada de esas Apps a
Windows de la forma más sencilla posible.

Universal Windows Platform Bridges

Universal Windows Platform Bridges

Estamos hablando de los Windows Bridge toolkits.

El evento

El próximo Jueves 15 de Octubre, a las 19:00 (GMT+1)  tendra lugar un Hangout en el que tendremos el placer de contar con Josué Yeray, Rafa Serna y un servidor,
para ver los bridges disponibles, como funcionan y posibilidades todo
como suele ser habitual con ejemplos y de la forma más práctica posible.

  • 19:00 en España
  • 13:00 en Colombia
  • 12:00 en México Centro
  • 13:30 en Venezuela
  • 15:00 en Chile continental

¿Te apuntas?

Más información

[Windows 10] Novedades y consejos sobre rendimiento

Branch-EngineeringIntroducción

Además de cuidar detalles como la funcionalidad o la apariencia
visual de nuestra aplicación, nuestra aplicación debe funcionar
correctamente bajo todas las condiciones en todos los dispositivos para
la que sea lanzada.

Factores como el consumo de memoria, CPU o la gestión de tiempos, a
veces cuestan y no se tienen en cuenta hasta que salta el problema, es
decir, tarde.

¿Es importante el rendimiento?

Las críticas de la tienda así como la posibilidad de comunicación
directa con los usuarios es una vía inmejorable para realizar una mejora
continua de la misma. Las críticas habituales suelen venir en un alto
porcentaje de errores (bugs) que no permiten realizar acciones contempladas en la aplicación y también muchas de ellas, por rendimiento.

 

Motivos de críticas negativas

Motivos de críticas negativas

Que la aplicación se “congele”, respuestas lentas, consumos
muy elevados de batería, que provoquen un sobrecalentamiento del
dispositivo son algunas causas habituales de opiniones como las
siguientes:

Ejemplos de críticas negativas

Ejemplos de críticas negativas

Por lo tanto, debemos tener en cuenta en el propio desarrollo
factores de rendimiento de igual forma que prestamos atención a la
correcta visualización de la interfaz en distintas condiciones por
ejemplo.

Mejoras de rendimiento en UWP

De entrada, buenas noticias. Se han incluido en Windows 10 mejoras como:

  • Rendimiento aumentado en Listview.
  • Mejoras en redimiento en ScrollViewer.
  • Interoperatibilidad XAML/DX.
  • Casting de elementos visuales.
  • Gestión Bitmap Source.
  • Etc.

Gracias a todas estas mejoras conseguimos sin cambios en nuestra
forma de trabajar o en el código, mejoras en el consumo de CPU y de
memoria.

Mejoras rendimiento UWP

Mejoras rendimiento UWP

Novedades en XAML

Con Windows 10 nos llegan un conjunto de novedades relacionados con
la gestión de enlace a datos, nuevas etiquetas de marcado y otros
detalles que afectan al rendimiento.

x:Bind

Data binding es un mecanismo mediante el cual
podemos enlazar los elementos de la interfaz de usuario con los objetos
que contienen la información a mostrar. Cuando realizamos data binding,
creamos una dependencia entre el valor de una propiedad llamada target con el valor de otra propiedad llamada source. Donde normalmente, la propiedad target recibirá el valor de la propiedad source.

Es el mecanismo base que nos permite utilizar el patrón MVVM en nuestras Apps móviles logrando:

  • Nos permite dividir el trabajo de manera muy sencilla (diseñadores – desarrolladores)
  • El mantenimiento es más sencillo.
  • Permite realizar Test a nuestro código.
  • Permite una más fácil reutilización de código.

Sin embargo, además de toda la potencia mencionada teníamos ciertas
limitaciones. Los errores de Binding no se producían en tiempo de
compilación de la App además de tener diferentes mejoras relacionadas
con el rendimiento. Limitaciones existentes hasta ahora…

x:Bind es una nueva síntaxis en XAML que cubre un
objetivo similar a Binding. Permite crear un enlace a datos pero con
significativas diferencias. Mientras que con Binding se utiliza
reflexión en tiempo de ejecución para resolver el enlace a datos, con
x:Bind se realiza una validación en tiempo de ejecución ya que son
fuertemente tipados y compilados. Además, ofrece potentes mejoras en el rendimiento.

Veamos unas simples comparativas entre enlace a datos clásico y precompilado y su impacto en el rendimiento.

Uso de CPU utilizando enlace a datos clásico:

Uso de CPU en Bindings clásicos

Uso de CPU en Bindings clásicos

Uso de CPU utilizando bindings compilados:

Uso de CPU en binding compilado

Uso de CPU en binding compilado

También se reduce el consumo de memoria en comparación con Bindings clásicos:

Comparativa de consumo de memoria entre Bindings

Comparativa de consumo de memoria entre Bindings

Vista las visibles mejoras a nivel de rendimiento, ¿cómo se usan?.

En esta ocasión, crearemos un listado de casas donde utilizaremos
x:Bind en la plantilla que representará cada elemento de la lista.

Nuestra interfaz sera muy simple en esta ocasión contando con un sencillo ListView:

<ListView
     ItemsSource="{Binding Houses}" />

Cargaremos el listado de casas con un método creando datos falsos en local de manera aleatoria:

private void LoadHouses()
{
     _houses = new ObservableCollection<House>();
     Random random = new Random();
     for (int i = 0; i < 100; i++)
     {
          _houses.Add(new House
          {
               Place = Places[random.Next(0, Places.Count)],
               Photo = string.Format("ms-appx:///Assets/{0}.png", random.Next(1, 4)),
               Price = string.Format("${0}", random.Next(10000, 100000).ToString())
          });
     }
}

La definición del template de cada casa:

<DataTemplate x:Key="HouseTemplate" x:DataType="model:House">
     <Grid Width="200"
           Height="80">
          <Grid.ColumnDefinitions>
               <ColumnDefinition Width="75" />
               <ColumnDefinition Width="*" />
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
               <RowDefinition Height="Auto" />
               <RowDefinition Height="Auto" />
           </Grid.RowDefinitions>
           <Image Grid.RowSpan="2"
              Source="{x:Bind Photo}"
              MaxWidth="70"
              MaxHeight="70" />
           <TextBlock Text="{x:Bind Place}"    
                  Grid.Column="1"
                  FontSize="18"/>
           <TextBlock Text="{x:Bind Price}"  
                  Grid.Column="1"  
                  Grid.Row="1"
                  FontSize="12" />
     </Grid>
</DataTemplate>

Utilizamos x:Bind para enlazar cada elemento visual de la plantilla a
la propiedad deseada. Importante resaltar además de compilados, son
fuertemente tipados. Es obligatorio para no tener errores de compilación
indicar el tipo de los datos a los que accedemos por enlace a datos.
Esto lo realizamos utilizando x:DataType.

Nuestro listado quedara:

<ListView
     ItemsSource="{Binding Houses}"
     ItemTemplate="{StaticResource HouseTemplate}" />

DataTemplate utilizando x:Bind

DataTemplate utilizando x:Bind

 

Lo visto hasta ahora nos indica que:
  • Tenemos la posibilidad de tener bindings compilados obteniendo errores en tiempo de compilación.
  • Son fuertemente tipados por lo que debemos indicar el tipo de la información.
  • Obtenemos mejoras en el rendimiento tanto en consumo de CPU como de memoria.

Por lo tanto, ¿lo usamos siempre?

La respuesta corta es no. Entrando en profundidad:

  • Los bindings compilados, en ocasiones,  tienen un comportamiento
    diferente al de los bindings clásicos existiendo situaciones no válidas
    para los primeros.
  • Los bindings compilados como indicamos al nombrarlos se compilan
    permitiéndonos obtener errores en tiempo de compilación pero tambien nos
    aporta limitaciones. No podemos crear bindings compilados dinámicamente
    (añadir o quitar bindings en runtime).
  • Con los bindings clásicos podemos crear un mismo template para
    entidades diferentes siempre y cuando el nombre de las propiedades
    coincida. Con los bindings compilados como hemos visto, estan
    fuertemente tipados y no podemos realizar lo mismo.

Podéis descargar el ejemplo utilizando x:Bind a continuación:

También podéis acceder al código fuente directamente en GitHub:

Ver GitHub

x:Phase

Otra etiqueta nueva incluida en Windows 10, en este caso destinada a
permitir realizar renderizado por fases. Con Windows 8.1 se introdujo en
listados el evento ContainerContentChanging que nos
permitía el renderizado progresivo de elementos. Requería código para
actualizar la plantilla que dificultaba el uso de enlace a datos.

Ahora tenemos una nueva etiqueta llamada x:Phase que nos permite realizar con suma facilidad renderizado progresivo. Estableceremos valores numéricos.

NOTA: Por defecto el valor implícito es x:Phase=”0″.

<DataTemplate x:Key="XPhaseHouseTemplate" x:DataType="model:House">
     <Grid Width="200"
           Height="80">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="75" />
                 <ColumnDefinition Width="*" />
             </Grid.ColumnDefinitions>
             <Grid.RowDefinitions>
                 <RowDefinition Height="Auto" />
                 <RowDefinition Height="Auto" />
             </Grid.RowDefinitions>
             <Image
                 Grid.RowSpan="2"
                 Source="{x:Bind Photo}"
                 x:Phase="2"
                 MaxWidth="70"
                 MaxHeight="70" />
             <TextBlock
                 Text="{x:Bind Place}"  
                 Grid.Column="1"
                 FontSize="18"/>
             <TextBlock
                 Text="{x:Bind Price}"  
                 x:Phase="1"
                 Grid.Column="1"  
                 Grid.Row="1"
                 FontSize="12" />
     </Grid>
</DataTemplate>

El uso de x:Phase esta asociado al uso de bindings compilados.

Ejemplo de x:Phase:

También tenéis el código fuente disponible e GitHub:

Ver GitHub

x:DeferLoadStrategy

x:DeferLoadStrategy nos permite retrasar la creación
de un elemento y sus elementos hijos lo que reduce los tiempos
necesarios para la creación de la UI y por lo tanto de carga. Sin
embargo, nada en la vida es gratis. A cambio, incrementamos levemente el
consumo de memoria.

NOTA: Cada elemento que retrasamos en su inicialización con x:DeferloadStrategy añade 600 Bytes en el consumo de memoria.

Podemos deducir que a mayor cantidad de elementos que nos ahorremos
del árbol visual, en menor tiempo se realizara la inicialización de la
vista pero aumentando el consumo de memoria. Por lo tanto, el uso de la
etiqueta es recomendado aunque requiere un análisis mínimo.

Creamos un ejemplo básico donde vamos a retrasar la creación de un Grid que contiene una imagen para crearlo bajo nuestro propio interés al pulsar el botón.

<Grid x:Name="DeferredPanel"  
      x:DeferLoadStrategy="Lazy">
      <Image
           Stretch="UniformToFill"
           Source="ms-appx:///Assets/NinjaCat.jpg" />
</Grid>

Utilizamos la etiqueta x:DeferLoadStrategy=”Lazy” en nuestro Grid. De esta forma indicamos que retrasamos la creación del panel y todo su contenido. Para utilizar la etiqueta debemos:

  • Definir un nombre con x:Name. Para iniciar posteriormente la incialización utilizaremos el nombre.
  • Podemos utilizarlo con cualquier elemento visual derivado de UIElement. No podemos utilizarlo con Page o UserControl.
  • No podremos utilizar con XAML XamlReader.Load.

Nos centramos ahora en el código que se ejecutará pulsando el botón:

page.FindName("DeferredPanel");

Utilizamos el método FindName pasándole el nombre del elemento.

Al pulsar el botón, el panel que retrasamos se crea. En este momento:

  • Se lanza el evento Loaded del panel.
  • Se evalúan los Bindings establecidos en el elemento.

Utilizando x:DeferLoadStrategy

Ejemplo de x:DeferLoadStrategy:

También tenéis el código fuente disponible e GitHub:

Ver GitHub

Otras consideraciones

Virtualización

Tanto el control ListView como el control GridView soportan nativamente virtualización. Sin embargo, hay varios modos para perder la virtualización, debemos tener en cuenta:

  • Si envolvemos un control ListView o GridView sobre un ScrollViewer,
    su tamaño tiende a infinito, sin establecer límites perderíamos la
    virtualización.
  • Podemos organizar los elementos utilizando diferentes paneles. Paneles como por ejemplo WrapGrid no soporta virtualización.

Optimiza imágenes

Las imágenes de tamaños muy elevados, sobretodo si las vamos a
mostrar en tamaños mucho mas reducidos, no compensan directamente debido
a la enorme cantidad de memoria que consumen.

Se pueden utilizar las propiedades DecodePixelHeight y DecodePixelWidth de un BitmapImage para establecer el alto y ancho en el que se decodifica la imagen.

BitmapImage bi = new BitmapImage(new Uri(baseUri, path));
bi.DecodePixelHeight = 120;
bi.DecodePixelWidth = 180;

Ejemplo:

También tenéis el código fuente disponible e GitHub:

Ver GitHub

Optimiza textos

El renderizado de texto es en ocasiones hasta un 50% más rápido en Windows 10. Podemos aumentar el rendimiento usando:

  • CharacterSpacing
  • Typography
  • LineStackingStregy=BaselineToBaseline/MaxHeight
  • IsTextSelectionEnabled = true

Herramientas

Cada vez que nos llega a los desarrolladores un nuevo SDK, es un
momento especial con una mezcla de altísima curiosidad y ganas de probar
novedades. Entre las novedades principales siempre hay nuevas APIs,
controles y otros elementos para poder realizar Apps que antes no eran
posibles. Sin embargo, entre el conjunto de novedades siempre suelen
venir nuevas herramientas que facilitan ciertas tareas: obtener más analíticas, mejores medidores de rendimiento, más opciones en emuladores, etc.

Visual Tree Inspector

Desde versiones anteriores de Visual Studio, una de las herramientas más demandadas son herramientas de depuración de UI XAML.

El árbol visual dinámico es la primera de dos piezas fundamentales para depurar UI XAML.

Visual Tree Inspector

Esta herramienta nos permite ver el árbol de controles de la App en
ejecución indicando el número de elementos hijos de cada elemento ideal
para entender la estructura visual de una vista compleja y entender
problemas de rendimiento.

La segunda pieza relacionada con las herramientas de depuración de UI XAML es el explorador de propiedades dinámico.

Live Property Explorer

Esta herramienta nos permite ver todas las propiedades del elemento
seleccionado, incluso aquellas sobreescritas. Podemos ver si las
propiedades estan establecidas con valores directos, accediendo a
recursos, etc. Además, y la parte más interesante, permite cambiar los
valores de la App en ejecución directamente viendo los cambios de manera
inmediata.

PerfTips

Generalmente y a pesar de contar con herramientas de diagnóstico, no
se suelen utilizar hasta que surgen problemas, es decir, tarde. En estos
casos, una vez detectados problemas de rendimiento, además de utilizar
las herramientas de diagnóstico se suelen poner puntos de ruptura entre
diferentes bloques para tener una idea de donde se pierde tiempo.

Estas prácticas no suelen ser muy buena idea. Por un lado se “caza”
al problema cuando ya es un problema grande, y por otro lado, con puntos
de ruptura o añadiendo líneas para obtener tiempos entre dos puntos del
código, no suele ser muy exacto.

PerfTips llega para ayudar a a entender que ocurre
en su aplicación a nivel de rendimiento mientras depura. En los puntos
de ruptura aparecerán popups con información relacionada con el
rendimiento.

PerfTips

PerfTips

PerfTips indica tiempos aproximados excluyendo los tiempos de pausa
en un punto de ruptura así como la carga de símbolos y tiempo
correspondiente al debugger.

Herramientas de diagnóstico

Las herramientas de diagnóstico son un conjunto de
ventanas destinadas a ofrecer información relacionada con el rendimiento
de la aplicación. Tenemos opciones para ver problemas de renderizado y parsing en la aplicación, monitorear consumo de Memoria y CPU o detectar problemas en el consumo de red entre otras opciones.

Consumo de CPU

Muestra el uso de CPU en todos los cores disponibles:

Consumo de CPU

Consumo de CPU

Consumo de memoria

Monitorea el consumo de memoria de la aplicación mientras estamos depurando.

Consumo de Memoria

Consumo de Memoria

Ahora disponible siempre tras cada sesión de depuración.

Renderizado y parsing

Identifica problemas de rendimiento relacionados con:

  • Parsing & Layout
  • Código de la App que provoca consume alto de CPU
Línea de tiempo

Línea de tiempo

Más información

Quedada CartujaDotNet & SVQXDG

Quedada múltiple

Desde CartujaDotNet, grupo de usuarios .NET de Sevilla y SVQXDG, grupo de desarrolladores Xamarin de Sevilla,
vamos a realizar una quedada informal para charlar abiertamente sobre
tecnologías Microsoft, Xamarin, herramientas utilizadas, intercambiar
impresiones, etc. Además, se analizarán las próximas charlas ya
planteadas y los eventos confirmados entre otros temas de interés. Al
ser quedada de dos grupos diferentes creemos que es una gran oportunidad
para conocer, intercambiar e interactuar entre ambos permitiendo a
miembros de cada uno conocer a los del otro y tratar otros aspectos.

No hace falta confirmar asistencia, y por supuesto será gratuito.

¿Te apuntas?

A continuación tienes disponible la fecha, hora y lugar:

Más información