«[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ì 31 dicembre 2018

Bel riscontro!

Una mia lettrice e amica, probabilmente mossa a compassione dalle mie amare considerazioni di fine anno espresse in Buoni propositi e auguri per il 2019, mi ha mandato una bella epistole ricca di pareri su cosa le piace del mio ghiribizzo, cose le piacerebbe vedere di più e perché mi commenta poco o, almeno, meno di quanto potrebbe.

In effetti la cosa più logica da fare sarebbe quella di chiederle il permesso di ripubblicare qui direttamente il suo messaggio ma, in verità, non ci penso neppure a farlo: la sua epistola mi ha fatto un enorme piacere e per questo ne sono un po’ geloso e non mi va di condividerla col mondo…

Mi limiterò quindi a riassumerne gli aspetti principali:
1. mi ha spiegato che viene spesso a controllare questo ghiribizzo: scopre l’argomento dell’eventuale nuovo pezzo e rapidamente decide se leggerlo o meno.
2. mi ha infatti spiegato che molti argomenti non le interessano proprio e, quindi, li evita senza pensarci due volte.
3. fra i pezzi che attualmente segue con più interesse ci sono quelli sulle reti neurali (chi l’avrebbe detto!) e si è infatti “allarmata” che io non abbia inserito lo studio di tale materia nella lista dei miei buoni propositi per il 2019 (*1).
4. ha così espresso la speranza che continui a scrivere nuovi pezzi sulle reti neurali e la loro “strana” IA.
5. mi ha poi spiegato che spesso sentirebbe l’impulso di lasciare un commento ma ne è dissuasa dalle impostazioni di sicurezza di Blogger (deve essere tutto approvato da me per apparire) e, per questo, dal fatto di non aver immediato riscontro su quanto scritto.

Che c’è di bello in questi commenti? Beh, la forma (erano scritti molto bene con dovizia di esempi e particolari: un’epistola che sicuramente le ha richiesto molto tempo che, in effetti, non sono sicuro di meritare ma che, anche per questo, apprezzo) e poi quello che sottintende, ovvero una sincera attenzione ai miei sentimenti che pochissimi mi dedicano.

Nel complesso le sue osservazioni non mi stupiscono: sono infatti consistenti con dei miei sondaggi fra amici lettori che conosco. Supponendo che io scriva su dieci argomenti diversi, il mio lettore comune sarà interessato mediamente a solo due (massimo tre) di questi.
La cosa interessante è che ciò che i diversi lettori trovano interessante è estremamente variabile: c’è chi apprezzava i miei pezzi sulla chitarra, chi quelli di storia, chi i racconti, chi le mie “pillole” e le “facezie”…
Personalmente mi ero già reso conto di questa caratteristica dei miei lettori quando feci un altro sondaggio molto più accurato su quali fossero le battute migliori di un pezzo/raccolta che avevo scritto: dalle risposte ricevute mi accorsi che che la sensibilità per il comico era estremamente variegata. Non mi stupisco quindi assolutamente se i miei prezzi vengono valutati così diversamente in base al loro argomento: tutte le persone hanno gusti diversi!

Pur consapevole di questa debolezza strutturale del mio ghiribizzo (ovvero l’essere tremendamente dispersivo e non focalizzato su un solo argomento specifico) rimango dell’idea che i commenti che ricevo siano comunque un po’ pochini.

Già i commenti…
Inizialmente tolsi la possibilità di commentare liberamente quando scoprii che per la “giustizia” italiana il titolare di un sito è ritenuto responsabile dei commenti che appaiono su di esso: in altre parole se uno sconosciuto/squilibrato scrivesse un’invettiva ricca di coloriti epiteti contro, ad esempio, la tollerante Boldrini ecco allora che le truppe cammellate della polizia postale se la rifarebbero col sottoscritto invece che con l’autore dello specifico commento…
Per questo motivo la maggior parte dei siti in cui si toccano argomenti seri o combattuti come quelli politici, e quindi attenti a pesare le proprie parole, sono costretti a fare come me.
Da almeno un anno poi il filtro antispazzatura di Blogger non funziona più: adesso ricevo quotidianamente in moderazione almeno una ventina di commenti, evidentemente automatici, che non hanno niente a che vedere con quanto scritto (*2). In altre parole se adesso rimuovessi la moderazione manuale mi ritroverei rapidamente subissato dalla spazzatura automatica.

Conclusione: che dire? Mi viene da pensare che la maggior parte dei miei lettori siano una versione estrema degli amici/conoscenti con cui ho parlato: probabilmente i 20/30 lettori “veri” che quotidianamente mi leggono sono interessati a una frazione ancor più piccola dei pezzi che scrivo (1 su 50 o su 100?) e questo li spinge a non ritornare e, sicuramente, a non perder tempo lasciando un commento…
Evidentemente dovrei trovare un’altra maniera per misurare l’interesse dei miei lettori che non sia basato sui commenti lasciati. Probabilmente dovrei riattivare le analisi di Google: ho infatti scoperto che tale strumento è coperto nella “striscia” automatica fornita da Blogger (*3)...

Nota (*1): State tranquilli! Il proseguimento dello studio delle reti neurali (e magari anche il completamento del corso di modellizzazione) è una delle varie cose che mi riprometto di compiere nel 2019. Finito questo pezzo andrò ad aggiornare la lista dei miei buoni propositi!
Nota (*2): anche se apprezzo i complimenti puramente casuali che vengono fatti ai miei pezzi!
Nota (*3): rileggendo mi sono accorto che quest’ultima frase non è assolutamente chiara! Mi riferivo alla legge (folle e totalmente inutile; grazie EU) che rende obbligatorio per ogni sito fornire agli utenti un incomprensibile avviso con i tecnicismi dei cookie usati. Io, per tagliare la testa al toro e non perdere tempo con queste assurdità, rimossi tutti i moduli aggiuntivi, compreso il povero ShinyStat oltre che l’analisi di Google (che avevo attivato da soli pochi giorni). Invece, come ho cercato maldestramente di spiegare, Google Analytics è coperto nell’ombrello fornito da Blogger col suo avviso automatico: quindi, in teoria, potrei rimetterlo senza temere problemi legali.

domenica 30 dicembre 2018

Sensi e fantasia

Qualche mese fa andai a farmi fare degli occhiali da usare con la chitarra in maniera da poter distinguere senza fatica le corde.
L’ottico fece un’osservazione che mi colpì. Disse qualcosa del tipo: “Con questi occhiali non ti verrà il mal di testa a sforzare gli occhi per leggere...”
La frase mi rimase impressa per due motivi: il primo è che, banalmente, non ho mai mal di testa; il secondo invece è più interessante: non capivo il collegamento fra lettura, mal di testa e lo sforzare gli occhi.

Mi spiego meglio: quando leggo (senza occhiali) vedo sfocato ma non vado a sforzare gli occhi: semplicemente leggo lo sfocato così com’è. Altre volte invece inizio a chiudere prima un occhio e poi l’altro, ad avvicinare e ad allontanare il testo in un tentativo casalingo di far fare ginnastica agli occhi: ma anche in questo caso non è uno sforzo ma un divertimento.

Quando piove e guido tendo a tenere spenti il più possibile i tergicristalli: la pioggia infatti, se proprio non è fortissima, non mi dà fastidio mentre il muoversi dei tergicristalli sì. Quando il parabrezza non è nitido a causa della pioggia non sforzo gli occhi per mettere a fuoco la strada ma semplicemente accetto i contorni sfocati delle cose per quel che sono.

Ecco, mi chiedo se questa mancanza di pressione sul basarsi sui sensi, e in particolare sulla vista, non abbia un’improbabile relazione con la fantasia.
Io credo di sì ma la mia è un’intuizione molto vaga: mi pare che il non interessarsi ai minimi dettagli ma solo alla sostanza delle cose possa essere uno stimolo a vedere oltre la prima impressione superficiale: a intuire cioè quello che vi è dietro, la vera essenza.

Curiosamente l’articolo citato nel pezzo Estroversi timidi e altro sembra confermare questa mia intuizione. Nella classificazione dei diversi tipi psicologici la seconda dicotomia riguarda la percezione e le persone vengono divise fra quelle che si basano sui “sensi” (S) oppure sull’“intuizione” (N).
Immagino che chi usi principalmente i sensi per percepire la propria realtà sia molto infastidito se non ha una visione perfetta: l’incertezza di un contorno si traduce direttamente in un’incertezza nella comprensione di ciò che circonda l’individuo.
Al contrario io sono un tipo “N” e, come ho più volte scritto, considero essere l’intuizione l’aspetto precipuo della mia intelligenza: forse proprio per questo sento meno il bisogno di una perfezione dei miei sensi…

Ah! e ora che ci penso qualcosa di analogo mi accade anche con l’udito: sono infatti vittima di acufeni molto forti e intensi. Decisamente fastidiosi in effetti visto che, ormai, li posso sentire continuamente anche quando c’è un discreto rumore “reale” di fondo. Eppure li ignoro senza troppi problemi, anche se certamente ne farei decisamente a meno. Ma ci convivo senza dolermene troppo.
Di nuovo credo che per un tipo psicologico “S” questi acufeni sarebbero un cruccio costante e ben maggiore.

E la fantasia? Beh, credo che essa sia spesso legata (almeno nel mio caso) all’intuizione. Vedo infatti la fantasia come la capacità di immaginare soluzioni o situazioni alternative all’evidenza quotidiana, ovvero come una forma di intuizione.

Conclusione: lo so è un’intuizione basata fra il nulla e il poco però erano diverse settimane che ci pensavo e finalmente mi sono ricordato di scriverne...

sabato 29 dicembre 2018

Buoni propositi e auguri per il 2019

In genere non faccio mai una lista di buoni propositi per l’anno nuovo: non è tanto un problema di volontà quanto di mentalità. Sono infatti particolarmente disorganizzato e quindi, conoscendomi, pianificare per un intero anno mi pare improponibile.
Però, tanto per cambiare, questa volta voglio almeno provarci.

1. Prima di tutto voglio riprendere a suonare la chitarra. È da qualche mese che l’ho abbandonata e mi secca perché mi sentivo prossimo a un sostanziale miglioramento. In questo intervallo di tempo non so quanta manualità abbia perso ma voglio comunque cercare di esercitarmi seriamente per un mese e poi rivalutare la situazione.
2. Finire tutta una discreta serie di libri che non ho terminato di leggere a partire dal Decameron. Ovviamente dopo aver terminato Al di là del bene e del male.
3. Cercare di fare un minimo di attività fisica con lo scopo di dimagrire.
4. Proseguire nell’evoluzione dell’Epitome. Questo non dovrebbe essere difficile perché mi diverto anche se, sempre più spesso, mi chiedo chi me lo faccia fare. A proposito sono alla revisione del capitolo 12 per la versione 1.1.1…
5. Disegnare almeno 4 nuove vignette per il ghiribizzo. In effetti anche questo compito dovrebbe essere divertente ma nella mia pigrizia, visto che odio disegnare, mi chiedo chi me lo faccia fare (*1).
6. Varie ed eventuali. Mi sembrava infatti di avere altre idee ma al momento mi sfuggono. Se mi verranno in mente le aggiungerò qui di seguito…
Modificato 2/1/2019: mi ero dimenticato lo studio delle reti neurali! Oltretutto ancora non mi è chiaro come ma vedrò di integrarlo in qualche modo (magari tramite qualche simulazione) con la mia Epitome...

Conclusione: ecco un pezzo che, sebbene non interessante, ha almeno il merito di essere breve!
Ne approfitto infine per fare gli auguri a tutti i miei ipotetici lettori nell’eventualità che nei prossimi due giorni non abbia voglia/tempo di scrivere un altro pezzo...

Nota (*1): Alla fine infatti chi me lo fa fare è io e solo io, me medesimo cioè, e quindi un’attività ha senso solo se mi piace realmente farla. Il pensare che sia uno sforzo apprezzato dai lettori mi pare ormai un’illusione poco credibile: non è che piagnucolo o che cerchi commiserazione ma si tratta di una constatazione derivata dalla valutazione dell’interesse mostrato dai miei lettori attraverso il numero di commenti ricevuti ogni anno. Sette commenti in tutto il 2018 sono proprio pochi. In altre parole i miei pezzi sono dei monologhi inascoltati che pronuncio allo specchio: non vengono letti né, nel caso, compresi. Mi consolano solo i seguenti aforismi:
«Chi scrive per il suo tempo, disperi di sopravvivergli.» - Gesualdo Bufalino

«I buoni scrittori [e i bloggatori!] hanno in comune due cose: preferiscono l'esser capiti all'essere ammirati; e non scrivono per i lettori aguzzi e troppo sottili» (Friedrich Nietzsche)

«Il successo non prova nulla circa la qualità d'un'opera [o di un ghiribizzo!]» (Alessandro Morandotti)

e il mio preferito:
«Il successo di tanti libri [e ghiribizzi!] si fonda sull'accordo fra la mediocrità delle idee dell'autore e la mediocrità delle idee del pubblico.» (Nicolas de Chamfort)
e sicuramente le mie idee sono decisamente originali... probabilmente troppo...

mercoledì 26 dicembre 2018

Sogno (quasi) natalizio


Credo che il seguente frammento di sogno sia piuttosto interessante perché, nonostante la sua semplicità, esprime chiaramente un mio certo pregiudizio verso le donne. La seguente parte è solo quella finale.

«L’alto dirigente di un’azienda di “software”, forse lo stesso Bill Gates della Microsoft, sta provando di fronte alle telecamere un nuovo programma per l’ufficio. Si tratta di una specie di assistente intelligente che dovrebbe facilitare il lavoro degli impiegati. Nella dimostrazione il dirigente è in collegamento con un collega russo con cui parla telefonicamente: sullo schermo appare automaticamente ciò che viene detto in russo e la sua traduzione. Il dirigente risponde sia in inglese che in russo, anche scrivendo direttamente con la tastiera; di tanto in tanto dà degli ordini in codice il cui significato non mi è chiaro (seguo piuttosto distrattamente e senza un reale interesse: mi sembra qualcosa di molto complicato e di concezione molto invadente tipicamente Microsoft che, di sicuro, mi guarderò bene dall’usare). Lo schermo è diviso da una sorta di pentagramma con il testo in russo sopra di esso è la versione inglese sotto. Di nuovo la funzione del pentagramma non mi è chiara: in parte vi sono inseriti i comandi in codice e in parte rappresenta forse una maniera rapida per accedere a diversi livelli di traduzioni intermedie. Nel complesso mi pare una porcheria…

La dimostrazione finisce e io inizio ad avere un ruolo più diretto nel sogno. Sono ad armeggiare su un portatile nella stessa stanza del dirigente e della sua assistente. Il tale sta inserendo direttamente dei comandi nel calcolatore per portare in linea un programma (probabilmente collegato a quello di cui aveva dato precedentemente la dimostrazione). Non so come né perché ma, visto che sono lì, inizio a dare dei suggerimenti generici al dirigente che però, sostanzialmente, li ignora non prendendoli in seria considerazione al contrario della sua assistente (che è russa o comunque straniera). Alla fine, come avevo previsto, c’è qualcosa che non funziona: quando egli prova a connettersi all’applicazione che avrebbe dovuto mettere in linea semplicemente non accade niente e lo schermo del navigatore rimane completamente bianco…

Io inizio a dare una nuova serie di suggerimenti su come cercare di identificare quale sia il problema ma il dirigente è estremamente seccato e fa per andarsene.
L’assistente però insiste chiedendogli di provare almeno uno dei miei suggerimenti che appariva semplice e sensato così il tizio si rimette a sedere mentre lei fa qualche vaga battuta scherzosa su di lui dimostrando una certa simpatia nei miei confronti.

Io, fino a quel momento, non conosco nessuno dei due: mi limito a dargli il mio parere ma non mi sento coinvolto né responsabile per e dal problema. Anche dei due non mi importa niente: l’uomo mi è indifferente e non ricordo neppure l’aspetto della donna.
Anzi a un certo momento inizio a pensare ai fatti miei e mi disegno a biro sulla pancia delle linee verticali che poi unisco fra loro, sulla parte alta, con dei semicerchi: come un’unica serie di “n” (o “m”!) continue…

Più o meno contemporaneamente mi accorgo però che il dirigente ha iniziato a raccontare un aneddoto sulla sua assistente: spiega di aver capito che lei fosse interessata a lui e di averne approfittato per una scappatella.
Nella classica maniera dei sogni, dove pare che i ricordi vengano creati sul momento in base all’opportunità, anch’io ricordo di aver avuto una storia con la donna anche se, dato il mio carattere, con un maggior coinvolgimento sentimentale rispetto all’avventura del dirigente.
Capisco allora che lo scopo delle parole del dirigente non è tanto ferire i miei sentimenti quanto quelli di lei: la vuole mettere in imbarazzo rivelandomi fatti che potrebbero diminuire la mia stima di ella.
In realtà io ascolto molto freddamente senza particolari reazioni: non so se il motivo è che della donna mi importi poco (ho solo vaghi ricordi di lei) oppure se ero entrato in uno stato psicologico di insensibilità volontaria: subito dopo però mi sveglio.
»

La parte che considero interessante del sogno non è quella esplicita quanto i sottintesi psicologici/filosofici all’origine della sua genesi. Evidentemente alla base di essa vi è il mio pregiudizio sulle donne che considero pronte a subire l’immediato fascino dell’uomo potente o di successo di turno che appena strizzi loro l’occhio. Nel sogno rimango emotivamente indifferente alle parole del dirigente ma, di sicuro, non ne sono neppure particolarmente sorpreso.
Lo so: questa idea di donna opportunista, pronta a cedere i propri favori o addirittura a innamorarsi per interesse, non fa onore al mio inconscio. Ma la mia reazione fredda e distaccata mi fa pensare che io abbia ormai accettato questa caratteristica femminile come inevitabile: connaturata cioè nella donna.
Da notare che, sebbene questo presunto comportamento femminile non mi provochi forti reazioni emotive, non lo ritengo comunque moralmente positivo: anzi, trovo in realtà abietta l’idea di legare i propri sentimenti, più o meno direttamente, al denaro o anche al successo (*1) sociale ma, contemporaneamente, non colpevolizzo la donna che cede alla propria natura. Del resto gli uomini fanno qualcosa di simile: non sono attratti dalle donne in base alle loro qualità morali ma, sostanzialmente, dalle belle e non dalle brutte.

Conclusione: credo che questa visione così poco romantica dell’attrazione fra uomo e donna la dica lunga sul mio “percorso” sentimentale.

Nota (*1): il “successo” è infatti un qualcosa riconosciuto dalla società ma che non viene dall’interno della persona: dal mio punto di vista il “successo” (o la “notorietà” o la “fama”) può anche essere completamente immeritato e, certamente, non meritevole di attrazione di per sé. Come se la donna potesse nutrirsi o vantarsi del riflesso del “successo” del proprio compagno o amante. Dal mio punto di vista si vale infatti per i propri meriti non per quelli degli altri, sebbene a noi vicini.

lunedì 24 dicembre 2018

PSS 9

«Immaginati colori mai visti, tonalità mai sognate fatte con la luce di mille mattini sciolti in caldi mezzodì e avvolti da morbidi tramonti; colori brillanti e nitidi con contrasti inimmaginabili…
E il suono: un silenzio profondo e assoluto si insegue e si confonde col fragore di una montagna che crolla: ogni pietra, ogni albero, ogni foglia, ogni chicco di panico canta la propria canzone: melodie, inni e melopee tutte fra loro distinte ma ugualmente sovrapposti in corali contrappunti. Pensa al tutto e al nulla che esistono contemporaneamente.
E il tuo udito, la tua vista, se così possiamo considerare questi nuovi sensi, saranno in grado di apprezzare tutto contemporaneamente e con la perfezione di una consapevolezza interiore piuttosto che di una mera e imperfetta sensazione esteriore. Immaginati di fissare un punto davanti a te e di vedere ugualmente bene tutto ciò che vi è nei suoi dintorni e non solo! Anche quello che è più in là fino al margine estremo del tuo campo visivo… e di andare oltre! Immaginati di vedere con ugual precisione ciò che è dietro la tua cervice: e non solo a pochi metri di distanza ma per chilometri e chilometri fino all’estremo opposto del mondo e molto oltre.
E questo in un adesso perenne ed eterno che si estende tanto nel passato che nel futuro: un adesso denso e spesso che non ha nulla a che vedere con l’effimero ora che nell’attimo in cui lo si pensa è già perso. Immaginati un fermo immagine espanso nel tempo e nello spazio nel quale ti puoi muovere liberamente e che, anzi, riempi completamente con la tua essenza: perché anche tu sei spazio e sei tempo. Cerca di immaginarti ciò che ti dico e forse capirai.
Pensa a questa tua nuova prospettiva, pensa a come i tuoi nuovi occhi leggeranno “verità” in ogni oggetto e in ogni essere vivente. E così le colpe degli uomini te li mostreranno tutti ugualmente abietti: ma ciò non ti sarà motivo di disgusto; al contrario questa visione causerà la comprensione dei loro limiti e della loro inadeguatezza: tutti ugualmente deboli e imperfetti; ma con la comprensione verrà la pietà non l’orrore, poi arriverà la misericordia (il genuino desiderio di soccorrerli) e infine l’amore per il tutto.
Tu credi di abbandonare i tuoi cari ma in realtà saranno sempre con te: nel passato e nel futuro. Non potrai dolerti per loro perché fuori dal tempo non vi è il tempo. Parlerete con parole simili a pensieri infiniti, composti dalla tua stessa anima: e non vi sarà ambiguità né dubbio né incertezza ma solo comprensione totale e perfetta. Tutto ciò sarà inevitabile, eterno e istantaneo.
Prima o poi, ovvero immediatamente e dopo infiniti eoni: alzerai lo sguardo e vedrai l’obiettivo del percorso: la cima della montagna. Che non è una vera montagna ma una condizione del tuo essere, una dimensione interiore infinitamente pura, una distillazione dell’anima che alla fine coinciderà col tutto perfetto: il divino, l’inizio e la fine.
E in quell’eterno istante di comprensione saprai di dover riprendere il tuo percorso: saprai che la sofferenza è necessaria e non ne avrai paura; sarai consapevole di quanto essa sia effimera e momentanea: un nulla paragonato al tutto. E allora ti ritufferai nel tempo, ti reincarnerai nella vita con la certezza di alleggerire così la tua anima, pesante come l’intero oceano, di un granello di sabbia: più leggera essa sarà capace di innalzarsi un sospiro più in alto, ancora più vicino alla vetta cioè.» - concluse il maestro Yury tutto di un fiato.
Occorse qualche secondo a Discutibile, rimasto ad ascoltare a bocca aperta, per rendersi conto che il maestro aveva finito di parlare e che lo guardava benevolo. Allora Discutibile iniziò a balbettare «Cioè… così allora… voglio dire che...quindi...»
E maestro Yury concluse per lui: «Non devi temere la morte: essa è solo un nuovo inizio. La fine di una tappa e la partenza della successiva. Il dolore e la sofferenza sono apparenti quanto necessari: è solo questa prospettiva mortale che ce li fa apparire come temibili avversari.»
«Ma… e se uno si reincarna prima si essersi ripreso dal dolore della vita?» - chiese preoccupato Discutibile.
«Tu non mi ascolti!» - ridacchiò Yury - «La tua anima avrà un istante e l’eternità per muovere oltre...»
«Ma...»
«Basta così Discutibile: non è bene parlare troppo di ciò che non può essere insegnato ma solo immaginato» - terminò il maestro Yury chiudendo gli occhi e riprendendo la sua meditazione.

giovedì 20 dicembre 2018

Lacerazione video

Risolto!
Dopo un paio di anni ho finalmente risolto il problema di screen tearing che mi era venuto dopo un aggiornamento che feci per portare il mio linux Mint da 18 a 18.1! Problema che non si era risolto (stranamente) con l’installazione di Mint 19...
Ho infatti trovato questo video:How to Fix Nvidia Graphics Horizontal Lines Tearing Bug in Debian, Ubuntu and Linux Mint che spiega come cambiare manualmente delle impostazioni della scheda video: apparentemente il problema era la mancanza di sincronia fra monitor e scheda video...

PS: ovviamente non bastava abilitare l’impostazione “Screen synch” o simili presente in molti giochi...

Schifo EU - 22/12/2018
L’articolo: Terrorismo, l’Ue punta centinaia di milioni sulla biometria. Tra pressioni delle lobby e dubbi degli esperti di Ludovica Jona da IlFattoQuotidiano.it

Ecco l’EU: al servizio delle lobbi e guidata da "statisti" del calibro di Jean-Claude Juncker...

Serie bellina - 28/12/2018
Attenzione sciupatrama!!
La serie è intitolata “Travelers”: il suo genere è fantascienza e in particolare si basa sul filone dei viaggi nel tempo. Comunque, oltre a una trama solida senza contraddizioni evidenti né banalità, mi sono piaciute le domande filosofiche su cui si basa: “Cos’è la coscienza?”, “Cosa definisce una persona?”, “È giusto affidare decisioni di vita e di morte a una macchina?” e molte altre.
Ripensandoci c’è solo una puntata che viola alcuni dei principi logici/morali alla base della serie: il direttore dà infatti l’ordine di uccidere un ragazzino che diventerà un omicida seriale mentre normalmente aspetta sempre l’ultimo secondo per fermare una strage (anche perché il futuro è costantemente modificato dai suoi agenti). All’ultimo momento la missione è annullata…
Può anche darsi che si volesse riprendere il tema del sacrificio di Isacco da parte di Abramo: fare cioè qualcosa di apparentemente sbagliato quando lo richiede il “Signore”…

Lady Oscar è un samurai - 28/12/2018
Sto rileggendo dei vecchi fumetti giapponesi su cui è stato basato l’omonimo cartone “Lady Oscar” (*1). Per adesso ho riletto appena un libriccino e mezzo ma mi è già adesso evidente che la protagonista Lady Oscar segue la via del “bushido”: Lady Oscar è cioè un samurai giapponese senza saperlo!
Non si tratta tanto dell’abilità militare (che pure corrisponde) ma quanto della cieca obbedienza al proprio signore (in questo caso la regina Maria Antonietta). Non importa cosa pensi Lady Oscar: alla fine lei obbedisce sempre senza discutere. E come una buona samurai non dà consigli se non le viene esplicitamente richiesto…
Anche da bambino questa cieca obbedienza mi lasciava perplesso ma non le avevo dato troppo peso considerandola “normale” fedeltà alla monarchia e al proprio dovere….

Nota (*1): non ho idea se “tutti” (soprattutto i più giovani e i più anziani) sappiano ciò di cui sto parlando ma non ho voglia di divagare spiegando questi dettagli...

Tutto bene - 2/1/2019
Come credo di aver ormai già scritto numerose volte altrove mi vanto di non aver mai visto il “Festival di San Remo” né ascoltato il discorso del presidente della repubblica.

Quest’anno ero a cena da un amico e l’incolpevole televisorino era sintonizzato su Canale 5 per avere un sottofondo di musica italiana dal vivo durante la cena. Alla fatidica ora il Mattarella ha però fatto cucù e iniziato l’annuale rampogna. Fortunatamente il volume era troppo basso per i miei orecchi e, del resto, l’interesse della tavolata nullo: insomma, nonostante la grande paura, è finito tutto bene e sono stato solo sfiorato da qualche vuota parola di vieta retorica presidenziale…

martedì 18 dicembre 2018

Estroversi timidi e altro...

Recentemente ho avuto una discussione con un’amica sulla timidezza: lei diceva che si può essere estroversi e timidi, io che solo l’introverso può essere timido.
Beh, il discorso era un po’ più articolato, in particolare io opinavo sulla definizione di timidezza e che di questa potessero essercene più tipi. Io con timidezza vera e propria intendevo solo la difficoltà a relazionarsi con gli altri mentre, ipotizzavo, altre forme comunemente dette di timidezza, come l'imbarazzo a parlare in pubblico, fossero in realtà qualcosa di simile ma non uguale.

Alla fine mi sono deciso a fare una ricerca con Google (non ricordo le parole chiave usate) e ho ottenuto il seguente breve articolo: Tipi di personalità: perché possiamo essere timidi, ma anche estroversi... di ELISATELESCA da ThePasswordUnito.com
Beh, che dire? L’articolo, già dal titolo, dà completamente ragione alla mia amica!

Poi, volendo, alla fine è questione di definizioni: secondo Jung l’introverso è colui che “ricarica le proprie batterie” stando da solo; l’estroverso invece si “ricarica” stando in compagnia. Partendo da queste definizioni introverso/estroverso non hanno quindi niente a che vedere con la timidezza di per sé.

Vabbè, e questo è tutto riguardo la timidezza (*1)…
Però il pezzo odierno non ha solo lo scopo di dare un po’ di soddisfazione alla mia amica riconoscendo che questa volta aveva visto giusto lei (in genere ho sempre ragione io!) ma mi dà anche l’opportunità di rivedere un vecchio pezzo che scrissi tempo fa: Mamma ENFP. Il nocciolo di tale pezzo era che, pur senza conoscere il significato delle varie lettere dei tipi di personalità (a parte la prima I/E che stanno per Introverso ed Estroverso) ipotizzavo che mia madre doveva essere l’esatto opposto di mio padre che, nell’esame di Myers-Briggs risulta ISTJ, ovvero una ENFP: curiosamente poi la mia personalità INTP sarebbe stata un’esatta sintesi delle due!

Ebbene l’articolo sullodato dà anche delle definizioni chiare e semplici del significato della seconda e terza lettera (e un po’ meno della quarta).
La seconda lettera, che indica la funzione cognitiva di percezione, può essere S oppure N e definisce come l’individuo percepisce il mondo: se tramite la sensitività (S) ovvero basandosi principalmente su ciò che vede e sente, cioè sui fatti; oppure tramite l’intuizione (N) cioè ipotizzando, sussumendo, intuendo e costruendosi le proprie teorie.
La terza lettera indica invece la funzione cognitiva di giudizio, ovvero come ragioniamo, e può essere F o T: T sta per pensiero (thought) cioè giudichiamo riflettendo e ragionando sui fatti, mi pare che corrisponda grossomodo alla razionalità; F sta invece per sentimento (feeling) ovvero giudichiamo lasciandoci trascinare dalle emozioni.
La quarta lettera, che corrisponde a una quarta dicotomia delle tipologie psicologiche che non è di Jung ma è stata introdotta dalle Myers-Briggs, mi è rimasta un po’ meno chiara: dovrebbe basarsi su come agiamo. Può essere P oppure J, lettere che indicano le due precedenti funzioni cognitive ovvero quella di percezione (P) e quella di giudizio (J). Se agiamo basandoci sulla facoltà di percezione siamo più aperti a nuove idee ma, di conseguenza, anche più indecisi e quindi passivi; se invece ci basiamo su quella di giudizio significa che siamo sicuri delle nostre convinzioni e quindi siamo più attivi e decisi perché non abbiamo motivo di indugiare. Ma su questa quarta lettera non sono sicurissimo di aver compreso bene!

Comunque, alla luce di queste definizioni, ho ripensato alla tipologia psicologica di mia madre.
Io sono abbastanza sicuro che fosse estroversa anche se, nell’ultima parte della sua vita, si era un po’ chiusa e isolata dal mondo. Direi quindi E.
La funzione cognitiva di percezione di mia madre doveva essere tutta sbilanciata sull’intuizione: in modo estremamente irritante per mio padre ella non si atteneva assolutamente ai fatti ma si basava sulle sue supposizioni costruite sopra altre supposizioni! Quindi decisamente N.
La funzione cognitiva di giudizio è la più difficile da ipotizzare perché non traspare direttamente all’esterno. Però sono portato a pensare che, di nuovo, si basasse di più sulle sue emozioni e che non fosse assolutamente logica nelle sue conclusioni: ovviamente l’esatto opposto di mio padre!
Quindi un F deciso.
Per la quarta dicotomia, ammesso che l’abbia compresa bene, è invece facile stabilire che fosse una P: agiva spessissimo d’impulso, basandosi solo sui propri istinti…
In definitiva quindi è probabile che mia madre fosse realmente una ENFP!

E ora posso anche riconsiderare la mia tipologia INTP alla luce delle nuove conoscenze!
Dunque che io fossi I non vi era dubbio: l’esame che feci mi dava infatti completamente sbilanciato come I (tipo 90% I e 10% E). E io infatti, per quanto stia bene in compagnia di amici, ho poi bisogno di un paio di giorni da solo per riprendermi!
Mi è poi adesso ovvio che io sia totalmente N: amo costruire teorie su tutto (basti pensare all’Epitome) e, come ho più volte detto/scritto, considero l’intuizione l’aspetto precipuo della mia intelligenza.
Ma non mi baso a casaccio sulle mie intuizioni! Vi rifletto, le ordino e le combino insieme. Di nuovo sono decisamente un T.
L’esame che feci mi dava invece leggermente P (al 52% contro il 48% di J, probabilmente mi sarebbe bastato rispondere diversamente a una domanda per essere classificato come J) e in effetti aveva di nuovo ragione. Io cerco di agire logicamente ma devo fare uno sforzo per riuscirci e ogni tanto mi concedo di agire d’impulso o in modo apparentemente illogico. Ma in generale mi sento in perenne conflitto: so come dovrei agire ma non “mi va” di farlo. E poi lascio sempre spazio a un margine di incertezza e di dubbio: non mi sentirete mai dire/scrivere “sono convinto al 100% di XXX” e anche quando lo faccio in verità intendo comunque un 99%! Questo atteggiamento, se ho capito bene, è molto P…

Conclusione: un articolo cortissimo ma veramente molto utile!

Nota (*1): aggiungo solo che io, ormai da moltissimo tempo, mi ero reso conto di non essere timido seppure fortemente introverso: vedi KGB le Origini: l’asociale.

lunedì 17 dicembre 2018

Altra solita poesia

Di seguito una poesia senza senso: pensata, e forse un po’ sognata, in una notte uggiosa e scritta in un mattino grigio, lievemente imbellettato da un accenno di neve.




Le stagioni della vita

C’è un giardino nella grigia città.
La città dove nessuno si ferma,
Dove nessuno raggiunge niente.

Al centro del giardino dorme un albero.
Un giardino assediato dal caos,
Ormai perduto ma non ancora vinto.

Sotto l’albero un tappeto di foglie.
Un albero curvo in antichi pensieri,
sordo al frastuono della follia.

Sotto le foglie radici scavano profonde.
Foglie lievi di momenti perduti,
Lacrime confusi e sospiri insieme.

Fra le radici è sepolto un gatto.
Radici segrete, forti e sagge,
Radici che non dimenticano.

Era il gatto di una buona strega.
Un gatto nero dagli occhi gialli,
Quasi come un cane fedele.

La buona strega viveva nella città,
Passeggiava nel vivace giardino,
Sedeva sotto l’albero benigno,
contandone le foglie sulle fronde,
e ascoltava i bisbigli delle radici
mentre il gatto le ronfava in grembo.

La buona strega era mia madre
e io sono suo figlio: il vento gelido.
Furioso corro per la città morta,
e urlando precipito al giardino.
Qui un attimo mi calmo sospirando:
Accarezzo il sudario di foglie
sotto le quali l’amato gatto,
accarezzato da mia madre, riposa.
Ma subito, senza pace, corro via.

Era la primavera, ora è inverno.

venerdì 14 dicembre 2018

La “regola” del 3%

Una premessa: negli ultimi mesi sto seguendo meno la politica: probabilmente una fase di rigetto dopo un breve ma intenso periodo di maggior coinvolgimento.
In particolare mi sono reso conto che il profilo Twitter di Salvini non mi è utile per conoscere l’andamento della situazione politica italiana: è, sebbene legittimamente, troppo orientato alla propaganda (*1). Mancando totalmente le voci contrarie non riesco a capire cosa succeda realmente: dovrei riequilibrare artificialmente con Repubblica.it o Corriere.it (*0)…
Alla fine la mia fonte principale di notizie è divenuto il profilo Twitter Le frasi di Oshø!
Ovviamente seguo anche il profilo Twitter di Bagnai ma in genere si limita a brevi commenti e a rilanciare cinguettii altrui: raramente propone delle sue proprie riflessioni ben argomentate (*2).
Comunque da qualche tempo avevo notato parecchi rimandi al suo sito ma, scrivendoci ormai poco (*2), pensavo che si riferisse sempre allo stesso pezzo su “Macron” che mi interessava il giusto: invece no!
Finalmente oggi sono andato a dare un’occhiata e ho scoperto che ha scritto ben cinque pezzi apparentemente tutti molto interessanti!
Il primo di questi articoli è Le regole e proprio di questo voglio scrivere oggi (*3): inutile dire che consiglio fortemente la lettura dell’articolo originale del Bagnai perché enormemente più chiaro, completo ed esatto della mia seguente semplificazione…

Da più parti si sente parlare della regola del 3% di deficit rispetto al PIL e spesso non è chiaro perché se il limite è il 3% allora il 2-qualcosa% proposto dal governo italiano non vada bene.
Il problema in generale è che in economia le risposte troppo semplici sono spesso parziali e inesatte: per capire veramente è necessario un approfondimento che richiede un minimo di familiarità con i numeri e molta pazienza. Nel suo articolo Bagnai spiega meticolosamente tutti i dettagli della regola del 3% e io cercherò, come al solito banalmente, di riproporne qui di seguito la mia semplificazione “per idioti” sperando di non inserirvi troppe inesattezze.
Mi si potrebbe obiettare: “Sul sito XXX viene fornita una spiegazione molto diversa: chi ti dice che quella fornita dal Bagnai sia quella corretta?”.
Beh, mi fido di Bagnai perché ormai lo seguo da qualche anno e quanto letto sul suo sito si è sempre dimostrato corretto e affidabile; da un’altra parte perché i suoi pezzi sono corredati di collegamenti a fonti e a informazioni aggiuntive (cosa che MOLTO raramente accade negli articoli di chi scrive che Bagnai ha torto!): quando ho provato a controllare (e un paio di volte l’ho fatto) mi è sempre tornato tutto. Per questi motivi quando Bagnai scrive di economia ha la mia completa fiducia (*4).

Il nocciolo della questione è che il 3% di deficit non è calcolato sul PIL effettivo ma sul “PIL potenziale” (PPIL). Tutto dipende quindi da come si ricavi questo “PIL potenziale” (PPIL).
Il PPIL corrisponde al PIL effettivo al netto della “componente ciclica” dell’economia.
La “componente ciclica” è una stima ottenuta come prodotto di altre due stime e, quindi, a sua volta il PPIL è una stima.
Quando il PIL è superiore al PPIL “significa” (*5) che l’economia rischia di surriscaldarsi e quindi essa va contenuta diminuendo la spesa: ciò effettivamente avviene perché il saldo strutturale (basato sul PPIL) è minore di quello nominale e, di conseguenza, a parità di spesa il deficit diviene maggiore (e quindi si deve spendere meno).
Al contrario quando il PIL è minore del PPIL “significa” che l’economia è in difficoltà e necessita di un aiuto e, quindi, una spesa maggiore sarebbe auspicabile. E in effetti è proprio quello che consentono le formule: il saldo strutturale diviene maggiore di quello nominale e, di conseguenza, a parità di spesa il deficit diviene minore (e quindi si può spendere di più).

Fin qui, a parte le definizioni matematiche più o meno complesse e comprensibili, tutto avrebbe senso: quando l’economia è in difficoltà è lecito spendere un po’ di più mentre invece va raffreddata, spendendo meno, quando corre troppo.

Esiste però un paradosso nel calcolo della componente ciclica che serve al calcolo del PPIL: essa si base sui PPIL degli anni passati!
Dov’è il paradosso? Beh, supponiamo che un’economia subisca uno schock e che da questo non si riprenda immediatamente grazie alla piccola flessibilità permessa dalla regola del 3%, allora ciò che avviene è che la diminuzione del PIL diviene strutturale (indipendentemente da quale fosse la situazione economica qualche anno prima) e negli anni successivi non c'è quindi più quella flessibilità di cui invece, nella realtà, ci sarebbe ancora bisogno per tornare almeno a una situazione pre crisi.

Ma esiste anche un altro paradosso: se in caso di crisi economica un governo ottiene il permesso di spendere di più si ritroverà nell'immediato con un PIL migliore e, negli anni successivi, si potrà permettere maggiore spesa in caso di difficoltà (PIL reale minore del PPIL) perché anche il suo PPIL sarà più alto. Al contrario, se in caso di crisi un paese segue pedissequamente le regole (o viene obbligato a farlo dagli “amici” europei), ecco che si ottiene un doppio danno: l’economia reale (PIL) cresce meno (o cala di più!) rispetto a quella di chi ha potuto sostenerla maggiormente e, nel futuro, il PPIL diviene più basso col risultato che si avrà meno spazio di manovra (sia quando il PIL è maggiore del PPIL, più basso del dovuto, che quando è minore: in questo caso si ha sì un po’ più flessibilità ma non quanta sarebbe stato “giusto” ottenere).

La parte ironica è che quando la crisi economica c’è stata nel 2008-2009 noi abbiamo avuto un Monti che, sebbene osannato come salvatore della patria dai media compiacenti, in realtà ha ottenuto solo di comprimere l’economia italiana e ridurre in prospettiva il PPIL per gli anni futuri.
Guarda caso nazioni guidate con più criterio della nostra hanno fatto l’esatto contrario di Monti: ottenendo così sia un vantaggio immediato, sostenendo la propria nazione con più spesa quando ve ne era più bisogno, ma anche nel tempo, alterando favorevolmente la tendenza del PPIL e garantendosi così più spazio di manovra negli anni seguenti.
E guarda caso proprio chi adesso fa le lezioncine (sbagliate) di economia all’Italia (*6) si è avvantaggiato maggiormente della regola del 3% violandola quando gli faceva più comodo. Per i dettagli rimando alla lettura del pezzo di Bagnai Le regole.

Conclusione: i danni prodotti dal governo Monti, e non corretti dai successivi governi del PD, vuoi per incompetenza o per cieca subalternità all’ideologia del “prima l’Europa”, sono generazionali: la ricchezza di una generazione è stata bruciata e non è quindi un caso che tanti giovani italiani siano adesso costretti a emigrare a causa delle scarse prospettive che hanno in patria. L’EU, di cui tanti ancora agitano fanaticamente la bandiera come cani che scodinzolano al padrone, non solo non ci aiuta ma anzi insiste nell’imporci regole ingiuste e deleterie. Perché? Chiedetevi chi ci guadagna da un’Italia debole e non competitiva...

Nota (*0): il problema è che ascoltare due voci distorte non equivale a sentirne una imparziale!
Nota (*1): un po’ analogamente come col sito della Casa Bianca.
Nota (*2): io ho interpretato il fatto come il risultato della combinazione di due fattori: da un lato è molto indaffarato con la commissione che presiede, da un altro proprio il suo ruolo non gli consente di esprimere liberamente le proprie opinioni personali.
Nota (*3): anche perché credo sia propedeutico per la comprensione dei successivi…
Nota (*4): almeno fino a prova contraria: che però dovrà essere estremamente chiara e ben documentata e non, ad esempio, un trafiletto di Repubblica.it basato su qualche numero di incerta provenienza…
Nota (*5): fra virgolette perché non è tutto così automatico e semplice…
Nota (*6): sciupatrama: Francia e Germania...

mercoledì 12 dicembre 2018

Flop Napoli

E così Ancelotti non è riuscito a fare meglio di Sarri…
Girone più difficile? Può darsi: ma decisivo è stato il pareggio nella prima partita contro la Stella Rossa che, in pratica, ha regalato due punti di vantaggio alle altre squadre; la stessa fatale mancanza di concentrazione c’era stata l’anno scorso con Sarri: a cosa è quindi servita l’esperienza internazionale di Ancelotti?
Bisognerà poi vedere quali saranno le conseguenze di questa eliminazione in campionato…

Comunque la mia opinione di Ancelotti è notevolmente aumentata rispetto a inizio anno: è un ottimo allenatore che, in genere, mette in campo la squadra migliore e indovina i cambi; inoltre, a differenza di Sarri, riesce a far giocare l’intera rosa.

Il mio punto è che il motivo per cui il Napoli non riesce a far meglio della Juventus non era evidentemente il suo precedente allenatore...

Macron - 12/12/2018
Le evidente difficoltà interne di Macron hanno il pregio di impedire ai nostri media di ammannirci la solita minestrina riscaldata con le sue lezioncine (sbagliate) di democrazia/libertà (sull’immigrazione) e di economia (per la EU il deficit francese va benissimo anche al 3,4%: solo per l’Italia ci vuole il pugno di ferro)...

Riletto Siddharta - 14/12/2018
Ho appena finito di rileggere un bel libretto: La vita di Siddahrta di Hammalawa Saddhatissa, Gruppo editoriale Armenia S.p.A., 2000, trad. Lucia Panelli.
Si tratta di un libro che ho ritrovato ordinando e pulendo la mia camera e che ho voluto subito rileggere.
È un’opera che punta tutto sulla semplicità per dare un’infarinatura di buddismo e, in effetti, vi riesce egregiamente: in realtà però non è il libro che volevo rileggere!
Sicuramente avevo già letto questo volumetto, e forse era stato proprio il motivo che mi aveva spinto a saperne di più, ma il testo che ricordavo era molto più poetico e dava una versione più fantastica degli atti del Buddah: probabilmente era un’opera molto più antica...

Domandina facile - 14/12/2018
[E] Per la comprensione completa di questo pezzo è utile la lettura della mia Epitome (V. 1.1.0 "Alice").

Nell’Epitome spiego che, in genere, la religione tende ad assumere forme che aiutano a mantenere la stabilità sociale e, contemporaneamente, vi sia una stretta collaborazione fra parapoteri politici e le gerarchie religiose.
Il buddismo non ha però una gerarchia religiosa molto sviluppata e, per questo, si presta poco a collaborare con i parapoteri di livello più alto; contemporaneamente punta molto sul buon senso e sull’intelligenza critica del singolo fedele e, proprio per questo, potrebbe contribuire a rendere meno forti alcuni protomiti fuorvianti.

Per quale motivo allora il buddismo è una religione generalmente ben tollerata dalle autorità?

Suggerimento: ai fedeli viene insegnato a considerare transitorio e quindi a ignorare il dolore in tutte le sue forme.

Botte da lobbi - 16/12/2018
Si danno botte da lobbi: ma alla fine, state sicuri, a rimetterci saranno sempre i cittadini.
Articolo: Copyright: giornalisti, i giganti del web vogliono snaturare il testo da Ansa.it

(ah! Dimenticavo: grazie EU...)

martedì 11 dicembre 2018

Sogno stupido

Sono tre giorni che dormo male: le due scorse notti a causa di una combinazione pioggia/tetto di cui, forse, scriverò in un altro pezzo; stanotte invece ho dormito male per un motivo stupidissimo: ho fatto un sogno che sul momento mi è parso molto interessante e così, a forza di ripensarci e ricordarne i particolari, sono stato sveglio almeno un’ora!

Si è trattato di un sogno tranquillo, come probabilmente lo sono la maggior parte dei miei sogni, ambientato all’epoca del liceo: curiosamente piano piano mi rendo conto di alcune incongruenze logiche fino a svegliarmi…
Mi limiterò a descrivere la parte “curiosa” del sogno visto che, oltretutto, oramai ricordo solo alcuni frammenti e sensazioni delle altre fasi.

Sono in classe e giro fra i banchi aspettando con impazienza che la lezione finisca: non ho l’orologio ma sono sicuro che manchi poco. Ma la professoressa di matematica (*1) aggiunge sempre nuove considerazioni e, anzi, decide di mostrarci un breve filmato che noi dovremo interpretare.
Mi siedo sulla prima sedia libera per osservare la pellicola: è un cartone animato senza sonoro; fa parte dell’esercizio cercare di intuire quello che accade senza sentire i dialoghi.
Dei bambini sono è disposto in un ampio cerchio intorno a un bimbetto che se ne sta bendato nel centro cercando di aprire una merendina che tiene in mano.
Per qualche secondo non succede niente di particolare poi l’inquadratura mostra la maestra che dice qualcosa a una bambina che arrossisce, dopo qualche secondo l’inquadratura torna al bambino bendato e anche lui lo si vede arrossire.
Il filmato si interrompe è la professoressa ci chiede cosa pensiamo che sia successo. Nessuno si sbilancia ma la sensazione data dal montaggio è che la bambina fosse stata amichevolmente presa in giro dalla maestra perché innamorata del bambino al centro del cerchio (probabilmente si era distratta a fissarlo troppo intensamente) e che questo arrossisse semplicemente per essere stato coinvolto, seppure indirettamente, nello scherzo.
Nessuno dei miei compagni di classe si sbilancia e così io, che pure avevo considerato l’intero esercizio una stupidità, ci rifletto un attimo e scherzando, ma anche dato che non lo si poteva escludere, prendo la parola e dico “Probabilmente il bambino era allergico alla merendina e ora sta soffocando!”. Tutti trovano la mia idea bizzarra e ridacchiano divertiti ma, con mio stupore, la professoressa mi loda dicendo che avevo risolto l’esercizio!
Poi, finalmente, suona la campanella e possiamo andarcene e io, stranamente, sono piacevolmente al centro dell’attenzione. Più persone mi chiedono come ero arrivato alla mia conclusione e io allora, ragionando a posteriori, spiego che il bambino era arrossito solo diversi secondi dopo il commento della maestra e quindi non poteva dipendere dalle parole della stessa; inoltre inizialmente la merendina era chiusa e quindi doveva essere riuscito ad aprirla e assaggiarla solo quando la maestra aveva interrotto il gioco.
Ricordo che spiego queste mie teorie a più persone mentre usciamo con la sensazione che l’interesse dei miei compagni sia solo superficiale e temporaneo e che, per questo, dovrei rispondere con poche parole, magari una battuta, senza annoiare con dettagli troppo sottili: però la mia natura è quella di essere preciso e quindi entro nei particolari sebbene consapevole che, dopo pochi secondi, i miei interlocutori si siano distratti e continuino ad annuire solo per cortesia…


Non so perché questo sogno mi sia piaciuto così tanto: forse per la sensazione di essere stato apertamente ammirato e apprezzato dai miei compagni sebbene per un motivo estremamente futile…

Conclusione: beh, temo che questo sogno sia davvero poco interessante! Però ormai l’ho scritto: per non sentirmi in colpa con i miei lettori vi aggiungerò il marcatore “Peso” per avvisare così che non vale la pena leggerlo...

Nota (*1): la professoressa di matematica era l’unica brava che ho avuto in tutto il quinquennio del liceo scientifico (cambiavamo professoressa di matematica ogni anno). Mi piaceva perché aveva un umorismo mordace e spietato: prendeva in giro gli studenti che sbagliavano a rispondere e io mi divertivo moltissimo. È stata l’unica insegnante del liceo con cui io mi sia impegnato al massimo. Ricordo che i suoi compiti erano formati da quattro esercizi più uno di “bonus”: facendo bene i primi 4 esercizi si poteva arrivare a prendere 8, facendo bene anche quello di bonus 9. Io però mi divertivo a cercare di finire il più in fretta possibile, poco più che metà tempo, senza riguardare quanto fatto; in genere, proprio per la mia smania di essere apprezzato da lei, finivo per infilarci delle piccole imperfezioni e prendendo così in genere “solo” 8½ o simili.
La professoressa era perfino dispiaciuta per me ma, ora non saprei dire perché, a me pareva più importante dimostrarle che ero velocissimo. Non so: forse con lei mi sentivo davvero apprezzato… credo che sia state una delle ultime professoresse che ho chiamato “mamma” (ho sempre avuto il “mamma” facile!). Probabilmente non è un caso che proprio lei fosse in questo sogno...

lunedì 10 dicembre 2018

Rete al massimo

In Aggiornamento pitonesco avevo accennato a un mio primo progettino: la teoria infatti mi piace fino a un certo punto e il metterla in pratica è la verifica di averla compresa.
Ovviamente volevo iniziare con qualcosa di facile e così mi è venuto in mente di realizzare una rete neurale per risolvere il seguente problema: identificare il massimo fra dieci numeri in ingresso.

Sembrerebbe una banalità ma in realtà non sono neppure sicuro che sia risolvibile.
Da una parte infatti nell’esempio della rete neurale sui vini portoghesi gli ingressi erano i valori di acidità, densità, percentuale di alcool, percentuali di solfati e così via. Mi pare normale che in questi casi la rete neurale, attraverso i vari esempi, “comprenda” le relazioni fra le varie misure perché queste effettivamente esistono (*1).
Invece, nel mio caso, io genero 10 numeri casuali compresi fra 0 e 1 e non c’è alcuna relazione fra un numero e gli altri: il conoscere i primi 9 numeri ad esempio non ci dice niente sul decimo. Come può quindi la rete neurale capirci qualcosa?

D’altra parte però, in un esempio del libro Deep Learning Cookbook, la rete neurale “imparava” a riconoscere le relazioni fra pellicole e marcatori (come il regista, l’anno di produzione, gli attori, etc). La cosa interessante e che pellicole e marcatori erano identificati da un singolo numero intero (da 0 fino, rispettivamente, al numero di film e marcatori) ma questo veniva “tradotto” in un vettore di 50 dimensioni tramite degli appositi strati di Keras chiamati Embedding.
In altre parole “Guerre Stellari”, che magari aveva il numero identificativo 2303, veniva tradotto in un vettore di 50 numeri. Il film “Leon”, col numero 2304, veniva convertito in un vettore di altri 50 numeri. Che relazione c’è fra identificativi e vettori? Non lo so ma non è importante visto che comunque, in partenza, non c’è alcuna relazione fra i codici identificativi!
Eppure la rete neurale era in grado di imparare a riconoscere pellicole e marcatori da questi numeri all’apparenza casuali…
Quindi perché lo stesso non potrebbe accadere col mio problema di identificazione del maggiore fra dieci numeri?

Insomma, con le mie scarse conoscenze attuali, non sono in grado di prevedere se la mia rete neurale sarà in grado di risolvere questo mio problemino. Così ho scritto il seguente codice Phyton:

1:  import numpy as np  
2:  np.random.seed(330)  
3:    
4:  def batchifier():  
5:    np.random.seed(30)  
6:    for i in range(2000):  
7:      x=np.random.random((1, 10))  
8:      x.sort(1)  
9:      y=np.zeros((1,10))  
10:    
11:      z=np.append(x,y,0)  
12:      z[1,9]=1  
13:      z=np.rot90(z,1,(0,1))  
14:      np.random.shuffle(z)  
15:      z=np.rot90(z,1,(0,1))  
16:    
17:      X_Test=z.compress([True,False],axis=0)  
18:      Y_Test=z.compress([False, True],axis=0)  
19:      yield (X_Test,Y_Test)  
20:    
21:  from keras.models import Sequential  
22:  from keras.layers import Dense, Activation  
23:    
24:  model = Sequential()  
25:  #model.add(Flatten())  
26:  model.add(Dense(20, input_shape=(10,), use_bias=True))  
27:  model.add(Activation('relu'))  
28:    
29:  model.add(Dense(10))  
30:  model.add(Activation('softmax'))  
31:    
32:  model.compile(optimizer='rmsprop',  
33:         loss='categorical_crossentropy',  
34:         metrics=['accuracy'])  
35:    
36:  model.summary()  
37:    
38:  model.fit_generator(  
39:    batchifier(),  
40:    epochs=10,  
41:    steps_per_epoch=200, #positive_samples_per_batch,  
42:    verbose=1  
43:    )  
44:    
45:  def sample():  
46:    x=np.random.random((1, 10))  
47:    return x  
48:    
49:  def somma(l):  
50:    tot=0  
51:    for x in l[0,]:  
52:      tot+=x  
53:    return tot  
54:    
55:  print("Esempi:")  
56:  for i in range(10):  
57:    s=sample()  
58:    print(s)  
59:    p=model.predict(s,batch_size=1,verbose=0)  
60:    print(p)  
61:    print(somma(p))  

Il codice è piuttosto semplice e, probabilmente, apparirà orrorifico a che conosce un po’ di Python: soprattutto il generatore batchifier() è scritto in maniera artificiosa. Chi conoscesse il Python probabilmente sarebbe in grado di riscrivere lo stesso codice in un paio di linee…
Comunque creo un vettore di 10 numeri casuali, lo ordino, poi vi appendo una secondo vettore di zeri (ottenendo una matrice di dimensione 2x10), cambio il valore dell’ultimo 0 in un 1, la giro di 90 gradi (ho trovato solo una funzione che mescola le righe e non le colonne!), la mescolo, la rigiro di 90 gradi e ne estraggo le due righe.
X_Test conterrà i 10 numeri casuali e Y_Test conterrà 9 zeri e un 1 in corrispondenza del numero più grande di X_Test…

Poi creo il modello vero e proprio della mia rete neurale usando Keras.
Non ci ho riflettuto molto: non mi interessa che sia efficiente, voglio solo qualcosa che funzioni e che risponda al mio dubbio se una rete neurale può o meno imparare a individuare il valore massimo fra 10 numeri…

In pratica creo una rete neurale a due strati. Per la precisione: 10 ingressi connessi a 20 neuroni (primo strato) e 10 neuroni di uscita (secondo strato). Il secondo strato ha come funzione di attivazione la “softmax” che dovrebbe dare la probabilità che il numero rappresentato da ogni uscita sia il massimo: ovvero 1 per il massimo e 0 per gli altri.
Onestamente gli altri parametri li ho inseriti un po’ a casaccio: in effetti adesso ho un forte dubbio che la funzione “loss” (misura l’errore fra l’uscita della rete e il valore previsto) non sia adatta… vabbè, cambiarla sarà uno degli esperimenti che dovrò fare…
Idem per l’ottimizzatore (ovvero il metodo usato per calcolare i nuovi pesi della rete a ogni iterazione)…

Per allenare la rete uso il metodo fit_generator perché pensavo fosse più adatto al mio generatore ma in realtà ho socraticamente capito solo di non aver capito come funziona! In particolare ho dubbi sugli oggetti Generator in Pyhton e sui parametri di tale metodo, soprattutto su steps_per_epoch (v. fit_generator()). Poi, a martellate, l’ho fatto funzionare…

Comunque, dopo aver corretto una miriade di problemi tecnici, alla prima esecuzione (funzionante!) ho ottenuto, con steps_per_epoch=20, la seguente uscita durante l’addestramento:
 _________________________________________________________________  
 Layer (type)         Output Shape       Param #    
 =================================================================  
 dense_47 (Dense)       (None, 20)        220      
 _________________________________________________________________  
 activation_47 (Activation)  (None, 20)        0       
 _________________________________________________________________  
 dense_48 (Dense)       (None, 10)        210      
 _________________________________________________________________  
 activation_48 (Activation)  (None, 10)        0       
 =================================================================  
 Total params: 430  
 Trainable params: 430  
 Non-trainable params: 0  
 _________________________________________________________________  
 Epoch 1/10  
 20/20 [==============================] - 1s 35ms/step - loss: 11.4159 - acc: 0.2500  
 Epoch 2/10  
 20/20 [==============================] - 0s 1ms/step - loss: 10.7166 - acc: 0.1500  
 Epoch 3/10  
 20/20 [==============================] - 0s 1ms/step - loss: 11.6816 - acc: 0.3500  
 Epoch 4/10  
 20/20 [==============================] - 0s 2ms/step - loss: 11.5668 - acc: 0.3000  
 Epoch 5/10  
 20/20 [==============================] - 0s 1ms/step - loss: 11.4079 - acc: 0.4000  
 Epoch 6/10  
 20/20 [==============================] - 0s 2ms/step - loss: 12.3548 - acc: 0.3500  
 Epoch 7/10  
 20/20 [==============================] - 0s 1ms/step - loss: 12.0055 - acc: 0.4500  
 Epoch 8/10  
 20/20 [==============================] - 0s 1ms/step - loss: 12.2185 - acc: 0.3500  
 Epoch 9/10  
 20/20 [==============================] - 0s 1ms/step - loss: 11.2393 - acc: 0.5500  
 Epoch 10/10  
 20/20 [==============================] - 0s 1ms/step - loss: 11.5122 - acc: 0.3500  
   
Come si può vedere l’accuratezza (*2) non sembra assolutamente convergere….
Poi però ho aumentato steps_per_epoch a 200 ottenendo:
 Epoch 1/10  
 200/200 [==============================] - 1s 6ms/step - loss: 11.6119 - acc: 0.3500   
 Epoch 2/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.4142 - acc: 0.5750  
 Epoch 3/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.5151 - acc: 0.7900  
 Epoch 4/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.3502 - acc: 0.8550  
 Epoch 5/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.6687 - acc: 0.9950  
 Epoch 6/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.5078 - acc: 1.0000  
 Epoch 7/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.2786 - acc: 1.0000  
 Epoch 8/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.0907 - acc: 1.0000  
 Epoch 9/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.3907 - acc: 1.0000  
 Epoch 10/10  
 200/200 [==============================] - 0s 1ms/step - loss: 11.2664 - acc: 1.0000  
   
Qui dalla 6° epoca in poi l’accuratezza risultava massima!

Allora ho provato a fare qualche verifica aggiungendo l’ultima parte di codice.
Una nuova funzione sample() per creare un vettore di 10 numeri casuali che ho confrontato, tramite dei print() col predict() basato sul modello addestrato.
Ah! ho anche creato una funzione somma() per verificare che softmax funzionasse come previsto (ovvero che la somma di tutte le percentuali corrispondesse a 1).
Così ho ottenuto:
 Esempi:  
 [[0.00165925 0.54706793 0.03279361 0.43974022 0.42073148 0.28536211 0.06292913 0.79490123 0.15313805 0.60390858]]  
 [[0.09731148 0.10597415 0.06355619 0.11758436 0.08850987 0.13482948 0.09137243 0.10004369 0.09401508 0.10680328]]  
 1.0000000149011612  
 [[0.30016505 0.50204183 0.76092403 0.62494041 0.512936  0.28072881 0.2103085 0.1174437 0.27243399 0.953455 ]]  
 [[0.14268513 0.08294746 0.07771755 0.13093427 0.10235667 0.10485999 0.09181388 0.07278178 0.09750422 0.09639902]]  
 0.9999999701976776  
 [[0.21122699 0.28753969 0.89949822 0.35109501 0.29346201 0.95339557 0.49435746 0.99354878 0.01448176 0.84808755]]  
 [[0.08441722 0.07368112 0.06456804 0.08632565 0.1038466 0.19162604 0.07344794 0.14045519 0.09820914 0.08342304]]  
 0.9999999850988388  
 [[0.17723921 0.04884328 0.29435293 0.78523847 0.90869309 0.61865404 0.21038514 0.23809492 0.44592849 0.90516956]]  
 [[0.10775398 0.07558212 0.04765695 0.12270646 0.12226721 0.13314444 0.09520464 0.09438299 0.07767287 0.1236283 ]]  
 0.9999999478459358  
 [[0.89644952 0.0573787 0.64280447 0.56323963 0.01383937 0.20340611 0.63202377 0.01243697 0.33693535 0.92840944]]  
 [[0.20072532 0.06654133 0.06988712 0.11413237 0.08207329 0.10415517 0.08122559 0.061967  0.09125605 0.12803675]]  
 0.9999999813735485  
 [[0.16227171 0.37088684 0.51723029 0.5156923 0.47168066 0.72516925 0.02657806 0.30200434 0.33494513 0.15693052]]  
 [[0.09709164 0.08828155 0.07931186 0.10216423 0.1105952 0.13434379 0.09474652 0.10160992 0.1036953 0.08815996]]  
 0.999999962747097  
 [[0.38116618 0.18740264 0.86084261 0.67028089 0.36506087 0.36466077 0.6184897 0.19350823 0.31067974 0.0678281 ]]  
 [[0.10927812 0.07878433 0.10044078 0.11539444 0.10105398 0.11936115 0.11325683 0.08424763 0.10736588 0.07081694]]  
 1.0000000670552254  
 [[0.08857103 0.37228275 0.71509346 0.24248225 0.90751504 0.12114918 0.68641394 0.15519364 0.90995662 0.7746463 ]]  
 [[0.13223796 0.07232565 0.06962329 0.09257585 0.08711651 0.12275507 0.10142472 0.07036604 0.14854519 0.10302974]]  
 1.0000000149011612  
 [[0.48634901 0.50588741 0.31723363 0.6749636 0.32224859 0.6793131 0.18933995 0.25533336 0.82270563 0.1612204 ]]  
 [[0.10887279 0.08330661 0.05775265 0.10981435 0.08519744 0.13596174 0.10652026 0.085779  0.12599134 0.10080389]]  
 1.0000000670552254  
 [[0.37234676 0.25302492 0.08980321 0.57312637 0.9967274 0.41463969 0.28328975 0.84090096 0.99757804 0.26696341]]  
 [[0.11740944 0.07081304 0.04454628 0.10406217 0.08472245 0.12506601 0.10900114 0.10168419 0.12784785 0.11484744]]  
 1.0000000223517418  
   
Beh, almeno softmax funziona! Ma i valori previsti sembrano casuali rispetto agli ingressi forniti (avrei dovuto ottenere valori molto prossimi a 0 tranne che un 1 in corrispondenza del numero più grande). Evidentemente ho ottenuto dell’overfitting anche se non mi è chiaro su cosa: evidentemente la rete non si è addestrata su tutti i 2000 campioni prodotti da batchfier() ma su un suo sottoinsieme anche se non mi è chiaro quale…

Conclusione: adesso che ho una base funzionante devo fare altri esperimenti e: 1. capire come funziona fit_generator(); 2. provare ad aggiungere qualche strato intermedio; 3. cambiare la funzione di loss e l’ottimizzatore; 4. sicuramente mi verranno molte altre idee lavorandoci...

Nota (*1): fra le varie esperienze proposte dal minicorso c’era anche la visualizzazione di della correlazione fra le diverse misure…
Nota (*2): la loss non so invece come interpretarla, probabilmente finito di scrivere questo pezzo, la cambierò con una mse (l’errore quadratico medio)...

domenica 9 dicembre 2018

Dal 1995 (6/??)

Da qualche tempo, come si può facilmente constatare osservando il numero di nuovi pezzi scritti, sto trascurando questo mio ghiribizzo.
Oltretutto avrei da scrivere anche dei pezzi “facili” per queste evenienze: quelli basati sul diario del 1995 oppure quelli sugli articoli meritevoli di marcatore “Wow” (che però, in effetti, mi prendono molto tempo anche se poi mi diverto a scriverli).

Negli ultimi mesi ho trascurato anche la chitarra mentre la stesura della versione 1.1.1 dell’Epitome non procede. Come al solito non saprei dire perché: sono cose che succedono e basta; io seguo il mio umore perché non mi sembra abbia senso fare diversamente…
Beh, negli ultimi giorni sto anche aggeggiando parecchio con Python e reti neurali: qualche giorno fa volevo pubblicare la mia prima “creazione”, un esperimento di rete neurale non privo di interesse, ma al momento non mi funziona (*1)!

Comunque, siccome mi sento in colpa, oggi trascriverò qualche altro pezzetto dalla mia agenda del 1995. Poca roba però perché sono di fretta…

6-10 febbraio
[Come spiegato in Dal 1995 (5/??) riporto una sintesi dei miei incubi infantili. Siccome ci sono dei disegnini dovrei usare lo scannerizzatore ma ovviamente non ne ho voglia. Li rimando quindi a un’altra occasione.]

11 febbraio
SCCF (Strane Cose Che Faccio): Trovo spesso utile per rilassarmi e dormire cambiare posizione e mettendo la testa al posto dei piedi, oppure mettermi per terra sul tappeto.

[Ok, forse questo SCCF avrei dovuto evitare di riportarlo! C’è da dire che all’epoca avevo giganteschi problemi di sonno e tentato un po’ di tutto: in effetti credo di aver provato più volte a dormire al contrario ma sul tappetto (oltretutto iperpolveroso) credo di essercimi steso solo una volta o due!]

12 febbraio
«Non c’è dubbio che questo sia il migliore dei mondi possibili. Ci sono io.» Solomon Short

[gli aforismi di Solomon Short provengono da dei libri di fantascienza del ciclo della guerra contro gli Chtorr. Suppongo quindi che il vero autore sia David Gerrold! Verificando su Internet ho trovato la seguente breve selezione di originali: Solomon Short quotes]

13 febbraio (L)
[Di nuovo sui miei incubi infantili…]

14 febbraio (Ma)
[Niente. Per la cronaca ho scoperto che in tal giorno feci il mio esame più disastroso e traumatico! Vabbè, farò un’eccezione alla regola e ne riporterò un frammento:
«
Poi arrivo fuori dall’ufficio del V. dove si è formato un gruppetto di studenti. Parliamo per far passare la tensione. L’attesa è lunga, i primi 3 non sono andati bene. Alle 11:30 tocca a me: ha inizio il massacro, il professore è nervoso e mi mette subito in difficoltà, è l’inizio della fine. Mi fa domande che ritiene banali. Dopo alcune scene patetiche mi passa alla R. [l’assistente] con la quale vo benino, ma non basta. Il V. è convinto che io della teoria non abbia capito nulla. Ciò non è vero, la mia preparazione era da 24 [modesto!] ma il cattivo umore del professore, la mia sensibilità e soprattutto la mia schifosissima mancanza di abilità ad esporre quello che so, mi sono stati fatali. Inoltre bisogna tenere presente il disgregamento della mia memoria a causa dei farmaci (spero! Ma dovrò indagare) che mi costringe a leggere e rileggere le stesse cose per memorizzarne una frazione, mentre prima mi bastava uno sguardo. Il resto della giornata lo passo molto male.
...
(*2)»]

15-16 febbraio
[Ancora sugli incubi infantili]

17-19 febbraio
[Tutto pieno: non c’è posto per commenti]

20 febbraio (L)
[Di nuovo sui sogni ma finalmente ho smesso di scrivere di quelli dell’infanzia!]
SSS (Strani Sogni Sognati): La cosa che più mi secca riguardo ai miei sogni è la scarsezza di quelli cosiddetti “erotici” che invece, secondo le statistiche, dovrebbero essere molto numerosi. Oltre che rari sono pure brutti [eh sì: la qualità è importante!], ricordano molto quei vecchi film con Alvaro Vitali, Edwige Fenech ecc ecc a stento vietati ai minori di 14 anni.

21 febbraio (Ma)
SSS: anche i sogni diversi dagli incubi tendono a essere piuttosto ripetitivi specialmente nelle ambientazioni urbane e campestri [!?]. In genere questi luoghi sono miscugli di posti reali con l’aggiunta (spesso massiccia) di luoghi immaginari o fantastici. Mi piacerebbe tracciare una mappa del mio universo onirico.

22 febbraio (Me)
SSS: Un sogno che faccio abbastanza frequentemente è ambientato in una F. contorta (tipo Escher) nella quale cerco di raggiungere una libreria dove è presente un vasto assortimento di Giochi di Ruolo [sigh: i miei interessi…]. Io mi muovo con una certa difficoltà fra il liceo, la stazione, piazza San Marco e via Martelli. Di solito, raggiunto l’obiettivo, il problema è tornare a casa in autobus. Di solito scopro con rabbia che il 27 che ho preso non è il B ma il fantomatico “F” che porta tutto da un’altra parte.

Conclusione: alla fine ho scritto più di quanto avevo in mente ma, in realtà, anche se sono pigro quando inizio a scrivere poi mi diverto...

Nota (*1): credo si tratti di un problema tecnico: devo trovare il modo di far capire a Python che una matrice a due dimensioni 10x1 può essere considerata anche a tre dimensioni 10x1x1…
Nota (*2): questo breve frammento dovrebbe aiutare a far capire la mia attuale ossessione per la memoria: vedi i pezzi col relativo marcatore “Memoria”. La medicina in questione era il Surmontil: in teoria avrebbe dovuto aiutarmi a dormire; in realtà non dormivo e in più ne subivo gli effetti collaterali. Secondo il dottore l’unico problema avrebbe potuto essere una diminuzione della concentrazione ma in realtà sia a me che a mia madre (che qualche anno dopo provò lo stesso farmaco) annullava completamente la memoria. Anni dopo lessi un trafiletto di giornale che parlava proprio dei problemi di memoria causati dal Surmontil: curiosamente però, controllando adesso fra gli effetti collaterali su Wikipedia, non ve n’è menzione. Sarò cattivo ma mi viene da pensare che le case farmaceutiche siano brave a nascondere gli effetti collaterali indesiderati…

martedì 4 dicembre 2018

Aggiornamento pitonesco

Come stabilito (v. Pitoni e bachi) ho cercato un minicorso su Keras.
Il mio interesse sta divenendo piuttosto specifico e così anche Google non mi ha dato moltissima scelta: il primo minicorso a cui ho dato un’occhiata è stato Keras Tutorial: How to get started with Keras, Deep Learning, and Python
Ho cercato di capire rapidamente come era impostato e mi sono reso conto che: 1. è estremamente recente (settembre 2018); 2. il tizio che gestisce il sito deve essere estremamente brillante; 3. passaggi molto dettagliati.
Insomma sembrava estremamente promettente ma, sempre nell’introduzione, spiegava come installare, oltre a Keras e TensorFlow, anche un certo OpenCV. Seguendo i vari collegamenti ho scoperto che questo OpenCV e una libreria gratuita per l’analisi delle immagini (infatti il minicorso si prefigge lo scopo di realizzare una rete neurale capace di distinguere fra immagini di cani, gatti e panda!).
Ora, considerando che il progetto è molto interessante, io non ho niente in contrario a installare una libreria in più o in meno, sempre però tenendo presente che il mio interesse è per Keras.
Così ho guardato le istruzioni per l’installazione di OpenCV e mi sono sembrate estremamente complicate: in pratica andava scaricato il sorgente e compilato il tutto sul proprio calcolatore. Così, mentre scorrevo le varie righe di comandi, pensavo ai “soliti” mezzi più semplici come, ad esempio, scaricare una versione precompilata tramite Synaptic e perché non fosse possibili usarli.
In fondo alle spiegazioni l’autore “mi rispondeva” spiegando che usare una versione precompilata “potrebbe anche funzionare” ma 1. non sarebbe stata l’ultima versione disponibile; 2. non sarebbe stata ottimizzata per il nostro calcolatore.
A questo punto mi sono detto: “Questo qui mi fa perdere troppo tempo su dettagli! A me non interesse usare l’ultimo codice disponibile né risparmiare qualche minuto di tempo mentre la rete si addestra: cerchiamo altro!”
Però, in effetti… da oggi (martedì) inizio adesso a pensare che l’autore non avesse tutti i torti…

Così ho provato un altro minicorso: Keras Tutorial: Deep Learning in Python.
Ero molto sospettoso perché questo minicorso si appoggia a un sito che vende corsi in linea e così temevo che fosse incompleto o che comunque, per leggerlo tutto, occorresse registrarsi.
In realtà l’accesso è completamente libero e gratuito e il corso è in effetti molto semplice (sta in un'unica pagina): una parte complessa e difficile per la costruzioni di rete neurali è trovare i dati per allenarla; sia il libro che sto leggendo che il precedente minicorso mettevano l’accento proprio su questo aspetto che però a me, al momento, non mi interessa molto; questo minicorso aggira il problema utilizzando dei dati sui dei vini portoghesi messi liberamente a disposizione da un’università americana. In pratica qui la raccolta dei dati si riduce a importare un paio di archivi in formato CSV…
Inoltre il minicorso è del maggio 2017, relativamente recente quindi, ma comunque mi ha dato ugualmente qualche problema.

Il minicorso era studiato per essere eseguito in linea ma io ho voluto replicare tutti i vari passaggi sul mio calcolatore installando via via quello che serviva (mi sono costruito un ambiente virtuale apposito come sembra sia la prassi con Python). Non ho trovato grossi problemi: ho installato quello che mancava con PIP e ho corretto dei problemi minori nella visualizzazione di alcune immagini (basate su una libreria che, ovviamente, non conoscevo ma che “a martellate” ho fatto funzionare).
Sul finale, quando la rete andava effettivamente addestrata, ho però dovuto installare TensorFlow ed ecco un grosso problema:
The TensorFlow library was compiled to use SSE4.2 instructions, but these aren't available on your machine.

Ho cercato su Google ma il problema non mi è parso di semplice soluzione così ho pensato a qualche alternativa.
La prima cosa che mi è venuta in mente è stato di copiare il codice e i dati nell’ambiente preparato per gli esercizi del mio libro (con l’eventuale idea di copiarmi brutalmente i vari archivi di TensorFlow nell’ambiente che avevo preparato io).
Qui il codice ha funzionato ma ho notato un avviso che nei giorni scorsi mi era sfuggito:
Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1
In altre parole il TensorFlow che mi funziona non usa le istruzioni SSE4.1 (che il mio CPU supporta) mentre il TensorFlow brutalmente installato tramite PIP usa le SSE4.2 (che invece il mio CPU non supporta)!
Ecco perché oggi ho rivalutato il consiglio dell’autore del primo minicorso di compilarsi ogni cosa sul proprio calcolatore: finito questo minicorso ritornerò sul suo e mi installerò, compilandolo come vuole lui, OpenCV…

Ci sarebbero poi da raccontare le mie scoperte su Keras ma ormai ho già scritto abbastanza per oggi…

Conclusione: Ah! Finito questo minicorso ho deciso di leggermi le istruzioni di Keras… io sono infatti uno di quelli che, in genere, non leggono le istruzioni!

domenica 2 dicembre 2018

Pitoni e bachi

Come deciso nella conclusione di Reti smagliate ho guardato con più cognizione di causa cosa avevo a disposizione fra i libri comprati in blocco. Ovviamente nessuno era su Keras come speravo; molti usano il linguaggio R un altro paio il Python e (forse) ce n’è uno anche per Java…
Quindi, seguendo il piano stabilito, mi cercherò un minicorso di Keras in linea prima di proseguire con il libro di esercizi pratici in maniera da capire poi meglio quello che leggerò.
Prima però ho dato la precedenze a un minicorso di Python altrimenti mi sarei trascinato dietro una difficoltà di comprensione del codice molto fastidiosa.

Fra ieri e oggi mi sono quindi studiato un minicorso di Python per chiarirmi degli aspetti del linguaggio che non mi erano evidenti leggendo direttamente il codice.
In verità non mi sono impegnato molto per trovare un buon corso ma ho scelto il primo che mi sembrava decente (tipo il terzo o quarto propostomi da Google), ovvero il seguente: ThePythonGuru.com.
Ho seguito sia la sezione “Beginning Python” che la “Advanced Python”: ciascuna sezione è divisa su più pagine che illustrano specifici argomenti del linguaggio. Sono decisamente superficiali ma danno quell’infarinatura che mi serviva.

Nel pezzo di oggi voglio divertirmi a riportare tutte le stranezze del Python che NON mi sono piaciute (molte altre, e ben di più, le ho invece apprezzate!).

1. le “tuple” vengono definite tramite parentesi tonde.
Questo mi ha confuso molto nella lettura del codice perché le parentesi tonde sono usate anche nelle espressioni e nell’invocazione di funzioni. Contemporaneamente per sequenze e dizionari si usano invece parentesi specifiche (quadre e graffe) e quindi mi sarei aspettato delle parentesi speciali anche per le tuple. Lo so che non ci sono altre parentesi a portata di tastiera ma si sarebbe potuto usare una combinazione di due caratteri, tipo <| e |> per identificarle chiaramente.
Tipicamente quando leggevo il codice non facevo caso a queste parentesi esterne e poi non capivo a cosa si riferissero (ad esempio) le parentesi quadre successive tipo [-10:] (*1). Tutto invece mi sarebbe stato più chiaro, anche a colpo d'occhio, usando delle specifiche parentesi.

2. Separazione fisica delle librerie.
Come spiegato in Python virtualenv Guide per evitare confusione fra versioni diverse della stessa libreria si crea una vero e proprio ambiente di lavoro distinto per ogni progetto.
Non so, suppongo che questa necessità possa derivare dal fatto che di Python ne esistono due versioni fra loro incompatibili: la 2.7 e quelle dalla 3 in poi…
Ma non capisco perché non adottare una separazione logica invece che fisica: cioè nella dichiarazione dei moduli (librerie) usati obbligare a indicare anche la versione voluta.
Invece nella situazione attuale se due progetti usano la stessa libreria questa viene installata due volte negli ambienti dei due progetti!

3. Definizione di variabili private basata sul nome!
Le variabili private di un oggetto sono identificate tramite il doppio underscore iniziale, ovvero __.
Secondo me era più logico e chiaro usare un’apposita parola chiave tipo “private”.
Probabilmente si è scelta la soluzione col __ perché in Python le variabili si possono usare direttamente senza bisogno di dichiararle in anticipo. Ma per le variabili private di un oggetto avrei fatto un’eccezione invece di basarmi sul loro nome per identificarle come tali…

4. Dichiarazione dei metodi di un oggetto con parola chiave “self”.
Nella definizione dei metodi di un oggetto il primo parametro è “self”. Questo parametro non è poi passato quando tali metodi sono invocati.
Suppongo che se un metodo non ha la parola “self” come primo parametro allora sia una specie di metodo statico Java, ovvero non legato alla particolare istanza dell’oggetto ma comune a tutti quelli dello stesso tipo.
Ma se anche questo fosse il caso allora mi sarebbe sembrato più logico identificare questi particolari metodi (usati molto più raramente) con una specifica parola chiave (tipo “static”) e togliere la necessità di inserire il parametro “self” in tutti gli altri metodi...

5. Il comando “yield” per restituire un oggetto di tipo Iteratore.
Suppongo che la necessità di usare una specifica parola chiave sia dovuta al fatto che Python non definisce in anticipo il tipo di una variabile. Non si può quindi scrivere “a” è di tipo Iteratore a tempo di compilazione ma lo si potrebbe scoprire solo a tempo di esecuzione (ad esempio usando la funzione “type”). Quindi se si vogliono effettuare controlli al tempo di compilazione si usa il trucco di usare una specifica parola chiave per identificare il tipo di un oggetto!
Ecco “trucco” mi pare una parola importante nella definizione del linguaggio Python: mi sembra che alcune scelte, a mio parere discutibili, siano state fatte come sorta di trucchi per rendere più semplice la scrittura dell’interprete…

Ah! e poi credo di aver perfino trovato un baco nell’interprete (Python 3.6.7 su linux)!
Ho scritto il seguente programmino in un archivio chiamato “baco.py”:
import pickle

f=open("pick.dat",'wb')
pickle.dump(11,f)
pickle.dump("Mamma mia dammi 100$",f)
pickle.dump([1,2,4,5],f)
f.close

g=open("pick.dat", "rb")
letto=pickle.load(g)
print(letto)
g.close()

Il programmino crea un archivio chiamato “pick.dat” e vi inserisce tre oggetti in formato binario: il numero 11, la stringa "Mamma mia dammi 100$" e la sequenza [1,2,4,5]. Poi l’archivio viene chiuso e immediatamente riaperto. La seconda sezione del codice dovrebbe leggere (e successivamente stampare) il primo oggetto in formato binario dal medesimo archivio, ovvero il numero 11.
Invece si ottiene il messaggio di errore:
Traceback (most recent call last):
File "baco.py", line 10, in
letto=pickle.load(g)
EOFError: Ran out of input

In pratica il tentativo di lettura finisce perché l’archivio è già terminato. Fortunatamente per queste cose ho naso: mi sono immaginato che, per qualche motivo (il baco), l’archivio non venisse aperto alla posizione iniziale ma dal fondo. Allora ho provato a commentare la prima sezione e, in questa maniera, funziona!
Cioè:
import pickle

#f=open("pick.dat",'wb')
#pickle.dump(11,f)
#pickle.dump("Mamma mia dammi 100$",f)
#pickle.dump([1,2,4,5],f)
#f.close

g=open("pick.dat", "rb")
letto=pickle.load(g)
print(letto)
g.close()

Stampa correttamente il numero 11!
Non so, magari il baco è legato alla gestione degli archivi del sistema operativo linux, però… non dovrebbe accadere!

Conclusione: per onestà col Python dovrei anche mostrare le parti del linguaggio che invece mi sono piaciute ma in realtà sono troppe! E comunque mi pare più interessante evidenziare, motivandoli, i dettagli che non mi sono piaciuti…
E adesso mi cerco un corso di Keras!

Nota (*1): queste parentesi quadre non indicano una sequenza ma servono per “sezionare” la tupla. In particolare [-10:] ne seleziona gli ultimi dieci elementi partendo da destra.