12 marzo, 2016

Excripting: scripting like a pro

Quería en mi próximo post hablar sobre Isographx, el engine isométrico en el que ya llevo un tiempo trabajando, pero sólo puede trabajar con cubos y aunque interesante resulta tosco aún. Además hay momentos en que una idea resulta tan evidente, auto coherente y sencilla que eclipsa todo lo demás en lo que puedas estar pensando. Es lo que ha ocurrido con Excripting (ex por experimental) un programa que me cuesta trabajo definir o catalogar.
excripting

El caso es que llevo tiempo pensando en hacer algo relacionado con la programación visual, no en el sentido de que el resultado sea visual sino en el de que se interactúe con una serie de elementos gráficos para construir los comportamientos. He usado Appinventor del Mit y usa un sistema de bloques muy interesante e intuitivo de construir lo que en la práctica es un código escrito al uso. Éste sistema de bloques se usa también en blockly así como otros programas por el estilo. Y la idea es muy buena, pero hacer lo mismo no es lo que yo buscaba.

ejemplo de blockly
Supongo que fue una combinación de ideas, por un lado de pequeño cuando no teníamos youtube para pasar el rato recuerdo que pasaba horas en electronic workbench haciendo circuitos y abriendo ejemplos para destrozarlos, y aunque es lo que es, un simulador de electrónica, era muy divertido. No se mucho de electrónica, así que a veces era decepcionante. Por otro lado está la idea del inocente "redstone" de minecraft. No soy ningún tipo de fanático de este juego, pero esta serie de elementos del juego diría que tienen hasta valor didáctico. Lo interesante de un circuito de redstone es que no hay un index o cabezal lector que ejecuta línea tras línea lo que el código dice, sino que cada uno de los componentes de un circuito funcionan independientemente "haciendo" algo muy sencillo cuando recibe "true" por su entrada. Y es turing computable, obviamente, incluso hay gente que ha diseñado ordenadores con esa cosa.

en este ejemplo el al pulsar el botón el led A lucirá tres veces y después el B una.

Excripting toma esa idea de pequeños elementos, con pequeñas funciones independientes conectados entre sí. Dispone de las puertas lógicas más comunes, visores, botones etc y bloques para crear y editar variables así como (por ahora) para ejecutar comandos de consola. Éstos bloques disponen de entradas y salidas que se cablean entre ellas siempre desde una salida hasta una entrada.  Desde el primer momento tenía en mente que usar gráficos no sólo es poner degradados y fondos, sino que deben de ser parte útil de la herramienta. Debía usar códigos de colores y diagramas sencillos e intuitivos. Por otro lado, el espacio 2d sólo existe cara al usuario, es decir, podría procesarse un script sin la información de las posiciones de los bloques, porque no importa. Por otro lado cada bloque dispone de la capacidad de contener texto, el cual en ocasiones es usado por la lógica del propio bloque a modo de parámetros. Las entradas SIEMPRE se dibujan abajo y las salidas arriba del bloque, aquí hay dos factores contrapuestos, por un lado hacer visualmente rica la representación y por otro hacerlo visualmente claro y autocognitivo y he optado por la segunda. los cables se cruzan y puede parecer confuso a veces, pero no lo veo un problema. Editar es muy sencillo, se mueve un bloque con el botón secundario del ratón, con el primario se pulsan los botones o interruptores y shift+click en un bloque permite editar su valor de texto.

Mientras funciona el script un valor true será representado con el color verde así que se ve en todo momento el mecanismo en funcionamiento, otra de las cosas que me gustó del redstone. El control de errores es casi inexistente, y esto es así porque creo que una sintaxis poco estricta permitirá a otros hacer cosas que ni me imagino.








Todo esto lo he hecho en menos de dos semanas, no porque yo sea especialmente rápido, sino porque la idea era tan sencilla y elegante que el código se escribe sólo. Voy a compartir una versión prototipo con la esperanza de que quienes lo probéis me contactéis por la red social google+ o por los comentarios de este blog y me digáis que más bloques añadiríais a la lista o que problemas o dudas os surgen. Y no os cortéis en compartirme un snapshoot o lo que sea si hacéis un circuito interesante.





Publicar un comentario en la entrada