Luce tra le nuvole

Luce tra le nuvole

Nel buio dell’umanità,
triste schiava d’un’avidità,
che ci immonda l’esistenza
e infanga dignità,

prego per noi,
per il presente
e quel che sarà,
affinché sia sorridente,

meglio ancor gioiente,
prodigo di virtù
per l’anima arricchente,
per viver meglio assai di più.

Tra i nuvoloni neri,
carichi d’un folle diluvio,
s’affaccia un sole
che di salvezza è preludio.

Siamo qui per allenare
speranza e voglia d’amare,
ormai le nostre esistenze
non possono che migliorare.

Grazie!

(Francesco Galgani, 9 dicembre 2019, www.galgani.it)

Eco-menù di Greenpeace: riflessioni, critica ragionata e due documentari

Riporto in calce un comunicato stampa della Società Scientifica di Nutrizione Vegetariana su un tema a me caro, intitolato "ECO-MENÙ DI GREENPEACE: È FUORVIANTE. QUATTRO CRITICHE SPIEGANO IL PERCHÉ". Ad ogni modo, vorrei anche entrare nel merito della questione, visto che è già la seconda volta che Greenpeace assume posizioni dissonanti con la mia sensibilità. Ricordo le dichiarazioni ufficiali di Greenpeace dopo la pubblicazione del documentario "Cowspiracy", che avevo visto integralmente e a cui avevo dedicato un articolo: il tema di quel documentario, più che mai attuale, riguardava il rapporto tra alimentazione umana e distruzione ambientale; più nello specifico, quel documentario denunciava anche i modi di fare di certe associazioni ambientalistiche, di cui Greenpeace nello specifico.

Ciò non toglie che ciascuno e ciascuna di noi, alla fine, può fare le proprie scelte. Nel caso specifico, riferendomi al documentario "Dominion", che ho riportato integralmente nel mio blog e che riguarda un'accurata inchiesta sulla vita degli animali da allevamento, si tratta di una scelta d'Amore.

Tutte queste polemiche cosa insegnano? Secondo me, un'attenta risposta l'ha data Paolo Scroccaro, dell’Associazione Eco Filosofica, nel suo documento "Cosa insegna la polemica dell’ecologia superficiale contro Cowspiracy?", che nella parte conclusiva si esprime così: «[...] Ma il problema centrale è un altro: bisogna ammettere che Cowspiracy, al di là delle polemiche, si configura come un notevole contributo alla delegittimazione del ciclo della carne, in quanto totalmente insostenibile dal punto di vista etico, ecologico ed economico. Ciò significa che siamo in presenza dell’anello debole per eccellenza del capitalismo (subito dopo viene l’agroindustria), che può essere colpito da prospettive diverse ma convergenti, con eccellenti argomentazioni in sintonia con la ricerca più avanzata, e non è poco: infatti sulla rottura degli anelli deboli del sistema occorre far leva per scardinarlo e per promuovere un nuovo immaginario, un nuovo paradigma non antropocentrico e non sviluppista. L’ecologismo superficiale (rappresentato dalle sigle citate e molte altre), non cogliendo l’importanza di quanto sopra, invece di collaborare nell’opera di delegittimazione, tende a ridimensionare le responsabilità degli allevatori e dei consumatori di carne, in nome di un concetto di sostenibilità funzionale al sistema dominante, come abbiamo già evidenziato all’inizio. [...]».

Francesco Galgani,
7 dicembre 2019


fonte: https://www.agireora.org/ecologia/ecomenu-greepeace-critiche-3239.html

Che cos'è un eco-menù? L'immagine che si affaccia alla mente è quella di un'impronta leggera sul pianeta, in punta di piedi. In contrasto con tracce pesanti, come di scarponi chiodati, che affondano nel terreno e lo distruggono.

Ed è proprio così: quello che scegliamo di mangiare determina il nostro impatto sul mondo. È il fattore primario sui cui abbiamo il potere di intervenire come singoli.

Se calcoliamo l'impatto ambientale della nostra dieta, ci accorgiamo che l'impronta ecologica di un'alimentazione basata sui vegetali è di molto inferiore a quella di una dieta basata su ingredienti animali - una diminuzione fino al 90%.

Mangiando vegetale, camminiamo in punta di piedi, mangiando carne, pesce, formaggi e uova camminiamo con scarponi pesanti e distruttivi.

Possiamo calcolare il nostro impatto inserendo i cibi che mangiamo ogni giorno nell'applicazione web Mio Eco Menù, un progetto che Società Scientifica di Nutrizione Vegetariana - SSNV ha lanciato un anno fa.

È di pochi giorni fa, invece, l'iniziativa di Greenpeace con un nome del tutto simile, "Eco Menù", ma di contenuto ben diverso. Si tratta di un opuscoletto illustrato, di 4 pagine, con 10 consigli "per una spesa amica del clima e del pianeta".

Dieci consigli che nel migliore dei casi sono troppo blandi e nel peggiore arrivano a suggerire "soluzioni" che non risolvono nulla e danno un falso senso di sicurezza al lettore: dipingono una visione di fantasia del sistema dell'allevamento e della pesca che può portare a scelte sbagliate.

Così, proprio le persone più ricettive, che decidono di impegnarsi a cambiare la propria dieta per avere un minor impatto ambientale, vengono fuorviate da affermazioni infondate che vanificano il loro impegno.

Sono parecchi i punti contestabili tra i consigli di Greenpeace, ma ci limitiamo a quattro critiche principali. Vi invitiamo ad aiutarci a diffonderle.

Critica 1: Non è vero che esistono gli allevamenti ecologici

Greenpeace consiglia: "Riduci il tuo consumo di carne e derivati: massimo una o due porzioni a settimana, proveniente da allevamenti ecologici e da produttori che conosci direttamente."

Ridurre è utile, è vero. L'ottimo è arrivare a zero, ma ogni riduzione è positiva, è corretto. Quello che è sbagliato è sostenere che esistano allevamenti "ecologici". È un ossimoro, una contraddizione in termini.

Qualsiasi genere di allevamento causa spreco di risorse, enorme e ineliminabile: spreco di acqua, in un mondo sempre più assetato; spreco di terreno, che porta a disboscamento e distruzione dell'ambiente naturale; spreco di energia; spreco di sostanze chimiche, che inquinano; aumento dell'effetto serra: il settore dell'allevamento ha un impatto maggiore di quello dei trasporti e simile a quello dell'industria.

Questo accade perché occorre coltivare moltissimi vegetali da dare in pasto agli animali: servono in media 15 kg di mangime per ottenere un chilo di carne. Se, anziché coltivare i vegetali e nutrircene direttamente, li diamo agli animali per avere carne, latte e uova, dobbiamo produrne molti di più e quindi serve molta più acqua, terreno, energia e tutte le altre risorse necessarie.

Questo è vero per ogni genere di allevamento, perché è un vincolo legato alla fisiologia degli animali: non si può inventare un animale che mangiando un chilo di mangime aumenti di un chilo di peso.

Negli allevamenti più piccoli e biologici lo spreco di risorse non è minore. È uguale o ancora maggiore, perché si consuma ancora più territorio e più mangime a parità di carne prodotta (o latte o uova). Si usano meno sostanze chimiche, è vero, ma questo è marginale rispetto al totale dell'impatto sull'ambiente.

In definitiva, tutti gli alimenti ottenuti allevando animali (carne, pesce, latte, formaggi, uova) hanno un impatto ambientale molto elevato, qualsiasi sia il tipo di allevamento da cui provengono.

Critica 2: Non è vero che le uova di allevamento biologico "all'aperto" sono migliori delle altre

Il consiglio di Greenpeace "Acquista uova da allevamento biologico all’aperto" induce a credere che sotto l'aspetto ecologista esistano differenze con le uova di allevamento intensivo. Invece, non ce ne sono.

Le risorse consumate per la produzione di uova sono le stesse per tutti i tipi di allevamento. Anche per la salute umana queste uova non sono migliori; conterranno, forse, meno sostanze chimiche, ma i grassi e il colesterolo rimangono.

Inoltre, gli animali vengono uccisi tutti allo stesso modo, qualsiasi sia l'allevamento di provenienza: i pulcini maschi appena nati, tritati vivi; le galline ovaiole a circa due anni, sgozzate al macello.

Muoiono male, e non vivono bene: tutte le investigazioni fatte finora in quelli che si definiscono allevamenti di "animali felici" hanno trovato animali sofferenti, violenza e condizioni di vita ben lontane dalle esigenze degli animali.

D'altra parte, se la quantità totale di uova consumate rimane la stessa, per forza di cose rimane lo stesso anche lo sfruttamento, le uccisioni, la sofferenza.

Critica 3: Non è vero che esistono allevamenti in cui gli animali sono rispettati e non soffrono

Anche sul consumo di latte Greenpeace dà lo stesso consiglio: "Privilegia latte e latticini provenienti da allevamenti ecologici." E arriva finalmente a spiegare che cosa intende per "allevamenti ecologici".

In questi allevamenti, secondo Greenpeace "Gli animali sono allevati all’aperto, con rispetto e senza sofferenze".

Questo non avviene MAI e non potrà avvenire MAI. Non esistono allevamenti senza sofferenza.

  • Gli animali sono sempre confinati, rinchiusi in spazi troppo piccoli, ben lontani da quelli necessari alle loro esigenze naturali.

  • Sono menomati: viene loro tagliata la coda, il becco, le corna, vengono castrati, tutto in maniera sbrigativa e col minor costo possibile.

  • Non possono avere normali rapporti sociali e affettivi coi loro simili: le madri non possono stare coi loro cuccioli, maschi e femmine non possono corteggiarsi ed esprimere affetto, non può esistere amicizia. Tutti sentimenti che in natura esistono e di cui gli animali hanno bisogno estremo, proprio come noi.

  • Tutti gli animali, in ogni genere di allevamento, sono uccisi quando raggiungono il peso ottimale per la macellazione oppure quando non servono più.

Tutto questo è rispetto e non sofferenza?

In questi allevamenti impossibili, secondo Greenpeace "l’alimentazione animale è principalmente basata sul pascolo e sui residui agricoli; i mangimi sono prodotti localmente senza uso di pesticidi. Il terreno utilizzato per l’alimentazione animale non è stato sottratto alla produzione alimentare."

In primo luogo, l'allevamento a pascolo non ha un impatto minore di quello a mangime, tutt'altro.

In secondo luogo, certo che il terreno per coltivare mangime è stato sottratto alla produzione alimentare: se è un terreno su cui si possono coltivare vegetali per gli animali, allora si possono coltivare anche vegetali per il consumo umano. E di questi ne basterebbe una quantità molto minore per ricavare gli stessi nutrienti e calorie.

L'allevamento spreca sempre moltissime risorse, di qualsiasi genere esso sia.

Critica 4: Non è vero che esiste la pesca sostenibile

Scrive Greenpeace: "Impara a leggere l’etichetta per scegliere pesce di stagione, locale e pescato in modo artigianale, piuttosto che quello allevato o pescato con metodi distruttivi."

Non può esistere "pesce sostenibile". L'unico pesce sostenibile è quello che rimane libero e vivo nel mare.

La pesca ha già distrutto gran parte degli habitat marini: non ha senso parlare di scegliere pesce "diverso". Che sia pescato in modo "artigianale" o meno, che differenza fa, se la quantità di pescato rimane uguale? Bisogna alleggerire in modo sostanziale il peso che opprime i mari e gli oceani a causa dell'ingordigia umana.

Se per la carne almeno è stata consigliata una diminuzione dei consumi, lo stesso consiglio va dato anche per il pesce. I danni alla salute sono gli stessi della carne, quelli all'ambiente pure.

E i pesci sono gli animali più sterminati e maltrattati nel mondo: ma la loro sofferenza è ignorata, non è presa in considerazione. Nemmeno da Greenpeace.

Abbiamo il potere di definire il nostro impatto sul mondo...

... ma possiamo esercitarlo solo se abbiamo le informazioni corrette. Non culliamoci nella falsa certezza che qualcuno ci offra una soluzione per risparmiarci il fastidio di cambiare le nostre abitudini a tavola. Vinciamo la pigrizia e l'inerzia, e iniziamo a cambiare!

Non esistono gli allevamenti ecologici. Esiste solo la possibilità di diminuire i consumi di carne, pesce, latticini e uova. Solo questo può aiutare il nostro pianeta e al contempo la nostra salute.

Inizia subito, e ricorda che maggiore è la diminuzione, più leggera diventerà la nostra impronta: l'ottimo è arrivare a zero. Per camminare in punta di piedi.

Misura la diminuzione del tuo impatto calcolandolo su Mio Eco Menù, vedrai coi tuoi occhi la differenza: quanto risparmierai in termini di territorio, acqua, effetto serra.

fonte: https://www.agireora.org/ecologia/ecomenu-greepeace-critiche-3239.html

Pio lottare

Pio lottare

Poesia bambina,
semplice,
genuina,
nostra artefice,

accogli la spossatezza
d’ingiuste sofferenze,
bacia la bellezza
delle nostre valenze,

per dar vita nuova
ai nostri ardori,
così che ciel promuova
forza vera nei nostri cuori.

E’ sempre un lottare
che sa farsi felice
se nel pio guerreggiare
bontà non contraddice.

Grazie!

(Francesco Galgani, 1 dicembre 2019, www.galgani.it)

Sviluppare app mutipiattaforma - Le basi: l’algoritmo e il codice (prima parte)

> INDICE DEL CORSO
< Articolo precedente: Sviluppare app multipiattaforma - Un’introduzione

Argomenti:


Occorre sapere qualcosa sull’hardware?

Crossplatform developmentGeneralmente noi programmatori, salvo motivate eccezioni, nel nostro lavoro ci concentriamo esclusivamente sul software: ci sono validi e circostanziati motivi per occuparci dell’hardware se ad es. dobbiamo far uso di determinati sensori o se abbiamo bisogno di funzionalità che richiedono almeno un certo tipo di cpu o una certa quantità di memoria. Ad ogni modo, nel caso della programmazione multipiattaforma, ignorare le specificità hardware dei vari dispositivi è particolarmente sensato, in quanto il nostro obiettivo principale è proprio quello di scrivere codice che funzioni “possibilmente” ovunque, ovvero su hardware anche molto diversi. Storicamente molti sono stati e continuano ad essere gli sforzi in tal senso.

Tra l’altro, per completezza, ci sono situazioni in cui veramente non sappiamo e non possiamo sapere nulla dell’hardware: pensiamo allo sviluppo di una web-app. Essendo basata su HTML5 + Javascript, sostanzialmente girerà dentro un browser, che potrebbe essere quello di uno smartphone iPhone, Android, Windows Phone e altri, potrebbe essere quello di un computer portatile, potrebbe persino essere lo schermo di un televisore. Non ho mai usato uno smart watch, ma se esso incorpora un browser, allora la nostra web-app potrebbe funzionare anche dentro un orologio da polso. In questi casi non soltanto non ci interessa minimamente l’hardware sottostante, ma saremo presi da ben altri problemi, ad es. quali sono i browser su cui fare i test e le modalità con cui l’utente dovrà interagire con l’app.

Proprio in questo esempio, è evidente che un’app pensata per funzionare su schermi grandi seguirà logiche diverse da una pensata per funzionare sui piccoli schermi dei nostri smartphone; allo stesso modo, un’app pensata per essere usata con una tastiera reale sarà fatta in modo diverso da una pensata per essere usata con una tastiera virtuale, che a sua volta sarà diversa da una destinata ad essere usata con un telecomando.

In sintesi, ciò che in primis ci interessa dell’hardware è come l’utente potrà e dovrà interagire con la macchina, in modo da pensare fin dall’inizio a come dovrà essere l’interfaccia utente.


Macchine programmabili e algoritmi

Macchina programmabileGeneralmente ci si riferisce ai computer e alle loro varie declinazioni tecnologiche (smart-watch, smart-tv, smart-phone, smart-frullatore, smart-spazzolino, smart-..., ecc.) senza mai usare il termine che più propriamente identifica questi oggetti: macchine.

Più nello specifico, trattasi di macchine programmabili, inanimate, ovvero senza vita e prive di ogni forma di intelligenza o di altre caratteristiche umane (cognizione di sé, cognizione degli altri, empatia, sentimenti, ecc.), capaci di eseguire calcoli estremamente semplici dal punto di vista concettuale, e nulla di più. Tutto il resto, a cominciare da una vera forma di intelligenza, ce la mettono i programmatori.

Per dirla ancora più brutalmente, trattasi di macchine in cui segnali elettrici digitali vengono usati per rappresentare valori booleani (cioè “vero” o “falso”). L’algebra di Boole viene utilizzata per la costruzione di porte logiche (porte “and”, “or”, “not” e loro combinazioni), costruite all’interno di circuiti integrati basati su transistor.

Non mi dilungo oltre, l’importante è aver chiaro noi programmatori abbiamo a che fare con macchine programmabili: la distanza concettuale tra scrivere codice ad altissimo livello di astrazione, ovvero multipiattaforma, e i segnali elettrici che poi di fatto faranno funzionare il nostro codice, è così ampia che c’è il serio rischio di dimenticarci ciò con cui abbiamo a che fare. Specialmente in questo periodo storico, in cui c’è un’enorme enfasi sull’Internet delle Cose e sull’Intelligenza Artificiale, il rischio di esser fuorviati è enorme.

L’intelligenza è propria soltanto degli organismi viventi creati dalla natura: le nostre macchine, per quanto sofisticate, sono e rimangono macchine inanimate calcolanti, incapaci di intendere e di volere.

Algoritmo scherzosoDetto ciò, per rendere queste macchine capaci di “fare qualcosa” noi scriviamo algoritmi. Al di là delle varie definizioni formali di “algoritmo”, per le quali rimando alla relativa voce su Wikipedia, sostanzialmente un algoritmo è un’entità che fa qualcosa e, nella pratica quotidiana, questa entità non è altro che un pezzo di codice.

Concettualmente, un algoritmo è un elenco di istruzioni eseguibili da una macchina in un tempo finito per fare una determinata cosa. Comunque, lo stesso concetto si può estendere anche al di fuori dell'Informatica, ad es. una ricetta per cucinare è un algoritmo. Possiamo anche creare algoritmi scherzosi, come quello qui a lato rappresentanto tramite flowchart, che nello specifico è un algoritmo di decisione.

Per ulteriori riflessioni introduttive sul significato di algoritmo, rimando alle mie slides: “Cosa sono i linguaggi di programmazione”, che preparai nel lontano 2005 e che sono tuttora valide (gli esempi di codice a cui mi riferisco nell'ultima pagina sono a questo link):


download pdf


L’incertezza e l'arroganza dell’algoritmo: fa quello che vuole lui, quello che vogliamo noi o quello che capita?

Molteplici algoritmi tra loro interagenti, all’interno di una complessità algoritmica spaventosa e quasi inconcepibile per noi persone comuni, rendono utilizzabili le nostre macchine programmabili, ad es. i nostri smartphone.

Per avere un termine di paragone sul livello di complessità delle macchine al nostro servizio, prendiamo un recente e triste caso di cronaca: il 29 ottobre 2018, un aereo della ditta Boeing, nuovissimo, modello “737 MAX”, pochi minuti dopo il decollo da Giacarta, cadde. Morirono tutti (189 persone, più un’altra persona incaricata delle ricerche in mare). La causa fu un errore di programmazione del software di controllo dell’areo, nello specifico un errore di rilevazione della velocità (sto semplificando, in rete si trovano i dettagli di quel che accadde). Orbene, il software di controllo di tale aereo era composto da circa 14 milioni di righe di codice (fonte): un errore fatale purtroppo ci poteva anche stare in così tanto codice… soprattutto, per chi s'è letto i rapporti, se ai piloti, come in questo caso, era stata sottratta ogni possibilità di intervento manuale correttivo (il fatto che il computer del Boeing sia stato programmato per "prevalere sull'uomo" è spiegato in questo articolo). Questo è uno di quei casi in cui, in fase di progettazione, dare più credito alla pseudo-intelligenza senz'anima delle macchine che alla vera intelligenza umana ha comportato una strage. Sempre nel 2018, c'è stata un ulteriore strage aerea per lo stesso motivo. In tutti i casi in cui le decisioni umane vengono delegate a macchine si crea una situazione di stupidità umana da una parte e arroganza dell'algoritmo dall'altra. Ho avuto modo di esprimermi a proposito dell'arroganza dell'algoritmo anche nel caso dei social (link).

Nella normalità della mia vita quotidiana di programmatore, se riuscissi a scrivere cento righe senza fare neanche un errore mi complimenterei con me stesso… ma la realtà è tutt’altra: non mi capita quasi mai che quello che scrivo sia corretto e funzionante come desidero già dal primo tentativo; una tale eventualità può capitarmi per cose estremamente semplici che stanno in poche righe (e a volte neanche in quei casi).

La storia dell’informatica è piena di errori di programmazione che sono stati disastrosi e funerei, errori a volte così subdoli da sfuggire ai migliori programmatori al servizio della NASA o di grandi corporation, errori che hanno comportato danni economici ingenti e morte. In questa pagina c'è riportato il codice che, poco dopo un minuto dopo il lancio (era il 1996), ha fatto esplodere un mezzo spaziale per un bug che, tutto sommato, può capitare a qualunque programmatore (tecnicamente, volendo usare la terminologia di Java di cui ci occuperemo nei prossimi articoli, è stato fatto qualcosa di molto simile a un "casting" errato). Basta cercare in Rete per trovare tracce dei bug che hanno segnato la storia dell'Informatica. Un elenco di disastri della NASA per piccoli bug è a questo link. Nel 1983 abbiamo anche rischiato un olocausto nucleare esteso a tutto il pianeta per via di un bug... la notizia venne resa pubblica nel 1990.

Tornando a noi... qualcuno si è anche preso la briga di fare una stima di quanti errori di programmazioni vengano fatti mediamente. Steve McConnell, nel libro di Ingegneria del Software “Code Complete”, ormai storico (la prima edizione è degli anni '90), riportò una media a livello industriale di circa 15-50 errori ogni 1000 righe di codice e - nel caso specifico di Microsoft - conteggiò una media da 10 a 20 errori ogni 1000 righe di codice in prodotti “released”, cioè messi in commercio (fonte). Sebbene queste stime siano molto vecchie (quella di Microsoft si riferisce al 1992), il problema rimane attuale e, soprattutto, se ciò accade alle grandi aziende multinazionali con sviluppatori super-esperti (o presunti tali), figuriamoci a chi non è così esperto...

La complessità è abnorme: il browser Google Chrome è fatto da circa 7 milioni di righe di codice, il sistema operativo Android da 15 milioni, Facebook lato client (senza considerare il software lato server) da circa 60 milioni, il software di controllo delle recenti smart-car da 100 milioni, i servizi di Google, nel loro complesso, da 2 miliardi (fonti).

Per noi comuni mortali, programmatori “normali”, riuscire a scrivere mille righe di codice in un giorno già potrebbe essere una sfida quasi impossibile: concretamente, a volte può capitare di passare un’intera giornata a cercare di risolvere un problema che alla fine sta dietro ad una sola riga di codice, magari messa nel posto sbagliato. Anzi, questa è una stima che ho trovato su Coralogix, che ritengo molto verosimile e all'incirca applicabile anche a me:

  1. In media, uno sviluppatore crea 70 bug ogni 1000 linee di codice (o 7 ogni 100, ovvero circa 1 ogni 10).
  2. 15 bug ogni 1000 linee di codice finiscono nei prodotti destinati ai clienti (che spesso scoprono bug che noi programmatori non avevamo visto o, peggio, che non riusciamo neanche a "riprodurre" sulle nostre macchine, cioè a verificare, a far accedere e quindi a poter indagare).
  3. Trovare la causa di un bug prende 30 volte più tempo che scrivere una linea di codice (anzi, a volte può richiedere una o più giornate e comunque la causa del bug non viene scoperta...)
  4. Il 75% del tempo di sviluppo è speso nel debugging, cioè nella ricerca delle "cause" dei bug; da notare che trovare la causa dei bug è di solito un requisito per la loro risoluzione, ma non sempre ciò porta ad una immediata risoluzione, che può rivelarsi anche complessa.
  5. Solo negli Stati Uniti, 113 miliardi di dollari all'anno sono spesi per identificare e risolvere i bug.

Nel contesto di questa complessità, la programmazione è un’enorme sfida. A te che stai leggendo, se stai per incamminarti in questa avventura di programmatore, bella e tragica allo stesso tempo, vorrei dirti che se dedicherai ore e ore a poche righe di codice che non funzioneranno come tu vorrai, allora ti dirò: «Benvenuto in famiglia!» ;-)
Tieni a mente le stime che ho riportato soprattutto nei momenti di difficoltà: capirai che il problema non è solo tuo, anzi, incontrare problemi durante e dopo il coding (cioè la programmazione) è fisiologico.

Sia ben chiaro, inoltre, che gli errori non necessariamente dipendono dalla capacità di chi programma: magari il nostro programma è corretto, ma il codice sottostante che lo farà girare non lo è. Intendo dire che gli errori non sono necessariamente nei programmi che scriviamo, ma possono essere anche nelle piattaforme e linguaggi di sviluppo che utilizziamo. Come esempio, posso riportare questo bug da me segnalato, in cui dimostrai che una banale concatenazione tra stringhe causava un errore su iPhone non dipendente dal mio codice. Negli ultimi anni, ho scoperto e segnalato vari bug della piattaforma di sviluppo da me usata (qui l'elenco), per fortuna quasi tutti prontamente corretti.

Concludo queste riflessioni sui bug con le parole che Edison scrisse nel 1870 (fonte):

«È stato così per tutte le mie invenzioni. Il primo passo è un'intuizione, e viene come una fiammata, poi le difficoltà crescono... le cose non vanno più ed è allora che i "bachi" – così sono chiamati questi piccoli sbagli e difficoltà – si manifestano, e servono mesi di intensa osservazione, studio e lavoro prima che il successo commerciale oppure il fallimento sia sicuramente raggiunto.»


L’algoritmo agnostico

Mentre in italiano il termine “agnostico” ha un precisa accezione filosofica, nell’inglese tecnico-informatico l’aggettivo “-agnostic” è usato come suffisso in varie parole composte con il significato di “non conoscente, indipendente da, non legato in maniera specifica a, compatibile a prescindere dalla caratteristiche specifiche”, ecc. (ad es.: “device-agnostic”). Significati, questi, che in effetti si ricollegano all’agnosticismo, che parte dal presupposto di “non sapere” e di non “avere la possibilità di sapere”.

Un algoritmo, pur traducendosi in linee di codice, di per sé è un concetto astratto, simile al concetto matematico di “funzione”: dato un input, restituisce un output, in base ad una qualche logica specificata all’interno dell’algoritmo stesso. Se siamo a noi a scrivere, cioè creare, un algoritmo, allora ci interessano i dettagli implementativi (cioè la logica interna), ma se usiamo algoritmi scritti da altri, ci basta sapere a grandi linee “cosa fanno”, a prescindere dai dettagli. Soprattutto quando usiamo algoritmi scritti da altri, di solito li trattiamo come “scatole nere”: sappiamo in maniera astratta cosa fanno, ma non sappiamo concretamente “come” (e di solito neanche ci interessa saperlo).

Nella programmazione ad alto livello di astrazione, multi-piattaforma, gli algoritmi che useremo per programmare con Java + Codename One saranno come minimo:

  • device-agnostic, cioè indipendenti dai dispositivi su cui tali algoritmi saranno eseguiti (e quindi indipendenti dall’hardware);
  • IDE-agnostic, cioè indipendenti dall’ambiente di sviluppo (IDE significa “ambiente di sviluppo integrato”): Codename One consente infatti di utilizzate ambienti diversi, a nostra preferenza.

In più, ogni algoritmo sarà “language-agnostic” rispetto agli altri algoritmi: non soltanto gli altri algoritmi, pur interfacciandosi tra di loro tramite Java, potranno effettivamente essere implementati in altri linguaggi, ma la comunicazione tra app e server backend sarà indipendente dai rispettivi linguaggi di programmazione.

Provo a spiegare meglio quest’ultimo punto: ogni algoritmo potrà richiamare altri algoritmi per far fare loro certe cose, indipendentemente dal linguaggio effettivo in cui questi saranno implementati (ad es. un pezzo di codice scritto in Java potrà richiamare un altro pezzo di codice scritto in Objective-C, qualora fosse necessario): questo è possibile grazie alle cosiddette “interfacce native” di Codename One, su cui per il momento non mi dilungo. In ogni caso, anche rimanendo all’interno dello stesso linguaggio, cioè Java, ogni algoritmo “conosce” la sua implementazione, ma non quella degli altri algoritmi con cui interagisce. Per quanto riguarda la comunicazione client-server, dove l’app per smartphone è il client e il server è il “backend”, cioè ciò che sta dietro le quinte, ciò che l’utente non vede, tale comunicazione normalmente avviene tramite chiamate “REST” che astraggono completamente i rispettivi linguaggi di programmazione utilizzati. Le chiamate REST non sono altro che richieste con protocollo HTTP, come quando si apre una pagina web: il nostro browser non sa nulla del linguaggio di programmazione usato sul server (ad es. PHP o Java), né del linguaggio che il server usa con il suo database (ad es. Sql), eppure la comunicazione funziona perché gli algoritmi che gestiscono le comunicazioni sono indipendenti dai linguaggi di programmazione del client e del server.

Concludo così questa introduzione sugli algoritmi. Prossimamente preparerò un articolo per mostrare come scrivere i primi algoritmi in Java.

Francesco Galgani,
29 novembre 2019

Pages

Subscribe to Informatica Libera - Francesco Galgani's Blog RSS