viernes, 8 de agosto de 2025

Cambiar las cuerdas del tendedero

Las cuerdas del tendedero se van deteriorando hasta llegar a partirse por lo que cada cierto tiempo hay que cambiarlas, estos días en los que estamos muchos de vacaciones es un buen momento para hacerlo, vamos a ver una manera sencilla de cambiarlas usando la cuerda de al lado como apoyo:

Supongamos que tenemos un tendedero con varias cuerdas que están para cambiar como éste:
 

Un truco sencillo es retirar una cuerda y amarrar la que se va a poner a la contigua, hay que seguir los siguientes pasos:
  1. Pasamos la cuerda por una de las ruedas de arrastre.
  2. Deslizamos la cuerda contigua de manera que el nudo de unión esté junto a la rueda de arrastre por la que hemos pasado la cuerda que vamos a poner.
  3. Hacemos un nudo para unir provisionalmente la cuerda, hay que hacerlo de manera que al mover la cuerda de apoyo se desplace la cuerda que queremos poner.
  4. Una vez que la cuerda nueva llegue a la otra punta  deshacemos el nudo con cuidado de no perder la punta de la cuerda.
  5. Pasamos cuerda por la rueda de arrastre, de manera que si esa parte de la cuerda pasó por debajo en la rueda de enfrente así debemos ponerla (o por arriba en caso contrario.
  6. Volvemos a anudar y ahora arrastramos la cuerda en sentido contrario hasta volver a la rueda de arrastre inicial.
  7. Anudamos los dos extremos cuidando que quede bien tensa.
  8. Según el tipo de cuerda puede que se destense con el tiempo y tengamos que deshacer el nudo y volverla a tensarla. Ni se os ocurra usar cuerdas de cáñamo, como la lluvia se tensan tanto que destrozan las ruedas de arrastre.
¿Y como cambio la primera?

Pues el procedimiento es similar solo que en lugar de apoyarte en la otra cuerda habrá que ir pasándola por la ventana, lo puede hacer una sola personal pero es más cómodo con la ayuda de otra.



Algunas cuerdas se dan de sí con el tiempo y es posible que tengas que re-tensarlas, pero NO uses nunca cuerdas de cáñamo, se tensan tanto al mojarse que rompen las ruedas del tendedero.

viernes, 1 de agosto de 2025

Emular el Commodore 128 con 80 columnas con VICE

VICE es un emulador libre y multiplataforma de la amplia gama de ordenadores Commodore que no eran ni Amiga ni PCs.
Hace tiempo expliqué como instalarlo y añadirle todo lo necesario para hacerlo funcionar, aunque si no te quieres compilar también se puede instalar con RetroMultiInstaller.

Hoy vamos a ver como emular el Commodore 128, un ordenador de 8 bits, muy potente pero como otros llegó tarde, todas sus mejoras las podéis ver en su artículo en la wikipedia pero aquí lo que vamos a destacar es su capacidad para usar dos monitores a la vez, uno conectado por vídeo compuesto de 40 columnas y otro por RGBI de 80 columnas.

En un Commodore 128 real podríamos activar un monitor u otro pulsando una tecla "40/80 DISPLAY".
El monitor activo es el que muestra el prompt READY y donde aparecen los comandos que tecleamos y el resultado de la ejecución de los mismos.

Los que no tenemos la suerte de tener uno de estos ordenadores lo podemos emular con vice, para lo cual ejecutamos el comando:

x128

Se nos abrirán dos ventanas mostrando los dos monitores.


En principio aparecerá el promp Ready en el monitor compuesto de 40 columnas que es donde aparecerá todo lo que escribamos, mientras que el monitor RGBI de 80 aparecerá con la pantalla negra, pero si tecleamos el comando:

GRAPHIC 5

Aparecerá el prompt ahora en el monitor de 80 columnas, si queremos volver al monitor de vídeo compuesto tecleamos:

GRAPHIC 0

Si queremos que al cambiar borre la pantalla a la que transferimos el control deberíamos pasarle un segundo parámetro con valor 1, es decir, para cambiar y borrar las pantallas de 40 o la de 80 columnas tendríamos que teclear respectivamente:

GRAPHIC 0,1

GRAPHIC 5,1

De esta manera se podría utilizar en un programa ambas pantallas de manera alternativa, incluso se puede dejar un mensaje en la pantalla que no va a estar activa para avisar al usuario que use la otra, con un programa similar a este:

10 GRAPHIC 0,1
20 PRINT "ENCIENDE LA PANTALLA DE 80 COLUMNAS"
30 GRAPHIC 5,1
40 PRINT "SALUDOS EN EL MONITOR DE 80 COLUMNAS"

Este programa lógicamente devolvería el prompt en el monitor RGB.

En el caso del software comercial específico del C128 éste debería usar el monitor correcto para el funcionamiento deseado.

 

¿Y que pasa si quiero ejecutar CP/M a 80 columnas?

Sí, efectivamente, otra de las características que incorporaba del C128 era un procesador Z80 para ejecutar CP/M sin cartuchos adicionales pero si lo ejecutamos con el anterior comando lo veríamos a 40 columnas, lo que es un problema para los programas que requieren más columnas ya que para iniciarlo hay que introducir el disco de CP/M y reiniciar la máquina, con lo que no tendríamos acceso a los comandos de Basic antes descritos.

El emulador VICE también permite ejecutar por defecto el monitor RGBI de 80 columnas pero para ello hay que lanzarlo pasándole un parámetro tal que así:

x128 -80

De esta manera si cargamos CP/M y reiniciamos lo hacemos con 80 columnas de ancho y por tanto podríamos disfrutar de programa como el remake de Gorilla.BAS del que ya comenté las versiones de CPC y PCW en un reciente artículo de AUA.


En el caso de Windows posiblemente tendréis que crear un acceso directo con un comando similar a este:

x128 /80col

Este juego os lo podéis descargar de la página del autor, que incluye entre otras, una versión para el C128 con el autoarranque de CP/M preparado.

 

Fuente: Using 80 Columns in VICE Commodore 128 Emulator.

 

viernes, 25 de julio de 2025

Instalar VirtualBox en Debian con extension pack

VirtualBox es un software de virtualización muy fácil de instalar y desinstalar que no requiere licencias para su uso, aunque tiene una parte que no es libre llamada extesion pack que se puede usar para fines educativos y es necesaria si se quiere tener acceso a cosas como impresoras, portapapeles compartido, etc... 

Para instalar correctamente VirtualBox con Extension Pack en Debian 12 hay que seguir los siguientes pasos: 

  1. Si tenemos una versión previa de Virtual Box HAY QUE DESINSTALARLA o nos dará un error.
  2. Descargar VirtualBox, para lo cual debemos ir a la página de descargas de las versiones para GNU/Linux y elegir la correspondiente a Debian 12, o bien descargarla directamente desde consola, con un comando similar a este (el nº. de versión puede cambiar):
    wget https://download.virtualbox.org/virtualbox/7.1.12/virtualbox-7.1_7.1.12-169651~Debian~bookworm_amd64.deb
  3. Instalar VirtualBox:
    sudo dpkg -i virtualbox-7.1_7.1.12-169651~Debian~bookworm_amd64.deb
  4. Instalar dependencias si sale un error solicitándolas:
    sudo apt install -f
  5. Nos descargamos la versión correspondiente de VirtualBox extensión pack a esta versión de VB haciendo clic en el botón de "Accept and download", o si lo prefieres descargarlo desde la consola:
    wget https://download.virtualbox.org/virtualbox/7.1.12/Oracle_VirtualBox_Extension_Pack-7.1.12.vbox-extpack
  6. Ejecutamos la instalación del extension pack arrastando el archivo al VirtualBox arrancado, o desde consola:
    virtualbox Oracle_VirtualBox_Extension_Pack-7.1.12.vbox-extpack
  7. Nos pedirá aceptar la licencia educativa para poder instalar al ser esta parte del virtualizador no libre. 

 
Y listo, ya puedes disfrutar de tus máquinas virtuales.


¿Y para Debian 13 que sale la versión estable en un par de semanas? 

Lo mismo, solo que tendrás que bajarte la versión para esa versión en concreto y suele tardar algo más en estar disponible, así que si vas a necesitar VirtualBox mejor espera a que esté disponible para hacer la actualización y ya lo tienes sólido como una roca ;-)

viernes, 18 de julio de 2025

¿Cómo configurar dos VirtualHost en Apache2 con diferentes versiones de PHP?

Hace poco vimos como instalar y usar dos versiones distintas de php, ahora vamos a afinar más y vamos ha hacer que cada virtualHost de Apache2 use una versión distinta de PHP (por ejemplo, PHP 7.4 y PHP 8.3) en Debian 12, la forma más robusta y recomendada es usar PHP-FPM junto con el módulo proxy_fcgi de Apache. Así, cada sitio web puede ejecutar su propia versión de PHP de manera simultánea e independiente.

Pasos para la configuración:

  1. Instala y habilita los módulos necesarios de Apache:
    sudo a2enmod proxy_fcgi setenvif
    sudo systemctl restart apache2
  2. Asegúrate de tener instalados y activos los servicios PHP-FPM para cada versión
    Por ejemplo:
    sudo systemctl enable php7.4-fpm
    sudo systemctl start php7.4-fpm

    sudo systemctl enable php8.3-fpm
    sudo systemctl start php8.3-fpm
    Verifica que los sockets existan en /run/php/ (por ejemplo, php7.4-fpm.sock y php8.3-fpm.sock).

  3. Configura los archivos de VirtualHost
    Ejemplo para PHP 7.4
    Archivo: /etc/apache2/sites-available/site1.tu_dominio.conf
    <VirtualHost *:80>
        ServerAdmin admin@site1.tu_dominio
        ServerName site1.tu_dominio
        DocumentRoot /var/www/site1.tu_dominio

        <Directory /var/www/site1.tu_dominio>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/site1_error.log
        CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
    </VirtualHost>
    Ejemplo para PHP 8.3
    Archivo: /etc/apache2/sites-available/site2.tu_dominio.conf
    <VirtualHost *:80>
        ServerAdmin admin@site2.tu_dominio
        ServerName site2.tu_dominio
        DocumentRoot /var/www/site2.tu_dominio

        <Directory /var/www/site2.tu_dominio>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/site2_error.log
        CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
    </VirtualHost>

  4. Habilita los sitios y recarga de Apache:
    sudo a2ensite site1.tu_dominio.conf
    sudo a2ensite site2.tu_dominio.conf
    sudo systemctl reload apache2

En conclusión:

  • Cada VirtualHost especifica su versión de PHP mediante la directiva SetHandler apuntando al socket de PHP-FPM correspondiente.
  • Puedes tener tantos sitios como necesites, cada uno con su propia versión de PHP, sin conflictos.
  • Esta configuración es válida tanto para entornos de desarrollo como de producción y es la más flexible y mantenible

.

viernes, 11 de julio de 2025

M2000: emulador Phillips P2000

M2000 es un emulador libre de ordenadores Philips P2000, uno de los primeros ordenadores domésticos de 1981 que, heredero de las consolas Videopac, funcionaba con cartuchos y minicassettes. NO ES UN MSX.

El mismo autor incluye en otro repositorio software de ejemplo para el M2000.

Uno de sus cartuchos incluía un Microsoft Basic muy limitado pero con el que se podían hacer algunas cosas y que probarlo es un buen ejercicio para conocer los inicios de la informática de consumo. También traía cartuchos de Pascal y procesador de textos, estando disponibles otros incluso con CP/M.


Para quien simplemente quiera instalarlo y echarle un vistazo sin complicaciones, ya se puede instalar desde el script RetroMultiInstaller y no necesita leer el siguiente apartado del artículo.


Compilar M2000

Para quien prefiera compilarlo por si mismo debe ejecutar los siguientes comandos:

sudo apt install git build-essential liballegro5-dev
git clone https://github.com/p2000t/M2000
cd M2000
make allegro

Dentro de esta carpeta tendremos un archivo ejecutable llamado M2000 que debemos ejecutar con el comando;

./M2000

Para mayor comodidad recomiendo crear un acceso directo en el escritorio o en los menús, por ejemplo.

Por cierto, funciona perfectamente en PC con distros de 64 y 32 bits, pero también en todos los modelos de raspberry pi y similares.


Enlaces de interés

Para quien quiera saber más sobre este ordenador y su funcionamiento hay varios artículos sobre la serie Phillips P2000:

viernes, 4 de julio de 2025

RetroMultiInstaller: los menús solo muestran apps compatibles con el ordenador que lo ejecuta (e instalación desatendida)

RetroMultiInstaller, el script facilitador de instalaciones tenía el defecto de ofrecerte todos los scripts de instalación en sus menús, aunque no fueran compatibles con tu hardware, así por ejemplo, si lo ejecutabas en una Raspberry Pi podrías terminar instalando un programa que no fuera compatible con ARM y que por tanto no iba a funcionar.

También se ha corregido la instalación por lotes desatendida y ya aparecen solo los programas ordenados para la arquitectura actual.
 
Recuerda que, si ya tienes instalado RMI, lo puedes actualizar seleccionando las opciones:
Update ► update own
 

¿Como lo he hecho y como puedes añadir más instaladores?

Para solucionar esto he incluido un nuevo mecanismo que mira las arquitecturas declaradas en los archivos menu/*.txt de tal manera que la definición de cada línea de script quedaría ahora con esta estructura:
arquitecturas etiqueta definición
  • Las arquitecturas se ponen una detrás de otra separadas por el carácter tubería "|" por ejemplo, NUNCA ESPACIOS NORMALES.
  • La etiqueta sigue siendo el identificador del script.
  • La definición tampoco permite ESPACIOS NORMALES pero sí espacios duros.
Algunos ejemplos, que podemos encontrar casi todos en el archivo menus/multisystem.txt:
  • Si ponemos como arquitectura 'all' no filtrará, es decir, mostrará el script del menú independientemente del hardware desde el que ejecutemos RMI:
    all ZEsarUX ZEsarUX multi emulator
  • Podemos poner una sola arquitectura, en la siguiente línea tenemos un script que solo se mostraría en Raspberry pi OS de 32 bits:
    armv7l Retropie Multi Emulationstation Enviroment
  • Un ejemplo de un script que se ejecutaría en varias arquitecturas, en este caso solo para Intel de 32 o 64 bits o Raspberry pi OS de 64 bits.
    x86|x86_64|aarch64 RetroVM Retro Virtual Machine
  • Las opciones para abrir otro menú o salir del actual deben tener la etiqueta menu para no aparecer en las opciones de la instalación desatendida:
    menu Exit Return to Main Menu
  • Si en un momento un script dejara de funcionar ya no teníamos que borrarlo podemos dejarlo para arreglarlo más adelante y en el menú poner como arquitectura algo así como 'none' o 'disabled':
    none oldgame Old Game
 

He encontrado un programa que NO funciona, ¿qué hago?

Ahora queda la ardua tarea de ir comprobando que las arquitecturas definidas en cada script se corresponden con los programas que se pueden ejecutar en cada arquitectura, como seguro se me van a pasar muchos necesitaré vuestra ayuda en los comentarios para que me indiquéis los que no funcionan.
 
Aunque si abrís una incidencia en el propio gitlab me resultará más fácil tener el seguimiento de lo que está pendiente de arreglar. ;-)



Instalación desatendida por lotes (batch)

viernes, 27 de junio de 2025

Instalar dos versiones distintas de php en Debian

Para instalar varias versiones de PHP, por ejemplo, 7.4 y 8.3 en Debian 12 , podemos usar el repositorio de Ondřej Surý, que es la fuente recomendada y más actualizada para múltiples versiones de PHP en Debian. Aquí tienes la guía paso a paso:

  1. Actualizamos el sistema:
    sudo apt update
    sudo apt upgrade -y
  2. Instalamos las dependencias que vamos a necesitar:
    sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common curl wget
  3. Agremos el repositorio de Ondřej Surý:
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
    sudo apt update
  4. Instalamos php 7.4 y sus módulos necesarios:
    sudo apt install -y php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip
  5. Instalamos php 8.3 y sus módulos necesarios:
    sudo apt install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip
  6. Comprobamos las instalaciones:
    php7.4 -v
    php8.3 -v
  7. Podemos cambiar la versión activa de php manualmente desde la línea de comandos:
    sudo update-alternatives --set php /usr/bin/php7.4
    O para PHP 8.3:
    sudo update-alternatives --set php /usr/bin/php8.3
  8. O Habilitar y arrancar PHP-FPM para cada versión:
    sudo systemctl enable php7.4-fpm
    sudo systemctl start php7.4-fpm
    O para PHP 8.3:
    sudo systemctl enable php8.3-fpm
    sudo systemctl start php8.3-fpm

Esta metodología es segura y ampliamente usada en entornos de producción y desarrollo.


Configuración extra para Moodle

Para usar con Moodle hay que instalar también los siguientes paquetes:

sudo apt install php7.4-intl php7.4-xmlrpc php7.4-soap

Y

sudo apt install php8.3-intl php8.3-xmlrpc php8.3-soap 

En los archivos  /etc/php/X.Y/fpm/php.ini hay que añadir o cambiar en la sección correspondiente:

max_input_vars = 5000 

Y reiniciamos los servicios php-fpm

sudo systemctl restart php7.4-fpm

sudo systemctl restart php8.3-fpm



¿Qué diferencia, ventajas e inconvenientes, hay entre usar update-alternatives o php-fpm?

update-alternatives y PHP-FPM cumplen funciones distintas en la gestión de PHP en sistemas Debian:

  • update-alternatives: Herramienta del sistema para seleccionar la versión de un ejecutable por defecto en la línea de comandos (CLI), como php, phar, etc.
  • PHP-FPM: Gestor de procesos FastCGI para PHP, diseñado para servir aplicaciones web de alto rendimiento, gestionando pools de procesos PHP que atienden peticiones web a través de sockets o puertos TCP.

Cuadro comparativo:

Característicaupdate-alternativesPHP-FPM
PropósitoSelección de versión de ejecutable CLIProcesamiento eficiente de peticiones web PHP
ÁmbitoLínea de comandos y scripts del sistemaServidores web (Apache, Nginx, etc.)
Cambio de versiónAfecta solo a la CLI (no al servidor web)Cada pool puede usar una versión diferente
ConcurrenciaNo aplicaManeja múltiples peticiones concurrentes
PersonalizaciónLimitada a la selección de ejecutablePools configurables por usuario, dominio, etc.

 

Consideraciones:

  • Cambiar la versión de PHP con update-alternatives solo afecta a la CLI, no a los sitios web servidos por PHP-FPM.
  • Para que un servidor web use una versión específica de PHP-FPM, debes apuntar el socket o puerto correspondiente en la configuración del servidor web.
  • No puedes tener un único socket genérico para alternar versiones de PHP-FPM sin perder la posibilidad de ejecutar varias versiones simultáneamente.
  • PHP-FPM es imprescindible para entornos web modernos y de alto tráfico, mientras que update-alternatives es útil para scripts y tareas del sistema.

También hay un artículo para usar distintas versiones de php en distintos virtualhost con Apache.