9 de Julio, 2019

»Scripts en python para convertir gráficos · Este pasado fin de semana puse en un repositorio público una versión de mis scripts para convertir PNG para usar en el MSX. Hay gente que usa herramientas específicas, pero yo prefiero trabajar con GIMP y luego convertir un formato moderno (como el PNG) a lo que sea que necesito en el sistema para el que estoy programando. Lo mismo hice para el C64 y para el ZX Spectrum. Me falta publicar las de CPC, solo tengo que revisar el código y quizás añadir algún extra para que las herramientas sean un poco más útiles (por ejemplo: en estas últimas que he publicado he añadido soporte para generar datos para ensamblador, aunque no es algo que yo use en mis proyectos).

Hay 0 comentarios, anotación clasificada en: python, open source, msx, c64, speccy.

8 de Julio, 2019

»Trabajando en Uchusen Gamma · Desde que publicara Night Knight he continuado trabajando en Starblind, sobretodo en las sesiones que he ido grabando, pero ese proyecto se ha vuelto a enfriar un poco (quizás porque la idea está un poco menos definida). Creo que fue en las navidades pasadas que estuve cacharreando con la idea de hacer un juego con scroll en MSX empleando algunos trucos (porque el MSX no tiene hardware para hacer scroll), pero se quedó en nada. Le he dado otra vuelta y he conseguido algo que ya tiene nombre: Uchusen Gamma (algo así como nave espacial gama, medio en japonés). La cosa pinta bien y aquí hay un vídeo de la primera fase probando música y efectos.

Hay 0 comentarios, anotación clasificada en: msx, programming.

16 de Junio, 2019

LSP y Vim

Llevo ya unos años usando syntastic en vim, especialmente en Python (y algo en Go, porque he programado menos en este lenguaje). Lo que hace este plug-in es analizar la sintaxis de nuestro código con diferentes herramientas según trabajamos (normalmente al guardar el documento), y nos muestra en la barra lateral si hay errores o warnings.

Es como compilar según programamos, y a mi personalmente me ha servido mucho para mejorar mi python porque esos warnings te enseñan casi sin esfuerzo a escribir código siguiendo la guía de estilo de python (el PEP8). Aunque últimamente estoy volviéndome muy fan de herramientas que dan formato a nuestro código automáticamente, pero esto ya es historia para otra anotación ;).

Analizar el código así tiene ventajas, pero evidentemente tiene un coste, porque cada vez que se guarda el fichero, hay que ejecutar la herramienta que hace el trabajo. En general hablamos de milisegundos, y desde hace un tiempo vim hace esto de forma asíncrona (de fondo, sin bloqueos).

Hasta que empiezas a programar en Scala y tienes el problema de los tiempos de arranque de la máquina virtual de Java :(.

La verdad es que syntastic es una pasada, pero ha costado tiempo añadir soporte para muchos lenguajes y herramientas, y está disponible solo para vim.

Aquí es donde entra Language Server Protocol, que es una propuesta de Microsoft para estandarizar un protocolo para proporcionar la misma funcionalidad que syntastic nos da, y mucho más.

La idea es que ejecutamos un cliente de LSP en nuestro editor, sea cual sea, que se comunicará con un servidor que proporciona la funcionalidad necesaria para el lenguaje en el que estamos desarrollando.

De esta forma los servidores son independientes del editor, y al ser una arquitectura cliente/servidor, no es necesario esperar a que las herramientas arranquen, con lo que la lentitud al arrancar de la máquina virtual de Java es irrelevante (o incluso el análisis de grandes ficheros en python si usamos una herramienta pesada como pylint).

Aparte del análisis hay otras funcionalidades, como acceder a la documentación, auto-completar código semánticamente, refactorizar código (por ejemplo: renombrar variables), etc; todo dependiendo de lo que soporte el cliente y el servidor (LSP es bastante grande).

Ahora mismo hay una buena lista de servidores, y he encontrado un cliente muy fácil de instalar y que funciona muy bien en vim: LanguageClient-neovim.

En python es muy fácil instalar python-language-server y, aunque hace más o menos lo mismo que syntastic, es un poco más rápido y da algunas cosas extra que pueden ser bastante útiles.

Al final todo esto es lo mismo que se puede conseguir en un IDE pesado, pero me parece genial poder contar con estas ayudas en mi editor favorito.

Actualización: me he pasado a usar vim-lsc. Entre otras cosas, funciona mejor con Metals, que con lo que más lo uso.

Hay 0 comentarios, anotación clasificada en: vim, programming.

1 de Junio, 2019

Las contraseñas de Night Knight

Ya han pasado unas semanas desde la publicación de Night Knight, y ya ha habido tiempo para que la gente juegue y diga lo que piensa, y la respuesta ha sido mayoritariamente positiva.

Los pocos comentarios negativos no están dirigidos al juego en sí, sino a temas de presentación, como por ejemplo que el sistema para introducir contraseñas no es muy cómodo, o que el juego debería permitir continuar una vez se acaban las vidas.

Lo cual no está mal, porque lo que ha gustado menos, no es el juego. Tomo nota para hacer las cosas de forma diferente en el futuro.

Este es el primer juego en el que implemento contraseñas, y no quería que fuera la principal forma de jugar al juego. Cambia mucho la dinámica si te enfrentas a cada pantalla con 3 vidas una y otra vez hasta que pasas a la siguiente y te apuntas la contraseña.

Evidentemente no espero que nadie, o casi nadie, complete las 80 pantallas de una sentada, por eso implementé el sistema de contraseñas. Además me permite cometer más errores diseñando las pantallas, tanto por ajuste de dificultad como por curva de aprendizaje (por ejemplo, en Magica la última pantalla del juego es notablemente más fácil que las dos anteriores).

Pero está claro que el diseño del juego no funciona igual si tienes un número infinito de vidas (mantienes los puntos) o de continuaciones (pierdes la puntuación), y con las contraseñas lo que he propuesto es continuaciones incómodas, esperando que los jugadores arriesguen y no guarden la contraseña en cada pantalla.

Respecto a las contraseñas en sí, el sistema es muy sencillo y consta de 3 bytes codificados en 6 caracteres de un diccionario de 16. Por ejemplo YRYPKN.

El primer byte es aleatorio, para que sea más complicado romper el sistema (para mi que es más fácil meter un poke para conseguir vidas infinitas), con lo que puedes tener 256 contraseñas válidas para una misma pantalla. El siguiente byte es el número de pantalla al que se le aplica una función basada en el primer byte, y finalmente hay un byte de control muy simple para evitar que una contraseña aleatoria funcione.

Al final es muy sencillo y la mayor complicación ha sido introducir la contraseña, porque decidí no usar el teclado. Los MSX pueden tener las teclas organizadas de muchas formas, incluso más que QWERTY y AZERTY, y debido a cómo se lee matriz del teclado en estas máquinas, era imposible hacerlo de forma que funcionara en todos los modelos.

Tengo pendiente poner por aquí algunos enlaces a reacciones al juego, que además va a salir comentado en un par de publicaciones en papel :D.

Hay 0 comentarios, anotación clasificada en: msx.

15 de Mayo, 2019

»Night Knight ·Ya he publicado Night Knight y está disponible para descarga gratuita. La edición de coleccionista, por parte de Poly Play, está casi lista y espero que en breve esté en manos de la gente. Es pronto, pero por ahora parece que la recepción ha sido bastante buena. Es juego es divertido, eso ayuda :). Una anotación corta y un poco sosa, pero mi excusa es que no tengo mucho tiempo para más. Intentaré poner algunos enlaces a reacciones cuando las hayan.

Hay 0 comentarios, anotación clasificada en: msx.

16 de Abril, 2019

»Fecha para Night Knight · Ye tenemos fecha para la publicación de Night Knight, y es el 15 de Mayo de 2019. El juego lleva ya acabado más de un mes, pero son las cosas que tienen las ediciones físicas.

Actualización: he mandado la "nota de prensa", y ya se ha mencionado en algunos sitios. Por ejemplo:

Hay 0 comentarios, anotación clasificada en: msx.

23 de Marzo, 2019

»Sesiones de programación · Estoy haciendo un experimento: estoy grabando mis sesiones de programación haciendo juegos de 8-bits, y compartiéndolas en YouTube. Pensaba inicialmente hacer streaming en directo, pero resulta que mi conexión a internet no tiene suficiente subida, así que por ahora estoy haciendo algo más sencillo que es grabar y luego subir el resultado. Todo en inglés, con mi acento, y además he preparado una página web con información. Por ahora está resultando interesante, veremos en qué queda :).

Hay 1 comentario, anotación clasificada en: programming.

18 de Marzo, 2019

»Teclados mecánicos · He descubierto por accidente un subreddit sobre teclados mecánicos, y los participantes en esta comunidad suben fotos de teclados que son una auténtica preciosidad. Hace 5 años me pasé a ordenador de escritorio y me compré un teclado compacto mecánico. Por aquel entonces no tenía mucha idea y creo recordar que no habían tantas opciones económicas como hay ahora, pero tuve la suerte de comprar un buen teclado (un KBT Pure Pro PKX-7000, que ahí sigue como el primer día). Y es eso lo que me ha llamado la atención: la cantidad de teclados decentes por menos de 30€, todo gracias a los gamers. No creo que cambie de teclado a corto plazo, pero parece que es buen momento para probar y hacerse con uno de estos teclados que mejoran mucho la experiencia que proporciona un teclado tipo dome-switch más común (y barato).

Hay 0 comentarios

26 de Febrero, 2019

vim + tmux

Llevo un montón de años trabajando con gVim, que es la versión de Vim para entornos de ventanas. No recuerdo porqué empecé a usarlo (sin menús ni nada, muy minimalista), creo que porque se veía mejor, relacionado con cómo se dibujan las fuentes.

La verdad es que estoy contento, hace todo lo que necesito, y además soy muy productivo con él. Pero de vez en cuando me gusta revisar mis herramientas y ver si puedo mejorar algunas cosas.

Tampoco pruebo mucho otros editores, que además tienen que proporcionar algún tipo de vim mode para que pueda importar mi forma de trabajar, pero a veces es útil para tomar ideas prestadas (cómo cuando probé Emacs y gracias a eso descubrí el super-poderoso vim-fugitive para trabajar con git).

Recientemente leía un post sobre cómo configurar varias cosas para hacer streaming de programación, y viendo su forma de trabajar con vim me picó la curiosidad: ¿podría funcionarme una configuración similar?

Una de las limtaciones de Vim es que no tiene una forma óptima de incluir una terminal en el editor. Aunque la versión 8.1 incluye soporte para terminales, estas tienen algunas limitaciones que no me terminan de convencer.

Así que he decidido dedicarle un poco de tiempo y configurar tmux (un multiplexador de terminal :D, como GNU screen), y hacer que Vim funcione perfectamente en un terminal (principalmente he tenido siempre problemas con los colores, cosa que gVim soluciona).

La idea es, en lugar de tener una terminal en el editor, tener un editor en la terminal ;). Con tmux podemos hacer cosas como partir la ventana en paneles, dividiendo el área de trabajo en varias zonas.

Me ha costado un poco que Vim muestre temas correctamente en terminal, y luego dentro de tmux, pero el resultado es muy satisfactorio. Cambio muy poco (o nada) de ventana y mi forma de trabajar es un poco más ágil y cómoda que usando gVim. Como bonus: ¡puedo hacer lo mismo vía SSH!

Por si a alguien le interesa, tengo mis dotfiles en un repositorio público (mejor que el tarball que guardaba antes).

Hay 2 comentarios, anotación clasificada en: programming, vim.

24 de Febrero, 2019

»Night Knight va bien · Parece que el juego estará listo a mediados o finales de Abril, con edición física por parte de Poly Play. Me faltan diseñar las últimas 10 pantallas (de un total de 80, igual es un poco mucho :S), música, intro/fin de juego, manual; cosas así, pero lo que es el juego en sí mismo lleva cerrado ya un par de semanas. Parece que va a caber todo bastante bien, gracias a que va en cartucho (de 32K) y a la arquitectura del MSX, que básicamente nos da más memoria porque la memoria de vídeo va aparte en el VDP (video display processor), en lugar de ser la memoria donde va código y datos.

Hay 0 comentarios, anotación clasificada en: msx, programming.

Entradas antiguasEntradas nuevas