En
esta ocasión quiero compartir mi estrategia o alternativa de
desarrollo de software multiplataforma con herramientas de software
libre. De antemano debo anotar 2 cosas; una, que tengo muy pocos
conocimientos en el mundo del software libre y dos que reconozco que
la propuesta puede ser bastante polémica, al menos en uno de sus
elementos.
Esta
propuesta tiene sus antecedentes, y es que durante unos años he
hecho algunos desarrollos utilizando herramientas MS (Visual FoxPro,
Visual Basic, Access, Excel, SQL Server), por supuesto para el SO
Windows. Ahora en la empresa que trabajo me exigen que los
desarrollos sean sobre software libre y que funcionen en el SO Linux,
de modo que para que el cambio no fuera tan traumático analice
varias variantes de migración y la que más se adaptó a mi gusto y
a mis necesidades fue esta que aquí propongo.
La
propuesta se divide en varias partes:
- Lenguaje de Programación.
- Entorno de desarrollo (IDE).
- Sistema de Gestión de Bases de Datos (SGBD).
- Mecanismo de conexión a la base de datos
- Generación y presentación de informes
- Uso de estándares y recomendaciones para la escritura de código
- Lenguaje de Programación (C#)
C# (C sharp) es un
lenguaje de programación orientado a objetos desarrollado y
estandarizado por Microsoft como parte de su plataforma .NET.
Este lenguaje esta
estandarizado por la ECMA e ISO respectivamente
- Estandar ECMA desde diciembre 2001 a través de la norma 334
- Estandar ISO a través de la ISO/IEC 23270:2006
Aunque
C# forma parte de la plataforma.NET de MS, es un lenguaje de
programación independiente y multiplataforma. Existen compiladores
libres y gratuitos para este lenguaje de programación tanto para
Windows (SharpDevelop, MonoDevelop) como para Linux (MonoDevelop,
DotGNU).
Este lenguaje de
programación es una evolución del C++ y a su vez del C que está
muy ligado al Sistema Operativo Unix, C# ha estado influenciado por
los lenguajes de programación Java y Delphi (Object Pascal).
C# es
un lenguaje de programación muy sencillo, potente y entretenido, es
escogido en esta propuesta porque es el lenguaje de programación de
Microsoft con mejor soporte en Linux a través del proyecto MONO.
Agregar
en este punto que el CLI (Common Language Infrastructure) que vendría
siendo como la máquina virtual sobre la que se ejecutan las
aplicaciones .NET también esta Normalizado/Estandarizado por ECMA e
ISO
2 -
Entorno de desarrollo (IDE) (SharpDevelop, MonoDevelop)
SharpDevelop es un
entorno de desarrollo integrado (IDE) libre para los lenguajes de
programación C#, Visual Basic.NET y Boo para el sistema operativo
Windows bajo la licencia LGPL, entre sus características más
relevantes se encuentran:
- Abrir proyectos de Visual Studio.NET
- Diseñador de Windows forms.
- Completado de código.
- Depurador incorporado.
- Conversor bidireccional entre C# y Visual Basic .NET
- Escrito enteramente en C#.
El sitio oficial de
SharDevelop es http://www.icsharpcode.net/OpenSource/SD
MonoDevelop es un IDE
libre y gratuito bajo la licencia GPL, diseñado primordialmente
para C# y otros lenguajes .NET, es mantenido por el Proyecto Mono
(http://www.mono-project.com/)
que a su vez es impulsado por Novell
Este IDE incluye
manejo de clases, ayuda incorporada, completamiento de código, y un
depurador integrado. Incluye un instalador para Windows y se
distribuye en los repositorios para Debian y Ubuntu. A partir de la
versión 2.4 es capaz de abrir proyectos de Visual Studio.NET.
Actualmente los repositorios de Ubuntu 12.04 distribuyen la versión
2.8
En
este punto se incluyen dos propuestas porque ambas se complementan
entre sí, por un lado SharpDevelop no tiene presencia en Linux pero
incluye un diseñador windows forms mucho más acabado que
MonoDevelop, este es un elemento importante en el diseño visual de
aplicaciones con interface gráfica.
3 -
Sistema de Gestión de Bases de Datos (SGBD) (PostgreSQL)
PostgreSQL
es un sistema de gestión de base de datos relacional orientada a
objetos y libre, publicado bajo la licencia BSD, es ampliamente
soportado en las plataformas Windows y Linux. A pesar de su similitud
con muchos gestores de bases de datos presenta características que
lo convierten en unos de los más potentes, entre ellas:
- Alta concurrencia
- Amplia variedad de tipos de datos: Textos de largo ilimitado, Figuras geométricas, Direcciones IP, Direcciones MAC, Tipos de datos espaciales, arreglos y otros.
- Varios lenguajes para Procedimientos Almacenados y Funciones: Pueden escribirse en PL/PgSQL, C, C++, Java y otros.
- Soporte para Replicación.
- Varias herramientas para la administración de las Bases de Datos: PGAdmin, PhpPgAdmin, PgAccess y otros.
- Driver para la API ODBC, .NET, OLE DB y otros
PostgreSQL
presenta muchas otras características innovadoras. Los
desarrolladores que una vez usaron MS Access y MS SQL Server se
sentirán muy cómodos en la transición hacia este SGBD. Resulta
completamente viable y sencillo a través de ODBC migrar una base de
datos SQL Server a PostgreSQL, a excepción de los procedimientos
almacenados y funciones escritas en el lenguaje Transact-SQL.
4 -
Mecanismo de conexión a la base de datos (ODBC)
Open
DataBase Connectivity (ODBC), Conectividad Abierta a Bases de Datos
es un estándar de acceso a Bases de datos desarrollado por
Microsoft, el objetivo de ODBC es hacer posible el acceder a
cualquier dato desde cualquier aplicación, sin importar qué Sistema
Gestor de Bases de Datos (SGBD) almacene los datos. Para que esto
funcione tanto la aplicación como el SGBD deben ser compatibles con
ODBC. De modo que ODBC es independiente del lenguaje de programación,
del SGBD y del Sistema Operativo. Linux cuenta con soporte para ODBC
a través del proyecto UnixODBC (http://www.unixodbc.org).
UnixODBC
proporciona un completo gestor de controladores ODBC, incluyendo la
completa API de ODBC, todas las funciones de la utilidad del
controlador, instalador, desinstalador y biblioteca de configuración
para controladores ODBC, un administrador en interfaz gráfica de
usuario, una utilidad de administración de la línea de comandos.
Panel
de administración ODBC Ubuntu 10.04 invocado a través del comando
ODBCConfig
Panel de
administración ODBC Windows 7, a través de Inicio\Herramientas
Administrativas\Orígenes de datos ODBC
Utilizar
ODBC como capa intermedia entre la aplicación y la base de datos nos
da las siguientes posibilidades, entre muchas otras:
- El nombre de la base de datos es transparente para la aplicación, de modo que desde una única instalación del programa se pueden manejar varias bases de datos, trabajando con las cadenas de conexión DSN.
- Gestión de la seguridad más funcional y flexible, la aplicación puede incluir su propio mecanismo de seguridad y la seguridad de la base de datos es administrada por el administrador de la base de datos a través de los DSN de usuarios.
5 -
Generación y presentación de informes (NReports)
NReports
0.8.1 es un reporteador open source y multiplataforma, distribuido
bajo la licencia de Creative Commons. Utiliza el formato de archivos
RDL que lo convierte en una buena opción para migrar reportes
diseñados en Microsoft Reporting Services y toda la reporteria de
Microsoft. El autor distribuye el código fuente del reporteador que
está escrito completamente en C# (http://nreports.codeplex.com/).
Entre
sus características tiene un diseñador y visor de informes usando
windows forms para representación en Windows, y un diseñador y
visor de informes usando Gtk y Cairo para representación en Linux.
Es capaz de exportar los reportes en formato PDF, el cual es un
formato abierto, estandarizado y multiplataforma. En las pruebas
realizadas mostro una buena y adecuada integración en Mono en Linux.
Este
reporteador es un fork de fyireporting (www.fyireporting.com)
un proyecto open source de la especificación RDL de MS. A su vez
también existe un fork de NReports llamado ReportingCould.
En un
próximo artículo lo dedicaré a este reporteador entre otras cosas
de como pasar parámetros al reporte y el mecanismo que utilizo para
vincular los reportes al origen de datos en tiempo de ejecución.
- - Uso de estándares y recomendaciones para la escritura de código. (Escritura de codigo para aplicaciones multiplataforma)
- No hacer llamadas a APIs o funciones propias del Sistema Operativo (SO).
- Utilizar las funciones propias del lenguaje de programación para el trabajo con el sistema de archivos, hay que tener presente que cada SO tiene sus particularidades en el manejo de archivos y directorios.
- No utilizar controles o bibliotecas de terceros a menos que se haya probado que funcionan en las plataformas de destino de la aplicación.
- Uso del lenguaje SQL a través de ODBC para cualquier interacción con la base de datos (Selección, Inserción, Actualización y Eliminación). Mono expone a través de ADO el espacio de nombres System.Data.ODBC el cual incluye un conjunto de clases para la manipulación de datos a través de ODBC.
- Diseñar clases que permitan enlazar los controles visuales a los datos en tiempo de ejecución. El diseño visual de entorno de datos (Dataset) no es soportado en Mono (al menos no he visto cómo hacerlo).
- Uso de archivos XML para intercambio de información o exportación de datos en caso que fuera necesario a través de los métodos WriteXML o ReadXML de los dataset en ADO.
- Compresión de archivos, en caso que fuera necesario utilizar el Algoritmo Deflate, que es un algoritmo estándar en el sector para la compresión y descompresión de archivos sin pérdidas. El formato se puede utilizar con facilidad de una manera no protegida por patentes. Los detalles del formato aparecen en la RFC 1951. En Linux es implementado a través de la utilidad Gzip. El espacio de nombres System.IO.Compression disponible en Mono, incluye la clase GZipStream la cual proporciona métodos y propiedades para comprimir y descomprimir archivos.
Referencias:
http://standards.iso.org