miércoles, 17 de octubre de 2012

Enlaces de sesiones curso mi primera App de Windows 8


Buen día amigos:

Con el fin de que ustedes puedan obtener acceso a la información del curso de mi primera app de windows 8 a continuacion especifico la direccion donde podrán conectarse a cada una de las sesiones realizadas hasta la fecha.

Pasos: 1. Ingresar a la siguiente url: https://www323.livemeeting.com/cc/usergroups/view 2. Segun la sesion a la cual desees acceder a continuacion especifico los ID de cada uno para poderlos ver y/o descargar: Sesión I : R4T76T Sesión II : RRHR6G Sesión III: 8FF2D9 Sesión IV: 9ZPCK4 Sesión V : GMTK9D   Espero los disfruten y quedo atento a sus comentario.   Saludos.











martes, 25 de septiembre de 2012

[Curso] Mi Primera App de Windows 8 con XAML

 

Buen dia para todos A continuación  envio a ustedes los link de las dos primeras sesiones del curso de Windows 8. espero los disfruten y desde luego que desarrollen aplicaciones para Windows8, todo esto gracias a la Comunidad BogotaDotNet y dedes luego gracias por su participacion.

 

La primera sesión:

https://www.livemeeting.com/cc/usergroups/view?id=R4T76T&pw=cD%7c6pb8Dt

la segunda sesión:

Asunto: SESION II - Mi primera App Windows 8 con XAML  - XAML con C#
Dirección URL de la grabación: https://www.livemeeting.com/cc/usergroups/view
Id. de la grabación: RRHR6G
Clave de asistente: cD|6pb8Dt

 

Saludos.

miércoles, 19 de septiembre de 2012

EL SDK Visualizador de Concurrencia: Técnicas Avanzadas de Visualización.

 

En el post anterior , pudimos verificar en diferentes escenarios el uso del visualizador de concurrencia, el dia de hoy quiero mostrarles unas técnicas mejoradas con el fin de obtener un mayo control sobre la dorma de visualizar los eventos mas significativos dentro de una aplicación.

Con el fin de ilustrar bien los comportamientos de la aplicación, voy a utilizar a manera de simulación aplicación simula el proceso que lleva a una persona del común ir al trabajo, Se simularan cambios de 4 procesos usando múltiples iteraciones (Cada Iteracion representa una hora en tiempo de simulación).

Para cada iteración la aplicación realiza los siguientes cuatro cálculos:

1. Levantarse.

2. Bañarse.

3. Desayunarse.

4. Salir.

En esta simulación se puede realizar en paralelo y usare C# y el Thread Poll para simular la carga de trabajo de paralelismo.

Sin explicar mucho el código a continuación presento el código con el cual trabajaremos:

static void Main(string[] args)

{

MarkerWriter miwriter =

new MarkerWriter(new Guid("9f34bddd-eae4-40c9-b668-91d78fc0b326"));

MarkerSeries series = miwriter.CreateMarkerSeries("");

GradoParalelismo = 2;

numIterations = 24;

DateTime simTime = new DateTime(2012, 09, 18, 0, 0, 0);

eventoManuales = new ManualResetEvent[GradoParalelismo];

for (int i = 0; i < eventoManuales.Length; i++)

{

eventoManuales[i] = new ManualResetEvent(false);

}

//Cada Iteracion representa una hora de las actividades del dia

for (int n = 0; n < numIterations; n++)

{

series.WriteFlag("Iteration " + n + ": time = " + simTime.TimeOfDay);

//Etapa 1 - Levantarse

for (int i = 0; i < GradoParalelismo; i++)

{

eventoManuales[i].Reset();

var span = series.EnterSpan("Levantadose");

TaskInfo ti = new TaskInfo("Levantadose", i);

ThreadPool.QueueUserWorkItem(Levantarse, ti);

Thread.Sleep(100);

span.Leave();

}

WaitHandle.WaitAll(eventoManuales);

//Etapa 2 -Bañarse

for (int i = 0; i < GradoParalelismo; i++)

{

eventoManuales[i].Reset();

var span = series.EnterSpan("bañandose");

TaskInfo ti = new TaskInfo("bañandose", i);

ThreadPool.QueueUserWorkItem(Banarse, ti);

Thread.Sleep(100);

span.Leave();

}

WaitHandle.WaitAll(eventoManuales);

//Etapa 3 - Desayunar

for (int i = 0; i < GradoParalelismo; i++)

{

eventoManuales[i].Reset();

var span = series.EnterSpan("Desayunandose");

TaskInfo ti = new TaskInfo("Desayunandose", i);

ThreadPool.QueueUserWorkItem(Desayunar, ti);

Thread.Sleep(100);

span.Leave();

}

WaitHandle.WaitAll(eventoManuales);

//Etapa 4 - Salir

for (int i = 0; i < GradoParalelismo; i++)

{

eventoManuales[i].Reset();

var span = series.EnterSpan("Saliendo a trabajar");

TaskInfo ti = new TaskInfo("Saliendo a trabajar", i);

ThreadPool.QueueUserWorkItem(Salir, ti);

Thread.Sleep(100);

span.Leave();

}

WaitHandle.WaitAll(eventoManuales);

simTime = simTime.AddHours(1);

}

Console.ReadKey();

}

Como podemos ver tenemos una variable estática llamada GradoParalelismo, el cual define la cantidad de hilos que van a participar de manera simultanea en la simulación.

Dado que los resultados de cada fase dependen de la fase anterior, usaremos una variable llamada (eventoManuales) con el fin de tener un punto de reset , de tal forma que los hilos no continuaran la siguiente fase hasta que todos hayan finalizado la fase actual.

En este ejemplo , Se ejecutara en una maquina con un Core i7 Processor. Con la variable GradoParalelismo = 2 y ejecuto el código en dos iteraciónes.

Con el fin de tener un idea generalizada de cómo se comporta la aplicación correremos el visualizador de concurrencia, para saber cuál de la etapas se encuentra más equilibrada y desde luego la duración de cada una de ellas.

La imagen que se presenta a continuación muestra el comportamiento de la aplicación sobre el visualizador de concurrencia.

Según la grafica anterior, lo que podemos visualizar, es que el hilo anterior encola los elementos de trabajo y los bloquea mientras avanza el programa. Como se puede visualizar existen varios hilos ejecutando el trabajo (Color Verde). Los hilos no están 100% ocupados, sin embargo , a partir de esta imagen es difícil saber a que horas se lleva cada fase.

En el post anterior , realizamos una introducción de como se usa un SPAN para demarcar la ejecución de una fase. Pero a diferencia del ejemplo anterior lo que desea realizar es tener un Marcador ( Marker) personalizado, en lugar de utilizar el predeterminado.

jueves, 13 de septiembre de 2012

Mi Primera App de Windows 8 con C# y XAML


Buen día para todos, La comunidad BDotNet tiene el gusto de invitarlos a un  curso GRATUITO para Windows 8 con XAML en el cual la graduación es montar una aplicación en el App Store de Windows 8, BDotNet vamos a poder subir sus aplicaciones al Store sin que a ustedes les cueste un peso, si alguno ya tiene su cuenta en el App Store tambien lo puede hacer por alla.
image

No se lo pierdan, estarán adelante de los que no tomen el curso, y lo mas importante se les abriran posibilidades de ganar dinero.
Los Esperamos!! La sesiones estaran programadas con el siguiente horario.
image
Inscribete Aqui!!
Registrate aqui
 
Saludos,
Nelson Venegas
Core Group BogotaDotNet






lunes, 10 de septiembre de 2012

Caller Information con C# en Visual Studio 2012:

 

Mediante el uso de atributos del caller info, usted ahora puede tener información acerca de quien esta llamando un método. Puede obtener la ruta del archivo del código fuente, el numero de la línea, y el nombre del miembro del llamador. Esto puede ser útil para realizar el seguimiento, depuración y sirve como herramienta de diagnostico.

Los atributos de información de llamantes, aparecen como caídos del cielos para personas dedicadas a realizar métodos para diagnostico de una aplicación, ya que normalmente para esto lo que realizaba el desarrollador era la implementación de archivo de registro (log) que guardara lo que sucedía en determinado momento cuando era llamado un método, sin embargo para saber cual método estaba llamado al parámetro de la solución muchas veces era necesario trabajar con reflection para saber el nombre del método, o lo que realizada era implementar la interfaz NotifyPropertyChanged. Ahora sencillamente el desarrollador proporciona el atributo adecuado para los parámetros de una función con los valores que vienen por defecto y magia!!!! AHORA PODEMOS SABER CUAL ES EL METODO QUE ESTA LLAMANDO , sin tanto código.

Para obtener esta información, se utilizan atributos que tienen parámetros opcionales, los cuales tienen un valos por defecto. El espacio de nombre es System.Runtime.CompilerServices.

A continuación le nombro estos atributos:

CallerFilePathAttribute: Ruta completa del archivo que contienen el llamador. Esta ruta esta dada en tiempo de compilación y es de tipo string.

CallerLineNumbreAttibute: Numero de la línea de archivo origen en el cual el método es llamado y es de tipo string.

CallerNameAttribute: Entrega nombre del método o de la propiedad del llamante es de tipo string.

Veamos el siguiente ejemplo en donde tenemos un métodos principal llamado main del cual realizamos un llamado a un método para que imprima la ubicación del archivo del proyecto desde donde se esta ejecutando, la línea de código desde donde se esta llamando, y el nombre de método que lo llama.

El código fuente es el siguiente:

image

Al ejecutar este código lo que presentara en la ventana de consola es lo siguiente:

clip_image002

Ahora veamos que sucede si creamos otro método llamado OtroMetodo y desde el nuevo método llamamos a al método que tiene el decorado con los atributos de Caller Information.

clip_image004

Como podemos visualizar, en la función que llama ahora dice Otro Método y en la línea desde donde se llama es la línea 18 de nuestro código fuente.

Descargue el Codigo de ejemplo aqui

domingo, 2 de septiembre de 2012

USO de Mensajes (MESSAGE) con el SDK del Visualizador de Concurrencia

 

Cuando se requiere tener un archivo de registro de datos, con el fin de que nos pueda servir para diagnóstico de desempeño de la aplicación o para fines de depuración de código, generalmente lo que hacemos es crear un archivo que guarde la información que se requiere a monitorear, sin .embargo lo que sucede es que este archivo no se revisa constantemente, y en caso de hacerlo, lo más probable es la mayoría de la información guardada en el archivo de registro se omite.

clip_image002

Cuando se requiere este tipo de información se recomienda utilizar la palabra clave Message del SDK del visualizador de concurrencia . Supongamos que vamos a medir la cantidad de tiempo para generar un archivo de log que mida el tiempo requerido para su generación, para una operación de escritura de un archivo.

El código para probar esta funcionalidad lo especifico a continuación y vale la pena resaltar que en el ovalo de color azul se encuentra la palabra clave Message, la cual especifica lo que se va a adicionar en los Markers.

Lo que realiza este código es listar los directorio que están en mi disco duro C, y se almacenara esta información en un archivo de texto en el mismo disco, lo importante es que por cada operación de escritura se monitoreara el tiempo en que realiza dicha escritura.

Al ejecutar el analizador de concurrencia, lo que veremos son unos pequeños rectángulos que representan el mensaje del tiempo de cada escritura, (Ver ovalo de color Naranja en la siguiente grafica), Si usted necesita ver de manera mas especifica la información de salida del mensaje , lo que puede realizar es seleccionar desde el informe el ítem Markers ubicado en la parte inferior izquierda llamado Visible TimeLine Profile y al dar click en ello, podremos visualizar de manera granular la información del mensaje-

clip_image004

Este reporte enumera todos los Markers en el intervalo de tiempo visible actualmente, para este caso son 18 Markers, ya que en mi disco duro únicamente tengo esta cantidad de carpetas, sobre este mismo cuadro podrás visualizar, en tiempo en que tarda en escribir el nombre del directorio al archivo ubicado en el disco D.

Si queremos exportar la información de estos Markers, en este listado existe un botón llamado export el cual me permitirá exportar esta información a archivo de Texto o un archivo csv.

clip_image006

clip_image008

Estos pequeños artículos muestran a ustedes una nueva funcionalidad del para Visualización de concurrencia, sin embargo el ejemplo es lo mas básico y sencillo, con el fin de que las personas que están comenzando a manejar la depuración de concurrencia se les haga mas fácil entender como función. Existen maneras mas complejas de este SDK, como por ejemplo colocando categorías, niveles de importancia y manejo de múltiples Markers. Este tipo complejo de información lo dejare para posteriores post.

 

Descarga el codigo Fuente Aqui!!

USO de Bandera (FLAG) con el SDK del Visualizador de Concurrencia

Cuando se requiere marcar un evento especifico en nuestras aplicaciones en donde no es valioso saber el tiempo en que dura el evento, sino sencillamente en que momento ocurre, lo más adecuado es usar FLAG, lo que hace en realidad es marcar en el canal con un icono en donde ocurrió el evento y desde luego el nombre del mismo. Un ejemplo de esto podría ser saber en qué momento de nuestra aplicación ocurrió un excepción.

Continuando con el ejemplo anterior lo que podremos es ver en qué momento se inicia cada uno de los métodos pero no cuánto dura, la sintaxis del uso del flag es como aparece a continuación:

clip_image002

Al ejecutar el código y analizarlo por medio del visualizador de concurrencia, obtendremos lo siguiente:

 

clip_image004

Espero el articulo les sirva y cualquier duda estare atento a ella. Adjunto envio codigo fuente del ejemplo.

Descargue Codigo Fuente Aqui