@ agnasg

Vivir deliberadamente

30-11-2020 4:26 AM

Sí, este es un post de enlaces. Los posts sobre Android y SDL siguen en la cola. Ambos son de más de 2000 palabras así que la espera va a valer la pena.

Que el festival de enlaces comience!!!

Es igual pero diferente

Esta respuesta en stackoverflow sobre para qué sirve super() en python, nos deja pensando si realmente stackoverflow es capaz de responder adecuadamente una pregunta, o deliberadamente intenta que tengas que leer medio libro de La Guerra y la Paz antes de entender la condición humana ¿? No, no estoy interesado en este momento en entender la condición humana, solo quiero saber para qué sirve super() en python. Las respuestas son del estilo “un destornillador permite destornillar un tornillo”, lo cual te obliga a buscar qué significa “destornillar ” para descubrir que “destornillar es la acción de usar un destornillador”. Al final, resulta que super() es la forma de python lidiar con class inheritance, es decir, cómo facilitarte la vida cuando te quieres complicar la vida. No necesariamente vas a tener éxito, pero mira el lado positivo, al menos descubriste que no solamente las classes en C++ son inútiles y están implementadas torpemente, también python es igual. Pero diferente. python es como un carro donde el volante está en los pies, y el acelerador y el freno están en las manos. Se maneja igual, pero es diferente. Tú sabes, la innovación es más importante que la utilidad.

De juegos multijugador

Volví a abandonar World of Warcraft. Terminé basicamente la expansión (Battle for Azeroth) y en algún momento jugaré Shadowlands, que salió el 23 de noviembre. Lamentablemente, el juego tomó un curso deprimente, y al parecer la nueva expansión va a continuar igual. Ahora no se trata de maximizar el equipo para derrotar a los jefes máximos. Ahora la idea es alimentar el poder de tu equipo infinitamente, hacer misiones, etc. Ya no es divertido, quizás para mí luego de 12 años, ya se terminó.

12 años es nada. Hay personas que tienen 20 años jugando Muds, y todavía siguen haciéndolo. Yo abandoné el Mud que jugaba, BatMud hace 5 años y desde entonces he estado buscando una nueva casa. Jugué Carrions Fields, Zombiemud, Lands of Redemption, Darkmud, Achaea, Alter Aeon, Genesis y ahora estoy probando nuevamente Sindome. Ya lo jugué sin éxito en 2016, y luego de leer este artículo, me animé a darle una nueva oportunidad. Es diferente a cualquier cosa que haya jugado antes, por ejemplo, la mayoría de los comandos son diferentes, por ejemplo, si ves un panfleto, “leer panfleto” es suficiente en cualquier mud, pero no, en Sindome hay que hacer “leer [pagina] de panfleto” donde [pagina] es primera, última, o un número. Pero los panfletos solamentienen una página, así que nada de eso funciona. Un mini puzzle que me tomó un buen tiempo resolver.

Qué es un Roguelike

Interesante artículo sobre la respuesta a esta pregunta (por supuesto, según el autor, es su opinión). Para mi es tan simple como cualquier juego que tenga los elementos del Rogue original. Si tiene graficos como Dungeons of Dredmor no es un roguelike, aunque apliquen reglas similares y el movimiento es 2d. Yo diría que es un juego con reglas similares a los roguelike. meh.

What stands in the way becomes the way — Marco Aurelio

Hay quienes se resisten a ver la realidad. Lo hacen voluntariamente, conscientemente, sin darse cuenta, intencionalmente, deliberadamente, con alegría, con tristeza, con obsecuencia, calladamente, a gritos o en una combinación de todo lo anterior. También hay quienes hacen papel de camello.

Resulta que los camellos no son iguales a los caballos. Los caballos dan por sentado su destino de servir al hombre, y de la misma forma que los perros, son sumisos e incapaces de levantar una pata o un colmillo contra sus amos. Los camellos por el contrario, aceptan su rol a regañadientes, y solo con la condición de ser tratados con gentileza y con una buena porción de comida. Pero, a veces, pierden la paciencia. Se enojan con su amo y comienzan a lanzar mordiscos y patadas. El camellero, que está muy consciente de esta posibilidad, está preparado: se quita la camisa y se la lanza al camello. Éste paga su rabia con la camisa, mordiendola y pateándola repetidamente. Al cabo de un rato, se cansa, se apacigua, y vuelve al trabajo mirando de reojo al camellero.

Pues bien, hay quienes se comportan como los camellos, desatando su ira hacia un objeto cualquiera, sin percatarse que lo que hacen es perder el tiempo, mientras el culpable se esconde, y los mira desde lejos, esperando a que regrese a su sumisión.

Wordplay

Yo estuve trabajando durante 5 años en Business Intelligence (BI) (hace más de una década), lo cual me permitió adquirir destrezas en el área de minería de datos, y sistema analíticos. BI forma parte de las herramientas de optimización de negocios.

Estaba viendo por casualidad la presentación de esta compañia (en una publicidad antes de ver un video en youtube) donde muestran como hacer data mining con python (tengo algunas historias sobre python, pero eso será contenido de otro post). Lo que me llamó la atención es el cambio de nombres, y nuevos nombres de las diferentes tecnologías: en esa presentación se habla de data wrangling (que llamábamos ETL, extracción, transformación y carga de datos), data science (BI lo podríamos catalogar entonces como un subconjunto de data science), cluster analisis, etc. Así, data science incorpora los nuevos desarrollos en machine learning y big data. Interesante.

De prestar atención

Este artículo trata (no necesariamente lo logra) que le prestemos atención a nuestra capacidad de prestar atención. Si no prestamos atención todo está perdido, lo cual parece intuitivamente correcto. Hay una claudicación en ese artículo: si no puedes prestarle atención a algo es mejor rendirse. No todo el mundo estuvo de acuerdo con este planteamiento, sobretodo los que tienen serios problemas para prestarle atención a algo: si te rindes, jamás vas a poder avanzar un proyecto.

El autor utiliza como técnica la clasificación de Eisenhower: urgente e importante y todas las combinaciones posibles de las dos. A mi, personalmente, eso me recuerda a hacer listas y colocarle prioridades. Lo cual no funciona para mi. Al final, todo es urgente e importante, esas clasificaciones son artificiales y dejan de funcionar, eventualmente. Las artividades tienen un ordenamiento lógico: más allá de eso, lo único que hay que hacer es trabajar. Llámalo como quieras: prestarle atención o no, procrastinación, pereza: ¡trabaja!

Vivir deliberadamente

He estado pensando en cambiar mi motto: “vivir sin virtudes aparentes“, y cambiarlo por deliberadamente: con pasión: no se me ocurre otra forma de vivir. En la película “Automata”, uno de los robots le responde al asesino: “¿soy sólo un robot? Eso es como decir que tú eres solo un mono”. Los idiotas de 9gag dicen que eso es un mal argumento, “somos solamente unos monos”, lo cual me hace pensar que por algo son idiotas: no entendieron el razonamiento de un robot (o el que escribió el guión).

No somos simplemente monos: somos capaces de vivir con pasión, cosa que ningún mono sabe hacer. ¡Los monos comen bananas, 9gag!

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.

Code smell

08-05-2020 6:39 AM

una galaxia
la capsula viajera
sin tiempo

Suena sospechoso pero en realidad se refiere a código que no corresponde a las mejores prácticas de programación. Por ejemplo código que luce correcto pero que seguramente va a generar problemas en algún momento. Llegó a mis manos un artículo de medium sobre el tema (que ahora no encuentro… ah, ya, aquí está) así que comencé a buscar en el código de khpx algo similar. Hay mucho data clump, porque es un juego y hay mucho control de estados, no he hecho nada al respecto porque lo estoy dejando para el final. Agrupar esto en objetos en este momento puede ser precipitado y optimización temprana. Muchos de estos problemas son relativos a classes y como yo no uso clases, pues simplemente no tengo esos problemas.

Un ejemplo de code smell es este:

void inocente_funcion (int importante_argumento, bool soy_code_smell)
{
   mucha_inicializacion();
   y_preparacion_de_datos();
   if (soy_code_smell) {
        hacer1 ();
   }
   hacer2 ();
}

Esto hace que la función modifique su comportamiento basado en argumentos booleanos. hacer1 () debería estar afuera.

El problema es que a veces hay situaciones en que la forma fácil, rápida y obvia de hacer algo entra en conflicto con esta regla de no programar con code smell’s. Por ejemplo en la inocente función de arriba se hace mucha inicialización y preparación de datos para luego ejecutar a veces a hacer1() y siempre a hacer2(). Pero supongamos que hacer1() es básicamente despliegue de los datos en pantalla. Así que la variable booleana soy_code_smell es en realidad un flag verbose, para desplegar información algunas veces. La solución es separar todo en funciones y hacer las llamadas apropiadas pero entonces caemos en código espagueti y repetición de código.

khpx tiene mucho código espagueti porque un juego es un espaqueti mezclado con ensalada rusa, y más aun cuando el juego en sí es un trabalengua. Claro, no llega al nivel de la primera versión de Zork, pero estudiando su código me pregunto cómo simplificar algo complicado.

¿Cual es la descripción corta actual de khpx?

khpx, a hard core low level full featured pixel art solo dev mmo space game (un juego espacial de bajo nivel con características avanzadas, graficos de pixels, desarrollado en solitario, masivamente multijugador).

O algo así.

¿Los bugs del juego se pueden explicar debido a estos code smell? Realmente no. Los bugs aparecen debido a la complejidad. Yo adopto un enfoque tipo Abed a los problemas: si lo pienso lo suficiente y me concentro cualquier problema se puede resolver. Los académicos de manera condescendiente moverán la cabeza diciendo que detrás de todo bug hay un code smell escondido, o falta de OOP, o pobre diseño de software, o problemas no resueltos, simples problemas manejados incorrectamente.

Ok. Veamos.

Los cultivos en los planetas está implementado. La función que se encarga de eliminar una parcela de la lista de parcelas cultivadas tiene 12 llamadas a funciones:

  1. convertir la parcela de cultivo a parcela vacia (cambio del ícono)
  2. borrar el rectángulo que resalta a la parcela en el campo de cultivo
  3. si tiene plagas, borrar la plaga
  4. remover el identificador de parcela
  5. remover el indicador de progreso de la parcela (nivel de cosecha)
  6. guardar el estado de los iconos a la base de datos
  7. borrar la parcela de la lista de parcelas del jugador
  8. cargar el script de parcelas
  9. actualizar usando la info del script, la lista de parcelas disponibles
  10. guardar la lista en la base de datos
  11. desplegar el resultado de la parcela en la pantalla
  12. desplegar un mensaje de “Listo”.

El manejo de cultivos requirió un mes de trabajo (8 horas diarias la pandemia de covid-19 ha reducido mi capacidad de enfocarme, lo cual no es raro).

Hay dos directrices importantes-urgentes-prioritarias que entran en conflicto: escribir código de calidad (sin code smells, OO, buen diseño) y terminar el juego. El trabajo de un programador es encontrar el equilibrio entre estas dos reglas en permanente pugna. Sin excusas o coartadas: es realmente deplorable echarle la culpa a una de estas reglas el no haber cumplido con la otra.

O, revisamos nuestra lista de “o”s:

  • O regreso a trabajar tiempo completo freelancer.
  • O me dedico a programar juegos en androide tipo mario bro para ser publicados semanalmente y hago de mi vida un infierno.
  • O me dedico a escribir ebooks y publicitarlos en twitter

Me imagino lo que Bobby Axelrod pensaría de todas estas opciones.

El amor en tiempos del coronavirus

08-04-2020 2:38 PM

“Proteger a tu familia no es una carga, es un privilegio”

Lou Solverson

Y así, sin más, estamos en un apocalipsis zombie mucho antes de lo que esperábamos. Todos estamos escondidos en nuestras casas, salimos a hurtadillas a buscar alimentos, nos alejamos de los demás no sea que nos contagien, regresamos rápidamente a nuestro escondite, esperanzados en que pronto esto va a terminar. La realidad es que no, no va a terminar pronto: la esperanza es que para junio, es decir dentro de 2 meses, podamos comenzar a retomar la normalidad “en forma limitada“. Nada de participar en aglomeraciones innecesarias (no asistir a juegos ni a festivales), lo cual incluye ir a restaurantes o a fiestas familiares. ¿Cuándo volveremos a nuestra rutina 100% normal? Nadie lo sabe.

En cuanto a mi, lo que para otros parece el fin de los tiempos, es la normalidad: yo paso la semana completa encerrado trabajando en mi video juego o en freelancing, salgo 1-2 veces (en este momento voy a salir 1 vez cada 2 semanas a buscar comida, papelón y gofio). Lo que me perturba es que como el edificio está lleno de gente, no hay el silencio acostumbrado. A la gente le encanta hacer ruido con lo que sea, bostezando en forma vulgar, o lanzando las puertas. Si hay cuarentena y no se puede salir, no estoy seguro por qué abren las puertas y las avientan con toda la fuerza posible. Demasiado. Yo con amor y comprensión lo tolero, porque esto, esto también va a terminar, y entonces sonreiremos.

soy mejor que tú

06-03-2020 7:08 AM

Tomado de mi diario personal:

me gustaría extraer su alma, colocarla en un frasco, y observarla a trasluz: ver si aprendo algo, capturar su fortaleza interior, visualizar alguna idea vital, quizás beberla, comerla, imbuirme de su energía, irrigarme con su rostro, escudarme con su cuerpo. puedo ver a través de la canción como su alma se ríe de mi, me hace gestos que me hablan de realidades controversiales. su verbo me hiere en formas inusuales, sus palabras llegan a nervios que no sabía que tenía, me rompe huesos desconocidos. llega a profundidades reveladoras: no sabes nada. yo manejo las situaciones difíciles de mi vida mejor que tú. soy más fuerte que tú. no puedes conmigo. te gané.

Ey, ey, esto parece extraído de un libro de Thomas Harris. Usualmente las entradas en el tractac no requieren explicación, pero esta alucinación literaria requiere algún contexto. agnasg-escritor, el ouroboros, está intenso estos días. Se refiere a una canción de Madilyn, una cantante de youtube . La canción está escrita con la letra de los comentarios negativos que recibe (de los haters, los que la odian). Tiene unos cuantos años cantando canciones de otros artistas, incluyendo Titanium (con 100 millones de reproducciones) y su versión de Despacito (alguien en los comentarios dice que su versión es mejor que el original ( “Sometimes the cover is much better than the original… just like this!” ). Su versión de Firework de Katy Perry también me gusta mucho. Esta idea de escribir una canción con los comentarios negativos no es una idea original, otros youtubers lo han hecho, en particular Elise Ecklund (tiene varias, por ejemplo). Pero la versión de Madilyn es insuperable.

Ríete

25-02-2020 11:30 AM

Mis comentarios sobre el Guazón a continuación. Todos los spoilers posibles, la trama se va a discutir. Si no la ha visto, véala y regrese

Joaquín hizo una monumental actuación. En algún momento de la película (alrededor de la primera hora) me dí cuenta que estaba viviendo un momento especial en mi vida, un momento que iba a vivir en pensamientos muchas veces, como cuando vi por primera vez el Padrino, cuando ví por primera vez Apocalipsis Ahora, Blade Runner y muy pocas otras películas. El guazón era una experiencia única en la vida, pensé. La película continuó y la cena quedó servida: todo estaba listo para un gran y apoteósico final: entonces vino la escena del baile en la escalera: la cortaron, solamente aparece el final, cuando, creo que el comienzo era más importante (se pueden conseguir varios ejemplos, este desde una perspectiva diferente).

Y entonces llegó la escena final, en el programa de entrevistas con Murray Franklin (Robert De Niro). Todo estaba listo para una memorable escena, con Joaquín Phoenix quien había demostrado a lo largo de toda la película sus cualidades escénicas (y en otras películas por supuesto) y Robert fucking De Niro: este iba a ser un momento extraordinario y memorable.

Y entonces la escena. Vamos a dejarlo ahí, me voy a permitir una digresión para que se entienda mejor.

Pulp Fiction (Tiempos violentos) se puede ver de muchas formas. Podemos considerarla como una película de gangsters, como un thriller, como una película de superviolencia, y con otras muchas otras etiquetas. Contiene varias historias, una de ellas, la historia de un boxeador fracasado que decide aprovecharse de las apuestas en su última pelea, haciendo lo contrario que el jefe de la mafia le dijo que hiciera. Le hace una estafa al jefe de la mafia, se sale con la suya, y está listo para salir huyendo para no regresar nunca más: pero a la novia se le olvidó el reloj. Toda la película (al menos de este hilo narrativo), toda la historia gira sobre el hecho de que este boxeador, en vez de escapar porque tiene tras de sí nada más y nada menos que al más peligroso gangster de la ciudad (el resto de las historias de la película así lo demuestran) se ve obligado a regresar a buscar su reloj corriendo el riesgo de ser atrapado: ya sabemos lo que pasó, y la secuencia de Zeth (Zeth is death baby, Zeth is dead) no nos decepciona en lo absoluto, ahora entendemos toda la película.

¿Se entiende para dónde voy? Esa última escena del Guasón debió ser diferente. Fue un anticlimax confuso y raro como el resto de la película (el Guasón inclusive comienza a hablar como un niño mimado). La escena era la consumación de un exterminio, o la continuación de una saga de destrucción anarquista (ya sabemos como termina), con el asesinato del compañero de trabajo, la mamá y el ídolo de la mamá, el presentador de televisión. Yo tenía en mi cabeza muchas idea de cómo debía ser esa escena ninguna de las cuales conincidió con la realidad. Sin embargo, coincido que es una película excelente y que Joaquín se ganó el globo de oro y el óscar si lugar a dudas (inclusive desde el Gladiador se veía venir). No quiero ser melodramático (¿demasiado tarde?), ciertamente es solo una película y Todd Phillips es un consumado escritor y director. Pero confieso que mis expectativas estaban demasiado altas. Qué raro.

Comentarios atrasados de febrero

23-02-2020 8:21 AM

” Bienaventurados sean los ignorantes porque le ganan la batalla a los errores”

Friedrich Nietzsche

Siguiendo la tónica del post anterior donde comentaba la existencia o no de vida extraterrestre, se me ocurrió extrapolar esa idea a la tierra. No hemos encontrado vida inteligente fuera de la tierra (a pesar de que ahora es tan fácil conseguir planetas en otros sistemas, que hasta un muchacho de 17 años lo puede hacer), pero tampoco en ella: la única vida inteligente que es capaz de buscar vida inteligente somos nosotros mismos: los delfines, orcas, chimpancés, cotorras, cuervos y elefantes no están interesados o no han demostrado estar interesados en eso, y será así al menos los próximos 500 mil años para estas especies: no parece que vayan evolucionar mucho más de ahí.

No había tenido tiempo de ver este video (John Millburgh, TEDxBariloche, ¿Por qué creemos en lo que creemos?), donde el presentador insiste en que tenemos una percepción equivocada de la realidad, y que probablemente es inducida por los medios, a través de opiniones de la gente basados en estudios de poca credibilidad, etc.. Lo que me pareció gracioso es que el ejemplo que coloca al comienzo (donde muestra fotos de dos personas y pregunta quén es más confiable, o quién probablemente es un ladrón, etc.) no es tan bueno como introducción para la segunda parte de la presentación, porque, por ejemplo, “hay un estudio” que dice que en el 95% de casos, la decisión que toma el primer entrevistador en un proceso de selección de personal en una empresa grande >>no cambia<< en el 100% de los casos sin importar la duración, complejidad y número de personas involucradas en el proceso de selección. “El estudio” incluye estadísticas de Microsoft, IBM y Excite y otras empresas (era un estudio de los 90s, me imagino que está en alguna parte de internet). Así que lo que este “estudio revela” es que nuestras opiniones basadas en intuición, nuestro olfato, o como quiera que lo llamemos, quizás sea inducida, quizás sea generada en nosotros por el entorno, pero al final es apoyada y aprobada por nuestro entorno. Lo que el presentador está haciendo es cuestionando y criticando nuestra forma de tomar decisiones.

Terry Cavanagh liberó el código fuente de su afamado juego VVVVVV (github, comentarios en reddit) y Randal Olson dice que es bello y… desagradable. ¿La razón? Un gigantesco switch para controlar cualquier posible estado que el juego pueda tener en algunas situaciones, y otras no, y otras condiciones que pueden clasificarse como cualquier cosa. Quizás sea desagradable, pero es un juego publicado. Exitoso. Deja la envidia. En mi juego khpx yo me concedo el estado del arte en técnicas de programación, modernos patrones ajustado a las mejores prácticas, es elegante, inteligente y no publicado: no vale nada.

Finalmente ví la película Bird Cage. que provocó un marasmo el año pasado, donde Sandra Bullock enfrenta un enemigo que no se puede ver (los protagonistas pasan buena parte de la película con los ojos vendados). Ya se han mencionado hasta la saciedad el parecido de esta película con The Happening  (Fin de los tiempos) la cual como otras películas de M. Night Shyamalan es horriblemente mala (lo cual ya he discutido antes detalladamente), de hecho Bird Cage es un buen ejemplo de cómo se debe hacer una película con una premisa complicada (y The Happening un ejemplo de cómo no se debe hacer). Él único problema que veo en Bird Cage, es que al comienzo cuando comienza el encierro en la casa, el guionista tuvo serios problemas para idear formas de ocupar en algo a los protagonistas, cuando van a la excursión al supermercado, finalmente las cosas comienzan a encaminarse bien. Del resto es una película recomendable para pasar el rato.

Este post fue escrito a finales de enero. Y quedó olvidado entre los borradores.