jueves, 4 de enero de 2018

Él se enamoró de sus flores y en otoño no supo qué hacer

Pues no os lo vais a creer, pero he ido procrastinando la entrada del año pasado hasta que me he colado al siguiente. Antes de empezar, por cierto, he de advertiros de que en esta ocasión encontraréis mi labia mucho más desenfadada y jacarandosa; si sois ascetas de la prepotencia podéis releer entradas más antiguas.

Una vez terminado el último verano del que dejé constancia en este diario públicamente personal pude empezar a ordenar la biblioteca de casa, algo que llevaba varios años queriendo hacer.

Una de las dos zonas con libros

De hecho, aprovechando mi protoformación informática dediqué un par de semanas antes de empezar cuarto a desarrollar un gestor de libros de uso doméstico con VisualStudio, ya que no encontraba ninguno que me gustara.

Athena terminó siendo un programa de código abierto que usa una base de datos Access para guardar la información básica de los libros que tengas en casa. Además, tiene un buscador para encontrarlos rápido y un par de frivolités, como el autocompletado de nombres según escribes o el poder exportar todos los libros a un txt.

Paralelamente, en el C:TED dejamos casi todos nuestros quehaceres de lado para dedicarnos en cuerpo y alma a actualizar la página web de la UCLM. Desde finales de primavera estuvimos trabajando en migrar toda la información de la página antigua a un nuevo gestor de contenidos, rehaciendo de paso la portada.

Nos dividimos en dos equipos de trabajo; por un lado los que nos ocupamos de diseñar e implementar la portadas y por el otro los que se comieron tener que migrar el texto, las tablas, las imágenes y los archivos al nuevo gestor.

Trabajamos con la flor y nata del Rectorado durante más de medio año en uno de los proyectos más interesantes en los que había estado, ya no solo por tener la oportunidad de aprender muchísimo de desarrollo web en el contexto de un proyecto real, sino por ser ridículamente amplio. Ésto hizo que todos los que estábamos en él tuviéramos que coordinarnos por medio de reuniones semanales en las que presentábamos los avances, herramientas tipo Trello para llevar un seguimiento de qué estaba haciendo cada uno, qué terminaba y qué tenía pendiente por hacer y en el caso del equipo del desarrollo el uso intensivo de repositorios para sincronizarnos.

Quería incluir un slider de imágenes con el antes y el después de la web, pero resulta que Blogger no proporciona ninguno nativo, así que me he hecho uno personalizado (por lo que seguramente lo use en futuras entradas). El código, como siempre, lo podéis encontrar en mi repo.

La primera imagen es un pantallazo de la versión antigua, mientras que la segunda muestra cómo está a día de escribir estas líneas (el slider tiene flechitas a los lados para pasar, pero se camuflan con el blanco de la imagen).






Por otro lado, varios profesores de la facultad habían montado un curso de enseñanzas propias de desarrollo de videojuegos, con renombre nacional, al que me llevaba planteando apuntarme desde primero pero que fui postergando literalmente por miedo, ya que aparte de ser to exigente duraba un año entero. Y en cuarto, por fin, me vi fuerte para el CEDV.

Éste no es el cartel de el año pasado, pero me gusta más

Pero del CEDV ya os hablaré en unas líneas. De momento empecemos con el curso canónico. A diferencia de otros, y por haber elegido la intensificación de Ingeniería del Software (a día de hoy ya he perdido la cuenta de las veces que me he arrepentido) fue un curso orientado a presentaciones en clase, trabajos grupales y exámenes muy teóricos. Como siempre, os cuelo un enlace en el nombre de cada asignatura a una carpeta en Drive con la mayoría de los trabajos que hice y, si pude conseguirlo, el examen final.

Piattini fue quien nos aprendió Calidad de Sistemas Software, a quien por cierto he leído en foros que van a meter nerfeo fuerte en el siguiente parche porque está roto. La movida es que es capaz de contarte de modo divulgativo algo tan denso como los modelos y normativas de calidad de los Sistemas de Información y de los Procesos Software y hacer que te pareciera ameno. Pero a la hora de hacer trabajos o de estudiar para el examen miras a la ISO 9001 y te das cuenta de lo cruda que es la realidad.

Aunque, ya que me sacáis el tema del examen, tenía un bug. Resulta que entre el C:TED, el CEDV y el resto de asignaturas, por no hablar de mis ineludibles compromisos sociales, fui dejando estudiar el examen final para la semana día noche de antes, y el estudiar se quedó en hojear los doce temas que entraban, agarrándome como a clavo ardiendo a que era tipo test. Total, que llegué un poco pez. Pero resultó que para evitar corregir los exámenes, Piattini contó que los había hecho de dos tipos y nos sentó alternándolos. Además, conforme terminábamos nos daba para corregir, junto con la hoja de respuestas, el examen de un compañero del mismo tipo para que el que se sentara al lado no se pudiera copiar. Un lío. El caso es que si no tenía ganas de corregir los exámenes tampoco creía que hubiera tenido ganas de hacerlos de dos tipos y me olí la tostada; me hice el longui hasta que el compañero que se sentaba a mi lado terminó, le dieron la hoja con las respuestas y aproveché para copiarme como un hijo de puta (aunque me dejé un par mal adrede para que no cantara tanto). Al final terminé sacando la nota más alta de la clase y ganándome la enhorabuena del profesor.

Paralelamente, nos volvimos a encontrar a Rosado, esta vez en Seguridad de Sistemas Software. En la parte teórica vimos por un lado las bases de los certificados web, algoritmos de cifrado, protocolos criptográficos y un poquito de SQL injection y luego nos metimos de lleno en los Requisitos de Seguridad y la Metodología de Gestión de Riesgos. La práctica fue más amena, y llevamos lo visto en la teoría a pequeños scripts shell para Linux para cifrar y descifrar archivos.

Y desde luego, Gestión de Proyectos Software es una de las asignaturas que hubiera pagado por evitar en el Grado. Parecía que Moraga nos hablara como a prepúberes cuando nos aprendía sus movidas de puntos objeto y puntos función. Estaba tan desmotivado con esta asignatura que acabé suspendiendo el ordinario y yendo a junio con él.

Serrano, profesor de Procesos de Ingeniería Software, cambió bastante el modus operandi del docente (qué rabia me da la peña que usa locuciones latinas) y dividió su clase en dos fases. A lo largo del primer mes hizo una lista de tecnologías (que en nuestro caso fueron Bootstrap y AngularJS) y nos hizo presentarlas en clase para el resto de compañeros, tras lo que nos propuso un proyecto grande por equipos aplicando todas esas tecnologías. Finalmente, por si fuera poco, nos los intercambiamos con otros compañeros y tuvimos que añadir a sus proyectos nueva funcionalidad. Hubiera preferido otro final de Gestión de Proyectos a tener que refactorizar el código Java del equipo que nos tocó.

Finalmente, después de cambiar literalmente diez veces de versión de Eclipse y Apache, de pelearnos con el BDD de Cucumber y las dependencias de Maven, de cambiar de lenguaje de programación a mitad de la práctica, de liarla parda depurando con MongoDB, de fingir en Trello que habíamos seguido SCRUM y de pasar 6 ó 7 tardes en la ALU terminamos haciendo una aplicación web que permitía a sus usuarios llevar un seguimiento de las tareas que tenían pendientes. Aquí tenéis la nuestra y aquí la del otro equipo después del mantenimiento adaptativo.

Y por último está Técnicas de Aprendizaje Automático, o Machine Learning Techniques, que fue la única del cuatrimestre en inglés. También fue la única optativa, y obviamente me la cogí de la rama  buena, la de Ingeniería de Computadores. A lo largo del cuatrimestre nos bajamos datos de tráfico de Euskadi OpenData y los parseamos con Python a una base de datos para luego hacer todo tipo de modelos estadísticos con Anaconda aplicando algoritmos de agrupación de datos con aprendizaje supervisado y no supervisado, como DBSCAN, K-means, PCA jerárquico, KNN y árboles de decisiones, aparte de un trabajo final en el que teníamos que elegir un conjunto de datos y hacer el estudio que quisiéramos con lo que habíamos aprendido, que en mi caso fue predecir mediante clustering espectral las regiones de la República Checa del 1999 con mayor riesgo de tener préstamos sin pagar.

A día de hoy aún hay noches en las que me despierto empapado en sudor frío gritando coeficientes silhouette al azar.

Pero antes de Navidad, tras presentar el primer proyecto del CEDV, el director del C:TED, del CEDV, de la Secretaría General de la UCLM y de mil movidas más me contó que su empresa había firmado un proyecto con una empresa de Londres para desarrollar una herramienta para ayudar a peña con derrame cerebral en la rehabilitación física, y me lo propuso como TFG. No podía pensar en nada que sonara más interesante, así que en Enero estaba firmando un contrato de medio año para hacer las prácticas de empresa en Furious Koalas, Además, aprovechando que la empresa contratante era oriunda de la pérfida Albión, decidí hacerlo en inglés.

Lo que me vino genial, porque entre los 12 créditos de las prácticas, los 12 del TFG y otros 6 de libre configuración que me quité con los cursos que fui haciendo a lo largo de la carrera pude entrar al segundo cuatrimestre sin ninguna asignatura.

Y con esto llegamos a Navidad. Estaba pensando qué contar y creo que se parece demasiado a lo que ya conté el año pasado, y como me apetece hablar del CEDV y el TFG vamos pasamos a cositas más interesantes.

Como que me compré una PS4 y pude jugar a todos los juegos que llevaba añadiendo a la wishlist durante años. Por fin pude terminar la saga Dark Souls con el tercero, que era al que más ganas tenía de jugar, sin desmerecer a los nuevos Assassins, el Bloodborne, el The Witcher 3 y, por supuesto, el Rocket League, al que a día de hoy sigo jugando con mi hermano.

Así que después de pasar unas vacaciones súper productivas volví al C:TED un poco receloso, ya que habíamos terminado la portada la semana antes de Navidad y tenía toda la pinta de que me esperaba estar metiendo contenidos en el gestor. Y así fue. Pasábamos como 2 horas cada día copiando texto, tablas y bajándonos archivos de la página antigua para llevarlo a la nueva. Que lo hagan los becarios, pensaba mientras me daba cuenta de que eso es lo que éramos.

Nos repartíamos las mañanas actualizando la página web, empaquetando cursos MOOC para los profesores de toda la UCLM con Hidra (que fue el TFG de una comadre), grabando y postproduciendo en la sala croma de la que no paraba de entrar y salir gente y montando, desmontando y llevado el MultiCam de un sitio a otro de Ciudad Real aparte de, por supuesto, los veinte minutitos de descanso en la cafetería de Derecho.

El caso es que durante Enero pasaba la mañana en el Rectorado, comía en el piso, me iba a currar a Furious Koalas y volvía para cenar y dedicar las noches al CEDV. Y aunque disfrutaba como un chiquillo con las dos últimas, acabé bastante quemado del trabajo del C:TED, así que tras mucho pensarlo a finales de mes decidí dejarlo. Y aunque tuve la suerte de que al poco de entrar en Furious Koalas se incorporó otro compadre con el que me acabé llevando genial, acabé echando de menos a los compañeros que dejé allí.

Aquí pasé trabajando un año y medio

Pero como os prometí hace unas líneas paso a contaros lo del CEDV.  Fue un curso de 30 créditos y más de mil pavazos que duró desde septiembre hasta julio, con clases cada viernes de 4 a 9 en la última planta de la facultad. Estaba principalmente centrado en la parte técnica del desarrollo de videojuegos, por lo que el alumnado era muy variado; desde chavales que hicieron el grado medio de informática y llevaban trabajando varios años a doctorandos con un perfil mucho más teórico de todas partes de España, sin contar al mexicano y al uruguayo, que vinieron ex profeso para hacer el curso.

De hecho, uno de los compañeros del C:TED era también becario del CEDV, y se encargaba de maquetar e imprimir las diapositivas de cada semana y de grabar todas las clases con el MultiCam. Mi juramento becariocrático me obligaba a echarle una mano, así que dedicábamos algo más de una hora las mañanas de los viernes a ir a la facultad y montar y probar las cámaras.

El curso estaba dividido en cuatro asignaturas, dos en cada cuatrimestre, tres juegos entregables y un proyecto final en el que aplicar todo lo aprendido. Una de las asignaturas del primer cuatri fue Arquitectura del Motor, donde Vallejo nos presentó el lenguaje de programación, C++, el motor gráfico, Ogre3D, y el sistema de interfaces, CEGUI, que íbamos a utilizar a lo largo del curso. Nos explicó la máquina de estados que íbamos a usar para gestionar el bucle del juego, la concurrencia y los diferentes recursos que teníamos, como el sonido o los modelos 3D. Además, dedicó un par de clases a la std y la STL, además de otro par más avanzadas a la compilación usando G++ y makefiles y la depuración con GDB.

La otra asignatura fue Programación Gráfica, en la que Carlos nos aprendió, primero, la base matemática detrás de las librerías de gráficos, como los quaternions y algo de OpenGL y que luego dedicó prácticamente a Blender, el programa de modelado 3D que utilizamos en el curso.

A principios de noviembre, cuando empezábamos a ver por dónde nos venían y todos tuvimos pareja de trabajo, nos propusieron como primer proyecto del curso un mastermind básico. A finales de diciembre lo presentamos, y aunque en el resto de ocasiones no publicaron los vídeos conseguí hacerme con el de la primera presentación, así que os lo cuelo por aquí.



En el segundo cuatrimestre tuvimos las otras dos asignaturas. En Técnicas Avanzadas de Desarrollo aprendimos principalmente maneras más eficientes de escribir el código a través de estructuras de datos y patrones de diseño, además de profundizar en la STL y ver algo scripting y partículas. Por último, para el tercer entregable aprendimos a integrar un motor físico, en nuestro caso Bullet, con el motor gráfico.

La última asignatura del curso fue Desarrollo de Componentes, que se dividió en dos partes. En la primera nos aprendieron movidas de Inteligencia Artificial, como lógica difusa o algoritmos de búsqueda basados en agentes para planificar los caminos de los posibles personajes que quisiéramos incluir en el juego. Por otro lado, vimos las bases del multijugador en red, empezando por sockets y subiendo en abstracción hasta llegar a los middlewares, en concreto ZeroC Ice, que fue el mismo que usamos el año pasado para la práctica de Sistemas Distribuidos, aparte de un par de ejemplos prácticos de cómo gestionaba el antiguo motor Source los distintos anchos de banda de los jugadores y las compensaciones de lag que hacía.

El segundo juego que nos propusieron fue un pequeño Space Invaders al que terminamos añadiendo un jefe final que se hunde en el agua al derrotarlo. Aunque desde fuera pueda parecer medio decente, como aún no habíamos añadido el motor de físicas terminamos haciendo una chapuza para detectar las colisiones de los personajes con las balas, cosa que arreglamos en el tercer juego.


De hecho, durante la presentación nos saltó un segmentation fault por acceder al vector (vacío) donde almacenábamos las referencias de los disparos, y no pudimos sino tirar del clásico "en mi casa compilaba".

El último entregable que nos propusieron fue de temática libre, siempre y cuando girara en torno al uso de físicas. Tanto mi compañero como yo íbamos bastante apurados de tiempo e íbamos a estarlo más, así que pensamos en hacer algo que pudiéramos reutilizar parcialmente en el proyecto final. De todo lo que hicimos, lo más obvio fue el personaje principal, Arrow, a quien modelé y animé una sola vez, y luego copié y pegué tal cual en el juego final.



Otra de las cosas que aprendí a hacer tras un montón de dolores de cabeza fue a bakear en Blender para exportar al motor gráfico. Como no había nada en YouTube en español (y apenas en inglés) se me ocurrió hacer un tutorial y subirlo, y ha terminado siendo medio popular, así que os lo cuelo por si alguna vez también tenéis que bakear algo.



Y por fin, el último proyecto que tuvimos que hacer para el CEDV fue un juego de temática libre, con documentación impresa a lo TFG, en el que pusiéramos en práctica todo lo que habíamos aprendido durante el curso.

Mientras lo planeábamos, en mi cabeza todo iba encajando como un puzzle. Tenía mil ideas que podían quedar perfectas; un lore to profundo, varias subtramas con personajes llenos de intriga  y traición, tres mapas súper diferentes y todo construido en torno al jefe final del juego. Incluso llegué a componerle cuatro minitemas, uno para cada mapa y el menú, con el programa que uso para aprenderme canciones con la guitarra.



El problema fue que la fecha de entrega era una semana antes del la del TFG, y entre que no me daba la vida para más y que mi compañero de trabajo había cambiado de empresa y estaba de mudanza el resultado fue muchísimo peor de lo que teníamos planeado, así que tras presentarlo decidimos asegurarnos de que nadie supiera nunca de Arrow and the Cursed Kingdom.

Pero le seguí dando vueltas, y no me sentía a gusto conmigo mismo dejando caer en el olvido todo lo que había pensado para el juego. Aprovechando que ya había modelado los mapas, se me ocurrió hacer el trailer de lo que ejuego debería haber llegado a ser. Además, una amiga de Dublín vino en verano a pasar unos días a Almagro, así que le pedí que me narrara la voz de trailer.

A lo largo de los dos siguientes meses aprendí a generar vídeos con Blender, y tras horas y horas (y horas) de renderizado conseguí el trailer del juego que tenía en mi cabeza.



También hice una versión detrás de las cámaras, por si, insaciable lector, eres un adicto del mundillo del CGI.

Y por último pasemos al TFG. Como os contaba hace unas líneas, a finales de Enero empecé las prácticas de empresa en Furious Koalas. Tenían las oficinas en el Instituto de Tecnologías y Sistemas de Información, en frente de la Facultad de Medicina, por lo que los jueves de cervezada las ventanas vibraban al ritmo de las bases de Bad Bunny.

Antes de que llegara yo ya habían acordado los requisitos con la compañía para la que íbamos a hacer el proyecto, así que pude empezar a trabajar directamente. La movida era capturar el vídeo y el esqueleto de los pacientes haciendo ejercicios de rehabilitación específicos de derrame cerebral usando la aplicación, y luego comparar esos ejercicios con otros realizados bien, previamente grabados, e informar tanto al paciente como al médico con el resultado en un lenguaje natural. Y no sabía ni lo que era un ejercicio de rehabilitación, hulio.

A lo largo del proyecto usamos varias cámaras para capturar el esqueleto de los usuarios, por lo que llegó un punto en que ni sabía qué SDK estaba usando ni a qué funciones tenía que llamar para hacer las cosas. Abajo os cuelo un vídeo probando la Kinect 1.8, que fue la cámara que terminamos usando.



Y tras 6 meses de probar cámaras, crear un sistema de módulos en el que delegar tareas, serializar imágenes en C++, inventarme protocolos de encapsulado para enviarlas con hilos a un servidor Python sobre sockets y luego a una página web con websockets y JSON, renderizarlas sobre canvas, capturar esqueletos y hacerlos persistentes con el estándar BVH, compararlos con el algoritmo DTW, exportarlos a Blender con un plugin específico, llevar un registro con los resultados de los pacientes y permitirles grabar y reproducir vídeos me quedé con 160 páginas de documentación de puta madre y un TFG con matrícula de honor.

Además, tanto para la presentación como para el entregable para la empresa grabamos un vídeo con  ayuda de los dos profesores de Física de la facultad, uno haciendo de paciente y el otro, angloparlante, narrándolo.



Y por fin, literalmente dos días después de presentarlo me fui con dos amigos a Heidelberg a visitar a un tercero que había pasado el año allí de Erasmus. A principio quería incluir en esta entrada el viaje a Alemania, pero aunque sé que os gustan largas, dándole a la ruedecilla para arriba creo que ya he escrito demasiado en ésta. Así que tras este pequeño innuendo te vuelvo a dar las gracias, insaciable lector, por leerme un años más.


Ella no era una chica de película
pero tenía defectos especiales
Me quedé clavado en su clavícula
Y me perdí siendo astronauta en sus lunares


Bejo - Entre tenerte y entretenerte

No hay comentarios:

Publicar un comentario