Mono y la vida real
Publicado por Rómulo Rodríguez 23 Noviembre 2005 en Software Libre / Abierto. english • español
En el blog de Miguel de Icaza se anuncia el estado del desarrollo de Mono, el clon libre del .NET framework.
He estado haciéndole el seguimiento a Mono desde hace ya unos años y recién este año el equipo de desarrollo que dirijo decidió embarcarse en la migración de uno de nuestros sistemas a Mono y a C#.
El sistema en cuestión es un gestor de producción de medicamentos diseñado para farmacias hospitalarias. Tiene varios años estable en unos diez hospitales privados del centro del país. Está basado en Visual Basic 6 y usa MS SQL Server como motor de base de datos. Por supuesto que ya los requerimientos de los usuarios y el manejo de datos y situaciones muy diversas han hecho que tomáramos la decisión de migrarlo a una nueva plataforma.
La primera decisión fué migrarlo a .NET y C# siguiendo las recomendaciones de Microsoft. Hay herramientas para migrar el código a Visual Basic.NET y luego a C# así que eso nos podía ahorrar esfuerzo. Estuvimos un tiempo evaluando lo que hacían estas herramientas y nos dimos cuenta que como que era mejor desechar esa vía y rediseñar el sistema de cero. Eso nos podía permitir corregir errores de diseño del sistema original y podíamos mejorar la mantenibilidad del código y el reuso de grandes porciones de código.
Estando embarcados en el rediseño del sistema usando las herramientas de Microsoft nos dimos cuenta que el cliente requería que el sistema en algunos casos donde los hospitales son públicos se cumpliera con el famoso decreto 3390 de software libre. Ni modo. A repensar nuevamente el problema. Pero como ya habíamos avanzado algo en C# pensamos que lo más adecuado era usar Mono.
Hicimos pruebas de compatibilidad con Mono, Linux y Windows y nos dimos cuenta rapidamente que era factible la migración a Mono.
Pero ojo, había detalles en el camino.
Lo primero es que nuestro sistema usa clientes gordos. Solamente una pequeña parte es con una interfaz web asi que ese código podía ser usado sin problemas en ASP.NET o en XSP.NET. El resto estaba en Windows Forms, el sistema de ventanas de .NET. ¿Y qué sistema de ventanas ofrece Mono? Nada de WIndows Forms. La versión 1.1.09, y la 1.1.10 que acaba de anunciar Miguel no tienen Windows Forms. Usan GTK-sharp.
Nos embarcamos entonces a aprender GTK-sharp. Ningún problema. Podemos usar Glade, generar archivos XML y una clase dentro de Mono que se usa para generar las ventanas a partir de esos XML. Una solución verdaderamente elegante, y casi mágica considerando que las herramientas de desarrollo para Mono no son tan elaboradas y sofisticadas como Visual Studio.
¿Y que de la base de datos? Pues migramos todo a PostgreSQL.
AL principio pensamos usar MySQL, pero vimos que nuestro sistema en SQL Server era demasiado sofisticado para MySQL. Definitivamente PostGreSQL es la opción. Creamos un script en SQL para generar la base de datos en PostGreSQL bajo Linux (usamos Fedora Core 4) y listo. Ningún problema. Unos cuantos dolores de cabeza con la conversión de tipos pero nada que no pudiéramos solucionar.
¿Y en qué estamos ahora? Miguel anuncia que Windows Forms está casi listo. En tres meses puede que lo liberen formalmente. Nosotros estamos esperando el financiamiento de gran parte del proyecto para Enero, así que tal vez esperemos a Windows Forms. Aunque quizá nos quedemos con GTK-sharp. No estamos seguros. Pero de cualquier forma, creemos que estamos en un momento del desarrollo que irnos por una vía o la otra no nos afecta mucho.
¿Ventajas de Mono?
Para nosotros, varias.
- software libre
- C#, que es fácil y divertido
- posibilidad de combinar la parte web con clientes gordos
- uso de PostgreSQL
- modelo de ventanas super fácil considerando que las herramientas no están tan avanzadas
- seguir usando las herramientas de desarrollo y modelaje de Microsoft para generar código C# que podamos usar en Mono
Una monada, ¿no?
Excelente enfoque para usar software libre y no perder el “activo” que ya tenían.
¿Cuanto tiempo estimas que le tomó ponerse en los “palitos” en Mono?
¿Qué tal el performance usando Mono?
Pasar de .NET tradicional con Windows Forms y Visual Studio a Mono con Monodevelop o con Sharpdevelop y Glade nos tardó como un par de días nada más. Creo que lo más crítico es pasar de Visual Basic 6 a C# ya que tienes que rediseñar la aplicación completamente si quieres algo eficiente. En el caso nuestro el performance no es crítico ya que es muy sencilla la cosa y cuando mucho vas a tener quizás dos o tres usuarios a la vez conectados. Pero lo que si te puedo decir es que la plataforma .NET o la Mono es muchísimo más rápida que VB6, al menos para lo que nosotros la usamos.
quiero desarrollar una aplicacion en .NET pero tengo una duda ¿es posible usar PostGreSQL?
claro que se puede usando ODBC. Nosotros usamos Mono con PostGreSQL sin problemas. .NET con PostGreSQl es mas o menos lo mismo. Saludos!
hola, en estos momentos tengo que desarrollar un sistema bajo mono, en C#, pero mi problema, es con la intefaz grafica, como tu desarrollas las interfaces?? yo he tratado pero los manuales que encuentro son solo de crear una ventana y un boton.. y ahora he leido sobre el lanzamiento de los win forms en mono… como seria eso? no ando muy metido… hay algo que me ayude a desarrollar la intefaz grafica como en Visual Studio??( arrastrar y soltar)????
La interrfaz gráfica en estos momentos la tienes que hacer con Gtk# que es el sistema de ventanas compatible a la fecha con Mono. Para Windows.Forms tienes que esperar a la versión 1.2 que todavía no ha salido. Gtk# es el sistema de ventanas y controles el cual debes diseñar a punta de código. Si quieres una ayuda más gráfica puedes usar el programa glade y las clases de glade#. Glade te permite crear un archivo xml con las descripciones de los objetos y señales que contiene tu ventana y permite cargarlo al código para interactuar con ella. Lo que pasa es que con glade no se puede hacer todo, sirve para muchos casos pero no para todos. Así que quizás termines usando una mezcla de glade más programación directa con Gtk# e instanciando y ubicando programáticamente tu mismo los objetos. Acá hay algo muy básico de como funciona el sistema, pero seguro que si le das un google a “glade tutorial mono” o algo similar encuentras ejemplos más complejos. Saludos!
gracias!!
Quisiera preguntaros sobre los Reports. En Windows estamos usando Crystal Reports. Qué usais con Mono? Estamos viendo que Linux está pegando fuerte, sobre todo desde que Novell pasó a patrocinar tanto Mono como Suse Linux, y vemos una realidad perfectamente factible el hecho de desarrollar software multi-plataforma .NET. Pero ya digo, el tema Reports es una espina clavada. Alguien puede aportarme sugerencias? Gracias de antemano.
Hola.
Mi propuesta para los reports es report manager, que funciona tanto para linux como para windows, maneja la mayoria de los motores de bases de datos, por no decir todos.
Y esta bastante bien, intuitivo, facil y sobre todo libre.
Hola
quisiera preguntar que programas necesito para desarrollar una aplicacion web sencilla que pueda correr en linux usando mono.
hasta con un editor de texto sencillo puedes desarrollar una aplicación web en mono. No te hace falta mucho la verdad en cuestión de herramientas. Si quieres prueba monodevelop que es bastante bueno y es en linux.
Quisiera que me recomendaran manuales de mono, c# en español.
Muchas Gracias.
Salu2.
Ahora me han dado latarea de desarrollar una aplicacion en mono, tengo el Glade# pero la clase c# donde la escribo en Visual Studio? Como hago para enlazar la interfaz de Glade con la clase?
No estoy seguro de entender tu problema. Nunca uso Visual Studio. Prefiero Sharpdevelop o Monodevelop si es en Linux que incluye stetic para crear las interfaces directamente.
Mira el problema es que mi aplicacion es sobre Windows entonces baje esta version de Mono las herramientas que me mencionas tambien se pueden usar en Windows, gracias por responder la pregunta anterior
Rómulo, tu post ha sido excelente dessde el punto de vista práctico para la toma de decisión de por cual camini seguir.
A casi un año despues de escribirlo, quizás sea interesante ampliarlo con lo experiencia adquirida.
Saludos.
wow, cierto, casi un año!! saludos!
HOLA QUISIERA SABER SI ME PUEDEN AYUDAR A REALIZAR UN SCRIPT QUE GENERE UN CLON DE UNA BASE DE DATOS EN MYSQL, YA QUE LA BASE DE DATOS QUE GENERE EN MYSQL NO PUEDE SER TRANSPORTADA DE UNA COMPUTADORA A OTRA, POR LO QUE NECESITO GENERAL EL SCRIPT Y AGRADECERIA QUE ME PUDIERAN AYUDAR, MIL GRACIAS DE ANTEMANO Y SI ME LO ENVIAN A MI CORREO MUCHO MEJOR.
QUE ES EL SISTEMA OPERATIVO A3 Y DONDE SE HUSA
Hola amigos, estoy en fase de desarrollar una aplicacion web en mi servidor de base de datos postgresql, esta apli estará en dicho servidor e interactuara con la bd, despues los clientes accederan a la apli a través del browser, mi pregunta es: es posible llevar esta a cabo usando el proyecto mono?
si estás familiarizado con ASP.NET puedes usar mono sin ningún problemas.
no estoy familiarizado con asp.net, podrían indicarme algunos enlaces para documentarme sobre como montar la web app que os comenté un poco más arriba en mono?
revisa Mono hispano, en esa página puedes encontrar enlaces a tutoriales.
donde puedo encontrar una guia para manejar postgreSQL desde Mono gracias
La página de PostgreSQL en el proyecto Mono es donde buscaría yo primero. El resto métete en los foros de Mono hispano, allí siempre hay gente dispuesta a ayudar.
Hola termine una aplicacion windows hecha en vs.net 2005 c#, ahora como le paso a mono y como le uso con mi base que esta en sql server.
instala mono primero, la última versión ya tiene WindowsForms más o menos funcionando, digo más o menos porque aún hay muchas cosas que no tiene, así que tendrías que compilar tu aplicación en mono y probar. Revisa también la documentación de mono sobre la conexión a sql server, no hay problema pero creo que hay alguna diferencia en los objetos usados.
He estado probando por bastante tiempo VS.NET y Mono, tengo varias cosas en contra de mono (pudieran ser muchas). Lo primero es que a menudo te topas con que alguna funcionalidad no está implementada, y a romperte la cabeza nuevamente. Siempre está desactualizado (la plataforma, no el lenguaje) por ejemplo ahora M$ está en la versión del framework 3.0 y ¿Cuál tiene implementado Mono?: parte del 1.1. Las cosas que han hecho lo hacen por ingeniería inversa ya que no existen especificaciones de como hacerlo (excepto el lenguaje C# y el CLI). El rendimiento en la parte Web deja mucho que desear, bastante malo, el consumo de memoria va en incremento hasta las nubes en el servidor Web (No voy a ponerme a hablar del GC, ya que hace cosa que no esperas, y me ocuparía toda una página, y hasta parece que no funciona).
Su futuro lo veo precisamente en GTK y las cosas que puedan hacer el proyecto y no seguir tratando de hacer ingenierías inversa a las cosas de M$, felicidades por la parte gráfica GTK, Glade etc..
hola romulo…
de bastante interes tu log…
yo tengo un problema similar…
tengo q realizar mi trabajo de titulo para optar al titulo de ingeniero (E) informatico, el hecho es que, deseo hacerlo con software libre, todo pasa por un tema de licencias por parte del software privativo, admas que me atrae la idea de usar, conocer y difundir el uso de software libre…
bueno, siguiendo con la idea: mi interes es usar software libre para desarrollar una aplicacion que contempla :_
*base de datos
*interfaz de usuario
he decidido usar software libre uno por el tema de licencias y dos para darle un valor agregado al proyecto. mi pregunta es saber que me recomiendas tu, antes que nada dbo mencionar que jamas hemos usado software libre mas que php y mysql, pero estos estan enfocados a aplicaciones web, cosa que no deseo implementar como trabajo de titulo. entonces por este motivo y los detallados con anterioridad es que pido tu consejo, el resto, sera cosa de invstigacion y estudio.
por cierto instale mono.net en mi pc, bajo plataforma windows, al momento de usar glade, usos unos widget que dicen deprecated, pero al momento de hacer click en make, me lanza una ventana d einformacion que dice algo asi:
los widget deprecated seleccionados no los reconoce gtkmm2, trate d ecambarlos y luego genere el archivo, algo asi, no lo entendi mucho pues esta en ingles…
bueno, espero que puedas ayudarme en esta empresa, pues no me quedo muy claro que fue lo que realisaste en tu area de trabajo.
que estes bien, a por cierto, si es posible que me envies la respuesta a mi correo que he dejado en el area que lo solicita, de antemano mucha gracias, estare atento a tus comentarios
Interesante tu articulo, tambien comentas que pasaste tu bases de datos de SQL Server a PostgreSQL, los Stores Procedures de SQL funcionan en PostgreSQL ? , si es asi bacan, pero si NO, que pasaria si tuvieras una aplicación con mas 2000 procedures y no puedes usarlo en postgreSQL seria una desgracia y ya no se llamaria migración no crees, en PostgreSQL existen store procedure ? te agradeceria si pudieras comentarnos mas sobre la migración, saludos.
En aquel caso no teníamos tantos procedimientos almacenados por lo que estuvimos algún tiempo revisándolos para que corrieran y listo. Si tienes algo muy grando en SQL Server como lo que cuentas yo creo que lo mejor es dejarlo allí y hacer que tu aplicación en Mono se conecte a SQL Server. Si obligatoriamente tienes que migrar a Postgre por alguna razón creo que tendrás que analizar la conversión de esos 2000 procedimientos almacenados. Creo que debe haber por allí software para automatizar esto, suena a algo que ya otros deben haber hecho.