<commit_before>---
layout: post
title:  "Extendiendo Mumuki: Runners"
date:   2015-06-22 20:30:00
categories: mumuki tech plataforma runners lenguaje
---

> Mumuki es una plataforma extensible en lo que a lenguajes se refiere: agregar soporte para tu lenguaje favorito es muy simple.
>
> En este artículo vamos a contar justamente cómo hacer eso. Pero primero, repasemos rápidamente la arquitectura de Mumuki.


## Arquitectura Mumuki

### La plataforma

El corazón de Mumuki es su plataforma: una aplicación [Ruby on Rails](http://rubyonrails.org/), **stateful** que permite la carga de ejercicios y guías, y el envío de soluciones a los problemas. ¿Pero cómo hacemos para poder validar los ejercicios, escritos en lenguajes tan diversos como Haskell, Gobstones, o Ruby? Acá entran en escena los _test runner servers_, o simplemente, _runners_.

### Los _runners_

Un runner es simplemente un servidor HTTP, **stateless**, responsable de evaluar las soluciones.

Para cada lenguaje en la plataforma, existe un runner asociado, identificado mediante su URL.

Cada vez que es necesario validar una solución, en función del lenguaje del ejercicio, Mumuki elige la URL correspondiente y se comunican con el runner.

Ahora bien, ¿qué significa "evaluar las soluciones"? ¿Cuáles son las responsabilidades en detalle de un runner?

### Responsabilidades de los _runners_

En lo que concierne a la evaluación de soluciones, un ejercicio Mumuki consta de:

  * Un **código extra**, que es código que se cargará al evaluar las soluciones pero que el usuario no puede ver. Este código está escrito, obviamente, en el mismo lenguaje del ejercicio.
  * Una suite de **tests**, expresada en el lenguaje y framework de testing que el runner soporte (que normalmente coincide con el lenguaje del ejercicio, aunque Gobstones es una excepción notable).<commit_msg>Link a gobstones<commit_after>---
layout: post
title:  "Extendiendo Mumuki: Runners"
date:   2015-06-22 20:30:00
categories: mumuki tech plataforma runners lenguaje
---

> Mumuki es una plataforma extensible en lo que a lenguajes se refiere: agregar soporte para tu lenguaje favorito es muy simple.
>
> En este artículo vamos a contar justamente cómo hacer eso. Pero primero, repasemos rápidamente la arquitectura de Mumuki.


## Arquitectura Mumuki

### La plataforma

El corazón de Mumuki es su plataforma: una aplicación [Ruby on Rails](http://rubyonrails.org/), **stateful** que permite la carga de ejercicios y guías, y el envío de soluciones a los problemas. ¿Pero cómo hacemos para poder validar los ejercicios, escritos en lenguajes tan diversos como Haskell, [Gobstones](http://www.gobstones.org/), o Ruby? Acá entran en escena los _test runner servers_, o simplemente, _runners_.

### Los _runners_

Un runner es simplemente un servidor HTTP, **stateless**, responsable de evaluar las soluciones.

Para cada lenguaje en la plataforma, existe un runner asociado, identificado mediante su URL.

Cada vez que es necesario validar una solución, en función del lenguaje del ejercicio, Mumuki elige la URL correspondiente y se comunican con el runner.

Ahora bien, ¿qué significa "evaluar las soluciones"? ¿Cuáles son las responsabilidades en detalle de un runner?

### Responsabilidades de los _runners_

En lo que concierne a la evaluación de soluciones, un ejercicio Mumuki consta de:

  * Un **código extra**, que es código que se cargará al evaluar las soluciones pero que el usuario no puede ver. Este código está escrito, obviamente, en el mismo lenguaje del ejercicio.
  * Una suite de **tests**, expresada en el lenguaje y framework de testing que el runner soporte (que normalmente coincide con el lenguaje del ejercicio, aunque Gobstones es una excepción notable).
{'fraction_non_alphanumeric': 0.05958132045088567, 'fraction_numerical': 0.007514761137949544, 'mean_word_length': 4.787267080745342, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5558657', 'n_tokens_mistral': 1218, 'n_tokens_neox': 1171, 'n_words': 533}