@ agnasg

agnasg


khpx update

25-03-2022 12:09 PM

Ha estado lenta la bitácora de khpx, apenas 35 días de trabajo en lo que va de 2022, eso es alrededor de 230 horas, quizás menos.

Pero tenemos un hito: el pasado 8 de marzo terminé una cadena de quests que estaba programando desde el 19 de julio de 2018. Tiene todas las características que va a tener mi engine de quests: voy a tratar de no agregar más nada: recolección de objetos en la superficie, recolección de habitantes, selección de habitantes basado en su adn utilizando el sensor de adn, etc. No parece complicado pero si lo es. Estos 4 años estuve no solamente implementando los quests en sí, sino considerando todas las posibilidades.

Un ejemplo: descubrí que se puede usar el sensor de adn para detectar los ciudadanos infectados estando el robot en el depósito de la nave. Se supone que este sensor solamente se puede usar una vez que el robot está en la superficie del planeta, en el área de la ciudad donde están los habitantes. Para implementar esto, estuve agregando scripts y código c++ durante unas 2 horas más otras 2 horas pensando cómo hacerlo porque estos son el tipo de cambios difíciles de implementar. ¿Se coloca en el script de la misión o en el script del objeto (del sensor)? ¿o en el script del robot? Al final quedó en el script del sensor, pues hace más sentido. El script ahora indica que este objeto solamente se puede ejecutar si el robot está activado (en manos del jugador) y si el robot está en la superficie del planeta. Todo muy obvio pero toma tiempo de implementar. Así por el estilo cientos de consideraciones, cientos de decisiones. Lo que me lleva a…

¿Cuál es la peor decisión que he tomado en el desarrollo de khpx?

Difícil de decidir cuál es peor, porque he tomado varias decisiones malas en estos últimos 4 años. Pero definitivamente sin pensarlo mucho, lo peor ha sido no con khpx en si mismo, sino con Summa, el editor. Summa (que espero escribir un post dedicado a él (o ella)) es un editor que permite manejar todos los datos del juego en forma consistente, unificada y tiene el objetivo de poner orden en el caos. Las misiones quedan todas organizadas en un solo sitio, se pueden visualizar, editar, modificar etc..

Yo no tengo idea de cómo hacen otros programadores para controlar toda la data persistente, pero mi solución es colocarlo todo en una base de datos, y crear una aplicación que maneje toda la data. Entonces el juego es como un visor de esa data . Lo único que el juego guarda es el estado: qu´é se ha hecho, donde se ha estado, etc.

Mi aplicación que maneja toda la data se llama Summa (como la Summa Teológica). Fue desarrollado usando Qt y aquí está el problema: si lo hiciera desde cero hoy, utilizaría Imgui, sin lugar a dudas. Qt es grande, pesado, complicado y grande y pesado. Está desarrollado con la versión de Qt 5.6 (creo que ahorita van por la versión 6.2, luego de llegar hasta 5.15), es open source, pero no hay distribución de librerías sino solamente el código fuente. Tarda 2 horas en compilar en mi máquina.

Es extremadamente fácil de usar, tiene un editor de gui, Qt Creator que permite posicionar los elementos de tu aplicación (texto, botones, drop down menus, etc.).

El problema es que al abrir una página dentro de la aplicación (Summa tiene 20 páginas) en windows aparece un nuevo ícono en la barra de tareas, es como si estuvieras abriendo una aplicación nueva. Sucede algo así como esto:

Cada aplicación ocupa un espacio en la barra de tareas, pero Saeta, una aplicación desarrollada en Qt (es una herramienta desarrollada por mi) tiene tres íconos porque cada ventana es como si fuera una aplicación diferente: el primer ícono es la aplicación en si misma, el segundo de la pantalla de configuración, el tercero la pantalla de “acerca de”.

Yo no quería eso para Summa porque es una app que voy a estar usando todo el tiempo (6 horas al día al parecer), y porque en mi trabajo de freelancer debo tener otras aplicaciones abiertas (Notepad++ para editar php, excel, putty, la cónsola con cygwin, otras). Tener la barra de tareas full de íconos afeta mi TOC (o OCD en inglés (“OCD often centres on themes such as … need to arrange objects in a specific manner“), así que me fui a Stackoverflow y busqué cómo se hace para que una aplicación Qt abra todas las ventanas pero usando un solo ícono: la respuesta es usar un StackedWidget. Así luce en QTCreator:

Cada línea es una pantalla diferente

Y efectivamente la aplicación abre cualquier cantidad de ventanas y utiliza un solo ícono en la barra tarea. Pero hay un problema, consecuencias David, el tiempo de compilación de una aplicación con un stacked widget de 20 ventanas es 10x el tiempo normal. Cuando hago un rebuild, puede tardar 8 minutos en vez de menos de un minuto, que es lo normal. Eso fue un error, y por supuesto eventualmente voy a tener que eliminar el stacked widget. No se si el problema se resuelve con las versiones nuevas porque yo trabajo en windows 7 y VS2013 y Qt 5.8 requiere Visual Studio 2017 y eso requiere Windows 10. Este cambio tendrá que esperar a mi nueva máquina que si todo sale bien será en algún momento de este año.

Estadísticas para estar al día

14-02-2022 8:40 AM

Mi diario personal tiene 95 mil palabras. Estoy escribiendo tonterías en él desde los 15 años. Ya es un libro en si. Esto no incluye los primeros 12 años que según mis cálculos deben ser otras 20mil palabras. Está escrito en cuadernos escolares. 7 cuadernos. Antes escribía todos los días. Ahora pocas veces al mes. Si acaso.

khpx mi eterno juego, eternamente en desarrollo y que todavía no tiene fecha de publicación, tiene 245 archivos, 961 funciones, y 4 años en intermitente desarrollo (al parecer trabajo unos 5-6 meses al año). La bitácora de khpx tiene un cuarto de mega de tamaño. 256k bytes de texto. Yo no uso herramienta alguna de backup ni manejo de versiones (git). Simplemente copio los archivos en un directorio con una numeración secuencial. En este momento el último backup es el número 530. Hago 1-2 backups cada dia de desarrollo.

El script bash usado para contar las funciones en el código fuente de khpx es el siguiente:

grep -Ec "^(void|int|char|std\:\:string).*[^;]\s$" $1/*.cpp  | awk -F ':' 'BEGIN {cnt=0} {cnt += $2} END{ print "Count = ", cnt}'

En khpx, las funciones no retornan otros valores. Casi.

Este blog tiene 631 posts. Lo comencé en agosto de 2003. Antes lo escribía completamente en HTML. Escribiendo el código HTML conjuntamente con el texto, usando el editor vim. La palabra “khpx” aparece en 41 posts. La palabra procrastinación, 14 posts. La categoría “editorial” tiene 322 posts, “programación de juegos” 80 posts. Hay 4 posts en la categoría Java, básicamente explicando porqué debemos huir de él como de la plaga.

Jugué Word of Warcraft (wow) durante 12 años, desde 2008 a 2020. Haciendo un cálculo conservador, estuve inmerso en el mundo de wow en total 16 mil horas. La mayoría de la gente duerme el doble de eso en 12 años, así que siento que aproveché el tiempo. Recuerdo con bastante precisión cada una de esas horas. La mayoría de la gente no se acuerda de lo que sueña. Llegué a tener 9 personajes a nivel máximo (ahora la mayoría está en 45-50, el máximo de BfA, la última expansión en que participé). Fueron 7 expansiones, nunca jugué la última, Shadowland. Microsoft pagó 63 millados de dólares por Activision Blizzard, los dueños de wow. Esperemos que esto sea bueno, lo más probable es que sí, aunque mi tiempo con wow terminó.

Nota: este post surgió por accidente. Presioné por error un botón en Msft Word y apareció el cuadro con estadísticas de mi diario que aparece al comiento.Es un post justificadamente accidental.

Wordle

02-02-2022 3:26 AM

La última noticia que ha perturbado el ambiente de los juegos y negocios es que Wordle, el juego de descubrir la palabra que se hizo viral en los últimos 3 meses, acaba de ser vendido al New York Time por 7 dígitos bajos (discusión en Hacker News). La gente se apresuró a esgrimir todo tipo de conjeturas y discusiones incluyendo ” Sinceramente, no sé por qué el NYT compró wordle por siete cifras cuando casi cualquier programador podría montar un clon en un fin de semana.” lo cual generó el siguiente comentario: “Este es un comentario clásico de Hacker News. Se centra puramente en el aspecto técnico, pasando por alto completamente el revuelo mediático en torno al juego y la base de millones de jugadores ” (enlace).

Lo cual es cierto: aquí hay un clon hecho en 50 líneas de bash .

¿Qué hizo a Wordle tan popular?

  • Es un juego super común (se parece a un crucigrama o a un damero). Se puede explicar su mecánica en 5 segundos.
  • Es simple: son sólo palabras de 5 letras.
  • El hecho de que puedes compartir el resultado con tus amigos. Eso es clave en que se haya convertido en viral. Un juego personal se transforma en una experiencia social. De hecho el crucigrama puede generar algo similar “¿Deja cosas por decir? 9 letras, termina en ‘e’?”
  • Es un reto que al ser derrotado genera una satisfacción inmediata: excelente diseño para un juego. Por eso las misiones son tan populares y algunos juegos dependen totalmente de ellas.

Yo estoy pensando lo que todos los desarrolladores que han estudiado este fenómeno están pensando: ¿por qué a mi no se me ocurre algo así? ¿cómo podría replicar este éxito? ¿estoy perdiendo el tiempo?

Como quiera que sea, este es un buen ejemplo de por qué nosotros los programadores vivimos al bordel abismo entre el éxito y el fracaso: podemos hacer un artefacto en un fin de semana que vale millones (o al menos 7 dígitos bajos). Otras profesiones van a necesitar algo de ayuda para lograr eso (a menos que trabajes en Wall Street).

Richard Parker y el Letting go speech

02-11-2021 5:33 PM

Este blog ha estado muy callado porque agnas vendedor anda alborotado haciendo todo tipo de planes, como despertándose de una largo sueño y queriendo devorar el mundo sin desayunar siquiera. Al menos aquí está su declaración, enhorabuena.

“Este es un anuncio sobre mi nueva aventura de vida, lo que he decidido hacer los próximos años. Es un anuncio un poco dramático, ciertamente, pero será divertido. Lo prometo.

Para algunos esto sonará descabellado (por favor, soy calvo), para otros triste porque puede sonar incomprensible, dada la situación que nos ha acompañado aquí en Venezuela todos estos años.

Para todos ellos les recuerdo el final de esa maravillosa película “La vida de Pi”, donde Richard Parker, el tigre, al llegar a tierra firme, simplemente se sacude el agua de encima, y se adentra en la selva. Sin decir adiós, sin voltear para atrás, sin abrazos ni lágrimas. Porque la vida no espera por nosotros, continúa, perpetuando el cambio constante, sin pedir permiso, sin despedirse de etapas viejas, simplemente adaptándose al cambio eterno.

Está en nosotros aceptar y aprender que el cambio es parte de la vida, y que no habrán fuegos artificiales, ni vítores, ni abrazos para despedir y darle la bienvenida a la nueva etapa.

He aceptado el cargo de Gerente de Ventas para Venezuela de Byteforce, una nueva empresa de tecnología basada en Miami, formada por emprendedores venezolanos con una larga experiencia en el ambiente tecnólogico venezolano. Es una empresa del grupo Cubix, empresa emblemática en el mercado de tecnología, con más de 30 años de experiencia en Venezuela y latinoamérica.

Es una decisión atrevida y llena de esperanza, pero también puede ser una enseñanza para muchos: hay 25 millones de venezolanos que decidimos quedarnos y meterle el pecho a este país que está tan golpeado pero que lucha todos los dias por levantarse.Yo en mi dia a dia, aporto mi granito de arena para ayudar en algo y en la medida de mis posibilidades, y esta decisión forma parte de ese aporte.

Los que me conocen con mi sombrero de vendedor quizás se sorprendan porque estaré trabajando marcas como Dell, Lenovo, HP, Toshiba, otras, que son principalmente empresas de hardware: sí, los últimos 15 años he sido un vendedor de software, al principio de soluciones de inteligencia de negocios (Business Objects, Cognos, Pentaho), últimamente de mis propias soluciones (es decir, desarrolladas por mi). Pero les recuerdo que mis inicios fueron como vendedor de hardware en la siempre recordada Sun Microsystems, ahora Oracle, donde marcamos la pauta de la innovación tecnólogica en Venezuela y el mundo.

Proximamente escribiré cómo evoluciona todo. O no.”

Para los interesados este es el ” Letting go speech” de la película “La vida de Pi”.

Edit: “… la vida se convierte en un acto de dejar ir. Pero lo que más duele siempre es no tomarse un momento para decir adiós” (“The whole of life becomes an act of letting go. But what always hurts the most is not taking a moment to say goodbye“).