Cómo desarrollar extensiones para mBlock

Bueno lo primero de todo decir que esto es algo bastante avanzado y poco documentado. Por una parte el mBlock es un fork (es decir un proyecto derivado) del Scratch. Y en Scratch para modificar y crear nuevas extensiones, tienes que utilizar la variante ScratchX no compatible con Scratch. Buen, un lio.

El caso es que mBlock tiene una documentación muy justita de como crear una extensión que es la siguiente:

http://www.mblock.cc/docs/create-extensions-for-mblock/

pero cuando entras en detalle te faltan cosas, o por lo menos a mi. Entonces, indagando encontré que la relación de mBlock con ScratchX y la pobre documentación de como crear una extensión con ScratchX:

https://github.com/LLK/scratchx/wiki

Bueno, así que a día de hoy lo que nos queda es I+D e ir viendo el código de las demás extensiones que ya trae mBlock. Si quieres continuar tendrás que haberte leido al menos el enlace anterior de mblock, sino vas a andar perdido.

Donde se guardan las extensiones

Si vas al menú de mblock de extensiones, y ves cualquier extensión, tiene un enlace, “ver código”, que te lleva al sitio

Estructura de la Extensión

Tendremos una carpeta con nuestro nombre de extensión en el directorio de extensiones del mBlock. Lo primero es el fichero con estructura JSON con la extensión “.s2e”, que es donde le dice donde está todo. Imagino que solo puede haber un “.s2e” en dicha carpeta, porque el nombre del fichero le da igual. El contenido tiene una estructura tal que así:

{

{

“extensionName”: “Pequeños Innovadores”,

“javascriptURL”:”js/pi.js”,

“blockSpecs”: [

[

“w”,

“Haz %d en el pin %n”,

“runHazLoQueSea”,

“ON”,

“13”,

{

“encode”:”{d0}{d1}”,

“setup”:”pinMode({1},OUTPUT); \n”,

“inc”:””,

“def”:””,

“work”:”digitalWrite({1},{0});\n”,

“loop”:””

}

],

],

“menus”: { …},

“values”:{…},

“translators”:{…}

}

}

si vas al menu de mblock de extensiones, y ves cualquier extensión, tiene un enlace, “ver código”, que te lleva al sitio

(function(ext) {

/*

Puedes añadir tus funciones al objeto “ext”  con el nombre que hayas creado en el apartado “blockSpecs”

*/

ext.runHazLoQueSea(orden, pin){

}

device.set_receive_handler(‘arduino’,processData);
};

ext._deviceRemoved = function(dev) {
if(device != dev) return;
device = null;
};

ext._shutdown = function() {
if(device) device.close();
device = null;
};

ext._getStatus = function() {
if(!device) return {status: 1, msg: ‘Arduino disconnected’};
if(watchdog) return {status: 1, msg: ‘Probing for Arduino’};
return {status: 2, msg: ‘Arduino connected’};
}

var descriptor = {};
ScratchExtensions.register(‘Arduino’, descriptor, ext, {type: ‘serial’});

})({});

Arquitectura

Lo que he podido averiguar es que el mBlock ejecuta el JavaScript en un interprete de Flash (Si en consecuencia mBlock está hecho en Flash).

Cómo desarrollar

En principio, cuando ya has creado los ficheros adecuados, tienes que comprimirlos y añadirlos como una extensión nueva. Pero claro si estamos probando y desarrollando eso parece un poco lio. La solución que he encontrado es cambiar los ficheros directamente en la carpeta de extensiones y cada vez que hago un cambio, reiniciar el mBlock. Si así de duro está el tema.

Cómo Tracear o Loggear lo que haces

Es decir, cómo saber que demonios se está ejecutando cuando estas haciendo pruebas. Pues hasta donde he llegado, no se puede. En la versión de ScratchX, se ejecuta en un navegador y admite el comando console.log, pero aquí si lo poneis, fallará, pero no tira nada, como no te dice nada si falla en cualquier otro lado. No da error utiliza un comando que se llama trace(), pero no he conseguido localizar si lo que mandas al trace lo pone en algún lado, y a estas alturas ya estoy convencido de que no lo hace.

Entonces como comprobamos el código si no hace lo que quieres, pues hasta donde he llegado lo único que funciona es utilizar el comando alert() e ir poniendo mensajitos por donde crees que se está ejecutando, ah! pero cada vez que creas un mensajito nuevo, tienes que reiniciar scratch.

 

No comments yet.

Deja un comentario