Métricas de codificación

Sin duda, una de las herramientas que más me llamó la atención cuando la conocí era NDepend, una de las cosas chulas de entra las muchas que trae es la posibilida de ver métricas del código creado, métricas tales como Ciclomatyc Complexity, Depth of Inheritance etc etc… Ahora me he llevado una sorpresa cuando leo en el blog de FxCop que sacan para Orcas una herramienta que permitirá ver métricas de código ¡Que ganas! Aunque igual a alguno se le cae la cara de vergüenza J
J

 

Saludos

Unai Zorrilla Castro

Convenciones de nombres para Windows Mobile 6

Con la llegada de Windows Mobile 6 hay algunas cosas que debemos tener en cuenta de entrada, de entrada una nueva convención de nombres:


Lo que conocíamos como WM5 Smartphone ahora es WM 6.0 Standard, lo que conocíamos como WM 5 Pocket PC Phone Edition ahora es WM 6 Professional y lo que conocíamos como WM 5 Pocket PC ahora es WM 6 Classic. En cuanto a los SDK tenemos disponibles dos WM 6 SDK Standard ( para WM6 Standard ) y WM 6 SDK Professional para ( WM 6 Professional y Clasic ).


Saludos


Unai Zorrilla Castro

BPEL y Windows Workflow Foundation

Sin duda, una buena noticia, Paul Andrew Program Manager de Windows  Workflow Foundaiton, acaba de anunciar en su blog que en Marzo Microsoft liberará una version CTP de actividades para BPEL y que a finales de este mismo año la final con la implementación de BPEL 2.0. Ademas de poder crear Worflow basándose en el lenguaje de BPEL también traera un servicio de carga específico para importar Workflows a partir de lenguaje BPEL y la exportación de nuestros Workflows a lenguaje BPEL. Lógicamente esto está ligado con la siguiente versión de BizTalk, que también soportará BPEL 2.0.


Saludos


Unai Zorrilla Castro 


 

Guía de instalación de los componentes de diagnóstico y depuración para Compact Framework

Esta es una de las preguntas más comunes que me suelen hacer siempre en sesiones de rendimiento y optimización de Compact Framework. Por lo que me he decidido y las juntaré todas en este pequeño post:


Instrumentalización y análisis de los contadores de rendimiento


Una vez instalados el SP1 para Compact Framework 2.0 tenemos a nuestra disposición un ejecutable llamado netcfrpm.exe que podemos localizar en el directorio siguiente:


C:Program FilesMicrosoft Visual Studio 8SmartDevicesSDKCompactFramework2.0v2.0bin


El siguiente paso es la instalación dentro del directorio de Windows del dispositivo móvil de los elementos


Netcfrtl.dll y netcflaunch.exe


Que podremos encontrar en :


C:Program FilesMicrosoft Visual Studio 8SmartDevicesSDKCompactFramework2.0v2.0WindowsCEwce500armv4i


NOTA: Si instalas esto en WM 5.0 debes de hacer un provisionamiento, puedes usar para ello la herramienta rapiconfig de la siguiente forma, crear un archivo xml con el contenido siguiente


<wap-provisioningdoc>


– <characteristic type=”Metabase”>


– <characteristic type=”RAPIWindowsnetcfrtl.dll*”>


<parm name=”rw-access” value=”3″ />


<parm name=”access-role” value=”152″ />


<!– 152 maps to “CARRIER_TPS | USER_AUTH | MANAGER”–>


</characteristic>


</characteristic>


</wap-provisioningdoc>


Ahora ejecutas el comando: rapiconfig /p rpmprov.xml


Con esto ya tendrás a disposición el uso de la herramienta que te permitirá activar los contadores de rendimiento y de logging, puedes obtener más información de esta herramienta en http://blogs.msdn.com/stevenpr.


Te recuerdo que también puedes activar estos contadores de forma manual, tienes la información necesaria en otro de mis post y en el de Steven PathSchner’s


Depuración con MDBG


Lo primero es instalar en el dispositivo en el directorio Windows netcfrtl.dll y netcflaunch tal y como se explicó anteriormente.


Una vez instalados estos elementos copiaremos también al directorio Windows del dispositivo móvil los elementos siguientes, edbgtl.dll y tcpconnectiona.dll que podemos encontrar en la siguiente ruta:


C:Program FilesCommon Filesmicrosoft sharedCoreCon1.0Targetwce400armv4


A partir de este momento ya podremos usar MDBG para depurar nuestras aplicaciones para dispositivos móviles, os recomiendo que leáis los post sobre este tema de David Klinems

Evento Windows Workflow Foundation

El próximo jueves 22 de Febrero del 2007 imparto una sesión sobre Windows Workflow Foundation en las oficinas de Microsoft en Madrid, la agenda del evento la podéis ver a continuación:




  • Introducción a Windows Workflow Foundation


    • Arquitectura de Windows Workflow Foundation

    • Workflows Secuenciales y Workflows de máquinas de estados

    • El modelo de ejecución de Windows Workflow Foundation


    • Las actividades de Windows Workflow Foundation


      • Actividades Out-of-Box

      • Creación de Actividades para Windows Workflow Foundation


    • Los servicios de Workflow-Engine


      • Workflow Rule Engine

      • Workflow Persistence Service

      • Workflow Tracking Service

      • Workflow Scheduler Service


    • Hosting de Windows Workflow Foundation


      • Alojando el Runtime de WF en WCF, ASP.NET …

      • Alojando el diseñandor de Windows Workflow Foundation

Saludos


Unai Zorrilla Castro

Double-Checking Locking,volatile y dem&#225;s ‘cool’ codes

Hoy por la tarde comiendo con mi compañero Rodrigo, estuvimos hablando, como no, de diversos trozos de código que vemos implementados y diversas recomendaciones que podemos ver y releer por todo esta gran enciclopedia que son los buscadores de internet. Una de las cosillas graciosas de las que hablamos es de los códigos ‘cool’ que se suelen ver en implementaciones y en las citadas enciclopedias. Para muestra un ejemplo:

 

using System;

 

public sealed class Singleton

{

private static volatile Singleton instance;

private static object syncRoot = new Object();

 

private Singleton() {}

 

public static Singleton Instance

{

get

{

if (instance == null)

{

lock (syncRoot)

{

if (instance == null)

instance = new Singleton();

}

}

return instance;

}

}

}

 

Cool ¿verdad? Así de primeras diríamos, esto lo ha hecho un ‘programador serio serio’, más si cabe si este código lo podemos ver como ejemplo en ‘Patterns and Practices’ para patrones singleton seguros en multiproceso. Vemos además un ‘keyword’ de estos que son desconocidos por la gran mayoría, en concreto ‘volatile’ ¿Cuántos conocéis para qué sirve?. El caso es que este patrón implementa lo que se conoce como ‘Double-Checked Locking Tecnique’ y que efectivamente resuelve los propósitos de esta implementación en otros lenguajes como C++ o Java… pero….. ¿realmente necesitamos esto o como parece más ‘cool’ lo implementamos?

Veamos otra alternativa:

 

public sealed class Singleton

{

private static readonly Singleton instance = new Singleton();

 

private Singleton(){}

 

public static Singleton Instance

{

get

{

return instance;

}

}

}

En la mayoría de los casos esta implementación ofrece la misma funcionalidad y es mejor en cuanto a rendimiento ya que evita que se tenga que programar un bloqueo . Si, es menos ‘cool’ pero funciona igual de bien en escenarios de multiproceso puesto que el CLR siempre te asegura que las llamadas al constructor de tu singleton estático son ‘thread safe’. El ‘Double Checked Locking’ tiene sentido cuando la inicialización del miembro estático requiera además iniciar algunos de los miembros de la misma y por lo tanto no podamos recurrir a la simple llamada al constructor del miembro estático y deberíamos evitarlo excepto en estos casos.

Saludos

Unai Zorrilla Castro