Lo nuevo con Windows Mobile Phone Series

Hola a todos,

En esta ocasión quiero compartir con Ustedes acerca de lo nuevo de Windows 7 Phone Series y sobre como cambiaria la manera de realizar aplicaciones móviles.

Para empezar hablemos un poco de lo que venía antes con la telefonía móvil y la plataforma para desarrollar en Windows Mobile.

Dentro del roadmap de Microsoft para desarrollo sobre dispositivos móviles encontramos las múltiples versiones de Windows CE que después se convirtió en Windows Mobile, para ser este último la plataforma ideal para desarrollo de aplicaciones empresariales con lenguajes .NET. Windows CE se convirtió  mas en la plataforma para desarrollos embebidos con Visual Embedded lo que actualmente esta especializándose en el Microframework

Dentro del avance de los dispositivos móviles la plataforma de Windows Mobile tomo gran parte del mercado llegando a ser punta de lanza en este tipo de tecnología. Sin embargo el segmento de programadores que para ese entonces se dividía entre desarrolladores .NET o bien Java, empezaron a ganar territorio plataformas como las de Blackberry para clientes corporativos y iPhone para usuarios finales, mientras que Windows Mobile no se movía dentro del mercado para ningún lado. Haciendo grandes esfuerzos por mantener y liberar grandes funcionalidades dentro de las plataformas corporativas curiosamente a los usuarios de este segmento tan delicado, poco les puede importar que todos los datos de Blackberry pasen y se queden en los servidores de la misma empresa aun cuando sobre estos teléfonos circule información de gran importancia. La ventaja más grande que se ofrece sobre dicha plataforma es la rapidez y lo barato que sale al menos para Colombia un plan de datos de Blackberry frente a uno con tecnologías de Windows Mobile.

Dentro de los equipos de desarrollo que hoy en día siguen desarrollando sobre la plataforma de Windows Mobile, quizás estén un poco molestos por la decisión que Microsoft adopto de no ofrecer compatibilidad hacia atrás a los desarrollos que hace años se venían realizando sobre la plataforma, pues restringir el desarrollo de aplicaciones móviles al uso de tecnologías como Silverlight y XNA ponen sobre la mesa lo que Microsoft promociono desde que .NET salió al  aire y es el no tener que reaprender para poder estar al día en la tecnología. Si bien los desarrolladores Web sientan que su campo de acción ahora es más amplio por el uso de este tipo de tecnologías sobre múltiples dispositivos, quienes desarrollaron sobre Windows Mobile sienten que aun no hay espacio para ellos al menos dentro de Visual Studio 2010.

Dentro de las preguntas frecuentes que también surgen es el pensar que este tipo de teléfonos y tecnologías que tanto Microsoft como Google se empeñan en desarrollar están basados en servicios sobre internet, lo cual definitivamente es el futuro para países como el nuestro y quizás el presente para muchos de los países en donde estas tecnologías son un éxito total. Sin embargo, cada vez estamos dependiendo más de la conexión y en geografías como las nuestras que no permiten un cubrimiento completo de señal ni siquiera de señal de radio, es frustrante no tener múltiples servicios disponibles al momento de querer adquirir esta ultima tecnología.

Volviendo a Windows Phone 7 Series…

Hasta ahora el desarrollo sobre estos dispositivos esta solamente disponible para quienes desarrollamos en C# (felizmente).

La forma de desarrollar se dividirá en dos: XNA o Silverlight. Puntualmente XNA como plataforma de desarrollo de juegos que ya es bastante conocida por quienes estaban desde antes interesados en el tema de desarrollo de juegos para PC y XBOX 360. Silverlight como tecnología de RIAs que ya ha venido sonando de manera fuerte para las agencias Web. Además solamente está disponible para dos tipos de tamaño de pantalla: 320×480 y 480×800. La orientación obviamente no ha cambiado, las dos pantallas soportan la rotación de Portrait y Landscape.

Los botones también son un cambio interesante. Son solo 3 botones de aplicación Atrás, Inicio y Buscar. el resto de interacción va orientado al uso de la pantalla capacitiva así como del SIP (Soft Input Panel) (Teclado virtual).

La pantalla es también quizás uno de los beneficios pues esta basado en LEDs y específicamente en OLED (Organic LED) lo cual asegura un bajo consumo de batería, algo que es crítico en dispositivos móviles.

Dentro de los otros sensores que puede tener el teléfono, ofrece soporte para varios tipos de aplicaciones, entre ellos están:

· Wi-Fi

· Cámara

· Acelerómetro

· Brújula

· Localización (Basado en GPS, Triangulación y otras estrategias, dependiendo de la red a la que el teléfono se conecte)

· Speech – reconocimiento de voz

· Vibración

· Notificaciones Push: Esto para servicios de internet, notificaciones de cambios y servicios configurados sobre el dispositivo.

Dentro de todo este desarrollo, tendremos que esperar a que los dispositivos esten listos y sobre todo que las herramientas estén disponibles para el RTM de Visual Studio 2010.

Vea más sobre Windows Phone 7 Series aqui.

Saludos,

 

Roberto Erazo

SQL Server 24 horas de trainning

Hola a todos, quisiera compartir e invitarlos a un importante evento que se esta llevando a cabo desde el dia de hoy hasta el 23 de abril sobre SQL Server 2008 R2 es el 24 Hours of Pass

Excelente contenido que pueden ver desde sus casas, que esperan para entrar?

http://www.sqlpass.org/24hours/2010/SQLServer2008R2.aspx

 

Saludos,

Roberto Erazo

Invocation Process C#

Hola a todos… en algunas ocasiones es necesario hacer llamados a programas externos a las aplicaciones que al final del dia son procesos que se corren dentro del sistema operativo.

Un ejemplo simple de este tipo de usos es por ejemplo abrir una instancia de Internet Explorer dentro de un comando de un boton. Para eso obviamente se requiere que se sepa la ubicacion del .exe del archivo y asi poder hacer llamados a los procesos.

private void button1_Click(object sender, RoutedEventArgs e)
        {
            Process myProcess = new Process();
            myProcess.StartInfo = new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe", "http://www.facebook.com");
            myProcess.Start();
        }

Dentro del llamado a procesos es posible pasar argumentos, en el caso de Internet explorer es posible pasar la direccion que uno desee.

Ademas hay cosas interesantes que a traves de los metodos estaticos de Process podemos hacer:

var myProcessCollection = Process.GetProcesses(Environment.MachineName);
            StringBuilder myProcessNames = new StringBuilder(string.Format("Active Process of {0} : ", Environment.MachineName));

            foreach (var item in myProcessCollection)
            {
                myProcessNames.AppendLine(string.Format("Id: {0}", item.Id));
                myProcessNames.AppendLine(string.Format("Name: {0}", item.ProcessName));
                myProcessNames.AppendLine(string.Format("MainModule: {0}", item.MainModule));
                myProcessNames.AppendLine(string.Format("Number of Threads: {0}", item.Threads.Count));
            }

 

Con este codigo podemos explorar los procesos de una maquina y ver sus propiedades. Generalmente el uso de este tipo de servicios se usan para diagnosticar rendimiento de aplicaciones o bien paa controlar los procesos de la maquina.

Espero les sirva!

Saludos,

Roberto Erazo

Double types great number representation

Hola a todos,

En esta oportunidad quisiera hacer dirigir especial atencion sobre los tipos de datos utilizados para la realizacion de calculos. Hace un tiempo ya habia mencionado un tema como este, sin embargo es necesario entender que cuando se selecciona u tipo de dato se deben tener varios temas en cuenta. Esto implica no realizar suposiciones sobre los tipos de datos. A lo que me refiero puntualmente se puede explicar en las siguientes lineas de codigo:

int number1 = 0;

int number2 = 1;

int result = number1 / number1;

Cual seria el resultado esperado de estas lineas de codigo?

Obviamente el compilador nada mas advierte que no es posible una division por cero y sacara un error en compilacion. Ahora que pasa si definimos las mismas lineas de codigo, pero cambiamos el tipo de dato a double?

double number1 = 0;

double number2 = 1;

double result = number1 / number1;

Para sorpresa de muchos el compilador no saca error de compilacion y tampoco se presentan errores en tiempo de ejecucion.

Esto pasa porque el tipo de dato double, tiene una representacion para Infinito (Infinity), tanto positivo como negativo, luego es posible realizar la siguiente pregunta sobre ese tipo de dato como:

if (double.IsInfinity(result))

{

Console.WriteLine(“El resultado tiende a Infinito”);

}

Es importante ver todo lo que tiene double!! los invito a explorar mas sobre el tipo de dato y asi pensar en desarrollar calculos mas precisos y no asumir el comportamiento de los tipos de datos como una regla general.

Saludos,

Roberto Erazo

Conditional compilation Symbols

Hola a todos,

Dentro del desarrollo de sus proyectos, generalmente existen secciones de código que se desea solamente estén en la parte de construcción de la aplicación y no en su versión final, tales como tests unitarios, la ejecución de alguna funcionalidad especial, o bien aserciones.

Para lograr esto dentro de Visual Studio existen los símbolos condicionales de compilación, estos símbolos permiten poner dentro del código secciones que deseamos que solamente se compilen dentro del código. Para lograr esto vaya a las propiedades del proyecto y seleccione la pestaña de Construcción (Build). Dentro del campo de Conditional compilation symbol, ponga por ejemplo DEBUG.

El tener este símbolo registrado, permite que dentro del código se puedan definir secciones de código de la siguiente manera:

static void Main(string[] args)
        {
#if DEBUG
            Console.WriteLine("Esto es una prueba");
#endif
            Console.WriteLine("Este mensaje se vera en version de Release.");
            Console.ReadLine();
        }

 

La salida de esta seccion de codigo en DEBUG es:

image

En cambio si cambiamos la salida a version de RELEASE la salida es:

image

Saludos,

Roberto Erazo

Assertions

Hola a todos, para esta oportunidad quiero compartir con Ustedes una practica de programacion que puede ayudarles a mantener la confiabilidad en el codigo que producen dia a dia.

El tema de las asersiones permite que se evaluen pre condiciones y pos condiciones de una determinada seccion de codigo. La evaluacion de estas condiciones permite que tengamos una idea mas precisa de los posibles fallos que se pueden ocasionar dentro del codigo.

Usando la libreria System.Diagnostics, se referencia a la clase Debug que dentro de sus metodos tiene el metodo Assert.

Este metodo tiene 4 sobrecargas, la mas usada suele ser:

Debug.Assert(condition, message)

Donde condition es una condicion que se evalua y message es un mensaje que provee informacion que generalmente el desarrollador usa para saber que condicion no se cumplio. Luego el mensaje aparece si y solo si la condicion es falsa.

Pruebe una aplicacion de consola con las siguientes lineas de codigo:

static void Main(string[] args)
        {
            Debug.Assert(true, "Mensaje para mostrar");
            Debug.Assert(false, "Mensaje para mostrar");
        }

 

Saludos,

Roberto Erazo

Requirement process

Hola a todos, dentro del proceso de desarrollo de software una de las fases quizás más importantes del mismo es la captura de requerimientos. Hoy en día existen varias técnicas para hacerlo, sin embargo, muchas veces este proceso no se realiza de manera adecuada, pues se cree que solamente con una entrevista y una serie de preguntas se puede completar esta importante fase de construcción de software.

En muchas ocasiones se dan por sentadas una serie de suposiciones lo que siempre repercute en la construcción de requerimientos no pedidos o perdida de información importante que hace necesario una reconstrucción del software o hasta un nuevo proyecto para cumplir con lo pedido.

Por esto es importante hacer referencia a muchas técnicas que se tienen hoy en día para la recolección de requerimientos.

Algunas de las mas recomendadas para nuestro caso puntual (construcción de software) son:

  • Sombra (Shadowing): Básicamente es una técnica de observación sobre el desempeño de las tareas de los usuarios y la idea es hacer preguntas sobre el funcionamiento y la realización de dichas tareas. Este Shadowing se puede hacer de manera pasiva o activa, en la forma pasiva solamente el observador se limita a escuchar las explicaciones del usuario, en la parte activa la observación está guiada de preguntas por parte del observador.
  • Entrevistas: Generalmente son entrevistas uno a uno y su objetivo es preguntar de manera precisa sobre tareas a largo plazo y detalles puntuales sobre la solución que se desea. Dependiendo del nivel de abstracción y del nivel de detalle las entrevistas son necesarias con varios actores en el proceso o responsables de la solución que requieren.
  • Grupos de Foco (Focus Groups): Estas actividades sirven para discutir con grupos de usuarios funcionalidades específicas del sistema con la compañía de un facilitador que ayude a que el grupo fluya y se puedan obtener resultados más concretos sobre el concepto de solución. Los grupos suelen complementar la información de las entrevistas individuales.
  • Encuestas: Las encuestas se realizan basados en una serie de preguntas que ayuden a obtener detalles de un extenso grupo de personas que pueden ayudar a complementar la información.
  • Instrucciones de usuario: Esta técnica hace que un usuario del sistema entrene al observador en las tareas que realiza día a día, de esta forma es posible obtener detalles que normalmente son excluidos de la descripción de los requerimientos pues suelen ser asumidos como conocidos en la definición del problema.
  • Prototipos: Esta técnica ofrece la simulación del ambiente real en donde la solución será aplicada para obtener detalles del entorno y su interacción como solución.

Estos procesos son de gran utilidad cuando uno trata de capturar los requerimientos funcionales y no funcionales, como se ve no hay una restricción especifica a usar una metodología u otra, de hecho la combinación de todas puede aproximar la solución real e ideal de las peticiones del cliente.

La claridad tanto del cliente cuando describe su problema como la habilidad del observador para hacer énfasis en los detalles importantes o bien en minimizar las ambigüedades es algo totalmente deseable en este proceso y la realización de ejercicios internos dentro del equipo de trabajo para detectar las personas que pueden tener ese rol son de gran ayuda al momento de asignar responsabilidades al equipo de trabajo.

Saludos,

Roberto Erazo

MSF Agile templates

Hola a todos, este post no comparte nada nuevo… sin embargo estas plantillas son supremamente importantes y de gran ayuda cuando queremos desarrollar siguiendo una metodología ágil según las recomendaciones y el proceso de desarrollo especificado por Microsoft Solution Framework.

De igual forma cuando su equipo de desarrollo desea implementar al proceso de desarrollo, procesos de mejora y madurez en desarrollo también están las plantillas que sigue MSF y tiene fuertes conexiones con CMMI.

Los líderes de equipos de trabajo de desarrollo requieren de herramientas para organizar y hacer seguimiento de su equipo en el proceso de desarrollo. Con Visual Studio Team System y la ayuda de estas plantillas, es factible apoyar ese proceso y además brindar herramientas para personalizar sus propios procesos.

  • Download MSF for Agile Software Development Process Template
  • Download MSF for Agile Software Development Process Guidance
  •  

  • Download MSF for CMMI Process Improvement Template
  • Download MSF for CMMI Process Improvement Guidance
  •  

    Mas informacion aqui

    Saludos,

    Roberto Erazo

    F# by Microsoft Research

    Dentro de los lenguajes de programacion que Microsoft ha vinculado al Framework de .NET aparte de los que ya son soportados por cumplir el Common Language Specification, se encuentra F#, el desarrollo de este lenguaje se hace ya hace varios años dentro de los proyectos de Microsoft Research, ofreciendo la posibilidad de tener un lenguaje de programacion funcional, que permite tener scripting interactivo, tal como Phyton y otros lenguajes, asi como tambien soporte para la visualizacion de datos, un desempeño tal como el de C#, soportando cross-compiling con el popular lenguaje OCaml. Las ventajas por ser parte de un lenguaje dentro de la plataforma de .NET es la de acceder a las librerias del mismo Framework, y ya esta disponible para que lo uses.

    Para aprender mas de F# vea:

    Library.

    Downloads.

    Developer Center.

    Saludos,

    Roberto Erazo