Armando Halbinger

Saturday, October 30, 2004

Modus Vivendi

El día de hoy estoy en Monterrey, después de una semana intensa de trabajo me decidí escribir un rato:

Voy a cumplir mi 3er mes dentro de Developers y haciendo un recuento coincido con Juan Román en su post Vida intensa? Por dios!!! sobre mi nuevo Modus Vivendi... Ahí les va un pequeño recuento:
1. Primer día de trabajo en Puebla
2. Mi primer charla en público
3. Reuniones y más reuniones de trabajo
4. Conferencias, demos, juntas, comidas, cenas y hasta sesiones de fotos! jajaja
5. Curso en Redmond, WA
6. Viajes: Veracruz(1), Puebla(n), Durango(1), Acapulco(1), Colima(1), Mexicali(1), Puerto Vallarta(1), Monterrey(2), Tepic(1), Tamaulipas(2)...
7. Entendí el best practice de JR: UDLA =)
8. Muchas desveladas por: trabajo, eventos y fiestas!!!
9. Me enfermé y ya me curé
10. Gimnasio en los ratos libres (según Outlook ya no tengo ninguno!!!)
11. Miles de mails... ya sólo me quedan 500 por responder... =)
12. Conocer a muchaaaa gente y reencontrarme con amigos de mi "juventud" (ya habló como viejo y eso que tengo 26!!!)
13. etc... etc... etc... porque si no nunca voy a terminar el post

¿un poco saturada mi agenda? jajaja... y lo peor es que cada hora que pasa salen nuevos compromisos, ideas, actividades, fiestas, lecturas, viajes, sueños, pensamientos, sentimientos... y la única frase que me llega a la mente es CARPE DIEM!

Wednesday, September 08, 2004

Mi regreso al mundo académico

Aquí estoy de nuevo después de 3 meses!!!

¿Qué pasó todo ese tiempo? estuve en cursos de Microsoft, me fui de vacaciones y la parte más importante es que regresé al mundo académico!!! a partir del mes pasado estoy en el área de Developers y la parte que a mi me toca son las universidades =)

Para mi blog significa dos cosas:
1. Seguiré escribiendo sobre .NET pero con con un enfoque académico
2. Me uno a los blogs oficiales, así que de ahora en adelante me podrán encontrar en: http://blogs.msdn.com/armanhal aunque este blog lo usaré de vez en cuando para platicar sobre temas generales

Wednesday, June 30, 2004

Mono 1.0

Novell anuncia la liberación de Mono 1.0 (una implementación del .NET Framework para Linux, Unix, MacOS y Windows). Para mayor información entra a esta liga.

Sunday, June 27, 2004

Visual Studio 2005 Beta

Esta semana, del 29 de junio al 2 de julio, durante el TechEd Europe en Amsterdam, Microsoft anunciará la primer versión Beta de Visual Studio 2005 que incluye la versión Team Architect de Visual Studio Team System.

Además anunciará la versión Express para los siguientes productos:
-Visual Web Developer 2005 Express (para sitios Web y servicios Web)
-Visual Basic 2005 Express
-Visual C# 2005 Express
-Visual C++ 2005 Express
-Visual J# 2005 Express
-Sql Server 2005 Express

Para ver la nota completa entra a este link.

Friday, June 25, 2004

Hotmail responde a Gmail y Yahoo

Hotmail ampliará el espacio de sus cuentas a principios de Julio:
-250 Mb para usuarios con cuentas gratuitas/Attachments de hasta 10 Mb
-2Gb para usuarios que paguen el servicio de almacenamiento extra/Attachments de hasta 20 Mb

Además agregará protección anti-virus para correos entrantes y salientes, así como el filtro de Spam (ver post Almacenamiento gratuito para e-mail y Spam de LuisDanS)

Con este movimiento, Hotmail se coloca encima de Yahoo (100 Mb para cuentas gratuitas/2Gb para cuentas pagadas) y entra a la competencia que generó Gmail con 1 Gb de espacio gratuito.

Si quieres leer la nota completa entra a Reuters.

Tuesday, June 22, 2004

SQL Server 2000 Reporting Services Service Pack 1

Microsoft anuncia el Service Pack 1 para Reporting Services que además de corregir algunos bugs y mejoras en performance incluye mejoras de funcionalidad para excel, PDF, gráficas y seguridad, entre otras.

Para descargarlo entra a esta página.

Saturday, June 19, 2004

Las 10+2 herramientas que cada desarrollador .NET debe tener

James Avery escribió un artículo para el MSDN Magazine de Julio titulado "Ten Must-Have Tools Every Developer Should Download Now" y habla de:
-NUnit para escribir pruebas unitarias
-NDoc para crear documentación del código
-NAnt para construir soluciones
-CodeSmith para generar código
-FxCop para revisar que el código cumpla con estándares
-Snippet Compiler para compilar pequeñas piezas de código
-Switchers: ASP.NET Version Switcher y Visual Studio .NET Project Converter
-Regulator para construir expresiones regulares
-.NET Reflector para revisar assemblies

Adicionalmente, recomiendo estas dos herramientas:
-Reflector.FileDisassembler que es un add-in para el .NET Reflector para re-crear los archivos de código fuente en los lenguajes soportados (C#, VB.NET, Delphi). También sirve para convertir una clase entre lenguajes.
-.NET Profiler: ya sea el CLR Profiler 2.0 o el DevPartner Profiler Community Edition para analizar y mejorar la calidad/performance del código.

Thursday, June 17, 2004

El futuro de los lenguajes de programación - C# 3.0

Anders Hejlsberg, el arquitecto de C# y un Microsoft Distinguished Engineer, habla en Channel9 sobre un feature para C# 3.0 que consiste en unir el mundo de los lenguajes de programación de proposito general (i.e. C# - objetos) con el mundo de bases de datos (modelo relacional). Para ver el video entra a este link.

Este feature no es sólo una extensión a C#, sino un cambio de paradigma con respecto a la forma en que actualmente programamos las bases de datos y Microsoft Research ya tiene algunos adelantos. A este proyecto se le conoce como Cw (Comega).

Saturday, June 12, 2004

Simulación Interactiva de Visual Studio .NET 2003

Si eres un desarrollador que todavía no entra al mundo de .NET, prueba las Simulaciones Interactivas de Visual Studio .NET 2003 que se encuentran dentro del Java Developer Resource Center. Podrás crear un Web Service y/o una Web Application y/o una Mobile Web Application en línea sin necesidad de instalar la herramienta de forma local.

Las simulaciones fueron creadas por Learnit Corp. y consisten en controles ActiveX que proporcionan un tour con audio y conforme explican la creación de una aplicación solicitan la interacción del usuario para que tenga el "feeling" de usar Visual Studio .NET.

Si no has usado Visual Studio .NET 2003 esta es tu oportunidad! Si ya lo conoces, puede ser interesante ver estos controles en acción para que conozcas una nueva forma de capacitación dentro de tu empresa.

Visual Basic Power Pack

Visual Basic Power Pack consiste de siete controles escritos en Visual Basic .NET 2003. Estos controles propocionan elementos para una interfaz de usuario mejorada y permiten crear aplicaciones cliente más elaboradas.

Los controles que contiene son:
-Blend Panel. Proporciona el fondo para una forma donde el color se desvanece de un tono a otro.
-Utility Toolbar. Toolbar con un look & feel similar al Toolbar de Internet Explorer
-Image Button. Este es un botón que muestra un gráfico sobre un fondo transparente
-Notification Windows. Muestra texto y gráficos en una ventana pop-up
-Task Pane. Contenedor que provee frames colapsables para desplegar información adicional sobre una forma
-Folder Viewer. Muestra directorios en formato jerárquico
-File Viewer. Muestra una lista de archivos en un directorio especificado

Para descargalos presiona aquí.

Tuesday, June 08, 2004

Monitoreo de aplicaciones en .NET

¿Para qué monitorear una aplicación?
-Determina si estamos alcanzando los niveles de disponibilidad y performance definidos en un Acuerdo de Nivel de Servicio (a.k.a. S(ervice) L(evel) A(greement))
-Resulta "caro" tener una aplicación "caída", porque dependiendo de su importancia puede afectar las ganancias de la compañía, su reputación y/o competitividad
-Más del 80% del costo total para resolver un problema se gasta en identificar la causa del mismo
-El monitoreo de la "salud" de una aplicación es crítico para identificar la raíz de un problema
-Muchos de los problemas sólo se manifiestan en el ambiente productivo
-Ayuda a desarrollar un capacity planning más real

¿Cómo monitoreo una aplicación?
Antes de monitorear una aplicación .NET es necesario aplicar la siguiente metodología:
1. Establecer el foco del monitoreo
2. Determinar la arquitectura física y de la aplicación para clarificar dónde están corriendo los servicios y componentes requeridos
3. Identificar qué conjuntos de información provee la plataforma Windows y las tecnologías middleware utilizadas (i.e. .NET Framework, COM+, etc)
4. Monitorear esta información para crear un baseline del rango normal de operación de la aplicación
5. Para el caso de áreas críticas o complejas de la aplicación .NET poner mayor énfasis auxiliándose de instrumentación (WMI, EIF, etc)

Algunas herramientas para el monitoreo
1. Performance Monitor de las herramientas Administrativas de Windows
2. Task Manager de Windows
3. Instrumentación
-Exception Management Application Block
-Windows Event Log
-Windows Event Tracer
-Windows Management Instrumentation (WMI)
-Enterprise Instrumentation Framework (EIF)

y la opción para ambientes de producción que requieren un nivel más avanzado de monitoreo definitivamente es Microsoft Operations Manager (MOM)

¿Quieres tener una referencia y recomendaciones para implementar el monitoreo en tus aplicaciones? Descarga el libro Operating .NET applications.

Friday, June 04, 2004

Retos al implementar SOA (Service-Oriented Architecture)

En MSDN aparece un artículo que discute los ocho retos más importantes que las compañías enfrentan al implementar SOA y se basa en la experiencia de EDS.

Estos retos son:
1. Service identification. ¿Qué es un servicio? ¿Cuál es la funcionalidad de negocio que provee un cierto servicio? ¿Cuál es la granularidad óptima del servicio?
2. Service location. ¿Dónde debería estar localizado un servicio dentro de la empresa?
3. Service domain definition. ¿Cómo deberían agruparse los servicios en dominios lógicos?
4. Service packaging. ¿Cómo debe estar empaquetada (i.e. vía wrapper) la funcionalidad existente de los sistemas legacy para volverse servicios reusables?
5. Service orchestration. ¿Cómo están compuestos los servicios para ser orquestados?
6. Service routing. ¿Cómo son las peticiones de los consumidores de servicios para ser ruteadas al servicio apropiado y/o al service domain?
7. Service governance. ¿Cómo serán los procesos para administrar y mantener servicios?
8. Service messaging standards adoption. ¿Cómo adoptará la empresa un cierto estándar de forma consistente?

Como conclusión hay que tener presente que el concepto de SOA requiere una planeación cuidadosa y se debe pensar en el largo plazo porque su implementación no es una tarea fácil.

Si quieres leer el artículo completo entra a este link.

SmartClient: Definición y Recursos

Definición
Un smartclient es una aplicación que combina el alcance de internet (web client) con el poder del computo local (rich client) y tiene las siguientes características:

-Experiencia de alta fidelidad para el usuario
Utiliza lo último en gráficos y tecnologías de Interfaz de usuario
Personalizada para cada usuario basado en su contexto
-Conexión inteligente
Trabaja online/offline tomando ventaja del procesamiento y cache local
Puede acceder datos de diversas fuentes heterogéneas
Puede utilizar web services para ser una aplicación distribuida
-Diseñada para operaciones
Aplicación segura
Instalación y actualización inteligente centralizada
Uso de recursos locales

El concepto de SmartClient aplica para todas las plataformas Cliente: PDA's, smartphones, tablet pc, laptop, desktop, dispositivos para automóviles, etc.

Recursos
-En MSDN ya está el Smart Client Developer Center enfocado a los detalles técnicos
-En Microsoft.com está el sitio Smart Client enfocado al valor del negocio y casos de estudio
-En Microsoft Patterns & Practices está el Smart Client Offline Application Block para agregar capacidad Offline a aplicaciones SmartClient en .NET
-¿Quieres el código fuente y la documentación de un SmartClient? descarga TaskVision

Tuesday, June 01, 2004

La Refactorización de código como una forma de Reuso de Software

Esta última temporada me tocó programar un componente para el proyecto donde estoy asignado y mi primer enfoque al escribir código fue: "funcionalidad y usabilidad para el usuario", es decir, que haga todo lo que el usuario requiere y además que sea intuitivo de usar y agradable para la vista. En teoría buen enfoque, pero... aunque tuvimos varias sesiones para definir la arquitectura por la complejidad alrededor de la pieza, la implementación seguía un modelo n-tier y además estaba optimizado para cumplir con el performance requerido, no era "trivial" darle mantenimiento y/o extenderlo.

En este punto debes tomar una decisión:
1. Dejar así el código porque funciona correctamente, resuelve el problema del usuario, implementa una buena arquitectura por si la solución escala, etc., pero al desarrollador que le toque darle mantenimiento se va a "divertir" y acordarse de tí seguido; ó
2. Entrar a la etapa de "refactorización", que es una práctica de eXtreme Programming dónde puedes "depurar" tu código.

Desde hace algún tiempo yo adopté la 2a opción y uno de los motivos es el reuso de software.

Debido al tiempo y costo, no se acostumbra en la etapa de Diseño (modelo tradicional de desarrollo) o Planeación (para los que usan MSF) llegar a un nivel de detalle tan profundo al modelar un sistema como para definir todo el reuso posible dentro del mismo y el resultado es que se reescribe el mismo código varias veces dentro de la aplicación y en algunas ocasiones de diferente manera (lease "cada quien lo escribe como se lo imagina"). Los problemas de estas prácticas son evidentes y el resultado más crítico se traduce en "otro sistema más" cuyo costo apenas empieza por el mantenimiento de miles y miles líneas de código repetidas, sin estándares y con diferente performance.

Una forma de resolver este problema es mediante la Refactorización porque nos ayuda de la siguiente manera:
1. Permite revisar si cumplimos con los estándares
2. Permite eliminar funcionalidad obsoleta
3. Permite borrar las "líneas comentadas" de cuando estábamos haciendo pruebas unitarias
4. Permite analizar si el diseño de las clases/métodos/propiedades es el más lógico para otros desarrolladores del equipo (Usabilidad de las Clases) y modificarlo
5. Permite concentrarse en el código final para decidir si queremos darle atributos para que sea extensible o mantenerlo encapsulado
6. Permite recodificar segmentos de código que hagan uso de piezas ya existentes dentro del proyecto


Y lo más importante, es que crea en el desarrollador una cultura de reuso y buenas prácticas porque la experiencia que gana al revisar su propio código en un nivel de abstracción superior se convierte en que su siguiente sistema tendrá las prácticas aprendidas en el anterior y así sucesivamente.

Inténtalo, es sorprendente el beneficio que obtienes!!!

Thursday, May 27, 2004

.NET dentro de tu Auto

Microsoft está trabajando sobre Windows Automotive que es una plataforma de software construida sobre Windows CE y el .NET Compact Framework para dispositivos dentro de automóviles. Entre las características del software es que es voice-enabled y conecta otros dispositivos/servicios usando tecnologías de Web Services.

Actualmente se está empezando a probar esta tecnología en algunos modelos de autos de reconocidas marcas como BMW, Citroen, DaimlerChrysler, Fiat, Honda, Volvo, Toyota, entre otros.

¿Quieres ver algunos videos de lo que nos espera en un futuro cercano? entra a esta liga.