«[Figlio dell'uomo] Porgi l'orecchio e ascolta le parole di KGB
e applica la tua mente alla SUA istruzione
» Pv. 22,17

Qui si straparla di vari argomenti:
1. Il genere dei pezzi è segnalato da varie immagini, vedi Legenda
2. Per contattarmi e istruzioni per i nuovi lettori (occasionali e non) qui
3. L'ultimo corto è questo
4. Molti articoli di questo blog fanno riferimento a definizioni e concetti che ho enunciato nella mia Epitome gratuitamente scaricabile QUI. Tali riferimenti sono identificati da una “E” fra parentesi quadre e uno o più capitoli. Per esempio: ([E] 5.1 e 5.4)

lunedì 18 febbraio 2019

Programmino ino ino

Oggi (finalmente!) avevo voglia di rimettermi a studiare le reti neurali però mi è presa la paura di non ricordarmi più niente di Python: per me il problema di imparare un nuovo linguaggio di programmazione non è tanto capire i diversi costrutti ma mettere in pratica le nozioni acquisite.
E io in tutti questi giorni non avevo più neppure pensato al Python!

Così ho deciso di provare scrivere un semplice programmino che mi fosse utile. Il gestore del salvaschermo di Linux Mint 19 è molto potente perché, in pratica, riunisce insieme un centinaio di diversi salvaschermi tutti più o meno configurabili.
Fra le varie impostazioni è possibile inserire anche un programma che ritorni una frase casuale che sarà poi visualizzata da tutti i salvaschermi che usano un testo. Normalmente è preimpostato il comando “fortune” che, eseguito da CLI, restituisce delle frasi casuali in inglese. Io però volevo usare le “mie”…

Nel corso degli anni mi sono infatti copiato in un archivio di testo gli esempi di utilizzo delle parole che imparo a memoria con ANKI (*1). Ovviamente solo le frasi che al mio orecchio suonavano poetiche o buffe…

L’idea era quindi scrivere un programmino in Python che si caricasse in memoria il mio archivio e poi ne estraesse a caso una frase: insomma una vera e propria banalità…

Il problema è che di Python già non mi ricordavo più niente!
Fortunatamente ho una certa pratica di programmazione e, soprattutto, esiste Google: in pratica me la sono cavata mettendo insieme il risultato di tre ricerche; di seguito le pagine trovate:
1. Come caricare linea per linea un archivio in una lista
2. Come trovare la dimensione di una lista in Python
3. Numeri casuali in Python

Mettendo insieme gli esempi raccolti (in pratica di Python mi ricordavo solo il comando “print”!) su queste pagine ho scritto il seguente programmino:
1:  import random  
2:    
3:  with open("/dati/Codice/Python/PitoneIDE/Frasi.txt") as f:  
4:    content = f.readlines()  
5:  content = [x.strip() for x in content]  
6:    
7:  nfrase = random.randint(0, len(content)-1)  
8:  print(content[nfrase])  

Insomma una vera e propria banalità!
Poi ho copiato l’archivio di questo programma (frasi.py3) in una cartella del PATH di linux (*2), ovvero in ~/.local/bin e, magia, scrivendo frasi.py3 da terminale, in qualunque cartella fossi, non funzionava più nulla!!

Per la precisione ottenevo questo fantastico risultato:
 igrino@SchiavaTwo:~/.local/bin$ frasi.py3  
       
   
   
 import-im6.q16: not authorized `random' @ error/constitute.c/WriteImage/1037.  
 /home/igrino/.local/bin/frasi.py3: line 6: syntax error near unexpected token `('  
 /home/igrino/.local/bin/frasi.py3: line 6: `with open("/dati/Codice/Python/PitoneIDE/Frasi.txt") as f:'  
   

Fortunatamente sono anche abituato a risolvere queste piccole difficoltà tecniche…
Prima ho provato a cercare su Google l’errore “not authorized `random'” aggiungendoci le chiavi “linux Python”. Ho dato una rapida occhiata ai collegamenti suggeritimi da Google ma mi sono immediatamente reso conto che il mio problema doveva essere un altro…
Subito dopo mi sono ricordato che gli script su linux hanno tutti uno strano inizio con questi caratteri: #!
Allora ho cercato su Google: “script Python linux header” e ho letto questa pagina: Python script header.

Ho capito allora cosa succedeva: il terminale ignorava l’estensione .py3 e interpretava il mio programmino Python come se fosse scritto in un altro linguaggio e, ovviamente, i messaggi di errore non avevano senso.
Per risolvere il problema è stato quindi sufficiente aggiungere la linea iniziale:
#!/usr/bin/python3

grazie a questa linea il terminale “capisce” che l’archivio contiene un programma in Python da lanciare tramite il comando indicato. In pratica quando adesso scrivo sul terminale “frasi.py3” viene eseguito “/usr/bin/python3 frasi.py3”.

Ah! per onestà aggiungo anche di aver scoperto l’acqua calda: chiunque abbia un minimo di esperienza di linux dovrebbe conoscere lo shebang, ovvero la strana linea iniziale sullodata: ma io sfortunatamente, da un punto di vista di conoscenze prettamente tecniche, sono una capra…

Comunque ho poi inserito nelle impostazioni del gestore del salvaschermo il mio programmino e ha subito funzionato benissimo come si vede nella seguente schermata di prova di “StarWars”:

Conclusione: l’insegnamento che si dovrebbe trarre da questo pezzo non è tanto come scrivere un programma stupido di poche linee in Python ma che l’informatica è una congerie di problemi tecnici dove però basta aver pazienza e cercare su Google per riuscire a risolvere il 99% delle difficoltà incontrate...

Nota (*1): non ho voglia di inserire i relativi rimandi ai pezzi in cui ne ho scritto: chi è interessato usi il marcatore “Memoria” per trovarli!
Nota (*2): ovvero in una delle cartelle (sono più di una: per l’elenco completo basta scrivere, senza virgolette, dal terminale: “echo $PATH”) dove Linux va a cercare gli eseguibili dei programmi inseriti tramite CLI.

Nessun commento:

Posta un commento