Buy me a coffeeBuy me a coffee

Una carezza può salvare la vita, la tecnomediazione no

Ultimo aggiornamento: 18 Maggio 2019

Abbiamo letto una notizia che ci ha toccato il cuore:
«Sedicenne si uccide dopo sondaggio su Instagram - La maggioranza dei follower le ha consigliato di farlo»

La notizia, di per sé, fa rabbrividire. Ma ancora di più fa rabbrividire il livello di persuasione e pervasività raggiunto da questi social media. «[…] Oggi i comportamenti dell’essere umano sono condizionati dalla tecnologia della “iperconnessione” (tutto e tutti connessi in Rete sempre), che è sia persuasiva, cioè in grado di influenzare, se non addirittura determinare, idee e comportamenti, sia pervasiva, nel senso che tende a diffondersi in modo penetrante, così da prevalere e dominare nelle vite individuali, nelle relazioni sociali, nel lavoro, nell’economia e nella politica […]» (tratto da “L'Era della Persuasione Tecnologica ed Educazione all'Uso della Tecnologia”).

Quando si tratta di vita e di morte, l'intermediazione digitale può fare solo danni. Più in generale, comunicare online nella situazione attuale è solo dannoso, se nessuno più ascolta l'altro. E per ascoltare l'altro ci vuole affetto. E l'affettività non nasce da una migliore tecnologia. In un rapporto a tu per tu, certe dinamiche distruttive, aggressive e violente difficilmente accadrebbero con la stessa facilità con cui accadono nei mondi virtuali, falsamente percepiti come reali.

Forse una carezza avrebbe salvato la vita alla sedicenne. E questo gesto di affetto reale non è nelle possibilità della tecnologia. «[…] quel “nutrimento affettivo” di cui ha un gran bisogno l’essere umano non può essere mediato da alcuna tecnologia (computer, telefono o altro) […] La vita è imprevedibile, incerta, complessa, la tecnologia si propone di semplificarla, ma in tale semplificazione può portar via quanto di più umano ci sia; maggiore è l’allontanamento dalla natura, maggiore sarà la devitalizzazione dell’essere umano. La tecnologia “ruba” energia, tempo, possibilità alle relazioni umane. […]» (tratto da Solitudine e Contesti Virtuali).

La tecnologia di fronte alla sacralità della vita è impotente oppure dannosa. Il mistero della vita non può essere svelato dalla tecnologia.

La vita, nonostante tutte le sue fragilità, deve prevalere sulle illusioni tecnologiche. Confondere la vita tra il reale e il virtuale non porta ad una vita migliore.

La vita è la vita. Il mistero della vita va accettato e rispettato così come è.

La meraviglia della vita che ci è stata data deve permanere nella propria condizione esistenziale, qualunque essa sia.

«Ah, straziante meravigliosa bellezza del creato» (Pasolini)

Giulio Ripa e Francesco Galgani,
18 maggio 2019

Insieme adesso

Ultimo aggiornamento: 11 Maggio 2019

Giudicar la differenza
è non saper Amare,
come insegna la scuola
e ogni telegiornale.

Deridere il diverso
è bestemmia alla vita,
è negar possibilità,
penosamente sfuggita,

di ripulire il Cuore
dalle tristi passioni,
per gioire insieme
di nuove occasioni

nel crear qualcosa
che ancora non sappiamo,
scoprendo cose nuove
che neppure sogniamo!

Ma altro è il sentire
in cui è facile cadere,
coi signori della guerra
ovunque al potere:

divisi ci vogliono,
nell’Ego arroccati,
riverenti Narciso,
e come lui annegati...

Di schiavi e padroni
questa è l’economia,
che funziona ancor meglio
nella falsa ipocrisia

che preferisce l’austerità
a un po’ di solidarietà,
cantando menzogne
che distruggon la società.

Nell’abisso dei desideri
cade il nuovo liberista,
“mors tua vita mea”,
complotta il nazionalista:

questo germe infettivo
sempre respiriamo,
è la pandemia
di questo mondo insano,

creato sul racconto,
falso ma creduto,
che sommando gli egoismi
il benessere è benvenuto.

No Fratello,
non mi faccio ingannare,
tu hai più valore
di tutto ‘sto ciarpame!

Uomini illuminati,
che la deriva han capito,
scrissero il Testo
a cui il mio Cuor s’è unito:

mamma Costituzione,
nostra guida e alleata,
sei sacra in ogni parola
così come sei nata.

Fratello mio,
sommiamo i talenti,
così che diversità
siano arricchenti:

insieme possiam crescere,
sviluppandoci umanamente,
forti di coraggio,
felici pienamente.

Grazie!

(Francesco Galgani, 28 febbraio 2019)

Un degno rappresentante...

Ultimo aggiornamento: 9 Maggio 2019

Un degno rappresentante di chi veramente Ama la vita e sue Creature. Grazie!

fonte: https://www.youtube.com/watch?v=0gwOzzGibsg

DOWNLOAD MP4

Fortuna o sfortuna... vedremo!

Ultimo aggiornamento: 9 Maggio 2019

Fortuna o sfortuna... vedremo!

Cerchiamo di relazionarci con gli aspetti positivi di noi stessi e degli altri.

Fonte del video seguente: https://www.youtube.com/watch?v=uK8i89rii7M
curato da: https://ngalso.org/it/

Nel video, dopo un breve canto di alcuni minuti, Michel Rinpoche (maestro buddista) espone le sue riflessioni e i suoi consigli sul tema della lamentela, della critica e del giudizio. Al termine, conclude con mezz'ora di meditazione guidata.

DOWNLOAD MP4

Codename One: eccellente per sviluppo mobile multi-piattaforma (Android, iPhone, Web-App, ecc.)

Ultimo aggiornamento: 9 Maggio 2019

In un mio precedente articolo dedicato a "Linee guida di base per la gestione della complessità in un progetto software", ho citato Codename One come un'eccellente scelta lato client per la massima compatibilità multi-piattaforma nello sviluppo di applicazioni mobili.

Per tanti motivi tecnici ed umani, considero Codename One come il migliore strumento per sviluppare per Android, per iPhone (e quindi iOS), per applicazioni web (web-app basate su javascript). Ciò non toglie che lo stesso identico codice scritto in Java con Codename One funzioni anche su altre piattaforme su cui non ho esperienza diretta (ad es. Windows Phone, applicazioni desktop per Windows e per MacOs, ecc.).

Per sviluppare con Codename One esiste un'ampia documentazione sul sito di riferimento, oltre a corsi veri propri nella Codename One Academy, che partono dalle basi sino ad arrivare allo sviluppo di applicazioni complete (lato client e lato server) tipo Facebook, Uber, Whatsapp, ecc. Tutti i corsi in questione, comunque, presumono una conoscenza di base di Java e un minimo di cognizione di come si struttura un progetto software: nulla di eccezionale, ma un po' di basi sono necessarie.

Uno di questi corsi è disponibile anche come e-book e come libro cartaceo, sul sito: https://uber.cn1.co/, in cui potete leggere anche un mio feedback nella sezione in basso "Testimonials".

Stando così le cose, mi pare superfluo aggiungere spiegazioni tecniche su qualcosa che è già abbondantemente documentato sicuramente meglio di quanto io possa fare. Ciò non toglie che in futuro, tempo permettendo, io possa realizzare dei corsi per lo sviluppo di applicazioni mobili per chi proprio parte da zero: in passato, nell'arco degli anni, ho fatto varie docenze in ambito informatico e sono state tutte esperienze positive e soddisfacenti, soprattutto in occasione dei LinuxDay.

Il motivo per cui sto scrivendo questo articolo è che Codename One, paradossalmente, nonostante le eccellenti opportunità che semplificano la vita a noi sviluppatori, offrendo una piattaforma di sviluppo molto leggera, integrata con un plugin negli IDE più comuni (Netbeans, Eclipse, IntelliJ Idea), con un tempo di sviluppo e di apprendimento significativamente inferiore rispetto a quei mattoni come Android Studio o XCode, è relativamente poco conosciuto. Il mio invito è: "Usatelo e spargete la voce!".

Dal mio punto di vista, le persone che hanno creato Codename One e che continuano a svilupparlo attivamente sono geniali e molto disponibili. In tanti anni di informatica, in cui mi sono dovuto confrontare con il supporto tecnico di varie aziende piccole e grandi (da piccole software house sino a giganti come Apple e Google, da piccoli servizi di hosting sino a grandi server farm, da piccole realtà locali sino ad aziende internazionali), non ho mai incontrato così tanta attenzione, competenza, velocità di risposta, tempestiva correzione di bugs da me segnalati (spesso il giorno stesso, specialmente quando sono riuscito a segnalarli con "test case" molto precisi) e aggiunta di nuove funzionalità da me richieste (anche obiettivamente complesse) come con Codename One. Da questo punto di vista, la qualità del supporto tecnico di Codename One è superiore ad ogni altra che io abbia sperimentato e di gran lunga migliore di ogni mia ragionevole aspettativa basata sulle mie precedenti esperienze. I principali canali di comunicazione con il supporto tecnico di Codename One sono StackOverflow (per dubbi su come scrivere il codice) e GitHub (per segnalare bug della piattaforma o per RFE, che significa "request for enhancement", cioè richieste di miglioramenti o aggiunte di funzionalità).

Il codice sorgente delle API di Codename One è open-source (licenza GPL v.2), il che costituisce un grosso vantaggio in fase di sviluppo: spesso vado a curiosare nei sorgenti per meglio rendermi conto di come il mio codice andrà a interagire con quello di Codename One. Non solo: lo sviluppo è aperto a chiunque abbia voglia e competenza per contribuire. Io stesso ho inviato alcune PR (pull request) per aggiungere alcuni importanti funzionalità (come segnalato nelle pagine qui elencate), cioè codice scritto da me che è stato prontamente analizzato e discusso prima di essere integrato in Codename One. E' possibile contribuire anche pubblicando estensioni per Codename One: se guardate nella lista, ne troverete anche una scritta da me. Le estensioni, diversamente dalle API ufficiali, non sono direttamente supportate dal team di Codename One (salvo alcune) e non necessariamente sono funzionanti con tutte le piattaforme ufficialmente supportate da Codename One, ma spesso con un sottoinsieme di esse.

In sintesi, i soldi investiti su Codename One sono soldi investiti bene. Il costo di questo tipo di piattaforma è variabile, si va da account gratuiti sino ad account enterprise: dipende dal tipo di esigenze.

Un mio speciale ringraziamento va a Shai Almog e Steve Hannah per l'eccellente supporto finora ricevuto.

Francesco Galgani,
9 maggio 2019

Una dieta 100% vegatale (vegan) riduce il rischio di malattie croniche

Ultimo aggiornamento: 3 Maggio 2019

Fonte: Newsletter della Società Scientifica di Nutrizione Vegetariana del 3 maggio 2019

Le persone che seguono una dieta vegan hanno un rischio minore di sviluppare malattie croniche, rispetto a chi segue altri tipi di dieta: è questo il risultato di uno studio effettuato dal National Cancer Institute statunitense e pubblicato pochi mesi fa sulla rivista scientifica "The Journal of Nutrition".

I ricercatori hanno analizzato la dieta di persone che seguivano un'alimentazione vegana, latto-ovo-vegetariana, onnivora con basso consumo di carne e pesce, onnivora senza consumo di carne ma con consumo di pesce, e onnivora standard.

Il gruppo vegan è risultato avere il rischio minore per: cancro, malattie cardio vascolari, ipertensione. Questo stesso gruppo era quello con i livelli più elevati di acidi grassi essenziali omega-3 e di antiossidanti come carotenoidi e isoflavoni, associati a minore infiammazione. Era il gruppo con il consumo più elevato di frutta, verdura, cereali integrali e legumi, il maggior consumo di fibra e di beta-carotene e il consumo minore di grassi saturi.

Quello vegan era l'unico gruppo tra quelli esaminati ad avere un peso corporeo nel range corretto, mentre tutti gli altri erano sovrappeso, in media.

Tutto questo è un'ulteriore conferma della validità della dieta 100% vegetale come strumento di prevenzione per le malattie degenerative.

L'articolo originale è:
Miles FL, Lloren JIC, Haddad E, et al. Plasma, urine, and adipose tissue biomarkers of dietary intake differ between vegetarian and non-vegetarian diet groups in the Adventist Health Study-2., J Nutr. Published online February 15, 2019.

Ingegneria del Software: gestione della complessità

Ultimo aggiornamento: 1 Maggio 2019

Quanto segue deriva dalla mia esperienza nell'Ingegneria del Software per applicazioni mobili e dai miei tanti errori e correzioni di rotta...

Linee guida di base per la gestione della complessità in un progetto software

  1. Rapportati continuamente con gli stakeholder e con altri sviluppatori, prendi l'abitudine di usare in maniera proficua piattaforme di mutuo aiuto tra sviluppatori come StackOverflow e Github, costruisci rapporti umani di fiducia, cerca di far parte di un team in cui il tuo lavoro è apprezzato e valorizzato (cioè retribuito) e stai lontano da ambienti dove le relazioni umane invece di essere costruttive sono distruttive.
  2. Chiarisci il problema da affrontare, poi pensalo ad oggetti, lavoralo ad oggetti, struttura tutto ad oggetti. Scegli un linguaggio che ti direzioni correttamente e ordinatamente a lavorare ad oggetti (Java).
  3. Fa che i tuoi strumenti di lavoro riducano al minimo il tuo sforzo e che ti regalino la massima compatibilità multi-piafforma: un'eccellente scelta lato client è l'approccio "write once run anywhere" di Codename One, un'ottima scelta lato server è l'approccio "production-ready" di Spring Boot.
  4. Il codice deve essere organizzato secondo un approccio top-down, nella maniera più intuitiva possibile: parti da una visione globale del problema, struttura il codice in livelli diversi, in modo che ogni funzionalità complessa sia alla fine ridotta ad una sola riga di codice (o quasi), la cui implementazione sia la più generica possibile (finché ha senso generalizzare in base al contesto e finché è verosimile che sia utile). Seguire un approccio top-down significa anche fare in modo che i problemi implementativi siano il meno possibile bloccanti rispetto al progetto complessivo.
  5. Suddividi il lavoro in task programmabili: un approccio top-down rende realistica la creazione di una serie di compiti che possono essere programmati senza conoscerne ancora l’effettiva implementazione, permettendoti di avanzare con maggior sicurezza e senza perdere l’orientamento anche quando le cose da tenere a mente (ovvero le questioni aperte su cui stai lavorando) sono tante.
  6. Prima di scrivere il codice, valuta varie alternative, magari facendo grafici, disegni o procedure anche su carta, e scegli l’algoritmo meno incasinato e più vicino alla logica di funzionamento del tuo ambiente di sviluppo (ad es., il più vicino possibile alla logica delle API di Codename One).
  7. Tra le varie alternative di algoritmi, parti sempre dalla soluzione che ti pare più semplice e che “approssima” sufficientemente il problema, creando un apposito test case: l’aggiunta di dettagli o di perfezionamenti dovrebbe essere indipendente dal progetto complessivo, in modo da isolare le singole funzionalità, e dovrebbe avvenire solo quando il codice più semplice è sufficientemente collaudato.
  8. Ogni parte del codice deve essere autoesplicativa, si deve capire velocemente cosa fa: ne segue che non ci devono essere casini, cioè ogni codice che può apparire criptico va evitato, oppure, in casi particolari che proprio richiedono un codice non intuitivo, questo va isolato e adeguatamente documentato. Anche la scelta dei nomi dei package, dei nomi delle classi e della collocazione delle classi all'interno dei package dovrebbe essere autoesplicativa.
  9. L’aggiunta o la modifica di funzionalità dovrebbe essere agevole: ciò è una naturale conseguenza dei punti precedenti se applicati correttamente. Più è grande il progetto, infatti, e maggiore è il bisogno di rendere il codice manutenibile e comprensibile anche a distanza di tempo. Evitare grossi blocchi di codice, isolare i problemi e ridurre la ridondanza sono d'aiuto.
  10. In progetti complessi, i dettagli implementativi potrebbero essere inseriti in un apposito package diverso dal resto del progetto (una sorta di package che contiene solo utilities).
  11. L'esecuzione di test e lo sviluppo vanno di pari passo: fai i test di ogni pezzo di implementazione sia nel simulatore (di Codename One) sia sui target previsti dal tuo progetto (ad es. Android, iPhone, Web-App, ecc.). Soprattutto quando sviluppi multi-piattaforma, non dare per scontato che le cose funzionino sempre come previsto: per ogni modifica o aggiunta su cui hai dubbi, è sempre meglio fare verifiche su target diversi.
  12. Fai release frequenti del tuo lavoro e sottoponile agli stakeholder: ciò serve sia da testing, sia da costante verifica del corretto perseguimento degli obiettivi del progetto.
  13. Ogni volta che si verifica un imprevisto o un'anomalia non chiara, è meglio isolare il problema in un test case sufficiente a riprodurlo, usando il minimo strettamente indispensabile di righe di codice: ciò è molto utile anche per chiedere aiuto ad altri sviluppatori (anzi, di solito è l'unico modo proficuo per poter chiedere aiuto). Repetita iuvant: se qualcosa non va, ma il codice è corretto o ti sembra tale, isola il problema e chiedi ad altri sviluppatori, piuttosto che tentare di raggirare il problema inserendo ulteriore codice.
  14. Quando capitano cose che ti appaiono impossibili o insensate, è il momento di fare una pausa. Soprattutto quando sei assolutamente certo che il tuo codice deve fare una cosa e invece ne fa un'altra... spegni il computer e vai a fare altro.
  15. Quando per risolvere un problema semplice il tuo codice si fa via via sempre più complesso e ti sembra di aver perso il controllo di ciò che fa o di come interagisce con il resto dell'app, allora... calmati, accetta l'ipotesi che forse hai speso ore e ore nella direzione sbagliata e, a mente serena e riposata, affronta di nuovo il problema da capo.
  16. Usa un ambiente di sviluppo (IDE) che ti agevoli nel conservare copie del tuo lavoro risalenti a momenti diversi e che, ogni volta che sarà opportuno, ti permetta di annullare le modifiche per tornare a uno snapshot precendetemente salvato: una soluzione valida può essere Netbeans all'interno di un ambiente virtualizzato (ad es. con VirtualBox). Questo approccio dà grande libertà di sperimentare senza paura di far danni o di perdere il lavoro fatto.

Francesco Galgani,
1 maggio 2019

How to install Oracle Java8 JDK 8u211 / 8u212 or later on Debian / Ubuntu / Linux Mint from deb

Ultimo aggiornamento: 30 Aprile 2019

At the moment, there is no working PPA to automatically download and install Oracle Java8 JDK 8u211 or 8u212 or later on Debian / Ubuntu / Linux Mint, because it's strictly necessary to manually download the jdk-8u211-linux-x64.tar.gz or jdk-8u212-linux-x64.tar.gz file from the Oracle site, after logging in:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

You can transform the jdk-8u212-linux-x64.tar.gz in oracle-java8-jdk_8u212_amd64.deb using make-jpkg provided by java-package.

So, remove any other Java version previously installed from the discontinued Java8 PPA (sudo apt-get remove oracle-java8-installer) then:

  1. sudo apt-get install java-package
  2. make-jpkg jdk-8u212-linux-x64.tar.gz
  3. sudo dpkg -i oracle-java8-jdk_8u212_amd64.deb (or any graphical installer opened by a double click on the deb, like gdebi-gtk)

That's all! :-)

Java 8 installation on Debian / Ubuntu / Linux Mint

Java 8 installation on Debian / Ubuntu / Linux Mint

Francesco Galgani,
30 April 2019

Crimine dell'industria del latte e delle uova

Ultimo aggiornamento: 28 Aprile 2019

fonte per scaricare PDF o acquistare volantini cartacei:
https://www.agireoraedizioni.org/opuscoli-volantini/vegan/volantino-latte-uova/

Per una visione di come vengono trattati gli animali, rimando al film documentario DOMINION, che denuncia la violenza sugli animali di ogni specie. Racconta in modo estremamente toccante gli orrori dello sfruttamento animale in ogni settore, ma soprattutto in quello degli allevamenti per l'alimentazione umana.

Crimine dell'industria del latte e delle uova

La Legge della Relatività dei Punti di Vista

Ultimo aggiornamento: 24 Aprile 2019

Una delle leggi della Fisica è che non è possibile superare la velocità della luce. La prendo per vera, ci hanno già pensato altri a dimostrarla. Piuttosto… stavo pensando una cosa…

La velocità, in senso assoluto, non esiste, nel senso che è sempre relativa a qualcos’altro. Ad es., un passeggero seduto all’interno di un treno in movimento a che velocità si sta muovendo? Beh, ovviamente dipende dal punto di vista: rispetto al suolo sotto il vagone, la sua velocità è uguale a quella del treno, mentre rispetto al vagone la sua velocità è zero (perché ho ipotizzato che è seduto). Fin qui nulla di straordinario…

A ben vedere, però, si potrebbe obiettare che sia normale prendere come punto di riferimento per la velocità qualcosa di “fermo”. Peccato, però, che nell’universo non ci sia nulla di fermo, o meglio, qualcosa può essere considerato fermo (cioè a velocità zero) solo se si sta muovendo nella stessa direzione e verso di ciò che prendiamo come punto di riferimento. Come nell’esempio precedente, il passeggero è fermo solo nel senso che si sta muovendo nella stessa direzione e verso del treno. Al tempo stesso, il suolo è fermo? Direi proprio di no, tutti sanno che la Terra si muove sia su se stessa, sia intorno al Sole. Il Sole è fermo? No, si muove insieme a tutta la galassia. E così via… qualunque punto di riferimento non è fermo in senso assoluto, quindi qualunque cosa può essere legittimamente presa come punto di riferimento per il calcolo di una velocità. Anche fin qui, nulla di straordinario…

Continuando questo ragionamento, prendiamo come punto di riferimento per il calcolo della velocità di me stesso, mentre scrivo al computer queste riflessioni, un fotone che si sta muovendo dal Sole verso la Terra. Qual’è la mia velocità rispetto al fotone?

Semplice: il fotone, essendo il nostro punto di riferimento, è fermo (rispetto agli altri fotoni che si stanno muovendo insieme a lui nella stessa direzione e verso), mentre io mi sto muovendo alla velocità della luce “verso di lui”. Chiaro? Se poi, invece di starmene seduto al computer, salgo su un ascensore e comincio a salire andando incontro al fotone, la mia velocità, che prima era pari a quella della luce, la supera, seppur di poco. Ovvio, no?

Questa è la Legge della Relatività dei Punti di Vista, con la quale ho superato (di poco) la velocità della luce.

Potrei concludere qui… e invece preferisco concludere con un altro esempio per chi desiderasse superare di molto la velocità della luce. Basta prendere due puntatori laser direzionati lungo la stessa linea, ma con verso opposto: prendendo come punto di riferimento uno qualsiasi dei fotoni del primo laser, i fotoni del secondo laser si muoveranno al doppio della velocità della luce rispetto ad esso (in questo caso, il segno della velocità sarà positivo se i due laser puntano l’uno verso l’altro, negativo altrimenti).

E se volessi ottenere una velocità pari al triplo di quella della luce? Lascio questo esercizio ai miei lettori dotati di fantasia. Quel che spero di essere riuscito a comunicare è che i nostri punti di vista possono essere molto illusori perché tremendamente agganciati a ciò che conosciamo: cambiando punto di vista, anche ciò che sembra impossibile può essere superato. E questo, ovviamente, non vale solo per la velocità della luce.

A proposito di velocità della luce, il ragionamento fin qui esposto contiene una contraddizione tra la tesi iniziale (l'impossibilità di superare la velocità della luce) e la sua conclusione (velocità della luce superata). Ne segue che una parte di questo ragionamento è sbagliata (o che è sbagliata l'ipotesi iniziale), proprio perché "agganciata a ciò che conosco". I nostri ragionamenti possono essere molto fallaci se si basano su conoscenze, deduzioni o ipotesi che a loro volta sono incompleti, inesatti o falsi. Non solo: da un punto di vista strettamente logico, da una ipotesi falsa si può arrivare a qualsiasi conclusione, ovvero è possibile dimostrare tutto ciò che vogliamo, anche in contrasto con la realtà, se ci basiamo su ipotesi che non sono corrette nel senso di aderenti alla realtà. Qui però si aprirebbe un altro discorso su cosa è reale e cosa no, e sul fatto che non è reale ciò che è reale ma ciò che noi riteniamo tale... ma ora davvero mi fermo qui.

Buone riflessioni,
Francesco Galgani,
23 aprile 2019

Pagine

Abbonamento a Informatica Libera - Blog di Francesco Galgani RSS