(Proyectos)

Una descripción de los proyectos propios más importantes que estoy llevando a cabo.

29 de agosto de 2009

Magnesio Engine

Más simplicidad y robustez en la construcción de sistemas web
(Magnesio Engine)

Magnesio Engine es un template engine, herramienta para la creación de páginas web a partir de plantillas implementado en Java.

La característica fundamental y distintiva de Magnesio Engine es su orientación a objetos. Magnesio tiene su propio modelo de objetos, que permite trabajar con fragmentos de código HTML como clases anidadas, instanciándolos y seteando sus propiedades.

A continuación, expongo algunos ejemplos de código en Java y en Magnesio Language. Los ejemplos están en inglés ya que decidí documentar Magnesio en este idioma. Una mirada rápida al código fuente permite apreciar los beneficios:

Template (código Magnesio Language)

<?

block Person

    show "Name: " + $Name + "<br />"
    show "Age: " + $Age + "<br />"
        
    block Pet
        show "Name: " + $Name + "<br />"
        show "Species: " + $Species + "<br />"
    end Pet
    
end Person

?>

Carga de datos en template (código Java)

// Create the template object from a plain text template file

Magnesio oMg = new Magnesio("PersonsAndPets.mgt");
BlockInstance oPerson;

// Get a new person instance, and set its Name and Age

oPerson = oMg.block("Person").getNew()
    .set("Name", "Julieta")
    .set("Age", 21);

/*
 * Add Pet instances to the new Person instance. Note how
 * in the same way that a Person instance was created from
 * the root (oMg) instance, a new Pet is being created from
 * a specific Person instance.
 */

oPerson.block("Pet").getNew()
    .set("Name", "Mr. Fuzzybelly")
    .set("Species", "Cat");

oPerson.block("Pet").getNew()
    .set("Name", "Amanda");

// Get the output

oMg.exec();
String sOutput = oMg.getOutput();

Magnesio Language, a diferencia de otros lenguajes de scripting para templates, es flexible y muy potente. Para satisfacer los requerimientos que me planteé al empezar el proyecto, construí el lenguaje desde cero, usando sólo librerías Java Standard Edition. Desarrollé un analizador léxico (tokenizer), un evaluador de expresiones, un parser y un procesador de instrucciones, además de las clases Java que dan soporte al modelo de objetos de Magnesio.

A continuación, muestro algunas características avanzadas del lenguaje a modo de ejemplo.

Características avanzadas de Magnesio Language

<?

# Create block instances straight from the template code

$Person = this.Person.new
$Person.$Name = "Jules"

# Perform casting and call binded Java functions 

$Person.$Age = 35 + (Integer) cos(2.1)

# Manage multi-typed, multi-dimensional arrays

$Info = array [ array [ "Argentina", 28 * 8, array [ "Buenos Aires", "Córdoba" ] ],
                array [ "Spain", 38 * 44, array [ "Madrid", "Palma de Mallorca" ] ]]

# Walk the arrays easily with for or foreach instructions

for $i = 0, $i < length($Info[1][2]), $i++
    show $Info[1][2][$i]
end

foreach $Info[0][2] as $City
    show $City
end

# Powerful late evaluation expression engine:
# Manage inline assignment operations,
# boolean values and null values.

if ($n = 28 * 2) > 50 and ($n = 24 * 2) < 50 and false != null
    show $n
end

?>

Like JSP, ASP or PHP, Magnesio Language allows mixing instruction code with HTML code. 

<?

block Person

    # Make assertions and assure quality

    assert $Name is String and $Age is Integer

    show "Name: " + $Name + "<br />"
    show "Age: " + $Age + "<br />"
    
end Person

?>

Magnesio estará disponible en magnesioengine.com de forma gratuita, en unos pocos meses. Ya cuento con una versión beta completamente funcional, pero decidí no distribuirla aún para evitar problemas de backwards compatibility si decido hacer cambios estructurales antes de la primera release.

30 de octubre de 2008

Wiseshaft

Un enfoque estadístico para el procesamiento de búsquedas semánticas
(Wiseshaft)

Wiseshaft está basado en un algoritmo que diseñé, que determina la relevancia de los resultados a partir de la aplicación intensiva de métodos estadísticos. El algoritmo analiza el contexto de la búsqueda y a partir de la comparación de cada resultado con el contexto determina su resultado. El análisis se realiza utilizando herramientas de text mining propias.

Presenté Wiseshaft junto a mi amigo Bernardo Bustos Lanning en dos competencias de planes de negocio y el proyecto fue elegido finalista, aunque no se lo consideró lo suficientemente rentable. Sin embargo, Motorola se mostró interesada en la tecnología detrás del proyecto.

Estamos esperando tener la oportunidad de volver a presentar el proyecto en una competencia, aunque esta vez preferimos dejar el enfoque empresarial y concentrarnos en el desarrollo de la tecnología.