viernes, 17 de julio de 2026

Solucionar error shebang en múltiples scripts bash linux

¿Qué es eso del error "shebang"?

Un error shebang, es un error en el que no se encuentra el intérprete especificado en la primera línea del script 

En el caso de un script bash linux lo podemos comenter con un error tan aparentemente inocente como empezar los scripts con la línea:

#/bin/bash

 En lugar de:

#!/bin/bash

Desde luego comerse el carácter ! es un error fácil de cometer pero es un error y, aunque la mayoría de las veces el script se ejecuta con bash sin mayores problemas puede confundir a tu editor de código, también es una mala práctica que puede producir en el futuro misteriosos errores que nos vuelvan locos buscándolos. 

Lo normal es que te des cuenta cuanto ya tienes cientos de archivos bash con el error, ¿que harías? ¿abrir cada uno de los archivos y cambiar esa primera línea a mano, seguro que cometes nuevos errores, así que lo mejor sería entrar en cada directorio afectado y ejecutar sed tal que así:

sed -i '1s|^#/bin/bash|#!/bin/bash|' *

Así de una tacada arreglo todos los archivos del directorio.

Hay que tener cuidado con estos comandos porque son muy poderosos y te lo cambian todo, para mayor seguridad:

  1. Asegurarse que estamos en el directorio correcto, es fácil hacer que recorra todos los subdirectorios, pero por ahora lo dejamos para un futuro artículo
  2. Le pasamos el parámetro -i para que haga los cambios sin hacer copias temporales, así que hay que tener cuidado porque no hay vuelta atrás.
  3. En la cadena ponemos 1s antes de la tubería para que cambie solo la primera línea y empiece la búsqueda al principio de ésta.
  4. Bueno, en realidad no me he tirado sin red, ya que los cambios en el repositorio está controlados por git, si algo sale mal se puede volver atrás y se puede saber exactamente que se ha cambiado, a la línea y al caracter.

Esta es la potencia de bash en GNU/Linux, que hace el trabajo duro en lugar de nosotros.

Por cierto, hay errores shebang todavía más difíciles de detectar y normalmente se producen por usar editores patateros de Windows:

  • Los saltos de línea deben ser estilo unix, así que te vas a ahorrar muchos quebraderos de cabeza usando GNU/Linux. Y no macOS no tiene los mismos saltos, aunque esté basado en un unix, los de la manzana también son especialitos con estos (son distintos a los de Linux/Unix y también a los de Windows).
  • Los editores no profesionales como el blog de notas de Windows tienen a introducir caracteres invisibles que no vemos pero nuestro sistema sí, estos errores son muy difíciles de detectar y corregir. ¿por qué lo hacen? ellos sabrán...

viernes, 10 de julio de 2026

Retropixel 2026 en el Palacio de Congresos de Málaga, visita e impresiones

El fin de semana pasado estuvieron las cosas complicadas para visitar Retropixel 26.
 
Tenía gran curiosidad por ver el evento con el nuevo formato y nueva ubicación después de tantas ediciones celebrándose en el gran hall de la Facultad de Derecho de la Universidad de Málaga.
 
A pesar de vivir a menos de un kilómetro de donde se celebraba este año, por circunstancias diversas no he podido ir tantas veces ni tiempo como otros años, pero el sábado por la tarde conseguí un hueco para al menos darme una vuelta y ver como estaba en su nueva ubicación en el FYCMA.
  
Como novedad, este año había que sacarse una entrada gratuita por la web de Retropixel, ya que este año coincidía con otros eventos de videojuegos, Guadalindie'26 

 

Cuando llegué a la puerta principal vi que había entradas distintas si ibas con entrada o no, yo llevaba mi código QR impreso, ¡somos retro! y parece que el lector de la azafata no le gustó mucho porque le costó leerlo, anécdota graciosa.

Al principio encontré todo un poco desperdigadas cuando entrabas por la puerta, lo primero que veías una gran Zona Demo para probar juegos... pero no eran juegos retro.

 


Pensé que había entrado por la puerta equivocada, así que di una vuelta por el hall, a la izquierda me encontré algunos cartuchos y consolas expuestas...

 

Y una puerta con mucha gente, ahí debe ser pero de nuevo solo veían juegos nuevos y merchandising asociado, me parece que aquí no es.

 


De vuelta al hall exploro la zona de la derecha y encuentro las máquinas de exposición de RetroPixel de todos los años... y alguna nueva.

 


Al fondo veo zona de conferencias, pero ¿dónde está todo lo demás? 

Así que hago lo que tenía que haber hecho desde el principio, pregunto a una azafata y me dice que tengo que ir al patio central que a la izquierda me encontraré la entrada, y bingo...

 


Como veis a la zona con las máquinas para disfrutar la llaman también "Zona Demo" pero esta vez de Retropixel, esto ya me suena :D

 


Bueno, este año he estado un rato pequeño aunque he podido jugar con algunas recreativas y ordenadores, sobre todo de los que no tengo, porque para jugar a un CPC6128 la verdad es que estoy más fresquito en el salón de mi casa :D

 


Es un sitio muy amplio y con posibilidades, no se si las fechas han sido las mejores sobre todo para los que vienen de fuera, primeros de julio, es decir, operación salida. El calor y la coincidencia con el Mundial de Fútbol tampoco han ayudado pero como podéis ver en las fotos y vídeos había bastante gente a pesar de todo esto.


Ya veremos como son las ediciones futuras, para terminar os dejo el vídeo que grabé en OpenSouthCode la semana anterior en la novedosa OpenSouthRetro, aperitivo de lo que estaba por venir.

Me llamó la atención este MSX con disquetera de 3".

Y si  creías que los eventos retro se acaban aquí para 2026 en la Costa del Sol, en otoño más...


 

viernes, 3 de julio de 2026

RetroMultiInstaller + github: número de la última versión para tu script de instalación

Un problema recurrente que me he encontrado con github es que cada vez que sale una nueva versión en un programa que usa el sistema de repositorios de github cambia la URL y por tanto deja de funcionar el script.

Durante algún tiempo he hecho la ñapa de definir una variable "version" para solo tener que cambiar este valor y estar cambiando todos los sitios donde sale para así evitar errores por "espaguetización", así por ejemplo sería el script para descargar un AppImage:

#/bin/bash
toolname="amspirit"
version="1.10.7"
url="https://github.com/AMSpiriT-Emulator/amspirit-releases/releases/download/v${version}-beta/freetube-${version}-beta-${arch}.AppImage"
source $pwddir/../commonscripts/makeopenchangetodir.sh /opt/appimages
wget -N ${url} -O ${toolname}.AppImage
chmod +x ${toolname}.AppImage
source $pwddir/../commonscripts/makeopenchangetodir.sh /opt/appimages/${toolname}.AppImage.home
cd $pwddir
$pwddir/../commonscripts/createshortcuts.sh ${toolname} 
Pero seguimos con la necesidad de estar pendiente de los cambios de versión, algo que es poco sostenible, así que investigué un poco como sabe github y, si está bien definido la dirección URL donde podemos consultar el número sería algo como ésto:

https://api.github.com/repos/usuario/programa/releases/latest 

La consulta nos devolverá un json con muchos valores, a nosotros nos interesa el que tiene la etiqueta 'tag_name', que tendría un valor como:

Así que lo primero que hice fue un nuevo script para uso común que haga esta tarea, pasándole como parámetros el usuario y repositorio del programa:

script: ./commonscripts/githubversion.sh 

#/bin/bash
# $1: user
# $2: repo
pwddir=$(pwd)
$pwddir/../commonscripts/instalator.sh  jq &> /dev/null
latestversionurl="https://api.github.com/repos/${1}/${2}/releases/latest"
versionpack=$(wget "${latestversionurl}" -q -O -)
tag=$(echo "${versionpack}" | jq -r '.tag_name')
echo ${tag#v} 

Con este script obtengo el número, puede que tenga algún sufijo o prefijo que sobra, por ejemplo supongamos que nos devuelve "Lite-1.10.7" en ese caso con el comando sed sustituimos esa cadena por la cadena vacía, así quedaría el script de instalación:

#/bin/bash
pwddir=$(pwd)
toolname="amspirit"
user="AMSpiriT-Emulator"
repo="amspirit-releases"
version=$(${pwddir}/../commonscripts/githubversion.sh ${user} ${repo} | sed 's/Lite-//')
arch=`uname -m`
url="https://github.com/${user}/${repo}/releases/download/Lite-${version}/amspirit-lite-qt-${version}-linux-${arch}.AppImage"
source $pwddir/../commonscripts/makeopenchangetodir.sh /opt/appimages
wget -N ${url} -O ${toolname}.AppImage
chmod +x ${toolname}.AppImage
source $pwddir/../commonscripts/makeopenchangetodir.sh /opt/appimages/${toolname}.AppImage.home
cd $pwddir
$pwddir/../commonscripts/createshortcuts.sh ${toolname} 

En caso de devolver solo "1.10.7" el trozo siguiente sobraría:

| sed 's/Lite-//')

Y ya está, ahora cada vez que seleccionemos instalar uno de estos programas siempre nos descargará la última versión publicada. 

viernes, 26 de junio de 2026

AMSpiT lite, el emulador de Amstrad CPC ahora también para GNU/Linux y macOS

AMSpiriT es un emulador para sistemas Windows, pero su creador ha lanzado estos días una versión especial para GNU/Linux y MacOS llamada AMSpiriT lite


Este emulador incluye herramientas para el desarrollo, extracción e incrustación de programas hechos en Locomotive Basic, el potente intérprete que incluían los CPC, algo así como el BasinC para ZX Spectrum que hemos visto con anterioridad, aunque en este caso cuando inyectamos o cargamos un programas basic, ya sea BAS o TXT, parece no hacer nada, pero cuando tecleemos LIST veremos que el programa ya está en memoria. 

Si se quiere, se puede programar con Visual Studio Code, ya que el mismo autor ofrece extensiones para programar e inyectar directamente en el emulador para este editor de programación.

Mi impresión es que se trata de un emulador muy intuitivo, con opciones fáciles de entender y acceder para cualquier perfil de cepecero y, aunque aún le faltan algunas cosas por pulir, el camino que lleva promete ser interesante.

AMSpiriT lite está disponible, en su página de descargas, para:

  • PC de 64 bits con Windows o GNU/Linux.
  • ARM aarch64 de 64bits, por ejemplo para raspberry pi OS.
  • macOS en ordenadores Apple distribuido en formato dmg.
  • Código fuente para instalártelo en otras arquitecturas. 

Las versiones para GNU/Linux, tanto la de PC como ARM de 64 bits se distribuyen como AppImage

También hay variantes para las librerías SDL2 y QT, incluso como core de RetroArch, así que posiblemente lo veamos en un futuro en Batocera, Recalbox, Retropie, etc...

Seguiremos la evolución de este joven emulador, que será la delicia de los trasteadores del poderoso Basic clásico de los CPC entre los que me incluyo.

jueves, 18 de junio de 2026

Uso de cascos o auriculares bluetooth en televisor moderno

Hace unos meses me pillé un par de cascos Bluetooth que venían de regalo en una revista, suelen rondan los 10€ o menos, y estos en concreto funcionan muy bien para que una persona pueda escuchar la tele sin molestar a nadie, incluso si están durmiendo en la misma habitación.


 

Configuración de los auriculares 

La configuración y emparejado es muy sencillo siguiendo las instrucciones del televisor o de los cascos, aunque es un proceso intuitivo que siempre son los mismos pasos:

  1. Encender el TV.
  2. Encender los casos o auriculares. En algunos hay que hacer una pulsación larga para que se pongan en modo visible". 
  3. En la TV ir a las opciones de Bluetooth, Emparejar y elegir un dispositivo que se llame igual que nuestros cascos.
  4. Si pide contraseña, posiblemente sea "0000". 

Ya lo tenemos configurado, a partir de ahora cuando encendamos la TV y luego los cascos se apagará el sonido del televisor y saldrá por los auriculares, cuando apaguemos los auriculares volverá a salir por el televisor. 

A continuación reproduzco las instrucciones que he hecho para mis padres para que usen los cascos y que creo que pueden ser útiles para tener impresas para los que tienen menos destrezas digitales en la familia, una vez configurado el tinglado:

 

Instrucciones uso de cascos 

Uso de los cascos/auriculares

  1. Encender el televisor.
  2. Mantener pulsado el botón de encendido de los cascos, el botón de arriba, hasta que se escuche una voz o se encienda una luz en la parte inferior. 
  3. Si sale en el televisor un mensaje para aceptar el uso de los cascos pulsar el botón del mando del TV para aceptar (botón central de la cruceta).
  4. Ponerse los cascos, 
  5. Se puede subir el volumen o cambiar de canal con  el mando a distancia como siempre.

Finalizar uso

  • Pulsar el botón de encendido/apagado en los cascos hasta que se escuche el sonido por el televisor. 

NO funciona

  • Cargar los cascos con el cargador del móvil enchufándolo al conector correspondiente

 

sábado, 6 de junio de 2026

Soporte para webcam con pantalla de privacidad hecha con TENTE

Hace unos años me compré una webcam de pinza de la marca Ewent de la que estaba muy contento porque fue barata, funcionaba bien y tenía buen soporte para GNU/Linux, pero con los años una de las patas de la pinza se partió por la presión del muelle y por la degradación del plástico, así que tenía que buscarme algún sistema que hiciera de soporte, así que una vez más me acorde de las piezas de TENTE que compre hace algún tiempo a iUnits para futuros proyectos.

 


Como veis le he hecho una "casita" a la webcam para que se mantenga de pie y ya que tenía una pieza de rueda con tentón de mi lo que queda de mi primer TENTE, ¿caja 403? le he enganchado una placa 6x8 y ya tengo pantalla móvil para mostrar u ocultar la imagen. 

En estas imágenes podéis ver la cámara con la pestaña rota:

 


Y la rueda que hace la magia de la privacidad.

 


Para quien tenga una webcam de este tipo se la quiera hacer comprando las piezas, aquí os dejo el modelo 3D, más estilizado y libre de la tiranía del stock. 

 


viernes, 5 de junio de 2026

Usar claves asiméticas SSH con gitlab

GitLab ya no permite subir por https los cambios en tus repositorios, por lo que hay que utilizar métodos "más seguros", aunque se puede crear un token para salir el paso, no lo recomiendo porque es "pan para hoy y hambre para mañana", ya puestos usamos claves asimétricas SSH.

Si NO las tienes creadas, ya las estás creando :D 

Si ya las tienes creadas tienes que seguir los siguientes pasos:

  1. Localiza tu clave privada, está en /home/tuusuario/.ssh y es un archivo que termina con la extensión .pub, vamos a suponer que es id_xxxx.pub
  2. Muestra el contenido con los comandos:
    cd /home/tuusuario/.ssh
    cat id_xxxx.pub
  3. Copia el contenido de la misma en el portapapeles seleccionándola con el ratón, clic con el botón derecho y copiar.
  4. Iniciamos sesión en gitlab con nuestras credenciales.
  5. Ve al avatar, selecciona Preferences > SSH Keys (si tienes dificultades para encontrar la opción tiene un buscador donde puedes poner "SSH Keys").
  6. Pega el contenido que habías copiado previamente en el campo "KEy".
  7. Clic en el botón "Add key".
  8. Verifica la conexión con el siguiente comando, si pide que confías dí que sí:
    ssh -T git@gitlab.com
  9. Ahora tienes que cambiar el archivo .git/config en tu repositorio local de manera que quede como algo así:
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [remote "origin"]
        url = git@gitlab.com:tuusuario/elrespositoriodetuproyecto
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
     
  10. Y listo, ya puedes subir de nuevo tus commits 

jueves, 28 de mayo de 2026

Cadence, emulador Amstrad CPC enfocado al desarrollo

Cadence es un nuevo emulador que está desarrollando Abalore, conocido en la escena Amstrad por hacer diversos desarrollos interesantes como su juego Alcon 2020, por nombrar un botón de muestra.


Está disponible para GNU/Linux, macOS  y Windows, en paquetes AppImage, DMG y EXE respectivamente.  

A pesar de estar en desarrollo, lo he probado como un emulador normal y me ha parecido que va muy fino y preciso, incluso con juegos tan exigentes como Pinball Dreams y algunos demos difíciles de emular.

Abalore ha preparado un appimage en su página de proyectos para simplemente descargar, darle permisos y ejecutar, si tienes una distro Linux actual es muy buena opción, por ejemplo Debian 13.

Sin embargo yo tuve algunos problemas con equipos con la versión anterior de Debian por versiones de una librería, además de que no serviría para una raspberri pi al ser otra arquitectura de hardware distinta.

Ambos problemas los solucioné compilando el código desde su repositorio en github, algo tan sencillo como ejecutar los siguientes comandos en tu terminal:

Nos hacemos administradores con los comandos sudo bash o su- y tecleamos:

apt install git qt6-base-dev qt6-svg-dev libqt6opengl6-dev libportaudio2 portaudio19-dev build-essential
git clone https://github.com/abalore/Cadence
cd Cadence
qmake6 Cadence.pro
make -j"$(nproc)" 

O lo instalamos con RetroMultiInstaller que ya incluye este emulador y hasta crea el acceso directo.

El funcionamiento es muy sencillo:

  • Abajo puedes ver unos botones alargamos para cargar cintas o discos, tanto en la unidad A: como en la B:, para cargar o expulsar hay que hacer doble clic en el botón correspondiente.
    •  También tiene un testigo como los CPC reales mostrando la actividad de las disqueteras.
  • Arriba tienes los menús para seleccionar el modelo de CPC, reseteo, selección de medios y la joya de la corona: las herramientas para desarrollo, debug, inspeccionar memoria, puntos de ruptura...
  • También puedes usar las teclas de función para diferentes operaciones, de entre las que destacamos:
    • F1: Insertar cinta
      • Mayus + F1: rebobina
      • Ctrl + F1: expulsa la cinta.
    • F2, insertar disco en la unidad A:
      • Ctrl + F2: expulsa disco en A:.
    • F3, insertar disco en la unidad B:
      • Ctrl + F3: expulsa disco en B;.
    • F5: muestra el depurador.
    • F6: muestra el ensamblador.
    • F9: desbloquea el límite de la velocidad real del CPC.
    • F10: activa la emulación de joystick.
    • F11: muestra el emulador a pantalla completa.
      • Mayus + F11: monitor fósforo verde.
      • Ctrl + F11: escalado suave.
    • F12: reset.
    • Ctrl + un número del 0 al 5: activa la persistencia del fósforo.
    • Alt + F4: salir del emulador.
  • Todos atajos de pantalla en el depurador y ensamblador podéis verlo mediante la opciones de Menú:
    • Help ► Shotcuts...

 

Cadence, como nos ha recordado su autor, también es un emulador pensado para tener la mínima latencia, tanto el vídeo como en audio, algo que van a agradecer y mucho los jugones más exigentes.

Puedes poner que emule el joystick o no, así como el comportamiento de la tecla mayúsculas para que emule teclas especiales. Os recomiendo que vayáis experimentando las muchas opciones que trae. 

Un emulador llamado a ayudar a los desarrolladores del CPC y a aficionados exigentes y amantes de los sistemas unix. 

viernes, 22 de mayo de 2026

Hacer juegos con bash

SÍ, no lo has leído mal pone "Hacer juegos con bash" no "Hacer juegos para bash", sabíamos que bash es un lenguaje de scripting para GNU/Linux muy potente pero, ¿tanto como para crear un videojuego? Pues sí, de hecho se han creado unos cuantos con él.

Lógicamente, no esperes un juego espectacular, pero hay varios creados para consola que se pueden hasta disfrutar. 

Algunos ejemplos:

  1. Basheroids: estilo Asteroids en Bash. Lo puedes descargar de https://github.com/Kafito/BashGameEngine
  2. Bash 2048: versión del juego 2048 programada en Bash. Lo puedes descargar de https://github.com/JosefZIla/bash2048
  3. bashcrawl: aventura de texto en Bash para aprender a moverte por la terminal y encontrar un tesoro. Se puede descargar de https://github.com/planetacomputer/bashcrawl
  4. Bash Hangman: ahorcado implementado en Bash. Lo puedes descargar de https://github.com/akshayub/Hangman-Bash
  5. Bash Invaders: clon de Space Invaders hecho en script Bash. Lo puedes descargar de https://github.com/Datron/space_invaders
  6. Bash minesweeper: buscaminas en Bash, normalmente en versión ASCII. Lo puedes descargar de https://github.com/matman26/shell-sweeper
  7. Bash Quiz games: cuestionarios interactivos hechos con Bash. Lo puedes descargar de https://github.com/AleksandarKostovic/bash-game
  8. Bash RPGs simples: aventuras de texto y combates por turnos en shell script. Lo puedes descargar de https://github.com/wolandark/bash-dungeon
  9. Bash Snake: versión de Snake escrita en Bash. Lo puedes descargar de https://draft.blogger.com/#
  10. Bash Tetris: Tetris hecho en bash. Lo puedes descargar de https://draft.blogger.com/#
    Bashtris: clon de Tetris hecho en Bash. Lo puedes descargar de https://github.com/dereksgithub/bash-tetris 
  11. Bash Tic-Tac-Toe: tres en raya hecho en shell script. Lo puedes descargar de https://github.com/AshutoshNirkhe/tic-tac-toe
  12. BashVenture: framework clásico de aventura textual para Bash. Se puede descargar de https://github.com/apetro/BashVenture 
  13. Playground: buscaminas para la consola. Lo puedes descagar de https://github.com/abhiTamrakar/playground
  14. Sausage: juego de palabras para terminal escrito en Bash, inspirado en Bookworm. Se puede descargar de https://gitlab.com/christosangel/sausage
  15. shell-adventure: aventura de texto pequeña escrita en Bash. Se puede descargar de https://github.com/aafrecct/shell-adventure
  16. tetri.sh: Tetris sencillo programado en Bash. Se puede descargar de https://github.com/psykulsk/tetri.sh

Algunos de estos programas los podéis encontrar en los repositorios de tu distro, por ejemplo en el paquete bash_games.

 


 

viernes, 15 de mayo de 2026

Crear una imagen para una microSD a partir de los archivos y directorios que hay en una ruta de directorio

Supongamos que queremos crear una imagen para distribuir entre dispositivos que consiste en un conjunto de archivos y directorios contenidos en un archivo ZIP que hay que volcar en una microSD con formato FAT32, por ejemplo para usar algún desarrollo baremetal para algún dispositivo ARM, real o emulado.

Vamos a tomar como ejemplo el paquete del software Symbos40pack para Amstrad CPC del que se habló hace poco en este artículo de AUA.

Para empezar hay que instalarse las dostools ya que vamos usar el formato FAT32:
sudo apt install dosfstools

  1. Descargar el sofware de la dirección:
    https://mega.nz/file/GMAHEQBQ#HGBzIviRVH5PZsMNnPDGBu-B3oa9764b-2vyph3bu_k 

    Cuando descargamos la distribución obtenemos un archivo ZIP que hay que descomprimir en una tarjeta SD que hay que meter en el M4, por tanto el primer paso va a ser descomprimir, lo podemos hacer desde el explorador del sistema o desde consola con el comando unzip.

  2. Para no liarla recomiendo descomprimir en una carpeta donde solo esté el contenido del zip, asumiendo que estamos en la ruta donde hemos descargado Symbos40pack.zip :
    mkdir symbos40
    cd symbos40
    unzip ../Symbos40pack.zip

  3. Hay que averiguar el tamaño del sistema descomprimido.

    du . -sh

    Que nos da un tamaño de 658M, así que habrá que crear una imagen de un tamaño algo más grande, por ejemplo de 1000Mb.

  4. Nos aseguramos que están instaladas las dostools:
    sudo apt install dosfstools
     
  5.  Creamos la imagen de la tarjeta SD:

    dd if=/dev/zero of=../symbos40pack.img bs=1M count=1024
    /sbin/mkfs.vfat ../symbos40pack.img
    mkdir /tmp/imgmnt
    sudo mount -o loop ../symbos40pack.img /tmp/imgmnt
    sudo cp -a . /tmp/imgmnt/
    sudo umount /tmp/imgmnt

Ahora esta imagen la podríamos "tostar" en una microSD o pendrive con el comando dd o usar en un entorno de virtualización, emulación, etc...

viernes, 8 de mayo de 2026

Elegir el mando correcto para tu televisor Samsung

Os comparto mi experiencia con los mandos de televisores Samsung, porque no todos son iguales ni mucho menos.

 


Hace tiempo os comenté que el proceso para quitar la telemetría a mi televisor Samsung y convertirlo en un sencillo televisor tonto de 65" tuve que cambiar el desastroso mando que traía, primero de la foto, por uno comprado de los chinos que iba a las mil maravillas, tercero de la foto.

Desgraciadamente, como suele ser habitual, los mandos se nos caen al suelo y con el tiempo se terminan rompiendo, en este caso varios botones dejaron de funcionar, toda la pinta de que algo se ha soltado en la placa del mismo pero para intentar su reparación tengo que abrirlo, localizar las soldaduras y otros daños y repararlo manualmente, mientras saco tiempo y ganas me he ido a la solución más sencilla: comprar otro mando en una droguería de barrio.

Se trata del mando que aparece en la parte central de foto, un mando de la marca "S&N" que es un auténtico desastre: cuando dejas pulsado los botones para subir o bajar el volumen o cambiar de canal solo reconoce una pulsación y solo si lo tienes perfectamente alineado frontalmente con el sensor del televisor, también hace pulsaciones ghosting cuando le da la gana.

Afortunadamente conseguí cambiarlo por unos productos de limpieza a buen precio, nada de devolver el dinero por un producto defectuoso, pero ahora hay otro problema, ¿cómo acierto comprando otro? Lo que plantea dos problemas:

1. Identificar al buen mando:

En un grupo de hardware de Telegram me han recordado el truco de encender la cámara del móvil y enfocar al mando mientras pulso el botón de subir volumen. Hice la prueba con los dos mandos clónicos y mientras el viejo mostraba un fuerte parpadeo constante y el nuevo apenas mostraba un tímido encendido y apagado.

2. Que me dejen probarlo:

La cosa está clara, o me dejan probarlo con unas pilas con el móvil antes o me aseguran que me devuelven el dinero o no lo compro.

Hay que andarse con mil ojos para que no te la cuelen. 

Si pone la marca S&N ni me molesto en preguntar.

Al final me pillé uno que era aparentemente muy parecido comprado en una plataforma muy conocida donde SÍ me devuelven el dinero sin preguntas, aparte de poder preguntar antes si funcionaba en ráfagas. Lo siento por el comercio local pero en esto se tienen que poner las pilas para mantener la clientela, se tienen que grabar a fuego que un cliente satisfecho es un cliente que fidelizas aunque ahora le tengas que devolver el dinero. 

viernes, 1 de mayo de 2026

Instalar PiApps en Raspberry Pi OS

PiApps es un script para instalar aplicaciones en Raspberry Pi OS adaptadas específicamente para este tipo de placas.


 

Es un buen complemento para completar la terna de instaladores con synaptic, para instalar software genérico de la familia Debian y RetroMultiInstaller, la colección de scripts para hacer triviales instalaciones complejas.

Si no lo tienes instalado lo puedes instalar desde el propio RetroMultiInstaller o manualmente tecleando estos comandos desde la consola de GNU/Linux:

sudo apt install curl
curl -fsSL https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bash

Ahora tienes un nuevo acceso a PiApps en la categoría Accesorios del menú de aplicaciones.

También se crea un acceso en el escritorio, en este caso si hacemos doble clic nos aparece un aviso de que es una secuencia de órdenes, nosotros pulsamos ejecutar.

 

Cuando ejecutes el programa aparecerán las categorías en las que se clasifican, haciendo clic en cada una de ellas s aparecen los programas con una opción de 'Back' para volver al menú anterior.

Las aplicaciones instaladas aparecerán en un color verde, reconoce las que ya estaban instaladas con apt (todas las instaladas con synaptic y algunas con RMI)

Al hacer clic en un programa aparece la descripción del mismo ofreciendo la opción de instalarla o desinstalarla. 

Al pulsar Instalar se ejecuta el script personalizado de instalación. 

viernes, 24 de abril de 2026

Copiar archivos de disco a cinta y viceversa con Discology ejecutando en Retro Virtual Machine

Para copiar archivos desde un disco virtual (DSK) a un cassette virtual (CDT) hay que seguir los siguientes pasos:

  1. Arrancamos RVM 
  2. Insertamos Discology desde la unidad A
  3. Arrancamos Discology
  4. Creamos un disco nuevo y formateado en la Unidad B
  5. Insertamos la cinta, para lo cual hacemos clic en el cassette que aparece en el emulador, en el botón de STOP.
  6. Seleccionamos el archivo CDT marcando la cinta NO protegida contra escritura.
  7. Si son varios archivos los vamos eligiendo EN EL ORDEN que queremos que se grabe en la cinta.
  8. Si hay un cargador Basic, posiblemente tengamos que modificarlo para que no salga continuamente mensajes y requerimientos poniendo el caracter "!" antes del nombre del archivo. 
  9. Pulsamos Record
  10. Vamos a las opciones Copier
  11. Vamos a "Options".
  12. Elegimos "Dest, drive B:"
  13. Seleccionamos "File".
  14. Elegimos "Destination: Tape" y "Source: Disc".
  15. Elegimos "File > Copy".
  16. Seleccionamos los archivos deseados en el orden que queremos que esté en la cinta.
  17. Pulsamos la tecla "Intro".
  18. Esperamos a que se complete el proceso. Tardará un rato.

Para hacer la operación contraria son los mismos pasos pero cambiando "Destination: Disc" y "Source: Tape".

 


 

viernes, 17 de abril de 2026

Leer parte de una URL de otra URL y con plan B

Supongamos que queremos descargar mediante un script un archivo, pero con estas circunstancias:

  1. Cuando cambia de versión, la URL cambia porque el número de versión es parte de la descarga.
  2. Si accedemos a una dirección concreta obtendremos el número de versión actual. Para ello usamos el comando wget URL -q -O - que nos devolverá el contenido del archivo descargado, si no tiene éxito nos devolverá una cadena vacía. El resultado de la operación lo pasamos una variable.
  3. En el caso de haber obtenido una cadena vacía, por estar la dirección que nos devuelve la versión fuera de línea, indicamos una versión que sabemos que siempre vamos a tener disponible. Así al menos poder instalar el programa aunque no sea la última versión.

En el script de descarga del emulador ZESarUX, tenemos un buen ejemplo de implementación de todo lo explicado:

#/bin/bash
software="zesarux"
carpeta="zesaruxpack"
latestversionurl="http://51.83.33.13/check_updates/stable.txt"
versionpack=$(wget $latestversionurl -q -O -)
if ["$versionpack" == ""]; then
    versionpack="12.0"
fi
echo "ZESarUX $versionpack"
../commonscripts/instalator.sh git build-essential libsdl1.2-dev libsdl2-dev libncurses5-dev libaal-dev libcaca-dev wget
wget -c https://github.com/chernandezba/zesarux/releases/download/ZEsarUX-$versionpack/ZEsarUX_src-$versionpack.tar.gz -O $software.tar.gz
tar -zxvf $software.tar.gz
mv ZEsarUX-$versionpack $carpeta
cd $carpeta
# compilar
git pull
cd src
./configure
make
sudo make install

Este script descarga la última versión estable de código, que tenemos en http://51.83.33.13/check_updates/stable.txt tal y como me indicó su creador.

viernes, 10 de abril de 2026

Project::OSiRiON, simulador de combate y comercio

Project::OSiRiON es un simulador de combate y comercio espacial libre y gratuito.

Su objetivo es crear un universo inmersivo con una jugabilidad abierta inspirada en títulos clásicos como Elite, Privateer y Freelancer.



 

Únete al juego como un hombre pobre con una pequeña nave e intenta enriquecerte comerciando o luchando. Cuantos más créditos, más naves y más armas podrás comprar, lo que te permitirá acumular riquezas aún más rápido.
 

Características

  • Disponible para Windows y Linux
  • Un jugador, modo de juego abierto
  • Multijugador a través de un servidor dedicado
  • Universo de juego abierto con numerosos sistemas estelares para visitar. Ve a donde quieras, cuando quieras. El universo está definido en archivos ini fáciles de editar; los propietarios de servidores pueden ejecutar partidas totalmente personalizadas.
  • Planetas, bases estelares, sistemas estelares y portales de salto. Las naves más grandes tienen sus propios motores de salto.
  • Naves disponibles para comprar, desde pequeños transportes hasta grandes portaaviones de mando.
  • Comercio de materias primas, armas equipables, carga eyectable.
  • Facciones de PNJ y reputación del jugador, PNJ amistosos y hostiles. Portaaviones propiedad del jugador que pueden ser acoplados por otros jugadores.
  • Combates aéreos JcJ.
  • ¡Gráficos económicos, es una característica!
  • Soporte de física mediante la biblioteca Bullet Physics.
  • El motor y el juego están escritos en C++ y están en desarrollo.


Descarga: http://osirion.org/index.php?page=downloads

viernes, 3 de abril de 2026

Controlar una bombilla LED RGB con Red Mi Note 7

Hace tiempo me compré una de esas bombillas LED que venden en los chinos que se controlan con un mando de infrarrojos para apagarlas, atenuarlas, cambiarles el color, etc...


Hace aún más tiempo que tengo mi longevo móvil Red MI Note 7 que tiene función de mando a distancia por infrarrojos, así que creía que sería fácil usar su aplicación "Mi Remote" para añadir un perfil para este tipo de bombillas, en este caso los datos de la mía se puede ver en justo encima del casquillo haciendo un poco de zoom:

 


Según la serigrafía se trata de una bombilla Aigostar LMP-G60E27RGB08A-05B, pero no he encontrado nada en la aplicación "Mi Remote", ni siquiera una categoría de bombillas RGB o  similar.

Así que me tenido que bajar otra aplicación para gestión de móviles con función IR, en concreto irplus - Infrared remote.

 

La aplicación, como veis, no es una maravilla en usabilidad ni mucho menos. Los pasos son:

  1. Agregar.
  2. Seleccionar la marca, por supuesto ni rastro de Aigostar, así que filtré por led y encontré una genérica llamada 'LED lights (group)'.
  3.  Por prueba y error el modelo exacto se llama 'Various'.
  4. En la última imagen podéis ver los botones del mando elegido que se parecen mucho al mando real y efectivamente es el que funciona bien. 
Lo bueno de este tipo de bombillas es que aunque haya que buscarse un poco la vida, no hay que conectarlas por Wi-Fi ni darse de alta en ninguna aplicación o sitio dudoso, por lo que son bastante respetuosas con la privacidad, al menos en principio (otra cosa es lo que haga por debajo esta app, el propio Android o la capa de Xiaomi, pero esa es otra historia).
 
Y con esta aplicación ya tengo solucionado el problema de no poder apagar la luz porque siempre tengo perdido el minúsculo mando por ahí. 









viernes, 27 de marzo de 2026

Gestionar y borrar metadata con software libre


 ¿Qué son los metadata?

Los metadata es una información asociada a cada archivo que se crea sin intervención directa de su creador ni acceso evidente en la mayoría de los casos, los datos que se pueden guardar dependen del tipo de archivo, por poner algunos ejemplos:

  • Momento de su creación, modificación y acceso.
  • Ubicación asociada. 
  • En archivos multimedia, sus dimensiones, duración, etc... 
  • Software con el que se ha creado y su versión. 

¿Porqué puedo necesitar borrarlos o modificarlos? 

Algunos de estos datos son sensibles y hasta se pueden utilizar con fines maliciosos contra su creador o usuario, o simplemente porque hay información que simplemente no nos importa. 

Puede ser una cuestión de privacidad y telemetría, aunque algunos metadatos pueden ser útil cuando se quiere declarar en un archivo de audio el autor, el álbum, el título, etc... por poner un ejemplo. 

Programas para manejar metadata

Algunos exploradores permiten mostrar información de los archivos haciendo clic con el botón derecho sobre ellos, incluyendo todo o parte de sus metadata y con posibilidad de modificarlos o eliminarlos.

También hay programas específicos, como metadata-cleaner, especializados en un borrado completo o analizarlos en profunidad, por poner algunos ejemplos:

Limpiador de metadatos

Este programa permite borrar metadatos de varios archivos a la vez. 

Lo podéis encontrar en https://gitlab.com/rmnvgr/metadata-cleaner/ 

viernes, 20 de marzo de 2026

Horacio esquiador: remake para GNU/Linux

Hace tiempo Luis L. García Ventura hizo un simpático remake de Horacio Esquiador para GNU/Linux, el conocido juego en ordenadores de 8 bits.



Para quien lo quiera probar solo tiene que:

  1. Descargarlo.
  2. Descomprimirlo en tu carpeta preferida.
    tar zxvf horacio_linux.tar.gz
  3. Dar permisos de ejecución y ejecutar:
    chmod +x horacio_static
    ./horacio_static

Otro juego sencillo que despertará una sonrisa a más de un nostálgico. :D 

viernes, 13 de marzo de 2026

Retropixel y OpenSouthCode este verano en Málaga

Este año empezaremos el verano en Málaga con dos de los grandes eventos tecnológicos tecnológicos que se celebran todos los años en la ciudad. 

Retropixel 2026 

Retropixel 2026, la IX Muestra de retroinformática y videojuegos, se traslada este año al Palacio de Ferias y Congresos de Málaga (FYCMA), los días 3, 4 y 5 de julio... nos han comentado que sigue siendo gratis :D


Ver el mapa más grande

Por si alguien no sabe a estas alturas qué es RetroPixel Málaga:
RetroPixel es una actividad orientada para toda la familia, cultural, solidaria y completamente gratuita organizada por la Asociación Lúdico Técnica de Aficionados a la Informática Retro (ALTAIR), más conocidos por realizar el podcast Retro Entre Amigos. El evento está patrocinado por el Polo de Contenidos Digitales.
El objetivo de RetroPixel es dar a conocer la historia de la informática, los orígenes de la industria de los micro ordenadores, ordenadores personales y videoconsolas así como la evolución de los videojuegos en estos últimos 40 años.

En esta edición de RetroPixel celebrarán:

  • 30 aniversario de Nintendo 64
  • 50 aniversario del microprocesador Zilog Z80
  • El auge del 3D: 30 años de Quake y Tomb Raider


Los Contenidos se suelen dividir en varias zonas:

  • Exposición de componentes, ordenadores, micro ordenadores y vídeo consolas: Esta zona de la actividad consistirá en la exposición de ordenadores tanto de uso empresarial como doméstico (micro ordenadores), haciendo especial hincapié en los micro ordenadores de los años 80 y 90. También se realizará una exposición de las videoconsolas más importantes de estas mismas décadas.
  • Zona de juego: En esta zona se montarán micro ordenadores, videoconsolas y máquinas recreativas y pinballs (si fuera posible) de los 80 y 90 para que los visitantes puedan jugar a los videojuegos que marcaron el comienzo de la industria.
  • Conferencias: Se realizarán conferencias y/o talleres sobre la historia de la informática, desarrollo de video juegos, historia de los videojuegos…
  • Torneos: Se realizarán torneos de videojuegos entre los asistentes que quieran participar.
  • Talleres: Se realizarán diferentes talleres para niños y mayores.


En la página oficial, https://www.retropixel.es/, irán poniendo más información próximamente, ¡estad atentos! :D

Tanto el recinto como el aparcamiento es enorme, en la WikiPedia lo podéis ver,  por lo que no hay problemas para ir en coche, aunque también está bien comunicado por autobuses.

 

OpenSouthCode 2026

Una semana antes y a pocos metros, se celebra como todos los años, OpenSouthCode 2026,  del 26 al 27 de junio en la Térmica. También es un evento gratuito.


Ver el mapa más grande

Para quien no lo conozca aún se trata de un evento con charlas y talleres muy interesantes en todos los campos relacionados con el software/hardware libre y cultura abierta, si piensas que tienes algo que aportar todavía admiten propuestas hasta final de mes.

También se puede ir en coche, pero para no tener problemas de aparcamiento es más recomendable usar el autobús, las líneas 15 y 16 pasan muy cerca. 


 Yo no se tú, pero yo no me los voy a perder :D

viernes, 6 de marzo de 2026

¿Cómo cambiar el DNS al que se conecta Raspberry pi OS de 64 bits?

La última versión de Raspberry pi OS disponible en 2025 usa NetworkManager para gestionar las conexiones de red, por lo que la manera de configurar la red es distinta a lo que estamos acostumbrados.

Vamos a ver como usar un DNS distinto al que nos asigna nuestro router, para lo que vamos a seguir los siguientes pasos:

  1.  Abre una terminal en tu Raspberry Pi.
  2. Ejecuta el siguiente comando para listar las conexiones de red:
    bash
    nmcli connection show
  3. Identifica el nombre de tu conexión (por ejemplo, "Wired connection 1" para Ethernet o el nombre de tu red Wi-Fi).
  4. Utiliza el siguiente comando para modificar la configuración DNS de tu conexión, reemplazando "NOMBRE_CONEXION" con el nombre identificado en el paso anterior y "DNS_SERVIDOR" con la dirección IP del servidor DNS que deseas utilizar:
    bash
    sudo nmcli connection modify "NOMBRE_CONEXION" ipv4.dns "DNS_SERVIDOR"

    Por ejemplo, para usar los servidores DNS de Cloudflare (1.1.1.1 y 1.0.0.1) y suponiendo que el nombre de nuestra wifi es MIWIFI tendriamos que ejecutar los siguientes comandos:
    bash
    sudo nmcli connection modify "MIWIFI" ipv4.dns "1.1.1.1 1.0.0.1"

  5.  Reinicia la conexión de red para aplicar los cambios:
    bash
    sudo nmcli connection down "MIWIFI" && sudo nmcli connection up "MIWIFI"
  6.  Verifica que los cambios se hayan aplicado correctamente ejecutando:
    bash
    nmcli connection show "MIWIFI" | grep ipv4.dns

Los cambios se guardarán en el archivo de configuración correspondiente en /etc/NetworkManager/system-connections/[nombre-conexion].nmconnection

Si prefieres una interfaz de texto más amigable, puedes usar el comando nmtui para configurar la red, incluyendo los servidores DNS, a través de una interfaz de usuario basada en texto


.

viernes, 27 de febrero de 2026

Manejo de los botones de la gotek

Si tienes un sencillo emulador de disquetera gotek con botones de selección te habrás percatado que solo hay dos botones para moverte por los archivos del directorio a la izquierda o a la derecha pero no hay un botón para seleccionar el archivo o el directorio si queremos navegar por ellos, entonces, ¿cómo hacemos estas operaciones?

 


Como podéis apreciar en la imagen, son los botones que están a la derecha del puerto USB y debajo del led de encendido, en este caso ya tiene seleccionado la imagen del juego 1943, os recuerdo que la gotek recuerda la última imagen DSK que seleccionamos guardando su nombre en un archivo en el raíz con un nombre similar a IMAGE_A.CFG

 Si pulsamos el botón de la izquierda iremos viendo los diferentes archivos que están antes del seleccionado hasta que nos muestre "[..]" 

 


Si dejamos de pulsar botones durante un par de segundos directamente selecciona esta opción que no es otra que bajar en el árbol de directorios, y nos mostrará el directorio en el que estábamos, en este caso "favoritos".

 


En el momento que sale el nombre del directorio debemos pulsar los botones rápidamente para que NO vuelva a entrar en el mismo directorio. 

Supongamos que tenemos un directorio llamado [cpm] y dentro de él otro que se llame [games], en este caso pulsaremos el botón izquierdo hasta que aparezca [cpm], momento en el cual pulsamos el botón correspondiente hasta que aparezca [games].


Cuando seleccionamos un directorio, si nos aparece otra vez [..] o un directorio que no nos interesa de nuevo hay que pulsar los botones rápidamente para terminar donde no queremos, por lo que seleccionamos la imagen deseada, en este caso la del juego Gozilla.BAS para CP/M.

 


Y así se navega por el árbol de directorios en una gotek, ya solo nos faltaría ejecutar el programa en nuestro Amstrad CPC, en este caso, como se trata de un juego que se ejecuta con el comando |CPM la unidad deberá estar seleccionada para que funcione como unidad A:

Para quien se haya perdido con las rutas de los archivos, aquí tenéis el camino que hemos seguido desde 1943 hasta Gorilla:

.
├── favoritos (2)
│   ├── ...
│   ├── 1943 (1988).dsk (1)
│   ├── ....
│   └── xevious.dsk
├── IMAGE_A.CFG
└── cpm (3)
    ├── ...
    ├── games (4)
    │   ├── ...
    │   ├── gorilla-cpc.dsk (5)
    │   ├── ...
    │   └── Zork III - The Dungeon Master_cpm_cpc6128_pcw.dsk
    └── system

 

Otras consideraciones

Si tienes selector giratorio el funcionamiento es el mismo, solo que en lugar de pulsar botones hay que girarlo paso a paso a la derecha o a la izquierda dependiendo lo que queramos seleccionar. 

Recomiendo que el contenido del pendrive esté organizado de manera que en cada directorio no haya demasiados archivos para no castigar a los pulsadores ni a nuestros dedos, así que si tenemos decenas de miles de archivos DSK no hay que meterlos en un solo directorio, sino crear directorios por cada primera letra de cada juego, dentro de los cuales se hace lo mismo para la segunda letra y dentro de cada subdirectorio igual para la tercera letra.

Como esto sería una locura hacerlo manualmente os recuerdo que el script splitpather crea toda la estructura por nosotros a partir del directorio donde tenemos nuestros dsk, normalizando el nombre de los archivos y hasta evitando duplicados de archivos repetidos.

Hace tiempo hice un artículo explicando más a fondo el funcionamiento de splitpather

 

Videotutorial

También hice unos días un videotutorial...