El verano del código (4)

+1
0
-1

Al final, después de pensar en todos los nombres que se me ocurrían con las palabras «Open», «Fit», «Fitness» y «Gym», todos los cuales estaban registrados, he cambiado completamente el nombre y he optado por «Gymzilla».

Por tanto, he actualizado la página web a:
http://www.antakirasoftware.com/gymzilla/

Y he creado un proyecto en SourceForge, aunque sin incluir nada aparte de la descripción:
https://sourceforge.net/projects/gymzilla/

Poco a poco, he definido también la estructura general del programa. Uno de los pilares básicos del programa son los XML que almacenan todos los datos que maneja el programa (salvo imágenes y sonido, por supuesto), de tal manera que debe ser posible ejecutar todas las funciones con otro programa que se desarrolle para poder leer dichos XML, de manera que el sistema no dependa de una plataforma, lenguaje de programación o arquitectura. Los archivos XML son una manera fantástica de almacenar información y sus ventajas ya han quedado más que demostradas.

Probablemente, el archivo XML más importante sea el que contiene las sesiones. Cada uno de estos archivos contiene una «sesión», término que pretende englobar cualquier sucesión de ejercicios físicos, tal como puede ser una clase de yoga, una rutina de pesas o unos sencillos estiramientos para aliviar la espalda. Los elementos que contienen una sesión se denominan «ejercicios», en el sentido de conjuntos de movimientos que pueden unificarse bajo una descripción general. Por ejemplo, un ejercicio puede ser una determinada postura de yoga, un ejercicio con las mancuernas o una posición de estiramiento, por seguir con los ejemplos anteriores. Por tanto, una «sesión» de abdominales podría estar compuesta por tres «ejercicios»:

- Crunch sencillo
- Abdominales oblicuos
- Plancha con brazo inclinado

Un factor básico es que las definiciones de los ejercicios tienen que poder ser lo suficientemente generales como para adaptarse a una gran variedad de actividades. Por ejemplo, en el caso de ejercicios de estiramientos, puede bastar con indicar la postura que se debe adoptar y el tiempo que debe mantenerse, pero para posturas de yoga, puede que sean necesarias instrucciones más concretas. Para cubrir esta necesidad, los ejercicios pueden contener (optativamente) elementos «paso» con los que es posible describir cada uno de los movimientos que se puedan desarrollar. Por ejemplo, para describir la postura de «Buenos días al sol», podemos comenzar dando las siguientes instrucciones:

- Colócate de pie y abre las piernas a la anchura de los hombros
- Baja lentamente el torso hacia el suelo
- Eleva lentamente el cuerpo mientras juntas las palmas de las manos
- Levanta las manos por encima de la cabeza y arquéate hacia atrás
- Baja las manos hasta colocarlas junto a las caderas

Estos pasos han de realizarse secuencialmente, es decir, uno tras otro, separados por un intervalo de tiempo que puede expresarse en segundos.

Una posibilidad más que se incluye es que se pueden añadir «pasos aleatorios». Por ejemplo, durante un ejercicio de abdominales puede que haya un montón de detalles que nos gustaría comunicarle al usuario, por ejemplo, que tenga cuidado de no tirar del cuello con las manos, que debe sentir el ejercicio en la zona abdominal o, sencillamente, queramos darle ánimo para que siga con la tarea. Dado que al usuario puede desconcentrarle o resultarle pesado un aluvión de instrucciones, aparte de que tal vez no haya tiempo material para decir todas estas instrucciones, se pueden incluir todas como pasos aleatorios de los que se informa al usuario cada cierto tiempo de manera aleatoria. Así, por ejemplo, la primera vez que realice ejercicio escuchará un consejo y una frase de ánimo, la segunda dos consejos, etc. De esta manera, los ejercicios resultarán más variados y el usuario podrá sentirse más motivado.

Estas dos técnicas pueden combinarse, es decir, durante un mismo ejercicio se pueden combinar pasos secuenciales y aleatorios. Por ejemplo, en una clase de bicicleta estática podemos crear un ejercicio que dure cinco minutos con tres pasos de diferente ritmo. Aparte de estas instrucciones que le indicarán al usuario que cambie de ritmo, también podemos incluir numerosos consejos sobre la posición que debe adoptar para pedalear, lo bien que lo está haciendo o lo poco que queda para el final.

Descrito de esta manera, puede parecer un poco complejo, pero es la mejor manera que se me ha ocurrido de modelar la realidad y ofrecer un elevado número de posibilidades de manera sencilla. A fin de cuentas, se trata sencillamente de subdividir cada sesión (concepto que abarca clases, rutinas, etc.) en ejercicios y, a su vez, estos en pasos, que pueden ser secuenciales o aleatorios, cuando queramos darle un poco más de variedad a las instrucciones. Lo mejor de todo es que es posible redactar una clase que se reproduzca a la perfección sólo con un editor de texto tal como el gEdit, aunque si el proyecto sigue adelante será necesario crear una interfaz que facilite esta labor.

Con estos cimientos, ya es posible definir una gran variedad de ejercicios. No obstante, la especificación también ha de incluir herramientas que hagan posible crear y actualizar las sesiones de ejercicios de manera fácil y cómoda. Para ello, se han incorporado dos importantes funciones.

La primera función permite hacer referencia a unas sesiones desde otras sesiones mediante el elemento «bloque». De esta manera, podemos hacer centralizar en unos pocos archivos ciertos ejercicios básicos que se utilizan en varios tipos de actividades físicas. Por ejemplo, en prácticamente todas las actividades es conveniente comenzar con un calentamiento seguido de un estiramiento. Actividades tan dispares como el kickboxing, el spinning y el áerobic pueden comenzar con unos estiramientos muy similares. Si fuera necesario definir en cada uno de ellos, no sólo estaríamos duplicando de manera innecesaria información, sino que también cualquier actualización o corrección de errores sería más pesada y lenta.

La segunda función permite reproducir estos bloques incrustados de tres maneras diferentes, según el valor de un atributo:

- completa: se ejecutan todos los ejercicios, del primer al último.
- aleatoria (por número de ejercicios): se ejecutan un número determinado de ejercicios, elegidos de forma aleatoria.
- aleatoria (por tiempo): se ejecutan un número determinado de ejercicios, elegidos de forma aleatoria, de manera que no se supere un determinado tiempo.

Combinando estas dos funciones, es posible crear completas clases de ejercicio de manera cómoda y rápida. Por ejemplo, si queremos crear un XML para que imparta una clase de step, basta con definir seis o siete pasos básicos y especificar en el archivo que se repitan tantas veces como queramos. Una vez que tengamos definido este archivo, podemos crear cualquier otra sesión que incorpore una sección de step que dure el tiempo que deseemos. Además, si decidimos añadir nuevos movimientos o añadir imágenes o instrucciones verbales al archivo de origen con la sesión de la clase de step, todos los demás archivos que hagan referencia a dicha sesión se actualizarán automáticamente. Imaginemos que combinamos un calentamiento con dos ejercicios elegidos de un total de cuatro seguidos de tres ejercicios de entramiento de la fuerza elegidos de un total de seis. Con esta definición tan sencilla, el usuario tendría una notable variedad de entrenamientos disponibles, la que evitaría que cayese rápidamente en la rutina.

Claro, que las sesiones deben poder agruparse en programas más completos que cubran varias semanas o incluso meses pero, bueno, eso queda para más adelante.