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.

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 pronto 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.

18 de Febrero, 2019

»Un podcast para CPC · El amigo Chema ha arrancado un nuevo proyecto en forma de podcast, dedicado al CPC, y con un formato bastante simpático: charlar con un invitado y recordar un par de juegos de la época. En el tercer episodio charlamos un rato sobre Commando y Target: Renegade. No sé porqué me dio por repetir la misma coletilla un montón de veces, supongo que los nervios y un poco no estar acostumbrado a estas cosas. Los episodios no son muy largos y, por ahora, van mejorado con cada entrega. Muy recomendable.

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

9 de Enero, 2019

Trabajando en Night Knight

Ya comentaba que Moonstone era muy grande y quería hacer algo más pequeño, con lo que empecé con Starblind en el ZX Spectrum.

Estas navidades le fui dando vueltas a una idea, que encajaba más con mi planteamiento inicial para un primer juego de MSX, así que he empezado a trabajar en Night Knight (vaya, ¿otro? :D).

Pantalla de prueba
Pantalla de prueba

La mecánica es sencilla y encaja en la idea de arcade de una sola pantalla (como Magica). La historia más o menos es la siguiente:

Sir Arthur tiene un pequeño problema: padece insomnio. Lo único que le ayuda a dormir por las noches es dar largos paseos, cosa que no es nada fácil cuando vives en un castillo encantado.

La idea es que el jugador en la piel del caballero (en pijama, night knight suena como una forma de decir buenas noches en inglés), que debe recorrer todas las losas pisables de la pantalla. Cuando todas esas losas cambian de color, una llave aparecerá para abrir la puerta y pasar a la siguiente pantalla. Muy sencillo.

La dificultad viene sobretodo de navegar la pantalla sorteando enemigos y diferentes peligros (como esos pinchos que se ven en el pantallazo).

El motor está casi acabado, gracias a tomar algo de código de de Moonnstone, y siendo un proyecto sencillo me está sirviendo para trabajar en el sistema y aprender sin distraerme demasiado con un concepto de juego demasiado ambicioso. Y además: ¡parece que va a ser divertido!

La parte no tan positiva es que se trata de otro proyecto más, aunque parece uno de esos que consigo cerrar en tres o cuatro meses, así que pinta bien.

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

Entradas antiguas