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

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:
<?
block Person
show "Name: " + $Name + "<br />"
show "Age: " + $Age + "<br />"
block Pet
show "Name: " + $Name + "<br />"
show "Species: " + $Species + "<br />"
end Pet
end Person
?>
// 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.
<?
# 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.

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.