@ agnasg

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.

Es pero no es

08-01-2020 4:52 PM

Aliens adecuadamente motivados (“suitably motivated aliens”). Este estudio ofrece suficientes evidencias (apoyadas inclusive en simulaciones de computadora) que muy seguramente estamos solos en la via láctea.

“Dado que nuestro sistema solar existe desde hace 4.500 millones de años y que la Vía Láctea se formó hace al menos 10.000 millones de años, ha habido tiempo más que suficiente para que las especies hagan una visita en todos los mundos habitables.” (” Given that our solar system has been around for 4.5 billion years and that the Milky Way assembled at least 10 billion years ago, there has been more than enough time for species to wind up on all inhabitable worlds.“). Enlace.

Hablando del espacio, es posible que los cálculos realizados para determinar la existencia de materia oscura estén equivocados (enlace). Lo gracioso son los comentarios en hacker news, cualquier explicación o comentario sobre el artículo es seguido por 5-10 preguntas, y por 3-5 “eso es incorrecto”, dicho por astrofísicos y no astrofísicos. Yo soy un aficionado así que no puedo decir nada más allá de mi apreciación de que solo sé que no sabemos nada. Todavía nos falta. De lo que ayer estábamos seguros, hoy estamos dudando, mañana quien sabe.

Estadísticas inútiles pero interesantes. Este reporte en slashdot llamó mi atención: el número de commits en el kernel de linux bajó el año pasado a 74k commits, que es el número más bajo desde 2013. Realmente me importa un rábano esa parte, lo que me interesa es que el artículo dice que el kernel de linux tiene 27.852.148 lineas de código, divididos en 66.492 archivos: eso da 418 líneas por archivo. Interesante: khpx tiene en este momento 30.311* líneas de código distribuidos en 192 archivos, lo que da un promedio de 158 líneas por archivo. No está mal. No llega al extremo de Solaris (la versión de Unix de Sun Microsystems) con 2 millones de líneas de código con un promedio de 10 líneas de código x archivo, pero sigue siendo un buen promedio (es una mejor práctica tener archivos lo más compactos posible para mejorar el mantenimiento y la depuración de errores). Quizás el promedio del kernel de linux se ve afectado porque los 66.492 archivos mencionados incluyen documentación, archivos de configuración, herramientas, etc. (* en comparación, el código fuente de Doom tiene 62.734 líneas, el de wesnoth tiene 335.532) Enlace.

Via el magnífico blog de Emily Short nos llega este breve review del libro Hamlet’s Hit Points (también está en amazon pero la autora no está interesada en promover esa empresa por razones, así que sigo esta medida) que presenta un conjunto de herramientas y procedimientos para alimentar el proceso de creación de aventuras RPG, usando una genial clasificación de story beats que le va a permitir rastrear los altos y bajos de la historia. RPG son role playing games (o juegos de role), story beats son los puntos de inflexión de la historia o puntos de acción que van moviendo la historia. Yo era fanático de estos libros en mis comienzos, pero ahora me he dado cuenta que todos esos procedimientos hay que conocerlos pero a la hora de la verdad, con el trasero en la silla, y las neuronas funcionando a full capacidad, es que se escriben buenas historia. De nada valen las herramientas. Creo.

Ricky Gervais se acaba de hacer más famoso de lo que era normalmente con sus honestas, desencarnadas e irreverentes intervenciones en la entrega del Globo de Oro de este año. Decirles a los actores y directores de Hollywood que ellos han ido a la escuela menos que Greta Thunberg y que se cayen la boca, al fin y al cabo, todos son amigos de Jeffrey Epstein (quien no se suicidó). Aprovechó finalmente hacer cuña de su serie en netflix Afterlife, la cual jamás había oído antes, no la había visto en mis búsquedas incesantes en el directorio de Netflix (si hubiera 10-20 series y 5-10 películas sería mucho más fácil, pero como hay tantas nunca me decido). Y de hecho esta serie ( Afterlife ) es realmente buena, es deprimente porque se trata de un tipo amargado a quien se le murió la esposa y quiere suicidarse, y mientras tanto le canta sus verdades a todo el mundo. Me recordó algo que vi en 9gag (pero que ahora no encuentro) sobre ciertas personas que parecen antisociales, pero no es realmente eso, sino que no tienen tolerancia a las conversaciones huecas, el drama y a las personas falsas. Dícese de mí. En fin, esta serie (Afterlife) es realmente graciosa, y es tan deprimente, tanto pero tanto que te llena de alegría y esperanza. Altamente recomendada.

Lo cual me lleva mencionar esta película Frances Ha. Al verla, nuestro primer pensamiento es que ella es una loser (perdedora, término extraído del futbol americano (no es futbol, es una variación de rugby), donde o ganas o ganas, y si no ganas eres un loser (por lo que este jugador con una canción nos anima a aceptar lo loser que somos)). En imdb la descripción de esta película es que Frances que vive en New York pero no tiene apartamento, aprende danza (pero no es una bailarina) etc. , me parece que está todo equivocado porque a través de la película aparece la dirección de todos los apartamentos donde vive (mucha gente vive alquilado o prestado en New York), y también, a través de la película aparece danzando y contando con la aprobación de todo el mundo. Bueno, loser, eso parece, pero para ella, eso no tiene importancia, el apartamento no tiene importancia, tener novio no tiene importancia (un apetecible amigo está loco por ser su novio, y es millonario, y le pregunta varias veces si está disponible y ella contesta no, no y no), lo único que parece tener importancia es su amiga del alma.

A mi no me parece una loser, a mi me parece como aquél cuento de una perro sabueso (un otterhound o quizás un foxhound) que en vez de perseguir y señalar donde caían los patos y las perdices, se iba en dirección contraria y señalaba puntos en el espacio, vacíos, sin ninguna presa en ellos. Al final fue descartado y catalogado como idiota, pero un entrenador persistente e intrigado por el comportamiento errático del perro se puso a revisar el área que el perro señalaba con la nariz. Finalmente descubrió la verdad, este perro sabueno no consideraba importante señalar patos o perdices, señalaba mosquitos y abejas y otros insectos: este era un perro sabueso entomólogo. Como quiera que sea (…) el cuento es que Frances Ha se comporta como una loser, dice las cosas que dicen los loser, viaja a París sin ponerse de acuerdo con sus amigos y termina cenando en los campos Elisios sola como una loser, pero quizás no lo es, sus aspiraciones y deseos son incomprensibles para los demás. Loser.

Comentarios de diciembre

27-12-2019 12:40 PM

Este post se iba a llamar “Lo estás viendo desde el punto de vista equivocado o tu visión está nublada” pero perdí mis ideas sobre su contenido. Mi memoria se nubló. Por eso un escritor debe anotar todo, constantemente, todo el tiempo, permanentemente. Este año he estado algo distraído. No fue un buen año para la escritura, el próximo será mejor. Pero basta de digresiones, entremos en materia.

1) Angeldust un altamente compatible RPG de acción y juego de construcción (“an omni-compatible action RPG and building game“) Un interesante caso de estudio de diseño especialmente en la parte de ejecución del backend. .Es una sola imágen corriendo en un servidor que maneja 250k jugadores. El juego se ve impactante, aunque podría clasificarse como un minecraft clone (alguien en NH lo clasificó como una mezcla de Runescape y Minecraft (” vibes of old school Runescape, mixed with Minecraft“)). Enlace. Comentarios en Hackers News (la mitad de los comentarios se refieren al hecho fortuito de que el nombre del juego coincide con el sobre-nombre de un alucinógeno/droga popular en los 90s.. Muchos dicen inclusive, que no es una coincidencia. Bthrr)

2) Ian Donnelly (Jeremy Renner) y Louise Banks ( Amy Adams ) no se dan un solo beso en toda la película La llegada (Arrival). Sin embargo, hay una gran carga emocional por los “recuerdos” sobre su hija condenada a la muerte. Me pregunto si hubo intencionalidad entre estos dos hechos o es que realmente a Jeremy Renner no le gusta intimar en sus personajes. Algo así como Harrison Ford cuya incomodidad con las escenas de amor es evidente. Enlace.

3) Solamente en caso de que usted no lo sabe, python no tiene operador ++. Debido a ello, usted debe usar a=a+1 o a+=1 o usar C++ que tiene ++ hasta en el nombre. Una explicación, es que los diseñadores no quieren que las cosas se puedan hacer en más de una forma. hello? a=a+1, a+=1? python, pasando vergüenza desde 1991.

4) Hablando de python, me siento como un niño programando en “Basic” cuando hago cualquier cosa en él. Que lenguaje tan infantil. Parece Logo, aquél lenguaje donde había que mover una tortuguita. Que niñiedad.

5) Hablando de C++, o sea de C en mi caso, hoy 27 de diciembre, había 4 artículos sobre C en Hacker News y 0 artículos sobre Lisp. 0 artículos sobre Haskel, 0 sobre python, 1 sobre Rust (pero se llama Source Code Linking: Merging C Headers into Rust Modules) y por supuesto 0 artículos sobre Java. Creo que nunca he visto un artículo sobre Java en Hacker News.

6) “La vida no es un rompecabeza que debemos armar a lo largo de nuestra vida, es un rompecabezas que tenemos que armar todos los días, y en la noche luego de contemplarlo completo, lo deshacemos para a la mañana siguiente armarlo de nuevo”. Chidi, uno de los personajes de The Good place. Esta serie que es difícil de definir en términos de preguntas tales como ¿de qué se trata? ¿cuál es la trama?, resulta adictiva por razones igualmente difíciles de definir, diálogos profundos e interesantes (difícil repetir/explicar de qué hablan), personajes llenos de psicología (inclusive Jason, “de donde yo vengo hay muchas explosiones, cuando no consigues respuestas lanzas una bomba molotov y destrúyelo todo”), situaciones complicadísimas. Al final parece ser una parábola de la vida: la vida no es la búsqueda de respuestas, sino que es la respuesta. La pasión y la razón luchan todos los días, pero celebran como grandes camaradas por las noches. Hume y Kant son mencionados con frecuencia, no recuerdo alguna mención de Nietzsche. La serie nos recuerda constantemente cosas que hemos oído en alguna parte, ejemplo: “todos somos infelices de la misma forma, pero cada quien es feliz en su propia forma personal” (al revés de como dice el dicho). O, “cada quien hace de su vida un infierno”, o, “vivimos la vida de otros, con o sin intención”, o, “el camino al infierno está lleno de buenas intenciones”.

7) La tercera y última trilogía de la Guerra de las Galaxias (esta vez en manos de Disney) destruye completamente el legado. En poco tiempo, será descartada y olvidada. A menos que se tomen acciones con las próximas películas, correrá la misma suerte que Terminator, Aliens y otras franquicias. La gente dejará de ir a verlas. Lo peor de todo, es que estas películas (El despertar de la fuerza, Los últimos Jedi y El ascenso de Skywalker) son intencionalmente malas. Porque no hay forma de hacerlas peor, absurdas y sin sentido. Si no estás de acuerdo, lo estás viendo desde el punto de vista equivocado o tu visión está nublada.

Cierro este post deseándoles lo mejor para este 2020, escrito en el críptico lenguaje de los marabenets, habitantes de algunas regiones antiquísimas en Nunsoot, khpx.

Imagén implementada en python, usando matplotlib y la librería xkcd.

Enlaces de noviembre

26-11-2019 6:42 AM
  1. Si estás ocupado, estás haciendo algo malo“. Este artículo me puso a pensar porque no recuerdo haber estado desocupado desde hace 45 años. Es decir, tengo todo este tiempo haciéndolo mal. Al parecer, el autor insiste en que las personas con verdadero talento naturalmente utilizan su tiempo mejor, lo cual los hace más efectivos, y una forma de descubrirlos es que están desocupados más tiempo. En cambio,nosotros los altamente motivados pero torpes, empleamos nuestro tiempo en tareas inútiles, desordenadas, como un dwarf presionando botones sin sentido, y por supuesto, nunca tenemos tiempo. Ok.
  2. No te hagas llamar programador. (Don’t call yourself a programmer). Porque si lo haces te identificas como una unidad costo, es decir, no produces ganancia sino gastos. Creo que ya he comentado esto otras veces, así que mejor lo hago una vez más para que quede claro.
  3. Un recordatorio (en la misma tónica de repetirme a mi mismo) que archive.org tiene una inmensa colección de juegos MSDOS, incluyendo la interfase para jugarlos en el navegador. Enlace. Doom, Ports of Call, Pacman, y otros clásicos que son irresistibles de jugar (aunque a veces 5 minutos luego de comenzar te puedes aburrir). Por cierto que uno de los más populares es Oregon Trail deluxe, que permite jugar como un grupo de colonos en el lejano oeste. Muy divertido.
  4. Otro ejemplo de alguien que deja su empleo para dedicarse a programar juegos y descubre lo difícil que es. Fascinante leer los comentarios.
  5. Share” la película de Pippa Bianco donde una adolescente se ve expuesta a través de las redes sociales en forma inapropiada luego de una noche de desenfreno, alcohol y drogas. Enlace. Y comentatios, donde algunos critican la falta de profundidad, de justicia, y actuación de la pelicula. Yo por el contrario vi una película que analiza detalladamente las relaciones entre los adolescentes (tema que me interesa porque fui básicamente autista cuando adolescente), las interacciones y el uso de las redes sociales porque ese es el tema de la película (se llama Share / Compartir), cómo las redes sociales impactan y modifican la conducta de los jóvenes y como los chismes, las bromas y su propagación tienen una dinámica completamente diferente hoy en día a como era hace 20 años. La película no trata de cómo la justicia debe encarar una violación entre jóvenes, eso ya ha sido tratado hasta la saciedad por otras películas, el foco es cómo los jóvenes manejan el tema, y la protagonista en una fascinante actuación de Rhianne Barreto interioriza el suceso y actúa como fiscal acusador, jurado y juez, sentenciándose como culpable. Ella. Imperdible esta película para los que quieren ver un planteamiento y un enfoque totalmente diferente.
  6. Este análisis de Blade Runner desde el punto de vista de los fonts usados en la película es fascinante. Aquí el coleccionista de curiosidades se deleitará en una plétora de detalles: cuál es el font de los títulos iniciales ( Goudy Old Style), que el nombre de la compañía detrás de los replicantes (Corporación Tyrell) está en el respaldar de las sillas en la escena donde es interrogado Leon (uno de los replicantes). que el texto en la pantalla de la nave de Gaff es tomando de un manual de Matrix Color Graphic Camera System by Matrix Instruments y muchos otros detalles sin importancia pero vitales en una cacofonía de 5000 caracteres. Para perder el tiempo aliento.

Hay otra docena de enlaces que comentar pero tengo que regresar a trabajar, así que nos vemos en diciembre.