Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found in http://www.gnu.org/copyleft/fdl.tml.
Resumen
El presente artículo resume los primeros meses de historia de Mono Hispano, una comunidad de desarrolladores de la plataforma Mono que ha captado en este tiempo una gran atención, un grupo amplio de personas y una actividad destacable.
Junto con la presentación de Mono Hispano, se describirá de forma sucinta la plataforma Mono para comprender la importancia de la misma como la integración de múltiples tecnologías bajo un paragüas común.
Tabla de contenidos
Mono Hispano es un grupo de personas con un interés común por la plataforma Mono y unidas por una lengua común, el español.
El nacimiento de Mono Hispano como es habitual, surgió dentro de una comunidad ya establecida, GNOME Hispano, y tras detectarse el interés de varias personas por Mono. El nacimiento partió las listas de correo, incluso podemos ver que correo fue el que lanzó la idea original de la creación de Mono Hispano. Tras un primer artículo de como comenzar a utilizar Mono en GNU/Linux, una vez que dejó de depender de Windows, rápidamente un grupo de personas que ya estaban interesadas en Mono se comenzaron a coordinar para el lanzamiento de Mono Hispano y el 20 de julio de 2002, se envió a la lista de GNOME Hispano la propuesta de la creación de Mono Hispano con una serie de objetivos iniciales.
Dos días después ya se había creado la lista de distribución de Mono Hispano y a la semana vió la luz el web de Mono Hispano y comezaron a aparecer en la web gran cantidad de nuevos contenidos, especialmente tutoriales de iniciación en C#, NUnit, Gtk# o XSP.
En el mismo Julio, llegó a la lista la propuesta para el gran primer proyecto de Mono Hispano, MonORB, el desarrollo de un ORB CORBA 3.0 en C# e integrado con la plataforma Mono. Un proyecto muy ambicioso que sin duda, llevará un largo periódo de maduración pero que parece muy bien encaminado.
Y también en este mismo mes, nació el canal #mono-hispano dentro de la red de IRC del proyecto GNOME, irc.gnome.org, y se impartió la primera charla sobre una clase de Mono.
En la actualidad, la lista de correo de Mono Hispano cuenta ya con más de 90 personas y poco a poco se va convirtiendo en uno de los grupos más importantes de Mono y .NET, formando a una comunidad que va madurando y de la cual seguro que en el futuro cercano, surgirán muchos de los desarrolladores de la una de las grandes bazas del software libre en el futuro, la plataforma de desarrollo de aplicaciones Mono.
Al ser Mono una implementación de partes de la plataforma .NET de Microsoft, es un proyecto que ha acercado mucho dos comunidades de desarrolladores y usuarios hasta ahora muy separadas: GNU/Linux y Unix en general y Windows. Por ello, el grupo de personas que participan en Mono Hispano es muy heterogéneo.
Dentro del grupo hay desarrolladores que actualmente están trabajando en la plataforma de Mono y que aportan una gran experiencia. Hay personas que estaban aprendiendo C# y .NET en Windows, y que han encontrado dentro de Mono Hispano una comunidad en la que intercambiar experiencias.
Pero sin duda, el grupo más numeroso es el de desarrolladores y usuarios de GNU/Linux que tienen interés por esta nueva plataforma y que no quieren perder la oportunidad de estar entre el grupo de cabeza a la hora de disfrutar de sus posibilidades, que en la actualidad ya son muy interesantes.
Dada esta heterogeneidad, es seguro que si estás leyendo este artículo, podrás entrar a forma parte de Mono Hispano, donde encontrarás una rica experiencia y un lugar en el que participar de forma activa en uno de los proyectos más apasionantes que existen ahora mismo en la Red.
La lista de correo es el punto de entrada y los archivos de la lista, los conocimientos acumulados en los meses de funcionamiento del grupo.
Como toda comunidad que surge en la Red, una serie de motivaciones han llevado a la creación de la misma. En el caso de Mono Hispano, la principal motivación es clara: aprender la plataforma Mono. Esto lleva consigo el aprendizaje de un nuevo lenguaje de programación, C#, de nuevas herramientas como nUnit, nAnt o nDoc entre otras, de nuevos conceptos de integración entre lenguajes y plataformas, y en general, de un cambio importante a la hora de desarrollar software, en especial de desarrollar software libre.
Para hacer realidad este objetivo, se lanzaron una serie de puntos en el correo que anunció la fundación de Mono Hispano. Entre ellos los más destacados son:
Dar a conocer que es mono como proyecto libre de .NET a la comunidad hispano-hablante.
Conocer C# y asi como otros lenguajes de programación incorporados a .NET
Estudiar a fondo GTK#
Transformar aplicaciones de GNOME a GTK#
Desarrollo de aplicaciones en GTK#
Conocer esta nueva arquitectura, Mono
Ayudar a implementar las partes restantes de Mono, principalmente clases y herramientas
Sin duda, una lista aún poco madura aunque muestra las intenciones con bastante exactitud. En la actualidad se han detectado otros objetivos importantes a llevar a cabo, entre los cuales destacamos uno:
Apoyo a proyectos que surgan relacionados con Mono
Es enorme el trabajo que aún queda por hacer en Mono para que llegue a ser un equivalente libre a la plataforma .NET de Microsoft por lo que las labores a llevar a cabo son muy amplias y nunca se tienen suficientes recursos. Por lo tanto, y antes de que sigamos, sí, te necesitamos :). Las tareas que se estaán llevando actualmente a cabo dentro de Mono Hispano las pasamos a detallar a continuación, aunque seguro que para cuando lea este artículo, serán muchas más.
Las tecnologías que rodean a Mono, aunque muy similares a Java, tienen sus propias características. Existen una gran cantidad de nuevas herramientas a aprender, asi como lenguajes, por lo que nos hemos fijado como uno de los principales objetivos en Mono Hispano, desvelar todas las partes que podamos de Mono de forma que el acercamiento a la plataforma sea lo menos complicado posible, rebajando la curva de aprendizaje todo lo que podamos. Los tutoriales que ya se encuentran en la actualidad dentro del sitio web (http://mono.es.gnome.org), aunque en muchos de ellos aún se está trabajando, son:
Mono en GNU/Linux: Manual de instalación y uso de Mono en GNU/Linux
Preguntas de Uso Frecuente sobre Mono: Traducción de la FAQ de Mono
Tutorial de C#: Tutorial para empezar a conocer C#
Tutorial de NUnit: Tutorial para aprender pruebas unitarias con NUnit
Tutorial de XSP (Ximian ASP.NET): Tutorial de XSP
Tutorial de .NET Remoting: Tutorial de .NET Remoting
Tutorial de Gtk#: Ejemplo básico de desarrollo de una aplicación usando la API Gtk#
La web de Mono Hispano es actualizada de forma constante para reflejar los cambios dentro del entorno. Nuevos tutoriales, proyectos, recursos, listas de distribución ... la labor es continua. Pero se dispone de un potente sistema de publicación basado en XML y PHP que permite, de forma sencilla, mantener el sitio Web.
El mantenimiento y ampliación del web de Mono Hispano es fundamental, al ser la cara más vista del grupo, por lo que siempre son necesarios recursos que ayuden a mantener todo en perfecto estado.
Dentro de la plataforma Mono, una de las partes más extensas que hay que llaver a cabo son la implementación de los cientos de clases de C# que un desarrollador de .NET espera tener disponibles dentro del entorno de desarrollo.
Y para asegurar la calidad de las mismas, se están creando pruebas unitarias para todas, de forma que en todo momento se pueda comprobar el estado de las clases, si se pasan las pruebas existentes, si se introducen cambios problemáticos o si el comportamiento de la clase es el esperado.
El desarrollo de estas pruebas unitarias exige el conocer la clase que se quiere probar a fondo y luego, desarrollar en C# las pruebas de la clase que aseguren su correcto funcionamiento. Sin duda, un buen camino para comenzar con el aprendizaje de las clases de Mono y la programación en C#.
Como ya comentamos en el apartado anterior, son cientos las clases que aún se están desarrollando en Mono y siempre se necesitan nuevas aportaciones para acelerar el desarrollo. El implementar clases de Mono no requiere más que conocer las tecnologías asociadas a la clase que estamos implementando y el lenguaje C#. Hay clases de lo más variadas, por lo que todo el mundo encontrará ese tipo de desarrollos que siempre le han gustado.
Una de las carencias actuales de Mono es un sistema de generación de documentación de clases flexible y potente. Se está trabajando ya en ello, en concreto en el desarrollo de una aplicación ASP.NET que muestre la documentación de las clases.
En Mono Hispano estamos intentando ayudar en esta labor estudiando la disponibilidad actual de herramientas, el sistema de documentación javadoc e intentando integrar todo en una herramienta.
En Mono Hispano, ha dado la casualidad de disponer entre sus miembros de personas con amplios conocimientos de CORBA por lo que, en cuanto se lanzó la idea de implementar un ORB de CORBA 3.0 en C# utilizando Mono, la idea cuajó de forma inmediata. Es un proyecto ambicioso y extenso, y por el camino se espera ir dando ya resultados, como la implementación de las clases de Remoting de Mono.
.NET pretende ser multilenguaje, es decir, al cumplir la especificación de ECMA, lo que se quiere conseguir es la infraestructura de un lenguaje común (CLI) el cual tiene que tener un sistema de tipos común (CTS), una especificación del lenguaje común (CLS) y un sistema de ejecución virtual conocido como VES o CLR.
Con ello lo que se quiere conseguir es adaptar a este CLI multitud de lenguajes, como por ejemplo C++ a managed C++, Java a J#, VisualBasic a VB.net, así como un gran número de lenguajes, adoptando un mismo tipo de datos (CTS) y un mismo modelo de ejecución (CLR). Para ello han de seguirse las especificaciones que vienen reflejadas en ECMA.
Una de las características del código en .NET es que es administrado, no es necesario que el programador se preocupe de la memoria asignada ni de liberarla, eso ya es propio del recolector de basura (GC). Otra de las características es que aún así puede operar con código unsafe (inseguro) y poder hacer asignación de memoria y liberación a través de la interfaz Dispose al igual que operar con código heredado (legacy) bien mediante llamadas PInvoke a otras tecnologías, de igual forma a como lo hace .NET para comunicarse con el modelo COM.
Tanto de COM como DCOM, únicamente mencionar que el modelo .NET viene a solucionar algunas de las carencias que traia, tanto en complejidad como que ahora va a contar además de un modelo distribuido con un modelo multilenguaje.
En el caso de CORBA, ambas tecnologías son dos marcos de trabajo tanto multiplataforma como multilenguaje. En cuanto a .NET abarca un amplio abanico de aspectos no tratados en CORBA, como puede ser ASP.NET y Winforms. En cuanto a la parte de remoting ambas son muy parecidas, los objetos son solicitados y bien se encarga de toda la localización el ORB mediante unos mecanismos que no hace falta mencionar al igual que a través de sumideros, intermediarios (proxies) y canales como lo hace la parte de remoting anteriormente explicada. Ambas son muy similares al ser estándares abiertos (OMB y ECMA) aunque en cierta parte lo que es .NET no cuenta con un modelo multiplataforma puesto que unicamente está presente en la plataforma tipo windows, en ese caso podríamos decir que Mono si es multiplataforma al poder ser usado tanto en sistemas *NIX (GNU/Linux, OpenBSD, FreeBSD..) como en sistemas windows, sólo recordar que todo el toolkit de GTK# está integrada con la plataforma windows.
Después de introducir el concepto de componentes al igual que algunos modelos (CCM, EJB, ..) veremos que tenemos el concepto de contexto en .NET que es el mismo, al igual que se hace plantear la necesidad de AOP (Programación Orientada a Aspectos) aún no implementada, por ello ya en .GNU se está pensando si introducirlo a C# o programar un nuevo lenguaje con sus añadidos conocido como CAT o C@.
Con la necesidad de la conexión a bases de datos surge una implementación en .NET conocida como ADO.NET que pretende la comunicación con bases de datos a un alto nivel de abstracción. Va a permitir la manipulación de bases de datos, agregando, insertando, borrando o modificando registros viniendo a ser muy familiar con lo que era libgda que es la librería de conexión a base de datos conocida en GNOME como gnome-db únicamente que con todas las ventajas de .NET al ser un modelo multilenguaje totalmente distribuido.
Para ello, los de mono están implementando ADO.NET a partir de muchas de las características de libgda portando esta biblioteca a C#, consiguiendo la manipulación de bases de datos como ORACLE, PostgreSQL, MySQL, SQLLite entre otras, al igual como OLEDB entre otros proveedores. Esto permite la conectividad a las bases de datos de una forma sencilla utilizando una clase para la conexión pertinente en la que se le pasa el proveedor, usuario, contraseña y la ubicación de la base de datos con la que queremos conectar. Conforme vayan apareciendo nuevos proveedores se irán implementando nuevas clases en libgda y aumentará el número de tipos diferentes de bases de datos a las que podremos conectarnos.
Unicamente comentar que al igual que la lectura y manipulación de una base de datos tendremos otras características como la creación y ejecución de procedimientos almacenados, al igual que la manipulación de bases de datos desconectadas conocidas como DataSets.
La idea detrás de ASP.NET es la misma que existía con ASP (Active Server Pages): hacer sencilla la programación dentro del servidor web. En las páginas ASP, muy similares en idea a PHP, se podía incorporar junto al HTML, código de acceso a BD, de acceso a librerías para control de sesiones web y otras funcionalidades muy útiles a la hora de desarrollar aplicaciones web.
La principal referencia de ASP.NET la tenemos en http://www.asp.net/, un portal de Microsoft donde se nos describe la tecnología y sus ventajas. Junto con los motivos para utilizar ASP.NET, tenemos más de 900 ejemplos que nos pueden ayudar a conocer el entorno de forma rápida, junto con tutoriales más detallados para conocer con detalle ciertos aspectos de la plataforma.
La cantidad de artículos, libros y portales dedicados a ASP.NET es bastante importante lo que muestra que ya es una tecnología que poco a poco se va implantando. Al ser XSP una implementación de ASP.NET, podemos reaprovechar todos estos recursos en nuestra plataforma Mono. El trabajar codo con codo con la plataforma de Microsoft tiene sus ventajas ;-)
Pero, respondamos a la pregunta de esta sección: ASP.NET es una plataforma que se integra con IIS (en nuestro caso será por ejemplo con Apache) y que permite que se accedan a páginas con extensión "aspx" las cuales pueden tener junto al HTML, código en diferentes lenguajes de programación, aunque sólo se debe de utilizar uno por página.
Para el lector familizarizado con PHP, Zope o J2EE, la idea es la misma: facilitar el desarrollo de aplicaciones con interfaz web. Para ello es común montar una infraestructura de librerías y servidores detrás del servidor web. El servidor web recibe la petición y si es de una página activa, terminada en ".aspx", le pasa la petición a la arquitectura ASP.NET.
En el caso de XSP y Mono, cuando Apache vea que se pide una página ".aspx", le pasará la petición al módulo XSP el cual con la ayuda de Mono, servirá la petición, entregará los resultados a Apache y este se los entregará al cliente.
Sólo cabe destacar de XSP como plataforma totalmente libre desarrollada por mono, una arquitectura para el desarrollo de aplicaciones web destacada por los controles (elementos de interfaz de usuario y de validación) y los formularios web, además de poder utilizar código en otros lenguajes de la plataforma .NET al ser totalmente una arquitectura multilenguaje que nos permite tanto hacer nuestras páginas web en C#, J#, VB.NET, managed C y otros muchos lenguajes adaptados a la arquitectura .NET y los que en un futuro se adapten a las especificaciones de la CLS.
Otro proyecto de los de mono-hispano es la de implementar un ORB siguiendo el estandar de la OMG para mono totalmente escrito en C#. Por el momento se está trabajando en un compilador IDL y en la parte de IIOP que es la parte de la comunicación entre objetos a través de la implementación existente de remoting en mono. Debido de ello, se necesita la parte de Remoting por canales TCP, trabajo que actualmente también se está desarrollando y esperamos que pronto sea realidad, al igual que lo que a largo plazo llegará a ser un ORB para mono.
Al igual que mono, tenemos otra arquitectura que está desarrollando su propio repertorio de clases, al igual que su propio compilador a CIL como su propio intérprete de CIL. Aún no se dispone de un JIT como en la plataforma mono o .NET, por lo que el encargado de interpretar el código en CIL lo hace un interprete como puede serlo mint en mono.
La idea del proyecto es muy parecida a la de mono, intentan implementar la arquitectura .NET pero de manera que sea dentro del software libre. Utilizan la licencia GPL para su BCL como para el compilador y el intérprete y también en un futuro quieren intentar solventar algunas carencias que tiene C# como puede ser la herencia múltiple, privada, la AOP (programación orientadas a aspectos) y otros temas de interés haciendo otro lenguaje añadido de C# que será conocido como C@ (pronunciado CAT) si finalmente se desarrolla.
Para la parte de programación gráfica tenemos dos toolkits maravillosos que están siendo totalmente adaptados a mono, conocidas como GTK# y QTc#, al igual que WindowForms. Así que con el tiempo muchas aplicaciones tanto para GNOME como KDE, como las utilizadas por estos toolkits podrán ir siendo portadas a lo que es Mono. Quien sabe, quizás algún día tengamos totalmente nuestro escritorio para mono y pasemos a utilizar GNOME#, el tiempo lo dirá todo.
Otros servicios que tiene mono, es XML, tratamiento de hilos, reflection, tratamiento de cifrado con un amplio repertorio de algoritmos criptográficos (RSA, SHA, DES, AES, MD5..) al igual que muchos otros que ireis conociendo conforme vayais conociendo esta fantástica arquitectura.