Bueno. Buenos días. Como decía Sergio. Vengo a explicaros un poco que cambios y mejoras hemos hecho al método de matriculación por base de datos externa, que es propio del core de Moodle. Para integrar nuestra base de datos académica. ¿Vale? Bueno, empezaré explicándonos un poco cómo tenemos montado nosotros ese la forma que alimentamos la base de datos externa de Moodle y qué necesidades son las que nos llevan a hacer estos cambios. Y luego ya entraré un poco más en detalles de que hemos hecho para implementarlos. ¿Vale? Acabaré con algunas líneas futuras, pero bueno, esa es la idea. Vale, un poco de contexto. Nuestra base de datos externa de Moodle la alimentamos básicamente de la base de datos académica. Vale, entonces como orígenes de datos, tenemos diversos. Los más típicos son la matriculación de alumnado, la asignación de profesores, pero también tenemos otros orígenes de datos que no son tan habituales Como tenemos una base de datos propia para gestión de trabajos, fin de grado, fin de máster y tenemos otra para doctorandos o la gestión de doctorandos y otra más para la formación dual y la alternancia Estudio, trabajo. Entonces, con todos esos orígenes de datos tenemos una base de datos intermedia donde vamos construyendo los datos tal y como los necesita la base de datos externa de Moodle. Vale. En esa base intermedia lo que hacemos es, por un lado, filtrar esos contenidos, pues decidimos que contenidos de esos tienen que ir a Moodle y de qué forma. Y luego añadimos algunas. Utilizando esa información añadimos algunos cursos generales adicionales a los propios que serían de las asignaturas y demás. Vale, y con todo esto construimos la base de datos externa que alimenta Moodle. Vale, lo básico de esa base de datos externa son los cursos. Vale, los cursos que se crean en Moodle, en nuestro caso son de diferentes tipologías. Vale, la primera más habitual es una asignatura y un grupo de docentes vale. Pero además de esos tenemos bastantes más. Vale, tenemos una en la aplicación, la gestión académica. Tenemos una lógica de conjuntos que nos permite hacer agrupar asignaturas o incluso desglosar las por grupos, de tal forma que en Moodle también podemos hacer esa distinción y crear conjuntos ad hoc. Tenemos cursos generales dentro de Moodle, ya sea para agrupar a todos los alumnos de una titulación de un semestre por proyectos, etcétera, o para formación del personal. Y luego una peculiaridad nuestra es que tenemos cursos personalizados para los alumnos que están tanto en TFG, TFM como haciendo el doctorado. Vale para cada uno de los alumnos que están haciendo el trabajo fin de grado, fin de máster o el doctorado. Tenemos un curso de Moodle donde cada uno de esos alumnos está únicamente él con su tutor o director de tesis. Vale. Y todos estos cursos personalizados tienen una, un esquema y un contenido idéntico. Vale, hay una plantilla predefinida para cada uno de esas tipologías de cursos, de tal forma que ni siquiera los tutores de de la facultad pueden modificarlo porque no tienen permisos de edición. Vale. Bien, esto es un poco la estructura de cursos que creamos y aquí ya os he marcado con unos asteriscos. ¿Cuáles son las necesidades propias que nos llevan a hacer estas modificaciones? Vale, por un lado, una necesidad. Es esto que os contaba de los cursos personalizados que necesitamos que cada uno de esos cursos tengan un contenido, una plantilla idéntica. Entonces queríamos que todos esos cursos se creasen con esa plantilla de forma automática y tenemos plantillas para el TFG, para el TFM, para el doctorado, etcétera Y por otro lado, teníamos también información en la base de datos académica relativa a qué formas agrupamos a los alumnos dentro de los cursos. Vale, y como Moodle tiene la funcionalidad de tener grupos dentro de los cursos, es la otra funcionalidad que hemos desarrollado. Vale. ¿Bueno, resumiendo las necesidades, cuáles son? ¿Por un lado, lo que os decía la creación y actualización de cursos desde la base de datos académica, que se haga bueno la matriculación, que eso ya lo hace el plugin estándar, pero que se haga en base a diferentes plantillas, Vale? Entonces la base de datos externa. ¿Definimos cada uno de los cursos con qué plantilla debe crearse en Moodle? ¿Vale? Otra funcionalidad que tenemos ahí es que esa creación de cursos no se hacen todos en una misma categoría, sino que cada curso tiene definido en un campo en qué categoría debe crearse. Y si la categoría no existiese, se crea la categoría en Moodle para incluir el curso en ella, de forma que automáticamente podemos crear que los cursos creados en el 23 24 vayan a una categoría y los del 24 25 a una categoría diferente, por ejemplo. ¿Vale? Y otra funcionalidad adicional que tenemos es que queremos que tanto el nombre completo del curso como el resumen se cojan de la base de datos académica y se actualicen. ¿Vale? La tipología típica lo explicaré con un pantallazo, es En los trabajos fin de grado sucede que el en nuestro caso lo tenemos puesto el título de proyecto y eso es algo que puede variar a lo largo de lo que es el trabajo fin de grado de forma en mayor o menor medida y queremos que en Moodle el momento que cambie la base de datos externa quede reflejado. Entonces ese campo no solamente se coge a la hora de crear, sino que se actualiza cada noche. Y lo mismo con el resumen del curso, que incluye un montón de funcionalidad. ¿Vale? Y la otra funcionalidad principal es la creación de grupos. Vale. Además de crear los cursos, creamos grupos dentro de esos cursos y asociamos a los alumnos y profesores en base a la información que tenemos en la base de datos externa. Vale. Esa es la funcionalidad principal. Pero además de ello, hemos añadido dos funcionalidades y es que sucede a veces que un profesor asigna a un alumno en un grupo de forma manual y posteriormente en la base datos académica. Ese mismo cambio se se refleja. En ese caso lo que hacemos es que esa asignación manual la promocionamos a asignación de la base de datos externa para que ya no se quede bloqueada y no puedan modificarlo los profesores. Y otra funcionalidad adicional es la de habilitar la mensajería grupal. Dentro de la mensajería de Moodle hay una funcionalidad que es que si creas un grupo de Moodle le habilita, es un espacio grupal en la mensajería para ese grupo. Entonces en nuestro caso tenemos habilitada esa opción para que en el momento que se crea un grupo se cree también el el la mensajería grupal para ese grupo vale. ¿Esto en qué se refleja? Bueno, básicamente la base de datos externa de Moodle se alimenta de dos tablas en el plugin estándar, que es el maestro de cursos y la relación de qué usuarios están matriculados en cada curso y con qué rol. En nuestro caso, lo que hemos hecho es al maestro de cursos le hemos añadido varios campos para reflejar tanto el resumen del curso como el path de la categoría donde debe crearse el curso como otro campo para identificar desde qué plantilla debe cogerse cada uno de los cursos a la hora de crearse. Y luego hemos creado dos tablas nuevas, una con un maestro de grupos, identificando cada grupo qué nombre tiene que haber, tiene, en qué agrupación debe crearse y una descripción y la relación de qué usuarios deben estar asignados a cada uno de los grupos. Vale, pues bueno, estoy marcado en rojo los las modificaciones que hemos hecho a esa base de datos externa. Estos campos. Tenemos que configurarlos en Moodle. Vale, entonces en la pantalla de configuración del plugin de base de datos externa hemos añadido campos nuevos. Vale un campo nuevo para identificar la plantilla que está guardada en la base de datos externa. ¿Con qué campos de la base de datos de Moodle deben mapear? Se puede hacer el restore del curso del backup restore y luego campos también. Bueno, hoy día no se ve, pero los campos para identificar de qué columna debemos coger el resumen de columna debemos coger el el la plantilla, de qué columna debo escoger la categoría ahí se ve un poco mal, pero bueno, vale eso en cuanto la creación de cursos y luego hemos tenido un apartado nuevo completo para creación de nuevos grupos y lo mismo tenemos una relación de qué tabla debemos utilizar, con qué campos se mapea cada uno de los campos de Moodle, si queremos habilitar o no la mensajería grupal que os comentaba antes, si queremos que los grupos se creen automáticamente o solamente se utilicen si están creados previamente. Y bueno, básicamente eso vale, Entonces lo que hacemos es que con toda esta información, cada vez que se aparece un nuevo curso en la base datos externa se crea en Moodle en base a la plantilla. Una plantilla típica en nuestro caso es la que os comentaba antes de trabajos fines de grado. Vale, entonces bueno, cuando un alumno está matriculado en un curso de fin de grado está haciendo el trabajo Fin de grado. Se crea en Moodle un curso personalizado donde va a estar él o ella con su tutor o tutora de del TFG. Y en el resumen del curso aprovechamos para incluir toda la información personalizada de ese alumno, ya sea el nombre del curso en que institución está realizando ese TFG o TFM. El título del proyecto, en nuestro caso en la base de datos, está guardado en euskera, en castellano y un tercer idioma extranjero. Bueno, competencias específicas que se trabajan en el TFG. Un montón de información que tenemos en la base. Datos externa la trasladamos al al campo de resumen de Moodle, que es el que más nos dan para incluir toda esta información. Vale eso en cuanto a las a las plantillas en los cursos y la otra parte que es la creación de grupos en el momento que la base de datos externa aparece, un nuevo grupo se vuelca, Moodle se crea en Moodle, se asignan los usuarios y luego además ya se acuerda de cuando estuvimos haciendo esto en la. Hemos añadido una funcionalidad para que esos usuarios asignados desde la base datos externa queden bloqueados y un profesor no pueda deshabilitarlo. ¿Vale? Básicamente esta es la funcionalidad. Bueno. Limitaciones que tiene esta funcionalidad. Una limitación propia de Moodle es que esos grupos que se crean desde la base de datos externa, no hay forma de identificar si están creados esos externa o si están creados desde Moodle y por lo tanto no hay forma de bloquearlos. ¿Vale, hay un issue abierto para añadir el campo Component y que por lo tanto, una vez que seas capaz de identificar cómo se ha creado cada grupo, seas capaz también de bloquear depende el origen en el que esté creado, vale? Otro problema que nos hemos encontrado es el tema de las agrupaciones. A día de hoy cualquier usuario puede crear grupos en Moodle sin necesidad de crear agrupaciones para ellos. Y si esto ha sucedido antes de que creemos nosotros, va a un grupo desde la base de datos externa y el usuario ha creado tareas sin agrupamientos, pues se pueden romper cosas porque ya de repente un alumno que estaba en un único grupo pasa a estar en dos modules, incapaz de saber en cuál de los grupos tiene que hacer la entrega y puede suceder cosas de esas. Entonces hay que crear agrupamientos también para esos grupos que se hayan creado de forma manual. Bueno, y otra limitación de nuestra implementación es que utilizamos una funcionalidad de Postgres para mejorar el rendimiento en ese en lo que es el acceder a tabla de datos externa. Vale, es Foreign Data Europe, es una funcionalidad propia de Postgres y por lo tanto no podemos hacer uso de esa funcionalidad en otros sistemas gestores de bases de datos. Bien, eso en cuanto a la implementación, a día de hoy tenemos del orden de 3500 cursos creados en Moodle desde la base de datos externa, con en torno a 120.000 usuarios matriculados en esos cursos. Dentro de esos cursos tenemos en torno a 2300 grupos creados y unas 75.000 asignaciones de usuarios en grupos. Y el rendimiento es mejor que bueno, diría yo. Vale el. El grueso de la matriculación y creación de grupos y cursos se hace en septiembre al empezar el curso académico y esa inicialización inicial suele tardar en torno a 02:03 horas. Por lo tanto, el 1 de septiembre, el 2 de septiembre, cuando haces de madrugada esa inicialización para la mañana siguiente, está todo en marcha. Y luego tenemos hecho que cada media hora se sigue actualizando el contenido de la base. Datos externa de la base de datos académica a la versión externa de Moodle. Y esa sincronización que luego se hace cada noche dentro de Moodle tarda típicamente entre diez y 20 segundos. Si tiene crear varios cursos, pues igual puede llegar al minuto, pero suele andar más o menos por ahí. Vale. Bueno, todo este código está público, está en GitHub y está publicado en Ramos. Allá por septiembre octubre publicamos en en en los foros de Ramu también toda la información relativa y toda la todas las enlaces que os he puesto aquí para las diferentes versiones y hemos añadido también para la cuatro cuatro la versión propia. Y bueno, en principio esto es lo que lo que tenemos hecho. Bueno, líneas futuras aprovecho que estamos ya aquí, pues lo típico que hace cada uno que desarrolla algo es. ¿Lo ideal sería que se integrase en el core, no? ¿Bueno, tiene sus pegas, vale? Entre otras cosas porque son dos funcionalidades diferentes. Entonces por un lado está la parte de cursos basados en plantillas que bueno, en su día hicimos un intento que pilló de Gabrielillo, pero no está refinado, es un work in progress. Y luego la creación de grupos dentro de los cursos sí que es un nicho que está creado, que no es creado por nosotros, sino que está creado y que tiene bastantes votos, pero que tiene dependencias en cadena. ¿Vale? Si entras ahí verás que depende de otra funcionalidad y que a su vez depende de otra. Entonces, bueno, eventualmente acabará integrado en el core. Ahí tengo mis esperanzas. Pero bueno, en cualquier caso, seguimos con un backlog de mejoras para nuestra, para nuestro desarrollo. Y bueno, una de las funcionalidades que tenemos pendientes es añadir también la asignación a grupos dentro del login. No sé si sabéis, pero la base externa de Moodle, además de sincronizar masivamente cada noche, permite que si un usuario hace login en Moodle y detecta que haya algún curso en la base de datos externa, se le matricula automáticamente en el momento del login. También vale. Esa funcionalidad no la tenemos implementada también para asignar grupos al usuario en el momento del login. Es una funcionalidad que que nos gustaría añadir. La parte que os decía antes de Foreing Data de Postgres, pues nos gustaría reemplazarla para hacerlo agnóstico a cualquier base de datos y que por lo tanto si utilizáis un SQL o cualquier otro Oracle igual ya no. Cualquier otro sistema gestor de base de datos, pues también podéis hacer uso de de esto. Otra funcionalidad que no tiene el plugin Core pero que se nos ha ocurrido que estaría interesante es la parte que os decía antes de que si un usuario está matriculado manualmente en Moodle y posteriormente aparece en la base de datos externa, actualmente lo que sucede es que pasa a estar matriculado por dos métodos diferentes a la vez. Entonces, en el momento que desaparezca de bases externa seguirá matriculado manualmente. La idea que tenemos es hacer lo mismo que con los grupos, decir bueno, si ya estaba matriculado manualmente previamente, quitar esa y poner la base de tal sistema de tal forma que ya quede fijado y cuando se matricule oficialmente ya se les matricule automáticamente dentro de Moodle. Bueno, tenemos otra funcionalidad que es actualizar la fecha de inicio y fecha de fin de los cursos de Moodle que están sincronizados desde la base de datos externa. Por ejemplo, para que los cursos del primer semestre tengan fecha fin en febrero y los del segundo semestre del semestre Fecha de inicio de febrero. De tal forma que en el dashboard de Moodle como filtras por cursos activos, te muestre solamente algunos cursos u otros. Eso lo tenemos implementado directamente atacando las tablas por SQL. Nos gustaría también implementarlo en el plugin para que sea más limpio. Y bueno, tenemos ahí una lista larga de de backlog de otras cosas que podríamos mejorar. Pero bueno, básicamente es esto. Bueno, ya estoy acabando, pero no quiero acabar sin reconocer que bueno que yo aquí soy un mero portavoz de todo esto y que aquí dentro de la universidad han pasado diferentes personas que han trabajado en esto allá por 2008. Muchos conocéis a Iñaki, fue el que desarrolló la primera versión de este plugin. Cuando empezamos a utilizar de forma institucional y posteriormente ha estado Julen Pardo también, que hizo el TFG con nosotros en 2014, 2015 y hizo mejoras. Y bueno, desde 2019 también. Kepa que sigue con nosotros, pues es el que ha hecho muchas de las mejoras que hemos hecho más recientemente. Entonces, bueno, reconocerles el trabajo a ellos y y básicamente esto es lo que les quería contar. No sé si me he dejado algo porque siempre voy muy rápido y quizás podéis preguntar lo que queráis y y cualquier cosa. Pues preguntar ahora. Pillarme luego en la comida o o lo que queráis. Pues. No, tranquilo. No, no, perdón, estaba antes la compañera. Gracias. Hola, buenos días. ¿Mi pregunta es Estáis de alta los alumnos? ¿Cómo dais de baja a los alumnos? Si aún no se da de baja o termina el curso, los de base de. Datos externa si. La base de datos externa. El plugin estándar de Moodle permite decidir qué hacer en esos casos. Vale, entonces hablo de memoria, pero creo que una opción es si desaparece la base de datos externa, le matriculo de Moodle u otra opción es si da igual lo que aparezca en la base externa que la dejo matriculado. Y la tercera es dejarlo matriculado, pero en activo. Creo que son las tres las tres opciones. En nuestro caso, si un alumno se da de baja, automáticamente le quitamos también de Moodle. Pero bueno, depende también de cada casuística y el plugin estándar en ese caso ya permite en cada caso decidir como como os interesa funcionar. Porque otra cosa que hacemos nosotros es reutilizar los cursos de Moodle de un curso académico para el siguiente. De tal forma que en el momento que acaba un curso, empieza el siguiente. Matriculamos a todos los alumnos y profesores de la edición que acaba y matriculamos en el mismo curso, manteniendo el contenido a los de la nueva edición. Entonces, con esa funcionalidad de si desaparece la base externa de matriculo de Moodle, es automático. Todo el proceso gracias a. Hola Iñigo, no estaba comentando con Saulo. ¿Puedes volver a la diapositiva donde estaba el modelo de tablas? Si. ¿Si bueno, la duda era estas tablas son en concreto de la anterior? Creo que era así. Estas tablas son del plugin. No del el plugin en sí mismo no las define. Tú tienes que tener una base de datos externa y luego el modulo. Lo que dices es dime de donde cojo el campo de summary. Entonces lo que tienes que decir de esta tabla, de este campo vale sea en el plugin estándar de Moodle, tú ya tienes dicho que hay una tabla, un maestro de cursos, que es la tabla, la que sea en el plugin estándar. Aquí tú defines. En la tabla X están los cursos y en el campo tal está el journey. En el campo está el full y ahí le hemos añadido nosotros los campos de summary de el path de la categoría que tiene que crear el curso y el template. La plantilla desde la que tiene que crearse cada curso. Entonces esto serían las tablas de la intermedia. Si te la vas a eso es. La primera que has puesto. Tres al modelo y decirle si está la intermedia. Vale, vale la crearlo y alimentarlo de la base de datos externa. Gracias. Y te Te quería preguntar, Íñigo, has comentado. Que la sincronización se hace en apenas unos segundos si nos podrías explicar cómo funciona internamente. Para que vaya tan rápido. Que qué hace. Si en resumen. Bueno, es un poco complejo porque nuestra base académica está en Oracle y todo el mundo lo tenemos sobre Postgres. Entonces lo que hacemos es enlazar las dos tablas, dos bases de datos y lo que hacemos es refrescamos toda la base de datos académica y buscamos las diferencias. ¿Entonces no borramos todo eso diferencia? Bueno, hay dos registros que faltan. Pues los insertamos. Hay dos registros que sobran, los borramos, hay dos registros que han cambiado el Foley, los actualizados. Vale, si eso me cuadra. Porque yo he hecho alguna implementación justo en esa línea de de buscar las diferencias que al final es cargarlo todo en memoria. Lo que hay. Cargar en memoria todo lo que quieras poner y buscar las diferencias y al final así es como seguramente consigas explicándote. Y luego si quieres nos juntamos la comida. Vale, de acuerdo, Muchas gracias. Generar una lista de cambios a realizar y luego ir aplicándolos en la base de datos externa de Moodle. Si es un diseño perfecto. Muchas gracias. Yo tengo dos preguntas. ¿Una, el resto de los grupos que tenéis tantos creados en realidad que grupos montáis por defecto? ¿No, no tenéis por cada asignatura un profesor y son todos los alumnos o es que la misma asignatura la imparten varios profes por el grupo de mañana? ¿Grupo de tarde? Vale el caso típico, no hace falta grupos asignatura y un grupo en Moodle y ya está. El único grupo es ese. Pero pueden suceder dos cosas una, que haya el grupo A y B de mañana y tarde o de dos campos diferentes que realmente el profesor quiere que en Moodle estén juntos. Pero siendo el mismo porque es el mismo profesor, no. Puede haber dos profesores que se pongan de acuerdo. Ah, vale, vale. Entonces a veces nos dicen quiero que la asignatura tal, el grupo A y B estén juntos en Moodle, pero saber de qué grupo es cada alumno. Entonces tenemos un mismo contenido, un único curso en Moodle con dos grupos y luego puedes decidir que parte del contenido es común y luego con las restricciones de acceso o tal. Es decir, este contenido solo es para el grupo, este contenido es solo. Para el grupo B. Y todas esos grupos al final lo uniones y que estos sean lo hacéis en las tablas intermedias porque tenéis un aplicativo donde os viene del ERP directamente. Tenemos una parte. A día de hoy tenemos la gestión académica con desarrollo propio y hay una parte ahí que gestiona todo eso. Es decir, estas dos asignaturas las agrupamos. Y otra pregunta, el tema de la visibilidad de los cursos, porque me dices que lo arranquéis todo por la noche y a la mañana siguiente ya lo están viendo los alumnos. Los tenéis ocultos porque les dais tiempo a que los profes los actualicen, los pongan a punto y los hagan visible ellos. Depende del caso, depende del caso, las asignaturas. Típicamente lo que hacemos es las asignaturas del curso que empieza en septiembre. Las ponemos visibles para el profesorado en julio, cuando hacemos el cierre del curso y hasta septiembre solo los profesores pueden acceder y luego ya en septiembre matriculamos a los alumnos. En el caso de los trabajos Fin de grado o fin de máster, que tiene una plantilla fija y que siempre es la misma y que el tutor no va a poder cambiar. La visibilidad que se crea se queda visible para para el alumno. Depende un poco de la casuística, pero bueno, podemos jugar con ello desde fuera. Y es el profesor, es el que los va haciendo visibles conforme. A partir de septiembre. La política típica es el curso está visible, solo que el alumno todavía no está matriculado hasta septiembre. Ah, vale, vale. Y de julio a septiembre el profesor decide ocultar el curso. Cuando en septiembre se matriculen, los alumnos seguirán sin verlo hasta que el profesor lo decida. Vale, vale. Gracias. Sí. Pregunta Se instala. Sustituyendo al módulo que viene por defecto de base. De datos externa para el Rodman y pregunta si, si. Es así y. Y otra pregunta el. Proceso esto que lo ejecutáis. ¿En el cron o se ejecutan por otro procedimiento? 1/1 es si sustituye al plugin estándar solamente o es otro. Están hechas sobre el plugin estándar, no es un plugin que instalamos aparte. Nosotros lo que hacemos es modificar el data database y parchear. Que lo que tengo que modificar es decir que con una. Actualización tengo que tener cuidado que tengo que sobrescribir. Ese y por eso después de la actualización. Lo tengo que sobreescribir. Con con el con la versión actualizada. Y si lo que me imagino. Ahora es la sincronización con la que lanzáis en el cron, la lanzáis porque el interfaz cli que que venía en el módulo de base de datos en román de base de datos por defecto la la opción de actualización venían ya desde hace ya tres o cuatro versiones. Venían como que no se usaran, que estaba deprecated y de. Hecho ya las últimas versiones no vienen. Si yo solo tengo que que incluya y a mano. No, no, no, no se puede. Poner las tareas programadas, claro, pero no con un script que tenga. El cron que ejecutaba el sync desde cron y ahora lo utilizamos con las tareas programadas de Moodle. Sí, lo tenemos puesto para que se actualice cada noche y lo que es la actualización de la base de datos externa desde fuera la hacemos cada media hora, media hora. Buscamos las diferencias de tal forma que si el alumno no entra a lo largo del día como muy tarde, se le matricula a la noche y si ha entrado a lo largo del día, pues con un gap de media hora al hacer login se le matricula en esos cursos que que corresponda. Gracias. ¿Preguntas? Bueno, espero no no explayarme mucho porque empecé y me emocioné demasiado. Tengo demasiadas transparencias. Intentaré bueno, ser liviano en alguna de ellas. Bien, quería. Bueno, en mi presentación, lo que yo quiero presentaros es básicamente el sistema que utilizamos nosotros en nuestra universidad para la gestión de sesiones y para la. Para los datos cacheado, quería dar una breve introducción muy breve del sistema de caché, que ya es seguro que lo conocéis y quería comentaros nada. Dos transparencias sobre nuestra universidad, sobre la infraestructura que tenemos nosotros montada en nuestra universidad, que condiciona de alguna manera el uso de Redis como como gestor de sesiones y de y de datos de caché. ¿Bueno, en pasaremos luego a ver si funciona, si veremos los problemas que tuvimos con el anterior sistema de gestión de sesiones y de caché que eran en caché y como hemos pasado a un sistema de alta disponibilidad con Sentinel y Redis, Cómo se configura Redis en Moodle y pruebas de carga que que hicimos? Y básicamente aspectos a monitorizar en. En Redis. Por último, las conclusiones de este año como nos ha resultado Redis en nuestra institución. Bien, básicamente ya te digo que no me quiero enrollar mucho con esto del sistema de caché. Es un sistema que que empezó en el dos cuatro como una manera de mejorar el rendimiento para que simplemente no hubiera tantos accesos a la base de datos, sino que el usuario tuviera un sistema intermedio, una caché a la que pudiera acceder a la información antes de llegar a la base de datos. Existen diferentes tipos de elementos a cachear y básicamente lo que se hace es que existen una serie de definiciones o elementos a cachear y cada uno de esos elementos a cachear se mapean en los diferentes almacenes que tengamos de caché. Existen diferentes tipos de almacenes de caché. El archivo, que es el más básico en donde tú en caso un directorio donde se va a guardar esa información cacheada, el alternativo PHP caché que está muy bien pero que es muy pequeñito y bueno, y Redis existen otros, pero a partir de ya. Modelo 4.2 en el en el core no no bueno no está incluido ya que existe el plugin de caché, pero el de MongoDB no he visto nada de básicamente en para lo que os he dicho es mapeada la información de la base de datos en los diferentes almacenes. Se puede tener para una misma definición de de o para un mismo elemento a cachear diferentes almacenes. Lo que pasa es que eso redunda en rendimiento porque cada vez que quebraba es una información. En esa, en esa definición tienes que guardarlos en cada uno de los caché de los almacenes para para tener la información de de esos de sus almacenes, lo que se hace es que Model pregunta al sistema de caché de caché. Pregunta a los almacenes para para guardar la información, Model se lo solicita al sistema de caché. El sistema de caché guarda en las diferentes en los diferentes almacenes que tuviera asociados a esa especificación. Bueno, nuestra universidad es una universidad bastante grande. No me. No me voy a enrollar nada de esto. Simplemente comentaros que nosotros en nuestra universidad tenemos actualmente nueve entornos de Moodle con una capa por encima, que es ese ordenador que se ve ahí, que es Cube, que es el portal de acceso para gestionar todos los cursos de los diferentes entornos y a los usuarios de los cursos. Bueno, en la parte de la derecha, en los cuatro ordenadores de abajo son cuatro entornos de cuestionarios que se utilizaron eh Bueno, cuyo origen es por la pandemia y de los que ahora actualmente hay dos históricos y dos en producción. De los otros cinco entornos uno es piloto, otro es un entorno histérico de docencia del año pasado y anteriores, y tenemos otros tres de este año. El más a la izquierda es el que utilizamos para la docencia oficial. Como no sé si se llega a ver cada uno de los entornos tiene muchos, solemos tener muchos servidores frontales, servidores web. Para cada uno de ellos preferimos tener servidores web, bastantes servidores web pequeños que luego se puedan. Se puede escalar horizontalmente y por lo tanto aumentar. Esto de alguna manera nos ha condicionado en el sistema de gestor de sesiones. ¿Vale? Bien, en la UCM nosotros bueno, como plataforma principal en el 2011 2012 saltamos al modelo seis, que ya está el sistema de caché y utilizamos para ello en caché, en en caché, utilizamos. En cada frontal tenemos dos servicios, uno para las sesiones y otro para para ver datos de aplicación necesitamos un plugin de caché para replicar la información de los datos de la aplicación y que sean consistentes en cada uno de los frontales. Esto como ya explicaré más adelante, hace que que tengamos una pérdida de rendimiento y un consumo mayor de CPU y RAM. Empezamos a tener problemas de caché como del tres cuatro y esos problemas se empiezan a acrecentar con Model tres, ocho y tres nueve, sobre todo durante la pandemia. La problemática que hemos tenido con el caché. Bueno, pues en nuestro caso mmm teníamos que limpiar diariamente la el servidor de caché de todos los frontales a nivel de caché del aplicativo, porque se nos llenaba de basura y el gestor de limpieza de model pues no lo limpiaba. Yo creo que estábamos haciendo algo mal, pero bueno, teníamos que hacer un reinicio diario. Luego al tener las sesiones en cada nodo teníamos que hacer la tarea programada de limpieza de sesiones, pues lo teníamos que ejecutar también en cada frontal. Pero los dos principales problemas es el que ya he comentado que hubo 111 aumento de uso de de la CPU y de RAM en cuanto que tenías que replicar la información entre todos los frontales y que puntualmente y sin motivo aparente, sobre todo en la pandemia, nos dio, tuvimos picos de conexiones abiertas en caché en el servicio de datos de la aplicación que hacía que de repente en un par de minutos llegara al máximo y se satura, satura ese sistema. Es por ello que que bueno, con la ayuda de un partner de Moodle pues realizamos un estudio comparativo en con el con otro sistema de de gestor de gestión de sesiones como como Redis ya con visos de implantarlo. Vale, eso fue el año pasado. Vale, aquí en en esta comparativa se ve que en cuanto a velocidad básicamente pues bueno, es muy muy alta, puesto que los dos van sobre RAM. Pero Redis aporta más opciones en cuanto a escalabilidad. Tiene escalabilidad horizontal siempre que uses Redis cluster. Actualmente hasta Moodle 4.4 modelo no soportaba Redis, no soportaba No, no estaba en el core. La opción de Redis Cluster tiene persistencia, cosa que me en caché al estar en RAM pues no la tiene. Redis tiene como soporte un disco duro de respaldo en donde la información que que se guarda en la memoria también se almacena en disco duro. Existe más compatibilidad, más tipos compatibles de tipos de elementos que se pueden guardar en el servidor, redes y además de mayor tamaño tiene la posibilidad de transacciones y además de una gran comunidad. También tiene soporte técnico. Es por ello, y además es que veíamos que teníamos que tirar hacia Redis, que que el partner nos montó una un sistema de de un cluster de Redis basado en tres máquinas vale con un maestro y dos réplicas y con Sentinel como sistema distribuido de alta disponibilidad y failover. Esto hacía que a ver lo que proporciona Sentinel. No es que no es que el cluster, o sea, no es que los datos se fragmentan en cada servidor, sino que siempre vamos a tener un un nodo maestro en donde se va a guardar toda la información y nodos réplicas. Vale, entonces siempre tendremos un maestro o dos esclavos. En cada nodo tendremos dos servicios, uno para un servidor de Redis para las sesiones, que en nuestro caso iba al 6379 al puerto y otro para los datos de la aplicación que era el seis tres 80. Además, la disponibilidad, la alta disponibilidad era proporcionada con Sentinel y en la opción esa que se ve ahí de Quorum dos, que lo que hace es que hay una opción de configuración en el servicio de Sentinel Sentinel Monitor, que lo que hace es que al menos dos dos Sentinel comprueban continuamente si el nodo maestro. Está caído o es alcanzable. Si es alcanzable, pues perfecto, continúa. Si no te da fallo y en caso en que exista mayoría. De Sentinel que estén de acuerdo. En este caso con dos valdría, pues se puede hacer que uno de las réplicas promocione el. Para ser el nuevo maestro sin pérdida de de información vale. ¿En el ejemplo que os he puesto aquí, que os he puesto aquí el maestro durante un tiempo en los Sentinel esclavos, el Sentinel dos y el Sentinel tres se dan cuenta que el maestro está caído? ¿Eh? Bueno, el la función del Sentinel monitor daría fallo y como existe mayoría de los centinelas, habría una de las réplicas que podría promocionar. Podría perderse algo de información que se hubiera guardado en el maestro y que no se hubiera replicado. Eso se puede minimizar con con esas opciones de configuración que nosotros no lo tenemos, no lo tenemos activo, que son la de mini mini réplicas y réplicas más más las. Para la configuración del cluster en la parte de Redis hay que hacer una serie de configuraciones. Por ejemplo el la opción del bin 000 para que admita conexiones desde cualquier. Desde la IP, el puerto por el que va a escuchar la opción de paz y la contraseña para poder realizar autenticarse en el servidor y hacer la autenticación. El master House y la contraseña que es necesaria para la replicación entre el maestro y el esclavo y en. Por defecto, cuando tú configuras el cluster de Redis, tú tienes que establecer una configuración inicial de quién va a ser el maestro y quiénes son los esclavos. Bueno, pues los esclavos deben tener ese parámetro de réplica o. Vale para la configuración del cluster en Sentinel esto lo hemos comentado anteriormente. El Sentinel, el monitor. Sentinel Outpost eh que que sirve para que se pueda conectar al servidor Redis con la misma contraseña que hemos establecido en el Rincón de Paz. Sentinel After Milk se utiliza para indicar al cluster si un nodo, ya sea Redis, incluso Sentinel, no es alcanzable y en ese caso Sentinel lo considera como caído. Es ahí es donde han pasado esos X segundos. Pues se verá, se habrá si se puede promocionar un réplica para hacer el nuevo maestro. No obstante, también está la opción de Sentinel Failover Timeout, que es el el tiempo límite máximo para que el cluster indique que el nodo maestro está caído y lance el love. Existen otras opciones de configuración a nivel de Redis de las más importantes. Bueno, la de directorio no decir nombre de directorio en donde se indica el NOM, el directorio del país donde va a estar el como quien dice, los datos replicados de la que están en memoria, pues también en disco, por si acaso. Si se produce una caída, tirar de ese disco. De ahí la la persistente, La persistencia se Max Memory con un tamaño en donde se identifica que que cuánta memoria le vas a dar para ese servicio. En nosotros, en nuestra universidad le pusimos ocho gigas para las sesiones y 20 para los datos de la aplicación más memory por Esa es la política en caso de llegar a más memory, la política que se va a utilizar a la hora de eliminar la los elementos a eliminar información de Redis. En nuestro caso pues utilizamos la de los menos los menos utilizados más memory samples es cuántos elementos quieres eliminar cuando se llega al más memory y databases Número que identifica el número de bases de datos lógica donde guardar la información. Tú tienes tu servidor de Redis, pero puedes tener lo puedes tener organizado en diferentes bases de datos. Lógica A nosotros nos ha venido muy bien porque actualmente nosotros tenemos cinco cinco entornos apuntando al mismo cluster de Redis, cada uno de ellos las sesiones va a una base de datos lógica, de tal manera que puedes hacer limpieza de una base de datos lógica en concreto. Bueno, ya no sé si lo comentaré más adelante, pero a nivel de de la caché de la aplicación no puedes. Tiene ese hándicap. ¿No puedes seleccionar una base de datos lógica en concreto hay una mejora en el tracker que la he puesto yo para que a ver si los demo del HQ por pedir eh? Bueno, pues a ver si existe la posibilidad de que lo configuren para una futura versión. Bueno, existen otras opciones de configuración a nivel de Sentinel. ¿Tampoco me voy a liar con esto mucho más, eh? Existen una serie de comandos que pueden ser bueno, una vez funcionando el servidor de Redis o que pueden ser muy útiles a nivel de mantenimiento. Tanto para Redis como para Sentinel, se ejecuta el mismo el mismo comando de redis cli, diferenciándose en el puerto por el que está escuchando ese servicio. Vale. En el caso de Redis, te tienes que autentificar, vale con la contraseña que has puesto en el rincón de paz. Vale, bien, mientras el comando de AWS y luego, una vez que estás autentificado, puedes hacer una serie de comandos entre ellos. ¿Pues saber cuál es el maestro con info Replication, saber cuántos También tiene la posibilidad de saber cuántos esclavos están asociados al cluster, tienes la posibilidad de acceder a un elemento en concreto, a establecer un valor para un elemento concreto? Limpiar toda la información del servidor Redis con flu sol o limpiar una base de datos en concreto que que a nosotros nos viene nos viene mejor también tener la posibilidad de poner el servicio de Redis en modo de reposo, pero es claro, si lo pones en modo de reposo y se opera, ese es el y es el maestro. Si es una réplica no hay ningún problema, pero si es el. Una vez que pase de de inactivo o de modo de reposo, vuelva a estar activo, volverá a coger la información del maestro. Pero si es el maestro, si supera esos segundos configurados en el master milisegundos, pues lo que hará es que intentará realizar un failover. ¿Vale? De comandos útiles de Sentinel. Bueno, pues la posibilidad de de saber cuál es el nodo maestro a través del comando de red Master Adder by name. Comprobar que el cluster está bien con ck acorde Comprobar los centinelas que están conectados con Sentinel y realizar el pelo verde del nuevo maestro. Si queremos en algún momento que vemos que hay algún problema con con un nodo en particular, pues forzamos el nodo en particular, no el nodo maestro. Forzamos el failover del nodo maestro y ya una vez que está forzado, lo. Lo desactivamos del cluster y hacemos las operaciones que fuera necesario. Redis no tiene un sistema de reload, es decir, no, no podemos hacer un cambio de configuración y que automáticamente lo coja, sino que para que lo coja hay que hay que hacer un reinicio. Además de todo el cluster, hay que identificar cuál es el nodo maestro, modificar la configuraciones de los nodos esclavos, reiniciar los nodos esclavos, comprobar que se ha unido al cluster, forzar el failover del maestro, modificar el maestro, reiniciar el antiguo nodo maestro y en un principio pues no habría pérdida de información. ¿Redis en Moodle Cómo configurarlo a nivel de sesión? En el punto PHP tienes que identificar que el manejador de las sesiones es Redis, el host, el puerto, la base de datos lógica, la contraseña, el prefijo que vas a utilizar y si quieres, bueno, cuestiones de bloqueo y si quieres utilizar ese avisador y binary, que a nosotros el partner nos lo recomendó. A nivel de aplicación se creó un nuevo almacén con el servidor, el puerto, la contraseña, el prefijo serializador. Hay una de las opciones que es la compresión después de la serialización que nosotros no la que nos aconsejaron no, no activarla, porque aunque eso evitaría un mayor consumo de disco y un mejor una mejora de rendimiento, consumo de idea, mucha más CPU y en nuestro caso pues pues tampoco. No es que andamos falto de CPU, pero bueno, no andábamos tan sobrados. Entonces una vez que está configurado se mapean las diferentes definiciones de caché al nuevo almacén y listo. También se puede si no quiere decir definición de definición, pues también puedes hacerlo a nivel de todo el sitio como un almacén por defecto para los datos de la aplicación. Aquí está el tracker que os he comentado, ya que la base de datos tiene que ser la cero por narices, con lo cual en esa base de datos lógica tenemos información que solo la podemos separar básicamente por el prefijo que utilizamos en en en la configuración de la aplicación. Comentar que que es o que modelo 4.4 vi que ya soporta la la gestión de sesiones y de caché vía Redis Cluster. Este es un sistema de cluster de Redis más completo pero también más complejo, en donde cada nodo va a tener su información particular diferente de la que tenga otro nodo. Eso sí, para que haya alta disponibilidad también tendrás que tener su nodo replicada. Cada nodo. Hicimos pruebas de carga en el verano del año pasado con una infraestructura propia que tenemos nosotros para las pruebas de carga de diferentes aplicaciones de la UCM con un maestro y ocho esclavos utilizando JMeter, el script de Moodle JMeter se lanzaron las pruebas de 350 usuarios por ocho esclavos, 2800 usuarios con concurrentes en un periodo de salida de 300 segundos. Y los tiempos pues fueron bastante buenos. Eso sí, sobre una base de datos limpia los comparamos con la con las pruebas de carga que se hicieron en el verano del 2021, que es cuando cambiamos a la versión de Model tres nueve y los tiempos fueron muy similares o mejores. Vale. Aspectos a monitorizar Nos recomendaron monitorizar los recursos consumidos del servidor de redes, tanto de RAM como de CPU. Ver que los servicios de Redis 69 funcionan, que la replicación es correcta, que el estado del nodo maestro es saludable y que la fragmentación de memoria no supera el 2,5. Si superase el 2,5, pues sería recomendable hacer un un reinicio. Quería mostraros en estas últimas transparencias una comparativa del del uso de los frontales, en donde del entorno que porque puse 23 24 bueno sería al contrario, sería el 24 25 sería 23 24 y el 23 24 sería 22 23. El el de este año bueno. Mantendría los mismos nodos frontales, lo que pasa que tendría menor CPU y RAM que el entorno de docencia oficial del año pasado, ya que en el de año pasado los cachés todavía estaban en cada uno de los frontales en cuanto a tiempo, en cuanto a uso de CPU de y eran de cada uno de los frontales en caché. ¿La CPU tiene una media de 4% y de RAM de una media 45%, que son más de ocho gigas de RAM de de cada frontal que que teníamos? Pues consumiendo. En el entorno actual tenemos una media de 5% de CPU, pero sobre sobre seis CPU, sino sobre ocho no, si y una memoria RAM de una media de 28% que como ya veis es bastante menor que la de caché. En cuanto a los servidores de Redis, he puesto un par de gráficas de un par de transparencias cada una sobre el nodo activo de las sesiones y otro en este caso en el mes de abril fue Redis cero uno para para las sesiones y Redis cero dos para la las data de la aplicación. En cuanto a CPU, un uso de por 100 de media y de RAM del 9% y en el otro similar media de 5% Media del 9% en combinación Redis más los frontales del entorno actual y teniendo en cuenta que además Redis es compartido por otros cuatro entornos de Moodle, el uso de CPU sería similar, pero se reduce bastante el uso de de memoria principal en los. En los servidores en los servidores web vale en cuanto a elementos almacenados. Bueno, ya vimos que. Redis almacena mucho más elementos de sesiones, aunque ocupa bastante menos. En contrapartida con comment caché que lo teníamos al revés, almacenamos mucho más elementos de la parte de los datos cacheado que yo creo que por eso estaba mal. Estábamos haciendo algo mal y por eso que fuera necesario el reinicio diario. Para terminar, como conclusiones, simplemente comentar que bueno, esto se saca de la propia documentación de Moodle. En un entorno de medio o grande de Moodle es necesario utilizar un sistema de cacheo, que es lo principal para tener un buen rendimiento del aplicativo. Que la experiencia de la USE de la UCM en su año de implantación es bastante positivo. Que la gestión de la caché no es sencillo, que hay que pongo varias citas de la propia documentación de Moodle. Es una tarea que no se puede hacer a lo loco y que hay que con paso firme y que en definitiva no hay ninguna solución maestra. En cuanto a la gestión de sesiones y de caché de la aplicación, que para nosotros Redis ha sido positivo porque tenemos nuestra infraestructura en donde tenemos muchos frontales, pero que para un entorno pequeño o un entorno con 1,1 maquinón, con un solo frontal, pues a lo mejor una caché mapeada a un disco local o a un disco memoria de propio, pues sería más, sería igual de o incluso mejor que que que nuestro sistema actual. Y bueno, pues nada, muchas gracias. Bueno, soy Jorge Ramos, trabajo aquí en la Politécnica desde el año 2002. Empecé como becario del Gate. Empecé trabajando con páginas web, que era lo que en aquella época se estilaba como docencia electrónica, ya luego en el 2006, con contrato ya fijo, pues ya empezamos con Moodle. Vale, Me apetecía contaros cómo cómo se decide instalar el plugin en la universidad, que realmente lo decidimos entre tres personas. Vale de todo. Todos conocéis a Juan Vidal, que es el que se va por ahí. ¿En octubre del 18 me manda un email, me dice Oye, Jorge, me han insistido muchos profesores, Quiero que se pruebe este módulo de vamos de validación de código, de programación, eh? Y yo que entonces era joven y muy dispuesto, pues enseguida. Sí, sí, claro. ¿Dónde lo quieres? ¿Cuándo lo quieres tal? A 02:00. Veo la documentación del plugin y veo que no es sencillo, tan sencillo y que. ¿Y le digo que vaya, que que mejor para más tarde, eh? Dos meses después me lo vuelve a recordar. Me insiste Por favor, lo quiero para ya. ¿Yo me pongo a ello, me dan muchos errores, me da muchos errores y ya por fin viene nuestro otro compañero Luis Eduardo, que es el de sistemas, que me dice no te preocupes que yo lo arreglo todo y yo ya me quedo más tranquilo, vale? Y ya para. ¿Pues lo pusimos en producción en marzo del 19, pues ya había llovido, vale? Quería dar, vamos reconocerle un poco pues bastante. ¿A a los desarrolladores, verdad? ¿Porque muchas veces trabajamos nosotros, nos aprovechamos de su de su trabajo y oye, pues hay que reconocerlo, eh? Richard López, el que lo lo crea vale de la Universidad de Canterbury y lo mantiene el famoso Tim de la Open University, que es famoso porque ha desarrollado muchísimo, sobre todo para cuestionarios de Moodle y tipos de preguntas. Vamos, los que somos así. ¿Moodle, pues le le admiramos mucho, eh? La primera versión fue en el 2013 para la modelo 2.0 y ahora ya van por la cinco punto 2.1. Nosotros la tenemos en Google cuatro uno. ¿Esta versión incorpora nuevas mejoras que nosotros no hemos puesto, que luego al final seis tiempos la contaré, vale? La interfaz es muy amigable. Vale, esto es lo que ve el alumno. No se ve muy, muy bien, pero vamos a hacer que el profesor escribe una pregunta que queréis hacer. Vamos, lo que tienen que hacer. Puede poner casos de prueba y tal con el resultado que tienen que dar. Y el alumno tiene su su su cajita para escribir el programa y chequear si si funciona o no funciona. ¿Vale, esto lo lo luego lo explicaré, eh? Se puede elegir si se quiere salir, enseñar el el chequeo o no, porque si es un examen pues yo no quiero que lo vea el alumno, simplemente que lo presenté. Ya está, vale eso, eso es todo. Muy configurable. Bueno, esta esta herramienta está muy integrada en muchísimas universidades técnicas sobre todo y nada tiene muchísima fama, más de 3000 descargas y sobre todo es importante la la página web que tienen. Vale que es un vamos es es de los mejores documentaciones que me he encontrado yo en un plugin. Vale, tienen canal de YouTube, tienen manuales y tienen foros que contesta el mismo Richard. O sea que cualquier pregunta y te contestan rapidísimo. ¿Eso está muy bien, vale? ¿Bueno, y qué es Code Runner? Pues lo que os decía voy a repetir mucho. Es evaluación automática de código en muchos lenguajes de programación, muchos lenguajes de programación que aparte vienen por defecto en la instalación. Y luego también tiene la ventaja de que puedes añadirle lenguajes. Se si no está el que tú quieres, el que que el docente pues se lo puedes integrar tú. Nosotros hace unas semanas integramos R El programa este de estadísticas creo que es y bueno, pues ha ido bastante bien y nada bueno. Las características de del plugin pues lo que pone aquí evaluación en pruebas, personalización, gritos, evaluación que también el docente puede elegir qué quiere evaluar del del programa que ha hecho el alumno, que coincidan los resultados o el estilo del código, etcétera. ¿Vale, ya nos metemos en en lo importante, vale Cómo se instala? ¿Se puede instalar on premise? Sí, como la mayoría. Universidades tenemos los equipos en nuestros en nuestras instalaciones. ¿Eh? ¿O Cloud? Vale. El blanco de repente necesita un servidor, que nosotros lo llamamos Oye bien. Perfecto castellano, que es un joven. Digamos que es el que ejecuta los programas. Vale, el plugin Code Runner Leman. Luego lo explico. Fusiona, fusiona lo que es la plantilla de respuesta con la respuesta del alumno, crea un ejecutable y lo manda al servidor. Este de aquí vale. Aconsejan que que se instale independientemente de del resto que tenga que tenga solo acceso vía interna, o sea por la por IPS internas que no sea accesible desde el exterior y la ESO. Lo más importante es mantener la seguridad. ¿Vale que que se consigue? Pues gestionando con el propio firewall del servidor. No sé si tengo algo más porque escrito por ejemplo, si lo queréis en la nube, la Universidad de Granada tiene un manual muy bueno para la o para Google Cloud y el propio Richard para algo es una Ocean digital o algo así. Sé cómo se llama. Tiene un vídeo muy. También muy chulo. Vale. Una vez que ya tienes la máquina, pues instalamos lo que viene a ser el joven. ¿Vale? ¿Eh? Lo puedes instalar con un Docker. Ellos te dan una imagen que es joven a box, que simplemente te dicen que con un clic ya lo instalas y tú te olvidas de todo lo demás. Vale. Nosotros, eh, optamos por la opción por la opción de picar código. Bueno, estas son las instrucciones. Me gusta señalar esto. El que necesita el juego para ejecutarse, necesitas un Apache. ¿Y luego qué? De qué lenguajes voy a. Bueno, el PHP porque está. O sea que lenguajes quiero compilar. Quiero que los alumnos vengan por defecto, que tengan que puedan examinarse. Todos tenemos el PHP, instalar las librerías de PHP, el python de FP, el Pascal que alguien me comentaba antes, SQL también Octave, por si tienes preguntas tipo MATLAB y luego bueno hasta ahí. Luego también instalas el pilín. Se puede instalar que es una herramienta de que que valida el sintácticamente la la escritura en Python y poco más. Ahí lo podéis ver. Luego te bajas el. Después de instalar esto en el servidor te bajas el proyecto de GitHub, lo instalas en el directorio web del servidor y poco más que configurar. Simplemente la variable está joven max users que te aconsejan que que sea el número de CPUs que se ejecute, que tenga el servidor. ¿Vale? Y nada. Ah bueno, tienes el bueno, lo instalas y tal y luego tienes tienes varios scripts que han diseñado ellos para probar la instalación. ¿Vale? Esto es cuando le das ahí al test te sale todo esto. Si todo está ok, pues lo has hecho muy bien. Y tienes allí arriba tenéis la la especificación de los lenguajes que soporta por defecto el servidor. Vale. Vale, lo que os decía, que es lo más importante de las dos cosas más importantes del servidor, asegurarlo. Y el rendimiento vale. Para asegurarlo lo que os he comentado antes, simplemente que solamente tenga comunicación interna por con los servidores web, con los servidores de de gestión. Vamos con la con el que gestiona por SSH por el puerto 22 y el rendimiento de. ¿Si tenéis herramientas de rendimiento para que? Pues para que controle un poco la la CPU y la memoria. Y todo esto, el resto de conexiones se rechazan y ya está. Vamos, nosotros hemos configurado el firewall que utilizamos es NF tables, que es un vamos que está ya es una evolución de iptables y en la documentación del del plan ellos te enseñan a hacerlo con un FW. Bueno, que también es muy sencillo. Luego existe una opción, si tú no lo instalas separado, vale para aumentar la seguridad. Por ejemplo, si tú lo lo tienes todo en el mismo servidor, en una escuela pequeña o lo que sea, pues se añade la posibilidad de autenticar con una API. Lo único malo que tiene esto es que tienes que instalar un SQL en el Jove, te requiere un SQL, lo. En el moodle configuras la la API y ya se valida y en teoría funciona. Nosotros por indicación de Richard dice que no es necesario si mantienes las medidas de seguridad que he mencionado antes, pues te funciona bien. Lo siguiente es instalar el plan en el Moodle que tiene dos componentes el plugin en sí mismo, que es el question type y luego el question behavior. Este un sirve para para temas de caché vale. Cachear los resultados de las pruebas. La configuración de Moodle es muy sencilla, simplemente es habilitar la casilla del joven y apuntar el en el campo de servidor joven el último de abajo pues poner la o el nombre del host o la IP interna que con la que quieras que vaya con la que da servicio. Vamos. Vale, vamos con el rendimiento. Esto es lo que más dolores de cabeza nos daba. ¿Vale? Porque al principio teníamos dos CPU solamente con este servidor y claro, los profesores se quejaban de que en cuanto había un pequeño examen pues daba error, no dejaba, se colapsaba. Vale. ¿Entonces fuimos poco a poco evolucionando y llegamos a a lo que tenemos ahora este a ver si funciona el vídeo vale? ¿Antes os he dicho que que el propio Playing te da unos scripts para tanto, para probar la instalación como para estrenarla, vale? Este es uno que los tres no se ve muy bien. Arriba deberíais ver unas barras rojas, verdes y rojas de que son las CPUs y según van haciendo el script va haciendo las pruebas. ¿Pues tú vas viendo hasta qué punto se se colapsa, vale? Y el script mismo pues te te va diciendo cuando pues cuando se estresa ya está hasta que trabajos, cuántos trabajos puede puede servir, vale. En este caso más o menos se ha llegado a 33 por segundo. Un job es lo que os comentaba antes, que es cada vez que que Code Runner unifica la respuesta con un test, con una plantilla es un job de estos. Vale, vale, eh. Tiene un segundo script que es el backtesting dos, que es el que es mucho más avanzado que nosotros, Eso ya no lo utilizamos y ese es pues mucho más específico. Ellos tienen subido un Excel muy muy importante, muy grande, donde te vienen a decir que con ocho gigas y con con ocho CPUs y 16 gigas puede soportar tranquilamente exámenes de 500 y que hasta mil que que ellos nunca han llegado a tanto, pero que que que lo soporta el sistema seguro vale. Esto que veis aquí. Nosotros utilizamos la herramienta de Grafana para para monitorizar el rendimiento de los servidores y la prueba que habéis visto. Ahora esto, el resultado en la. ¿Como veis como afecta a la CPU? Vale. Se pone la máquina a tope. Sin embargo, la memoria no es tan influyente. También es verdad que depende del lenguaje en el que estén desarrollando, pues la memoria en Java, por ejemplo, consume algo más y en C pues no es instantáneo. Esto son pruebas en C y esto es tenía muchísimo escrito aquí que no estoy haciendo ni caso, así que nada. ¿Bueno, qué conclusiones sacamos? A mayor número de CPUs, mayor rendimiento, mayor número de alumnos que podemos dar servicio nosotros decimos que con con lo que tenemos ahora sí que es verdad que en la pandemia, eh. ¿Rogamos a los profesores que si fuera el examen mayor de 200, que nos avisaran para estar monitorizando y eso se ha seguido ya hasta ahora, pero ya creo que podemos subir el número a 300 400 eh? Bueno, cuando es un examen. De hecho ahora en nuestra universidad que nos avisan oye, me voy a hacer el lunes a las 08:30 monitoriza el con el grafana y nada, ya sabes que es imperceptible el el vamos la el rendimiento no, no baja nada. Y pues lo que os he dicho, esto es. ¿Vale el uso en Moodle eh? ¿Cómo funciona el plugin? ¿No? El plugin crea preguntas tipo de programación y en base son en base a prototipos. Vale, cuando tú lo instalas el por defecto tienes unos prototipos que lo metes en la categoría de pregunta. Hacer prototipos que son los prototipos base que digamos que son las preguntas en el lenguaje específico. Vale, pues si yo quiero en C prototipo C y si es en Java pues en Java tal, lo veréis en el desplegable que sale. Bueno, pues lo típico de model que quieres agregar una pregunta pues eliges el tipo, el tipo code runner. Esto es lo el tipo de pregunta que os decía. Estas son las que te vienen por defecto, todas estas que tienes. C Programas de funciones C++, Clases de Java, Métodos Java. Por si es algo más sencillito en MATLAB. Bueno todas estas y lo que comentaba también al principio. R El lenguaje. R Nosotros eh desarrollamos un nuevo tipo de pregunta, lo creamos una categoría aparte porque te lo aconseja así. ¿Richard para que? Porque esto es muy importante. Hay un problema que es que si tú modificas un prototipo de los que ya vienen instalados, eh, Eso no, no se va. En cuando tú actualizas el plugin, todo eso se sobrescribe. Entonces no se debe, no se debe tocar nunca un prototipo ya de los que te vengan por defecto. Entonces siempre te dicen pues una categoría aparte y tal otro. Bueno, ya me adelantó un poco un problema que hemos tenido en los nuevos cursos cuando empieza el nuevo curso académico es como estamos exportando, importando, exportando todos los cursos a la vez, pues de alguna manera se importan dos veces. La categoría padre Vale la categoría por defecto que tiene el plugin se instala dos veces en modelo, entonces en ese momento deja de funcionar. Todo no funcionaba y tienes que después de empujarte mucho de que Richard te dice no, eso es porque tienes dos categorías, la misma categoría dos veces simplemente eliminando una de las categorías Padre Model ya busca el de prototipos y ya lo encuentra y ya sigue funcionando. Vale esto lo que os comentaba del tipo de evaluación que quiere el docente puede elegir coincidencia exacta, casi exacta, una expresión regular en base a lo que el meta quiero que me devuelva, pues lo que se a b asterisco punto x, pues mete, ahí está y el calificador de plantilla, que eso es para usuarios muy muy avanzados. Vale que eso nosotros ni siquiera todavía no lo hemos nos lo han pedido, vamos entonces no lo hemos explicado normalmente es la coincidencia exacta en lo que el profesor mete. Yo creo que es lo que quiero que sea, algo que el alumno escriba y que y que la el resultado de la ejecución del programa sea lo que yo he puesto vale, vale. A ver que se ve aquí. Vale, pues esto es lo que ve el profesor cuando cuando crea una pregunta, en este caso es de tipo te metes el enunciado. El nombre de la pregunta aquí en respuesta es el código ejecutable, que es el profesor. La solución del problema vamos vale. ¿Y en los casos de test muy importantes, eh? ¿Meto la entrada y la y lo que yo espero que salga, vale? Puedes meter tantos casos como quieras. Hay que pensar que cuando. Si tú cada test que metas pasan un programa que se va a ejecutar. ¿Pero bueno, tampoco ha habido mucho problema y puedes elegir que este test se muestre al alumno o no? ¿Vale, cuando el enunciado el alumno puede ver el test allá arriba Ves? Esto es un ejemplo. Quiero. A partir de esta entrada quiero esta salida. El alumno rellena rellena el código ahí en la ventanita y lo que os decía sale, sale el resultado. Aquí lo ha hecho todo bien y pues el chico es muy listo, si le. ¿Si falla algún te saldrá en rojo la fila en rojo eh? Un poco más. Bueno, aquí es como creamos el el nuevo tipo de pregunta. ¿Vale? Personalizamos una plantilla propia. Le. ¿Pero eso es un poco una tontería, eh? Si os fijáis en el código que no se ve. ¿Eh? Realmente nosotros lo que tenemos que hacer es instalar en el servidor la librería rebase. Vale para que interprete este tipo de lenguaje. El servidor joven y lo que hacen ellos es lanzar eso. Lanzan un o sea, te cogen la la respuesta del alumno. Los casos de test lo fusionan, como ahora explicaré y ejecutan lo ejecutan en el servidor, cogen la salida y lo y lo evalúan. Vale. Este plugin es muy muy sencillo de utilizar con los prototipos que te vienen por defecto. ¿Vale? Y si queréis, vamos. Si el para preguntas avanzadas, porque luego se puede mezclar lo que son plantillas pueden ser se pueden mezclar plantillas y bueno, por lo visto da muchísima potencia de de juego al docente. ¿Pues es mejor leer el código porque nosotros todavía no estamos tan especializados, vale? Y para entender un poco cómo funciona el el plugin, pues es en este esquema que es muy que es muy aclarador. Vale este. Este esquema es el plugin entero, el alumno mete la respuesta y el motor de plantillas, o sea, el tuit que se instala con el plugin lo que hace es mezclar. Fusiona la plantilla de la pregunta que ha hecho el profesor con la respuesta del alumno y coge todos los test. El código del test que ha añadido el docente vale por cada por cada una de esas entradas genera un programa ejecutable que es lanzado al servidor joven. Vale. Y genera una salida todas esas salidas y vuelven al Moodle, al calificador. ¿Evalúan lo que el profesor quería que saliera, lo que ha salido realmente cojo lo que que que estoy evaluando, si es la expresión regular, si es que es la coincidencia exacta, lo meto en un renderizador y lo muestro en la pantalla renderizador pues es la tabla verde como has visto, vale? La tabla roja y eso así todo el rato. Pues esto a mí me costó un día entero entenderlo. Vale, pues acabo ya. Y no sé si vamos bien de tiempo. ¿Queréis saber más o más cosas o preguntas? No sé que. Sí o. Hola. ¿Qué tal? Eh. He visto que. Aparte de los lenguajes de programación típicos de Java, este tipo de cosas. También tiene la integración con MATLAB. Sí, vale. Eh, eh. Pero bueno, supongo que que debes tener un poco ciencia y tal, o si nosotros si. Eh, ellos hablan de que conecta. No sé si lo conoces de lenguaje. Puedes llegar a hacer preguntas tipo el MATLAB vale. En la documentación de Richard Test te explican ya si tú quieres hacer preguntas. MATLAB MATLAB. Efectivamente es un mundo aparte. Además tienes que instalar más cosas y este es su desarrollo propio y su la integración. Del. Creador. De MATLAB. Sí. Eh, claro, lo veo. Esto digo bueno, nosotros. Tenemos instalado precisamente. Digo a ver si me quito, me quito el otro. Nosotros, de hecho nos ha pasado lo mismo y hemos tenido problemas con lo otro, pero todavía no hemos. En ese campo no hemos avanzado. Aquí no hemos hecho mucho más. Así que ya te digo que en la documentación te lo explica el nombre te explica muy bien y te dice además que tengas cuidado porque eso que afecta mucho el rendimiento. El manda, así que no te puedo decir mucho más. Hola buenas, quería preguntar si porque hablabas de capacidad para. Ejecutar. Exámenes de aproximadamente 300 usuarios concurrentes. Sí tenéis. Un solo. ¿Jove o tenéis alta disponibilidad con varios servidores en claro? ¿Mira, pues esa es una de las que me he saltado, no? Solo tenemos uno de nosotros. Se puede escalar muy fácilmente. Vale. Ellos te explican que nada. Simplemente añadiendo un balanceador que poniendo otros servidores debajo, que no hay ningún problema. Como no tienes que mantener persistencia de nada, el devuelve. Ya está, que es muy sencillo, muy sencillo. Nosotros ya te digo cuando un solo servidor de ocho CPUs ya hemos dejado de tener problemas, al principio teníamos dos, luego cuatro CPUs. De acuerdo. ¿Y sí que es verdad que los exámenes sufríamos nosotros de algún alumno que le da error y como encima pues los exámenes porque no son prácticas, que a lo mejor las prácticas pues le das otra vez al botón y ya está, no? Aquí es que le dan le entregaba Code Runners, te corrige esas jóvenes, te corrige y y suspendía. Cuando no tenía que suspender era por que saltaban timeouts y cosas así. Y ya te digo en pandemia ya que nos dieron eh banda ancha y nos permitieron usar todos los recursos posibles. Con todo, pues ya cogimos y le metimos aquí potencia y ya nunca más. Ya no nos lo han quitado y y vamos, tú tienes un problema y decías de memoria, de memoria tenemos 16 gigas, pero yo pienso que está un poco sobredimensionado. No hemos. Vamos, te en el en el gráfico que te he enseñado, la memoria nunca nos ha ido para abajo. O sea que no tienes. Jorge yo te quería preguntar. Jorge es si la registradora conoce las versiones que son soportadas de los diferentes lenguajes y. El el administrador o el docente. ¿Administrador del job, eh? Y si de alguna manera eh se puede comunicar al profesor esas versiones, Es decir. Si. ¿Puedes hacer un programita pero para una versión de un lenguaje te funciona pero para otra no? ¿Entonces claro, Bueno, nosotros creamos, creamos un bueno para lo primero, el administrador del Jove, que entiendo que es que es el mismo administrador que somos nosotros, eh? ¿Porque a lo mejor tú lo tienes separado, no? Yo no te. O sea yo, pero si sabes que versiones tú cuando lo instalas te dice que versiones tiene, vale que necesitas hacer el estudio del planning también, el mismo te dice oye, esta versión de tener que mínimo esta versión de Jove suelen ir a la par más que lo tienen muy bien montado como se lo comunicamos a los profesores. Nosotros tenemos un curso de Moodle abierto a todos los docentes que me. Lo que es una de las cosas que os quería enseñar que donde le comentamos todo lo tenemos todo actualizado, todo las versiones que soporta la aplicación suele suelen funcionar con versiones atrasadas de lenguajes. También el Python dos lo soporta bien y nada. Y ya te digo, tenemos una herramienta de foros sobre todo que es donde nos piden Oye, que yo creo que esto del lenguaje lo puedes mirar y tal y que tardamos meses, pero pero se hace. ¿Y no sé si es eso lo que me está preguntando, no? Eso sí. ¿Y luego otra pregunta de desconocimiento es si de alguna manera a ver, como es una, eh? Cuando tú ejecutas un programa de lenguaje, a lo mejor la respuesta es muy abierta. El. ¿Existe algún tipo de notación? Sintaxis para definir lo que tienes que devolver es un array de no sé dónde se. Entonces tiene que tener un formato con concreto, yo que sé. Definición de la RAE un espacio, una llave no. Sabe lo que sí se puede. El depende de la plantilla que tú definas. Puedes pedir por lo que por ejemplo una clase Java. Pues quiero que que el al clase las llaves y esto ya venga por defecto. Y todo eso lo defines en la plantilla que tú quieras y luego puedes se puede elegir que corregir, que salida, o sea, por ejemplo las listas y ordenación de listas. ¿Y todo esto es en base, yo creo, a los test case que el docente escriba vale? Pero vamos, que ya te digo que en la universidad lo usamos de forma bastante básica. Yo por los que he visto los exámenes de los profesores, pero ellos hacen auténticas virguerías, los de las los de la Canterbury, sabes que se puede, lo que pasa que requiere mucho estudio, mucho, mucha práctica también. Y si no hay más, hay más preguntas. ¿Os cuento un poco la la como hay tiempo no o no? Bueno, dos dos minutos ahí. Bueno, vale. ¿Han desarrollado un nuevo, han desarrollado nuevas especificaciones que están bueno, que está, que se llama, que es el filtro eslingas, que es para cuando? ¿Pues cuando edita el profesor el contenido HTML en cualquier recurso de Moodle, pues puedes añadirle, le añades un filtro de este tipo para que? Pues para que se formatee como si fuera un código. Vale y el alumno lo vea así y incluso que pueda aprobar, pues puede aprobar los ejemplos y incluso escribirlos ellos mismos mientras están estudiando o leyendo el recurso que sea. ¿Otra de las cosas que han añadido nuevas es el bloc de notas, el este, que es como un borrador cuando el alumno tiene el examen en vez de escribir en la en la parte digamos que voy a presentar en la ventana de arriba, pues tengo un borrador para para que? Para aprobar yo digamos pues escribes lo que te dé la gana y lo lo lo ejecutas, no va, no hace nada más, simplemente te devuelve la esta. Pues lo estás haciendo bien, no está haciendo mal. Entonces las cosas que están haciendo nuevas. Y estas son las preguntas que te decía. Por ejemplo muy avanzadas. Pues que te hacen gráficos, te hacen, sabes, hacen todo y nada. Y vamos a insistir en lo del principio. Es un es un. Son desarrolladores muy con mucho bagaje detrás que le que esto le da mucha importancia y está muy bien documentado y mantenido y no. Gracias eh. Bueno, pues vengo de la Universidad distancia de Madrid, de Lima eh este QR os de acceso a la presentación por si queréis verla, supongo que es la colgarán luego en la página y os lo voy a poner también en la última parte. Transparencia, vale. Si queréis acceder a él. Vale. Eh, vamos a ver el el cómo nosotros en la universidad clonamos el entorno de producción al de desarrollo en 60 segundos. En realidad es menos. Lo vais a ver luego. Vale. ¿Eh? Igual me conocéis más por la gente de Sergio que trabaja conmigo. Llevamos el plugin de Git. Si hemos hecho ya alguna charla en Ramo hago un poquito de publicidad. Pues adelante, paréntesis, vale. Eh, Git sí es una alternativa a servicios de videoconferencia o al botón, o al teams o a y lo podéis hacer, lo podéis probar, le puedes echar un ojo y nosotros estamos aquí, Lo mantenemos, lo usamos en la universidad y si tenéis alguna pregunta luego pues nos podéis hacer vale. Y empezamos. ¿Cuál es nuestra arquitectura? Nosotros en última tenemos lo tenemos muy sencillito. Tanto el Moodle como el Moodle data como la base de datos. ¿En Postgres lo tenemos todo en una máquina, todo en hierro, una sola máquina, eh? ¿Por qué? Pues nos gusta lo sencillo y sobre todo porque nos lo podemos permitir, porque somos más pequeños que Complutense. Entonces, eh, se nos facilita mucho las cosas. Pero todo esto que vamos a contar yo creo, luego lo podemos hablar, pero se puede replicar también cuando se tiene un frontales y todo ese esas cosas más complicadas vale. Y donde tenemos el entorno de desarrollo y de pruebas, pues también en la misma máquina. ¿Para simplificarlo más todavía, eh? Que tiene su pequeña ventaja. Y es que siempre hay garantías de que estamos usando la misma versión de engines, las mismas librerías, mismas versión de Postgres, todo juntito mantenemos menos servidores. ¿Vale? ¿Eh? ¿Cómo se hace toda esta magia? ¿Esos 60 segundos de magia? Pues es con la tecnología LVM, Esto es una navaja suiza para los administradores de sistemas. Vale. Y y probablemente si no lo están haciendo vuestros administradores, que le echen un ojo, porque cuando se monta una máquina nueva, aunque no lo vayas a usar de primeras, es muy buena idea hacerlo. ¿Vale? En realidad es una capa de abstracción entre los discos duros y. ¿Y cómo vas a usarlos? O sea, te olvidas un poco de ese tema de hacer particiones y tal. Esto funciona así. O sea, básicamente lo que tenemos en los servidores son discos duros, o podemos tener dos o tres raids o un solo RAID con muchísimos discos o los dos RAID con un disco duro sólido, con otro que vaya de los viejos, como si pones una tarjeta de memoria SSD. Vale todo. Todo esto al final funciona con que tienes que montar un VG, un volumen group donde en realidad le vas echando discos y los puedes echar en caliente Si se te acaba el disco sin tener que parar servicios, tu añades más discos que te va a permitir luego jugar y crear. ¿Pues las cosas que en realidad va a ver el sistema operativo vale? Eh, Porque lo que ve el sistema operativo al final es son los Lv. Vale, cada uno de esos, estos son. Lo vais a ver en las transparencias cuando está en azul, es el tamaño que está ocupado y lo otro es lo que le queda libre. Tú puedes montar a partir de un montón de teras que tengas porque vas echando discos como si fuera una cabina. O sea, yo creo que las cabinas por debajo están usando esto en realidad vale, Eh, eh, tú, Se te va acabando el disco, pero tú siempre a los LVS les puedes ir aumentando y dándoles más tamaño. El secreto de todo esto siempre están a los LVM, darles muy poquito tamaño vale lo que vayas a poder necesitar para crecer, porque lo importante es dejarle en realidad al al grupo de discos espacio suficiente para poder crecer y poder hacer snapshots y poder hacer otras cosas. Entonces siempre se van creando. El uno puede ser para el modelo del Model Data, otro para la base de datos, pero el truco siempre está en darle poquito, monitorizarlo porque lo vas a poder aumentar siempre que quieras. Vale. Pero una vez que lo ha consumido ya, quitarle pues es más complicado. Lógicamente. Esto es así un poco simplificado el cómo lo tenemos nosotros. Nosotros en realidad tenemos dos LVS, uno para el motor del data y el código y otro lev para el para la base de datos. Aquí lo simplifico, vale, En realidad todo nuestro VG en nuestro servidor de producción de producción y el de pruebas, los dos tienen un VG de cuatro teras. Ahora mismo no me preguntes si tenemos RAID uno y dos. Eso de Ángel de sistemas vale en y lo he simplificado, aunque esto serían dos. Lo vemos así. ¿Para explicaros como funciona este tema de los snapshots, vale? Y el rendimiento o en qué puede afectar el de producción. Tenemos el VG cuatro teras. Ahora mismo en el de modelo le tenemos datos tres teras. Me queda una libre todavía para poder jugar y hacer estos. Esta magia vale. La parte azul es todo lo que tiene consumido hoy en día nuestro modelo data más o menos, y lo que está en gris, lo que le hemos dejado para que pueda crecer libremente. Vale. Nuevamente, conforme se nos va acabando, pues le podemos aumentar más, eso no hay problema. Y si se me acaba el VG de arriba compro más discos y los echo en caliente y los coge. Lo suyo siempre es echarle discos un poco de la misma velocidad, forma de acceso, de de replicación y y de redundancia. O sea, esto que he dicho de echar una una tarjeta SD sería una barbaridad. Vale, o no tiene mucho sentido montar un raid y luego dejar un disco y montarlos todos en el mismo VG y dárselo porque como se te pierda uno de los discos te ha sido. ¿Aquí es cuando hacemos el snapshot, vale? Nosotros tenemos el de producción ocupando tres teras y de pronto hacemos el snapshot para hacer ese entorno de desarrollo. También está en azul, pero en azul clarito, porque en realidad eso no se está ocupando. Son No estoy aumentando en realidad el Lv que he creado nuevo para desarrollo, que es lo que vamos a poner en el punto de montaje en el sistema operativo para entregárselo al engine o al postgres. ¿Vamos a crear eh? ¿Le dejamos solamente esos cuatro cuadraditos de espacio para crecer 100 gigas, o sea, nos hacemos una foto de producción y de esos cuatro teras que teníamos, que estábamos ocupando ya tres, solamente me ocupo ese poquito de arriba, las 100 gigas, vale? Y esto es instantáneo. Esto son transferencias, 60 segundos son menos. Vale. Este comando de aquí es el Live create de 100 gigas. Es lo que desarrolla eso. Vale. Ya tengo la foto. Hay que montarlo en el disco. En el sistema operativo y todo el tinglado. Pero van pasando los días. Vale, esto es pasadas las semanas. Pasadas las semanas, nuestro sitio de producción habrá ido creciendo con nuevos ficheros, nuevo nuevos registros en la base de datos y habrá cosas que se habrán modificado igual de cosas muy viejas. Alguien ha eliminado, ha hecho limpieza de cursos. Son solamente las cosas que se modifican en producción, las que el el desarrollo tiene que tratar de traerse. Si ese cuadrito de allí verde ha sido modificado porque han eliminado un curso en la vez en el snapshot, no puedo perderlo porque era una copia, entonces me tengo que tener ese cuadrito verde y me ocupa una posición en los tres gigas que tenía de espacio. Todo lo nuevo que en realidad va creciendo en producción no me lo tengo que trasladar al snapshot, no me hace falta. Lo normal cuando clonamos el entorno de de producción a desarrollo es que producción siga aumentando y en desarrollo hay cuatro gatos de calidad haciendo pruebas y poco más. Se crece muy poquito de hecho. Pues fijaos que en el mismo tiempo a lo mejor hayan crecido cuatro cajitas y aquí en desarrollo cosas nuevas, cursos nuevos que hayan hecho, ocupa muy poquito. ¿Vale? Esto es el ejemplo. Esto son datos reales de lo que vamos a ver ahora. La demostración, eh, era la. ¿Cuando hice este vídeo que os voy a enseñar, llevábamos diez días de haber hecho el snapshot, vale? Y yo los hago así con 100 gigas y como os he dicho tenemos dos, uno ese de arriba es el de Moodle, tenemos son 2,29 teras. Lo que nos ocupa, el model y el model data, su snapshot. Le dimos 100 gigas para crecer y pasados diez días de esos 100 gigas habíamos ocupaba un 29%, 29 gigas. La base de datos. La base de datos la tenemos con 530 gigas. El snapshot que me hago también se lo doy de de 100 gigas y pasados diez días pues 33% ocupado. O sea, podíamos haber estado con este un mes más todavía que no se habían llenado. Y si se llenan porque no te das cuenta, no pasa nada, el entorno de desarrollo deja de funcionar, eso ya no es recuperable. ¿Tiras el el snapshot y vuelves a empezar, vale? No nos pasa porque también los tenemos monitorizados, pero te puede ocurrir. ¿Este también agua no? ¿Bueno, qué vamos a ver en la demostración? Yo La demostración va a ser un vídeo que está está grabado. ¿Me acercas, Adolfo? El agua. ¿El agua? Sí, sí, está. ¿Está bueno? Sí, lo tengo. Aquí. En la demostración. Todo esto va a ser como, muy rápido. Y lo que lanzamos es un script. Se llama desarrollo. Lo tengo. Ha puesto desarrollo off para parar el el entorno de desarrollo y desarrollo para volver a arrancar. Y el script ejecuta dos fases principalmente. La primera pues crear un clúster nuevo de base de datos de Postgres en otro puerto lo levanta, lo crea, pero es la instalación de Postgres es la misma. Crea otro clúster atendiendo en otro puerto. Hacemos el snapshot de la base de datos de producción y lo montamos en el sistema de ficheros para entregárselo a ese, a ese, a ese cluster nuevo que hemos hecho de Postgres. Arrancamos el postgres y hacemos el snapshot de de del data de producción y lo montamos en un punto de montaje del sistema operativo para que lo vea el engine. ¿Vale? Esa es la primera fase. Cuando hayamos hecho eso pasan unos 30 segundos menos, yo creo. Ya, ya está arrancado el sistema de desarrollo con una copia exacta de como está en producción. Pero claro, es desarrollo y vamos a tunearlo un poco porque no queremos que sea lo mismo, no queremos que mande correos, por ejemplo, porque es que se ha hecho una copia exacta. Si había mensajes pendientes de mandar del foro lo va a mandar. Vale. Entonces ahora de inmediato es lo que le hacemos, le empezamos a tunear cosas que hacemos. En nuestro caso esto ya es muy personal para cada para cada infraestructura se hace de una manera lo primero, pues desactivamos el buscador global y cambiamos el índice de solar. ¿Nosotros tenemos activado el solar, lo podríamos hacer también, desarrollo mantenerlo, pero habría que hacer un clonado, no? Sé que no, no somos muy expertos en solar. Tampoco es lo que nos preocupa de testear en el entorno de desarrollo. Lo desactivamos y dejamos el buscador estándar de Google. Vale, porque lo que no queremos es no queremos que si lo dejáramos sin desactivar, pues cursos nuevos o eliminación, pues haría que se nos eliminaran en el solar de producción y dejarían de encontrarse cosas. Vale, vale, hacemos las protecciones al correo electrónico saliente tocando los parámetros que os anota ahí pues el alma, el stud y pues cambiar cosas para que todo el correo que intente sacar el sistema lo mande a un sitio, lo descarta y no lo llega a mandar. Esto yo no lo conocía, yo antes de hacer esto es lo que dije, que me iba la tabla de usuarios y les cambiaba el correo electrónico a todos y cosas así. ¿Cuando descubrí esto dije mira, más limpio, vale? Porque se le controla más. Vale, marcamos todos los post como ya enviados. Introduzcamos la M, le forúnculo, vale para que no intente mandarlo a ver con el otro. Probablemente descartaría muchos, pero hay algunos mails que sí que queremos que nos lleguen al equipo de calidad de innovación. ¿Sus mails están puestos para que cuando hagan ellos sus pruebas reciban correos electrónicos de acuerdo? ¿Desactivamos las notificaciones de la app de móvil de ayer, cambiamos de sesión cookie, activamos herramientas de debug para desarrolladores para no tener que entrar nosotros, el de desarrollo siempre toda la franja de abajo con todas las demás de debajo Vale, eh? Ajustamos nuestro plugin para que deje de usar el entorno de desarrollo. Es otro entorno que tenemos y que también los grabados. Nosotros el las sesiones de 15 y las las grabamos en tiempo real en cuentas, en grabadores de youtube haciendo streaming, pues le ponemos otras cuentas distintas, vale, pero se queda operativo el sistema para poder hacer grabaciones y sobre todo todas las grabaciones que tiene la tabla de grabaciones. Las hacemos, les hacemos un backup en desarrollo y la trunca porque tenemos el módulo Gipsy, lo tenemos parametrizado para que grabaciones que llevan. No sé como era eso. A las que un profesor ha eliminado. ¿Nosotros a los 30 días le damos orden a YouTube de que la elimine, vale? Mientras tanto el profesor las elimina, pero eso se queda en YouTube todavía hasta que las eliminamos del todo. Vale, pues esa es la segunda fase y esta es la que más tarda. Vale, en realidad se va a ver todo como muy rápido. Para hacer esto me habéis dicho que tengo que. Tengo que pasar a un vídeo. ¿Que es este? Se va a ver aquí. No, lo tengo que arrastrar ahí. Aquí Creo que te funcionaba. Vale, pero hasta ahí. Pero el vídeo está todo. Entonces. Ahí está. Vale. Uy, Donde tengo el ratón. Bueno, tenemos producción y tenemos desarrollo. Vale. Aquí os estoy mostrando un poco. Os lo dejo. Marcan los carteles. Estoy mostrando un poco el el ahora mismo es. Este es el que se ve muy mal. Pero este es el último mensaje que hay en uno de los foros que tenemos es del 7 de mayo y este era. No, ese era el 16 me parece, y este del seis. En realidad es para luego entrar y que veáis que que cambian las cosas. Entonces vamos a ver primero el como está en el momento de antes de parar, vamos a parar ahora el entorno de desarrollo que está funcionando. Esto me lo grabé el domingo. Vale, aquí os estoy marcando un poco lo mismo de la captura de antes. Tenemos el snapshot ahora mismo que llevaba diez días ocupando un 29% del del código y del del data y el snapshot de la base de datos. Entonces lo primero que vamos a hacer va a ser pararlo. Nosotros lo hacemos con un script que es desarrollo off. Aquí cuento cosas en el vídeo, pero. Pero más o menos me lo sé. Vale. Venga, dale un sudo. Desarrollo sh off. Al intro estoy desmontando, tirando los volúmenes y ya estamos en el entorno de desarrollo. Si recargo la página de desarrollo. Ya File not found. Vale. Ahora vamos a ver cómo se ha quedado otra vez los LVM. Es para verificar con el comando lvs para verificar que ahora ya no los tenemos. Vale, es lo mismo que estaba arriba. Aquí abajo ya no tenemos los snapshots presentes. Y ahora ya preparad los cronómetros porque hacemos el sudo. Desarrollo on. Y empieza la cuenta atrás. Vale. ¿A que ha creado el cluster? La ha dado una contraseña. Me costó más tiempo borrar las contraseñas del vídeo que el vídeo. Vale. Ha creado el. Ha creado ya el snapshot. Ahora mismo ya está cambiando. ¿Veis? Y es un comandos de voz. Ahora mismo ya el entorno de desarrollo está funcionando, clonado, idéntico al de producción. Vale. Todo esto ya es el módulo. Vale, cambiando cosas del git si o credenciales de de lo que sea. Vale. De hecho, ahora si recargo aquí, ya lo tengo presente. Vale, me vuelvo otra vez al código. Mira, ya ha terminado. Hecho. Vale. Creo que han sido menos de un minuto y ahora ya está completamente accesible con lo mismo. De hecho, este entorno. Ahora, si vamos al panel, ver no se ve en el vídeo. Si lo enganchas con el, con la con el QR sí que lo vais a ver mejor, pero por ejemplo en el dashboard. Ahora aquí sí que tengo un montón de participantes, Son los 100 y pico que había en producción. Esto porque son los últimos cinco minutos, estaban conectados todos los alumnos conforme pasan los minutos ahí ya son 114. Esto va a ir reduciéndose porque lo normal es que en el entorno de desarrollo pues estás tú haciendo las pruebas. ¿Vale? Y ah, vale. Y para ver ya otra vez como ha quedado de nuevo el los snapshots. ¿Vale, Y cuánto ha ocupado? Pues mira, recién creado estamos ocupando un cero 12 del del data y del del y 1007 de la base de datos. Vale. La base de datos en realidad, proporcionalmente es la que más crece, porque solamente los. Los temas de log y cosas de esas, pues es lo que más va a ir aumentando a proporción. Aunque solo les doy 100 gigas, el volumen original uno de 2,4302 de 530 vale igual. Las primeras horas te sube un poco más porque en el VM esas cajitas que estábamos viendo azules y grises, los otros son suelen ser por defecto bloques de cuatro megas que se van completando y esos bloques pues de inicio están más vacíos y los va a tener que replicar. Luego ya eso se estabiliza mucho. ¿Y ahora que enseño ya no me acuerdo que el que más contaba, eh? Ah, que está repitiendo lo se, lo voy a contar otra vez. Porque no sé. A ver. Vale. Esto lo cierro y vamos a seguir por aquí. Bueno, este es el vídeo que hemos visto. Y ya. Simplemente pues ventajas. ¿Son claras, no? El probar cualquiera de Moodle siempre en un entorno recién refrescado y si te ha ido mal lo vuelves a tirar y son 20 segundos. Bueno, o minutos, vale. Garantías de tener el mismo sistema operativo, mismas versiones de base de datos, un backup completo en segundos antes de hacer una red. Esto para nosotros es para lo que más lo usamos realmente estos clonados, a no ser que nos lo pidan porque se han cargado algo y tal. Sobre todo los usamos para probar la nueva versión de los viernes en el en una copia idéntica. Es más, hay veces que nosotros solemos hacer las las migraciones, las actualizaciones a las 07:00 y hay veces que la has hecho la prueba 15 minutos antes. O sea, hay veces que una migración se te puede romper. En realidad por datos que han cambiado te puede haber ido muy bien en el entorno de pruebas, pero igual hay un curso que está corrompido por algo y te va a romper. ¿Vale, te da más tranquilidad, vale? También muy bueno, pues mantener una foto idéntica anterior durante un montón de días después de la ESO también está bien. Es un sitio del que recuperamos muchísimas veces backups, o sea, el típico profesor que se ha cargado un algo y que en vez de abarcar del sistema operativo, pues hacer una copia restauración del último que está muy refrescado. ¿Antes de tener todo esto, nuestra copia de desarrollo igual tenía una antigüedad de uno o dos meses, no? Ahora siempre es de semanas o del día. ¿Vale? Para probar los nuevos plugins y sobre supuesto también pues menos servidores para mantener o administrar. Y ya nada más. ¿Así que si tenéis alguna pregunta, Oye, lo he hecho muy bien en tiempo, eh? Si. Aparte del tiempo que ha dejado, nos quedan cinco minutos más que me han dicho que van a tardar en montar la comida. Un poco más explayado en preguntas. Ya a. Isaac o al resto. De preguntas. ¡Hola! Pues yo quería preguntar porque el entorno que tú. Has. Preparado aquí está muy simplificado en el aspecto de que todo está en una. Misma máquina. La data, lo que es la base de datos. ¿Qué pasaría si todo lo tienes un poco más disperso, eh? Pues al día siguiente. Rápido, a ver si está más disperso. Pues igual se complica un poco más, pero la realidad es que por muy disperso que esté, por muchos frontales que haya, al final todos los frontales atacan a un mismo model data montado en un servidor que está servido por NFS y es al que consultan. Y la base de datos está en un único sitio. También. O sea, en realidad hacer esos dos snapshots a veces lo tenéis en máquinas separadas porque yo lo tengo la misma máquina, pero lo hago dos snapshots. Yo lo tengo hecho así por si en algún momento necesito llevarme la base de datos a otro lado a otro servidor. Pero el snapshot lo puedes hacer en la máquina donde está el model data en la máquina donde está el postgres y en realidad levantar otro frontal solamente para atender a un entorno de desarrollo. O sea, puedes hacerlo. ¿Hay veces que la el miedo que se tiene esto es dice Job, pero y cuánto me va a penalizar? Porque mientras tengo arrancado el entorno de desarrollo, en realidad tiene que estar comparando a ver si si hago escritura, si lo modifico aquí lo tengo que guardar, si lo tiene que hacer. Pero la. La realidad es que lo que va creciendo en el entorno de producción suele ser siempre algo nuevo. Es raro que haya borrados de cosas. La gente sube un PDF, sube una nueva revisión, sube, pero todo eso se va quedando en el Model Data solamente Si hicieras borrados masivos de alas y que limpian luego un montón de ficheros es cuando más te crecería el entorno de snapshot y cuando más penalizaría. Pero a ver, también lo dicho, nosotros tenemos somos más pequeños y el procesador y memoria que tenemos pues nos va bien, pero yo entiendo que se puede montar exactamente igual. Y vamos. Y han sabido montar. Si Jorge ha sabido montar ese mogollón de clusters y de frontales y que se balancean y con los Redis y tal, pues tiene que saber montar este. Y seguro que también tiene temas de seguridad, porque aunque no lo uses para los snapshots, es lo único que te permite en realidad quedarte sin disco, añadirle disco a la máquina y no parar el servicio porque se hace en caliente. Entonces, aunque no lo sabes usar para esto, LVM siempre es una muy buena decisión a la hora de montar una máquina nueva. Yo tengo una pregunta para Jorge Cola del Redis. Antes nos has enseñado el las. Las pruebas de estrés que se hicieron con las rampas de entrada de 300. Hicisteis las mismas pruebas de estrés ya que las tienes montadas no usando Redis sino la caché nativa que viene ahora. Yo en noviembre os puse un mensaje en el foro. Estuve evaluando el montar Redis y al final me salía, no me salía a cuenta en mi máquina lo comenté todo. Al final de la transferencia me salían muchos mejores resultados y más rápido con el la caché estándar y al final no lo montamos. Ya tengo el servidor montado pero no lo hemos usado. La caché a disco dices. Sí, la caché a disco y la sesión la la gestión de sesiones con el como viene de fábrica el modelo, o sea como viene instalado en limpio con discos SSD. O sea, esto ya no es, no es como antes eran. Hacer pruebas de carga no hicimos porque además quisimos hacer pruebas de carga también comparando el mismo código de modelo con en caché, pero no nos dio tiempo que eso eso es lo que nos hubiera gustado. Yo entiendo que debería ir mejor Redis en cuanto que estás utilizando RAM, pero no te lo puedo asegurar y. Son las pruebas. ¿Y esos son los datos que yo mandé, eh? Era más rápido a la hora de re no era, era más rápido a la hora de escribir. Al escribir la caché era más rápido, pero era infinitamente más lento a la hora de recuperar. Entonces al final dije joder, en realidad la caché lo voy a escribir una vez y la voy a estar leyendo montón de veces. Preferí quedarme en ese lado. Estaban en el mensaje de era borrarlos ya. Si hacéis otra vez pruebas de estrés, con lo complicadas que son de montar, pues solamente el cambiar esa opción y volver a medir. La próxima vez nos dices. Yo te diré si es cierto que por ejemplo en nuestros entornos de integración que se supone que son réplicas de los entornos de producción, pero excepto por la velocidad de los discos, no son discos tan buenos y tal. Desde luego yo ejecuto MAT y se nota cuando va a cachear RAM y cuando va a caché a disco. Entonces como tal no hicimos pruebas, pero yo sobreentendía que tenía que ir mejor, por lo que. A ver, probablemente yo creo que sí está realmente teniendo el tema de los clusters y los frontales frontales. Sí, que sí, que creo que puede justificarse y que vaya mejor, pero como has dicho tú antes, yo creo que cuando tienes una sola máquina yo creo que no te interesa. Además también lo que lo que he comentado, las conclusiones, o sea, a nosotros nos ha ido bien, pero es que cada, cada universidad, cada centro es es un mundo diferente. Entonces en tu en tu centro, más o menos sabes lo que puede ser mejor y que tu solución puede ser que no sea válida para otros. Yo tengo dos casos a uno y para otro. Usamos red y tenemos. En la Universidad de Córdoba tenemos montado seis frontales con Engin para. Y mi. SQL con un único servidor. Es como lo tenemos montado. Llevamos tiempo usando redes, lo montamos poco antes de la pandemia para lo preparándonos ya para que. El sistema estuviera. Preparado. Súper. Hormonado, responder a lo que nos a lo que nos daba miedo. Entonces lo montamos en aquella época, pero tengo que confesar que hará dos años que todavía en la en el entorno de Del grado y máster tenía Moodle 3.9. Ahí pues ese año se me olvidó configurar Revit, ese se tiró más de medio año, más de. Medio curso sin red y no. No, no vimos diferencia ni lo echamos en falta de nada. Ya te digo, es una cuestión que se lo que se la comentaba antes también Isaac, que, que que a nosotros nos pasó eso. Ojo, lo sigo teniendo puesto y está puesto y funcionando, no me voy, no me he parado a hacer esta prueba de carga, lo que sea. La norma nos dice que tenemos que tenerlo. Y lo tenemos. Puesto, pero pero es curioso que no se echó en falta, no se echo en. Falta y fueron varios meses que la única forma de decidir si lo dejas o lo pones es hacerte las pruebas de carga y repetirlas con el activado y sin el activado no puedes decidir lo. Yo creo que también. Bueno. No, simplemente yo creo que bueno, aunque no se hicieron pruebas de carga, pero yo sí que de alguna manera montaba el caché al al montaba a disco, o sea, tenía el local caché y el caché de ir a un disco NFS, porque claro, tenía que ser compartido y yo creo que ahí sí que me daba peores tiempos. Cuando iba a disco compartido de NFS. Pero no he hecho pruebas de carga. No es un problema de carga. Bueno. Y la segunda cuestión era que yo creo que quizás lo más diferencial es el tema de los discos. Cuando empezamos con todo este tema de de las cachés y que era como en caché, ninguno teníamos en los servidores discos SSD y ahora está en todos lados, entonces no sé si ahí hay una diferencia que igual no nos compense. Yo por eso te invito a que como pruebas de carga otra vez. El disco que tenía yo y también gracias. Pregunta Perdona, que cómo te llevas con la gente de sistemas para que te dejen duplicar ese espacio, que, que, que cómo te llevas con la gente de sistema para que te. Dejen. ¿Duplicar todo ese espacio? Creo que no, pero no lo estoy duplicando, no lo estoy duplicando. Estoy. Estoy gastando 100 gigas solo para tener todo el otro día para migrar a para actualizar de la de la 419A la cuatro uno diez. Ahí. Suplicando espacio. Oye, que quiero hacer una, pero a ver, que precisamente precisamente fueron los de sistema los que dijeron mira, vamos a hacerlo así porque nos ahorramos ahorrar mucho espacio y tiempo. Estoy gastando 100 gigas, 100 gigas para tener replicadas tres teras durante una semana, un mes de vino. Pero vamos, yo tuve que hacerme de la base de. Datos. Excluyendo el demonio. El estándar estándar. Los gestores famosos de esa famosa tabla no, yo duplico hasta los logs, de hecho si no duplicar los logs me llevaría más tiempo, más espacio. O sea, si yo me pongo a borrar en el entorno de desarrollo clonado, si me pongo a borrar los logs se me dispara la ocupación porque tiene que estar guardando las diferencias. Es una cosita muy breve el tema de que en todos los entornos, en una misma máquina en producción lo veo. A mí lo que me provoca un poquito de inquietud es lo del entorno de desarrollo en la misma máquina no va a pasar nunca, porque claro, un desarrollo puedes empezar a ver lo lo llamamos en un momento dado. Lo que quiero decir que pongas un plugin nuevo que está haciendo desarrollo nuevo y que ese desarrollo en un momento dado empiece a agotar la memoria y te tire producción, o que empiece a hacer cualquier cosa rara porque pasan cosas muy raras. A ver cuando lo llamo, aunque le llamamos el tema es la misma máquina, no va a pasar nunca o no. Temas que os pase. Que el entorno de desarrollo rompa la máquina. Durante un rato. Rato. O sea, no un día y os quedáis en producción. Es la parte que me ha. No, no, no, o sea, me llama la atención, le llamamos desarrollo, pero es más test, O sea, es para probar la instalación del Model nuevo o probar un plugin, pero que previamente el plugin te lo hace en realidad para para instalar nosotros algo lo probamos primero en los entornos locales porque siempre el actualización va controlada por Git. Entonces si no me ha fallado en el portátil entiendo que no me va a fallar en desarrollo y sí, te puede pasar eso, pero es que es que me levantan. También tiene cierta memoria, tiene cierto número de procesos. El Apache, que es el engines que se levanta, tampoco levanta tantos hilos esperando y escuchando. Si se agota, se agota, está más limitado. Entonces, como mucho, si me pasara una cosa de esas se me cae ese trocito de desarrollo. Pero hombre, si obviamente te puede pasar, pero es que ahí no hay, no mete, no mete. No es que sea el entorno donde los desarrolladores están probando el código y se meten en un bucle y empiezan a ocupar memoria. Este se usa principalmente para las pruebas para, sobre todo para el equipo de calidad. Cuando sacamos la versión nueva y tienen que hacernos todo el checklist manual para decirnos ok, podéis instalar. ¿Bueno, última pregunta por aquí, vale? Volviendo al tema de Redis, nosotros tenemos una instalación parecida a la vuestra. Exacto, en una misma máquina, también por tamaño lo podemos permitir. Y hace ya seis, ocho años que pasamos de la caché estándar de Moodle a Redis y en aquella época con discos de aquella época sin SSD y demás, la mejoría en rendimiento era bestial. Pero por lo que has dicho tú, me da pie a pensar que ahora que tenemos discos SSD y más rápidos, probablemente el borrar la caché estándar. De móvil puede ser enorme. Una opción. Otra pregunta, la última. ¿Eh? Con este revuelo que ha habido de hace dos meses sobre las licencias, primero con el VMware, que se han multiplicado los costos por ocho, por 20 o algo así. Con Redis también. Leí algo. Parecido que iban a cambiar la licencia que pues no sé si los productos que has dicho Redis. Cluster Sentinel. O el partner sí saben algo. Eso o sea. Cotilleo no. No. Pues siento ser de poca ayuda porque lo desconozco. No lo sé. También es verdad que al hilo de de montar Redis en la Universidad Complutense es también porque queremos utilizar el cluster de Redis no solo para Moodle sino para otro tipo de aplicaciones como bueno, diversas aplicaciones que que estamos planteándonos llevarlo también un gestor de sesiones a Redis. Pero tenemos. Que no. Tenemos la versión de. La gráfica y yo la que probé la gratis. No sabía que había una. Mira, mi superior sabe además que yo. Lo que vamos a hacer con esta maqueta resultante viene. Bueno, pues muchas gracias a todos, a Isaac y a todos los ponentes. Y bueno, vamos a a la comida. Ahora os presento a. Maya y a Sara con esa peluca. Para. Por si no nos habían reconocido. No, pero sabes quiénes sois vosotras. Vale. Sí, sí, sí. Y bueno, os digo. ¿Cómo se llama la presentación? Taller de supervivencia de Construyendo tu propio mundo. Gracias. Antes de nada, vamos a hacernos un selfi porque nos han pedido en el equipo. Que la ocasión lo merece. ¿Hacer un selfi con todos y todos sonriendo, no? Bueno, Amaya no, porque. ¿Porque lo habéis pillado, no? Alegría, Tristeza. Que te quede. Que yo soy la novedad. Ya lo dije. Yo espero que lo note, si no es que lo hemos hecho muy dos Aquí cada uno que se ponga con el que más se represente. No sé yo de lo que me siento. Muy bien gracias a la fiesta, el público entregado muy bien. Esa es la actitud. Todo el rato así, una hora. Eh. Hola. Hola. Es. ¿Está encendido también? Un ratito con esto. Y luego ya. Bueno, Taller de supervivencia. Ya veréis que no os conocéis. Vamos a explicaros cómo instalar diferentes maneras de instalar un Moodle. Si hay gente no técnica, no vayáis, que vosotros los técnicos también, porque ya veréis que podéis hacer cositas para todos. Te dejo a Maya. A ti. Bueno, a ver, yo vengo a contaros. ¿A mí me pasó después de estar cinco años con el ordenador, el verano pasado se estropeó, vale? Y entonces tuve que pasar por esa fase que bueno, así estáis aquí. Seguramente algunos ya habéis pasado, que es de tengo que instalar todo otra vez y yo lo paso fatal, pero muy mal. Entonces conseguí un ordenador nuevo, la empresa me dio ordenador nuevo y me puse con ello. Bueno, desde el verano pasado he tenido cinco ordenadores diferentes y esto no es parte del software. Esto es de verdad. Y no solo eso, sino que en uno de esos me han cambiado la placa base dos veces. Vale, bueno, que con la de la placa base al menos no tuve que instalar otra vez, pero entonces, en esta fase mía de sufrimiento, porque es que no me gusta nada esto. ¿O sea, lo de instalar cosas lo llevo fatal, soy como humano con pistolas, vale? Yo busco en google esta kubeflow y me dicen pon esto y yo lo pongo en esta fase de sufrimiento. ¿Me dijeron oye, y por qué no hacéis un taller de de cómo montar tu entorno en la RAM? ¿Y dije de verdad? Y dije bueno, igual mi experiencia le puede servir a alguien, porque con lo mal que lo he pasado yo, si vosotros lo pasáis un poquito peor que yo, o sea un poquito menos mal que yo ya me doy por satisfecha. ¿Vale? Lo único, yo tuve una cosa súper buena y es que tengo unos compañeros en Moodle espectaculares. Tengo a Sara que ya la conocéis y tengo también bueno, tengo mucha más gente, luego la veréis también, pero tengo a Ferrari, a Mikel. Esta foto se vinieron todos un fin de semana, un fin de semana a San Sebastián de sidrería y esta foto es el domingo. ¿Vale? Ellos me trajeron un ordenador nuevo, el tercero por aquel por aquel momento, y me ayudaron a instalarlo. Imaginaos. Vale sidrería el sábado y el domingo la gente ayudándome a instalar el nuevo ordenador. Y de verdad, esto no es parte de verdad. Vale, entonces, con todo este sufrimiento que yo estaba llevando mientras antes de este, de este, este es el último, este es lo sea, lo voy a cuidar de verdad. No os imagináis como antes de eso. Uno de los problemas que tuve es que, bueno, en una de estas, entre un ordenador y otro, tuve unos días que no tenía ordenador porque yo vivía en San Sebastián. Se te rompe uno y a veces no tienes otro. Y estuve con el Windows de mi hermano. Vale, vosotros no sé si trabajáis en Windows, esto no lo hemos contado. Incluso Sara odia Windows y Mac también un poquito. Yo odio también los dos. Entonces estuve con Windows. No sé si trabajáis con Windows siete. Yo lo pasé fatal en aquella época, decía es que yo no vaya a ser capaz de instalarme la Windows, que no vaya a poder, pero. Pero tengo a Sara, que es maravillosa. Entonces os va a enseñar lo que ella me enseñó a mí en su día y os va. Os va a hacer tan feliz como bueno. A mí feliz tampoco me hizo, pero me subió un poquito el ánimo, me subió un poquito el ánimo y lo pongo aquí. Gracias Amaia. ¿Muy bien, estamos muy contentos, muy orgullosos de ti, eh? Nuestra idea es que al final de la sesión ella salga contenta, pero vosotros también. Vale. Habéis oído hablar de que antes de daros de alta ayer o antes de ayer. No, no, nadie lo conocía. Todos os habéis dado de alta. Entonces no pasa nada y rápido. Porque la idea del taller es que aparte de ver se me oye bien, no. Me se. Oye. Hoy se oye más cerca, así. Que bueno. Aparte de que ya veréis que es una herramienta que nos va a valer para, o sea, vale para todos. No, no tiene filtro. Vamos a ver un poquito por encima. Hasta para ti, hasta para Windows 14. Vale, también te. Comparto micro. Si quieres. Pues aparte de vamos a ver también Docker un poquito por encima y como extra vamos a pasar muy por encima de md para que sepáis lo que es que existe y tenéis aquí la manera de instalarlo. No os preocupéis porque la gente que no ha podido instalar Docker porque sé quien ha podido instalar Docker aún hay gente que ha podido bien, vale, los demás no os preocupéis porque vais a poder hacer cositas también vale. O sea, que no sufráis que tenemos deberes para todos. Sesión práctica. Por lo tanto, sacar si podéis tablet o ordenador mejor. Con el móvil también se puede, pero va a ser más complicado. Pero también se puede. O sea, es que está con el móvil. O sea, para que veáis. Empezamos con POD. Es un servicio gratis, está basado en la nube, es accesible desde el navegador, por eso no hace falta que tengáis un portátil y funciona tanto en Linux que nuestro sistema favorito como en Windows o en iOS o en lo que queráis, está integrado además con diferentes entornos de desarrollo como Xcode y con más. Hay proyectos similares, no solo el de el, que os vamos a presentar ahora, pero hay otros proyectos de software libre que también están usando este este entorno de git pod, como por ejemplo Drupal o WordPress, tienen también un proyecto similar donde automáticamente puedes levantar un servicio de Drupal o de WordPress haciendo clic en en el navegador las documentación técnica de modelos Model Developer Docs también está también utiliza aquí para para navegar. Por lo tanto, super chulo. Súper fácil. Tiene limitaciones la versión gratis, pero para lo que queremos hacer servir yo no lo hemos ido haciendo servir y yo de momento no me ha acabado. Las limitaciones que tiene, que ahora no recuerdo por si acaso. Luego las preguntas a alguien no me acuerdo, pero están explicadas en la web que hemos hecho. Combinar git pod vale, el servicio este tan chachi de la nube con modelo Docker. Vale, Docker es la versión localizada de Moodle que veremos después en la en la siguiente parte, digamos, y combinando ambas, hemos conseguido que los usuarios puedan tener un Moodle levantado con un solo clic en cinco minutos, que es el tiempo que tarda en crearse la instancia Docker, levantar base de datos e inicializarla. Vale. O sea, el único tiempo que vamos a dedicar es al el tiempo de espera de descargarse las versiones de Docker, descargarse código de Moodle, levantar base de datos, etcétera. Qué es lo que hace esta esta versión de git más model Docker clona el repositorio de código de Moodle, inicializa la base de datos de Moodle, después inicia el servidor web y a partir de aquí se crean una serie de usuarios y cursos de prueba. Hay una serie de variables de entorno que son opcionales, o sea, por defecto no son necesarias. Pero si queremos, por ejemplo, cargar un repositorio en vez de cargar el repositorio por defecto de Moodle, queremos cargar nuestro propio repositorio porque queremos probar uno de los parches que hemos hecho. Podemos hacerlo especificando esas dos variables de Moodle. El repositorio y model branch. Después os voy a enseñar una cosita que las usa el data file. De momento lo guardo en stand by porque la siguiente slide explico un poquito más con más detalle que es. También hemos añadido una opción para poder instalar admin, porque a veces te interesa poder acceder a base de datos por si queréis, que automáticamente, aparte de tener un Moodle que poder acceder a su base de datos, podéis automáticamente instalar un admin que es un cliente de base de datos que es muy chulo y también un software libre. Muy guay. Y por defecto hemos optimizado. Por defecto no se clona todo el repositorio de Moodle para agilizar para que vaya todo más rápido. Pero si en algún momento nos interesa que todo se clone, podemos usar este clone pool. La URL que veis aquí abajo. Bueno, que veis que intuís ahí abajo sería una URL que podríais usar para abrir un git así yo copio todo eso en un navegador. Se me va a abrir un Moodle. Vale, es una URL de ejemplo donde podéis ver como hay que poner los diferentes parámetros. Vale, como la URL empieza siempre con punto IO, los diferentes parámetros se van separando por comas y al final de todo va la URL de la versión Docker. En nuestro caso model Docker, que es la que tiene el proyecto que vamos a abrir. Bueno, pues. Bueno, todo esto es un proyecto que hizo Sara, Vale, hay que ir donde la veáis. Y para los que no lo sepáis, en Moodle, después de cada release nos dejan una web que le llamamos, que es una semana para hacer un poco descansar. Y Sara montó todo esto en su propia web. Vale, es una maravilla. Ahora os va a enseñar cómo funciona, pero a mí me sirve un montón. Lo que pasa que tenía un problema qué es lo que nos que todavía entonces lo del data face y que no se ha llegado a explicar no estaba. ¿Entonces qué pasa? Cada vez que tenía que probar un parche nuevo o algo, tenía que arrancar un equipo. Create los cursos, create, los usuarios meternos en los cursos y cada vez todo el rato igual perdía un montón de tiempo. Entonces fui a llorarle un poquito que bueno, a veces voy a llorar un poquito y ella como siempre me da soluciones. Pues eso. Tenemos la suerte de que un compañero Ferrán, uno de los de la foto de antes en su e hizo una herramienta que complementaba la que yo había hecho, esa de GitHub, que era una herramienta que está integrada en Moodle desde la cuatro cuatro y que permite a partir de ficheros feature. Los que estáis a los que los que conocéis son esos ficheros que a través de los generados de FIJAD se pueden crear como datos de prueba que son los que se cargan en el sitio Moodle. Esta cosa está integrada desde la cuatro cuatro, La podréis tener por lo tanto para generar datos ya sean de prueba o de o de prueba. O sea que igual os lo podéis plantear y en vez de usar el load courses pues hacer servir estos generator. Ahí lo dejo. Pues lo podéis utilizar. Está tanto disponible desde la interfaz web como se obtiene también soporte de línea de comandos. Entonces Ferran hizo esta herramienta y esta última que pude hacer hace dos o tres semanitas ya fue añadirle este parámetro data file que antes me he saltado, este de aquí. El tercero que precisamente es la URL del fichero feature, donde vamos a tener los datos con los que queremos inicializar ese Moodle por defecto para que nadie tenga que estar preparando nada específico. Nosotros ya hemos creado un sitio Moodle con dos cursos, cinco usuarios, dos profes y un montón de actividades. Vale para que así cuando creáis un Moodle por defecto no esté vacío, sino que ya tenga estos datos de prueba que no os gustan. Esos datos de prueba. No pasa nada, os generáis vosotros vuestro feature y utilizando el data file le cambias la URL y ponéis la del sitio donde la hayáis subido. Vale, súper fácil, ya sabéis que para usarlo es muy muy sencillito. Como bonus vale todo esto no necesitamos. O sea, hasta ahora cualquiera puede usarlo y podéis utilizarlo para hacer pruebas de cualquier sitio. Moodle es sin depender de nadie, sin pedirle favores a nadie. O sea, eso podéis, ya veréis, haciendo un clic y teniendo un usuario en. Ya está, no necesitáis más. Si además utilizáis de vez en cuando el tracker de Moodle, lo que hicimos fue crear también una extensión de Tapper Monkey, porque la idea de este proyecto nació sobre todo pensando en la gente de experiencia, el equipo de experiencia de usuario que les pasaba, que nosotros diseñamos con ellos las soluciones y a la hora de ellos validar que realmente lo habíamos implementado bien o no, no tenían manera, o nos confiaban o tenemos que quedar con ellos o porque ellos no tienen instalado un Moodle local. Entonces lo que hicimos fue integrar esta versión de Git con el tracker de Moodle y por lo tanto ellos de manera contextual dentro de cualquier del del tracker. Cuando acceden y tienen instalada esta extensión tienen instalada la extensión de Tapper Monkey y tienen un script que creamos nosotros. Aquí están las URLs, todas en el documento. El ratón de vez en cuando deja de funcionar. Pues aparece, claro, estás tú cerca, pues aparece cerca de cada rama un botoncito que es Open English. ¿No sé si lo veis aquí abajo, chiquitito, vale? ¿Y ellos? Cualquier persona que quiera probar el parche que está en esta issue solo tiene que hacer clic en ese botón. Se invoca con todos los parámetros los que os he comentado antes del repositorio, de la rama, etcétera ya se invoca con esos parámetros. Además, ahora también le hemos añadido el data file. Por lo tanto, cuando acceden al sitio Moodle no está vacío, no tienen que estar creando todos los cursos, etcétera y ya automáticamente se encuentran en cinco minutos con su sitio donde tienen el parche que tienen que probar y pueden validar. ¿Pueden jugar, pueden decirnos si está bien hecho, si no, si tienen que darnos feedback, nos lo pueden dar sin depender de nadie, vale? Por lo tanto es como un extra, no es necesario, pero bueno, ahí está, lo compartimos para que no digáis qué cosas se pueden hacer con esta herramienta que nosotros se nos ocurra. Por ejemplo, podéis probar fácilmente cualquier ISO del tracker, tanto para los desarrolladores como para la gente de los desarrolladores, como por ejemplo la gente del equipo de UX. Podemos hacer test de los que esta mañana recordaréis que os explicaba que un mes antes de cada versión sacamos de ahí la posibilidad de hacer pruebas. Estos sitios son perfectos para hacer pruebas de Cuba porque precisamente estáis podéis probar las últimas versiones y es un sitio perfecto, sin tener que depender tampoco de nada. Podéis instalar y probar plugins de terceros todos los plugins que os habéis anotado durante las sesiones de hoy, tanto la nuestra como la de Kepa, como que seguro que lleváis una lista súper grande. Podéis ejecutar en un git y podéis irlos probando. O sea que no necesitáis ni pedirle a nadie, a ningún admin ni a nadie que os instale nada en ningún sitio, porque podéis jugar con ellos en este equipo podéis configurar Entorno de desarrollo remoto. Lo que le pasó a Amaia, alias Tristeza, Pobrecita, no tenía. Tenía un Windows sin programar, con un Windows es muerte, pero gracias a GitHub pudo sobrevivir unas cuantas semanas. Podéis ejecutar tests si tenéis que generarlos. Muchas veces tener el entorno configurado en local no es fácil, pues con esto ya veréis que es saber la línea de comandos que tienes que ejecutar. Y ya está, ya funciona tanto de verdad como de PHP Unit y seguramente muchas cosas más que nos dejamos que no se nos ocurren, pero las que estamos seguras que nos daréis alguna idea, cosas de ideas de futuro que tenemos, que también estamos abiertas a que nos hagáis otras sugerencias. Nos gustaría que cuando creamos diferentes espacios de trabajo, eso enseguida lo veréis. Se llaman todos igual. Bueno, tiene un nombre muy largo, algo así. Es muy muy difícil de identificar. Si estás probando, por ejemplo diferentes ramas de de issues del tracker, no sabes cuál estás probando en cuál. Entonces poderlo renombrar sería una cosa chula, pero ahora mismo la API de equipos no nos lo permite hacer. Aún tenemos la esperanza de que algún día sí que nos lo permita ir añadiendo soporte para más parámetros, porque, por ejemplo, el Docker luego lo veremos. Permite ejecutar diferentes versiones de PHP, bases de datos, etcétera Eso ahora mismo Git no es PHP 8.1 y sí creo que es uno y postgres ya vale, pero está pensado para probar, no dedicado a la tecnología. Si queréis luego cacharrear con otras versiones de PHP o de bases de datos, la siguiente parte vale. Y aquí lo mismo. Si tenéis más ideas y os gusta y queréis, empezáis a usarlo. Ya nos contarás. ¿Y si echáis de menos más cosas que nosotros no hemos sabido identificar, estáis a punto, tenéis a punto los ordenadores, Tenéis ganas de jugar? Pues vamos a hacer esto. Estos son los deberes que tenemos. Vale, vamos a abrir esta página que pone aquí. Vamos a hacerle clic en el botón Put. Si ya estamos dados de alta, nos pedirá que nos larguemos. Nos lo vamos. Si no, pues nos tocará primero registrarnos en GitLab. GitHub o Bitbucket y esperaremos unos minutos y ya lo tendremos. Vale, empezaremos por esa parte. Luego, opcionalmente podemos instalar la extensión de Thumper Monkey y jugar con el tema de las hijos. Vale, eh, Lo voy a hacer paso a paso. ¿Vale? Importante es que os quedéis con esta URL. Vale, voy. Podía haber puesto un QR. Ah, sí, que. Ya no puedo. Igual a ver. ¿Y si hago aquí ahora en un momentito QR code generator? Esto en el momento que quieres un QR y otro género. Es muy resolutivo. Mira lo que. Y esto que nos da. Eso ya no. Está. Ahí está mal. Está desenfocado. Pero eso es cosa nuestra. Porque tú lo ves bien. ¿Eh? Ya no sé si puede hacer algo. Pues entonces no sé si va a pillar el QR. Sí, vale. Bueno, de momento lo dejo así de grande. Luego ya, luego ya lo más chiquitito. Lo ha pillado bien. ¿Estáis todos ahí? No, este. Si tenéis preguntas decís, pero que no sean muy difíciles. Lo de que las preguntas para los de Windows y eso no lo hemos dicho. Ah, bueno, yo creo que lo he dejado claro. Vale, vale. Si no, yo creo que poniendo moodle Docker en el Google ya sale la primera Moodle. Docker voy a tener suerte. Yo no tengo. Ahora me has hecho la duda muy del Docker, muy del docker no existía. Voy a tener suerte. Ah, igual si voy a Google. No, primero no, ya no así sí. Mira, vamos a probarlo. Moodle guión Docker a la que. Es una prueba que. No, no, no es este. No tenéis. No le dais al suerte que no tenéis suerte Aquí Ha vuelto a meter mano. ¿Tú no? Ya estamos aquí. Todos estamos en la página. ¿Está? Sí. Vale. Bien. Difícil. Siguiente paso. Complicado que te cagas. Opening. Un botonazo. ¿Que hay aquí? Esto. Voy a hacer otra vez la letra más grande. Porque yo creo que lo vais a agradecer vosotros. Ya si hay alguien ahí, estaría bien que se viera más. Si el proyecto no sé si no está funcionando. Sí, sí, sí. Así que no sé si hay alguien al otro lado. Así es como veo yo. Sin gafas. Me hacen así desde arriba. Están haciendo así. Yo veo. Sin gafas, así están haciendo así. Ah, no. Vale, pues no se puede hacer nada. Os pasaremos la presentación. Opening, le dais al botón. Vale. Yo ya estaba registrada y por lo tanto no me ha pedido usuario. Los que no estabais registrados os tenéis que registrar o en GitLab o en GitHub o en Bitbucket. ¿Vale, es el paso más complicado, vale? Lo más complicado una vez estáis aquí es continúe. Ya está Más Vaya, teniendo dudas. Y yo ahora ya relax, ya esperar que se vaya levantando el equipo, que se baje las todos los toques o sea, quienes no sabéis nada de Docker ni de cómo funciona esto internamente, no pasa nada. O sea, no llamemos a los que han visto de que vale. Los que no. A yo. Yo siempre he usado. Ah, vale, yo siempre he usado GitHub, claro, porque eso entiendo. O sea que entiendo que si tienen tres sistemas les debe funcionar. ¿Alguien se ha conectado con Bitbucket? No, pero tampoco lo mismo te funciona. Pues igual tienen una incidencia. Yo no lo he probado. Vale, me lo probaré, ya lo reportaré. ¿Habéis podido entrar? ¿Habéis podido darle al botón? Los que no estáis haciendo nada podríais hacerlo con el móvil. Ahí lo dejo. Y de los tres temas, acordaos. Continúe. O sea, te sale como un resumen que te dice las opciones, lo que te va, la máquina virtual que tiene. Continúe. Sí, sí. Está ahora está clonando el repositorio, está bajándose el código fuente está haciendo las diferentes máquinas virtuales, o sea, los diferentes Dockers contenedores los está inicializando. Pero os digo, no hace falta ni que sepáis lo que hace. ¿Confiáis en GitHub y cruzáis los dedos? No se os ha encendido. No habéis podido. Estáis viendo algo similar a lo que tengo yo más adelante o más atrás. ¿Pero qué pasa? ¿No que ha puesto cara de que él no? O se te ha quedado ahí la wifi cuando te está llegando a. ¿Qué te ha pasado? Que un controlador. Muy del Docker. Pero no, con eso no lo consigues, que si. Ya se ha descargado todas las. Esto también creo que puede hacerlo más grande. Para que veáis, se ha descargado todos los contenedores y ahora está inicializando la base de datos. Vale. O sea, está en ello. Tardará eso que habrá unos cinco minutitos. Así que el primero que acabe que lo diga. A ver, una competición. Podemos reutilizar los palotes de antes porque son muy globales. Ah, por eso te está bueno. Ese ya es para usuarios avanzados. O sea, lo guay aquí porque te abre el disco. O sea, yo estoy. Esto es un Xcode, pero en el navegador. Pero sí, lo otro sí que te abre como te lo está descargando en tu entorno local y además según cómo. Igual te has instalado alguna extensión. Eso sí que es guay, pero más rápido, digamos. También tenemos algún problema mayor. Que todo esto está muy bien y yo os lo agradezco mucho. Pero claro, cada vez que tengo que probar un parche nuevo tengo que probarlo en diferentes PHP. Tengo que hacerlo con diferentes. Ah. No, no, no. No, no, no, Eso es que cada vez que tengo que que hacer un parche, tengo que probarlo en diferentes versiones. Primero en una, al otro en otra y a ver que después. Está bien. Está súper bien. Yo de verdad que está súper bien, pero claro, tarda uno, luego lo apago lo otro y no podría tener algo un poquito más que pueda gestionar yo para tener diferentes bases de datos. Eso era. Lo del Dockerfile, es decir. ¿No? Sí, pero. Eso. Ahora lo que primero vamos a acabar de ver este vale, vale, vale. Vale, vale, que vamos también al Vale. Y esto típico efecto de ha fallado. No sé que le ha pasado. No sé. Os ha fallado. Impresión agregados. Esto es el efecto demo. Ahora bien, pues a la segunda. Pues. Apagar, Encender, Recargar. F5. Ya está. Vale. Eh. ¿Habéis podido cargar alguno más? ¿El sitio, la contraseña? O sea, tiene el usuario admin. La contraseña siempre es test. Vale, entonces usuario admin. Después tenéis usuarios del S1 al s cinco que son estudiantes T1 y T2 que son contraseñas siempre test Vale, si ahora que hago login pongo admin contraseña test. Debería entrar si la si la pongo bien. Vale, me dice hola, me enseña todos esos sí que no se ha podido quitar y antes de que te quejes. Ya lo lo sé, pero te lo perdono. ¿Vale? Como he accedido desde el enlace que hay, desde la página de modelado que ahora mismo no se me ha creado ningún curso. O sea, todas las cosas que os he dicho que también se podían crear desde aquí. ¿Sí, como no le he pasado el el data file no se crea con datos, eh? ¿Qué tengo que hacer para verlo con Data Fael? Vamos a mirar la otra cosa. El Monkey. ¿Vale? Ay, claro. Perdón, perdón. Eh, vamos a mirar 1/2. Vale. El el QR este lo voy a hacer chiquitito porque en teoría ya hemos entrado todos ahí, pero me ha gustado. Ha quedado precioso también. Ah, no, no entra nadie. Vale, no funcionaba. ¿Ves? Ya está. Vale. Si os interesa, podéis instalar la extensión de Monkey. ¿Vale? Es una extensión que está disponible tanto para Chrome como para Firefox y después instalar el script que está en esta dirección en Japón. Cat Git. Punto. Es que habla un catalán. Ya, pero yo no, ellos me han entendido que lo tienen, que vale. Eso sí, sí, con i griega no con J. Vale, yo voy a abrir esta eso, pero podéis abrir cualquiera. O sea, he puesto esta, como podría haber puesto cualquiera. Esta, por ejemplo, además es una de las que también estaba haciendo en mi proyecto. O sea, aparte de añadirle esto del dataset, pues me dedicaba a mejorar un poco la página de reset. Así si queréis ver mis cambios, pues ahí los tenéis. Y si hay algún CLR por la sala que quiera hacer la revisión va. Si no nos hemos complicado. No nos hemos. ¿Roto la cabeza, vale? Cuando tenéis la extensión instalada y accedéis a cualquier página del tracker, no hace falta ni que estéis logueados en el tracker. Aquí tengo la la extensión del The Moon que es este de aquí. Yo tengo diferentes extensiones y una de ellas es esta de git put que está activada. Automáticamente me sale este botoncito de open, el mismo que hemos visto en la página anterior, que ya salía automático porque formaba parte de la página. Ahora nos sale. Si vosotros intentáis acceder a esto sin el botón de. O sea, sin la extensión de Monkey, pues he desactivado la extensión y recargo. Ya veréis que por defecto eso no es ahora mismo. Si no tienes extensión de Vermont, que os sale así. Vale, voy a volver a activar la la extensión de equipos de Transfer Monkey. Recarga la página y me vuelve a salir el botoncito Si la RAM. Si la ISO tuviera diferentes ramas me saldría el enlace del botoncito de Open English debajo de cada rama. Por lo tanto, si yo quiero probar una rama diferente, podría hacerlo. Recomendaciones que siempre usáis si podéis, las últimas porque según qué versión uséis igual es muy antigua y hay una versión de PHP. Que no, que ahora te contaré. Tú no te preocupes. ¿Vale? Le doy a este enlace. Vale, el enlace es si no lo llegáis a ver, porque entre borroso y que está ahí abajo en chiquitito no lo veis, pero este tiene todo. Se va a abrir con mi repositorio, con la rama y además con el data file este que os he comentado que hemos creado para que se se pueda cargar con datos. Vale lo mismo de antes. Me va a crear un nuevo workspace, le doy a Continue. Es lo más complicado que hay que hacer y ahora ya solo esperar. ¿Vale, espero y mientras espero, digamos, se van a ir generando los mismos datos de antes, vale? Volvemos a esperar esos cinco minutitos. Si lo conseguís instalar, pues eso, podéis directamente os saldrá este botoncito. Alguien no ha podido instalar, Estáis en ello. En esta parte ya está. Nota pero tú no, el otro. Te has levantado, te has levantado. ¿O sea, quien ha conseguido levantar un Git, quien tiene un modelo en GitHub? ¿Sí, sí, hombre, pues muy bien, tenéis un Moodle? Es una. Además, la URL del Moodle que tenéis es pública, por lo tanto podéis juguetear vosotros, pero podéis enviarla y hacer que alguien que queráis que mire lo que sea, también lo mire. Importante tener en cuenta que solo funcionará si tenéis el git por levantado, o sea, yo hoy preparo todo esto, levanto mi equipo tal, me voy a casa, le mando el enlace a Jorge, Jorge y mañana no lo papers, tenéis que levantar el equipo para que lo pueda ver. O sea, esto no hay problema que te estoy viendo ya que vas a venir por ahí. ¿Vale? Bien, de momento habéis pillado el concepto, habéis pillado que es fácil, chupao. Se está bajando otra vez todo. ¿Y en qué se debe hacer eso? Git bot. Ahí están corriendo. Si. Sí, sí. Dando ese toque que ahora veremos como tener solo dos. Que también está ejecutándose Docker en Git en lugar de en nuestro hogar. ¿Pues ya que lo hagan ellos, verdad? No, pero Amaia, si tú quieres un tema. Que a veces me lo pagar, que supongo que para que no se. Habéis conseguido instalar también Monkey, quien ha conseguido instalar bien aquí muy bien aplicados. La versión de nube de de la branch. Sí, si ya usa el repositorio que va bueno, los campos en el tracker, el repositorio usa ese y usa el branch que tiene cada open git, entonces usa el branch específico que hay ahí si está relacionado o no, pues lo que haya en ese branch. Lo que vale en esa rama está aquí. ¿Vale, no? En este caso os voy contando cositas. Mientras tanto, del que ya tenéis abierto el otro estáis haciendo. Está en ello. Vale cosas lo que os comentaba esta URL. Si cualquiera de vosotros intentar acceder. Como podéis ver, no es una. Una URL es fácil de recordar. Vale. Yo creo que no la voy a. ¿Yo creo que no la voy, pero créenos, no es una URL fácil de recordar, vale? Pero a la vez. Es fácil de copiar y pegar. Eso hasta yo en Windows. Entonces esta URL está en un browser que tiene integrado el disco. O sea, nos ha abierto realmente un modelo dentro de Xcode. Para los que no sabéis bien porque no sois programadores, ignorar esta parte vale, pero para los que sois desarrolladores tenéis un entorno de desarrollo. Yo puedo hacer lo que me dé la gana porque tengo en la carpeta Moodle el código fuente que de lo que estoy viendo aquí. ¿Por lo tanto, si yo quiero arreglar una cosa, romper lo que sea, lo voy a poder hacer porque tengo el código fuente de lo que estoy viendo aquí, vale? O sea que está súper chulo aquí. Como os comentaba antes, es un Moodle en el que puedo instalar pluggins. Es un modelo. O sea, yo ahora vengo aquí, me voy a pseudo administration, le puedo instalar un paquete de idiomas, puedo ponerme el castellano, puedo ir a pluggins y descargarme un plugin, puedo hacer lo que me dé la gana porque es un sitio Moodle con todo, o sea, con todo. Es que bueno, ahora iremos viendo más cositas, pero es que te permite hacer cualquier cosa que se os ocurra probar temas, probar cosas, formatos de cursos, actividades, lo que queráis y además con una URL pública que si tenéis el contenedor levantado va a poder acceder cualquiera. ¿Vale? Y si se os ocurre algo que no podáis, le escribís a Sara. A ti no. No, a Sara. Ya tenemos aquí. Se está acabando. Se ha acabado de crear el sitio y se ha acabado de crear. Se acaban de poner las diferentes datos. Vale. Sí. Ahora recargo esta página. Como podréis ver, en este caso no es un Moodle y ya es un Moodle que tiene. Bueno, claro, los usuarios que os he dicho antes era mentira. En el de antes solo tenéis un usuario admin contraseña test en este de aquí no solo admin test en el otro porque solo no tenéis datos. No hay nada en este de aquí tengo dos cursos, todos los usuarios que os he dicho antes y además si entro a cualquier a cualquiera de los cursos entro con el usuario admin porque así puedo ver más cositas. Pero cualquiera de los que os he dicho antes de DS1, S5 o T1 t2 con contraseña test me van a funcionar. Me voy a mis cursos, voy diciendo lo que sea todo y aquí tengo dos cursos, uno en formato semanas y otro en formato temas. ¿Muy bien eh? Aquí podéis ver la cuatro cuatro. Todas las cosas chachis que os hemos contado esta mañana las tenéis aquí. Podéis hacer lo que os dé la gana, las ganas con ella. En este curso tengo un montón de actividades, tengo usuarios enrolados que si luego pruebo de hacer logout entrar con cualquiera de estos usuarios voy a poder entrar sin problemas. O sea que me permite hacer pruebas, me permite hacer un montón de cosas. ¿Vale, guay, no? ¿Que os gusta? Es guay. Es que hasta Amaia le gusta. Cuando te funciona el micro es guay. Vale. ¿Quién ha podido instalar? ¿Quien ha podido? Habéis. Podéis. Bien. Vale. Y si. ¿Se que si no tenéis el bueno, si lo picas a mano también en la presentación que? Que os pasaremos en la presentación. Las URL estas de aquí. ¿Que? Que tenían QR, Estas tienen data fácil puesto. Vale. O sea que estos QR si luego jugáis con el móvil podéis también abrirlas que estas tienen data fácil. O si tenéis más tiempo y queréis jugar instalar esto o me escribís y os paso una web de pruebas para que veáis. Pero claro, para mí lo chulo es que ahora la gente del equipo de experiencia de usuario vienen a la Issuu y le dan este botón y ya tienen un modelo con datos que con con este parche, o sea ellos no tenemos ni que decirles que comandos de GUI tienen que ejecutar para para ver este parche. Quienes sabemos de Git, además podemos venir aquí en el terminal y podemos hacer lo que queramos. ¿O sea, yo me voy a la carpeta Moodle, Aquí no vais a ver un churro, no? Bueno, ahí cada vez más grande. A ver si así ahí no, que lo que nos toca. Igual es que no se puede hacer esto. Así. Así es, es un git. Puedo hacer lo que yo quiera con este, con este moodle le puedo tocar, puedo, puedo hacer lo que quiera, o sea, cualquier cosa que se os ocurra la puedo hacer. Este estaba en la rama main. Este es el otro que tenía datos de usuario que no veis nada. ¿Y aquí si entras que has hecho esta vez? Eso no lo hemos visto nada. No nos hemos atrevido. Pues este está en una rama diferente porque este sea se ha descargado una rama a mí que está en mi repositorio y está por ejemplo. Pues para que veáis. O sea, bueno, no vais a verlo porque no sabéis, pero digamos que los cambios. O sea, si ahora me voy en este caso al curso de Yours, la página de reset se ha cambiado, ahora es diferente porque tiene el botoncito este, el reset que está aquí abajo. Bueno, es un poco de lo que iba mi plugin, digamos, mi parche vale uno entre mil cambios. Vale, tenemos la parte de equipo probada. ¿Bien, No? A mí me pasaba lo que te he dicho antes. Hice un parche y en una clase que no funcionaba. Y eso me ha salvado la vida. ¿De verdad? O sea, de verdad. Pero es que necesito algo que me permita probar en Oracle, que es que hay muchas cosas que fallan. A veces. Tengo una mala noticia para. Ti. Oracle. Oracle muere. Bueno, tampoco funcionaba. Da igual, tampoco funciona esto. Por si acaso no te has escuchado la charla esta mañana dos chicas muy majas han hecho una presentación y lo han explicado. Pero es que muere pero no ha muerto. Quiere decir. Los integradores sabéis integradora. ¿La conocéis? Los integradores todavía me piden que funcione en Oracle todavía, que es que necesito algo más ahora. Vale. Necesito más porque no me sirve para todo lo que necesito. Necesito algo que yo pueda dominar y no tenga que estar probando, perdiendo un montón de tiempo todas las va. Lo intento. Venga. Eh, Docker, Docker. Seguro que la mayoría, al menos los más técnicos, sí que habéis oído hablar, por si acaso hay alguien que no voy a dar un poquito de contexto. Esta parte sí que es un poquito más técnica, pero no abandonéis la sala porque los que habéis conseguido levantar un vais a poder ejecutar todo lo que voy a decir después en vuestro equipo. O sea, aunque no tengáis muy Docker, vais a poder ejecutar, porque recordad que nuestro equipo está basado en modelado, que por lo tanto las cosas para para ejecutar, digamos, van a estar ahí y vais a poderlas hacer igual. Docker Docker es una plataforma abierta de desarrollo que permite ejecutar aplicaciones de todo tipo, bases de datos, servidores web. Es que hay un montón de cosas. O sea, hay tantas cosas que bueno, la lista es interminable y seguro que seguro que hay gente aquí en la sala que que controla más que yo de Docker. Se empaquetan esas aplicaciones de forma muy automática, se descargan teniendo solo instalado esta parte de aquí. Instalar diferentes aplicaciones super diversas es muy fácil porque proporciona esa abstracción de la virtualización se fundó en 2013 como herramienta de desarrollo de Linux por Salomón Aix. Está guay siempre reconocer a la gente que ha sido pionera y ha creado herramientas tan chulas como Docker. ¿Qué beneficios tiene? Primero, Open source somos todos aquí amantes del software libre, por lo tanto está guay. Eso es muy fácil, muy, muy fácil, hacer despliegues. Ahora mismo yo creo que muchísimos tenéis cosas Docker. Yo creo que la gente más técnica es muy difícil que no hayáis tenido que tocar en algún momento algo en Docker es es muy segura, es ligera. O sea, realmente es muchísimo más fácil ejecutar determinadas aplicaciones porque no necesita tener servidores, sistemas operativos especiales. Además, puedes ejecutar más de un servidor en la misma máquina. Es muy portable. Es una de las grandes ventajas de mover. Puedo migrar fácilmente lo que tengo en un Docker a otra máquina de manera muy sencilla, pero el tema de DevOps es. Yo creo que es la solución. Lo que ha generado una ventaja, un antes y un después. Permite tener control de versiones, por lo tanto, puede tener diferentes versiones de cada contenedor de Docker que es maravilloso. Vamos a empezar jugueteando un poquito. Que que esto está muy bien, pero que se me acumulan los Docker, que si enciendo uno en una base de datos y otro en otra y otro en otra y ya me pierdo, que yo es que me pierdo. Tengo solución. ¿Para ti? ¿Lo sabías? Pues para validar que los que habéis podido instalar Docker correctamente os funciona bien, vamos a instalar por tener por tener. Es una herramienta. Es un Docker que nos facilita la gestión de Docker. Es como el pez que se muerde la cola. Pues eso para mí, O sea, yo desde que uso Docker, es la herramienta que siempre me ha ido mejor porque es una herramienta visual para ver las diferentes contenedores que tengo, los que se están ejecutando, los que están parados, borrar, los que se me acumulan vale, y dejarlo todo limpito y vale. Entonces primera actividad esta parte, la de los que tenéis que esperar un poquito. Esto no lo podéis hacer los que sí que habéis conseguido instalar Docker. Digamos que la idea es que podéis seguir las indicaciones de la web oficial de de. Os lo diré mañana. El por tener o bien ejecutar el script aquí de nuevo el QR hubiera estado guay, hubiera estado muy bien, ya voy a voy a generarlo, implementarlo. Si en la presentación hay que darle la idea a los de que ya nos lo metan directamente. Ahí está. ¿Pero habéis visto que en un momento lo arreglamos? Nosotros, que era esta parte del ayer, pero nos liaron Jorge, Isaki y Helena nos. Liaron y. Claro, pues es lo que hay. Que hacer desde el QR. Y claro, eso también es verdad. No se nos ha ocurrido. El que a nosotros. Tener haya fallado. Ya no, pero está este. Hemos preparado otro espectáculo porque si no hay que no hay que engañarse, esta no Mira, me ha gustado la idea, me ha gustado la idea, Voy a tu deseo. Está concebido aquí. Para que veáis todo lo nuestro, vuestro. Ahí está. Este es el de la presentación, que igual es más fácil. Voy a quitar este que había generado. Y voy a poner ese así tener la presentación para que dejéis de llorar, que me estáis recordando a alguien. No sé si le hecho una carcasa. Llorar no es malo. No sé si habéis hecho captura, pero por si acaso la vuelvo a hacer. Llorar no es malo, pero reír de vez en cuando tampoco. No de vez en cuando. Vale, así ahora tenéis toda la presentación y por lo tanto ya no vale llorar si os lo pilla, aunque esté así un poquito. Si vale. Y así ya tenéis todos los enlaces y podéis. Esta noche nada de fiesta esta noche. Todo el todos los ahí en el tren como locos. Tú en el avión. Yo me pongo la fiesta. Tú te puedes ir de fiesta ahí también. Te voy a ayudar. Vale, pues eso. La idea es que si podéis instalar, tenéis dos opciones que os damos. Una es Voy a. Voy a chafar nuestro dibujito aquí porque así puedo. Dejar las órdenes. Tenéis dos opciones. Una es seguir las instrucciones oficiales de la web y otra yo me creé un script que está aquí. Vale, es suerte que la que os he compartido la presentación, porque copiar esta URL no era fácil. Así podéis copiarla directamente de la presentación. Y este script lo que hace es si la máquina virtual está creada, o sea, si el Docker está creado o no está creado. Lo creáis y ya está creado, lo levanta. Vale, es así de fácil. Vale, entonces voy a abrirme el aquí, me voy a ir al aquí. Tengo el script aquí que se llama Os lo voy a enseñar para que lo veáis. Tengo un run run container. Vale, este es el script que os he enseñado que está aquí. Este mismo. Vale, yo ejecute este script. Es un container y automáticamente me está como ya tenía el contenedor creado creado solo me lo está levantando cuando vengo aquí al navegador para hacer eso en mi máquina local. En tu PC o. En mi máquina. Ahora esta versión de modelo. Si. No, exacto. Ahora los de equipo estáis ahí en stand by escuchando aburridos. Podéis mirar la malla que de vez en cuando va a. Contar un chiste. No, este no, pero nos quedan 15 minutos. Esto vamos. Bien. Vale, vale. Este es por tener. Por defecto se ejecuta en el puerto con el script que os he pasado en el 9001. Si lo instalaba, No, también no era por defecto. Por defecto. Esa no se. Vale. Si tenéis la lista, o sea, podéis aquí ver los contenedores aquí. Ahora mismo yo solo tengo ejecutándose por tener. Tengo aquí un montón más de contenedores. Esto como la autentificación multifactor de SMS. Acordaros del password que metéis en el porta dinero. Vale que es muy difícil conseguirlo después, que tampoco digo que le haya pasado a nadie antes, pero si os pasa, si algún día os pasa os acordaréis esto de mí. ¿Ya le llamáis? No, no, yo lo intente tampoco funcionó. O sea, era tan difícil que ni llamarle a Sara funcionó. No me llamó. Si te llamé, me llamó. Vale. Alguien ha conseguido levantar por tener aquí. ¿Habéis tirado la toalla? Bueno, pues confía. Confía. Confiamos. 9001 Amiga. Seguimos avanzando porque como tengo solo 15 minutos y queremos enseñar las cositas del equipo. Sí, vale, Esto os lo vais a tener. Vais a poder jugar, No os vais a poder contactar si después tenéis dudas. O sea que no hay problema. Vale, ya tenemos la parte de Docker cubierta. Sabemos que nos va, que está funcionando. Si conseguís instalaros por tener un paso más allá, es una vez os funciona Docker, pues instalamos model Docker model Docker super fácil. Amaya fue capaz de hacerlo a la primera. ¿A la segunda? No, no creo que es justo. Docker será la primera las cinco veces. Creo que no la tienen todos, los instala la primera. Lo que pasa es que un par de veces perdí la contraseña. Pero. ¿Pero Docker los instalé todos a la primera, cierto? Pues eso, hasta Maya. Ventajas Lo que decía antes, que podéis usar diferentes bases de datos. O sea que si queréis probar cosas concretas en una versión puntual, pues lo podéis usar tanto de PHP como de base de datos. Si queréis ejecutar pruebas de PHPUnit también tenéis un servidor SMTP. Lo vamos a ver. Eso también está en GitHub. Flipa. Hay un montón de extensiones PHP habilitadas, por lo tanto, para hacer pruebas más avanzadas, como por ejemplo con búsqueda console, servicios LDAP, cosas más más avanzadas que normalmente requieren de mucha configuración local como del Docker ya viene automático más cero configuraciones porque por defecto ya viene la mayoría de cosas. O sea, si sabes que parámetros tocar, chupao. Está todo documentado en la página, está de moda el Docker. Si sabéis leer la página estado sabéis de Docker, o sea. La comprensión lectora está muy sobrevalorada. Le pasa muchos fallos se leer. Bueno, pues. Vamos a jugar con Docker. No sé si hay alguien que haya conseguido instalarse Docker. Yo solo Docker por tenerlo. Por si queréis vamos a. O sea, vamos a jugar con la otra parte de esto. Lo tenéis aquí, vais a tener las las es ejecutar todas estas, estos comandos, o sea clonar os el repositorio de modelo Docker, acceder al repositorio, configurar, o sea descargaros el una instancia de Mudela en vuestro ordenador, generar una serie de variables de entorno Vale y ejecutar, o sea copiar el fichero de configuración para especificar que versiones queréis de PHP. O sea, tenéis un montón de parámetros más que podéis definir. Esto os lo dejo aquí. Jugáis con ello cuando queráis. Si tenéis dudas, escribís. ¿Amaya Amaya arroba model punto com la mía es arroba hotmail punto com y entonces ya levantáis los contenedores, vale? O sea, con esto ya tendrías un en local, un docker en local. ¿Como trucos diré que yo esto lo he aprendido de usar eh? Generar os lanza, o sea lanzamiento. Bueno, no sé archivo ssh, vamos. Vale. Para lanzar diferentes configuraciones de Docker. Entonces tienes guardados ahí con diferentes bases de datos, combinaciones de bases de datos, PHP, bla, bla, bla. Todas estas cosas que al final. Bueno, igual este es solo nuestro caso, porque nosotros al tener unas instancias como más específicas, nosotros como tenemos que probar que funciona en todos lados y es un poco follón y está muy bien tener eso, ya tienes el SSH, lo lanzas y te olvidas. Dentro de un mes no os acordaréis si no tenéis ssh y lo perdéis y tenéis un ordenador nuevo o en este 4.º, lo que sea, pero pero está bien tenerlo, si es que das consejos que están bien. Es el lado de la experiencia. Vale, entonces os dejamos aquí comandos útiles de Docker. Si os que dan ganas de juguetear, ahí lo tenéis. Y ya sabéis, si tenéis dudas, nos contacta tanto para iniciar los contenedores como para pararlos, como para matarlos como para acceder internamente. Lo tenéis todo aquí. Vale, vamos a volver, digamos. O sea, bueno, y una vez lo tenéis todo levantado ya podéis acceder a la URL por defecto que hayáis configurado, ya que diríais vale, vamos a volver, digamos a Vamos a ver qué cositas tenemos dentro de Docker, porque así podemos aprovechar. ¿También podéis juguetear también con con git, vale? O sea, aquí podéis ver un icono donde cualquiera de estas cosas que aunque estamos contando demo del Docker, aplican también aquí, pues también vais a poderlo hacer. ¿Alguien le suena el móvil? Vale. Primera cosa envío de correos. O sea, si tenéis que hacer pruebas que requieran envío de correos en Git también lo tenéis funcionando. O sea, tenéis un modelo levantado configurado sin tener que hacer nada de nada, donde se envían mails a través de mail. ¿Vale, que está disponible en la URL del servidor, vale? En vuestro caso ahora. Ahora os lo enseño. Cómo funciona en git put URL entera del servidor, esa que tiene muchas números y letras juntas barra, barra baja, barra mail ya. Vale, voy a Voy a irme a mi GitHub este mismo, por ejemplo. Vale, aquí podéis ver la URL. ¿Vale? Incluso voy a Voy a copiar esta url de la voy a enganchar fuera para que veáis que no tengo ni que verlo dentro de él con el no sé que he copiado. No me ha querido copiar copy, no me está copiando. Esto no. No me está copiando, me está troleando. Amaya. Bueno, pero espera, si le hago aquí y ya está. Si ya está. Gracias. ¡Vale, pues a esta URL le añado barra baja una barra y mail y tachán! Servidor de correo. Vale, Cualquier mensaje que yo envíe ahora a través de mi Moodle se va a recibir aquí. Por ejemplo. Una de las novedades que teníamos en el cuatro cuatro es que cuando rodábamos un usuario era Sí. Cuando hablamos un usuario manualmente, ese usuario recibe una notificación. Pues vamos a probarlo. Si las notificaciones están activadas. Pero vienen activadas por defecto. Deberían. Pero digo pues aquí. Voy a quitar el S2 y voy a meterlo otra vez S2 s2 Lo voy a enrolar. En rol. Y aquí tenemos Welcome to actions que acabo de recibir del usuario S2 porque lo acabo de enrolar. Vale, cualquier notificación, cualquier cosa que use correo yo que sé. Pues queréis probar el cron, los mensajes de foros, etcétera también, o sea, cualquier mensaje de correo, ese se lee siempre a través de este gestor de correo. ¿Vale, fácil no? Ataque de tos. Sobrevivo. Vale. Pruebas con PHP, JUnit y con add también. Super fácil. Vale, tanto con PHPUnit como con Mirad. Lo que necesitamos hacer es preparar el entorno, preparar la base de datos de PHP y Unity de fijad y después ejecutar cualquier test. Vale. Si tenéis la presentación podéis copiar esta URL raíz. Bueno, es un pad, es un comando. Lo voy a copiar y lo voy a enganchar en la línea de comandos de mi kit. ¿Vale? O sea, voy a venir aquí. Voy a abrir aquí dándole a porque me abre los puertos. Entonces me voy a terminar. Vale. Voy a ver si puedo hacer esto más pequeño. ¿Cuál es? Ah, vale, claro. Sí, también es verdad. Es que yo lo tengo todo aquel lado de allí y tengo un shortcut aquí. Me cuesta más este. Vale, Estando aquí me voy a la carpeta de modelado que ya antes vosotros ya estáis ahí por defecto. ¿Si no habéis hecho ningún cd model ni nada parecido y voy aquí a enganchar el comando que acabo de copiar del otro lado, vale? Me dice que si quiero le doy permiso, claro que sí, y automáticamente a través de los comandos de model Docker se me está inicializando la base de datos, en este caso de PHPUnit, pues para prepararla tarda en levantarse un minutito, así. Pues, solo nos quedan cuatro. Pues enseñaremos php, JUnit y nos creerán con mirad cómo lo ves. Yo espero que nos crea. ¿Vale? Yo te creo. Vale, eh, Me quedo. Copiado este comando para ejecutar los test y de aquí a nada vuelvo. Esto ya os digo, funciona tanto Si tuvierais modelo Docker en local como si tenéis el servidor, aunque por lo tanto no necesitáis nada. Los comandos de mirad son muy parecidos como podéis leer claramente en vuestra. En esas transparencias, pero tenéis la presentación. No os podéis quejar que lo tenéis todo vale. Y además, si lo tenéis en local, esto no funciona. También podéis utilizando VNC conectaros a modelo Docker en local y ver cómo se ejecutan los test. Si os abre un navegador Firefox o Chrome, el que tengáis definido para ejecutar los test de viajad y vais viendo como la máquina se mueve solita y es bastante super chachi. ¿Vale? Vamos a ver si está en ello aún instalándose. ¿Sigo avanzando, vale? Y ahora vuelvo a PHPUnit. ¿Qué te parece que todo esto me está genial? Pero yo sé que nunca voy a poder tener un un servidor en mi local porque no voy a hacerlo. No voy a poder. ¿Amaya Impossible is nothing? A ver, esto es verdad que requiere de más tiempo, o sea, tú necesitas porque vas a tener que instalar un servidor en el local, pero lo has conseguido, no a la primera ni a la segunda. Pero en Windows no tengo el Windows. Windows da igual, hay alguien en la sala que te puede ayudar en esto. Esto que vamos te va a explicar ahora lo he conseguido de instalar tres veces. En realidad no sé cómo se hace porque ahí en algún sitio un problema de permisos que no tengo claro cuál es, pero pero lo has conseguido. Ya está bueno. En vez de Keys, una herramienta que se llama Model Development Kit, esas son las siglas de Model Development Kit es un entorno de desarrollo que usamos sobre todo la gente de nosotros en él. Para nosotros es como nuestro día a día sin él es muy duro. Primero porque nos crea instancias. Necesita que antes hayas instalado en local en tu ordenador un servidor PHP, la base de datos que quieras en Postgres, maya, SQL, lo que tú quieras, o sea, y todos los plugins o todas las extensiones del servidor que se necesitan. Pero una vez tienes el entorno de desarrollo creado con comandos de MK de este plugin que está escrito en Python, digamos que de forma muy fácil puedes levantar instancias de model nuevas y se generan usuarios automáticamente. Nosotras que además vamos creando parches para arreglar bugs o hacer mejoras, automáticamente hacemos el push a nuestro repositorio y además actualizamos las sesiones del tracker. O sea, cosas muy aburridas como serían ir copiando la URL de nuestra, de nuestro repositorio y la rama, etcétera nos lo hace súper fácil. Vale entonces muy útil, sobre todo si hacéis cosas con tracker, pero incluso si no hacéis cosas con Drake y queréis poder levantar instancias rápidas, sería otra opción que también tenéis. Vale, si solo queréis jugar con instancias, igual la de Docker es mucho más fácil. Vale, porque en una hora era muy MIR que nos diera tiempo a todo, pero que sepáis. Bueno, y ahora que tengo me deja, tengo mi servidor, pero claro, mi servidor está en lo cajón. Eso quiere decir que cuando tengo que probar algo que se debe de las insignias necesita una URL pública. Y no, no puedo. Ahora sí. Que puedes. Tenemos Estaría aquí la parte también de jugar. Os dejo los comandos. Lo mismo de antes, está aquí, si tenéis dudas. Amaya Sí, para lo que me decías tienes una solución en Grog. En Grog es una herramienta que permite exponer URL es el local, o sea, vuestro local host permite publicarlo, o sea, que tenga una URL pública. Realmente mi recomendación es que en estos casos si puedes, siempre que puedas uses y tal. ¿Si lo que quieres probar está solo en tu ordenador local, en que es la solución? Vale, os dais de alta si te das de alta creo que tienes límites más altos, o sea que tienes como más más peticiones por minuto, hora o no sé cómo funciona. Bien, bien, pero realmente para hacer un uso no muy extensivo está bien y permite probar cosas como las que has dicho Insignias LTI, PayPal o AWS. Vale, si además usáis NDK, hay una extensión que une ambos, o sea, que ejecutas esos dos comandos NDK run en grog y en R automáticamente cualquier instancia creada con NDK tiene una URL pública y podéis automáticamente acceder a esa instancia desde cualquier ordenador. Vale, os dejo la información. ¿Tenéis ahí tiempo para jugar? Antes de acabar, vamos a ver si se ha ejecutado todo el PHP y aquí lo tenemos. Y si ahora le copio la URL del comando que ejecuta los test que están en manual test, veréis que en un momentito me va a decir si pasan o no pasan. ¿Vale? O sea que realmente es muy guay porque sin haber tenido que instalarla en el local, puede ejecutar todos los test, ya sean de PHPUnit o de Vale. ¿Facilito, eh? Y muchas gracias Sara. Espero que todas estas cosas que a mí me han hecho sufrir un poquito menos durante estos ocho meses, no sé os hagan sufrir un poquito menos también a vosotros, a los técnicos más técnicos, menos técnicos. Ya os he explicado el tema de sirve para cualquiera de nosotros, Para cualquiera quiere decir que no hace falta tener txt. Conocimientos técnicos nosotros lo estamos usando un montón para test, la verdad es que muy bien y nada, muchas gracias y cualquier cosa.