@ agnasg

agnasg


Cuando las aguas dejan de moverse

08-09-2020 6:57 AM

Este es un post explicativo. Es del tipo “¿qué está pasando?” (“what’s going on?”). ¿Por qué no hubo post en agosto? ¿Cómo salir de la pandemia vivo y coleando? ¿Es este el fin del mundo? ¿Debemos odiar a amazon por ser tan exitoso?

  1. Si hay un post de agosto, todavía no lo he publicado porque describe el procedimiento que seguí para publicar un juego en Play Store. Todavía no está listo. Espero publicarlo este mes. Para ello saqué un juego al azar de mi baúl de zombies (tilemovers) y lo reimplementé en SDL2. Está listo también hay una versión para pc lo voy a publicar itch.io.
  2. Coronavirus. El sentimiento generalizado es que no vale la pena cuidarse tanto porque ha habido personas que después de 6 meses de estricto aislamiento y bañarse en alcohol todos los días, se descuidan un día y se contagian. Si todos nos vamos a contagiar, ¿para qué tanta paranoia? La realidad es que todos los días existe una posibilidad de 1/1.000.000 que te caiga un piano en la cabeza. Repentinamente, ahora la posibilidad es 1/34. Yo no sé usted pero yo al menos comenzaría a mirar para arriba solo para estar seguro.
  3. Este no es el fin del mundo. El cambio climático es el fin del mundo tal como lo conocemos. La pandemia va a terminar. Nos tocó vivirla. Otras generaciones se salvaron, pero les tocaron otros retos. Cada generación tiene sus retos. La nuestra quizás se dedica más a llorar sobre platos rotos, lo cual siempre ha sido una pérdida de tiempo.
  4. Yo no tengo nada contra Amazon ni contra Bezos, y él no está obligado a retribuir sus ganancias a la comunidad. Depende de la comunidad que continúe haciendo negocios con él, lo cual parece que va a continuar por mucho tiempo.

Una explicación inútil

12-07-2020 8:18 AM

“There is a different between live intensely and live with passion” (“Hay una diferencia entre vivir intensamente y vivir con pasión”)

Itzhak Perlman



Ok, yo no sé qué significa eso, pero ¿qué tal ambas cosas? Cuando oí esa afirmación (Itzhak Perlman es una violinista consagrado, así que él sabe de intensidad y de pasión) lo primero que pensé fue “no sabía que ambas cosas eran mutuamente excluyentes”. Yo siempre he vivido intensamente como un funámbulo y con pasión como un violinista. Así que agárrame esa ballena por el chorrito, Itzhak!

De “Dark” y Hitler

Advertencia: no hay realmente spoilers en lo que viene, pero los comentarios pueden sugerir algunos elementos que forman parte de la trama. Quizás sea buena idea que termine de ver la serie y regrese. Suerte con eso.

La serie de Netflix “Dark” ha causado revuelo. Primero, porque no se entiende. Segundo, porque cualquier especulación sobre lo que está sucediendo genera polémica. Por ejemplo esto:

“hicieron lo correcto”

El problema, sin ahondar mucho si la serie tiene la intención oculta de sugerir una respuesta a ese dilema, o a esa decisión, es que, si algo hemos aprendido con todas las experiencias en “Volver al futuro” 1, 2 y 3, “El vengador del futuro” (“Total Recall”) el capítulo “Al borde de la eternidad” de “Viaje a las Estrellas” y otras películas similares con viajes en el tiempo, es que esos personajes de “Dark” hicieron lo correcto al tener sexo con sus tías y no asesinar a Hitler, porque el resultado hubiera sido el mismo, o peor.

Me explico.

La cuestión fundamental es si la segunda guerra mundial era evitable. Mi teoría es que no. Muerto Hitler, cualquier otro canciller alemán, u otro líder cualquiera hubiera tomado similares decisiones, dadas las malas condiciones en que Alemania terminó después de la 1ra guerra. Además, haber perdido territorios era algo inaceptable en aquéllos tiempos, y otra cantidad de razones que ya todos conocemos. Así que Alemania hubiera ido a la guerra de todas maneras. La pregunta es qué hubiera pasado si Alemania no ataca en la forma que lo hizo a Rusia, sino que comienza a ganar tiempo, a fortalecer los territorios conquistados, a prepararse para el ataque, desistir de la solución final con los judios, etc.. Rusia quizás no hubiera atacado, y tendríamos hoy en día una Europa alemana. Alemania perdió la segunda guerra mundial por la tonta decisión de Hitler de invadir Rusia en las peores condiciones cuando todavía no había consolidado su poder sobre Inglaterra y continuaba enfrascada en resolver el tema de los judíos. Con un líder diferente Alemania quizás hubiera tenido éxito en sus loqueras, e inclusive, quizás una política exterior más razonable. Claro, buena parte de Europa sería territorio alemán y hoy en día sería una potencia mundial (tal como lo es de todas formas). Así que asesinar a Hitler probablemente no hubiera resuelto nada, o quizás hubiera sido peor.

C++ sin clases

06-06-2020 5:06 AM



Ventaja oculta de no usar c++ clases: cuando agregas una nueva función no tienes que registrarla en la clase, la escribes, la usas y ya.

Prometo que este va a ser mi último post “yo uso C++ pero no uso clases“. Quiero concentrarme en el tema de la complejidad en si misma y olvidar otros temas. No he querido buscar en wikipedia como se llama el síndrome de los que piensan “por qué hacerlo sencillo si lo podemos hacer complicado“, estoy seguro que este síndrome tiene un nombre. Bueno, yo sufro de ese síndrome. Por ejemplo, cuando abandoné mi juego psyblast (para los que nos visitan por primera vez yo tengo una enorme colección de juegos inconclusos, es parte de mi hobbie, comenzar juegos y no terminarlos, es divertido sugiero intentarlo) decidí que mi próximo juego sería algo simple, muy simple, un juego en el espacio, donde el jugador tiene una consola donde pueda ver diversos medidores, y el juego sea simplemente tratar de viajar lo más lejos optimizando el uso de combustible, oxigeno, hidrógeno, etc.

5 años después esto se convirtió en khpx, un juego de estrategia con elementos del género 4x (eXploración, eXpansión, eXplotación, eXterminio) (pero no es un juego 4x) donde el jugador puede practicar la minería, la cosecha, desarrollo de tecnología, y en general desarrollo y dominio de recursos. Y sigue y sigue complicándose hasta el infinito. Así que todos los días mi motto es “cómo hago para simplificar las cosas” o “qué puedo simplificar hoy”.

Como mi compulsión me impide simplificar más allá de cierto nivel el juego, apunto mis baterías a C++. ¿Qué más puedo simplificar? No mucho pero contener mi impulso natural a usar clases ya es un comienzo.

Entonces cayó en mis manos este software, recientemente liberado por EA, el código fuente de CnC(Command & Conquest). C++. Clases. Muchas. Ví archivos muy grandes, vi un caos en la nomenclatura de los archivos, los nombres de clases, variables, métodos, todo. Y sentí un alivio porque así es khpx: un caos de nomenclatura donde hay funciones_con_barra_de_abajo, funcionesConNotacionCamel, variables_con_la_funcionalidad_al_comienzo y demás cosas similares.

CnC tiene un DISPLAY.CPP (de 190k) y un DISPLAY.H de 13k (en khpx el archivo más grande tiene 40k y es mucho) Ví cosas como DisplayClass::TacticalClass::Command_Object (..), y mezclado con esto, muchas funciones static funcion_no_en_una_clase_y_es_libre (…). Lo cual me lleva a pensar cuál es el punto. Sin embargo, el código se deja leer, el nivel de espaguetismo es minimo (khpx es un espagueti de pasticho hecho con pasta corta). Ahora, en el código de CnC seguir el camino de las clases esa es otra historia: entre algo->subalgo (..) mezclado con OtroAlgoSolo(…) entender quién llama a quién desciende a un nivel de complejidad natural, porque está implementando un juego naturalmente complejo, complicado por la complejidad de la capa de clases mezclada con funciones estáticas imposibles de meter en clases porque son libres como el viento. La idea de las clases es organizar la complejidad, a veces con éxito, a veces agregando una nueva capa de complejidad a la complejidad para que la complejidad subyacente sea invisible, aunque nosotros sabemos que está ahí, e inevitablemente nos devora como arenas movedizas.

Es decir, buen intento, pero las clases en sistemas complejos fracasan en hacer amigable la complejidad, simplemente la ocultan y la hacen más compleja a niveles inmanejables.

Este nivel de complejidad innecesario y a veces inútil (estas palabras no son sinónimos), es como el síndrome de willicoyotismo (algo que acabo de inventar) Willie el Coyote quiere atrapar al correcaminos (en la vida real un coyote alcanza en una carrera a un correcaminos en cuestión de 30 segundos) pero utiliza catapultas, cuerdas atadas a un risco, y se coloca un casco con una rueda arriba, y patas para arriba se lanza sobre la cuerda corriendo con la rueda que tiene en el casco como un funicular invertido. También arroja misiles, bombas, tumba puentes etc. Es lo mismo que utilizar los artefactos alrededor de las classes de OOP. ¿Ejemplos? Bueno este señor quería calcular la desviación estándar para las mediciones de un sensor. Lo que hizo fue tener una clase Sensor y una clase Medida, y cada vez que quería calcular la desviación estándar, convertía los valores tipo double a Medidas, los cargaba en un Sensor, llamado “CalculateStDev”, y tomaba la propiedad “CurrentStdDev” del Sensor. ¿Ok? ¿Cuál es la diferencia entre eso y meterse en un cañon como el hombre bala, activar el disparador calculando que la trayectoria dé exactamente en el sitio donde el correcaminos va corriendo por una carretera cualquiera a una velocidad de 24 km por hora ? Yo no veo la diferencia honestamente.

Como un ejemplo adicional, este señor muestra como OOP es inconveniente en algunos casos (realmente todos) y cómo una solución escrita con clases puede ser escrita fácilmente con una simple función. En realidad, cuando resolvemos un problema, es en el problema en que debemos estar pensando, no en cómo usamos nuestro lanzamisiles de última generación para resolver el problema. Lo cual es la principal razón por la que dejé de usar clases. Pierdo mucho tiempo pensando en cómo emplear sus patterns para resolver problemas, en vez de simplemente resolver el problema.

Esta pérdida de perspectiva termina desvirtuando “lo que tienes que hacer” de maneras incomprensibles. Es como ciertos gerentes de proyecto que manejan los proyectos usando el software, viendo las actividades en gráficos y los tickets cambiando de estatus. Quizás ves algunas cosas pero no el conjunto y sus interacciones, y tus acciones y rabietas terminan siendo absurdas. Los demás te miran desde el otro lado de la mesa con perplejidad: ¿qué le pasa?.

Crimen y Netflix

26-05-2020 6:35 PM

La Guerra de las Galaxias es una saga de 6 películas realizadas por el maestro de la ciencia ficción George Lucas. Luego de vender la franquicia a Disney, esta hizo una serie de pésimas películas (excepto quizás Rogue One) que trataron de exterminar y eliminar todos los elementos previamente construidos en las 6 películas anteriores. Este proceso se llevó al extremo de que la película conocida como The Last Jedi destruye elementos de la nueva serie, donde, sin razón alguna, el villano es muerto prematuramente.

Este proceso de exterminio de los elementos básicos de una franquicia es algo común en Hollywood y no es una práctica exclusiva de corporaciones como Disney. Algo similar podemos apreciar en Misión Imposible, donde en la primera película el personaje central de la serie, el Sr. Phelps es presentado como un villano corrupto, comportamiento absurdo en base al desarrollo que tiene este personaje en la serie original. En la serie, Jim Phelps participa en operaciones encubiertas diseñadas e implementadas por él, de un nivel excepcional, sin fallas ni errores. En la película es presentando como un villano de poca monta, torpe y descuidado que desciende fácilmente en la confrontación física, cosa que el personaje original jamás haría. Los actores de la serie Peter Graves y otros protestaron esta línea argumentativa pero los productores de la película estaban decididos a eliminar cualquier vestigio de los héroes originales y crear su propia mitología.

Lo que Disney le hizo a La guerra de las galaxias es un crimen.

Acabo de terminar Community, una de las mejores series que he visto en Netflix últimamente. Realmente me gustan las series (y las películas) innovadoras, rebeldes, que cambian paradigmas, que dan de qué pensar. Community utiliza todas las técnicas posibles para desconcertar el espectador, incluyendo capítulos donde todos los personajes comienzan una guerra de paintball sin razón, los personajes hablan fuera del personaje rompiendo la 4ta pared, vemos múltiples timelines con diferentes resultados si cambiamos un pequeño elemento, etc.. Todas las 6 temporadas son buenas, y en mi opinión todos los capítulos son excepcionales. Algunas personas en imdb dicen que la calidad desmejoró después de la temporada 3 y que la 5 y las 6 son malas. A mi me parece que la temporada 6 fue tan buena como las 1-3, de hecho el episodio t6/e8 tiene uno de los mejores finales de episodio de todos los episodios de todas las series que he visto (estoy exagerando), cuando después de que Chang tiene su aventura donde casi (realmente casi) llegó a ser una estrella tipo Steven Spelberg, regresa a la mesa cuadrada, se sienta y todos continúan en lo suyo, sin recriminarle nada, aceptándolo de vuelta, y él, los mira a todos y se da cuenta que sus temores de ser rechazado eran injustificados y se da cuenta que es uno de ellos, que es definitivamente miembro de la mesa cuadrada. Altamente recomendable.

Bullet Head es un nuevo ejemplo de la manía de Hollywood de colocarle malos nombres a las películas. Esta es una excelente película con brillantes actuaciones de Adrien Brody, John Malkovich y un sorprendente Antonio Banderas haciendo papel de malo. Inclusive Rory Culkin el hermano menor de Macaulay Culkin, hace una magnífica actuación a pesar de no tener tanta experiencia como sus compañeros en la película. ¿Entonces, si el casting y la película son tan buenos por qué en imdb el rating es 5.4 (yo esperaba al menos un 7.8) ? De acuerdo a este comentario, la razón de los abrumadores malos reviews es que la gente estaba esperando una película de acción. ¿Por qué, si ninguno de los actores es conocido como un actor de películas de acción (Brody hizo Depredadores, que puede ser una película de acción)? Mi opinión es que se debe al título (Bullet Head) que sugiere una película repleta de balas al estilo Tarantino. De hecho, en el faq de la página de imdb alguien pregunta por qué esta película se llama así, y no hay respuesta. Mi mejor ejemplo de películas con nombres inapropiados es Coming Home, la película de Jane Fonda, nombre que no dice nada (el nombre en español es “Regreso sin gloria“, que es simplemente perfecto). ¿Otro ejemplo?, “Out of Africa”, la hermosa película de Meryl Streep, que se podría traducir por “en Africa” o “Por los lados de Africa”. Un nombre que sugiere movimiento. El nombre en español es mucho más apropiado “Africa mía” que refleja profundamente el sentimiento de cariño y nostalgia que le generó a la protagonista su estadía en Africa.