Download automatici di un canale Youtube

Di Youtube-dl ho già parlato, ma ogni volta che vi ricorro si dimostra ancora più versatile e potente di quanto potessi immaginare.
Una convention annuale solitamente articolata in più giorni, in questo periodo di pandemia si svolge completamente online, pubblicando i filmati degli interventi su un canale Youtube.
Purtroppo i video rimangono disponibili solo per poche ore, avevo quindi bisogno di scaricarli in fretta, evitando però di includere anche altri video pubblicati precedentemente.

Leggendo tra la documentazione di Youtube-dl, ho scoperto l’opzione --dateafter, mi basta quindi impostare la data di inizio della convention per selezionare automaticamente solo i video pubblicati a partire da quella data.

Con l’opzione --download-archive evito il download dei video precedentemente scaricati. Youtube-dl tiene traccia di quanto ha già  scaricato nel file download.txt .

L’opzione -i ignora eventuali errori relativi a filmati non disponibili, nel mio caso utili perchè già  presenti in playlist i filmati in programma nei giorni successivi.

Con l’opzione -o specifico la cartella di destinazione e il formato del nome del file da salvare.

Il comando completo è quindi:

$ youtube-dl -o "/cartella/download/%(title)s.%(ext)s" --dateafter 20210315 --download-archive /cartella/download/downloads.txt -i https://www.youtube.com/playlist?list=abcde1234

inserito in un crontab, ogni 6 ore controlla la presenza di nuovi video e li scarica nella cartella scelta.

# scarica i nuovi filmati ogni 6 ore
* */6 * * * youtube-dl -o "/mnt/download/CON6/%(title)s.%(ext)s" --dateafter 20210315 --download-archive /mnt/download/downloads.txt -i https://www.youtube.com/playlist?list=abcde1234

ET:Legacy 2.77!

Di recente ho scoperto con piacere che è ancora possibile giocare a Return to Castle Wolfenstein e soprattutto alla sua evoluzione online ET:Legacy.
Di ET:Legacy, il port libero di Enemy Territory, è da poco uscita la nuova versione 2.77 che tra le altre cose supporta nativamente le ultime versioni di MacOS.

Sulla mia installazione di Linux Mint 20.1 Ulyssa i binari precompilati continuano a dare problemi in fase di esecuzione, ma Flatpak corre in aiuto della mia pigrizia: ET:Legacy è già pronto per essere installato!

Problemi audio con webcam Logitech C310

la webcam Logitech C310

In tempi di didattica a distanza una postazione in più in famiglia fa molto comodo, quindi ho rispolverato una vecchia webcam Logitech C310 e connesso ad un quasi altrettanto stagionato PC a cui Linux Mint ha dato nuova vita.

Mint riconosce senza problemi la webcam, la qualità video è più che accettabile e funziona quasi senza intoppi con Skype, Zoom, Google Meet, Wire e ogni altra app di videoconferenza che i nostri figli possano usare.

L’unico problema, già riscontrato con Elementary OS 5.1, era che a volte il microfono integrato non si avviava oppure riproduceva la voce ad una frequenza altissima che faceva assomigliare tutti ad Alvin and the Chipmunks.

Ogni tanto bastava scollegare e ricollegare la webcam, altre volte invece era necessario un riavvio.

La soluzione è arrivata, dopo molti tentativi nella configurazione di pulseaudio, da un vecchio post in un forum.

Il problema è si verifica quando la webcam non riesce ad impostare la corretta frequenza di campionamento a cui acquisire l’audio del microfono.
E’ quindi sufficiente indicare un rate specifico.
Se non è ancora presente occorre creare il file .pulse/daemon.conf nella cartella home di ciascun utente e aggiungervi la stringa

default-sample-rate = 16000

quindi riavviare pulseaudio:

$ sudo pulseaudio --kill && pulseaudio --start

Il microfono funziona regolarmente!
A quanto leggo la soluzione è applicabile anche a modelli analoghi come la C270 e la C510.

Creare un veloce sito WordPress con Docker e Raspberry Pi

Mi è capitato di dover effettuare importanti modifiche ad un sito realizzato con WordPress e avere le necessità di condividere il lavoro con altre persone.
Invece di “pasticciare” sul server di produzione, ho pensato di utilizzare il Raspberry Pi 4 che ho in casa come server di sviluppo.
Siccome il Raspberry in questione svolge già una miriade di compiti, per non smanettare troppo ho deciso di usare Docker, così da avere un’istanza preconfigurata di WordPress facilmente installabile e rimovibile quando non mi servisse più.

Su Docker Hub esiste l’immagine ufficiale di WordPress, ma si appoggia ad un database MySQL che non sembra funzionare sull’architettura ARM del Raspberry Pi.
Ho quindi scelto un’immagine specifica per ARM e l’installazione è andata liscia.

Questo è il mio file docker-compose.yml:

version: '3.1'
 services:
 wordpress:
     image: wordpress:latest
     container_name: wordpress
     restart: always
     ports:
       - 8080:80 # il sito comunicherà con l'esterno attraverso la porta 8080, modificabile a piacere  
     environment:
       WORDPRESS_DB_HOST: db
       WORDPRESS_DB_USER: test
       WORDPRESS_DB_PASSWORD: password
       WORDPRESS_DB_NAME: test
     volumes:
       - /opt/docker/wordpress/data:/var/www/html #per comodità ho creato una cartella dove archiviare i file di WordPress
 db:
     image: biarms/mysql # ho modificato questa riga per utilizzare l'immagine MySQL di biarms per ARM
     restart: always
     environment:
       MYSQL_DATABASE: test
       MYSQL_USER: test
       MYSQL_PASSWORD: password
       MYSQL_RANDOM_ROOT_PASSWORD: '1'
     volumes:
       - db:/var/lib/mysql
 volumes:
   wordpress:
   db:

Non sono un esperto di Docker, quindi probabilmente tutto si potrebbe fare meglio di così, ma in questo modo nel giro di pochi minuti ho avuto un’istanza funzionante di WordPress raggiungibile all’indirizzo http://<IP_RASPBERRYPI>:8080 .

Perchè il sito fosse raggiungibile anche dall’esterno mi è bastato utilizzare il reverse proxy Nginx già presente nella mia configurazione (a voi il divertimento eventuale di configurarlo e aprire le porte del vostro router casalingo, sul web trovare migliaia di tutorial e how-to) aggiungendo queste righe al file .conf già presente in /etc/nginx/sites-enabled :

location /test/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://0.0.0.0:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;

Dopo aver riavviato Nginx

$ systemctl reload nginx.service

la mia installazione WordPress è raggiungibile digitando http://MIO_INDIRIZZO_IP/test .

Però si era detto che questo sarebbe stato un sito di prova e non è bello che sia accessibile da chiunque.
Per questo ci viene in soccorso la basic authentication di Nginx : basta creare gli utenti desiderati con il comando :

$ sudo htpasswd /etc/apache2/.htpasswd utente1

e poi editare ancora il precedente file .conf di Nginx :

...
 location /test/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://0.0.0.0:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;

        # authentication
        auth_basic           "Area di test - Accesso riservato";
        auth_basic_user_file /etc/apache2/.htpasswd;

Un altro $ systemctl reload nginx.service per caricare la nuova configurazione e voilà!

A questo punto è bastato fare una copia del sito originale con il plugin Duplicator per WordPress, cancellare il contenuto della cartella data e sostituirlo con i due file creati da Duplicator, un archivio e un installer.
Andando all’indirizzo http://MIO_INDIRIZZO_IP/test/installer.php ho avviato la procedura di migrazione e in pochi minuti ho avuto una perfetta replica del mio sito, pronta per essere modificata a piacimento.
Una volta soddisfatto delle modifiche, sempre utilizzando Duplicator, potrò compiere la migrazione in senso inverso, dal server di test a quello pubblico.

Regolare l’immagine della webcam iSight con Linux

La iSight del mio iMac del 2008 funziona perfettamente con Linux, ma in situazioni di illuminazione non ottimali mostra comunque i suoi limiti tecnici, se rapportata ad una qualsiasi webcam recente.

Siccome l’iMac è posizionato in un angolo male illuminato con una grossa finestra alle spalle di chi è seduto, l’immagine catturata è spesso troppo scura, e in tempo di videochiamate e didattica a distanza questo è un problema:

Usando il comando v4l2-ctl è possibile impostare, tra i numerosi parametri, anche la luminosità.

$ v4l2-ctl --set-ctrl=brightness=34

con questo risultato (non perfetto, ma sicuramente migliore):

Variando altri parametri sarà possibile migliorare ulteriormente la qualità dell’immagine.
Utilizzando il comando $ v4l2-ctl -l si ha una panoramica dei parametri supportati.

Per rendere permanenti queste modifiche ho scelto il modo più semplice, anche se forse meno elegante.
Ho creato un semplice script bash:

#!/bin/bash
# aumenta la luminosità di iSight /usr/bin/v4l2-ctl --set-ctrl=brightness=34

Per eseguirlo al boot basta usare crontab:

@reboot bash /percorso/dello/script/script.sh