viernes, 24 de julio de 2026

Tracear imágenes a SVG monocromáticos para moodle, otras web u otros proyectos con Inkscape

En moodle 5 para los iconos de los módulos de actividad se utiliza un fichero monologo.svg cuya imagen, con un tamaño y formato concreto, se colorea en función del propósito del módulo. El propósito del módulo debe estar definido en una función <modulo>_supports() en el fichero lib.php del módulo.


Para generar estos ficheros a partir de los iconos .png, seguir estos pasos utilizando el programa inkscape.

Paso 1: Importar tu imagen

Se recomienda partir de una imagen grande para el vectorizado sea más detallado, lo ideal es que sea una imagen sin pérdida como PNG pero si es un buen JPG también nos sirve.

  • Abre Inkscape.

  • Arrastra tu archivo de imagen dentro del lienzo de Inkscape o usa el menu Archivo → Abrir….

  • Aparecerá una ventana de importación. Deja las opciones por defecto y dale a OK.

  • Ahora tienes la imagen en el centro.

Paso 2: Vectorizar (Convertir píxeles a trazos)

  • Haz clic izquierdo sobre tu imagen para asegurarte de que está seleccionada (verás unas flechas negras alrededor).

  • En el menú superior, ve a Trazo > Vectorizar mapa de bits... (o usa el atajo Mayús + Alt + B).

  • Se abrirá un panel a la derecha. Hay que configurarlo así:

    • Pestaña: Pasada simple (o Brillo de corte).

    • Umbral: Juega con el valor (usualmente 0.450 o 0.500 está bien).

    • Importante: Marca la casilla Vista en directo (si la tienes) para ver cómo queda. Deberías ver la silueta en negro.

    • Si el icono tiene colores claros y no sale bien, sube el umbral a 0.600 o más hasta que la silueta negra se vea completa y nítida.

  • Haz clic en el botón Aplicar.

Paso 3: Limpiar

Ahora tienes dos cosas una encima de la otra: el vector nuevo y la imagen vieja.

  1. Haz clic en la imagen y arrástrala a un lado. Verás que una se ve borrosa al hacer zoom (la original) y la otra nítida (el vector).

  2. Selecciona la imagen original (la de colores o borrosa) y presiona la tecla Supr (Delete) para borrarla, es la que ha quedado debajo.

    1. Si no hay manera de mover la imagen borrosa sin mover la nítida por estar delante nos vamos a Capas > Capas y objetos.

  3. Quédate solo con la silueta negra.

Paso 4: Ajustar al estándar "Monologo" (Negro puro)

Moodle necesita que el icono sea #000000 (negro puro).

  1. Selecciona tu silueta vectorial.

  2. Abajo a la izquierda verás una paleta de colores. Haz clic en el cuadro Negro (el primero).

  3. Mira en la esquina inferior izquierda donde dice "Relleno" y "Trazo":

    • Relleno: Debe ser un cuadrado negro.

    • Trazo: Debe poner "Ninguno" o "None". En caso contrario, haz clic derecho sobre el cuadro de color "Trazo" abajo a la izquierda y elige "Eliminar trazo".

Para que el icono se vean idénticos a los nativos (Foro, Tarea, …), deben seguir esta proporción:

  • Tamaño del Lienzo (Canvas): 24 x 24 píxeles (Esto es el archivo total).

  • Tamaño del Dibujo (Glifo): Máximo 20 x 20 píxeles (aprox).

  • Margen resultante: Unos 2 píxeles de espacio vacío a cada lado.

Paso 5: Fijar el tamaño del lienzo a 24x24

  1. Ve a Archivo > Propiedades del documento (Mayús + Ctrl + D).

  2. En la sección Formato (abajo), busca "Ancho" y "Alto".

  3. Escribe manualmente 24 en Ancho y 24 en Alto (asegúrate que la unidad sea px).

  4. Cierra esa ventanita.

Paso 6: Reducir el icono (El margen)

Ahora vamos a hacer el dibujo un poco más pequeño para dejar espacio libre.

  1. Selecciona tu icono negro (haz clic sobre él).

  2. Mira la barra de herramientas superior (donde están W y H).

    1. Si no aparecen ve a Objeto > Transformar > Escalar > Escalar proporcionalmente > Altura = 20pt

  3. Asegúrate de que el candado (🔒) entre W y H esté cerrado.

  4. Cambia el valor de H (Alto) a 20 (o 19 si es muy cuadrado). Dale a Enter.

    • Ahora el dibujo es más pequeño que el cuadro blanco.

Paso 7: Centrarlo perfectamente

  1. Abre el panel Alinear y distribuir (Mayús + Ctrl + A). Lo encontrarás también en el menú Objeto.

  2. Donde dice "Relativo a:", elige Página.

  3. Haz clic en el icono de "Centrar en el eje vertical" (una línea vertical con cuadros a los lados).

  4. Haz clic en el icono de "Centrar en el eje horizontal".

Paso 8: Guardar como SVG limpio

Este es el paso final para que el archivo sea ligero y compatible con Moodle.

  1. Ve a Archivo > Guardar como...

  2. En "Tipo" (abajo a la derecha de la ventana de guardar), NO elijas "Inkscape SVG".

  3. Busca y selecciona SVG plano (*.svg).

    • El "SVG plano" elimina metadatos de Inkscape que Moodle no necesita.

  4. Nómbralo monologo.svg.

Paso 9: Forzar que se use el propósito del módulo para colorear el icono

Para que tenga el color según el propósito hay que cambiar el color fijo por la variable CSS currentColor. Esto le dice al SVG: "Usa el color del texto del elemento donde me encuentres".

  1. Ábre el fichero svg con tu editor de texto (Notepad++/VS Code).

  2. Busca la etiqueta <path> y cambia style="fill:#000000..." o fill="#000000"

    por fill="currentColor"

  3. Guarda el fichero.

Paso 10: Definir el propósito (purpose)

Hay que definir el propósito del módulo para que Moodle le ponga el color correspondiente, para ello:

  1. Abre el fichero <modulo>/lib.php

  2. Busca la función <modulo>_supports y añádele un nuevo case tal que así:

    case
     
    FEATURE_MOD_PURPOSE:
    return
     
    MOD_PURPOSE_CONTENT;

    Según el propósito del módulo en lugar de CONTENT puede ser que tengamos que poner otro, consultar la documentación de Moodle para más detalles.

  3. Guarda del fichero.

 

Para otros proyectos

Si símplemente quieres hacer un avatar o un icono para un programa puedes usar los trucos recién expuestas con algunas variantes en las ideas: 

  • No necesitarás todo lo que se ha explicado para Moodle, a no ser que quieras usarla para una página web, en cuyo caso puedes dejar  "currentcolor" y que se encargue el css de elegir el color:
    style="fill:currentcolor"
  • Para otros proyectos que no usen css simplemente pon
    fill: #RRGGBB
    donde puedes poner el color que quieras.
  • El ancho y alto del documento y de la imagen en sí lo puedes definir como quieras, por ejemplo, te puede interesar que la imagen sea 200 x 200 y dejar 10 puntos a los lados, en cuyo caso, En las propiedades de proyecto será 220 x 220 y tendrías que definir un margen superior e izquierdo de 10 puntos.

Recuerda que, al ser una imagen vectorial, puede tener luego el tamaño que quieras sin pixelaciones. 

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.