@ agnasg

agnasg


Aforismos y sentencias mezcladas, estilo abril 2023

29-04-2023 11:30 AM

Sólo simios

Viendo el documental de los chimpacés en Netflix, llego a la conclusión que toda la premisa de “El planeta de los simios” es tan falsa como la promesa de un borrachín en la fiesta de navidad de su familia. Los simios no son más nobles o “humanos” que los humanos, o, en general, “mejores”. Son animales como todos los animales, incluyendo a los humanos: son despiadados si la situación lo amerita. Los humanos tienen sus méritos y no necesitan ser comparados con ninguna otra especie. Su superioridad moral y cultural, es indiscutible. Incluso Jonathan Swift en uno de los viajes de Gulliver usa una metáfora similar, indicando que los caballos son más condescendientes, más mesurados, más nobles que los humanos. No, no lo son. Nosotros somos capaces de alcanzar eso y mucho más, sin que seres superiores nos enseñen a lograr esas cualidades. No existen esos seres, al menos no en la tierra. Nosotros mismos tenemos que aprender. Nosotros solos tenemos que aprender a convivir de una forma racional, mesurada, humana con nosotros, entre nosotros. Y no, el resentimiento no nos ayuda, sea Cleopatra blanca (como lo fue) o negra.

Tómate un whisky tranquilo

Hace 10 millones de años, nuestro ancestro ( y de los bonobos y chimpancés) tuvo una mutación que le permitió procesar el alcohol [1]. Sin esta mutación, inclusive en cantidades mínimas el alcohol puede ser venenoso. ¿Por qué esta mutación fue importante? Porque de esta manera nuestros ancestros pueden comer frutas que ya están en fermentación, es decir, casi podridas. Otros primates solo comen frutas verdes o ligeramente maduras, y no todas las frutas. Con esta capacidad de generar energía a partir del alcohol, un homínido conocido como Homo Erectus pudo separarse del resto de sus primos que se la pasaban en los árboles, y deambular por el campo recolectado todo tipo de frutos, sin importar su nivel de maduración. El problema que tenía el macho alfa del Homo Erectus, es que buscar los frutos era un proceso lento, y su tribu se dispersaba por el campo (a diferencia del chimpancé que prefería árboles frutales abundantes en frutos, y todos permanecían juntos). Eso no le convenía, porque perdía poder y control sobre su subalternos. Además, las mamás con sus bebes se movían más lento y no tenían suficiente alimento. Así que este macho alfa empezó a exigirle a sus capataces que buscaran los frutos y los trajeran de vuelta para alimentar al resto de la tribu: había comenzado la recolección. Como traer los frutos con las manos los obligaba a caminar en dos patas, el homo erectus comenzó a erguirse, y de ahí salió su nombre. Dos millones años después, científicos de todo el mundo siguen especulando qué fue lo que hizo que el homo erectus caminara en dos patas. La explicación, como siempre, puede ser la más sencilla.

[1] Merlin Sheldrake, Entangled Life, 2020

Hacer lo que tienes que hacer

Cuando eres padre, todos los hijos del mundo son tuyos, tal como dijo el poeta. Tu preocupación va a ser para toda la vida, a veces difícil, otras veces más facil. Cuando tus hijos se casan, te despreocupas un poco y te preocupas de otras cosas. A veces, justo cuando estás fuera de guardia, el día menos pensado, un acontecimiento te descarrila y te regresa las preocupaciones al nivel de antes. Harás todo lo que tengas que hacer. Debido, o no debido. Legal o ilegal. Porque un papá, llegado el momento, va a preferir la muerte a fallarle a un hijo. Si tú no sabes de qué te estoy hablando, te tengo una muy mala noticia.

Padre

Tu papá, pase lo que pase, siempre, en cualquier circunstancia, siempre tiene la razón.

Nietzsche

Tantos creyentes en dios implica pocos creyentes en el padre. El padre es algo que debemos superar, y esa será nuestra mayor superación, la reina de todas las superaciones, cuando nos convertimos en padre. Y entonces todas las ansias se sacian, toda la sed, todo el hambre que hemos tenido queda satisfecho. Convertirnos en padre nos convierte en seres superiores. Y, ¿qué hay más hermoso que un ser que se ha superado a sí mismo, que ha alcanzado a su padre y se ha convertido en su igual?

El hijo pródigo

No lo he dicho, pero el pasaje más impactante para mi en la Biblia es cuando el padre del hijo pródigo dice, “… celebremos todos, porque este, mi hijo que daba por perdido, ha regresado”. ¿Qué puede darnos más felicidad que recuperar lo que hemos perdido? ¿Y si eso que recuperamos, es nuestro hijo?

No es coincidencia

No es coincidencia que un aforismo que habla de Nietzsche, preceda a un aforismo basado en la Biblia. ¿Hay un lector más ferviente, más enconado, más aguerrido, ferviente lector de la Biblia, que Nietzsche? ¿Alguien está al tanto de eso, me refiero, aparte de mí?

Ancient Anguish Review

26-03-2023 10:11 AM

Ancient Anguish (AA). El mud. Periódicamente, cuando no hay algún otro juego en la bandeja, comienzo a buscar algún mud para jugar. Antes no era así, simplemente jugaba Batmud. Todavía hay una categoría de posts que hablan sobre él. El último mud que jugué fue Realms of Despair, lo jugué el año pasado. Lamentablemente me borraron el personaje, y no tengo intenciones de crear uno nuevo. Me pareció desbalanceado de todas maneras.

¿AA review?

Ok, basta de hablar de otras cosas y concentrémonos en Ancient Anguish (AA). Me parece encantador, como hecho por un niño pero que sabe lo que está haciendo. O, quizás no. O quizás eso no importa sino el ambiente que se respira. No me refiero a los otros jugadores, en realidad solo he visto 8-10 la mayor parte del tiempo. Me refiero a que encuentras elementos que te atrapan desde el día uno. La forma como ganas experiencia y dinero repartiendo paquetes, y al mismo tiempo conoces la ciudad. Eso es divertido y perfectamente integrado al juego. Me refiero a que alrededor de la ciudad inicial no hay monstruos o animales que te maten de un zarpazo. Puedes ganar experiencia matando ratones y lagartijas, sin mayor peligro, y si pierdes mucha vida simplemente sales corriendo. Otros juegos, desde demasiado temprano te dejan atascado con un animal o monstruo del que no puedes huir o matar, lo que es una muerte segura. Y nadie está en un juego para que lo maten. Eso no es divertido.

Tú no necesitas mapas

Al comenzar a jugar lo primero que descubres es que no hay mapas. No tienes el comando “map”. Venden unos mapas en la tienda de Hanza, pero solo te sirven cuando abandonas la ciudad de Tantallon, y cuando eso sucede, ya han pasado unas 10 horas de juego, y ya eres nivel 5+. El detalle es como llegar ahi. La verdad, es más una psicosis que otra cosa. Si eres un jugador de muds, tú no necesitas mapas.

Eventualmente descubres el comando prompt, y ahí puedes colocar diversas variables del juego. Cuánto XP tienes (eXPeriencia), cuánto SP (Spell Power), cuánto dinero, cuánta XP has ganado en la sesión actual, etc. Pero también puedes incluir las variables XCOORD y YCOORD, que te indican dónde estás en el mundo. Lo que tienes que hacer es memorizar las coordenadas de cada sitio (sí claro, yo tengo un cuaderno de notas). Al final te das cuenta que los mapas son para novatos.

Pero si definitivamente necesitas un mapa, en el wiki hay uno de Tantallon, y en este sitio (Anguish Research?) hay muchos mapas más en PDF y html, y puedes ver las coordenadas de cada sitio. Todo un lujo.

La búsqueda del barco fantasma

Los primeros niveles son repetitivos. Repartir paquetes, ir al parque de los nuevos (8w s enter park), regresar al hotel a descansar. Te das cuenta que para acelerar el proceso y recuperar tu HP (Hits Point) o vida (también los SP), necesitas hacer healing (sanación) más rápido, en el hotel puede tardar 20 minutos. Tomas té, fumas un cigarro, meditas (meditate). Todo ayuda pero todavía es lento. Oyes el rumor de un barco fantasma donde hay un camarote en el que el healing es super rápido. El problema es la dirección: 29n 5e. Eso es fuera del pueblo, bastante lejos, no quiero morir, así que mejor no. Será cuando sea grande.

Cuando haces bing nivel 7, decides que es hora de emprender la aventura. Te sudan las manos, das dos vueltas sobre tu eje imaginario y definitivamente emprendes la aventura. Descubres que no hay realmente peligro, alrededor del camino hay algunos animales inofensivos, y no te atacan. Finalmente llegas a 29n 5e. Has aprendido que para entrar en una casa, o en un sitio el comando es “enter”, y que aparece listado en las opciones de movimiento “Obvious directions are: north, east, south, west, enter”. Pero aquí no hay “enter”. Lees distraido la descripción del lugar. No hay barco aquí. “¿dónde está? Te regresas, cuentas tus pasos de nuevo, sigues más al norte, consigues el pueblo de los Hobbits, Hobittat, exploras el lugar, sales, sigues buscando. Nada del barco. Regresas a 29n 5e. Nada. Lees de nuevo la descripción y ahora te das cuenta que habla de un “shipwreck” (naugragio). Si hay un barco aquí. Empiezas a probar cosas improbables “enter”.

Funciona.

Este es uno de esos momentos que buscas en los juegos: el “¡ajá!”

Hay sitios donde el movimiento no está listado entre las opciones, y este es uno de esos sitios. Hora de comenzar la aventura dentro del barco. Conseguí rápido el camarote donde se supone el healing (la sanación) es más rápida (si la puerta está cerrada, se abre con “open north door”). También hay un quest en este barco, hay que matar al capitán. Lo intenté pero con el primer golpe me quitó la mitad de la vida, así que supongo que será después. Huyo despavorido.

Manor

Otro sitio para sanar rápido es en el Manor (8n e ne n). Subes a la alcoba y ahi la sanación es mucho más rápida. Para acostarte en la cama se usa “lie on bed”. Como digo en la sección siguiente, este parser [1] es bien torpe. Si usas “sleep” te dice “You can not find a comfortable place to rest.” (no consigues un sitio confortable donde dormir). Inclusive lo dice estando acostado en la cama que supuestamente dice que es un lugar confortable: “You lie down on the comfortable bed. It feels like a wonderful place to take a nap.”

[1] Parser tonto (el parser es el mecanismo interno del juego que interpreta tus comandos)

Bugs.

Muchos. Incomprensibles. Por ejemplo,

> lie                  /* esto me permite acostarme a descansar */
> w                    /* caminar al oeste */
You must be standing.  /* me tengo que levantar primero antes de caminar */
> enter park           /* le digo que entre al parque y me permite hacerlo */
>w                     /* intento caminar, si entré al parque debo estar de pie */
You must be standing.  /* je, je. Bug! */
> lie down             /* le digo que me quiero acostar */
You cannot do that.    /* no puedo */
> lie                  /* ? */
You lie down.          /* ¿y entonces? */

Vamos a no hacer leña del árbol caído.

Idiosincrasia

Todos los muds son diferentes, pero Ancient Anguish (AA) lo es es una forma particular. Los muds igual que otros juegos de rol usan la “experiencia” o “xp” como moneda para comprar habilidades, subir de nivel, adquirir destrezas, etc. Al, por ejemplo, ejecutar el comando “advance” para subir de nivel, se consume una experiencia, pero el comando “score” sigue mostrando la misma experiencia de antes, como si no se hubiera consumido. Es decir, la xp que se muestra es el total que has ganado, lo hayas consumido o no. De esta forma, no tienes idea de cuánto te falta para el próximo nivel, tienes que ir a donde quiera que sea donde subes de nivel (la sede de tu clase) y ejecutar el comando cost, y ahi aparece cuánto te falta o si puedes subir de nivel.

Existe una variable SESSIONXP que te dice cuánta experiencia has ganado, pero si la consumes, te resta lo que hace que si no has ganado experiencia pero has consumido en la sesión actual entonces aparece un número negativo, -123, por ejemplo. Buena suerte sacando la cuenta de qué significa eso y en cuál contexto.

Nota: esto es cierto para los niveles, es decir, cuando haces “advance”. Cuando haces “advance {stat}” donde {stat} es algún stat (constitution, intelligence, strength, dextery, wisdom) si resta del total de XP. La cuenta, de todas formas, sigue siendo confusa por lo inconsistente. Estoy seguro debe haber una explicación, pero para un jugador experimentado de RPGs como yo la explicación es evasiva.

Comandos no documentados, en ninguna parte

Muchos, pero particularmente “unwield”. Este comando te permite dejar de usar un arma, y poder usar otra. Si tratas de usar otra arma te dice “You are already wielding a weapon.”. Existe un comando “remove” pero es para la armadura.

En cada sitio hay una forma diferente de cómo saber cómo opera el lugar. A veces “help shop” te dice, y puedes hacer “list” para ver qué venden y “buy” para comprar. Pero otra veces tienes que hacer “look at sign”, o “look at board”, o “look at wall” y otras combinaciones similares.

Otras veces no hay nada que indique qué hacer y te quedas sin saber si había que hacer algo. Por ejemplo, en el cuarto de mi clase (mago), donde se avanza de nivel, puedes ejecutar “list” y te aparece una lista de quests (misiones). No hay forma de saber eso (me puse a ejecutar comandos sin sentido a ver pasaba algo). Estuve intentando descubrir qué más se puede hacer con eso y dónde está la descripción de los quest sin éxito. Parece que es el sitio donde tú sabes cuántos quest has resueltos, y cuáles te quedan por resolver. Todavía no he encontrado documentación de esto. Es algo que tengo que descubrir solo. ¿Es eso divertido? A veces.

Manejo de equipos

En un RPG normalito, parte del juego es conseguir mejores armas y mejores armaduras a medida que avanzas. Estos equipos te ayudan a conseguir mejores equipos, los cambias, desechas los viejos y obsoletos y así avanzas. Eso se llama progresión, progreso, etc. ¿Luce divertido verdad? Además, resulta lógico en cierta forma. Pero no necesariamente las cosas funcionan de esa forma en los muds. Los muds tienen una guerra contra el sentido común desde hace 4 décadas.

En AA el manejo de equipos es nulo: lo que consigues lo pierdes al terminar la sessión, o con el reboot, que es cada 2 días o algo así.

Cuando me dí cuenta de esta realidad no lo podía creer. Pero lo encontré explicado en un par de sitios, por ejemplo aquí: “Most gear in Ancient Anguish does not persist once your character quits their current session. The same applies when the server is rebooted (once every 2 days). Each time this happens, you will need to obtain your gear again. ” (La mayoría del equipo en Ancient Anguish no persiste una vez que tu personaje abandona la sesión actual. Lo mismo ocurre cuando se reinicia el servidor (una vez cada 2 días). Cada vez que esto ocurra, tendrás que obtener tu equipo de nuevo.).

Esto también se encuentra documentado en “help statue”:

“Después de un cierto número de minutos de inactividad o ser enlace muerto, serás
expulsado del juego, y todos los objetos de valor en su poder serán vendidos.”

Tengo la impresión que los jugadores con experiencia (que tienen años jugando AA) se quedan conectados permanentemente para no perder el equipamiento. Hay unos lockers en “w n w”, pero tienen un costo. Para un nuevo en el juego es una pesadilla, y tengo la impresión que esta va a ser la razón por la que voy a dejar de jugar a AA eventualmente. No es solamente frustrante tener que preocuparte por el arma y la armadura, sino que es aburrido. Además el truco de quedarse conectado no funciona para mí, por razones tengo que desconectarme con frecuencia. Y cuando no, mi internet está inestable últimamente y parpadea, y eso puede hacer que la sesión se cierre. Y perdí mi staff y mi chaqueta.

Nota: si te desconectas por pocos minutos puede ser que encuentres tus equipos en tu inventario. Es una ruleta rusa.

¿Conclusión?

AA es divertido, tiene todos los ingredientes para entretenerte durante el tiempo que lo desees, y vences el choque cultural en pocas horas. Te acostumbras a él con facilidad, y terminas riendote de sus maneras y obsoleta forma de manejar los elementos del juego. Si buscas “Ancient Anguish Review” en google aparece un hilo en reddit, con un review del juego (y un comentario muy acertado). No estoy 100% de acuerdo con ese review, pero sí con la premisa básica: el juego es difícil artificialmente. Y es una lástima porque realmente el juego te atrapa. Como dije al comienzo, yo juego con frecuencia nuevos muds todo el tiempo y estoy buscando una nueva casa desde que abandoné BatMud, donde estuve 8 años. Así que he probado al menos unos 8-10 muds en todo este tiempo y ya se reconocer si un mud tiene o no potencial. Hay juegos como Sindome que no solamente es difícil, sino agresivo y repulsivo, hasta el punto que el momento más divertido es cuando dejas de jugarlo. Y hay otros juegos (Carrion Fields, Aardwolf, Genesis, Lusternia y Realms of Despair) donde siemplemente dejas de jugarlo un día sin motivo alguno, simplemente no te conectas más. A mi no me va a suceder eso con AA. Te mantiene motivado. El problema es que como dije anteriormente, el manejo de equipos es un problema difícil de tolerar, y con el tiempo puede ser la razón por la que deje de jugarlo.

Enlaces

Para jugar:

  • hostname: ancient.anguish.org
  • port: 2222

Mudlet: Siempre recomiendo Mudlet como cliente. Aunque en la página del juego también hay formas de jugar con un cliente hecho en flash java que no recomiendo por supuesto.

http://www.anguish.org: la página del juego. Retro, parece una antiguedad. Se ve obsoleta inclusive para los años 90. Me encanta.

Newbie guides: absolutamente el mero comienzo de todos los inicios para el novato que no sabe nada.

Mapas, información general: descargar los mapas en html. Particularmente en GUIDES/13-Directions.html aparecen las direcciones en formato 17w, 3n, enter para llegar a casi cualquier sitio.

Más direcciones, post en el foro. Aquí hay lugares que no aparecen en el listado anterior (GUIDES/13-Directions.html) y viceversa.

Información sobre cosas que hacer y otros tópicos. No es de mucha ayuda porque no tiene detalles, pero son pistas que pueden servir de algo.

El foro. Info general, y boards dedicados a cada clase, armamentos y armaduras, áreas, y más.

Guía para magos en el foro. Una guía super completa para tomar las decisiones correctas al progresar con tu mago. Hay guias similares para las otras clases.

Mis recomendaciones

  • Leer detenidamente “help newbie” and “help newbie{2-5}”. Particularmente “help newbie4”
  • El juego tiene un sistema de alias. Puedes hacer “alias la look at” y de ahi en adelante usar “la algo” para ver algo. Ejecutar “help alias” para más información.
  • Explorar y explorar, intentar de todo, pero con cuidado. Trata de que no te maten. En AA si mueres pierdes un nivel, experiencia, pasas pena, etc. Es mejor huir y luchar mañana que morir hoy. Edit: en el mencionado post, dice que pierdes un 30% de XP 😮
  • Luego que terminaste con el parque (8w s enter park) el siguiente sitio donde puede ir es el área circundante a Nepeth (13n, 6w, 8n). Este sitio tiene que la ventaja que el Manor (8n e ne n) le queda cerca, así que puedes matar enemigos, regresar al Manor, y repetir hasta el infinito.

Postmorten

10 días después deje de jugar AA por una razón que no esperaba. En los juegos MMO el “MM” se refiere a que hay muchos jugadores, lo cual a veces es un problema (jugué 12 años World of Warcraft, sé de lo que hablo). Pero a veces es bueno, puedes organizar raids para matar jefes, puedes pedir ayuda para seleccionar una nueva armadura, y puedes preguntar cómo se usa algún comando, cosa que en AA sucede con frecuencia porque AA tiene muchas peculiaridades.

Yo veía que AA tiene un sistema de emotes bien sofisticado, y puedes hacer que en el chat aparezcan cosas como “agnasg reflexiona socarronamente” y para ello el comando según el manual debería ser algo así como “emote chat socarronamente” pero lamentablemente a mi no me funcionaba. Así que pregunté en el chat cómo funciona, aduciendo que me parecía contraintuitivo. Al principio nadie respondía (después me di cuenta por qué) al rato alguien respondió diciendo “qué tiene de contraintuitivo help emote” siendo “help emote” el comando para desplegar la ayuda sobre el comando “emote”, cosa que ya yo había intentado por suficiente tiempo (RTFM!). Yo respondí que en qué forma me ayuda esa respuesta (agregando que no me parecía agradable sino bien ruda). El fulano me respondió “disculpa yo no hablo el lenguaje de víctima”. Yo respondí “ok, tranquilo, pero no digan que AA tiene jugadores amigables y listos para ayudar, porque es mentira”, cosa que ya en el pasado me habían dicho en 2 ó 3 oportunidades y a mi no me parecía cierto. Otra persona preguntó “¿quién dice eso?”. Con lo cual llegué a mi límite. Suficiente es suficiente.

En mi trabajo de freelancer tengo que lidiar el día a día con interacciones similares sobre multitud de situaciones donde básicamente la discusión es cómo funcionan las cosas, y estas discusiones suelen terminar en sarcasmos encubiertos que me recuerdan mis discusiones con mi ex. Tener que soportar eso también en un juego es ridículo, porque la idea es distraerse, no continuar con el hostigamiento y la competición por ver quien es más hostil. Decidí que ya tenía suficiente con el exceso de personalidad de los jugadores de AA, la mayoría de los cuales tienen más de 15 años jugando ahí y en realidad no están interesados para nada en ayudar a los nuevos, así que no seguí jugando. Es una lástima porque después de Batmud, AA es el mud más divertido que he encontrado, pero lamentablementes sus jugadores son unos idiotas.

De todo un poco neurodivergente

18-03-2023 5:42 AM

Change my mind

La vida de un programador es una misión Apollo XIII permanente. Resolviendo problemas desconocidos, inesperados, absurdos, todo el tiempo.

Ejemplo: estoy trabajando con un sistema reservaciones de vuelos, el orígen está en mayúscula, el destino debe estar en minúscula, pero algunas veces está solamente la primera letra en mayúscula. Explícale al jefe del proyecto que el orígen y el destino deben ser introducidos a mano en una tabla de equivalencias. Y este problema es el número 1729 en una interminable retahila de problemas.

Cuando te expulsan de un subreddit

Me expulsaron de /r/antivirus cuando me burlaba del troll local. No se si sentirme orgulloso o realizado. En todo caso, siento tristeza por el troll. Debe sentirse vacío y sin propósito. Debe estar suplicándole a los moderadores que me dejen entrar de nuevo. Ups, giro inesperado en la historia: él es un moderador. O no.

Números

Estaba leyendo algo aburrido este artículo sobre números aburridos y números interesantes, y me llenó de curiosidad lo que dice en relación al número 1729: es un número interesante porque “es el menor número expresable como suma de dos cubos de dos formas diferentes”. ¿Qué significa eso? El artículo trae la referencia a un libro del autor de la afirmación, Srinivasa Ramanujan, pero leer un libro 200+ páginas para buscar la cita con la esperanza de encontrar la explicación me resultó aburrido así que me puse a programar un buscador de números interesantes para confirmar eso. Efectivamente existen dos números 729 y 1000 (ambos cubos) suman 1729 y 1 + 1728 (123 == 1728) también suma 1729 (doh) . Pero con mi programa hice un descubrimiento interesante: 4104 es la suma de 729 + 3375 y 4096 + 8. Hay resúmenes de números que son aburridos y números interesantes (está mencionado en el artículo) pero a mi más interesante me resulta descubrirlo por mi cuenta.

¿Cuál es mi número favorito? 2.7182818284! En segundo lugar está 142857 (hay un post sobre él aquí en alguna parte).

Edit: sí leí el libro de Ramanujan (rápidamente), 1729 = 13 + 123 = 93 + 103. Ver también 1729, en Wikipedia. Este es un ejemplo más de por qué hacer las cosas fáciles si las podemos hacer difíciles.

El baúl de zombies está cerrado hasta nuevo aviso

He estado acariciando la idea de hacer una versión gráfica del juego Zork I/Dungeon, que permita hacer el recorrido pero con la ayuda de un mapa. Para los que no han jugado este tipo de juegos, es completamente texto, el juego te indica dónde estás y qué hay en el sitio, todo está descrito en palabras, sin gráficos. Luego de que has avanzado algo en el laberinto de lugares, por supuesto que te vas a perder, así que necesitas un mapa. Hay una larga serie de mapas disponibles, que la gente ha estado haciendo a lo largo de los años: Zarf Updates: A treasury of Zork maps (discusión en HN) tiene una buena colección de estos mapas. Mi idea es para facilitar las cosas agregarle un mapa al juego para no tener que hacer uno o consultar uno en línea. Yo no se si voy a implementar esto, mi vida de freelancer y khpx me mantienen muy ocupado, pero aquí dejo los enlaces relevantes, por si nunca concreto nada (lo que lo convertíría a un candidato frustrado al baúl de los zombies):

Normal no existe

Soñe que fui a un psicólogo quien intentó hacer un diagnóstico de mi condición. “¿Cuál condición?” le pregunté. “Hay personas que creen ser Julio César o Alejandro Magno. Tú crees ser una persona normal”. Me recordó cuando le dije a una amiga “Yo soy medio autista”. “¿Medio?” me contestó. Como quiera que sea, me pareció una buena idea para un cuento. “El hombre que creía ser normal”. El giro inesperado es uno de esos personajes que hablan grandilocuentemente: “el concepto de normal no aplica a las personas”. Con lo cual estoy de acuerdo, somos tan diferentes entre nosotros que es ridículo usar el término normal para describir a una persona, como si fuéramos una curva producida con una fórmula matemática. Aunque entiendo que no soy la persona apropiada para hablar de esto. Correcto, por eso mejor escribo un cuento. Se cansa uno.

Matrices & parábolas

25-02-2023 7:08 AM

chatGPT

Para ser honesto, chatGPT me tiene bien sorprendido, pero en realidad, si lo piensas bien, no me debería sorprender, no nos debería sorprender. La tecnología está evolucionando, abriendo nuevos caminos, logrando nuevos objetivos, todos los días. Y acercándonos al futuro: chatGPT ya está realmente cerca de la computadora abordo de la nave Enterprise en Star Trek y de Mother, en la nave Nostromo en la película Aliens. Una computadora amorosa que con paciencia infinita responde todas nuestras preguntas.

Pero siempre aparecen niños malcriados que le hacen la vida imposible a su mamá:

Chistes aparte, chatGPT puede responder cualquier cosa, siempre y cuando la respuesta exista en internet. Pero no nos ilusionemos: chatGPT no piensa, no deduce nada: es una matriz con una fórmula, que recibe una entrada y produce una salida, eso es todo. Es básicamente el mismo concepto de las redes neurales de hace 20 años, pero con matrices más sofisticadas y nuevas fórmulas. Nada más.

Se me presentó un problema bien difícil de resolver en estas semanas y no utilicé chatGPT para resolverlo. Mientras mi cerebro siga funcionando espero no necesitarla, Mother.

De matrices y parábolas

Y hablando de matrices, mis antíguas contendientes. Desde álgebra II se han encargado de hacerme la vida imposible. ¿Qué tengo yo que ver con matrices en estos días, más allá de las matrices de chatGPT ? Pues estoy programando un dungeon en khpx, y una de las fases es una batalla espacial, que en khpx es algo parecido a una batalla en Galaga o Galaxian (jugarlo en archive.org), juegos desconocidos hoy en día, provenientes de los albores de la computación cuando los juegos se jugaban en salas de juegos en cónsolas.

Es algo así como esto:

Los movimientos de las naves en este tipo de batallas lucen bien divertidos pero no necesariamente son algo fácil de implementar. Hay movimientos circulares que son fáciles de simular con la formula:

ship->lp.x = orig.x + ship->altitud.x * sin(ship->ang.x);
ship->lp.y = orig.y + ship->altitud.y * cos(ship->ang.x);

Pero otros movimientos son más complejos. En general, como aprendemos en 4to grado los cometas se mueven alrededor del sol en un movimiento parabólico, llamado así porque la curva que describe el cometa es una parábola:

Lo que me llevó regresar a mis notas sobre cómo simular un movimiento parabólico, a ecuaciones con senos y cosenos y finalmente a matrices, a Cramer, etc. Haciendo corto el cuento largo, al final el código quedó parecido a algo como lo siguiente:

void getParabolaFormula(D3DXVECTOR2 p1, D3DXVECTOR2 p2, D3DXVECTOR2 p3, D3DXVECTOR3& result)
{
	D3DXMATRIX m0(
		1.0f, 1.0f, 1.0f, 0.0f,
		4.0f, 2.0f, 1.0f, 0.0f,
		1.0f, -1.0f, 1.0f, 0.0f,
		0.0f, 0.0f, 0.0f, 0.0f);

	// fill the data using the parabola formula
	// y = a*x^2+b*x+c

	D3DXMATRIX m(
		p1.x*p1.x, p1.x, 1.0f, 0.0f,
		p2.x*p2.x, p2.x, 1.0f, 0.0f,
		p3.x*p3.x, p3.x, 1.0f, 0.0f,
		0.0f, 0.0f, 0.0f, 0.0f);

	D3DXVECTOR3 r(p1.y, p2.y, p3.y);

	// calculate the determinant
	// D3DXMatrixDeterminant and  D3DXMatrixInverse doesn't work out the box
	// d = a(ei-fh)-b(di-fg)+c(dh.eg)
	float d = m._11 * (m._22 * m._33 - m._23 * m._32) -
		m._12 * (m._21 * m._33 - m._23 * m._31) +
		m._13 * (m._21 * m._32 - m._22 * m._31);
	g_write_debug("determinant %6.2f ", d);

	D3DXMATRIX Da(m), Db(m), Dc(m);

	Da._11 = r.x; Da._21 = r.y; Da._31 = r.z;
	Db._12 = r.x; Db._22 = r.y; Db._31 = r.z;
	Dc._13 = r.x; Dc._23 = r.y; Dc._33 = r.z;

	float da, db, dc;

	da = Da._11 * (Da._22 * Da._33 - Da._23 * Da._32) -
		Da._12 * (Da._21 * Da._33 - Da._23 * Da._31) +
		Da._13 * (Da._21 * Da._32 - Da._22 * Da._31);


	db = Db._11 * (Db._22 * Db._33 - Db._23 * Db._32) -
		Db._12 * (Db._21 * Db._33 - Db._23 * Db._31) +
		Db._13 * (Db._21 * Db._32 - Db._22 * Db._31);

	dc = Dc._11 * (Dc._22 * Dc._33 - Dc._23 * Dc._32) -
		Dc._12 * (Dc._21 * Dc._33 - Dc._23 * Dc._31) +
		Dc._13 * (Dc._21 * Dc._32 - Dc._22 * Dc._31);

	result.x = da / d; result.y = db / d; result.z = dc / d;


}

Esta función recibe 3 puntos que se encuentran en una parábola y devuelve la fórmula de la parábola. Se supone que esto debe devolver a, b, y c para resolver la siguiente fórmula:

y = a x2 + b x + c

Pero no funcionó. Pasé varios días tratando de encontrar el problema pero no lo logré. He pensado que el problema no está en estas matrices, sino en el código que utiliza la función. Como ya tengo años en khpx y no puedo seguir dedicándole tiempo a cosas que no tienen nada que ver con programación de juegos (falso, todo tiene que ver con programación de juegos) empecé a buscar otra solución.

En realidad yo no necesito tres puntos o mejor dicho, yo no tengo tres puntos, yo tengo dos puntos, el punto donde está la nave enemiga y el punto donde está khpx. Y el punto donde está khpx, es el vértice de la parábola (el sol, en nuestro ejemplo del cometa y el sol):

Esta vez la ecuación es mucho pero mucho pero mucho más sencilla y no necesitamos odiosas matrices. Mi cuaderno terminó lleno de fórmulas con ejemplos:

Pero el resultado fue bien siemple, tan simple como la siguiente función:

void getParabolaFormula2(D3DXVECTOR2 p, D3DXVECTOR2 vertex, D3DXVECTOR3& result)
{
	float h = vertex.x;
	float k = vertex.y;
	float a = (p.y - k) / POW2(p.x - h);
	result.x = a;
	result.y = -2 * a * h;
	result.z = a * h * h + k;
}

Esta función recibe los dos puntos y devuelve a, b c como en el caso anterior para resolver la ecuación de la curva. Lo cual me permitió implementar lo siguiente:

Como un primer borrador no está tan mal. Le faltan los misiles de khpx, la coraza protectora (o campo de lasers), las secuencias de destrucción de las naves, y un largo etc. Espero terminarlo en dos semanas un mes dos meses (mentira).

Estaba pensando que este dungeon debe estar en el primer demo de khpx, para comenzar desde el comienzo a ponerle algo de acción al juego. Se cansa uno.