viernes, julio 20, 2007

MoMA, la mamá de los monos...

MoMA o Mono Migration Analyzer, es una herramienta que ayuda a identificar diferentes problemas que se tengan al portar las aplicaciones del Framework .NET al Framework de Mono. Aunque MoMA pueda ayudar a enseñar problemas potenciales, existen muchos factores completos que no pueden ser previstos mediante el uso de una sola herramienta. Pero la utilidad de MoMA es innegable. Si tienes una aplicación hecha en .NET que no pase ninguna prueba de MoMA... entonces ya tienes una idea del trabajo que tendrás que hacer para migrar esa aplicación al Mono Framework.

Recordemos que la verdadera prueba resulta al correr tu aplicación sin problemas en Mono.
Pero para que se acostumbren a codificar bien, y tengan una idea de como usar MoMA, aquí esta una pequeña guia, ¡espero que les sea de utilidad!

nota aclaratoria: las capturas de pantallas ajustadas a menor tamaño no son tan importantes o interesantes como las de tamaño "grande", esto es claro, bajo el criterio del autor. Como siempre, pueden dar click a cualquier imagen para verla en tamaño real.

Guía ejemplo de uso de MoMA:

1.0 Descargando MoMA

Puedes descargar MoMA de http://www.mono-project.com/Moma , luego ve a la seccion de descargas "Download" y allí encontraras el vinculo de descarga.

"Captura de pantalla del sitio web de MoMA con el URL marcado (muy marcado) para descargarlo"

Recuerden que MoMA necesita el framwork .NET 2.0 ó Mono 1.2+, como solo estoy usando GNU\Linux, usare Mono para correr MoMA.

1.1 Ejecutando MoMA

Después de descargar el archivo .Zip de MoMA, extraemos su contenido y podremos ver lo siguiente:

"Captura de pantalla del contenido del archivo .Zip descargado"

Ahi estan los archivos que necesitamos, muchos diran: ah!, son simples ejecutables de windows. Pues noooo, estos archivos "exe" estan compilados en un lenguaje intermedio (como el bytecode de Java) llamado MSIL (MicroSoft Intermedium Languaje). Y las extensiones "exe" y "dll" pues solo son extensiones re utilizadas.
Vamos a usar Mono para correr/interpretar/compilar (como le quieran decir) el archivo "MoMA.exe".
Abrimos una consola (en mi caso usare Konsole) y nos vamos a la carpeta donde se encuentra "MoMA.exe", ahi ejecutamos el comando:
mono MoMA.exe
Aquí hay una captura por si se pierden:

"Captura de la consola, usando mono para ejecutar MoMA.exe"

Y si todo sale bien, pues podremos ver la ventana de MoMA en nuestra pantalla:

"Captura de MoMA en GNU\Linux, usando KDE como Desktop Manager"

1.2 Usando MoMA

Para usar MoMA solo necesitamos ejecutables hechos con el Framework .NET y dar unos cuantos clicks.
Yo usare de ejemplo la librería de un amigo para comprobar si puede ser ejecutado o no con Mono. Ustedes pueden usar cualquier otro compilado (el que ustedes quieran) que corra en el Framework .NET 1.0 y 2.0, y que evidentemente no sea una librería especifica a la plataforma o parte de .NET (como System.dll). Esta es la librería CustomDataSource(CDS) Ver.1.0 de Roberto Linares, que puede ser encontrada aquí.

"Captura de pantalla, descarga de Bin.rar de CDS, foro ingenieria UES-FMOcc"

En el paso 2 (de 4) de MoMA, podemos agregar uno o varios ejecutables hechos con el Framework .NET, asi que despues de descargar los binarios de CDS, y extraerlos en mi escritorio, agregare el archivo "CrypterClassLib.dll" dando click en el boton con signo "+" y luego eligiendo el/los archivo a agregar, asi:

"Captura de pantalla, agregando archivos para analizar con MoMA"

"Captura de pantalla, ¿Listo para analizar?"

Ya con la lista de archivos que seran analizados, pues solo basta dar click en "Next"; para que MoMA analize el ejecutable y podamos ver un resumen de compatibilidad del archivo con mono. Al final obtendremos un resultado como este:

"Captura de Pantalla, ¡Te salvaste Roberto!"

En este paso (3 de 4) podemos ver que en el análisis general, el .dll analizado paso las pruebas con exito.
Asi que en teoria, el archivo "CrypterClassLib.dll" puede ejecutarse sin problemas con el Mono Framwork.
Vaya Roberto... te salvaste del bochorno publico jaja ;)

Pero... ¿Que sucede cuando TODO sale mal?

"Captura de Pantalla, ¡OH NO!"

Bien, si sucede algo tragico como lo muestra la captura anterior, o peor... pues MoMA genera un util reporte (paso 4 de 4) que muestra de manera general, que se puede hacer para combatir esta incompatibilidad.

"Captura reporte de ejemplo"

Con este reporte en mano y teniendo en cuenta ciertos tips de migracion/codificacion seremos capaces de migrar una aplicacion casi (especulativamente) sin problemas de un S.O. a otro.

1.3 Consideraciones finales

No olviden enviar el reporte (sea bueno o malo) de compatibilidad que genera MoMA (MoMA lo envia automáticamente):

"Captura de pantalla, envío de reporte a Mono Project"

Esto ayuda para que los desarrolladores de Mono coloquen especial énfasis en los problemas mas comunes de compatibilidad encontrados, es tan fácil como dar un click al botón "Submit Report".

Una guía mas completa y extensa para corregir problemas de interoperabilidad puede ser hallada aquí.

Hasta Luego!

Sunsetting Sr. Byte.

El Sr. Byte ha estado más de 5 años inactivo. Digamos que estaba en " code freeze ". Pero ahora es el último release. Quizas no...