Saturday, May 19, 2007

Proyecto Personal(Update)

Ya estoy en la ultima semana del primer milestone del proyecto de seguridad de mi Framework de aplicaciones, cabe destacar que estoy solo de nuevo en el proyecto pero esta vez ya he empezado con buen pie y asi pienso terminar, solo hehe. Por el momento no tengo pensado la licencia que utilizare pero dudo mucho que lo haga opensource si antes de terminarlo no consigo apoyo, pero dejare aqui algo de codigo confuso para llamar la atencion :) SecurityApplication app = new POSApplication("POS1"); SecurityManager manager = new SecurityManager(new MemoryStorageManager()); manager.AddExtension(typeof(UpdateProductPermission),typeof(UpdateProductCurrencyPermissionExtension)); manager.AddApplication(app); Este codigo crea una instancia de un administrador de seguridad al cual le registro una aplicacion configurada y sus extensiones de permisos. La activacion de los permisos en instancias y sus extensiones es automatica. Ahora mismo me encuentro en el proceso de crear las pruebas unitarias para los storageManager's y los paths, creo que la emocion de ver el diseño de 6 meses en mi cabeza funcionar me llevo a escribir esta entrada en mi blog :)

Tuesday, May 15, 2007

Steve Ballmer es una Mierda

"Fucking Eric Schmidt is a fucking pussy" No tengo mas que decir, leanlo ustedes mismos. Es una verguenza esto.

Sunday, May 6, 2007

Instalar MonoDebugger(mdb) en Ubuntu 7.07

MonoDebugger es una herramienta de linea de comandos que esta haciendo el equipo de Mono y aunque no es del todo poderosa, funciona. Intentando instalarla en mi Ubuntu 7.07 tuve problemas pero aqui esta como instalarlo correctamente. Necesitaras tener instalado con sus dependencias: mono, subversion, autotools 1.9 o superior y nunit. 1) Descargar el source desde el svn de mono:
svn co svn://anonsvn.mono-project.com/source/trunk/debugger monodebugger
El comando descargara los fuentes del mdb y creara un directorio "monodebugger" en la carpeta actual. 2) Compilarlo: Entramos en la carpeta "monodebugger": cd monodebugger Generamos los configuradores de la instalacion: ./autogen.sh --prefix=/usr/local Compilamos: make Nota: Al momento en que se genero este post, existe un problema en el configurador del compilar el proyecto MonoDebugger.Test.dll el cual depende de nunit y da el siguiente error: error CS0006: cannot find metadata file `nunit.framework' Compilation failed: 1 error(s), 0 warnings make[2]: *** [Mono.Debugger.Test.dll] Error 1 make[2]: Leaving directory `/home/jhernandez/monodebugger/build' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/jhernandez/monodebugger' make: *** [all] Error 2 La solucion es editar el archivo build/Makefile.in y reemplazar la linea "-r:nunit.framework" por "-pkg:nunit" para que el compilador busque usando la utilidad pkg-config en vez de buscar nunit.framework.dll en los directorios por defecto. Luego intenta compilarlo nuevamente. 3) Instalar librerias en el GAC: gacutil -i build/Mono.Debugger.Backend.dll gacutil -i build/Mono.Debugger.Cecil.dll gacutil -i build/Mono.Debugger.dll gacutil -i build/Mono.Debugger.Frontend.dll gacutil -i build/Mono.Debugger.Test.dll 4) Instalar mdb. sudo make install 5) Ejecutar: $mdb Nota: Existe otro problema ubicando las librerias compartidas y te dara el siguiente error: Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Mono.Debugger.Frontend.CommandLineInterpreter ---> System.DllNotFoundException: monodebuggerserver at (wrapper managed-to-native) Mono.Debugger.Frontend.CommandLineInterpreter:mono_debugger_server_static_init () at Mono.Debugger.Frontend.CommandLineInterpreter..cctor () [0x00000] --- End of inner exception stack trace --- Para solucionarlo edita tu archivo $HOME/.bashrc con tu editor favorito y has lo siguiente de acuerdo a tu situacion: export LD_LIBRARY_PATH='/usr/local/lib:'$LD_LIBRARY_PATH Si instalaste Mono usando el Instalador Universal para linux, probablmente tengas el mono instalado en /opt/mono1.2.3.2 y en vez de usar "/usr/local/lib", debes usar "/opt/mono1.2.3.2/lib" donde 1.2.3.2 es la version de mono que instalaste. No olvides cerrar y abrir la consola nuevamente despues de editar el archivo. 5) Usar Mdb Despues de arreglar los inconvenientes anteriores podras usar mdb de la siguiente forma: $mdb helloworld.exe Mono Debugger (mdb) Teclea "run" y se ejecutara la aplicacion. se detendra en las primeras lineas de ejecucion del metodo main, asi que para ir paso a paso en la ejecucion, teclea "n"(enter) o "s"(enter). Aqui hay una guia completa de como utilizar el debugger.

Friday, May 4, 2007

Mono Development Venezuela(#monodev-ve)

En la red oficial de mono(irc.gimp.org) existe #mono-hispano, un canal para desarrolladores mono de habla hispana pero ademas de eso(como si no fueran pocos los integrantes de mono-hispano ya), he creado una sala llamada #monodev-ve para desarrolladores mono de venezuela y aunque hasta el momento soy el unico espero pronto conseguir algunos buddies. Abrir la sala es solo el comienzo de una iniciativa que incluye una pagina web el mismo nombre con el mismo proposito pero que mas adelante junio o julio mas o menos estare publicando. Estan invitados tanto a la iniciativa como a los canales para consultar informacion acerca de la tecnologia, solicitar apoyo en algun desarrollo OpenSource, implementaciones y soluciones basadas en mono. Tanto en #mono-hispano como en #monodev-ve estamos a la orden.

Tuesday, May 1, 2007

Mono Embedding Parte II(External Call)

Anteriormente habia creado un embedding para ejecutar un ensamblado Mono desde C y les comente que necesitaba crear una instancia de una clase dentro del universo del Mono y ahora he hecho algo parecido, una llamada externa desde el CLR que se implementa en C. Esta tecnica difiere de el interop usando DllImport el cual consiste en crear el simbolo en C# y vincularlo a una libreria externa sin necesidad de un Host del MonoRuntime, en el caso de las external call el simbolo igualmente se declara en el ensamblado pero el simbolo apunta a la funcion que el Host del MonoRuntime registre. Por ejemplo: public class myMonoClass { [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static void sayHello(); } En nuestro Host del MonoRuntime creamos la funcion en C que se ejecutara cuando se invoke al metodo expuesto con el atributo MethodImpl como se muestra a continuacion: static void sayHello_myCLR () { printf("Saying hello from C using a CLI Internal Call\n"); } Y por ultimo registramos la llamada externa del CLR con la funcion en C. mono_add_internal_call("myMonoClass::sayHello",sayHello_myCLR); Nota: mono_add_internal_call debe ser invocado SOLO despues de cargar el ensamblado que tiene el methodo externo. Pero aunque esto es muy cool, esto no soluciona mi problema, y aun sigo necesitando crear una instancia de una clase en un ensamblado desde C. [Descargar mono_embedding_ext_call.tar.gz]