domingo, 30 de noviembre de 2008

String Extensions

Como sabemos, los Extensions Methods son una de las nuevas características de C# 3.0. Podemos verlos como métodos estáticos que permiten agregar nuevas funcionalidades a clases ya existentes. No es mi intención explicar cómo crear Extensions Methods (pueden aprender más aquí y aquí), sino compartir varios extensions methods que uso habitualmente en mis proyectos de desarrollo.

Convirtiendo Strings

Convertir cadenas de texto a un número o fecha es una necesidad habitual en todos los proyectos. El código típico es el siguiente:

int number = int.Parse(NumberTextBox.Text);
DateTime date = DateTime.Parse(DateTextBox.Text);

El mismo resultado podríamos obtener usando la clase Convert:

int number = Convert.ToInt32(NumberTextBox.Text);
DateTime date = Convert.ToDateTime(DateTextBox.Text);

En este caso tenemos la ventaja de que si el argumento es null, el valor devuelto es cero. Esto puede comprobarse con Reflector.

image

Ninguno de los métodos anteriores resuelve el problema de conversión de datos cuando el usuario ingresa letras donde se esperaba números o fechas con formatos no válidos.

image

Para evitar esta situación podemos usar validators de ASP.NET, controles de máscara o bien el método TryParse:

int number;
if (int.TryParse(NumberTextBox.Text, out number))
{
    //TODO: Do something
}

El único problema con esta solución es que implica escribir mucho más código, generando rutinas más extensas y difíciles de leer.

La situación se complica un poco más con los Guid, pues no disponen de un método TryParse, entonces habría que usar Try/Catch, lo que complica aún más el código resultante.

String Extensions

Es aquí donde los Extensions Métodos pueden proporcionar una solución efectiva, elegante e intuitiva. La siguiente figura muestra cómo convertir una cadena a un número usando un extension method:

image 

La implementación del extension method es muy simple:

image

He creado una clase StringExtensions.cs con varios extensions methods para convertir a byte, short, long, float, double, decimal, boolean, datetime, guid, etc. Incluí también versiones compatibles con tipos nullables. Seguiré agregando nuevos métodos en la medida que encuentre aplicación práctica y aporten simplicidad en el código.

A continuación les dejo el link para descargar la clase StringExtensions.cs. En próximos post, publicaré otros extensions methods aplicables a controles de ASP.NET. Espero que sirva.

Saludos, Gus

jueves, 27 de noviembre de 2008

Nuevo control de Chart en ASP.NET

La gente de Microsoft ha liberado un nuevo control para ASP.NET 3.5 SP1 y Windows Forms para resolver nuestras necesidades de charting. Thanks!!!

Pueden leer el artículo de Scott Guthrie (en inglés) dando la noticia o si lo prefieren pueden leer la traducción en español de Juan María Laó Ramos.

Pueden arrancar con los siguientes links:

  1. Descargar los controles.
  2. Descargar el soporte para VS 2008 para estos controles.
  3. Descargar los ejemplos.
  4. Descargar la documentación.
  5. Visitar el foro.

Finalmente pueden descargar los recursos en español para estos controles: Paquete de idioma de Microsoft Chart Control para Microsoft .NET Framework 3.5

Y aquí les dejo unos screenshots de los ejemplos. Se ven muy bien!

image

image

image

image

Saludos, Gus

jueves, 20 de noviembre de 2008

Descubriendo Live Mesh

Como comentaba en un post anterior, Live Mesh es una de las aplicaciones de Microsoft que, basado en los servicios de Live Framework, permite en principio una sincronización de archivos simple, segura y transparente entre múltiples dispositivos. Desde computadoras personales, portátiles y dispositivos móviles a cámaras digitales e impresoras, entre otras. Pero Mesh es mucho más que sincronización de datos e iré comentando más en la medida que vaya probando y descubriendo sus bondades.

Por el momento estoy empezando a usar las capacidades de sincronización de archivos de Mesh con amigos y compañeros de proyecto y realmente es muy útil, si bien hoy no es una herramienta de control de versiones con capacidades de merge, etc., la simple posibilidad de tener archivos y carpetas distribuidos y sincronizados entre diferentes dispositivos ya tiene un gran valor.

Instalando Live Mesh

El primer paso consiste en ingresar al sitio https://www.mesh.com y conectarse a Live Mesh usando alguna cuenta de Live ID (por ejemplo una cuenta de Hotmail).

image

Esto significa que no necesito registrarme, completar formularios, etc. Simplemente utilizo mi cuenta de Live ID para Live Mesh.

image

Después del login en Windows Live, veré la página de dispositivos de Mesh. Desde aquí podré agregar mis dispositivos a Mesh. De forma predeterminada, ya existe un Live Desktop listo para usar. Se trata de un escritorio virtual online, donde podré acceder y administrar mis archivos y carpetas disponibles a través de Mesh.

image

Para agregar mi equipo a Mesh, selecciono Add device, y podré descargar e instalar el cliente de Mesh.

image

El cliente de Mesh está disponible para Windows XP y Windows Vista; existe una versión para Mac y, si bien en la página oficial no encontré referencias, me enteré que ya existe una versión para Windows Mobile que pueden descargarla desde https://m.mesh.com

Continuando con la instalación, debemos seleccionar la plataforma correcta y al presionar el botón Install, iniciaremos la descarga de LiveMesh.exe. Su instalación no tiene inconvenientes y dura unos 3 a 5 minutos.

image 

Finalizada la instalación encontraremos en el área de notificaciones el icono de Mesh y deberemos iniciar una sesión con nuestra cuenta Live ID para agregar nuestro dispositivo a la red.

image

El siguiente paso es darle un nombre a nuestro equipo para conectarlo a la red de Mesh.

image

En pocos segundos tendremos nuestro equipo conectado a Mesh y podremos verlo junto a los demás equipos y dispositivos. En este caso solo encuentro mi equipo portatil y el Live Desktop.

image

Y si volvemos a la página de dispositivos de Mesh en la web (https://www.mesh.com/Web/Devices.aspx), veremos nuestro dispositivo agregado al anillo de Mesh.

image

Compartiendo archivos y carpetas

Ahora quiero crear una carpeta y compartirla entre mis equipos de Mesh. Para lograr esto podría crear una carpeta en Live Desktop y luego sincronizarla con mi equipo portatil y viceversa.

A modo de ejemplo, voy a crear una carpeta Test en mi escritorio local y agregarla a Live Mesh.

image 

Como se muestra en la imagen es muy simple, gracias a la integración de Live Mesh con el Escritorio, Mi PC, el Explorador de Windows, etc.

Al seleccionar Add folder to Live Mesh veremos una ventana de diálogo donde podremos indicar el nombre de la carpeta a compartir y cuando debe sincronizarse con los demás dispositivos. Presionamos Ok y listo!.

image

Ahora nuestra carpeta Live Mesh cambió a un color azulado y ya tenemos disponible la misma carpeta en el Live Desktop (y otros dispositivos conectados). Observen también que el sitio de Mesh usa un protocolo HTTPS que nos proporciona seguridad de encriptación de datos en la transferencia de nuestros bytes.

image

Para terminar las pruebas, abrimos la carpeta Test de nuestro equipo local y creamos un simple archivo de texto Prueba.txt.

image

Esperamos unos segundos y listo! Este archivo Prueba.txt ahora también esta replicado en nuestro Live Desktop (y otros dispositivos, si existiesen). Podemos verificarlo ingresando a nuestro Live Desktop, haciendo doble clic en la carpeta Test.

image

Conclusiones

Es muy simple el uso de Live Mesh para compartir y sincronizar archivos y carpetas entre diferentes equipos y dispositivos. Su integración con el Shell de Windows lo hace muy amigable. Además podemos invitar a amigos y colaboradores para compartir archivos o documentos de trabajo y mantenernos sincronizados. Basta de diferentes versiones de archivo en diferentes lugares, tendremos una sola versión en todos los lugares que necesitemos.

En futuros post comentaré mi experiencia con Remote Desktop de Live Mesh.
Hasta la próxima!

miércoles, 19 de noviembre de 2008

PDC 2008 Buenos Aires

Ayer martes 18 de Noviembre tuve la oportunidad de asistir a este importante evento realizado aquí en Buenos Aires. El evento inició con unas keynotes de la mano de Miguel Saez, Ezequiel Glinsky, Juan Ladetto y Alejandro Ponicke que nos comentaron un poco sobre el PDC 2008 de Los Angeles, realizado hace apenas 2 semanas, y lo que se viene: Windows Azure, Cloud Computing, Windows 7, etc.

Juan y Miguel, como ya nos tienen acostumbrados, en una excelente presentación en tiempo y forma, nos mostraron algunas bondades muy interesantes y útiles de Live Mesh. En siguientes posts comentaré mis experiencias con estas aplicaciones, su API, etc.

Ezequiel nos mostró unas fotos de los impresionantes DataCenters de Microsoft, particularmente el DataCenter de Quincy. Con inversiones de miles de millones Microsoft demuestra su fuerte apuesta en el futuro de los servicios basados en la nube.

Finalmente, Alejandro nos dió un preview de Windows 7, si bien no fue una presentación en profundidad, destacó algunas características interesantes como una TaskBar mucho más rica, desde donde podemos lanzar aplicaciones, acceder a documentos recientes, alternar aplicaciones en ejecución e incluso interactuar con las aplicaciones en runtime directamente desde la taskbar.

Luego de las 2 horas que duraron las keynotes tuvimos un break de 30 minutos donde aprovechamos unos cafés con ricas medialunas.

Las siguientes charlas se dividieron en 3 salas: una sala dedicada a Servicios en la nube, otra donde hablaron de Aplicaciones Clientes y Presentación (WPF, Silverlight, ASP.NET 4.0) y en la tercer sala se dedicaron a Herramientas, Lenguajes y Framework (F#, C#, Oslo, VS2010, etc.). Todas las charlas eran muy interesantes, pero había que decidir cual asistir. Mi amigo Mariano Noguera y yo nos inclinamos por la nube.

Servicios en la nube

Arrancamos con un recorrido por Cloud Services de la mano de Juan Ladetto, donde empezamos a ver un poco más de qué se trata Windows Azure. En nuevos posts intentaré hablar sobre lo que vaya conociendo de esta nueva plataforma que se perfila como una excelente y novedosa alternativa para hostear nuestras aplicaciones.

A continuación, con Matías Woloski y Edgardo Rosetto, desplegamos un servicio en la nube. La experiencia fue muy simple. Creamos una típica aplicación Hola Mundo en ASP.NET y lo desplegamos en Windows Azure, todo lo que hicimos fue seguir un asistente web que nos permitió hostear la aplicación, primeramente en un estado de Stagging para luego pasarla a Production. Si bien la aplicación hacía exactamente nada, lo interesante fue ver cómo ponerla en la nube y ver cómo esta aplicación puede escalar a voluntad en tiempo record simplemente cambiando valores en configuración. Este es un punto sin precedentes que permitiría que una aplicación pueda escalar horizontalmente en cuestión de segundos.

Nuevamente, Miguel Saez nos dió un paseo más programático sobre Live Framework  y Mesh Services. Obviando los aspectos teóricos, Miguel nos mostró a través de una aplicación WPF, como interactuar con la API de Live Mesh y Live Contact. La verdad que es una API muy simple e interesante que más de uno puede encontrarle usos prácticos en las aplicaciones del mundo real. Podrán encontrar ppts y ejemplos en su blog.

Para terminar, y ya un poco agotados con esta maratón de charlas y novedades, Nicolás y Maximiliano de Huddle Group nos dieron una muy prolija y perfectamente sincronizada presentación de SQL Data Services. Nos mostraron el actual estado del arte, vimos un par de aplicaciones Windows y Web haciendo uso de las APIs, posibilidades y limitaciones actuales, y la intención de MS de llevar toda la potencia de SQL Server en la nube.

Fin del PDC

Pasadas las 22hs, terminaron las charlas y luego de un agradecimento de la gente de MS, se hizo un rápido sorteo de Libros, MS Mouses y algunas gorritas MSDN. No tuve la suerte de llevarme ningún libro, y había varios interesantes (Silverlight 2, Application = Markup + Code, ASp.NET 3.5, etc.), así que tuve que conformarme con la pulsera de la registración :-(

La verdad fue una jornada muy enriquecedora que mostró a las claras la intención de MS de posicionarse fuertemente en el negocio del Cloud Computing, las plataformas y herramientas que ofrecerá y cómo nosotros podemos beneficiarnos de estas nuevas plataformas que se hablan hoy y reinarán en los próximos 5 a 10 años.

Bueno, seguiré comentando sobre estas nuevas plataformas y tecnologías en futuros posts.
Byes!