lunes, 20 de abril de 2009

Jugando a ser Dios (haciendo un DSL)

Como vimos antes no es muy dificil crear meta lenguajes o lenguajes de dominio especificos con Javascript. Pero como no se me habia ocurrido una aplicación especifica, deje pasar el hecho de no mostrar un DSL en concreto.
Por suerte hace unos dias, en el trabajo, tuve la necesidad de realizar pequeñas o simple consultas algo parecidas a un SQL muy básico sobre algunas Arrays Javascript, entonces recordé mi post sobre DSL y decidí implementar algunas funcionalidades de javascript para que puedan ver un DSL en funcionamiento. aquí les va
(si yo se que el código es largo pero lo voy a comentar bien asi se comprende)


//arrSQL.js
var arrSQL =(function(){ //usamos una funcion para tener funciones privada


//private constructor
function _arrSQL(args){
this.sel=[];
this.from=args[0];
this.wh=[];
this.arrayResp=false;
return this;
};

_arrSQL.prototype = {
where:function (crit){
this.wh.push(crit);
return this;
},
select:function(field){
if(arguments.length===1){
this.sel.push(field);
}else{
for(var i=0; i0){
var ret=true;
for(var c in this.wh){
var criterio = this.wh[c];
switch(criterio[1]){
case '=':
if (o[criterio[0]]!==criterio[2]){
ret = false;
}
break;
}
}
return ret;
}else{
return true;
}
},
distinctCheck:function(o){
if(this.dist){
var ret = false;
this.dist.returnRoot();
for (var name in this.sel){
if(this.dist.nav(o[this.sel[name]]) ){
ret = ret || false;
}else{
this.dist.add(o[this.sel[name]]);
this.dist.nav(o[this.sel[name]]);
ret = ret||true;
}
}
return ret;
}else{
return true;
}
},
ret:function (){
var retu = [];
if(this.dist){
this.dist = new this.distCache();
}
for(var i=0;i < distcache=" function(){" root="{};" curr="this.root;" prototype="{" curr =" this.curr[name];" curr =" this.root;">


JAJAJA bueno disculpen mi ausencia de comentarios pero me tengo que ir a dormir, pueden pedir explicaciones por los comentarios.
Aqui tienen un pequeño html para poder probarlo



var arr = [{"titulo":"Titulo1",
"nombre":"Nombre1",
"apellido":"Apellido1",
"descripcion":"Descripcion1"},
{"titulo":"Titulo1",
"nombre":"Nombre2",
"apellido":"Apellido2",
"descripcion":"Descripcion2"},
{"titulo":"Titulo1",
"nombre":"Nombre3",
"apellido":"Apellido3",
"descripcion":"Descripcion3"},
{"titulo":"Titulo1",
"nombre":"Nombre4",
"apellido":"Apellido4",
"descripcion":"Descripcion4"}];
//alert(arr);
alert(arrSQL(arr).select('nombre','apellido').distinct().where(['titulo','=','Titulo1']).ret());

miércoles, 15 de abril de 2009

Google Map-Reduce

Bueno vamos a ir un poco al futuro y empecemos a hablar de Grid computing que es muy distinto de cloud computing

Cloud Computing: la capacidad de procesamiento de una aplicación, no reside en el cliente, sino en la estructura de servidores.

Grid Computing: la capacidad de procesamiento se distribuye en una gran cantidad de nodos, cada nodo procesa una pequeña porción de los datos.

es complicado pero piensen asi
Cloud Computing puede funcionar sobre Grid Compupting

más allá de todo esto Google a liderado el mercado explicando su teoría Map Reduce
y ahora podemos ver los primeros avances en implementar estas tecnologías sobre javascript.
Porque?
porque javascript es el lenguaje más popular del mundo. practicamente todas las PC tienen uno o más interpretes de javascript instalados.
De esta forma podríamos distribuir el procesamiento de nuestro set de datos a lo largo de millones de nodos, tantos como browsers seamos capaces de encontrar.

http://www.igvita.com/2009/03/03/collaborative-map-reduce-in-the-browser/