-
Notifications
You must be signed in to change notification settings - Fork 12
Manual técnico para usuarios
Los archivos de proyecto .gbp
son en realidad archivos zip encubiertos con el siguiente contenido:
Nombre de archivo | Uso |
---|---|
content.gbs y/o content.gbk
|
Código del estudiante (texto y bloques) |
backpack.gbs y/o backpack.gbk
|
Biblioteca del estudiante (texto y bloques) |
extra.gbs |
Biblioteca del docente |
meta.yml |
Configuración del proyecto |
assets/attires/{nombre}/config.yml |
Asociaciones de la vestimenta {nombre} |
assets/attires/{nombre}/*.{png-jpg} |
Imágenes de la vestimenta {nombre} |
assets/boards/*.gbb |
Tableros iniciales posibles |
assets/solutions/{nombre}.{gbs-gbk} |
Solución al ejercicio |
description.md |
Consigna |
La estructura vieja posee algunas diferencias:
Nombre de archivo | Uso |
---|---|
projectName.gbs y/o projectName.gbjs
|
Código del estudiante (texto y bloques) |
projectName.gbl y/o projectName.gbjl
|
Biblioteca del estudiante (texto y bloques) |
projectName.gbt |
Biblioteca del docente |
projectName.json |
Configuración del proyecto |
*.gbb |
Tablero |
attires/{nombre}/config.json |
Asociaciones de la vestimenta {nombre} |
attires/{nombre}/*.{png-jpg} |
Imágenes de la vestimenta {nombre} |
description.md |
Consigna |
image.png |
Imagen de 300x300 para portada |
Es código gobstones en texto plano.
Es una representación en XML del workspace de Blockly. Es generada automáticamente por Blockly, y suele ser dependiente de versión.
Representa a un tablero con el siguiente formato:
GBB/1.0
size 9 9
cell 0 0 Azul 0 Negro 0 Rojo 0 Verde 1
cell 1 2 Rojo 23
head 1 2
Contiene metadatos del proyecto en formato YAML. Consta de las siguientes claves:
Clave | Tipo | Descripción |
---|---|---|
name |
String | Nombre del proyecto |
library |
Object | Opciones de biblioteca (ignoradas en modo bloques) |
library.visible |
Boolean | Mostrar botón de biblioteca |
source |
Object | Opciones de sección de código |
source.visible |
Boolean | Mostrar código por default |
source.percentage |
Number | Porcentaje de visibilidad de la sección de código |
board |
Object | Opciones de sección de tablero |
board.active |
Number | Número de tablero seleccionado por default |
board.initial_board_source |
selected o random
|
Determina el modo de selección de tablero para cada ejecución |
board.visible_edition |
Boolean | Mostrar la sección de edición |
board.collapse_toolbox |
Boolean | Mostrar inicialmente colapsada la sección de edición |
board.user_permissions |
Object | Permisos |
board.user_permissions.can_change_initial_board |
Boolean | Puede cambiar de tablero inicial, y si tiene can_edit_board puede agregar y quitar tableros |
board.user_permissions.can_change_initial_board_source |
Boolean | Puede cambiar la fuente de tablero inicial (random o seleccionado) |
board.user_permissions.can_edit_board |
Boolean | Puede editar el tablero inicial |
board.user_permissions.can_view_size_section |
Boolean | Puede ver la sección de tamaño (default: true) |
board.user_permissions.can_view_attire_section |
Boolean | Puede ver la sección de vestimentas (default: true) |
execution_speed |
Object | Determina la velocidad de ejecución |
execution_speed.active |
low , medium , high , superhigh o instantaneous
|
Velocidad de ejecución por default |
execution_speed.user_permissions |
Object | Permisos |
execution_speed.user_permissions.can_change_speed |
Boolean | Puede cambiar la velocidad de ejecución |
attire |
Object | Opciones de vestimentas |
attire.active |
String | Nombre de la vestimenta seleccionada por default |
attire.visible |
Boolean | Mostrar la vestimenta por default |
attire.user_permissions |
Object | Permisos |
attire.user_permissions.can_toggle_visibility |
Boolean | Puede mostrar u ocultar la vestimenta |
link |
String | URL de un archivo adjunto (por ejemplo, la consigna en PDF). |
initialDescription |
Boolean | Muestra o no automáticamente la descripción al iniciar (default: true) |
blocks |
Object | Configuración para el editor de bloques. Consultar en gs-element-blockly |
customErrors |
Object | Mapeo de errores custom para bloques o código |
Las vestimentas constan de un conjunto de reglas que deben cumplirse para que una celda se "vista" con cierta imagen (o texto). Ejemplo: (en JSON)
{
"name": "Prueba",
"rules": [
{ "when": { "blue": 0, "black": 0, "red": 0, "green": 0 }, "image": "Fondo.png" },
{ "when": { "blue": 0, "black": 2, "red": 0, "green": "*", "head": true }, "image": "Otra.png" },
// exactamente dos negras, cualquier cantidad de verdes, sí o sí tiene que ser el cabezal
{ "when": { "blue": 0, "black": 2, "red": 0, "green": "*", "head": true }, "text": "hol" },
// muestra el texto "hol" en vez de una imagen
{ "when": { "blue": "*", "black": "+", "red": 5, "green": "*", "head": false }, "image": "Más comodines.png" }
// por lo menos una negra, cero o más azules y verdes, 5 rojas, y sí o sí tiene que *NO* ser el cabezal
]
}
Es el Markdown de toda la vida. Se pueden usar emojis escribiendo su identificador entre dos puntos (:) - Lista completa.
Se pueden poner imágenes usando link a una imagen en base64. Para incluir imágenes que carguen rápido y puedan usarse offline, se recomienda poner el contenido en base64 directamente en el .md con <center>![La imagen en base64](data:image/png;base64,iV...)</center>
.
Conversor: https://www.base64-image.de/.
Tableros gobstones pueden ser renderizados usando las vestimentas del ejercicio. Ejemplo:
<gs-board attire-src="mines">
GBB/1.0
size 4 3
cell 1 2 Azul 0 Negro 1 Rojo 4 Verde 0
cell 3 2 Azul 1 Negro 0 Rojo 5 Verde 1
cell 3 1 Azul 1 Negro 0 Rojo 0 Verde 0
cell 3 0 Azul 0 Negro 1 Rojo 0 Verde 0
cell 2 2 Azul 0 Negro 0 Rojo 1 Verde 0
cell 2 0 Azul 0 Negro 0 Rojo 0 Verde 1
cell 2 1 Azul 0 Negro 6 Rojo 0 Verde 0
head 2 1
</gs-board>
Es código Gobstones con procedimientos y funciones que aparecerán en los ejercicios como "procedimientos primitivos" y "funciones primitivas". Las mismas pueden tener atributos:
-
nonatomic
: Muestra los pasos intermedios en la ejecución paso a paso -
tooltip
: Descripción que aparecerá al pasar el puntero por encima -
block_name
: Nombre del bloque (sobreescribe la inferencia de nombres de bloque) -
block_dropdown
: Datos de opciones para convertir al único parámetro en un dropdown -
block_icon
: Imagen del icono del bloque en base64
/*@ATTRIBUTE@tooltip@Pone una carta de cierto palo de un mazo de cartas españolas@*/
/*@ATTRIBUTE@block_name@JugarUnaDe_@*/
/*@ATTRIBUTE@block_dropdown@[("Bastos", 'Bastos'), ("Copas", 'Copas'), ("Espadas", 'Espadas'), ("Oros", 'Oros')]@*/
/*@ATTRIBUTE@block_icon@data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAFACAYA... etc etc etc@*/
procedure PonerCartaDe_(palo) {
// ...
}
Para los procedimientos que no tengan el atributo block_name
, se generará un nombre convirtiendo de camelCase a lenguaje natural. Por ejemplo, procedure UnProcedimientoDelDocente() {}
generará el nombre de bloque Un procedimiento del docente
.
En los nombres de bloque se pueden poner guiones bajos (_
) para representar los argumentos. Los bloques de llamadas a procedimientos/funciones usarán notación infija, y nombres como Poner_BolitasDeColor_
se traducirán en bloques de llamada como:
Si el nombre del procedimiento o función comienza con Aux
o aux
, respectivamente, no será visible para el alumno.
En la ejecución paso a paso las acciones del docente son atómicas, mientras que las del alumno no. Para alterar este comportamiento, se pueden usar los atributos atomic
y nonatomic
.
procedure Poner3Normal(color) {
repeat (3) { Poner(color) }
}
/*@ATTRIBUTE@atomic@*/
procedure Poner3Atomico(color) {
Poner3Normal(color)
}
program {
Poner3Normal(Verde)
Poner3Atomico(Rojo)
}
<xml xmlns="http://www.w3.org/1999/xhtml"><variables></variables><block type="procedures_defnoreturn" id="K,vh!c_c,[5aAu][1N.(" x="316" y="27"><mutation isatomic="false"><arg name="color"></arg></mutation><field name="NAME">Poner3Normal</field><field name="ARG0">color</field><statement name="STACK"><block type="RepeticionSimple" id="9CG{4csXQe[W8bjqx.1J"><value name="count"><block type="math_number" id="6W7p$25K7B5H{8a.P~9o"><field name="NUM">3</field></block></value><statement name="block"><block type="Poner" id="$^%dtY8oN2o1tX;8/_!!"><value name="COLOR"><block type="variables_get" id="KpudN.sX#-B9/bv*X-YN"><mutation var="color" parent="K,vh!c_c,[5aAu][1N.("></mutation></block></value></block></statement></block></statement></block><block type="procedures_defnoreturn" id="s^tuL.~JeTwtfftwrH~a" x="325" y="210"><mutation isatomic="true"><arg name="color"></arg></mutation><field name="NAME">Poner3Atomico</field><field name="ARG0">color</field><statement name="STACK"><block type="procedures_callnoreturn" id="8oYVMe+Beps0PQ_dPi1E"><mutation name="Poner3Normal"><arg name="color"></arg></mutation><value name="ARG0"><block type="variables_get" id="v5smtPSGsJF/*kkUO6%#"><mutation var="color" parent="s^tuL.~JeTwtfftwrH~a"></mutation></block></value></block></statement></block><block type="Program" id="Phen~Gn:!??zS;Na`a$!" deletable="false" x="114" y="354"><mutation timestamp="1548369380888"></mutation><statement name="program"><block type="procedures_callnoreturn" id="/wxIJpk*e.(kZP+#j13L"><mutation name="Poner3Normal"><arg name="color"></arg></mutation><value name="ARG0"><block type="ColorSelector" id="$D=kRH,MlQ]n06%}+2Q!"><field name="ColorDropdown">Rojo</field></block></value><next><block type="procedures_callnoreturn" id="B.Pw(I{vdaVxd/EoonQa"><mutation name="Poner3Atomico"><arg name="color"></arg></mutation><value name="ARG0"><block type="ColorSelector" id="yp2c8in{}Oe+J^3B212f"><field name="ColorDropdown">Verde</field></block></value><next><block type="procedures_callnoreturn" id="!(FLw1ThEvoI.2[=!][t"><mutation name="Poner3Atomico"><arg name="color"></arg></mutation><value name="ARG0"><block type="ColorSelector" id="18tG*#!9WLI;/[-?wNpW"><field name="ColorDropdown">Negro</field></block></value></block></next></block></next></block></statement></block></xml>
En Gobstones JR, se puede convertir cualquier procedimiento en atómico haciendo botón derecho en la definición de un procedimiento, y activando o desactivando la opción Mostrar paso a paso.
Hay una lista de bloques disponibles en el siguiente link:
https://github.com/Program-AR/gs-element-blockly/blob/dev/gs-element-blockly.html#L38
Los siguientes bloques no se encuentran visibles por defecto:
DefinicionDeFuncionSimpleDeclarativa
DefinicionDeFuncionSimpleConParametrosDeclarativa
DefinicionDeFuncionDeclarativa
Se pueden activar usando el atributo blocks.defaultToolbox
de meta.yml
.
En el campo customErrors
de meta.yml
se pueden transformar errores. Ejemplo:
# Lista de transformaciones de errores...
# Para ver los valores posibles de "block", "error", y los argumentos ("args") entregados por el intérprete, provocar un error y mirar el log en la consola del Chrome. Se puede interactuar con ellos usando el identificador lastError.
- when:
block: # (obligatorio) (lista, o string con nombre de bloque, o "*") bloques a los que afecta esta regla
- Poner
error: primitive-argument-type-mismatch # (obligatorio) # (lista, o string con código de error, o "*") errores que estamos queriendo capturar
condition: args[4].typeName === "Dir" # (opcional) condición que tienen que cumplir los argumentos del error para que la regla se ejecute
transform: args[4] = args[4].toString().replace("Dir:", "") # (opcional) transformación a ejecutar sobre los argumentos del error
message: Poner recibió un <%=arg4%>, ¡¡cómo le vas a mandar una dirección al Poner!! # (obligatorio) mensaje de error a mostrar, soporta interpolar los argumentos del error (<%=arg0%>, <%=arg1%>, <%=arg2%>, etc
- when:
block: RepeticionCondicional
error: primitive-argument-type-mismatch
message: Todo mal, el repetir hasta espera una condición, pero le llegó un <%=arg4%>
- when:
block: AlternativaSimple
error: "*"
message: El if pinchó!!! completalo bien
Un curso es un repositorio de GitHub con un guides.json
. Los cursos pueden tener defaults en la carpeta assets
que luego los ejercicios pueden heredar. Ejemplo:
- https://github.com/gobstones/demo-herencia-cursos/tree/master/assets
- https://github.com/gobstones/demo-herencia-cursos/blob/master/Unidades/0.Repaso/0.Demo%20de%20defaults/meta.yml#L24
El archivo guides.json
contiene un array de guías. Cada guía es un objeto:
{
"name": "Nombre de la guía",
"repo": "usuario/repositorio",
"homeLink": "http://link.com/alManualDeLaGuía",
"exercises": [
{
"id": "2.1.1",
"name": "Simulando repartir caramelos",
"path": "Proyectos/Cap.2/Simulando repartir caramelos"
}
]
}
La lista global de cursos que toma Gobstones Web está en https://github.com/gobstones/gobstones-web/wiki/Courses