Vari tipi di programmi

I primi tre programmi che ho proposto sono ognuno di un tipo diverso.

Il programma calendario è un programma compilato, cioè è codificato, come si suol dire, in linguaggio macchina in modo da poter essere letto ed eseguito direttamente dalla CPU (Central Processing Unit) del computer attraverso il sistema operativo di cui il computer è dotato.
Questi programmi si scrivono in un linguaggio di programmazione che usa parole del linguaggio umano seguendo una determinata sintassi. Una volta scritti si traducono in linguaggio macchina attraverso programmi compilatori e si producono i così detti eseguibili (file che nel mondo Windows hanno l’estensione .exe).
I più famosi linguaggi che si prestano per produrre questo tipo di programmi sono, in ordine di anzianità, Pascal, C, C++, ADA.
Una volta che abbiamo l’eseguibile non ci interessa avere il programma compilatore e non ci interessa nemmeno sapere con quale linguaggio è stato prodotto l’eseguibile. A meno che vogliamo modificare l’eseguibile stesso: ma allora dobbiamo avere anche il codice sorgente, cioè quello scritto prima di essere codificato in linguaggio macchina.
La stragrande maggioranza del software commerciale è costituita da eseguibili di questo tipo e le aziende che producono questo software ben si guardano dal distribuire il codice sorgente, che mantengono protetto da brevetti. Nel mondo del software libero, invece, è normale distribuire anche il sorgente affinché ognuno possa contribuire al miglioramento del software stesso.
Il vantaggio di questo tipo di software è quello della velocità di esecuzione: vantaggio che, con la potenza dei processori che abbiamo oggi, è sempre meno percepibile in quanto vengono ormai eseguiti velocemente anche programmi di altro tipo.
Lo svantaggio sta nel fatto che un programma destinato ad essere eseguito su un certo sistema operativo deve essere compilato su e per quel sistema operativo. Un programma compilato per Windows non gira su Linux e su OS X e viceversa. Cioè, come si dice, gli eseguibili compilati non hanno portabilità.

Il programma calcoliGeometrici, prodotto utilizzando il linguaggio di programmazione Java, è anch’esso un programma compilato: la codifica, tuttavia, non lo traduce in linguaggio macchina ma in qualche cosa di intermedio, chiamato bytecode.
Questo bytecode non è direttamente proponibile per l’esecuzione dal sistema operativo del computer alla CPU ma viene passato alla CPU da una piattaforma intermedia installata sul sistema operativo, la così detta macchina virtuale Java, JRE (Java Runtime Environment).
Se il computer non ne fosse dotato, basta scrivere la parola java in una barra di ricerca sul web e verremo immediatamente indirizzati al sito da cui possiamo scaricare la versione adatta al nostro sistema operativo.
Molto software commerciale è prodotto con Java con distribuzione dell’eseguibile codificato in bytecode, che non è umanamente leggibile e si presta alla tutela dei segreti di fabbricazione. Nel mondo del software libero viene ovviamente diffuso anche il sorgente scritto nel linguaggio Java, derivato dal linguaggio C.
Il vantaggio di questo tipo di software sta nel fatto che lo stesso eseguibile gira su tutti i sistemi operativi che siano dotati della macchina virtuale Java, cioè è dotato della massima portabilità.
Lo svantaggio sta nella relativa lentezza di esecuzione dovuta al doppio passaggio tra sistema operativo e macchina virtuale e tra macchina virtuale e CPU; lentezza che praticamente non si avverte con i più moderni processori ma che si può avvertire su computer anzianotti.

Il programma MasterMind non è un programma compilato ma è, praticamente, un sorgente scritto nel linguaggio Python: in termine tecnico si chiama uno script.
Gli script, per essere eseguiti, hanno bisogno di essere tradotti in linguaggio macchina attraverso un interprete che li legge, li traduce e li trasmette alla CPU.
Sul computer dove vogliamo utilizzarli deve essere installato questo interprete.
I principali linguaggi di scripting, in ordine di anzianità, sono Perl, Python e Ruby.
Come per Java il vantaggio è la portabilità, a condizione che sul computer sia installato l’interprete.
Lo svantaggio è la relativa lentezza di esecuzione.

Geometria

Nel mio articolo “Una libreria per calcoli geometrici” ho presentato una libreria java che ho costruito per facilitare l’esecuzione, appunto, di calcoli geometrici.
Con questa libreria ho costruito un programma che ne utilizza parecchie funzioni e ci dà modo di effettuare i più ricorrenti calcoli di geometria.
Il programma consiste in un archivio eseguibile java, quelli che hanno l’estensione .jar.
E’ utilizzabile su qualsiasi computer, qualunque sia il sistema operativo, a condizione che vi sia installata la macchina virtuale java.
Ogni computer dovrebbe averla.
Se per caso il programma non funzionasse perchè sul computer non c’è java, basta scrivere la parola java su qualsiasi barra di ricerca sul web e saremo immediatamente indirizzati a un sito da cui possiamo installarla.
In Windows e OS X il programma, che si chiama calcoliGeometrici.jar, si fa partire con doppio click sul suo nome.
In Linux si può far partire da terminale con il comando
java -jar calcoliGeometrici.jar
una volta che ci si è posizionati nella directory dove è archiviato l’eseguibile.
L’inserimento nei menu può avvenire inserendo lo stesso comando nei launcher, ovviamente con l’indicazione del percorso per raggiungere il luogo di archiviazione del file eseguibile.
Il programma si può scaricare da qui.

Una libreria Java per calcoli geometrici

Per certi calcoli geometrici è facile ricordare le formule e li possiamo eseguire facilmente a mano o con una semplice calcolatrice.
L’area del rettangolo la calcoliamo tutti, anche mentalmente.
La superficie totale di una piramide a base pentagonale noti gli apotemi della base e della piramide non la possiamo calcolare così facilmente.
Purtroppo se cerchiamo software per fare questi calcoli non è che ne troviamo molto.
Ho pensato allora di passare un po’ di tempo per costruire una libreria java in cui ho inserito quante più funzioni geometriche mi sono venute in mente.
La libreria è scaricabile da qui.
Una volta scaricato il file .zip lo si estrae e, cliccando sul file index.html nella directory javadoc, si vede tutta la descrizione della libreria.
Ovviamente, oltre alla libreria vera e propria, denominata Geometria.jar, è presente il source con cui è stata costruita.

Utilizzando questa libreria mi sono poi divertito a fare un programma java per calcoli geometrici.
Il source di questo programma si trova qui e l’eseguibile java si trova qui.

Calendario

Questo programma è presentato come esempio nel mio articolo “La resurrezione del Pascal” in quanto è in questo linguaggio che l’ho scritto e da quell’articolo, oltre agli eseguibili per Linux e per Windows è scaricabile anche il source.
Lo ripropongo qui per dire a che cosa serve.

Il menu che ci si presenta all’apertura, oltre ad una voce che contiene alcuni avvertimenti per l’utilizzo del programma, ha quattro voci.

La prima ci dà modo di ottenere le seguenti informazioni sul giorno che inseriremo:
. il numero del giorno giuliano alle ore 12,
. il giorno della settimana in cui cade,
. lo stato della fase lunare,
. il posizionamento della luna nel ciclo siderale.
Se vuoi vedere in che giorno della settimana cadeva il 18 aprile del 2008, in che fase lunare si collocherà il 22 maggio del 2018 o se puoi imbottigliare tranquillamente il vino il 16 marzo del 2016 questa è la scelta di menu adatta.

La seconda ci dice quando è caduta o cadrà la Pasqua nell’anno che inseriremo.

La terza ci elenca data e ora dei solstizi e degli equinozi dell’anno che inseriremo.

La quarta calcola i giorni intercorrenti tra le due date che indicheremo.

Gli eseguibili del programma si possono scaricare da qui:

eseguibile_linux (da rendere eseguibile dopo scaricamento con chmod 555)
eseguibile_windows

Esecuzione di script Python

Un programma Python, meglio sarebbe dire uno script Python, non è compilato, cioè non è direttamente eseguibile dalla CPU del computer.
Esso, infatti, è costituito da un elenco di istruzioni, composto secondo le regole sintattiche del linguaggio di programmazione Python, scritte in caratteri alfanumerici leggibili dall’uomo: da qui il nome più adatto di “script”.
Per essere eseguito ha bisogno di essere interpretato nel momento stesso dell’esecuzione.
Vediamo ciò che può avvenire nei due sistemi operativi Linux e Windows.

Sistema Linux

Il modo basico di eseguire lo script è quello di posizionarci nella directory dove lo abbiamo archiviato e richiamarlo con l’interprete scrivendo a terminale, nel caso l’interprete sia Python3 e lo script sia quello del gioco Master Mind scaricabile dal relativo articolo:
python3 MasterMind.py
Se questa istruzione la inseriamo in un launcher, indicando al posto di MasterMind.py anche tutto il percorso per raggiungerlo, avremo un’icona da inserire nei nostri menu, cliccando sulla quale lanceremo il programma.
Se vogliamo poter lanciare il programma senza richiamare l’interprete dobbiamo inserire nello script, come prima riga, dopo i simboli #! il percorso per raggiungere l’interprete con il nome dell’interprete stesso. In questo modo, con alcuni gestori di file come Nemo, potremo anche lanciare il programma con doppio click sull’icona del file.
Ovviamente lo script va reso preventivamente eseguibile con chmod 555.
Per i programmi che utilizzano moduli, come avviene per il nostro Master Mind con il modulo tkinter, occorre che, insieme all’interprete, sia presente sul computer anche il modulo stesso.
Nei sistemi Linux, che hanno generalmente preinstallato Python insieme al sistema, può accadere che la preinstallazione non comprenda il modulo tkinter. Si rimedia subito cercando tkinter nel gestore di programmi e installandolo. Indirettamente si può installare tkinter installando la Idle (Integrated DeveLopment Environment) del nostro Python, peraltro utilissima per produrre gli script.

Sistema Windows

Tutti gli installatori di Python per Windows installano anche tkinter, e questo è bene.
Il male viene dal fatto che l’installatore inserisce l’interprete in una directory intitolata alla versione di Python che installa, all’interno della quale, però, il nome del programma interprete è sempre python.exe, indipendentemente dalla versione. Mentre, cioè, nel sistema Linux abbiamo un eseguibile python2 per la versione 2 e un eseguibile python3 per la versione 3, in Windows abbiamo un eseguibile python.exe archiviato nella directory Python20 per python 2 e un eseguibile, ancora python.exe, archiviato nella directory Python30 per python 3.
L’installatore non inserisce il percorso a python.exe nel path di sistema: forse fa questo per evitare casini. Infatti se installassimo due versioni di Python su Windows, la 2 e la 3, e inserissimo entrambe nel path di sistema combineremmo un guaio, in quanto il richiamo dell’eseguibile python.exe per interpretare uno script Python avverrebbe a caso, senza tener conto della versione di Python con cui è stato generato lo script.
Nè possiamo sperare che ci aiuti la prima riga dello script, dove, dopo i simboli #! inseriamo il percorso per raggiungere l’interprete giusto: questa riga, infatti, è capita solo dal sistema operativo Linux (che, come tutti ormai sanno, è il miglior sistema operativo esistente).
In conclusione, se abbiamo il nostro giochino Master Mind su Windows e vogliamo inserirlo nel menu lo facciamo indicando ove dovuto i percorsi all’interprete e allo script da eseguire.
Se vogliamo che il nostro giochino parta con doppio click sulla sua icona:
. o, visto che lo script è in Python 3, inseriamo nel path di sistema il percorso c:\python30 e tutte le volte che richiamiamo python ci esce la versione 3;
. oppure creiamo un file batch con l’istruzione
c:\python30\python.exe “<percorso allo script da eseguire>”,
lo archiviamo con l’estensione .bat e lanciamo il nostro giochino con doppio click sull’icona del file batch.

Master Mind

Il gioco Master Mind consiste nel decifrare un codice segreto composto da quattro palline colorate, ovviamente nell’ordine in cui si trovano (esempio una pallina rossa, una pallina verde, una pallina blu, una pallina rossa).
Il codice segreto viene generato dal computer utilizzando quanti colori (4, 5, 6 o 7) scelga di mettere in gioco il giocatore: le quattro palline avranno ciascuna uno dei colori del set scelto, con possibilità di avere più palline dello stesso colore. In tal modo, anche se i colori messi in gioco sono solo quattro, non è detto che vengano utilizzati tutti; certamente, visto che il codice è composto da quattro palline, non saranno utilizzati tutti i colori messi in gioco se questi sono 5, 6 o 7. Con l’aumento dei colori messi in gioco aumenta così la difficoltà della decifrazione del codice segreto.
Il giocatore compie tentativi di decifrazione indicando combinazioni ipotetiche. Ad ogni tentativo il computer risponde:
. mostrando un quadratino nero per ogni pallina del colore giusto al posto giusto,
. mostrando un quadratino bianco per ogni pallina del colore giusto al posto sbagliato.
Ragionando su queste risposte alle combinazioni ipotizzate nei vari tentativi si dovrebbe riuscire a decifrare il codice in meno di dieci tentativi: in caso contrario la partita è persa.

Mi sono divertito a scrivere un programmino per questo gioco, che si può scaricare qui.
Ho utilizzato il linguaggio Python nella versione 3 con il modulo grafico tkinter e il programma funziona su qualsiasi computer, qualunque sia il sistema operativo, purché sul computer stesso sia installato l’interprete Python 3.
Chi usa il sistema operativo Linux dovrà ricordarsi di rendere eseguibile il file scaricato con chmod 555 e verificare che la prima riga contenga l’indicazione esatta del percorso dell’interprete Python sul proprio computer (quasi sempre sarà quello indicato nel programma, a meno di installazioni personalizzate).
Il programma è facilmente adattabile per essere utilizzato con un interprete Python 2: basta modificare con un semplice editor di testo (non word processor) la riga 165, scrivendo Tkinter (con la T maiuscola) al posto di tkinter (con la t minuscola). Chi usa il sistema operativo Linux dovrà anche sostituire python2 a python3 nella prima riga, sempre verificando che il percorso sia giusto.

Buon divertimento.

Da Python 2 a Python 3

Se qualcuno ha scaricato l’applicazione Python for Android che ho proposto nel mio precedente articolo “Python su Android” si sarà accorto che si tratta della versione 3 di Python. Questa versione è stata rilasciata fin dal 2008 e costituisce ormai il presente e il futuro del linguaggio Python. Ma il mondo è ancora pieno di versioni 2, in particolare dell’ultima rilasciata 2.7.9, che resiste alla messa in quiescenza in quanto i programmi scritti con la sintassi della versione 2 non sono compatibili con la versione 3 e questi programmi:
. o si continuano ad utilizzare con l’interprete di una delle versioni 2,
. o si buttano insieme al vecchio interprete di una delle versioni 2,
. o si adattano alla versione 3 e si butta il vecchio interprete di una delle versioni 2.
La cosa più saggia da fare è sicuramente l’ultima, in quanto le differenze tra le versioni 2 e 3 non sono poi così tante.
Per i volonterosi che vogliano provvedere ad aggiornare i propri programmi Python 2 a Python 3 le elenco nel file PDF allegato, scaricabile e stampabile.
Chi già conosce Python 2 e non conosce ancora Python 3 ha così anche la chiave per programmare, da qui in poi, in Python 3.

da_python2_a_python3

Python su Android

Su un tablet o su uno smartphone equipaggiati con Android è possibile lavorare con il linguaggio di programmazione Python; lavorare nel senso di avere a disposizione la shell di Python e di poter eseguire script Python archiviati sul dispositivo.
Mi si chiederà: per farci che cosa?
Nel mio caso, oltre che per eseguire programmi di calcolo di varia natura da me prodotti (calcoli finanziari, calcoli statistici, calendario perpetuo, ecc.), anche per poter accedere con facilità a database Sqlite (ricordo che Sqlite è integrato nel sistema Android) dove ho catalogato tutte le mie raccolte musicali e di biblioteca, con il vantaggio, tra i tanti, che, potendo controllare istantaneamente sullo smartphone le opere di un certo autore che già posseggo non corro il rischio di acquistare doppioni quando sono in giro per negozi.
Al di là di tutto ciò sta comunque la soddisfazione di poter creare qualche cosa che funzioni persino su un telefonino, divertendosi con quello splendido linguaggio di programmazione che è Python.

Per fare queste cose dobbiamo innanzi tutto procurarci l’applicazione sl4a (scripting layer for android) che è la piattaforma sulla quale possiamo far girare i nostri script. Si dice in giro che questa applicazione sia diventata incompatibile con Android a partire dalla versione 5.0 (Lollipop): non mi pare, visto che su un mio emulatore con Android 5.0.1 (API 21) funziona benissimo. L’ultima versione dell’applicazione, la sl4a_r6 si trova qui.
Dobbiamo poi procurarci l’applicazione Python for Android, che ci consente di installare l’interprete Python. L’ultima versione, Python3ForAndroid_r6 si trova qui.
Entriamo così in possesso dei file sl4a_r6.apk e Python3ForAndroid_r6.apk che dobbiamo installare, nell’ordine, sul nostro dispositivo. Per l’installazione di sl4a è necessario che il dispositivo sia corredato di una SDCard sulla quale verrà automaticamente creata una directory per ospitare gli script.
Con collegamento internet attivo lanciamo l’applicazione Python for Android e, dal menu che compare, scegliamo Installa: dopo qualche minuto di scaricamento, scompattamento e installazione avremo il nostro Python sul dispositivo e lanciando l’applicazione sl4a troveremo elencati gli script Python che si sono installati per dimostrazione ed ai quali potremo aggiungere tutti quelli che produrremo noi.
L’allegato file PDF, scaricabile e stampabile, costituisce un utile prontuario sul funzionamento dell’applicazione sl4a.

sl4a