Ahora en http://blog.darioquintana.com.ar

Actualicen sus enlaces y feeds, que no sadremos más por darionet.wordpress.com sino que ahora estamos en

http://blog.darioquintana.com.ar :)

Feeds de los posts: http://blog.darioquintana.com.ar/feed

Feeds de los comentarios: http://blog.darioquintana.com.ar/comments/feed

Avastu y openQRM Virtual Appliance!

AvastuDefinitivamente Avastu, se viene con todo! Ya podemos testear openQRM Virtual Appliance.

En pocas palabras, con openQRM podemos hacer que los administradores tengan un control total sobre el Data Center.

Ahora bien, Avastu, compañia que brinda soluciones virtualizadas y está naciendo, a puesto a nuestra disposición para que podamos probar openQRM Virtual Appliance. Para solicitar descargas haganlo a info[at]avastu.com, y con direcciones de mail no-gratuitas. Aquí tendremos un pequeño resumen de lo que podremos hacer con openQRM Para más podemos seguir el blog de Tarry Singh, fundador y CEO de Avastu Appliances

¿Por qué virtualizar?

El concepto de virtualización no es nuevo, todos conocemos productos como VMWare, que hace años está con fuerte presencia en el mercado, con el cual podemos correr de manera virtual y sin complicaciones otro sistema operativo sobre nuestro sistema operativo anfitrión. Hace pocos años por limitaciones de Hardware en el mercado, no se tomaba muy en cuenta, y solamente podíamos pensar a la virtualización para probar cosas y en un modo “laboratorio” solamente.

Debido al gran aumento de la potencia de procesamiento de nuestro hardware actual y su abaratamiento, la virtualización se fué ganando un lugar cada vez más importante en ambientes de producción hasta convertirse hoy en una solución válida al hablar de mejorar la utilización de recursos de nuestros servidores. Tanto se ha posicionado en popularidad que hoy día es un tema caliente por sobre todo en Data Centers, donde por lo general contamos con grandes servidores, que por lo general posee una aplicación, por cada máquina servidora.

Los servidores, nunca trabajan utilizando a un 100 % los recursos, es más, la cifra es bastante desalentadora: de un 5 – 40 % de carga de trabajo. El conocido esquema de 1 Aplicación por 1 Servidor, al pasar de los años carece de sentido. Y aquí es donde la virtualización empieza a tomar riendas en el asunto. Está tomando mucho auge el concepto de que en un servidor (fisico) sea anfitrion de varios servidores virtualizados, de modo que la utilización de recursos se aprovecha mucho más, proveyendo soluciones escalabables, baratas, fáciles de mantener y fáciles de migrar también.

Por supuesto, la virtualización, no es la solución de todos los problemas. Con una mala infraestructura y herramientas de administración, esto se puede convertir en un caso fallido, sin contar que para este tipo de implementaciones se requieren los skills bien afianzados por parte de los administradores y el suficiente know-how para hacerlo.

Los productos actuales que nos proveen soluciones de virtualización, ya sea de full-virtualization ó paravirtualization, encontramos a VMWare, Xen Source, Virtual Iron, Microsoft Virtual Server entre otros.

Inyección de Dependencia con Spring.Net

Spring.Net es uno de los frameworks más conocidos para implementar Inyección de Dependencia (también conocido como Inversión de Control -IoC). Otros que nos permiten hacer este trabajo son: PicoContainer, ObjectBuilder, Windsor Container.

Basicamente, qué queremos lograr? Fácil, crear nuestros objetos, sin importar quién me provea la implementación.

En vez de hacer esto:

(1) Cliente obj_cliente = new Cliente();

Podemos hacer esto:

(2) ICliente obj_cliente = (ICliente) AppContext.Instance.GetObject("Cliente");

Expliquemos, en (1) le estamos diciendo a obj_cliente quién va a crearlo: new Cliente(); Es decir, le estamos diciendo quien le va a proveer de la implementación, y nunca vamos a poder cambiar esto, a menos que lo hagamos y volvamos a compilar. En (2) es distinto, estamos pidiendo una implementación, pero no sabemos quien nos la va a dar. Solo sabemos que quién nos proveea la construcción, va a implementar la interfaz ICliente. AppContext es un wrapper que hice para crear un singleton del contexto de toda la aplicación (está en el codigo fuente que se puede descargar más abajo).

El lugar donde le decimos qué clase se va a encargar de la implementación, es en el app.config (en una de las tantas lineas para configurar Spring.Net):

<object name=”Cliente” type=”Entities.Cliente, Entities” singleton=”false”/>

En esta línea de código Entities.Cliente es la Clase que nos proveerá la implementación, y Entities es el assembly (que TIENE que estar en la carpeta de salida, donde está el .exe). También podemos ver cuan fácil es implementar un singleton de esta manera, solamente escribiendo singleton=”true” (ú obviandolo, es el valor por defecto), entonces no tenemos que hacerlo programaticamente.

Para el ejemplo lo que hice es organizar los proyectos de esta forma:

Lo que hariamos normalmente es referenciar Entities desde todas las partes del proyecto, en vez de esto, lo haremos con Entities.Contracts que contienen las interfaces, de modo que siempre programaremos contra las interfaces, nunca contra la implementación. Los proyectos no poseen relación de conocimiento con Entities, en ningún momento se lo referencia.

El tip del día: Hay que programar contra las interfaces.

Descargar codigo fuente [Proyecto hecho con SharpDevelop]

Donde más podemos utilizarlo ? En la capa de acceso a datos, podríamos persistir los objetos con db4o, y en otra implementación lo podríamos hacer usando NHibernate! Y esto lo lograríamos creando una interfaz IBaseRepository que tenga metodos como Guardar, Eliminar, Buscar y luego crear las implementaciones para cada uno de los providers por ejemplo BaseRepositoryDb4o y BaseRepositoryNH.

Espero que sirva!

Oracle 10g + RAC + Virtualización

Con mi buen amigo Matias, estuvimos implementando un cluster con Oracle 10g de 2 nodos, con una arquitectura parecida a esta. Por razones de hardware, por sobre todo por el almacenamiento compartido, tuvimos que virtualizarlo todo, comprar un NAS era imposible, en el mundo VMWare es tan fácil como crear un archivo y agregar esto en el archivo de configuración. Lo hicimos en una máquina de 1 Gb de RAM (se recomienda muy seriamente 2Gb de RAM), y levantamos a ella el nodo1 y el nodo2 (ambos Windows 2003 servers).

Es más fácil implementarlo en Windows que en Linux, pero las documentaciones que ibamos encontrando por la web, siempre referían a instalaciones en Linux (Red Hat Enterprise Linux para ser más exacto), más tarde lo haremos en Linux (si Dios quiere).

Y como dice Tarry Singh (el autor del artículo que seguimos): “la instalacion es sólo el comienzo”, porque realmente, es apasionante implementar un cluster y ver todo el funcionamiento orquestado de los nodos, la verdad, este tema me gustó muchísimo.

El trabajo fué para la cátedra de Administración de Base de Datos de la Universidad Tecnológica Nacional – Facultad Regional Resistencia, Chaco.

Nuestra guía para la instalación del Oracle 10g + RAC + VMWare fué obtenida de aquí, y también recibimos un poco de support del mismísimo Tarry (una maza el hombre!).

Pensamos liberar una guía con los problemas que tuvimos, y las cosas que por ahí muy explicitas en la guía, espero que les pueda servir a los aventureros que anden por estos caminos. Cualquier duda…avisen y lo charlamos.

General tips on VMware

En esta pagina podrán encontrar unos pocos pero útiles tips a la hora de trabajar con VMWare, por ejemplo el popular: “el puntero del mouse se mueve lento dentro de la máquina virtual”

Archivos de 25 kb dificiles de scannear

Entre los pasos para crear un grid computing con Oracle 10g usando VMWare, nos encontramos en la situación de tener que utilizar SCSI Plain disks, que son archivos que representan discos rigidos SCSI (virtualizados) en un archivo, pero estos archivos no poseen nada, digamos que un plain disk de 10Gb es un archivo en disco (o varios archivos) que ocupa/n 10Gb de espacio en disco. Estos 10 Gb están comprimidos en un archivo .zip de 9 mb, y luego este archivo de 9 mb en otro .zip de 25kb, es decir, tengo un planeta en la palma de la mano. Esto se debe a que los archivos al poseer “nada” es altamente comprimible con información altamente redundante: “nada”.

El tema puntual era el download, tip del día:

Nunca dejes activado el Anti-virus para bajar estos archivos

Teníamos activado el Nod32 y no podíamos realizar la descarga, debido a que el antivirus intentaba chechear por virus y no podría terminar de hacerlo, eran como 10 Gb de nada (obviamente, totalmente encapsulado en un tierno archivo de 25 kb).

Consecuencias: Se colgaba el Firefox, el Internet Explorer, y usando el Free Download Manager…no funcionaba el “Stop” y teníamos que cerrarlo con el popular Ctrl+Alt+Supr.

Conclusión: Desactivar el Antivirus, pararlo … y tambien parar el servicio (caso de Nod32).

Firmas de llaves públicas que no se pueden verificar

Intentando actualizar mis lista de repositorios en ubuntu me topé con este mensaje de error:

W: GPG error: http://ubuntu.systemadministrator.org dapper Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY FC0A1CC62F306651

Para solucionar esto, debo bajar la clave pública de un servidor:

$ gpg --keyserver wwwkeys.eu.pgp.net --recv-keys FC0A1CC62F306651

Y luego agregarla:

$ gpg --armor --export FC0A1CC62F306651 | sudo apt-key add -

y listo…ahora podemos hacer el apt-get update y utilizar los paquetes del mirror firmados por la clave pública anteriormente nombrada.

Con este mecanismo de firmas digitales nos aseguramos que los mirrors no hayan sido alterados por terceros, de ser así, estas claves no coincidirían (la que bajamos y con la que fue firmada el paquete).

using NHibernate.Tool.hbm2ddl

Una herramienta muy importante de NHibernate, a la vez, deseable por los ORM, es la generación de código.

Para generar el DDL de la base de datos, nos podemos valer de la información del esquema, que nos brindan los archivos de mapeo ó mapping files: hbm.xml.

Un vez que tenemos bien configurados estos archivos, podemos generar las tablas con solamente incluir un par de sentencias en .Net y configurar un archivo xml. Tambien se tiene que tener referenciado a NHibernate.

Código en C#:

using System;
using NHibernate.Cfg;
using  NHibernate.Tool.hbm2ddl;
public class MyClass
{
    public static void Main()
    {
            Configuration config = new Configuration();
            config.Configure();
            SchemaExport exporter = new SchemaExport(config);
            //exporter.SetOutputFile(@"c:testDDL.sql");
            exporter.Drop(true, true);
            exporter.Create(true, true);
    }
}

Archivo hibernate.cfg.xml (debe ir copiado en el directorio de salida):

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.0" >
 <session-factory name="NHibernate">	
	<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
	<property name="connection.driver_class">NHibernate.Driver.FirebirdClientDriver</property>
	<property name="connection.connection_string">
	ServerType=1;
	User=sysdba;password=masterkey;Database=C:ruraldata.fdb;
	Pooling=false
	</property>
	<property name="show_sql">true</property>
	<property name="dialect">NHibernate.Dialect.FirebirdDialect</property>
	<property name="use_outer_join">true</property>
	<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>

	<mapping assembly="RuralSolution.Entities" />

 </session-factory>
</hibernate-configuration>

En este caso es la exportación del schema de una base de datos Firebird embebida.

Esta herramienta me ha sido de mucha utilidad. Estoy desarrollando una aplicación en SQL Server 2005 y NHibernate, pero, me dí cuenta que la aplicación debía ser portable, de modo que tuve que migrar la base de datos a una portable, y como Firebird está pasando todos los test de NH, la elegí. Ya tenía los hbm, así que no requirió trabajo demás.

Importante para la generación con Firebird: en el directorio de salida entonces tendriamos que tener: fbembed.dll, FirebirdSql.Data.FirebirdClient.dll, y hibernate.cfg.xml.

Si quieren saber como trabajar con MyGeneration y Firebird embedded léanse este post de mi amigo Matias.

Comparación de Modelos de Redes Neuronales

Hoy expusimos en la Jociti 2006 (Jornadas de Ciencia, Tecnología e Innovación) en la UTN – Facultad Regional Resistencia – con Carlos Vicentin y Juan Carlos Insfrán un trabajo que realizamos en la Cátedra de Inteligencia Artificial en la primera mitad del año 2006 durante el cursado.

El Sistema es una simple implementación de 2 redes neuronales muy conocidas: Hopfield y BackPropagation.

Basicamente el sistema ayuda al soporte de decisiones sobre el otorgamiento de crédito de una entidad financiera.

Se le presenta un perfil de cliente y la red decide si el perfil es apto, no lo es, o es dudoso para el otorgamiento de un crédito.

Se necesita el Framework 2.0 de .Net para correrlo. Y está programado en C#.

Recursos:

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.