Recent Comments On Blog

rss

July 2006

El día que la cigarra imitó a la hormiga

Drums please!

Now, ladies and gentlemans, I'm proud to show you, the new, the improved, the wonderful DAOGen-20060730.tar.gz.

This new version can generate the DAO object implementation for PostgreSQL access. This baby is getting useful. Now there is only a preliminary version for the Factory class, but soon, the whole enchilada will be exposed.

What's missing? More documentation, the factory interface and its PGSQL implementation.

What's foreseen? PGSQL composite types as data transport objects and PGSQL functions as DAO objects.

What I want? Peace and love...

un mal libro en el inter

  1. Introducción a la ética. Raúl Gutierrez Saenz. (01-01-2006 / 01-18-2006)
  2. El Mundo de Sofía. Jostein Gaarder. (01-20-2006 / 02-02-2006)
  3. La tragicomedia de Calisto y Melibea ó La Celestina. Fernando de Rojas (02-05-2006 / 03-06-2006)
  4. La seducción de las palabras. Álex Grijelmo (03-07-2006 / 03-26-2006)
  5. La victoria. Jaime Sánchez Susarrey (03-28-2006 / 03-31-2006)
  6. El evangelio según Jesucristo. José Saramago (03-27-2006 / 04-22-2006)
  7. Ética para Amador. Fernando Savater (04-23-2006 / 05-02-2006)
  8. El otoño del patriarca. Gabriel García Márquez (05-03-2006 / 05-30-2006)
  9. Pantaleón y las visitadoras. Mario Vargas Llosa (06-02-2006 / 06-11-2006)
  10. El nombre de la rosa. Umberto Eco (06-11-2006 / 06-24-2006)
  11. La insoportable levedad del ser. Milán Kundera (06-25-2006 / 06-30-2006)
  12. Vitales. Greg Bear (06-19-2006 / 06-26-2006)
Cuando terminé con Milán Kundera, comencé a leer un libro sobre la estética como rama de la filosofía, con artículos de Satre, entre otros. Me ha resultado muy difícil leerlo. Pero el miércoles pasado Sandino me prestó uno de sus libros de ciencia ficción. El libro es bastante malo. Tal vez mi gusto por la ciencia ficción se está pasando.

un furioso perezoso tomó esto personal

Today is a celebration day. Today I decided release a new version of DAOGen. There is several new features:

* First cppunit unit test. Just tries the postgresql connection
* Better autotools support
* Interfaces to DAO Objects headers
* PG DAO Objects headers
* PGException
* PGDBConn singleton class

Yesterday I went to the cinema and watched two wonderful movies: 5x2 and Match Point.

Locuras de fin de semana...

Fui al café iguana, me gustaron un par de bandas. Me compré tenis nuevos. Y fui al cine a ver una película buenísima: Joyeux Noël. Avancé un poco en el DAOgen y escribí un aborto de cuento que resultó demasiado complicado para mi cabecita.

First Release!

Finally got a somewhat clean first version for my DAOGen. The code is here. Basically is a Perl program using templates which connects to a database, extract all the metadata from the selected schema and generates the Data Transport Classes for all the tables. The script also generates a directory following the GNU projects specification, and the necessary autotools scripts in order to obtain a configure/make/make install project.

Remember to read de README and be happy.

How I whish you were here

Estoy cansado. Vengo de vuelta del cine. Vi Breakfast on Pluto. Toda una tragedia narrada con comicidad... humor totalmente negro. Me conmovió.

El generador de código va tomando forma. El plan de mañana es ponerle un poco de magia de las autotools.

The DAO code generator

Finally I got a preliminary version of my code generator for the DAO pattern! It's a Perlish hack and it's a complete mess, but it generates C++ data transport objects which compile without warnings, even with the -pedantic compiler flag enabled.

In general, the generator search for tables in a specific database schema (right now only PostgreSQL is supported). For each table, extracts their attributes and their properties (primary key and autoincremented), then using simple templates (using Text::Template), creates a data transport object (.h and .cpp respectively) for each table. The generated code also is also capable to build a perfect Doxygen documentation.

Currently the generator is hardcoded, so it's quite lame give away something.

My TODO list: clean the generator in order to offer it in the web, create an directory infrastructure, generate autoconf magic, create the DAO objects, create DAO factory, pack all in a libdb.a library, document, document and document.

En otro orden de ideas, la inexperencia cómo nos hace lucir como soberanos pendejos.

viernes, sábado y domingo

Viernes: raptado por Emilia y Alan para ir a tomar margaritas en un bar del Barrio Antiguo. ¡Ah qué cosas! Emilia entra en mi top5 de las chicas más raras que he conocido. Rematamos la noche bebiendo un six en el departamento.

Sábado: Ir a ver el partido en el Das Bierhaus, con unas cervezas y hacer compras necesarias para la casa. El Shala llegó y conversamos con un six. Muy agradable una conversación así.

Domingo: Ir a ver la final del mundial a Sanborns mientras comimos. Más cervezas. El resto de la tarde frente el monitor.

/dev/misc

Séptimo arte

Ayer me salió mi espíritu explorador y decidí tomar una ruta desconocida hasta ese momento para ir al cine de arte que está a un lado del Tec de Mty. Tomé la ruta 95 en Aramberri, a un par de cuadras del departamento, y llegué sin contratiempos.

Había varias opciones, pero eran las 7pm y sólo había una película que empezaba a esa hora u otra a las 7:40. Leí las sinópsis y algo capturó mi atención en la película de las 7:40: la historia de la hija de un matemático. Yo tenía inclinaciones por ver la de Good Night, and Good Luck, pero la proyectaban hasta las nueve. Compré la entrada a la película de las 7:40.

¡Qué grandiosa película! Me encantó, me fascinó, la disfruté enormemente. No puedo evitar recomendarla, ¡veánla! es una orden. En inglés se llama Proof. Quisiera contarla, pero sería una injusticia.

Al salir quería otra vez tomar la ruta para regresar, pero no pasaba. Al comenzar un chipi chipi decidí abordar el primer taxi que viera. Al subirme la tromba hizo su aparición. Y no dejó de llover hasta ya muy entrada la noche. ¡Vaya que llueve por acá!

C++

He estado jugando mucho con C++.

Regla del diseño de software: PROGRAMA ORIENTADO A INTERFACES. El objetivo de esto es mantener bajo el nivel de acoplamiento entre los objetos y facilitar el manejo de cambios en la implementación. Para los que ignoren la ventaja de esto, basta decir que los costos de mantenimiento del código decrecen sustancialmente.

El punto es que C++ es un lenguaje más bien de bajo nivel (comparado con Java o C#) y no provee un mecanismo nativo y claro para el manejo de interfaces, pero se puede hacer algo a través de la herencia de clases virtuales puras.

Después de pelarme con el compilador de mingw, con un trozo de código grande y algo complejo, decidí hacer una pequeña prueba de concepto para ver si cómo hacer esto y he aquí el resultado:

#include <iostream> using namespace std;

// Interface
class IBar
{
        public:
        virtual ~IBar () {};

        virtual void print () = 0;
};

// Implementation
class Bar : public IBar
{
        public:
        Bar () { cout << "Constructor" << endl; }
        virtual ~Bar () { cout << "Destructor" << endl; }
        virtual void print () { cout << "Metodo print ()" << endl; }
};

// Class factory
class Factory
{
        public:
        static IBar *createBar () {
                return new Bar ();
        }
};

// Program
int main (int argc, char <strong>argv)
{
        IBar *bar = Factory::createBar ();
        bar->print ();
        delete bar;
}
 
Después me comenzé a peleear con las excepciones y descubrí que si defines el tipo de retorno de la excepción, y al momento de atrapar la excepción lo haces con otra clase a la definida, el la aplicación truena pero gacho, a diferencia del g++ en Gentoo que fue muy generoso y expresivo. He aquí la prueba de concepto para ver como funcionan las excepciones:

#include <iostream> using namespace std;

class IException
{
public:
        virtual ~IException () {}
        virtual void print () = 0;
};

class MyEx : public IException
{
public:
        MyEx () { cout << "Constructor" << endl; }
        virtual ~MyEx () { cout << "Destructor" << endl; }
        virtual void print () { cout << "Hubo un error" << endl; }
};

void failproc () // throw (MyEx *)
{
        throw (new MyEx ());   
} int main (int argc, char </strong>argv)
{
        try {
                failproc ();
        } catch (IException *ex) {
                ex->print ();
                delete ex;
        }
       
}
 
¡Bellisimo! Así podemos tener excepciones específicas pero las capturamos todas bajo una interfaz.

El punto es hacer trabajar al compilador/máquina virtual para que resuelva los tipos de dato en tiempo de ejecución. De esta manera nuestra capa superior del sofware manejara las interfaces sin preocuparle que implementación está utilizando.

La frase del día en el chat: Lo único constante es lo que está de la chingada.

Organizando Ideas

Varios escritos en los últimos días:
Muchas ideas, poco código.

Pasando a otras cosas: el trabajo parece estar tomando ya un tenor más prometedor, aún no me recupero del viaje a Celaya.

Fue el cumpleaños más raro de mi vida: sin compañía física, pero mucha virtual... Me gustó. No me sentí para nada sólo, todo lo contrario, me sentí apreciado a pesar de las distancias.

Un grandiosos libro que no debe tomarse en serio....

  1. Introducción a la ética. Raúl Gutierrez Saenz. (01-01-2006 / 01-18-2006)
  2. El Mundo de Sofía. Jostein Gaarder. (01-20-2006 / 02-02-2006)
  3. La tragicomedia de Calisto y Melibea ó La Celestina. Fernando de Rojas (02-05-2006 / 03-06-2006)
  4. La seducción de las palabras. Álex Grijelmo (03-07-2006 / 03-26-2006)
  5. La victoria. Jaime Sánchez Susarrey (03-28-2006 / 03-31-2006)
  6. El evangelio según Jesucristo. José Saramago (03-27-2006 / 04-22-2006)
  7. Ética para Amador. Fernando Savater (04-23-2006 / 05-02-2006)
  8. El otoño del patriarca. Gabriel García Márquez (05-03-2006 / 05-30-2006)
  9. Pantaleón y las visitadoras. Mario Vargas Llosa (06-02-2006 / 06-11-2006)
  10. El nombre de la rosa. Umberto Eco (06-11-2006 / 06-24-2006)
  11. La insoportable levedad del ser. Milán Kundera (06-25-2006 / 06-30-2006)
Su disertación sobre el kitsch es simplemente fantástica. ¿Estarán de acuerdo conmigo que la traducción al español de kitsch sería "cursi"?