Feliz año nuevo

 Y ya nos llega el 2021, mientras podemos dar el 2020 por perdido casi en su totalidad. Muchos planes cancelados, aunque de alguna forma cada cual se las habrá arreglado para hacer otras cosas. ¿Qué puedo decirles acerca de este año? 

En general, he estado muy escaso de tiempo, y eso lo habrán notado los pocos que aún pasan por aquí. El 2020 empezó para mí con un cambio de Unity a Godot, el inicio de un proyecto, y la migración de El Laberinto del Saber. Todo eso, partiendo desde cero en el nuevo motor. Hoy el demo del Laberinto está casi terminado, en espera de algunos gráficos que faltan, y que se me apruebe la cuenta de desarrollador en Apklis, la tienda de aplicaciones de Cuba. Y eso es un tema que se merece un poco de atención.

Por primera vez en nuestro país se legaliza la venta de software, incluso sin necesidad de una licencia de trabajador privado. Sin embargo, no todo es color de rosas. Abundan los usuarios que se aferran a los viejos hábitos y que se ofenden porque creen que las aplicaciones deben ser gratis. Así, por sus cojones. Por tanto, han desatado toda una campaña de valoraciones negativas contra Almas Reencarnadas, el primer juego que cambió de gratis a pago, aunque su precio es ínfimo. Y es que los cubanos, cuando queremos ser hijos de puta no nos gana ni Donald Trump.

 


La comunidad cubana de desarrolladores de juegos ha logrado organizarse en este año que termina y ya contamos con un grupo de más de 100 miembros. Se está hablando de organizar encuentros en cuanto la situación lo permita, de desarrollo, monetización, unos premios a los videojuegos cubanos, etc. Todo eso a pesar de que el marco legal no nos favorece. Estamos lejos de tener una industria como tal, pero a eso llegaremos algún día. O algún siglo. No abundaré más porque el tema ya lo he tratado, pero en mi opinión, es de lo mejorcito que nos ha pasado este 2020 y un motivo de alegría para mí.

Volviendo a lo personal, he terminado otra novela, y de momento no hay otra concreta en planes. Sigo a la espera de Godot 4.0 para reiniciar el proyecto de RPG, que estrenará concept art muy pronto, pro eso tomará algunos meses.

Por tanto, muchas felicidades a todos. O todas, o todes, que hay que ser inclusivo o te buscas un problema y el fin de año no es para buscarse líos. Y sean educados, dejen un comentario con sus felicitaciones.

Mis experiencias como desarrollador freelance

 
Sí, he estado ausente durante meses, y es posible que lo siga estando. El tiempo no me alcanza para mucho, sobre todo por lo ocupado que he estado en un proyecto a pedido de un colega. La situación está apretada y el dinero hace falta. Pero como ya he dicho, de cualquier cosa se sacan lecciones, no solo dinero. 

Ha sido toda una experiencia llevar le proyecto de principio a fin, con todos sus cambios y todas las dificultades que aparecieron por el camino. En concreto, la mayor cantidad de problemas se me han dado en el port para Android, en específico, los permisos. Las app de Godot no solicitan ningún permiso al instalarse, auqneu los tengan activados en la lista. Conclusión, que mi apk no podía hacer algo tan simple como obtener el listado de archivos de un directorio. Otro detalle,  que ya conocía, es que a veces el apk no escribe archivos, y de pronto empieza a escribirlos sin problemas. No recuerdo haber enfrentado tantas dificultades cuando usaba Unity.

El proceso de corrección de errores ha sido pesado, tanto que da la equivocada impresión de que invertí más tiempo en pruebas y pulido que en el desarrollo como tal. Ha sido una lección de gran valor que tendré en cuenta en los otros proyectos, en especial el Laberinto, que está en fase beta ahora mismo. No importa lo sencillo que sea el proyecto, habrán problemas a montones. Así que no se quejen por los bugs de Cyberpunk 2077. No quiero ni pensar cuando me toque algún proyecto más complejo.

En general me he visto obligado a dominar mejor el UI de Godot, he tenido que aprender a usar las señales, saber un poquito más acerca de GDScript, sobre todo el uso de diccionarios, y quiás alguna cosita que se me olvide ahora. Todo eso me viene bien para un juego que en un mes o dos les mostraré.


¡Albricias! Podremos vender aplicaciones en Cuba

 Pues eso. Según nueva resolución de nuestro Ministerio de Finanzas y Precios, las personas naturales y jurídicas podrán vender aplicaciones y servicios a través de Apklis (una suerte de Google Play local), Todus y Picta (una especie de Telegram hecho acá, que casi nunca funciona y un Youtube cubano, que igual que el original, nadie puede ver, porque sale muy caro). Ya sé lo que me van a decir. Vender aplicaciones es algo más viejo que cagar agachado en todo el mundo. Pero les recuerdo que usted está en Cuba, patria socialista, tierra de Fidel. Aquí no hacemos esas cochinadas burguesas de permitir que la gente se venda cosas unas a otras y gane dinero en el proceso. O no las hacíamos. Nada como una buena crisis para darte cuenta de que la economía, como toda ciencia, no entiende de ideologías.

La resolución es casi como una falda de ir a la iglesia pentecostal: no deja ver nada. Salvo decir que las personas naturales deben declarar sus ingresos a fin de año, no se aclara si se debe tener una licencia de trabajador privado, que hasta ahora siempre ha sido esencial para hacer negocios como freelancer. Seguimos en espera de más detalles, aunque la comunidad de desarrolladores está muy entusiasmada con el tema. 

El gran problema que enfrentamos, aparte de legislación poco clara y restrictiva, es un país donde el comercio electrónico está en pañales. Otro asunto es que las personas no tienen hábito de comprar aplicaciones o servicios digitales a sus productores, es más fácil ir con el tipo de la esquina que te las pone en tu teléfono y te cobra un dólar. Redirigir ese mercado hacia el lugar correcto podría ser una tarea difícil.

 En fin, que la vida es dura para los desarrolladores cubanos. Pero no podemos dejar de reconocer que se trata de un paso de avance en la dirección... digamos que correcta. Esperemos que los pasos sigan. Y que sigan en la dirección correcta para nosotros, porque ya sabemos que loq ue el estado entiende por correcto no siempre coincide con lo que entendemos nosotros.

Nuevo video en camino

 Y como había prometido, ya he comenzado a planificar un nuevo video, sobre la historia de los videojuegos en Cuba. Lamentablemente, sigo bastante ocupado (y no, no estoy ocupado jugando), por eso no le puedo dedicar suficiente tiempo a la investigación del tema. Porque el asunto, aunque no lo crean, no es tan simple como parece. ¿Qué historia puede tener Cuba en los videojuegos? Pues sí que la tiene, ya lo verán pronto... o eso espero.
En este momento estoy llevando tres proyectos a la vez, aunque uno de ellos me consume más tiempo que la mayoría. Es un juego 2D de plataformas, del cual no puedo dar muchos detalles aún. El segundo proyecto es el port del Laberinto del Saber a Godot, que se ha complicado en algunas cosillas que deberían ser simples. Y el tercero es un experimento para un amigo, que reutiliza algunas cosas del Laberinto para crear una app de entrenamiento.
Cada uno tiene sus cosas y a su vez, me han servido para aprender más sobre Godot. No hay proyecto sencillo, y todos pueden enseñarte algo.

No me he muerto

 
Long time no see! He estado bastante ocupado pensando en proyectos, y de hecho, haciendo algunas cosas en esos proyectos. No he tenido tiempo para escribir ni unas míseras líneas, aunque tenía un tema que quiero tratar (espero hacerlo más adelante), ni para un video que está pendiente desde hace un mes sobre la historia de los videojuegos en Cuba.
En fin, para no hacer este cuento muy largo, les diré que he avanzado un poco en un proyecto 2D que estaba estancado, agregando escenas nuevas y la IA. En esto último me he encontrado algunos problemas, pero todo problema es una oportunidad para aprender. También me vi necesitado de trabajar mucho más con la interfaz de usuario de Godot, en un segundo proyecto, lo cual me vino muy bien. He consolidado un poco lo que sabía del tema y aprendido un par de cosas nuevos. Por supuesto, aún es una mínima parte de lo que necesito.
Si sacan cuentas, verán que no es suficiente para llenar todas estas semanas de ausencia. Bueno, es que no todo ha sido trabajo. Logré echarle mano al Wasteland 3 y completarlo me robó un par de semanas, una hora y media o más cada noche. A pesar de ciertos fallos, el juego valió la pena. No sé hasta qué punto atribuir los largos tiempos de carga y que el juego se congelase en ciertos puntos durante más de tres segundos a Unity. Para ser un título que no abusa de los gráficos su rendimiento deja mucho que desear, algo que no sucedía en el anterior.
Volviendo al primer proyecto que mencionaba, esperamos antes de fin de año tener algo muy sencillo que mostrar, y estoy seguro de que visualmente los sorprenderá. Sé que la recomendación viene de muy cerca, pero está aun nivel muy superior a todo lo que se está haciendo en el país actualmente, que no es poco. Pero de eso hablaremos en el próximo post. Le sprometo que no me tomaré un mes en hacerlo.

Más guiones estúpidos

 En una ocasión anterior dije que parece ser imprescindible un alto grado de estupidez para ser guionista de Hollywood y lo ratifico. También ratifico que el grado exigido es bastante alto. Debe haber un doctorado para guionistas estúpidos en alguna universidad de Estados Unidos, porque las cosas que se ven últimamente son una delicia.
A ver, señores, que las películas de los 90 no eran gran cosa, la verdad. Todos íbamos a la sala de video esperando ver un paquete, donde el bueno, Van Damme, Seagal, o el que fuese, se batía en desventaja con una docena de secuestradores en un edificio, un barco, un tren, o lo que se terciara. Así, no había que inventar nada más. Eran unos tipos malos de manual, que entraban matando a alguien por gusto y les cogías odio sin más contratiempos. El héroe de turno mataba a los secuaces uno por uno, hasta llegar al jefe final, y todos nos íbamos a casa tan panchos, a esperar la próxima de Van Damme, Seagal, o el que fuese. Ninguna se ganó un Oscar, pero recaudaban bien y divertían.
Pero es que ya ni siquiera son capaces de hacer una variante de una idea tan simple y como ejemplo de estupidez suprema tomemos el caso de la más reciente de Bruce Willis, que ya está viejito, pero al menos hace bulto. Juzguen ustedes mismos: nuestro héroe de acción veterano millonario contrata a un grupo de mercenarios como escolta, porque espera una encerrona por parte de un terrorista en una visita a cierta fábrica abandonada. Lo que no les dice es que el ataque es 100% seguro (sí, flojea un poco el guión por ese lado), así que nuestros mercenarios buenos se verán superados en número y en armamento. Aunque el escuadrón de héroes supuestamente está compuesto por profesionales, los tipos se meten en la boca del lobo armados con pistolitas y sin protección de ningún tipo. Como lo oyen.
El Bruce Willis millonario y su jefe de seguridad, que saben lo que va a suceder, ni siquiera tienen la precaución de ocultar de antemano en el lugar un alijo de armas. Yo habría escondido armamento suficiente para detener una división de infantería con apoyo de blindados. Pero tampoco. En fin, que los protagonistas son tan borregos e ineptos, que se merecían que ganara el malo. Por imbéciles.
De tan risible, la trama no consigue que alguien medianamente inteligente se sensibilize con la situación de los protagonistas, odie a los villanos, y disfrute con las escenas de acción donde los primeros le dan una paliza a los segundos, como dios manda. Más bien a mediados de filme empiezas a preguntarte por qué coño estás perdiendo hora y media de tu vida en eso.
Si alguna vez escribes una historia, es bueno que te detengas a verificar la lógica y racionalidad de lo que pasa, o acabarás escribiendo sandeces como Hard Kill.

Horizon Zero Dawn, al fin

Hay un par de juegos de la buena (o mala) suerte. Cada vez que los instalo en una consola, lle ga un cliente y el equipo se vende. Son Diablo 3 y Horizon Zero Dawn. En el primero logré llegar a la segunda ciudad en una PS3, luego lo intenté varias veces y lo mismo. En Horizon, había estado a punto de salir de la aldea cuando la PS4 se vendió, dejándome a medias.
Entonces llegó la versión de Horizon Zero Dawn para PC y me alegré muchísimo. Si todos los astros se alineaban correctamente, podría disfrutar del juego, a pesar de los malestares que me aquejan últimamente. Y el juego llegó, aunque con malas noticias: su rendimiento no era muy bueno. Lo probé aquí en el trabajo y nada. Las cosas no pintaban bien. Si no funcionaba con una GTX 980, 32Gb de RAM y 16 núcleos físicos, ¿cómo me iría en casa? Pues la primera vez, muy mal. La cinemática de inicio se entrecortaba y en algún momento se colgó. Para colmo, ¡el juego no se puede jugar con mando!
Ahí lo dejé, hasta que hace un par de días le eché una mirada y para i sorpresa, la cinemática de inicio iba bien. Luego el juego arrancó muy bien, estable, y con un rendimiento más que aceptable: 70 o más FPS, a calidad media (según pruebas, no hay gran diferencia entre baja y alta). Nada mal para un hardware modesto y ya pasado de moda.
El juego en sí no decepciona: aunque la historia es predecible a veces (tampoco vamos a pedir una trama de premio Hugo) es bastante atrayente. Ni hablar de los gráficos, ya saben que para mí los gráficos son secundarios en un RPG si me ofrece buena jugabilidad e historia. Pero si me dan todo, tampoco lo voy a rechazar.
Dicho sea esto, es bueno aclarar que este no es un RPG al uso, de la vieja escuela. Es más bien un RPG consolero, y eso se nota en la escasez de misiones secundarias y que todas las habilidades de su árbol son semi-pasivas: afectan aspectos de los ataques, recolección, etc. Todo muy orientado al juego con mandos, que no ofrece las ilimitadas combinaciones de un teclado (aunque sí protege más tus delicadas manitas de gamer, algo que echo muchísimo de menos).
Un par de sesiones de juego no son suficientes para valorar un RPG, pero Horizon, por el momento, me divierte y creo que es muy posible que lo termine, si el dolor de las manos me lo permite. Incluso insisto en recomendarlo como un buen juego, así que si pueden, no dejen de probarlo.

Nuevo tutorial de Godot: IA con Resources

 
Con dos días de atraso, pero ya está terminada la primera parte de mi tutorial de Inteligencia artificial simple con Resources. El mismo es una rspuesta a una vieja pregunta que vi en el reddit de Godot: ¿es posible implementar algo similar al sistema de IA de Unity basado en ScriptableObjects? Pues sí. Me tomó algún tiempo explorar las posibilidades de las clases y herencia en GDScript, sobre todo en el caso de los Resources, y luego un poco más readaptar mi enfoque a Godot y sus Resources.

 

La segunda parte debería estar lista en tres o cuatro días y cubre un par de elementos más avanzados, incluyendo el movimiento del NPC hacia el jugador. Todo muy simple, para facilitar la comprensión y que ustedes puedan adaptar el código a sus necesidades.

También he  agregado un pequeño archivo al primer tutorial con el script de maneja de la cámara y una imagen de la configuración del nodo de la misma (posición, ángulo, etc)

Cámara isométrica en Godot, video tutorial

Luego de muchas dificultades, al fin he logrado terminarlo y subirlo. Y como dicen los youtubers: dale like y suscríbete, o por lo menos comparte. Recuerden dejar sus comentarios con posibles mejoras, así aprendemos todos que es lo más importante.

Nunca seré youtuber


Anoche me acosté muy tarde (según mis estándares) intentando hacer mi primer tutorial de Godot. Deben haber sido un total de seis o siete tomas completas, sin contar las que interrumpí porque pasó una motocicleta o un camión frente a mi casa y estropeó la grabación, en español e inglés.
Definitivamente, esto no es lo mío. Para empezar, hay ciertas dificultades técnicas. La primera, como pueden suponer, es que mi habitación es muy ruidosa. Ya sea un auto, o los vecinos, pero siempre habrá algún ruido de fondo que venga a joder la cosa. La otra es que no tengo un micrófono adecuado, aunque el que tengo no es malo. Estoy usando uno que era de unos audífonos, por tanto no había forma de apoyarlo en nada. La solución fue ponerme el nasobuco y meter el micrófono dentro para mantenerlo cerca de mi cara (y de paso bloquear un poco el sonido exterior). El resultado es bueno a veces, pero otras se escuchan unos resoplidos que parezco Darth Vader con asma.
Aún si lograra resolver lo anterior, mi inglés suena horrible por la falta de práctica, y tampoco es que mi voz sea muy agradable de oír, ni siquiera en español. Quizás debería practicar más la lengua de Shakespeare, hablando solo en casa o algo así. En fin, que hoy haré una última prueba, y si no estoy conforme tendré que prescindir de la oratoria y sustituirla por textos. Luego de eso viene la parte de editar el video, que tampoco es una de mis habilidades de más nivel y que me resulta aburrido. Por todo eso, creo que le dejaré lo de ser youtuber a otros.

Casi listo para grabar

A pesar de las molestias en las manos he logrado resolver algunos detalles con vistas a crear un par de tutoriales de Godot. El primer problema que encontré fue que RecordMyDesktop no producía buenos videos, había algo que aceleraba la velocidad de reproducción, y resultó ser la compresión al vuelo. Para capturar todo el escritorio, simplemente no se selecciona ninguna ventana antes de grabar.
Luego tocaba resolver lo del micrófono, que distraído como siempre, ni siquiera había activado en la configuración del sistema. Luego de eso, logré grabar el escritorio y el audio del micro. Aquí el asunto es lograr evitar el ruido de la calle y los vecinos, que los tengo a pocos metros de distancia y con apenas una pared de por medio. Sin mencionar que acá los vecinos suelen ser ruidosos, porque no hay leyes al respecto, y las que hay, no se respetan. De todas formas, estoy valorando usar textos en inglés y español para ahorrarme el trabajo de hablar, porque mi voz no es que sea tan agradable de escuchar. No hay nada como un tutorial donde el autor no te atormenta con una continua parrafada a toda velocidad.
En fin, que solo queda que me disponga a hacerlo. Supongo que en una semana o dos tendrán mi primer tutorial en Youtube, mostrando el proceso de implementar una cámara isométrica con Godot.

No me ha llevado la COVID

Aunque sí tengo que lamentar algunos problemas de salud. Luego del maratón de escitura requerido para  terminar la novela, he tenido que tomarme un largo descanso por el dolor en las manos.  Muy poco trabajo o juegos en estos días, en los que he tenido que mantenerme a base de series y documentales. A pesar de eso, no he notado  mucho alivio y creo que tendré que ir a un médico a ver si consigo algún tratamiento.
Ojalá no me ingresen por sospechas de COVID 19.

Novela terminada

Luego de una maratón de escritura durante la última semana, concluí el primer borrador de la novela para el cocnurso Hidra, que espero sea a fines de año. Durante el proceso, la tecla L de mi teclado falleció y ahora estoy en serios problemas, pues no parece que vaya a conseguir uno a corto plazo. Ahora se inicia el proceso de revisión y pulido, para convertir este borrador en algo pulido y que además de divertido, sea del agrado de un jurado, que por si no lo saben, tienen gustos y estándares muy específicos.
Esta sería la cuarta novela ambientada en el universo de Elymuria, y por tanto, vuelve a emplear a fondo el humor para narrar la original historia de un joven enamorado que se lanza a rescatar a su amada de las garras de un dragón. Estoy seguro de que jamás leyeron algo así. Al margen de que gane o no el concurso, ya ha conseguido la aprobación de un par de amigos cuya opinión vale mucho para mí (no tanto como los casi 200 dólares del premio, pero se le acerca). Y por ahora, haré el alto que he estado anunciando desde hace rato, para dedicarme a programar por un tiempo.
Pero incluso eso tendrá que esperr, porque el esfuerzo de los últimos días me ha dejado las manos en malas condiciones, así que tendré que tomarme unos días de reposo.

Nueva novela casi terminada


Me había propuesto terminar dos novelas cortas el año pasado para sendos concursos (ahí les dejo la palabreja para que vean que sí tengo algo de vocabulario), pero al final la primera no salió como esperaba y decidí apartarme de esto de la literatura por un rato. En definitiva, no se me da lo de hacer promoción, no vendo, y las editoriales nacionales ni siquiera se acuerdan de mí. La segunda novela ya estaba iniciada y se la di a leer a mi editora personal. Sí, algunos tienen personal stylist, o personal trainer, yo tengo una editora personal. La opinión fue contundente, luego de dos minutos: "Quiero revisarte esta novela. Avísame cuando esté terminada". Y si María dice que quiere que la termine, pues hay que terminarla.
Me tomé un largo descanso antes de retomar la historia y acudir a una segunda opinión, que me confirmó que valía la pena el esfuerzo. En fin, que ya estoy en la recta final. Cosas de dos meses máximo, incluyendo el período de obligatorio reposo y subsiguiente revisión y pulido. Quizás hasta podría ganar el concurso, o al menos una mención, aunque la cosa está difícil porque es raro que se premie el humor y me han dicho que además, los jurados prefieren premiar la CF por encima de la fantasía.
Aparte de eso, he tenido algunas otras alegrías. Estoy incluido en una nueva antología de escritores cubanos, que pueden comprar en Amazon y les recomiendo que lo hagan, porque la selección de autores es magnífica. Y en algún momento, quizás el año próximo, debería publicarse una novela mía, la tercera que escribí y que ya había sido rechazada por la editorial local. Solo tuve que irme hacia occidente para encontrar alguien que sí supo darle valor.
Les recuerdo otra vez que mis novelas están en Amazon y que me vendría muy bien que las compraran. Necesito un yate nuevo para salir a pescar porque no hay comida en los mercados, y un helicóptero enchapado de oro para ir a ver a mi hija ahora que no hay transporte urbano. Aquí los enlaces:

Sistema de IA en Godot, con Resources


Sí, es posible hacer un sistema de Inteligencia Artificial en Godot usando Resources, equivalente al de Unity que empleaba ScriptableObjects. Por cuestiones personales (o sea, vagancia), no he alcanzado el mismo nivel que en el prototipo de Unity y también porque el código de búsqueda de caminos va a cambiar drásticamente en la rama 4.0. Es decir, que trabajar en eso es por gusto y el combate como tal tendrá que esperar unos meses.
Encontrar la idea me ha tomado algo de tiempo y el punto de partida lo encontré estudiando el código fuente del port para Godot de Wesnoth. Se siente un poco raro volver a la época en que descargaba el código fuente de juegos libres a mansalva y me sumergía en ellos para aprender cosas. La diferencia entre Unity y Godot mayormente consiste en que Godot no permite múltiples scripts en un solo nodo. Por tanto, tuve que distribuir los scripts en una jerarquía de nodos, con el padre como gestor de estados y los hijos conteniendo los estados de la IA. Cada estado ejecuta diferentes bloques lógicos, que están almacenados como recursos. En un principio, había incluido la IA dentro de la escena de cada personaje, pero eso me planteaba un problemita mínimo: cada NPC que requiriera una IA diferente necesitaba su propia escena. Aquí les aclaro que en Godot, todo es una escena. Lo que en Unity sería un prefab, aquí es una escena que contiene, digamos, el modelo del personaje, su forma de colisión, scripts, etcétera.
Cuando tu acceso a internet se mide por horas o por volumen de tráfico, tiendes a ponerte un poco tacaño con los megabytes, por eso me pregunté si podía optimizar un poco más. Y sí, era posible, si creaba la IA en la escena de juego y no en la del personaje. Eso me permite reutilizar una misma escena de personaje con varias IA diferentes. Ambos métodos no son excluyentes, si necesito reutilizar personajes con la misma IA, puedo incluirla en su escena plantilla y ya.
Por ahora es solo un sistema muy primitivo sujeto a cambios, pero creo que la idea base es correcta, porque de hecho, no la inventé yo, sino gente mucho más experimentada.

Reseña: Seven Eves

Lo prometido es deuda, y en este caso, el compromiso con el grupo de escritores de Espacio Abierto era una reseña de Seven Eves, de Neal Stephenson. Llevaba ya unos añitos sin leerlo, porque luego de leer algunas de sus mejores novelas, otras que eran sagas no las tenía completas. Reamde me pareció una verdadera hazaña, por su extensión y porque la historia en un momento determinado cambia de rumbo totalmente, y eso sin dejar de mantenernos enganchados.
En fin, volviendo a Seven Eves. Esta es una novela de ciencia ficción, pero de las duras. La premisa es muy simple: algo ha roto la Luna en pedazos y esos trozos van a desencadenar una reacción en cadena que ocasionará una lluvia de fragmentos sobre la Tierra, extinguiendo toda la vida y haciendo inhabitable el planeta durante milenios. Algo así como que el cielo se va a caer y el rey lo debe saber, pero a escala Cixin Li. A lo bestia, vamos. Es casi imposible  sobrevivir bajo tierra o bajo el mar, el único camino es el espacio.
La cosa está de apaga y vámonos, pero solo quedan dos años para idear un plan para salvar a unos pocos humanos que perpetúen la especie. Sin embargo, la novela no se desarrolla en un futuro lejano donde el vuelo espacial es algo común, para nada. La humanidad cuenta únicamente con la Estación Espacial Internacional y la única libertad que se ha tomado el autor es adjuntarle un asteroide, puesto ahí para pruebas de minería espacial. Unos pocos miles de hombres y mujeres serán los afortunados, pero tampoco lo tendrán fácil, porque como decía, el nivel tecnológico es casi igual al de la actualidad y no existe experiencia ni herramientas para crear hábitats espaciales. Imaginen la titánica tarea de poner en órbita miles de personas y material para subsistir durante miles de años.
Algunos considerarán la carga científica de esta novela un poco excesiva, pero en su mayor parte, los conflictos vienen dados por las tremendas dificultades a enfrentar para salvar parte de la humanidad. ¿Cómo garantizar alimentos? ¿Oxígenos? ¿Espacio vital? ¿Gravedad? Stephenson, al menos en mi caso, consigue que a pesar de la charla técnica la trama se mantenga interesante y moviéndose hacia adelante. Un poco más allá de la mitad, los conflictos interpersonales hacen aparición, pero no les adelanto en qué terminan ni el peso que tienen en la historia.
Sin embargo, en el último cuarto esta carga sí se vuelve pesada. El autor nos abruma con un montón de detalles acerca de hábitats y estructuras espaciales colosales, muy difíciles de visualizar a menos que seas un especialista en la materia. El infodumping es tan violento que detiene por completo la trama y la novela decae muchísimo, para llegar a un breve desenlace que es casi decepcionante.
Aunque esto le quita puntos, tengo que decir que el libro consigue hacer que nos preguntemos qué sucedería de tner que enfrentar un evento catastrófico de ese nivel. Y la respuesta pone los pelos de punta: nada. Entonces, ¿recomendaría esta novela? Por supuesto que sí, a pesar de los detalles que señalo. Neal Stephenson es un escritor que casi siempre vale la pena leer y este libro no es la excepción.

Estamos en cuarentena

¡Aunque no cerrados! Solo estoy ausente al trabajo la mayor parte del tiempo y desde casa no me es posible usar internet, salvo para lo esencial. O sea, chatear con los colegas escritores y jugar Regnum. Y últimamente ni tanto de Regnum.
Ya el verano está aquí, por eso el horario de mediodía y tarde es de siesta y apartarse de la PC, para evitar calentarla. Ni siquiera estamos en junio y ya hay récord de temperatura en un lugar no muy lejano.
Entonces, ¿qué estoy haciendo? Godot, principalmente. He estado adelantando un poco en el port del  Laberinto, desarrollando un prototipo de juego 3D y experimentando con la rama 4.0. De esto último les advierto que lo eviten, excepto para cosas muy simples. Ahora mismo, la 4.0 no crea proyectos y no los importa. Mi solución fue usar un proyecto que ya estaba en el listado y cambiarle el nombre (ojo, la carpeta sí debe conservar su nombre) para poder trabajar sobre ese. Tampoco se puede arrastrar un archivo hacia el panel de propiedades. A pesar de todo, la estabilidad es sorprendentemente buena.
En cuanto a la 3.2, sigo descubriendo que hay muchas cosas que son muy fáciles de hacer, aunque a decir verdad hay otras que aún faltan y faltarán por un buen tiempo.
En caso de que aún no estés convencido y quieras probar una opción más profesional, Unigine al fin ha decidido lanzar una Community Edition, para que los desarrolladores puedan probar el motor libremente y pagar solo cuando superen un monto específico que no recuerdo ahora. Vale la pena echarle un vistazo.

De gatear a caminar

Ya he alcanzado ese punto de inflexión donde se pasa de tener que dejar todo para después que se hagan preguntas a poder trabajar con más eficiencia. En estos días de encierro he dedicado tiempo a portar El Laberinto del Saber de Unity a Godot, una tarea que tenía abandonada desde hacía un mes. Con un poco más de conocimiento ahora, pude dedicar varias horas seguidas al asunto y ver un avance notable.
En concreto, ya he implementado el uso de las puertas, puntuación, las bonificaciones, y el conteo de tiempo. Se dice fácil, pero eso implica tener que cambiar muchas cosas, porque la forma en que se manejan las colisiones en Unity es diferente a la de Godot. Para empezar, ahora tengo que lidiar con un TileMap, que aunque agiliza la creación de la escena, requiere sus detalles para determinar el tile que estás tocando.
Me queda lo más difícil: mover a los fantasmas persiguiendo al jugador y abandonar cuando ya no esté visible, una IA sencilla, pero que tiene sus cositas. Por suerte, Godot sí ofrece un sistema de navegación en 2D, que Unity no tenía, lo que debe facilitar este tema.
De continuar trabajando así, en un mes podría volver a tener un prototipo y comenzar a pulir otra vez.

Sobre la factibilidad de los virus como armas


Un par de cosas llamaron mi atención sobre este tema en los días recientes y le estaba dando vueltas a escribir sobre el tema, desde el punto de vista de un escritor/guionista. Es factible el uso de virus como armas, ya sea por países o terroristas? En principio, sí, pero en la vida real, la situación tiene sus aristas.
Empecemos por el principio. En la nueva temporada de Strike Back, unos extremistas musulmanes croatas se apoderan de un virus, ya saben con qué propósito. Por suerte, ahí está la Sección 20 para fastidiarlos. En un frenético combate, el virus se libera y de inmediato, los terroristas a su alrededor se contagian y mueren en pocos segundos. Obviando el hecho de que no sé si sea posible que un virus mate a su víctima en segundos, esto de por sí lo convierte en un arma casi inútil, que causaría a lo sumo el mismo daño que una bomba tradicional. Al liquidar al su portador en segundos, el virus no puede propagarse y simplemente mataría a las personas cercanas que no puedan correr lo suficientemente rápido. Además, vamos a suponer que se consigue un ataque o dos con cierto éxito en la cola de Viernes Negro, replicar el virus para realizar otro ataque requeriría de un laboratorio, personal medianamente calificado, materiales no tan accesibles o rastreables por las agencias de seguridad, y quién sabe cuántas otras dificultades.
Es más sencillo y barato forrar de explosivos a un voluntario y llenarle los bolsillos de clavos. Siempre es posible conseguir más explosivos, más clavos y más voluntarios. ¿Significa esto que un virus o bacteria no es una buena arma terrorista? Pues no tan así, y luego lo veremos.
Lo otro que llamó mi atención fue la habitual teoría conspiranoica acerca de origen artificial del virus, creado, por supuesto, por EUA para afectar a nuestros hermanos los chinos, a quienes les debemos tanto (y nunca mejor dicho). Esto, alimentado por ciertas declaraciones de un funcionario norteamericano que reconocía que la epidemia, al afectar la economía china, beneficiaba la americana. Probablemente un tipo tan corto de miras o imbécil como los conspiranoicos, y ahora veremos por qué.
En el mundo actual hay dos cosas muy conectadas: 1- Todo, 2-Todo lo demás. Las distancias se han acortado mucho, puedes estar en algún lugar de Europa, tomar un tren y varias horas después estar en otro país de Europa, a diferencia de Cuba, donde puedes coger un tren y varias horas después no haber salido de la estación. No hablemos de aviones (y no me refiero a que Cubana de Aviación no tenga aviones, sino a todo lo contrario), que pueden transportar la infección y dispersarla por varios continentes a otro en pocos días. Suponiendo que desarrolles un virus, más o menos letal (la idea no es matar, sino incapacitar gente y colapsar el sistema de salud y la economía de un país), con un tiempo de incubación adecuado de varios días que permita su propagación, nada impide que en poco tiempo tengas ese mismo virus en tu propio patio. De hecho, lo tendrás, y es lo que le ha pasado a Estados Unidos. El funcionario imbécil que creía que solo China estaba en problemas ahora tiene que estarse dando cuenta de su error. Las armas bacteriológicas tienen doble filo.
En este caso sí es factible para un grupo terrorista usar un virus como un arma. Por lo general, los terroristas no tienen una economía ni un territorio o población que les preocupe, más bien sería deseable que la epidemia se extendiera lo más posible. Si mueren inocentes entre los míos, es la voluntad de Dios. De hecho, es probable que lo hayan intentado o planeado, pero la práctica debe haberles demostrado que nada supera a una bomba tradicional en un lugar concurrido.
Así que ya sabes, si en algún momento tienes que escribir sobre un virus como arma, evita estos errores. Te harán ver muy estúpido, porque cualquiera con dos dedos de frente se dará cuenta de que no te detuviste a pensar e informarte. Suena muy interesante eso del virus creado por la CIA, financiado por Bill Gates, para derrumbar la economía de los enemigos del imperialismo y de paso que las farmacéuticas (en las que Bill Gates tiene participación) se forren. Pero la vida real no funciona tan así.

Y el problema es la escala


Tal como pensaba, el problema con el espacio de terreno era solucionable con modelos a la medida correcta. Me había dejado llevar por la escala del modelo de personaje, que estaba alterada, lo que me forzaba a escalar hasta 100 veces más el resto de las cosas. Si tienes un hombre de 100 metros, un terreno de 1000x1000 metros es nada. Todos los otros modelos que había generado con MakeHuman se exportaron de la misma forma, así que tuve que crear otro y asegurarme de fijar la unidad de medida en metros.
Lamentablemente, todo el prototipo de escena, el desplazamiento de la cámara y el del personaje están mal y tengo que rehacerlos. Por suerte, aunque hay espacio de sobra, la escena es mucho más manejable y no hay cuelgues al generar la malla del terreno o calcular los datos de navegación.
El lado bueno, porque siempre hay un lado bueno, es que como dice mi jefe, es que se aprendió algo. Durante el proceso de generar el nuevo personaje apliqué un tutorial reciente para transferir las animaciones de un esqueleto a otro y resulta que también me encontré con problemas de escala en ese asunto. Pero este venía por otro lado.
Para prototipar rápido utilizo animaciones de Mixamo, como he explicado, pero estas animaciones, según me aclara el autor del tutorial, están escaladas por debajo, en vez de por encima, si no ando muy equivocado. Conclusión, que para poderlas utilizar tengo que descargar el esqueleto con su malla o la geometría se deforma. Nada, que eso no es peo que rompa calzoncillos, como se dice vulgarmente. Aunque no en la forma óptima (cosas de Godot, que me obliga a replicar cada animación en cada modelo), ahora puedo utilizar las animaciones de Mixamo otra vez.
Me quedan varios días de trabajo rehaciendo escenas, regenerando y volviendo a cortar los modelos, en fin, trabajo aburrido. Todo eso luchando con un mouse defectuoso, o quizás sea la falta de una superficie adecuada.

Nueva tarjeta


Al fin me ha llegado mi nueva AMD RX 5500 XT. Probabemente esté conmigo un buen tiempo, porque no sé cuándo habrá otra oportunidad de conseguir una tarjeta de video con tantas facilidades. Sin embargo, llegó con una mala noticia: Linux Mint 19.1 no la soportaba. De mi consulta en el foro no me quedó claro si actualizarme solucionaría el problema, pero peor era no hacerlo, así que hoy me gasté dos horas de internet (ojo, que cuestan lo suyo acá en Cuba) intentando subir a la 19.3 Tricia. Sin embargo, resultó ser que Tricia no quiso venir conmigo ni atrás ni alante, por mucho que lo intenté. Pero como dice ese feo reguetón que anda por ahí, si no me quieres tú, me quiere la otra, y dio la casualidad que Tina sí funcionó. Y además, logré instalarle el controlador amdgpu 19.50, que incluye soporte para la familia 5500/5700. Ténganlo en cuenta si deciden comprar una 5600.
Para compensarme el desperdicio de horas, el código de hoy del repositorio de Godot compiló sin problemas, aunque de momento de poco sirve. El plugin de terrenos no funciona y en esencia, cualquier cosa que implementes hoy pronto podría dejar de funcionar, pues se vienen ciertos cambios, el más drástico, que los nodos Spatial pasarán a llamarse Node3d. Por eso he tenido que seguir trabajando con la 3.2 y ahora que he recuperado mi entorno de desarrollo natural, he podido hacer ciertas pruebas con el terreno.
En concreto, he estado probando los límites del plugin en cuanto a tamaño. En Windows, me resultaba imposible generar la malla de un terreno de tamaño 2049, a menos que subiera el LOD a 2. Eso reducía el conteo de polígonos de 8 millones a unos 2 millones, ago un poco más manejable. Sin embargo, crear datos de navegación con esa malla no funcionaba y no me he molestado en averiguar por qué. En cambio, en Linux sí es posible generar la malla, incluso con 8 millones de polígonos. Quizás sea cosa de manejo de la RAM por parte del sistema operativo. Pero no todo es color de rosa: Godot no logra calcular datos de navegación con tantos polígonos (recuerden que además hay otras cosas en la escena y la gestión de memoria de Godot es prehistórica).
Pero les tengo buenas noticias: un terreno de 1025 debería bastar, en dependencia de la escala de sus modelos. En mi caso, las escalas están alteradas y el personaje es diez veces más grande de lo que debería. En una escala 1 unidad=1 metro, me hubiese alcanzado perfectamente el terreno de 1025 para la escena de mi guión. Habría que ver el desempeño del nuevo NavigationServer en situaciones de escenas muy grandes, apoyado además con el nuevo gestor de memoria.
Volviendo a la nueva tarjeta de video, no he podido calcular cuánto he ganado en Linux, porque acabo de darme cuenta de que no tengo benchmarks con la RX 560, solo de la viejísima R7 250. Además, las pruebas de Unigine no funcionan porque falta alguna librería, que no se si es posible instalar o si simplemente ya quedó obsoleta. En Windows sí he podido sacar algunas conclusiones, gracias a Afternurner y al nuevo panel de control de AMD que guarda una estadística de los FPS de algunos juegos. La ganancia es generalmente de unos 10 FPS, excepto en Divinity Original Sin 2, que casi duplica los FPS anteriores. La 5500 XT de 4 Gb consigue acercarse los 60 FPS a 1080p en todos los juegos que tengo, incluso en Greedfall que es un poco pesado. Mantenerse en 60 o sobrepasar esa cifra sí le resulta un poco difícil, por eso yo recomiendo que si tienes dinero, te vayas por la 5700 o la 5600 recién salida, o quizás aguna RTX de Nvidia. Pero no se puede pedir más a un hardware que cuesta entre 170 y 200 dólares, más impuestos.

Unity 2019.3.1, Godot 3.2


Justo con el sismo que casi me echa la casa abajo, han salido Unity 2019.3 y Godot 3.2. No voy a detenerme en los cambios, porque ya otros han abundado a lo largo de los últimos meses al respecto. Unity, en mi opinión, se ha hecho esperar más de la cuenta, tanto, que ni siquiera he tenido mucho interés en probarlo. Esperaré a la 2019.3.1. En esta versión vienen cosas interesantes, como UIElements, pero la 2020.1 en mi opinión traerá mejoras más importantes, como la nueva API de redes. Como viene siendo habitual, debería salir en marzo o abril.
A pesar de los muchísimos cambios interesantes que trae Godot 3.2, tampoco es la versión que estoy esperando. Esa sería la 4.0, con el nuevo renderizador basado en Vulkan, por ahora bastante inestable. La rama Vulkan aún está en una etapa bastante temprana, según el último reporte de Juan Linietsky, en febrero debería completarse el proceso de portar las funcionalidades del 3.2 (ojo, muchas de las cuales han quedado mejor que antes, evidencia de que el cambio a Vulkan fue una decisión acertadísima), para entonces pasar a las nuevas. Aquí sí es más difícil hacer predicciones, ya saben que no tengo una bola de cristal (solo dos de las normales), pero según el calendario, entre mediados y fin de año es la fecha de lanzamiento oficial. Y no esperen estabilidad antes de mayo, cuando todo lo que funcionaba antes funcione correctamente en la nueva rama. Aunque según tengo entendido, hay valientes que se han atrevido a hacer juegos completos con la 4.0. No digo que no se pueda, si te tomas el trabajo de salvar cada vez que hagas un cambio.
De momento, pienso ir moviéndome a la 3.2 con los dos proyectos serios que tengo entre manos (portar el Laberinto del Saber a Godot es uno de ellos), en espera de que la 4 mejore lo suficiente como para ser usable.

No puedo hacer retargeting en Godot, pero sí otras cosas

Ayer tenía planificado dedicar un rato a escribir, pero primero quise quitarme la duda de una vez por todas. Se ve que soy un poco testarudo a veces, pues según mis consultas, el retargeting, en la forma en que yo quería hacerlo, no es posible en Godot. Para entrar en contexto, lo que pretendía era utilizar una animación descargada de Mixamo en un modelo exportado sin animaciones, con el propósito final de compartir las animaciones entre todos los modelos con el mismo esqueleto. 
Luego de echarle un vistazo al editor, probé el enfoque más obvio: exportar el modelo desde Blender e importar la animación en el editor. Eso, claro, no sirve de nada, no hay forma de hacer que el modelo utilice esa animación. Pero resulta que si abres la animación como una escena, la puedes guardar y desde el modelo, la puedes cargar. Había encontrado el Santo Grial! Pero no. Eso tampoco funciona. Lo intenté exportando a todos los formatos compatibles y nada. A propósito, los modelos importados desde FBX no incluyen un AnimationPlayer si no contienen animaciones, en cambio, los importados desde Collada sí lo tienen. En general, el exportador BetterCollada que provee Godot funciona mucho mejor en todos los aspectos.
Lo único que logré fue que el modelo se sacudiera un poco, pero la animación no funciona. Incluso probé usando la rama Vulkan, pero nada. ¿Por qué mi insistencia en conseguir esto? No es esencial para hacer un juego, pero creo que es más óptimo tener una sola animación y reutilizarla que tenerla repetida en todos los modelos.
Una vez que me había convencido de la imposibilidad de hacerlo, me pregunté si podría equipar items en el modelo del personaje. Y a esta duda sí encontré respuesta positiva casi de inmediato. Exportando el objeto, en este caso unos guantes, con su esqueleto (igual que lo hacía en Unity), y salvando la malla de su MeshInstance:





Hice otra copia de la malla de las manos, que en este caso serían las reemplazadas siguiendo el mismo procedimiento. Atentos, para que sea más simple, no abran el archivo importado como escena heredada o les dará un error al guardar diciendo que el objeto debe ser único. El cambio de uno por otro es simple: miren este script que añadí al nodo raíz del modelo del personaje:

extends Spatial

var gloves = "res://Models/male-alejandro-dae/iron_gloves_anim.tres"
var hands = "res://Models/male-alejandro-dae/male-hands.tres"
var equip:bool

# Called when the node enters the scene tree for the first time.
func _ready():
    equip=false


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
    if Input.is_key_pressed(KEY_SPACE):
        if !equip:
            var res = load(gloves)
            get_node("varsoi_male/Skeleton/varsoiM_hands").mesh = res
            equip = true
        else:
            var res = load(hands)
            get_node("varsoi_male/Skeleton/varsoiM_hands").mesh = res
            equip = false

No es para nada lo más civilizado, pero consideren que soy bastante nuevo en esto. Presionando Espacio, se montan y desmontan los guantes, los cuales siguen la animación del modelo correctamente.


A continuación me surgió la duda de si podría hacer lo mismo con un objeto sin animar, montado encima del cuerpo del personaje, por ejemplo, una armadura. ¿Seguiría la animación del personaje? La respuesta es sí. Utilizando un BoneAttachment, logré equipar la armadura más o menos donde debía ir. Aquí me encontré con dificultades, a diferencia de los guantes, la armadura no tenía la escala y rotación correctas. Raro, porque ambos provenían del mismo archivo blend (que si no recuerdo mal, pueden encontrar en OpenGameArt, cortesía del viejo equipo de The Key of the World), quizás se deba a la prsencia o falta del esqueleto. Pero la prueba demostró que es factible, pese a los detalles que surgieron. La armadura seguía los movimientos de traslación y rotación del torso del personaje bastante bien.
Aunque utilicé para casi todas las pruebas la rama 4.0, estoy seguro de que funcionaría todo igual en la 3.2 pues ahora mismo son muy parecidas. Excepto que la 4.0 es bastante inestable.
Supongo que después de todo valió la pena no trabajar en mi novela anoche (después de todo, ¿quién necesita la literatura?).

The road so far (aunque no estamos a final de temporada aún)


Es genial cuando todas las cosas te salen bien a la primera: creas código que funciona y las cosas se ven como debe ser. No es mi caso ahora, claro. No obstante, tengo que reconocer que algo he logrado avanzar en estos días de lidiar con Godot.
Luego de rastrear tutoriales por todo Youtube y preguntar mucho, he conseguido resolver algunos problemas y ganar experiencias. Por ejemplo, si quieren ver cómo usar raycasting en una escena 3D para desplazar el personaje, definitivamente lo mejor es el demo Navmesh oficial. De paso, ese mismo demo les ayudará en la parte de usar el camino calculado para mover al personaje. En cambio, no le presten mucha atención a la escena. Es cierto que funciona, pero la forma más correcta de hacerlo es crear un nodo de tipo Navigation y colgar de él todos los elementos (en el demo, la cosa está invertida, el Navigation cuelga de la malla que funge como escena).
A pesar de que la mayoría de los tutoriales y demos están orientados a juegos 2D, siempre aparecen algunas perlas. Evidentemente, que Godot tenga una comunidad de cierta envergadura ayuda muchísimo a encontrar alguien que haya intentado con anterioridad lo mismo que tú y haya sobrevivido para documentarlo. Yo mismo estoy pensando crear mi tutorial acerca de la vista isométrica en 3D, porque ya saben que no sé hacer otra cosa. Pero en comparación con lo que falta, esto es nada.
Uno de los experimentos que tengo pendientes es probar el soporte de red, crer un sistema de inventario y habilidades (pospuesto hasta que aprenda más GDScript) y cacharrear la rama Vulkan. Esto último sí podría probarlo pronto, en cuanto habilite los drivers Vulkan en Linux, porque el código fuente ya está descargado y compilado. Es más una cuestión de curiosidad que para uso real, porque no sé en qué estado estará esa rama, donde los cambios son drásticos. En caso de que no lo sepan, la rama Vulkan, o 4.0, debería venir detrás de la 3.2, a mediados o finales de año. Si no he entendido mal, en ella se reimplementa el gestor de memoria, viene el nuevo renderizador basado en Vulkan (obvio), nuevo método de iluminación global, y se arreglan (o arreglarán) muchas cosas.
Conclusión: lento, pero seguro, se van haciendo cosas. Recuerden que en casa yo no puedo acudir a Google, tengo que esperar a la mañana siguiente para consultar internet. Si tengo suerte, en la tarde ya tengo respuesta. Si no, hay que esperar al otro día. Veremos si para fines de este año ya tengo un mejor dominio de Godot o si la paciencia se me ha agotado y me he ido con otro (con otro motor dejuegos, no sean mal pensados).

Cacharreando 3d en Godot

Primer post del año, que espero que haya empezado por todo lo alto para ustedes, con mucha prosperidad y dinero. A ver si así al fin se deciden a gastarse unos dólares en comprar mi novela.
Aunque me tomé unos días de descanso no planificados para terminar de ver The Boys y The Witcher, ya he vuelto al trabajo. Más o menos. Sigo experimentando con Godot, aprendiendo y chocando con dificultades. El gran problema es venir de un motor profesional con un excelente soporte 3d, donde puedes hacer casi cualquier cosa que se te ocurra. Algo tan trivial como guardar la animación en un archivo y utilizarla en un modelo exportado a otro archivo es un lío complicado. Tanto, que justo ahora no sé decirles a ciencia cierta si es posible o no.
Solo ayer conseguí entenderme con las animaciones de los modelos, aunque en el caso específico en que las mismas están todas incluidas dentro del archivo exportado desde Blender. Y ya que hablamos de exportar e importar, tal como me esperaba, el importador basado en Assimp funciona bastante bien, pero no perfecto. Lo usual es que cuando falle, se lleve por delante al editor completo. Como todo software, incluso en los comerciales, la solución está en esperar a que mejore. Comparada con la de hace unos años, la biblioteca Assimp de hoy es una maravilla, créanme.
En cambio, mi experiencia exportando a glFT no fue tan buena. Había pequeñas deformaciones en el modelo y otros detalles que ahora mismo no recuerdo. Al final, el formato FBX producido por Blender probó ser un poco más confiable.
A continuación pienso dedicarme a mover el modelo por un mapa sencillo, quizás probar la navegación, para terminar con algunas pruebas de red. En la parte 2D, pienso hacer una prueba simple portando un nivel del Laberinto, en cuanto salga Godot 3.2. Al menos en 2D Godot no está tan atrasado, lo cual no quita que haya un montón de código que reescribir y otro montón de cosas que aprender.