Organización del código de LearningML

Con esta entrada inicio una serie dedicada al desarrollo de LearningML. La intención es revelar, y a la vez documentar, cómo se ha construido la herramienta. Comienzo describiendo la organización del código a nivel de repositorios.

La plataforma LearningML está compuesta por 7 proyectos de código, cada uno organizado bajo control de versiones en sus respectivos repositorios de Gitlab.

Proyectos de código

URL del proyecto en gitlabDescripción
https://gitlab.com/learningml/learningml-editorEl editor de LearningML. Es donde se crean los modelos de Machine Learning y se evalúan. Desde esta misma aplicación se puede acceder a nuestro clon de Scratch para desarrollar aplicaciones que usan el modelo. Para que nos entendamos es esta aplicación.

El lenguaje utilizado es Typescript y el framework es Angular.
https://gitlab.com/learningml/lml-scratch-guiEs la interfaz gráfica de Scratch, modificada para LearningML.

El lenguaje utilizado es Javascript y el framework React.
https://gitlab.com/learningml/lml-scratch-vmEs la máquina virtual de Scratch, modificada para soportar los modelos de LearningML. La máquina virtual es el corazón de Scratch, en ella se definen todos los bloques con las instrucciones del lenguaje, incluidos los bloques de LearningML.

El lenguaje utilizado es Javascript y el framework React
https://gitlab.com/learningml/lml-scratch-l10nEste proyecto contiene las traducciones de los bloques de Scratch, incluido los de LearningML y los de EchidnaScratch (en una próxima entrada aclararé que es esto).

El lenguaje utilizado es Javascript y el framework React.
https://gitlab.com/learningml/brain-bowTanto este proyecto como el siguiente, contienen una serie de funciones necesarias para la codificación de textos en vectores numéricos.

El lenguaje utilizado es Javascript.
https://gitlab.com/learningml/brain-textIdem
https://gitlab.com/learningml/learningml-apiEs el software que hace posible la creación de cuentas de usuario y el almacenamiento y la compartición de proyectos en la nube.

El lenguaje utilizado es Python y el framework Django.

Una breve explicación sobre los proyectos

Los proyectos learningml-editor y learningml-api son completamente originales, mientras que los tres proyectos de Scratch: lml-scratch-gui, lml-scratch-vm y lml-scratch-l10n son modificaciones realizadas sobre los proyectos originales scratch-gui, scratch-vm y scratch-l10n respectivamente.

En una próxima entrada sobre el desarrollo de LearningML explicaré cómo se mantienen sincronizados las últimas versiones del Scratch original con las modificaciones realizadas para LearningML.

Por último, el código de brain-text y brain-bow es un batiburrillo de funciones que pillé de acá y allá por la red, especialmente de Stackoverflow. He de confesar que, estos dos últimos proyectos, requieren una reorganización profunda, pues muchas de sus funciones no se utilizan en el código actual de learningml-editor.

Organización de las ramas del proyecto learningml-editor

En el proyecto learningml-editor se mantienen dos ramas: main y develop. La primera es la que contiene el código estable que se encuentra desplegado en https://learningml.org/editor, mientras que la segunda contiene el código que formará parte de la siguiente release.

Cuando se pretende desarrollar alguna nueva funcionalidad o corregir un error, el desarrollador que se encargue de dicha tarea debe hacer un fork del proyecto y crear una rama con el nombre de la funcionalidad en su copia local. Una vez que termina, la tarea hace un push request sobre la rama develop del repositorio original y, si todo funciona correctamente, se fusionan los cambios con la rama develop y más tarde con la main, con lo que los cambios estarían listos en la próxima release.

Todo esto está explicado con más detalle en el archivo CONTRIBUTING.md.

Organización de las ramas de los proyectos lml-scratch

En los proyectos lml-scratch-gui y lml-scratch-vm se mantienen dos ramas: main y echidna. La primera es la que contiene el código estable que se encuentra desplegado en https://learningml.org/scratch mientras que la segunda es la que contiene el código estable desplegado en https://scratch.echidna.es/. Este último, es una modificación de Scratch que, además de incorporar los bloques de LearningML, permite programar las placas Echidna.

En los proyectos de Scratch se esperan menos contribuciones externas, por eso no se ha creado una rama develop en el repositorio. No obstante, si las circunstancias lo exigen, se hará.

Sobre las licencias

Las aplicaciones de factura propia: learningml-editor y learningml-api, las distribuí con una licencia libre denominada GNU Affero GPL. Esta licencia se ha diseñado, específicamente, para asegurar la cooperación con la comunidad, en el caso de software que corra en servidores de red. Lo esencial, además de mantener la atribución del autor en caso de modificaciones, es que si se despliega la aplicación modificada en un servidor, el nuevo código debe llevar la misma licencia y distribuirse libremente.

La razón fundamental para escoger este tipo de licencia, es hacer posible la colaboración con otros desarrolladores, empresas o instituciones, para mejorar y evolucionar el proyecto mediante la filosofía del software libre. En el fichero CONTRIBUTING.md del proyecto puedes leer las normas para contribuir activamente al desarrollo de LearningML.

Por otro lado, los proyecto de lml-scratch llevan una licencia MIT. Esta es menos restrictiva, y prácticamente no obliga a nada. No obstante, preferí publicar el código que he modificado con la misma licencia. Es muy importante darse cuenta de la enorme contribución al desarrollo de software que suponen este tipo de licencias. Gracias a ellas pude partir de una plataforma de programación por bloques como Scratch, bien conocida y estable, y adaptarla para incorporar bloques compatibles con los modelos construidos con LearningML.

Y eso es todo en esta primera entrada, una panorámica general de cómo está organizado el código de la plataforma LearningML.

En próximas entradas…

En próximas entradas iré explicando otros aspectos como:

  • Cómo se sincroniza la versión oficial de Scratch con la modificación de LearningML y Echidna.
  • La arquitectura del proyecto Learningml-editor.
  • La arquitectura de los proyectos lml-scratch.
  • Las nuevas funcionalidades que se van añadiendo al proyecto.
  • Y todas las cosas que se me vayan ocurriendo sobre el desarrollo de la plataforma.