@ agnasg

agnasg


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.