Salta al contenuto principale
Working from scratch, following simplicity

Un piccolo programma in Python per seguire la regola del 20-20-20 e prevenire l'affaticamento della vista

Da qualche tempo ho cominciato a lamentarmi per l'affaticamento degli occhi e il mal di testa, soprattutto dopo aver trascorso molte ore davanti allo schermo del mio portatile. Ho quindi scoperto la regola del 20-20-20 e provato ad applicarla con uno script in Python, che mostra automaticamente uno schermo nero ogni 20 minuti per 20 secondi in modo da costringermi a distogliere lo sguardo verso qualcosa distante 20 piedi da me (circa 6,10 metri). Inoltre il programma emette un suono quando lo schermo si riaccende.

Quando lavoro al PC, mi è difficile distaccare lo sguardo dallo schermo e fare una pausa soprattutto se ho molte cose da fare, quindi un semplice timer ricorrente o l'avviso della smartband per lo stato sedentario non funzionano affatto. Dovevo trovare il modo di rispettare la semplice regoletta del 20-20-20.

La regola 20-20-20

Qui c'è un esauriente articolo sull'argomento: How Does the 20-20-20 Rule Prevent Eye Strain?, ma in cosa consiste? In parole povere si tratta ogni 20 minuti di volgere lo sguardo ad un punto od un oggetto che si trova a una distanza equivalente a 20 piedi (circa 6 metri) per almeno 20 secondi.

Un piccolo programma in Python per seguire la regola del 20-20-20 e prevenire l'affaticamento della vista

Non ho voluto approfondire e verificare le ricerche riportate nell'articolo citato, ma ho notato che tra tutti i sintomi riportati anche io ne presento alcuni legati all'affaticamento della vista (evidenziati in grassetto):

  • occhi secchi;
  • occhi annebbiati;
  • visione offuscata;
  • visione doppia
  • mal di testa;
  • collo, spalle o schiena indolenziti;
  • fotosensibilità;
  • difficoltà nella concentrazione;
  • difficoltà a tenere gli occhi aperti.

E usando questo metodo li ho risolti quasi tutti!

Il programma

Volevo un programma che ogni 20 minuti spegnesse lo schermo e lo riaccendesse dopo 20 secondi emettendo infine un suono, con la possibilità di essere disattivato se trova la scheda audio occupata (utile se ogni tanto si guardano dei video).

Per prima cosa ho provato con Bash e cron usando:

  • xrand (troppi parametri da settare, poca portabilità ad altri computer)
    xrandr --output HDMI2 --off
    sleep 20
    xrandr --output HDMI2 --on
    xrandr --output HDMI2 --mode 1920x1080
    
  • chvt (necessità di cambiare i permessi all'eseguibile e poco pratico)
    sudo chmod u+s /bin/chvt #to allow the user to execute it
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    export DISPLAY=:0.0
    status=`/usr/bin/pacmd list-sink-inputs | grep -c "state: RUNNING"`
    /usr/bin/pacmd list-sink-inputs >> /home/nicola/prova.txt
    echo $status >> /home/nicola/prova.txt
    if [ "`/usr/bin/pacmd list-sink-inputs | grep -c 'state: RUNNING'`" -lt "1" ]; then chvt 3;  sleep 20;  chvt 7; fi
    

Poi ho risolto il tutto con Python.

Prerequisiti

L'ho scritto in Python 3.6 e necessita dei seguenti pacchettiPer installarli suggerisco 'pip' per la sua estrema facilità: "pip install nome-pacchetto":

  • pygame;
  • sys;
  • subprocess;
  • schedule;
  • time;
  • pacmd (ovvero PulseAdioPulseAudio è un server audio di rete disponibile in diverse distribuzioni Linux direttamente collegato al sistema operativo in uso).

Configurazione:

All'inizio del file ci sono tre opzioni che si possono adattare alle proprie necessità:

# SETTINGS:
size = (1920, 1080) # size of your monitor
check_audio = ‘ON’ # with 'ON' the script doesn't turn off the screen if your audio card is working
duration = 1200 # the time interval in seconds

Download

Si può scaricare da GitHub al seguente indirizzo:

Come funziona

È molto semplice, basta lanciare dal terminare o creare una scorciatoia con:

python eye_strain_reducer.py

Verrà stampato sul prompt dei comandi:

  • il tempo di avvio;
  • il tempo e l'azione corrispondente ogni 20 minuti circa
    • --> OKAY!! (se spegne lo schermo)
    • --> NO WAY (se non lo spegne perché l'opzione check_audio è su ON e il numero dei sink è maggiore uguale a 1).

Qui sotto c'è un esempio illustrativo:

$ python3.6 eye_strain_reducer.py
19:35:11–> Starting…

b’0\n’
19:55:11–> OKAY!!

b’1\n’
20:15:34–> NO WAY!!

...

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Sponsored Links
Pubblicità

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.