Mono + NHibernate + SQLite

Después de usar por tanto tiempo Gentle.NET, un ORM que ha sido discontinuado, he decidido al fin comenzar a estudiar NHibernate. Los ejemplos que dan en los manuales y páginas son para Windows (con MS .NET) y SQL Server. Trabajando en GNU/Linux, hice las pruebas con SQLite.

El problema es que el driver utilizado por NHibernate para esta base de datos utiliza un binding desactualizado. Además Mono trae una implementación mejor, que soporta el standard ADO.NET 2.0, que es Mono.Data.Sqlite, disponible a partir de la versión 1.2.4.

El post es especialmente útil para aquellos que quieran utilizar en GNU/Linux (yo uso Ubuntu Gutsy), con Mono, NHibernate y SQLite, utilizando el binding Mono.Data.Sqlite. Si bien puede parecer esto tan fácil como seguir el documento QuickStart y cambiar las opciones correspondientes, no lo es si se intenta utilizar SQLite. Por eso, en este post no voy a explicar todas las cosas, ya que no me interesa y se pueden aprender en la documentación, sino que voy a desarrollar un ejemplo muy sencillo y mostrar cómo utilizar SQLite, ya que hay que solucionar unos problemas no muy triviales.

Continuá leyendo Mono + NHibernate + SQLite

LaTeX: Paquete listings

Desde hace un tiempo que vengo usando, para incluir archivos de código fuente en documentos LaTeX, el paquetes lgrind. El problema es que no se actualiza más (última versión de 2002).

Hace un tiempo tuve la necesidad de incluir código fuente en C# en un documento de un TP. Gracias a un desarrollador de GNOME he encontrado el paquete listings, en el Planet GNOME.

No sólo sirve para incluir archivos de código fuente, sino también para ficheros de configuración por ejemplo. Es realmente muy util. Pueden bajarse un manual aquí.

Un ejemplo simple:

\begin{lstlisting}[frame=single]
class X {
     string my_string;
     int    very_important_value;
}
\end{lstlisting}

Se pueden setear varias opciones, como “frame”, que dibuja una caja alrededor del código. También se pueden incluir archivos completos con el comando “\lstinputlisting”. Aquí un ejemplo.

MonoReporter – Reportes en Mono

Ya escribí un post sobre este tema. Desde ahí hasta hace un mes aproximadamente, MonoReporter quedó olvidado, ya que en realidad no lo necesitaba con tanta urgencia… pero ahora sí. Es lo que sigue por hacer en Zaspe#: la generación de reportes.

Mi idea era hacer algo que no sólo me sirva a mí, sino que lo pueda usar otra persona también. Cuando le comenté la idea a Nacho, sobre un lenguaje basado en XML para describir el reporte, me propuso leer un SVG, hecho con Inkscape por ejemplo… así me ahorraría un futuro diseñador de reportes. Eso es lo que he hecho.

MonoReporter entonces lee de un SVG hecho con Inkscape (lo aclaro porque sobre este software hice las pruebas), y lo transforma a instrucciones para dibujar con Cairo y GtkPrint (el nuevo sistema de impresión de Gtk+). Es posible, por ejemplo, exportar directamente a PDF, o mostrar el diálogo de impresión, tanto en GNU/Linux como Windows (previa instalación de los runtimes de gtk-sharp que se pueden encontrar en la web de zaspe#). A esto lo realiza en forma nativa.

Continuá leyendo MonoReporter – Reportes en Mono

Drivers de ATI mejorados

Hoy se me dio por probar los nuevos (y “mejoradísimos” como algún sitio de noticias decía por ahí) drivers de AMD, versión 8.41.7. En VivaLinux decían que “las ganancias en el desempeño son hasta del 90% en ciertos títulos OpenGL.”. No pude aguantarme 🙂

Sin embargo no están recomendados por AMD para, por ejemplo, placas Mobility (la que tengo en mi laptop). Pero no importa… funcionan en lo esencial (ya les muestro los resultados), y además el mes que viene sale Gutsy Gibbon (o sea, reinstalación). Los posibles problemas que pueden haber, como con la salida de TV, no me asustan mucho. En todo caso volveré a los anteriores, pero valió la pena comprobar que realmente han mejorado mucho.

Antes de comenzar con todo el proceso de instalación (que pueden encontrar en ésta guía), hice unas pruebas con los drivers viejos (8.34.8) que vienen en Feisty, con la utilidad fgl_glxgears y glxgears. Con la primera, la media de cuadros por segundo fue de 320, con la ventana en tamaño normal. Con los drivers nuevos los valores suben a 490 fps. Una mejora del 53% aproximadamente.

Con la utilidad glxgears las mejoras son del 60%. Muy buena la ganancia en el desempeño. Y encima ahora AMD ha liberado las especificaciones, y esta desarrollando un driver libre con Novell. Fue un gran acierto adquirir un placa ATI 🙂

ZaspeSharp 0.0.2

La primera versión fue en realidad una especie de prototipo. Esta versión, que la liberé hace unos días y bajo la flamante GPLv3, se acerca más a algo usable: se pueden agregar, modificar y eliminar personas y eventos, y también ingresar las asistencias. Sin embargo todavía le falta la generación de estadísticas y reportes, que es una parte muy importante.

Funciona en GNU/Linux con Mono (yo lo estoy probando con la versión 1.2.3 que viene en Ubuntu Feisty) o en Windows con .NET Framework 2.0 y el runtime de gtk-sharp 2.10 (que se lo pueden bajar de la página del proyecto).

Si les interesa probarlo, se pueden bajar los archivos desde la página de descargas del proyecto.

Una aclaración para el uso: cuando lo ejecutan, verán al inicio la lista de asistencias vacía. Para que se habilite tienen que ingresar por lo menos una persona, y por lo menos un evento anterior a la fecha actual (ya que no tiene sentido ingresar las asistencias para un evento futuro). Si a alguien le es útil algo así, y tiene ideas para mejorarlo, por favor, están invitados a dejar un comentario en este post, o un issue.

Mono/.NET: No importa el lenguaje

Una de las cosas que vamos a probar en el trabajo práctico de implementación de Administración de Recursos, es qué tan cierto es eso de que Mono/.NET es independiente del lenguaje.

Bueno, estuve haciendo unas pruebas con Python y C#. Hay una implementación de código abierto (bajo la licencia de Microsoft Ms-PL) del intérprete de Python escrita en C#, que permite ejecutar estos programas compilando el código Python a CIL (el código intermedio). También tiene una consola, como Python, y es posible utilizar toda la biblioteca de .NET. Se llama IronPython.

Esta implementación, en su versión estable actual 1.1, tiene compatibilidad con CPython 2.4.4. Esto significa que un programa escrito para ser corrido con Python 2.4.4 puede correrse también con IronPython 1.1. Sin embargo no es que podemos correr cualquier cosa hecha para Python con IronPython: un juego que utiliza el módulo PyGame no funciona (por lo menos yo no pude).

Les voy a mostrar un ejemplo en el que desde Python creo una clase que hereda de otra creada en C#. Sip, ¡esto está muy bueno!

Continuá leyendo Mono/.NET: No importa el lenguaje

ZaspeSharp con Prebuild: vos elegis el IDE

En ZaspeSharp (antes se llamaba Zazpe), comencé a utilizar Prebuild como herramienta para independizarme del IDE.

ZaspeSharp es un programa muy simple para manejar las asistencias de personas a determinados eventos, y apunta, en un futuro, a generar una variedad de informes sobre estos datos. Está desarrollado con C#, principalmente en Mono bajo GNU/Linux. Sin embargo también funciona bajo Windows con el .NET Framework 2.0. En éste último caso es necesario bajarse el runtime de Gtk# 2.10, que se encuentra en la página de descargas en la web del proyecto.

Ojalá sirva para alguien más que para el director del coro Monseñor Zaspe. Supongamos que alguien se interesa en el proyecto y desea hacer unas modificaciones. Esta persona conoce mucho sobre la plataforma .NET, y es programador C#. Trabaja en Windows con SharpDevelop. Imaginemos cuatro personas más similares a esta última: la primera maneja muy bien Visual Studio 2003 y es el que usa; la segunda tiene Visual Studio 2005; la tercera trabaja en GNU/Linux con MonoDevelop; y la cuarta prefiere modificar los archivos de código fuente con GVim y compilar con NAnt o las Autotools. ¿Cómo satisfacer a todas ellas?

Continuá leyendo ZaspeSharp con Prebuild: vos elegis el IDE

Gtk# 2.10 en Windows

Medsphere liberó hace muy poco un instalador de los binding de Gtk+ para el Framework .NET. Esta versión de los bindings funcionaban muy bien en GNU/Linux, pero tenían un bug cuando se las utilizaba en Windows, que ahora fue corregido. El problema de este instalador es que necesita, exclusivamente, la versión 1.1 de .NET. Yo estoy haciendo un desarrollo en Mono con Gtk#, pero utilizo características de la versión 2.0 del framework, el cual es el que uso necesariamente en Windows.

Gracias a que han liberado los fuentes de dicho instalador bajo la GPL, me los bajé y los modifiqué para que sí soporte el Framework 2.0. Los cambios que hice son mínimos y simples. El instalador está hecho con Inno Setup.

Si necesitan, entonces, utilizar Gtk# 2.10 en Windows, se lo pueden bajar desde aquí. Dentro de poco, si es que me quitan las restricciones de los 20 MB por archivo, subo el SDK, y si me dan mas quota en el repositorio subversion, subo todo el código fuente del instalador, que es pesadito (~250 MB).

Algunos ejemplos corriendo en GNU/Linux y en Windows:


action.png

calendar.png

scribble.png