@ agnasg

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.

6 pensamientos sobre Gamedev antes del desayuno (3)

26-01-2017 11:41 AM

Esta es una serie de pensamientos sobre gamedev. Ver la anterior aquí.

  1. Este comentador piensa que con 1000 horas invertidas en un gamedev se puede tener un release pequeño. Será un juego de pong para android porque cualquier cosa ligeramente más complicada requiere más tiempo. ¿Cuándo decidí dedicarme tiempo completo a psyblast? 2013. No sé los primeros 3 años pero el año pasado fueron alrededor de 600 horas así que puedo estimar alrededor de 2000 horas hasta hoy, sin incluir las 52 de este mes. ¿Cuánto falta? Ni idea y he decidido no preocuparme más de eso. Yo no voy para ninguna parte ni tengo planeado cambiar de idea. Cuando llegamos a este tipo de resoluciones somos mucho más felices. ¿No es la idea que persigamos la felicidad? Bueno, eso es lo que estoy haciendo.
  2. Algún ruido ha generado este video donde un desarrollador (YandereDev) se queja que la gente de twitch prohibió la difusión de videos de su juego Yandere Simulator (tiene su propio subreddit, y es regularmente popular, su video donde habla del juego tiene 1.4 m vistas). Efectivamente está en la corta lista de juegos prohibidos. ¿De qué se trata este juego? Como leemos en el about, es un juego sobre el acoso a un chico por parte de una inocente (en apariencia) colegiala y la eliminación de cualquier chica que pueda estar interesada en él.  (“stalking a boy and secretly eliminating any girl who seems interested in him, while maintaining the image of an innocent schoolgirl”). Incluye asesinato, suicidio, acoso y abuso a través de redes sociales, algo de desnudez y todo con el estilo anime. Yay! ¿Por qué lo habrán prohibido? Al fin y al cabo, Ayano Aishi, la protagonista, o “Yan-chan” como es conocida cariñosamente por sus compañeros de clase tiene un perfil tipo psicópata similar a Dexter, el asesino serial que tuvo durante años su propia serie de televisión.Varios subreddits tienen cientos de comentarios sobre el tema: /r/pcgamming, /r/gamming/r/videos, etc. Mi primera reacción a todo esto es que este desarrollador es un pervertido y quiere explotar con facilidad las oscuras perversiones de algunos jugadores (su fanbase es de alrededor de un millón de personas, una mezcla de pervertidos y a los que les gusta el anime, aunque caso creo que es lo mismo). Así que inicialmente deseché el tema por amarillista. Mi segunda reacción fue descargar el juego por motivos educacionales. Como desarrollador debo estar en contacto con lo bueno y lo malo, y aprender de primera mano lo que no se debe hacer, o lo que se debe explotar al máximo. Ya comentaré al respecto. O quizás no.
  3. ¿Que me hubiera gustado saber cuando comencé a programar juegos? (“What is one thing you wish you knew back when you started? “, enlace) a) No reinventar la rueda: dedicar más tiempo al juego en sí y menos a las herramientas. b) Mejor no hacerlo (no dedicarme a gamedev) porque las probabilidades de éxtio son 0.0001% (ver este artículo para descubrir el por qué). c) Olvidar cualquier pensamiento asociado al punto anterior porque un programador de juegos no sabe vivir sin hacerlo. La gran lección es que tu exposición a la suerte es algo que puedes manejar (The big lesson is that your exposure to luck is something you can manage (enlace))
  4. Esto (las diversas formas de manipular apundadores a funciones en C) no solamente existe sino que es una realidad que le dedicamos un tiempo infinito a jugar con las peculiaridades de nuestro lenguaje de programación en vez de dedicarnos a programar. Muchas veces estuve horas probando diversas formas de colocar llamadas a una función miembro de una clase en una tabla. En realidad se puede hacer cualquier cosa con apuntadores a funciones, con el suficiente tiempo para malgastar. Otra de las formas que utilizo con frecuencias para procrastinar.
  5. Hablando de procrastinar leo por todas partes gente que abandona su trabajo para dedicarse a freelancing, o para dedicarse al sueño de su vida pero es poco frecuente abandonar freelancing para dedicarse a otra cosa. ¿Es un agujero negro? Quizás. En vez de formas de procrastinar debería buscar estrategias para reducir las horas de freelancing. El año pasado hice un esfuerzo pero no fue suficiente. Estaba pensando que otra forma de calcular el tiempo que le dedico a psyblast es calcular la merma en mis ingresos en comparación a los años donde le dediqué poco tiempo a gamedev. En el caso del año pasado es considerable, pero se puede haber visto afectado por otros elementos. Tengo algunas estadísticas pero tienen demasiadas variables difíciles de cuantificar. No parece ser el camino.
  6. Me voy a desayunar, el café ya me sabe a los mismo que sabe la cerveza a las 3 de la mañana, y ya no me queda tiempo para seguir pensando en trabajar sino solamente en trabajar en sí. El tiempo es un esclavista.

6 pensamientos sobre Gamedev antes del desayuno (2)

17-01-2017 7:29 AM

Esta es una serie de pensamientos sobre gamedev. Ver la anterior aquí.

  1. Este post. El autor habla sobre el proceso de programar un juego completamente desde scratch, incluyendo string classes, rutinas de compresion, script parsing e inclusive la virtual machine. En los comentarios en reddit hay una interesante respuesta en relación al uso del tiempo: “I get up at about 4:30am and do an hour or so of work on my stuff before heading off to work. I have a family so evening are usually spent with them…” (“Me levanto a las 4:30 am y trabajo alrededor de una hora antes de salir a trabajar. Yo tengo una familia por lo que las noches se las dedico a ellos”. Yo hago lo mismo, y me resulta tortuoso ver lo ineficiente que soy, una hora nunca me ha alcanzado para nada. Me dolió mucho lo de “Yo tengo una familia”. Ouch, yo también, se lo que es eso, y lo que es el sacrificio doble de dedicarles tiempo y no dedicarles el tiempo que se merecen debido a mi manía de se un gamedevEnlace.
  2. Tengo varios años visitando 4chan.org/v/, el canal de video juegos de 4chan y todavía no he conseguido alguna información de utilidad. Usualmente no tengo idea de qué es lo están hablando, qué relación tienen las imágenes con lo que dicen, y la secuencia de los comentarios. Todavía no he visto algo que se pueda llamar una conversación, y la coherencia entre comentarios de un mismo hilo es nula.
  3. Yo soy una persona honesta. Para mi Kickstarter es un préstamo. No es algo gratis que alguien me está dando, me están prestando dinero para hacer un juego, y ese dinero yo lo tengo que pagar con un producto. ¿Pero entonces de dónde sacas el dinero para hacer tu juego? Si pides un préstamo para hacer tu negocio eres un idiota. Hay demasiadas variables en juego para que le sumes la obligación de pagar el préstamo. Sobretodo si eres un procrastinador empedernido como yo. Uff. La respuesta es con inteligencia y trabajo. No hay alternativa.
  4. Asheron Call estará disponible hasta el 31 de enero. Al parecer ya no estaba generando suficiente revenue para justificar el costo de los servidores (este es un señor que tiene 17 años jugando este juego, así que es uno de esos juegos que generan lealtad, y por lo que se lee en reddit al parecer así es) Me pregunto que tan costoso puede ser, porque los muds (por ejemplo batmud) tiene décadas funcionando con alguna contribución ocasional. Claro la exigencia de un juego como AC debe ser mayor que un mmo de texto, y para AC (no tengo idea) debe ser mucho más que 100 jugadores simultáneos. Pero de todas formas debería estar en el orden de miles de dólares cosa que se podría recaudar entre los jugadores dado el caso de que efectivamente son muchos. O más de 100. Y si la lealtad es tal, cuál podría ser el problema.
  5. Esto es una historia de terror.  Los dueños de Playdead la compañía detrás de Limbo se pelearon y uno terminó comprando la parte del otro. Toda mi vida le he estado temiendo a este tipo de divorcios porque participé en múltiples empresas desde su fundación, y estas disputas son más comunes de lo que la gente se imagina. Y sí, son terribles, porque amistades son destruidas en el proceso. Una amiga y yo tratamos de montar una compañía para hacer páginas web. Nos peleamos decidiendo si usábamos su compañía o la mía, ya que ambos teníamos empresas de desarrollo creadas. Así que al menos en este caso la situación se resolvió sin problemas porque ni siquiera empezamos.
  6. He estado usando este timer para medir cuánto tiempo efectivo uso en el proyecto. Mis cálculos indican que fueron alrededor de 600 horas el año pasado, pero no estoy ni remotamente seguro. Quiero hacer un seguimiento de esto este año. El punto es que es bien difícil detener el contador cada vez que me distraigo. Que es aproximadamente cada 5 minutos. Es bueno porque de esa forma puedo contabilizar con precisión mi nivel de distracción. Eso. Cada 5 minutos. Interesante. No sabía lo distraído que era, o al menos lo sospechaba pero no lo había cuantificado. Tengo problemas con el flow ultimamente.

6 pensamientos sobre Gamedev antes del desayuno (1)

06-01-2017 5:31 AM
  1. Gamedev se refiere a game development, que se traduce en programación de juegos. Como cualquiera que esté dedicado a gamedev sabe, el inglés es tan omnipresente no solamente porque la mayoría de los foros están en inglés y porque toda la documentación está en este lenguaje, sino además porque las herramientas usan este lenguaje, y fueron desarrolladas originalmente en inglés. Finalmente, sacar al mercado un juego sin una versión multilenguage (que muestre textos, instrucciones y controles en inglés, además del español) es un suicidio de mercadeo. Así, tal como debes saber como programador (o si eres un buen programador que se ufana de serlo, como todos hacemos) el inglés no es necesidad, es obligatorio.
  2. Estaba leyendo este comentario en reddit: “You also have to have a good grasp of project management and planing. If your game code and assets are a mess 30% into the development time, you will have a very hard time to keep the discipline and your progress will slow” (“Usted también tiene que tener una buena comprensión de la gestión del proyecto y el planeamiento. Si el código del juego y los recursos son un desastre al 30% en el tiempo de desarrollo, usted pasará un difícil rato para mantener la disciplina y su progreso va a ser lento”). Me llamó la atención la consecuencia de la falta de planeamiento: es difícil mantener la disciplina. Cualquiera que entre en el mundo de gamedev sabe que la gestión del proyecto es fundamental porque son demasiados componentes, demasiadas tareas (tasks) que hay que hacer, y si el juego es un mmo, o un juego que requiera 20+ horas para completarlo (desde el punto de vista del jugador), es casi imposible llevar el control y que las cosas no se desordenen. Y cualquiera en medio de un desorden pierde la calma, el desorden se incrementa exponencialmente y las cosas se salen de control. El desarrollo se hace lento y cosas pasan.
  3. En la misma onda del comentario anterior: “Si el código del juego y los recursos son un desastre” ¿es posible evitar esto con planeamiento? Lo dudo. A menos que seas Niko, quien tiene en su haber 18 productos publicados, un motor gráfico, 2 juegos, etc. psyblast tiene pululando al menos 4 años en mi baúl de zombies y decir que el código es un desastre es al mismo tiempo injusto y una buena aproximación a la realidad. Yo soy 7/8 project manager (no certificado pero con al menos 30 proyectos de más de 200 horas) y escribo documentación para  psyblast cada vez que trabajo en él. El año pasado, 2016, me senté 96 veces a trabajar en el proyecto (implica 96 días diferentes, un 27% de los días del año si mi matemática es correcta) lo cual implicó al menos 300 horas de trabajo. Yo no sé ustedes pero 300 horas de trabajo es plata. Dinero. Enero de 2016 tuvo 18 entradas en mi bitácora, estamos a 6 de enero 2017 y ya llevo 4, así que me imagino que mantendré mi performance del año pasado. Sin embargo, a pesar de todo este tiempo, se puede leer en la bitácora cosas como lo siguiente: “Why CMmgr class instance is a member of CGui, m_mmgr?” (¿por qué una instancia de CMmgr es un miembro de la clase CGui? Debería ser un apuntador, o ambas clases deberían ser friend, no sé.
  4. Por ejemplo. ¿Cómo están organizadas las clases en psyblast? Correcto. No están organizados. Alguna vez tenían un diseño Componente-Entidad, pero en este momento las clases están organizadas en grandes bloques de código super especializados CGui que maneja la interacción con el jugador, CMmgr que maneja los modelos pero también manipula el comportamiento de los npcs, CNpcInt que maneja la interacción de los npcs. En mi bitácora se lee por todas partes “tengo que corregir esto” porque en el fondo se que algo tengo que hacer para seguir las mejores prácticas, como aplicar diversos paradigmas según el caso, por ejemplo un enfoque Model-View-Controller. Pero, eso entra en contradicción con el tiempo de entrega, que debe mantenerse en “pronto”.
  5. Lo cual me lleva a la lentitud del desarrollo que es algo tan difícil de explicar a alguien que no sabe nada de los intrilinguis de todo lo anterior, como explicármelo a mí. Me quedé atascado en julio pasado porque un boss se estaba desplegando mal en el juego, y podía ser por una multitud de razones, blender, el plugin que exporta el modelo, o que no estaba generando las animaciones correctamente, etc. Hace un par de días descubrí que la armature (el esqueleto) estaba rotado 90° en las X’s, y que algunos huesos tenían un roll diferente de 0°. Porqué no me dí cuenta de eso el año pasado que parece tan obvio es un misterio. Ayer el código que detecta que no hay obstáculos entre el player y un npc estaba fallando, y luego de una hora debugueando aquí y allá descubrí que en la llamada a la función cmgr->rayIntersect (start…) el start debe corresponder al npc no al player, de otra forma el resultado es cualquier cosa. ¿Qué tiene que ver esto con el planeamiento? Nada, resolver estos problemas toma tiempo, y no se puede planificar no tener estos problemas, hay que tener la disciplina para abordarlos y resolverlos sin ceder al impulso de tirar todo esto y llevar una vida divertida (pero vacía) sin el endemoniado gamedev. Por otro lado, ¿tener las clases mejor organizadas evitará estos problemas? Tampoco. ¿Y entonces? Ya lo dije, hay que tener paciencia y disciplina, el resto se deriva de aquí. Quizás mi mentalidad tropical juega en mi contra, es posible que Niko en bavaria quizás tiene los genes y el ambiente flemático que se requiere para mantener el ritmo en un proyecto que toma tiempo para completarse. Quizás.
  6. La mentalidad tropical se caracteriza por la urgencia de resultados inmediatos ignorando los pasos que se requieren para completar una tarea. Como todo en la vida, hay que tener paciencia y disciplina. O, dicho de otra forma, quizás, como el campesino que tenía un caballo, un hijo y unos vecinos que se apresuraban a decir lo bueno de tener un caballo, lo malo de perder un caballo, lo bueno de recuperar el caballo, lo malo de que tu hijo se rompa una pierna montando el caballo, lo bueno de que como tu hijo se rompió una pierna ya no tiene que ir al ejército. Bueno. Malo. Quizás y quizás. No hay nada que pueda contra la paciencia y disciplina.

Rogue One

27-12-2016 1:14 AM
ESTE POST NO TIENE SPOILERS PERO HABLA DE SPOILERS

Con Rogue One me pasó lo mismo que con Titanic: alguien me dijo el final. En el caso de Titanic una señora que estaba en el asiento de atrás  comentó con alguien “Ay, Leonardo es tan bueno, lástima que su personaje muere al final de la película”. Con Rogue One fue igual de ridículo, ví un post de este sitio horrible llamado Taringa, con un título inocente y sin aviso ni protesto comenzaba por revelar el final de la película. Me de-suscribí de inmediato.

En realidad yo no tenía muchas expectativas.  Episodio 7 fue casi una decepción por los problemas que tiene la historia (sin mencionar que es casi idéntica a episodio 4). Así que fui al cine más por las obligación debido a mi afición a la saga que por la esperanza de que iba a ser una buena película. Teníamos la sala para nosotros solos (fuímos a una función a las 4 de la tarde un 22 de diciciembre) así que no había posibilidades de otras intromisiones.

Excelente. Divertida. Te mantiene agarrado del asiento las 2 horas. No hay un momento de respiro. A diferencia de las otras no hay ni un momento de reflexión, es sobre guerra, y la guerra rara vez tiene una presencia tan envolvente en la saga. Un excelente guión, sólidas actuaciones incluyendo la del personaje Tarkin, totalmente digital dado que el actor Peter Cushing murió en 1994, y que tiene un role vital en la película. Es fascinante como la historia desencadena en episodio 4, “una nueva esperanza“. Altamente recomendable.

La recompensa del trabajo es más trabajo

24-12-2016 2:54 AM

Esto es obvio para cualquiera que tenga algún tiempo trabajando en computación y áreas conexas. También en el área administrativa de las empresas. Es tan obvio que me imagino que debe aparecer varias veces aquí y allá en este blog. Al menos me sorprendería si no es así. Tengo mucho trabajo como para ponerme a buscar.

La recompensa del trabajo es más trabajo. Lo que me lleva a pensar en la frase hay que trabajar para vivir y vivir para trabajar, los pescaditos de oro de Aureliano Buendía (vendía los pescaditos de oro por monedas de oro que fundía para hacer más pescaditos de oro), y el picapedrero de Kwai Chang Caine  (¿quién es el más poderoso, el picapedrero o el dueño de la montaña?), y muchas otras parábolas. Todas hablan sobre el mito alrededor del trabajo y para qué trabajamos. No me mal entiendan, yo me levanto a las 5am (4am hoy) y estoy trabajando hasta las 7pm (a veces hasta las 10pm) todos los días (incluyendo domingos), y si no tengo todas y cada una de mis neuronas al borde del agotamiento absoluto no me quedo tranquilo. Así que no estoy diciendo algo así como “si tienes ganas de trabajar, acuéstate a dormir y espera que se te pase” sino más bien, “acuérdate de por qué trabajas, porque puedes pasar toda tu vida haciéndolo por la razón equivocada”. Yo sé que hay personas que trabajan 50 años de 8-5, se recluyen en un hospicio y mueren sin jamás cuestionarse nada de esto, e inclusive me miran con lástima si me oyen mencionarlo, porque al cabo de cualquier discusión  estéril sobre el tema se llega a lo mismo: qué vas a hacer, la vida es así. Sí, yo he vivido ese camino, ahora pienso que no, la vida no tiene que ser así. O al menos me gustaría, en mi lecho de muerte, con una sonrisa mitad satisfacción, mitad alegría, tener mis pensamientos en paz con una vida llena de certidumbres sobre el qué, el por qué y el para qué.

No, no tengo respuestas definitivas a todo esto. Es diciembre, siempre tengo este tipo de pensamientos por esta época.

 

 

 

 

Buenas y malas noticias: Eve es gratis… o algo así

17-11-2016 12:23 PM

Como es reportado por todas partes salió la expansión de Eve Ascencion que entre cosas ofrece f2p para los jugadores, es decir, jugar gratis. En reddit la discusión fue intensa, pasando de “siempre he querido probarlo” a “luego de un par de semanas seguía sin tener idea de qué es lo que estaba haciendo”, y además “eve es un asco y CCP es una porquería” (CCP es la compañia detrás de Eve).

Las opiniones son mixtas: en realidad no es exactamente gratis, es prueba ilimitada, pero con limitaciones, porque no puedes comprar un battleship, y hay quienes dicen que justamente es con los battleships que el juego se pone divertido.

Yo lo estuve probando hace 3 ó 4 años, durante un par de semanas.

La buena noticia es que Eve tiene esta nueva modalidad de prueba gratis.

La mala noticia es que borré el juego el año pasado (7gb)

No, esa es una buena noticia también, todas son buenas noticias.