mono

Simplemente: Mono 1.0

Pues.. eso face-wink.png , son las 10 de la mañana y dos cosas me han alegrado el día face-wink.png

And when they said I'm telling lies you believed me

Jugando un poco con el sistema de plugins de mbloggy (para ir probando el wrapper) me diverti un rato jugando y leyendo lo que hace Reflections y Collections, muy bueno!.

Ahora cada plugin lo guardo como un simple .dll y lo uso en el wrapper. Por ejemplo, si queremos usar un método pues simplemente:

using System;
using System.Reflection;
using System.Collections;

class FooLoader
{
        static void Main (string [] args)
        {
            Assembly a = Assembly.LoadFrom (args[0]);
            Type t= a.GetType("Foo");

            MethodInfo my_method = t.GetMethod("Add");
            object obj = Activator.CreateInstance(t);
            object[] arguments = {3.1,3.2};
            my_method.Invoke(obj,arguments);
        }
}
 

De esta manera le indicamos el assembly que debe cargar (dll, LoadFrom) que use el Type Foo (la clase Foo), luego le indicamos que cargue el método Add y lo guarde en my_method, creamos la instancia (para poder usarlo y manipularlo), los argumentos que recibe el método Foo y lo ejecutamos! y listo!.

Ahora, si nuestro método regresa un valor pues lo mejor va a ser guardarlo, podemos usar

object myVal = my_method.Invoke(obj,arguments);
 

Y lo puede guardar, le indico que es object, pero si sabemos que tipo de dato debe regresar (como en los plugins de mbloggy que uso una Interface pues no hay bronca).

O bien, darle propiedades al valor que va a regresar (la recomendada cuando tienen un return).

object retVal = my_method.Invoke(obj,
     BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
     null,
     arguments,
     null);

Console.WriteLine(retVal);
 

Y listo!

¿Cuál es la clase Foo?

using System;

class Foo
{
    public double Add(double h1, double h2)
    {
        return (h1 + h2);
    }
   
}
 

Y listo, compilamos

$ mcs Foo.cs /t:library $ mcs FooLoader.cs $ mono FooLoader.exe Foo.dll 6,3

Le paso el argumento del nombre del archivo, pero si ya sabemos el nombre dle archivo pues se lo indicamos a LoadFrom("archivo.dll") y listo!, ¿fácil no?.

...Hay cosas que se cuentan y parecen ciertas...

Me han pasado el disco de Bushido face-smile-big.png , bendito sea el 'interne', tiene rolas muy chidas, en especial la de 'Desmejorado', es buena.. pero sigo esperando alguna al estilo de La Chispa Adecuada o Infinito, pero ésta vale la pena face-wink.png

El día de hoy le he dedicado bastante tiempo a pelear con XMLRPC (sí, de nuevo), el despreció que crei tenerle ha regresado, simplemente es una porqueria para soportar distintos encodings y manejo de Streams, he pensado seriamente en liberar mBloggy pero que tenga soporte UNICAMENTE para SOAP, así que me he dado a la búsqueda de blogs que soporten SOAP (o XMLRPC y SOAP), he encontrado muchos 'chismes' de que Blogger ya lo soporta, si lo soporta.. pues por ahí voy a empezar, ¿LiveJournal?, lo siento.. no eres compatible conmigo face-smile.png , ¿MovableType?, tu tampoco... face-wink.png .

El título de ahora pues se lo debo a la canción de Desmejorado, tiene algo por lo que ando pasando (claro, que ahora no es nada sentimental).

Hay gente para todo Hay cosas que se cuentan y parecen ciertas Es cuestión de hormonas Dicen que se van pero se quedan

... desataré las serpientes de la vanidad ...

Hoy sí me la he pasado de baquetón.

He dedicado un tiempo a leer libros que había comprado y por tiempo no había podido leer, he empezado uno nuevo que me ha gustado mucho: El Tunel, de Sabato, es un libro muy pequeño e interesante.

Así mismo me ha dado por leer mucha documentación de .NET, XML y SOAP, el día de hoy le dediqué un tiempo a trabajar con interfaces y clases abstractas heredadas y multicasting de éstas, tal es el grado que me he puesto a escribir ahora sí un sistema complejo de plugins (incluso hasta he usado UML para ésto) en el que si es posible llegar a usar el tan famoso

  Assembly a = Assembly.LoadFrom(file);
  Type [] types = a.GetTypes ();

  foreach (Type t in types) {
        MethodInfo boot = t.GetMethod ("MSendPost");
        boot.Invoke (null, new Type [0]);
   }
 

Que lo único que hace es invocar un assembly, desarmarlo y mandar a llamar sus funciones, y como ahora si voy a usar Interfaces (no importa si es SOAP o XML, ya tengo el esquema probado y funciona) pues va a ser más fácil, incluso no tengo que verificar el código, la propia interface hace eso.. simplemente es una maravilla leer face-smile.png

El último bug encontrado fue el de glade-sharp, y me comentaron del equipo de Mono que la última versión de Glade tiene muchas mejoras (ToolbarButton) pero que faltan ser agregadas a glade-sharp, ni modo face-sad.png . Y ya quiero que se tenga lista la versión de Mono Beta 2 para Debian, hay muchas cosas que necesito, pero no quiero compilar ya que luego es un desorden y aparte tengo que compilar xsp, mod_mono y mono-server con la beta1 (que falta un paquete por salir de la Debian Queue).

Y fuera de tema, me han comentado que hay nuevo disco de Bunbury, ya había escuchado, pero no creí que fuera a salir tan rápido, ya lo quiero tener, es el: Bushido.

Midnight snacks in the mausoleum..

Buaf.. ya llevo unas semanas de vacaciones y no me he aburrido, parece que me mantengo entretenido con muchas cosas face-wink.png .

A los proyectos que les he dedicado mucho tiempo es Debian Mono, nBloggy (el Blogger Client) y Jaws. Por el lado de Debian Mono y de Mono pues sí le he dedicado mucho tiempo y reportando bugs que he ido encontrando, los principales fueron en wsdl (SOAP) y en GtkHtmlSharp.

El de wsdl es un error muy raro, ya que los errores cambian, me genera el progama, pero funciona cuando quiere, muchas veces truena con mensajes de Segmentation Fault, del lado de GtkHtml pues es un error al crear un editor de Html, cuando se quiere hacer editable.

HTML html = new HTML();
html.Editable = true;
 

Me informaron en la lista que era un bug y que para las siguientes versiones ya iba a tener su parche face-wink.png , el de HTML es una maravilla, ya que es el editor que voy a usar para mBloggy, me permite agregarle smileys, ortografía, efectos para los links, etc.

Para Jaws, pues he terminado el WebService del Blog, ya lo tenía medio hecho, pero en Drupal me mandaron mucha información de Atom API para darme ideas y que el mBloggy pueda crecer (recordar que el webservice del blog de Jaws no es propiamente 'para' jaws, va a ser un webservice para cualquier blog o CMS), muy buenas cosas tiene Atom. Precisamente ayer que hablaba con ion, quedamos en agregar el RSS de Atom a Jaws, realmente es mucho mejor que los típicos RSS que rondan.. pero MUY cerdo.

De Debian Mono, pues me da gusto que tengamos Beta 1 en Debian y haya sido aceptada (aunque no la han subido, tal parece, pero la aceptación ya la tenemos).. aunque hoy se ha liberado Mono Beta 2, y nos han ofrecido un pequeño sistemita para que podamos subir nuestros paquetes a Debian más rápido, así como nuestros propios repositorios en Alioth.

Ahhh.. la mejor noticia face-wink.png , ayer me bajé Gnome 2.6, vale la pena, va más rápido que el Gnome 2.4 y la instalación es sencilla.

apt-get install gnome-desktop-environment

Y Listo!, el Nautilus y el navegador de archivos, ha mejorado DEMASIADO.. simplemente es Gnome face-wink.png , na mas faltaría hacer un tema para Jaws muy a 'gnome style' o como si fuera una ventana de gnome.. (perdón por la pedrada!).

Les dejo un bonito screenshot con Gnome 2.6 y lo que va de MBloggy face-wink.png