Espacio de Dario Quintana

What are payday loans Payday Loans UK How much can you borrow

xUnit.Net – Excepciones Esperadas

Para los que no estaban enterados, el autor de NUnit saca a la luz este nuevo Framework de unit testing. La intención de un nuevo Framework de Testing para .Net parecería querer reinventar la rueda, pero no lo es. Muchas practicas que se hacían en NUnit (y muchas de estas heredadas de JUnit) no van a estar disponibles -para bien de nuestro código según argumenta James Newkirk.

Uno de los cambios: No va más el ExpectedException. Y el argumento de su desaparición es válido: Puede que una linea de codigo arroje esa excepción, y no sea la linea de codigo que estamos esperando a que lo haga. Ahora debemos hacerlos así: 

        [Test]
        public void NeuronNotConnected()
        {
            INeuron n = new SigmoidalNeuron();

            Assert.Throws<BpnException>(
                delegate
                {
                    double foo = n.Net.Value;
                });
        }

Esta es la pagina del proyecto http://www.codeplex.com/xunit.

Y para correr los test con Visual Studio pueden usar http://www.testdriven.net/

uNHAddins: UnOfficial NHibernate AddIns

Fabio Maulo, con quien tengo el honor de moderar a NHibernate-Hispano, ah puesto a nuestra disposición este nuevo proyecto llamado uNHAddIns.

UnOfficial NHibernate Addins nos provee recursos para interactuar con NHibernate que no están en la versión Oficial de NHibernate, una especie de paquete Contrib, al cual podemos hacer llegar requerimientos ó inquietudes para tenerlas en cuenta y en un futuro hacerlas formar parte del framework.

Por ahora,  ya podemos disfrutar de features: DetachedCriteria, DetachedQuery, DetachedDynQuery y Pagination.

DetachedQuery es el hermano de DetachedCriteria. DetachedCriteria existe actualmente en el core de NHibernate, pero no habia algo similar para HQL.

Se utiliza DetachedQuery/DetachedCriteria en lugares donde no contamos con una ISession. Es un modo de retardar hasta el ultimo momento la asociación del query con la sesión y esto ayuda a jugar mucho en las implementaciones de DAO Genericas.

Recursos:

Luego postearé codigos de ejemplo, pero pueden unirse al grupo de discución para hacer llegar las preguntas.

SVN y versionado de soluciones Visual Studio

Cuando queremos versionar soluciones de Visual Studio, existen ciertos archivos que se deben incluir en el repositorio, y archivos que no. Si estamos usando Resharper, también vamos omitir los archivos que agrega a nuestras carpetas. La estructura de directorios que propongo es esta:

En este ejemplo para interactuar con el repositorio SVN, utilizaremos Tortoise SVN.

Consideremos una solución winApp, que tiene dependencias con la librería NHibernate.dll, que se encuentra en la carpeta lib. La solución en el Visual Studio luce así:

 Los archivos de dicha solución serían los siguientes:

 

Una vez que tenemos nuestra solución creada, y nuestro repositorio funcionando, realizamos un checkout sobre una carpeta que elijamos, en mi caso es “D:\checkouts”. Ahí estaran los archivos que necesitan sincronizarse contra el repositorio. Luego del checkout, la carpeta seguirá vacia, pero lista para la sincronización.

Ahora copiamos nuestras carpetas “lib” y “winApp” dentro de “checkouts/” para agregarlas al versionado. Las seleccionamos y hacemos: TortoiseSVN -> Add…

Ahora tenemos que seleccionar los archivos que vamos a versionar. Dicho de manera contraria, eliminamos archivos que no deseamos que estén en el repositorio. Los archivos no versionables son:

  • Carpeta bin/ y su contenido.
  • Carpeta obj/ y su contenido.
  • Carpeta _ReSharper.*/ y su contenido.
  • Archivo *.resharper
  • Archivo *.suo

Y la selección debe quedar similar a esto:

Una vez que agregamos los archivos, realicemos el commit !

Los archivos que no participan en el versionado son los desmarcados. Y luego el repositorio debería lucir así:

Listo, tenemos nuestras solución sincronizada y versionada !

Como tip final, podemos usar AnkhSVN, un plugin para Visual Studio que nos permite gestionar los comandos de SVN desde Visual Studio.

Linking assemblies

Linker, es una libreria que escribió Jb, y se encarga de reducir al mínimo el conjunto de funciones assemblies para que un conjunto de programas puedan correr. En otras palabras, toma las librerias que necesita un programa y elimina de ellas los métodos ó tipos que no son necesarios.

Pueden obtener el código del SVN, y compilarlo. Requiere Mono.Cecil.

Linker es una simple aplicación de consola, y toda la magia ocurre en una sola linea de comandos. Antes que nada, veamos que tenemos. Los archivos necesarios para que la aplicación Mono.Sms.exe funcionen son: Castle.Core.dll, Castle.Windsor.dll, Castle.MicroKernel.dll y Castle.DynamicProxy.dll. Ponemos todos archivos en el mismo directorio que el ejecutable Mono.Sms.exe. Luego ejecutamos:

monolinker -a Mono.Sms.exe -out linkedfiles/ -x descritor.xml

Donde indicamos cual va a ser la aplicación objetivo, el directorio de salida, y el archivo xml descritor con los tipos que se desean preservar despues del proceso de linkeo. Nuestro archivo con los tipos que no queremos que Linker los eliminie es el siguiente:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  <assembly fullname="Castle.Windsor">
    <namespace fullname="Castle.Windsor.Configuration.Interpreters.XmlProcessor.ElementProcessors"/>
    <type fullname="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler"/>
  </assembly>
</linker>

Con esto indicamos que el namespace ElementProcessors, y el tipo CastleSectionHandler deben ser incluidos en la salida. Este descritor lo tuve que elaborar porque Linker omitia el tipo CastleSectionHandler, y tambíén eliminaba los constructores de los tipos contenidos en el namespace ElementProcessors. Como lo supe? Prueba y error.

Ahora veamos el resultado:

Ahora que hemos reducido, el tamaño de los assemblies, imaginense otra herramienta para juntar todos los assemblies en 1 sólo. La filosofía XCOPY de .Net, se convertiria en la COPY, nada más. Por estos caminos anda también Jb, que según dijo, está reescribiendo a monomerge (actualmente se cae).

Generando aplicaciones con AjGenesis

Este es el titulo del tutorial que nos deja Angel en su blog acerca de su querido AjGenesis.

Dos puntos que destaca Angel son:

- El modelo del que parte es totalmente definible por el usuario

- Las tareas y plantillas a aplicar son totalmente programables y controlables

Y de estos 2 puntos me quedo con el primero que me alcanza y sobra para decir cuan flexible es AjGenesis. Otras herramientas de generación de código muy útiles (vale la redundancia: todas las herramientas de generación de código son útiles) como MyGeneration, permiten la generación de código a partir de un modelo de datos. Esta es una gran diferencia con AjGenesis, esta permite la generación a partir de un modelo libre, no hay restricciones. El modelo lo podemos obtener desde una base de datos, a partir de nuestras clases, o podemos ir desarrollandolo de manera artesanal (a mano).

plugins de WordPress usados este blog

Una de las ventajas de WordPress es la gran cantidad de plugins que tiene, hay para todos los gustos y todas las edades.

En este blog estoy usando unos cuantos y los voy a enumerar:

  • Akismet: controla el spam en los comentarios del blog (y lo hace bastante bien).
  • Respaldo de la base de datos de WordPress: realiza un script SQL de toda la base de datos de tu blog y te la podés descargar en un archivo o enviar a tu mail.
  • Ultimate Google Analytics: Habilita Google Analytics en el blog y te aleja de tener que poner el script a mano.
  • Ultimate Tag Warrior: permite asignarle Tags a los posts. y también hacer la nube de tags, mostrando los tags que tienen más post, más grandes.
  • Feedburner Feed Replacement: (este me gusta mucho) Forwardea todo el trafico de los feeds de WordPress, a FeedBurner, y entonces con la cuenta de FeedBurner podés ver la cantidad de suscriptores a tu feed (entre otras cosas). Una vez instalado demora 24 hs aprox. para ver los cambios. Está bueno si hace rato tenés tu blog online y querés cambiar a FeedBurner sin alterar los links de los feeds.

Links sobre NAnt

Configurar referencias para Db4o Analyzer

Para poder usar referencias de nuestras clases, entidades quizás, en Db4oAnalyzer, por ahora solo lo podemos hacer utilizando el archivo de configuración de la aplicación Db4oAnalyzer.exe.config.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
    <configSections>
        <section name="db4oanalyzer" type="Db4oAnalyzer.Core.Cfg.Db4oAnalyzerSection, Db4oAnalyzer" />
    </configSections>
    
    <db4oanalyzer>
        <references>
        
            <add name="System" framework="true" />
            <add name="System.Data" framework="true" />
            <add name="Db4objects.Db4o.dll" />
        
            <add name="E:\Assemblies\Entities.dll" />
                    
        </references>
    </db4oanalyzer>

</configuration>

 El path del assembly con nuestras entidades de negocio (“Entitties.dll”) lo hemos puesto al final de los otros assemblies. Las entidades que corresponden al framework son marcadas: framework=”true”, el default es false.

Por ahora, estas referencias deben ser configuradas antes de iniciar la aplicación. 

Cómo compilar con NAnt

NAnt es un poderoso automatizador de compilación de código abierto que funciona con Mono también. NAnt es del mismo estilo que MSBuild, cuando usamos Visual Studio, sin que lo sepamos, estamos usando MSBuild.

Para automatizar la compilación de Db4o Analyzer agregué un archivo .build, de modo que,bajan el fuentedescargan NAnt y pueden compilar el fuente de esta manera:

Abrir una consola y tipear nant desde la ubicación del archivo .build

/> nant 

Abrir una console y tipear nant con el parametro indicandole donde está el archivo:

E:\nant-0.85\bin\NAnt.exe -f:"E:\projects\db4oanalyzer\default.build"

Para compilar con NAnt con Mono desde Windows, podemos usar el NAnt que viene con el installer del Mono Framework. Abrimos la consola de Mono (Mono 1.2.3.1 Command Prompt) que se tuvo que haber instalado un acceso directo de ella, y ejecutamos NAnt tal como lo habiamos hecho para el .Net Framework de Microsoft.

Para compilar con NAnt en Linux, en distribuciones como Debian/Ubuntu, es un poco más facil, primeramente, para instalar NAnt hacemos:

#apt-get install nant

y luego vamos al directorio donde se encuentra nuestro archivo .build y hacemos:

#nant

y listo, NAnt se encargará de encontrar un archivo con la extensión .build y realizar la compilación según el mismo.

Db4o Analyzer

Comenzé este pequeño proyecto Db4o Analyzer para facilitar el modo de probar nuestras consultas con db4o, escribiendolas desde una “snippet” IDE.

Por ahora, está soportando a C# como único lenguaje, pero la idea es extenderlo hacia otros. Tiene resaltado de Sintaxis e autocompletado de código, y esto gracias a las librerias opensource que se encuentran como parte del Core de SharpDevelop. De hecho esta herramienta fue escrita en dicha IDE.

La idea básica es ir agregando comando para poder visualizar mejor los objetos retornados, por ahora, podemos hacer esto:

draw<Persona>(db.Query<Persona>());

y con esto se realizará el query hasta la base, y podremos obtener en un arbol la consulta:

 Con este mismo enfoque podemos hacer nuestras queries, inclusive pobrar nuestras Native Queries.

ToDo (Cosas por hacer):

  • Soportar VB proximamente.
  • Permitir referenciar otras assemblies sin reiniciar la IDE.
  • Modulo de Configuración de la Aplicación.
  • refactoring !
Older Posts »