Italia Coast2Coast: Portonovo-Orbetello a piedi in 14 mosse

italia-coast2coast-start

Nota per i lettori

Questo è soltanto un breve resoconto scritto una volta tornato a casa e senza grandi pretese, se non quella di un ausilio alla mia memoria quando comincerò a dimenticarmi i dettagli. È anche un modo per raccogliere in un’unica pagina tutte le cartine delle tracce che ho registrato su Wikiloc.
Se avete bisogno di tracce gps accurate per favore scaricatevi quelle di Simone Frignani dal suo sito, perché io non ho fatto altro che seguire le sue accorpando alcune tappe come mi rimaneva più comodo, e a volte ho fatto anche qualche piccolo errore. Vero che ho aggiunto alcune fontanelle e punti di ristoro incontrati lungo il percorso, ma purtroppo non sempre mi sono ricordato di registrarli quindi è una guida tutt’altro che completa.
Se decidete di fare questa traversata in agosto sappiate che in Toscana è difficilissimo trovare posti per dormire senza aver prenotato mesi in anticipo, quindi potreste aver bisogno di una tenda nello zaino e di tanto spirito di adattamento. Io fino all’Umbria ho prenotato sempre dall’ora di pranzo per la sera, e arrivato in Toscana ho iniziato a prenotare con uno/due giorni di anticipo e regolarmi con le tappe di conseguenza. L’eccessiva lunghezza dell’ultima tappa è soltanto figlia del non aver trovato sistemazioni comode a metà strada e della mia notevole resistenza al caldo e alla fatica, ma la sconsiglio sotto il sole di ferragosto e non credo che ripeterei l’esperienza.
Se volete godervi i paesini lungo la strada forse è meglio dividere il cammino in 18 tappe come consigliato dal suo ideatore, io facendolo in quattordici e alzandomi quasi sempre tardi purtroppo attraverso alcuni di questi paesi ci sono passato troppo velocemente o ero troppo stanco per godermeli.

Sull’equipaggiamento

Avevo già un paio di piacevoli esperienze di “camminate lunghe” in compagnia lungo il Cammino di San Benedetto, ma questa è stata la mia prima vera esperienza di cammino, e l’ho fatta da solo.
L’equipaggiamento l’ho preparato tenendo conto di tre fattori: l’essere solo, il non aver prenotato niente e la mia più che discreta resistenza al caldo.

Nello/sullo zaino, un Salewa The Pig 50:

  • tenda monoposto
  • tappetino da palestra arrotolabile
  • sacco lenzuolo in poliestere
  • piccola copertina in pile
  • un bastone da trekking di quelli telescopici
  • scatola di primo pronto soccorso con: acqua ossigenata, qualche pastiglia di tachipirina, cerotti, cerotti per vesciche, steri strip, cerotto a strappo, ghiaccio istantaneo
  • scatola con qualche etto di frutta secca/disidratata
  • due t-shirt tecniche di ricambio, un paio di mutande e uno di boxer (per variare lo sfregamento), tre paia di calzini tecnici, un paio di pantaloncini di poliestere da riposo/ricambio
  • spazzolino e dentifricio, filo interdentale che può sempre tornare utile
  • asciugamani in microfibra, abbastanza grande anche per asciugarsi dopo la doccia
  • un pezzo di sapone di marsiglia per il bucato e, all’occorrenza, per il corpo
  • corda e mollette
  • un paio di Vibram Fivefingers, da usare come scarpe di ricambio e/o da riposo
  • impermeabile, ombrellino e qualche busta di plastica
  • bottiglia di plastica da un litro, riempita a seconda delle tappe

Addosso:

  • scarpe da running Puma Descendant, collaudate ma non troppo usurate (comprate poco più di due anni fa su Amazon a 32€)
  • cappello da pescatore, comodo da mettere in tasca
  • t-shirt tecnica e pantaloni corti con cerniere convertibili lunghi, e tasche laterali
  • libro di Simone Frignani
  • smartphone con le tracce gps di Simone, come software ho usato Wikiloc e GPX Viewer
  • nel portaborraccia: borraccia termica da 0.75 (da riempire a ogni occasione), coltellino e minuscola bussola di emergenza, più un paio di Chupa Chups
  • nel marsupio: macchina fotografica, libro, fazzolettini di carta, cavo caricabatterie e batteria esterna

A conti fatti

Il materassino pieghevole l’ho usato un paio di volte per strada e una volta in tenda ma non lo riporterei, meglio “investire” qualche etto in più per un materassino di quelli autogonfianti così da soffrire meno la notte in tenda.
La macchina fotografica è stato un lusso che ho usato poco, forse bastava il telefono.
Una sera a Sorano ho avuto piuttosto freddo, una felpa leggera avrebbe fatto più comodo della piccola coperta in pile.
Di frutta secca ne ho portata troppa, uno o due etti sono sufficienti ma poi andrebbe usata solo in caso di emergenza.
I medicinali non li ho usati a parte l’acqua ossigenata, ma li riporterei tutti perché viaggiando soli non si può rischiare troppo.
Ho dimenticato di prendere ago e filo e ne ho avuto bisogno.
Il libro sarà che non mi ha preso particolarmente ma non ho avuto mai tempo/voglia di leggerlo, forse anche perché la sera sono stato spesso in compagnia. A conti fatti non so se lo riporterei, in caso forse meglio comprarsi un Kindle.
Non ho preso la protezione solare perché odio metterla, ma forse avrebbe fatto comodo perché mi avrebbe risparmiato una mezza insolazione e quest’abbronzatura da sfigato.
Non ho preso un taglia-unghie perché pensavo non ne avrei avuto bisogno, ma a un certo punto me lo sono fatto prestare da un affittacamere, forse sarebbe bene portarselo.
Non ho preso il deodorante, ma d’altronde l’uomo ha da puzza’.
Considerato che ho viaggiato in estate e senza aver prenotato niente, quindi senza vincoli, forse potevo evitare di portare uno tra l’impermeabile e l’ombrellino. Infatti non li ho usati.

I dubbi più grandi li ho avuti sulle scarpe, ma rifarei la scelta delle scarpe da running. Vesciche minuscole che non mi hanno dato alcun fastidio, e sono andato a velocità impensabili con gli scarponi. Certo ho rischiato qualche distorsione sui terreni più sassosi, e ho aumentato il rischio in caso di incontri ravvicinati con vipere, ma con gli scarponi non sarei arrivato in fondo quindi va bene così.

Le scarpe a fine cammino... arrivato a casa le ho buttate

Le scarpe a fine cammino… arrivato a casa le ho buttate

Per l’acqua mi sono regolato così: sulle tappe lunghe e senza paesini nel mezzo ho cercato di portarmi dietro sempre tutto il carico, quindi 1.75 litri, bevendo prima quella nella bottiglia di plastica (che entrava comunque nel portaborraccia). In caso di dislivelli grandi, di paesini ogni qualche chilometro e/o di tappa fatta prevalentemente di mattina, sono andato con la sola borraccia per risparmiare un chilo di peso.

Sulla preparazione

Mi è sempre piaciuto camminare e quando posso qualche escursione in compagnia la faccio, ma raramente vado sopra i 15km. Due settimane prima di incamminarmi sono andato un paio di volte al lavoro a piedi (17km andata e ritorno) e una volta sul Monte Vettore, e la settimana prima del cammino tutti i giorni al lavoro a piedi. Ho preferito però evitare di passare troppo per uno svitato, quindi al massimo mi sono portato dietro uno zainetto minimale, ben più leggero di quello che ho usato poi sul cammino. Questa cosa l’ho pagata, le prime tappe sono state devastanti per le mie spalle anche a causa dello zaino troppo pesante (10kg e passa) del tutto inadeguato ma che mi piace tanto.
Per piedi e gambe ho usato quasi sempre le scarpe da ginnastica che poi ho usato sul cammino, e una volta le Vibram Fivefingers. Meglio abituarsi a un paio di scarpe e usare sempre quelle, i piedi e i polpacci soffriranno molto meno i dislivelli e lo sforzo dovuto al peso dello zaino.

Le tappe

Premessa: avendo vissuto tutta la vita in zona Jesi conosco bene le prime tappe e non me le sono godute appieno anche per questo motivo.

1) Portonovo – Camerano – Osimo (01/08/2016)


La tappa più brutta, senza forse. Troppi attraversamenti di strade trafficate e paesaggi un po’ troppo urbanizzati.
Ho dormito e cenato a casa di un amico, quindi non ho minimamente studiato la situazione alloggi.

2) Osimo – Filottrano – Appignano (02/08/2016)


Sul guado del Musone confesso di aver imbrogliato accettando il passaggio di un tizio con il trattore che doveva andare dall’altra parte. A Filottrano ho conosciuto il primo coaster, Daniele, camminatore espertissimo ed estremamente preparato che mi ha dato qualche dritta per poi fermarsi a Filottrano.
Bello e difficile il tratto di strada imbrecciata nella Contrada Le Lame, fatta del pomeriggio almeno per me è stato uno dei punti più duri. Avendo avuto la brillante idea di utilizzare le mie Vibram Fivefingers invece delle ben più collaudate Puma Descendant, sono arrivato in fondo con entrambi i polpacci parecchio infiammati sull’esterno.
Ho dormito all’Agriturismo Il Confine: 50€ a mezza pensione, con cena e colazione ottimi e abbondanti a dir poco.

3) Appignano – Treia – San Severino Marche (03/08/2016)


Una delle tappe che mi ha messo più in crisi fisicamente, e non solo a causa della lunghezza. Il tratto di strada prima di arrivare sulla provinciale fatto di pomeriggio è stato tremendo a causa del sole e della mancanza di punti di ristoro, e arrivando a San Severino il colpo di grazia me l’ha dato la salita per arrivare dalle suore. A casa delle suore ho conosciuto Beppe, Luciana e Grazia, camminatori di lunga data.
Ho dormito e cenato all’Istituto delle suore convittrici: 38€ a mezza pensione. Le suore seppur in due e con calcolatrice “si sono confuse” con il resto e mi hanno fregato due euro.

4) San Severino Marche – Pioraco (04/08/2016)


Tappa fatta parzialmente con Beppe, Luciana e Grazia, ritrovati per strada in tarda mattinata… ma poi ci siamo lasciati per vari motivi. Prima di Seppio mi sono perso anche il bastone da trekking che avevo “fissato” allo zaino, e il barista di Seppio mi ride ancora dietro. Subito dopo ho trovato un bel bastone di legno, che opportunamente sistemato con il coltellino si è rivelato un ottimo sostituto. A cena nell’albergo di Pioraco ho conosciuto i due fratelli professori Francesco e Silvia, e poi mi sono dimenticato il cavo caricabatterie in camera…
Ho dormito e cenato all’Hotel Il Giardino: 50€ a mezza pensione, ancora trattato da re con cena e colazione assolutamente eccellenti.

5) Pioraco – Nocera Umbra (05/08/2016)


La tappa, fatta insieme a Grazia, Francesco e Silvia, non sarebbe stata nemmeno troppo difficile, ma credo di essere partito con qualche linea di febbre perché per tutta il giorno sono stato stanchissimo e una volta arrivato a Nocera Umbra mi sono ritrovato sopra ai 38°. La mattina dopo stavo già bene, ma considerato che quel giorno ha fatto il diluvio e la tappa per Assisi sarebbe stata la più difficile, ne ho approfittato per riposare e modificare lo zaino che mi stava sfasciando le spalle. Nel frattempo il buon Jacopo mi ha riportato il cavo dimenticato a Pioraco, e a cena ho conosciuto altri ragazzi, tra cui Emanuele e Claire.
Ho dormito entrambe le notti all’Albergo Europa: 30€ a notte con colazione. Padrone molto gentile, mi ha regalato un asciugamani e un set da cucito per foderare gli spallacci dello zaino.

6) Nocera Umbra – Assisi (07/08/2016)


Forse la tappa con il terreno più vario e difficile, fatta dopo un giorno di pioggia torrenziale non è stata proprio semplice con le mie scarpe da running. Ho rotto quasi subito il mio bastone di legno, ma seppur troppo corto si è rivelato ancora utile e ho continuato a usarlo. A Costa di Trex mi sono ritrovato in una sagra di paese, in cui ho re-incontrato Emanuele e Claire, conosciuti la sera precedente, e con cui ho concluso la tappa. Ad Assisi abbiamo cenato insieme noi tre, Daniele e Jacopo.
Ho dormito all’Ostello della Pace: 18€ con colazione. Economico ma il riposo non è stato dei migliori.

7) Assisi – Bevagna – Gualdo Cattaneo – Marcellano (08/08/2016)


Assisi splendida, Gualdo Cattaneo piccolo ma incantevole, tappa tosta a causa dei dislivelli solo dopo Bevagna
Ho dormito all’Agriturismo Il Cavaliere: 40€ a mezza pensione. Cena eccellente, padroni simpatici e gentilissimi, nota di merito per la signora Umbra che mi ha fatto sentire come a casa.

8) Marcellano – Todi – Acqualoreto (09/08/2016)


A inizio tappa mi sono reincontrato con Daniele, che però si stava fermando perché aveva cominciato da due ore, l’ho reincontrato a Todi insieme a Jacopo, ma ho deciso di proseguire per Acqualoreto. Tappa abbastanza stancante, specialmente l’ultimo tratto.
Purtroppo l’affittacamere che mi aveva detto di non preoccuparmi perché all’occorrenza mi avrebbe dato una camera si è eclissato, e la signora dell’agriturismo che aveva detto mi avrebbe lasciato mettere giù la tenda poi ci ha ripensato.
Ho dormito in tenda avanti a una casa disabitata.

9) Acqualoreto – Civitella del Lago – Corbara – Orvieto Scalo (10/08/2016)


Tappa semplicissima e abbastanza monotona, resa interessante solo dal passaggio vicino al lago e alla diga. La parte tra Corbara e Orvieto Scalo è stata di una noia mortale e con poca ombra, senza alcun tipo di ristoro a parte un agriturismo a metà strada che però al mio passaggio aveva già chiuso la cucina. Sono stato attaccato da un Ufo, forse solo un tafano gigante, che mi ha colpito a una gamba lasciandomi una ferita degna di un pugnale.
Ho dormito all’Albergo New Etruria: 47,30€ con colazione.

10) Orvieto Scalo – Orvieto – Bolsena – San Lorenzo Nuovo (11/08/2016)


L’ingresso a Orvieto l’ho fatto con la funicolare come consigliato nella guida, me ne sono accorto soltanto una volta arrivato sin lì seguendo la traccia gps e non me la sono sentita di andare a piedi.
A pochi chilometri da Bolsena ho ripreso Beppe, Luciana e Grazia, e insieme abbiamo percorso il tratto di trada fino a Bolsena, poi ho proseguito da solo.
Ho dormito al B&B Predio San Fernando di Acquapendente: 40,50€ con colazione. Sono arrivato a Acquapendente, in parte camminando e in parte facendo l’autostop, perché a San Lorenzo Nuovo non ho trovato posti economici per dormire, quindi i chilometri sono trentacinque abbondanti. Il passaggio me l’ha dato una famigliola eritrea, gli italiani naturalmente mi hanno ignorato.

11) San Lorenzo Nuovo – Grotte di Castro – Onano – San Quirico – Sorano (12/08/2016)


Il ritorno da Acquapendente me lo sono fatto a piedi perché l’autostop in assenza della famiglia eritrea di cui sopra non ha funzionato, e il bus non si vedeva. Quindi i km totali sono 37 circa. Notevolissimo l’ingresso nella valle del tufo, il passare di paesino in paesino ha reso la tappa piuttosto semplice.
Ho dormito all’Affittacamere San Marco: 35€ per il solo letto.

12) Sorano – Sovana – Pitigliano (13/08/2016)


Bellissima l’uscita da Sorano attraverso la via cava di San Rocco. Ho visto passare Marco, Daniela e Michele, incontrati poi la sera a Pitigliano insieme a Dario e Pietro.
Notevole anche il passaggio attraverso la Fattoria Aldobrandesca, più di mezz’ora a camminare sul fondo di una vigna.
Dopo Sovana, in cui mi sono ritrovato un caffé offerto dalla proprietaria del bar Simona, ho visto un totale disinteresse verso noi camminatori. L’alta stagione e l’inondazione di turismo della Toscana sicuramente non ha aiutato. Bello anche l’ingresso a Pitigliano, ma meno della via cava di Sorano.
Ho dormito all’Albergo Guastini: 40€ per il solo letto.

13) Pitigliano – Manciano (14/08/2016)


Questa tappa me la ricorderò principalmente per il quasi tuffo che per poco non ho fatto guadando il torrente, perché ho provato a filmare l’ultima parte (più facile) e per poco non mi sbilancio e cado all’indietro. Poi ho iniziato a tirare abbestia per riprendere Marco, Michele e Daniela che erano partiti un’ora e mezza prima di me, e per un bel tratto ho anche tenuto dietro due cavalli tenendo un passo di 6 km/h, che non sono pochi considerando lo zaino, il caldo e i dislivelli.
Ho dormito all’Hotel Miravalle: 45€ per il solo letto.

14) Manciano – Capalbio – Ansedonia – Le Miniere – Orbetello Scalo (15/08/2016)


Tra Manciano e Capalbio mi sono incontrato nuovamente e per l’ultima volta con il trio sopra, e abbiamo camminato per un po’ insieme, finché notando un rallentamento e avendo bisogno di tenere il passo per arrivare presto e potermi riposare li ho lasciati. In teoria avevo trovato un posto in un camping dalle parti di Ansedonia, e dopo aver riposato e mangiato un po’ a Capalbio e essermi fatto una chiacchierata con un vecchio di paese e un altro coaster su due ruote, sono ripartito verso le 14:15 per arrivare ad Ansedonia e in caso proseguire. Nel passaggio in zona di caccia al cinghiale ho notato moltissime tracce del maiale setoloso, ma fortunatamente nessun avvistamento. Il caldo assurdo mi ha fatto venire più di un dubbio, ma arrivato ad Ansedonia ho deciso di provare a concludere cercando di prendere il treno delle 21:45 per Roma da Orbetello. Poco più di un’ora sull’interminabile e un po’ noioso “Tombolo”, breve passaggio sull’Argentario, foto di rito al tramonto a Orbetello, barcollamenti vari per un’altra ora abbondante verso la stazione di Orbetello Scalo e poi via verso Roma.
Ho dormito in un albergo vicino alla stazione Roma Termini.

Tana!

Tana!

Prototipazione (molto) rapida

Qualche tempo fa mi è venuta voglia di fare un corso sulla prototipazione rapida di applicazioni che ho trovato su Udacity, ma negli ultimi tempi non mi è servito fare alcun prototipo… finché al lavoro – meno di un mese fa – non abbiamo dovuto cominciare da zero lo sviluppo di una nuova applicazione per Android.

Corso Udacity sulla prototipazione rapida

Corso Udacity sulla prototipazione rapida

Ci poteva stare lavorare inizialmente a prototipi per definire l’interfaccia utente, ma per evitare frizioni con i colleghi designer e per “risparmiare tempo” ho preferito evitare. Finché un bel giorno mi arriva la notizia di un tirocinante del quarto superiore in cerca di qualcosa da fare per una settimana, al che gli affido il corso web, l’analisi funzionale dell’applicazione da sviluppare e un blocco note.
Ebbene un ragazzo del quarto superiore totalmente nuovo al mondo della UX design dopo tre giorni mi ritorna con un prototipo di applicazione interattiva disegnata con la matita, e negli ultimi due giorni di test e raffinamenti progressivi ci siamo ritrovati con una bozza da cui prendere spunto fatta da un ragazzo inesperto e apparentemente “inutile”.

Per carità, se non si ha bisogno di progettare un’interfaccia utente innovativa e l’applicazione in oggetto sarà uno strumento di lavoro probabilmente può bastare seguire le linee quida del material design e utilizzare solo componenti standard per ottenere un buon risultato. Ciò non toglie però che per definire l’ordine delle voci di menù, la posizione di campi e pulsanti, l’interattività tra le varie componenti, fa comodo capire come ragionano gli utenti tipo dando loro in mano qualcosa da provare, possibilmente prima di mettersi a sviluppare.

Mockup, wireframe, sketch

Di strumenti per disegnare bozze delle proprie maschere ce ne sono tanti. Tra quelli gratuiti e open-source il migliore che conosco è Pencil, ma per la mia (poca) esperienza all’inizio conviene lavorare di carta e penna, o di tavoletta grafica quando se ne ha una.
Gli strumenti consigliati nel corso

InVision

Secondo me i prototipi sono belli se interattivi. Va bene che tutto fa brodo, e anche delle maschere disegnate su un blocco note e mostrate a un potenziale utente sono ottime per raccogliere informazioni, ma non c’è niente come osservare quell’utente mentre cerca di capire i meccanismi dell’applicazione e come raggiungere i suoi obiettivi. Per fare questo il miglior mezzo che ho trovato finora è InVision, e non a caso lo consigliano sul corso.

I tipi di prototipi disponibili

I tipi di prototipi disponibili

Aggiunta di hotspot alle proprie bozze

Aggiunta di hotspot alle proprie bozze

Aggiunta di commenti

Aggiunta di commenti

Chat di gruppo

Chat di gruppo

Condivisione del prototipo

Condivisione del prototipo

In questa breve carrellata ho elencato le funzionalità più interessanti secondo me, dalla scelta del tipo di dispositivo alla condivisione del risultato. InVision si può usare partendo da disegni a matita ma anche da prototipi più fedeli fatti con Pencil o altri strumenti simili, e il suo funzionamento è molto intuitivo. Per chi fa il corso su Udacity dovrebbe esserci anche una licenza gratuita di alcuni mesi, ma anche senza di questa i prototipi si possono fare (in numero limitato) e condividere.
Volendo c’è anche un’applicazione in stile Dropbox che aiuta a mantenere sincronizzate le immagini caricate sul prototipo con quelle sul proprio computer, così da poterle modificare più facilmente.

Per smartphone c’è un’applicazione simile chiamata POP che però secondo me è meno comoda e intuitiva. Un’applicazione web si utilizza più facilmente e InVision è difficilmente migliorabile.

Debug e profilazione di un’applicazione Titanium (e non solo) su Android Studio

Di recente mi è capitato di dover fare un po’ di profilazione di un’applicazione mobile scritta con Titanium per Android, principalmente per accertarmi dell’assenza di memory leaks in alcuni punti.
Su iOS è facile, perché Xcode mette a disposizione tutto il necessario (tempo fa scrissi un articoletto al riguardo), su Android non avevo mai provato.

Avevo notato che aprendo Android Studio e usando l’applicazione in oggetto sul logcat (console dei log) di Android Studio veniva sparato l’output, ma sul fronte RAM e CPU era tutto fermo.
È stato sufficiente mettere a true il flag android:debuggable sul file tiapp.xml e come per magia riavviando l’applicazione e selezionandola sull’Android Monitor i diagrammi sull’utilizzo delle risorse hanno preso vita.
Questa cosa funziona con tutte le applicazioni in cui si può abiltare il flag debuggable sul manifest Android, quindi per esempio anche usando Xamarin.

Il flag incriminato

Il flag incriminato

I pannelli sull'utilizzo delle risorse

I pannelli sull’utilizzo delle risorse

Per completezza aggiungo un articolo sulla documentazione di Titanium che spiega come ricercare i memory leaks su iOS e Android, ma senza menzionare l’opzione Android Studio.
https://wiki.appcelerator.org/display/guides2/Managing+Memory+and+Finding+Leaks#ManagingMemoryandFindingLeaks-MonitoringallocationsonAndroid

Niente di trascendentale ma magari qualcun altro non aveva mai provato.

Su Dio, fede e religione

L’argomento è spinoso e ci ho sempre riflettuto molto, ma in questi ultimi giorni l’ho fatto anche più del solito e mi è venuta voglia di condensare il mio pensiero in qualche riga, anche per chiarirmi le idee.

Da che ho memoria quello che hanno cercato di insegnarmi a casa e al catechismo su Dio, Gesù e compagnia bella non mi ha mai convinto del tutto. Ho sempre cercato di rimanere aperto di mente e di riflettere su questi temi, senza dogmi di nessun tipo, continuando ad andare a prendere tutti i sacramenti fino alla cresima per far contenti la mia famiglia e il mio primo parroco, e ho continuato ad andare a messa per qualche anno anche dopo sempre per non dar dispiacere a casa. Questo lungo percorso non ha mai portato i risultati che speravano i miei familiari e il mio scetticismo sulle argomentazioni cattoliche non ha fatto che aumentare nel tempo.

Mistero della fede

A messa lo dicono sempre, e a me suona quasi come una presa in giro. Ti insegnano fin da piccolo che bisogna credere indipendentemente dalle prove, che San Tommaso si pentì per essere stato scettico, ma non ho mai capito perché.
In un mondo giusto l’onere della prova dovrebbe spettare sempre a chi afferma, e non a chi confuta… ma anche i più grandi teologi quando non sanno dove andare a parare si nascondono dietro ai misteri che la scienza non riesce ancora a spiegare; da un nulla costruiscono tutto un castello di carte su Dio, santi, resurrezioni, assunzioni in cielo, immacolate concezioni e via dicendo, affermando che chi nega dovrebbe fornire delle prove.
piccione
Ma lasciamo per un momento da parte la logica; è vero che tutte queste cose in linea di principio e ignorando tutte le leggi fisiche che conosciamo (dimostrate e non confutabili, almeno in questo sistema che chiamiamo universo) potrebbero essere vere, e magari in qualche universo parallelo lo sono pure, ma non mi entrerà mai in testa il motivo per cui dovremmo dedicare una parte infinitesimale della nostra esistenza a credere in esse o peggio ancora a venerare ipotetici dèi.
Dicono che il pastafarianesimo sia una presa in giro; effettivamente Bobby Henderson si è inventato tutto così, per scherzo, ma la cosa più divertente è che ha utilizzato le stesse strategie usate nelle altre religioni. Stiamo parlando di supposizioni, ma se per ipotesi le idiozie sul pastafarianesimo continuassero a prendere campo e se fra qualche generazione i fedeli pastafariani dimenticassero le vere origini della loro religione, fra qualche secolo potremmo ritrovarci con un’altra religione monoteista al pari del cristianesimo e dell’islam. Per carità, non che questo sarebbe un grosso problema, visto che è una religione senza vincoli e basata sul “volemoce be’”.
cpi-fsm

Paradiso : Carota = Inferno : Bastone

Lasciamo da parte il cattolicesimo per un momento; non sono un esperto ma credo che più o meno in tutte le religioni si prospetti un qualche tipo di ricompensa nell’aldilà per chi si comporta secondo i dettami e di una punizione per chi in vita non ha seguito le regole… il punto è: siamo asini che per muoverci in una certa direzione abbiamo bisogno del bastone e della carota? Non dovrebbe bastare un po’ di etica e di buon senso?
Più di una volta mamma mi ha ripreso dicendomi che in qualcosa bisogna pur credere. Assurdo, perché poi se dici di credere in Babbo Natale o in un mostro volante fatto di spaghetti ti prendono per scemo.
Credo di essere stato cresciuto abbastanza bene da poter discernere tra ciò che posso fare e ciò che dovrei evitare, senza pensare a tavole della legge o a mondi ultraterreni.
Se tutti seguissimo le semplici leggi del “vivi e lascia vivere”, del “fai agli altri ciò che vorresti fosse fatto a te” e del suo duale “non fare agli altri ciò che non vorresti fosse fatto a te” saremmo già a posto.
Non nego che in epoche di ignoranza e credulità diffuse le religioni abbiano avuto un ruolo importante, ciascuna fondata su precetti adatti ai luoghi in cui sono nate, validi per preservare l’ambiente e la salute degli adepti. Continuare però a pensare che senza religioni non possano esserci bravi e onesti cittadini è ingiusto, anche perché spesso è vero il contrario.

Religioni = Onestà, correttezza, giustizia sociale e lieto vivere?

Sarebbe bello se fosse vero, ma purtroppo sembrerebbe vero il contrario. Volevo provare a mettere in relazione la percentuale di credenti/fedeli presenti nei vari paesi con vari indici utilizzando Gapminder, un gioiellino che scoprii qualche anno fa. Tra le miriadi di indicatori utilizzabili i dati relativi alle diffusioni delle varie religioni non sono disponibili, qualcuno sostiene che è preferibile evitare perché dei malintenzionati potrebbero sfruttare alcune correlazioni per perseguire determinate religioni… io temo più che abbiano evitato di gestirle perché altrimenti gli appassionati come me si metterebbero a graficare le magagne delle varie religioni.

Religioni e Gapminder, due mondi che non si sono mai incontrati

Religioni e Gapminder, due mondi che non si sono mai incontrati


Al momento si può soltanto visualizzare con colori differenziati quando una delle maggiori religioni supera il 50% di incidenza, poca roba.

Il cattolicesimo, la confessione, la corruzione

Altra cosa che non capirò mai: perché cavolo un cattolico che si confessa deve potersi considerare purificato dei propri peccati. Un detto piuttosto diffuso in Italia, con varie declinazioni dialettali è “Fai del bene e scordatelo, fai del male e pensaci”, bellissimo, peccato che con la scusa della confessione molte volte la seconda parte venga meno.
Un giorno in una delle mie esperienze da scrutinatore al seggio elettorale ebbi modo di parlare con un carabiniere che era stato parte della scorta di Giulio Andreotti, il quale raccontava di come Il Divo fosse un uomo molto pio e di come andasse sempre a messa, tutti i giorni. Uno degli uomini più potenti e (quasi sicuramente) corrotti della storia italiana era un uomo pio, è un caso isolato?
Guardare delle cartine geografiche colorate a volte aiuta, quindi mi sono andato a cercare due mappe, una con l’indice di corruzione percepita, e una con la percentuale di cattolici nella popolazione. Il perché è presto detto: la corruzione è uno dei quei peccati (a torto) considerati veniali, che si possono facilmente rimuovere dalla coscienza con una bella confessione purificatrice.

Indice della corruzione percepita, 2015

Indice della corruzione percepita, 2015


Percentuale di cattolici nella popolazione, 2010

Percentuale di cattolici nella popolazione, 2010


Ignoriamo l’ex Unione Sovietica, che in ambito religioso è mal censita così come anche l’Africa, continente dai così tanti problemi che è inutile stare a cercarci correlazioni; anche l’Asia non fa testo perché la religione cattolica ad est non ha mai avuto molto peso.
Vero che ognuno vede quello che vuole vedere, e che correlazione non è causalità, ma secondo me osservando i paesi occidentali un minimo di correlazione c’è, specialmente in Europa.
Ho anche l’impressione che la tendenza a pronarsi verso gli uomini di potere – sia in ambito aziendale che politico – sia la stessa che ci porta a inchinarci di fronte a improbabili dèi che potrebbero punirci o premiarci per le nostre azioni…

Vivi e lascia vivere

La mia filosofia di vita e cerco di applicarla sempre, a volte purtroppo senza riuscirci.
Sarebbe un mondo migliore se le persone pensassero di più alle proprie azioni e meno a quelle altrui, e se le leggi fossero scritte per aumentare l’armonia nella società invece che per proibire (specialmente per motivi religiosi) determinati comportamenti che impattano solo sulla sfera privata di chi li compie.
Io non ho mai avuto niente contro chi crede fermamente in qualche Dio o verso chi è convinto della sua non esistenza (anche l’ateismo è una religione a mio avviso), ma mi manda fuori di testa il loro tentativo di farti passare per una cattiva persona se non la pensi come loro.

Sì (con riserva) alla fede, no (deciso) alle religioni

Il punto che mi sta più a cuore: il perché secondo me non ha alcun senso essere credenti praticanti.
Di religioni ce ne sono (e ce ne sono state) innumerevoli, principalmente perché siamo attaccati alla nostra vita come zecche a un cane, e non vogliamo lasciarla nemmeno dopo morti. Poggiano su basi a volte simili a volte completamente diverse, ma i rispettivi fedeli sono tutti convinti di essere nel giusto, e pensano che le altre religioni siano fasulle.
Fare classifiche non serve, per me sbagliano tutte in egual misura. E non parlo dell’esistenza di un Dio creatore, io mi considero più agnostico che ateo, e non mi sento di escluderlo a prescindere.

Caso 1: Dio non esiste

Partiamo dal caso più semplice: se Dio non esiste (intendo nessun Dio) inutile pregarlo, fare offerte, costruire templi e così via.
mother-earth
Il caso più probabile a mio avviso. Dio è una combinazione di eventi naturali, istinto di autoconservazione umano, fortuna. Quello che dovremmo fare è avere più cura del nostro pianeta, essere meno egoisti e favorire di più la fortuna facendo maggiormente ciò che ci piace. Niente preghiere, niente templi.

Caso 2: Dio esiste ma non è quello che pensiamo e ignora la nostra esistenza

Qui il discorso inizia a farsi più interessante. Il nostro “sistema universo” ha avuto il via non si sa bene come, e non possiamo escludere un “intervento esterno”.
L’universo potrebbe essere un qualcosa di insignificante all’interno di un sistema più grande, nato per sbaglio o per gioco o per esperimento.
simpson-genesis-tub
Potenzialmente potremmo anche essere una “simulazione” al computer, come un enorme The Sims o come la realtà simulata di quel capolavoro di film che è Il tredicesimo piano.
In tal caso il nostro creatore non avrebbe niente di realmente divino, e quasi sicuramente non avrebbe idea della nostra esistenza, e se anche ne fosse consapevole non gliene fregherebbe niente di noi o non avrebbe quel potere che pensiamo.
Anche in questo caso inutile pregarlo, fare offerte, costruire templi e così via.

Caso 3: Dio esiste, è consapevole della nostra esistenza, ed è un Dio saggio e benevolo

Ok, i fedeli di alcune religioni hanno ragione, lode a loro. Tralasciamo il fatto che non si sa qual è questo Dio giusto (o ce ne sono di più?) il problema vero è: data la sua saggezza, che bisogno c’è di leccargli il culo? Non basterebbe comportarsi equamente, aiutare chi è in difficoltà, ringraziarlo tra sé e sé quando “la fortuna” ci aiuta?
god-good
Essendo tanto saggio e tanto superiore a noi probabilmente ignorerà le nostre preghiere e cercherà di trattarci tutti equamente in base alle nostre azioni, ma non è da escludere che il nostro servilismo gli dia noia. Tra l’altro se io fossi onnisciente e dovessi giudicare la vita dei miei fedeli per decidere chi salvare e chi dannare darei priorità a chi si è comportato rettamente senza pensare a possibili premi nell’aldilà.
Anche in questo caso dunque inutile pregarlo, fare offerte, costruire templi e così via.

Caso 4: Dio esiste, è consapevole della nostra esistenza, ma è un Dio iniquo e bizzoso

Il caso peggiore. Se fossimo giusti dovremmo fregarcene di Dio, comportandoci sempre in modo giusto senza perdere tempo in avvilenti preghiere e genuflessioni, e facendo la carità nei confronti dei più bisognosi, e non per la costruzione di templi o per stipendiare il clero.
god-mean
Per quanto mi riguarda non sono proprio il tipo che si inchina al capo solo perché è il capo. Ovviamente siamo tenuti a fare il nostro lavoro nel miglior modo possibile. Va bene anche un saluto di riverenza nei confronti di chi direttamente o indirettamente ci dà da mangiare, ma oltre quello non si dovrebbe mai andare.
Non so voi ma io non sono il tipo che venera i potenti, al massimo li stimo e li seguo se li reputo autorevoli.
Anche in questo caso non vedo perché lasciarsi andare in preghiere e costruzione di templi.

In sintesi

Ognuno faccia come meglio crede, evitando però di disturbare (o peggio) le vite altrui. In un mondo in cui gran parte degli eventi naturali erano inspiegabili le religioni purtroppo erano inevitabili e in certi casi anche utili, ma ormai sarebbe meglio evitare di farci condizionare troppo da ipotesi fantasiose e non dimostrabili.
Non dovremmo mai dire che la giustizia è dell’altro mondo né tutte quelle cavolate sulle beatitudini dell’aldilà, che servono solo a far stare al loro posto gli strati più bassi della società. Se non vi piace la vostra vita fate qualcosa per cambiarla, possibilmente senza danneggiare gli altri non per paura di punizioni divine ma per quell’empatia che dovrebbe essere propria di ciascun essere umano.

Su tumori, oncologia, cure alternative e miracoli

Scrivo questo articoletto perché negli ultimi tre anni mi sono fatto una discreta cultura sull’argomento, e so per certo che gli sventurati a cui tocca quello che è capitato a mamma e i loro familiari ci diventano matti per trovare una soluzione… che purtroppo ancora non sembra esserci.
Tumore (neoplasia) al pancreas, una sentenza. Lo si può dire in modi più o meno carini, il punto è che non lascia scampo, e indipendentemente dalle cure che si fanno la mortalità tende al 100% come ci si avvicina ai cinque anni dalla diagnosi, e in pochissimi arrivano a tre. Mamma non ci è arrivata per poco.

Stato attuale dell’oncologia

Nel 2013 ho passato molti mesi a studiare il funzionamento di ospedali e reparti per modellare i dati e gettare le basi di un software gestionale ospedaliero, e mi sono occupato in particolare di oncologia. Dopo molto studio e alcune interviste con medici e infermieri, quando il tutto cominciava ad essere piuttosto corposo, il progetto mi è stato tolto di mano; l’esperienza è stata comunque interessante e ho imparato molto, soprattutto su come “funziona” l’oncologia e sul come vengano “studiati” i protocolli di cura.

Purtroppo l’oncologia brancola ancora nel buio; i protocolli di cura vengono elaborati mescolando veleni chemioterapici più o meno a caso, e per valutarne l’efficacia si usano i malati come cavie aumentando le dosi di un veleno o dell’altro facendo delle statistiche sulla “durata” dei pazienti in base alle varie ricette.
È noto che i principi attivi di quasi tutti i farmaci anche quando assunti singolarmente possono avere effetti molto diversi da un soggetto all’altro, l’idea di mischiare tante di queste cose sperando di centrare l’obiettivo è quindi abbastanza assurda. Utilizzando questi veleni gli unici risultati certi sono gli enormi profitti delle case farmaceutiche, i costi del Servizio Sanitario Nazionale, e la distruzione dell’organismo delle povere cavie, le quali si ritrovano ad avere tutti i problemi di salute possibili immaginabili. Naturalmente i medici ben si guardano dallo studiare le novità nel campo della loro medicina, e continuano a lottare contro un nemico sempre più agguerrito utilizzando armi di provata inefficacia… da capire se spinti dalle case farmaceutiche o dalla loro inettitudine.

Mamma le ha provate tutte, prima la chirurgia e poi ogni genere di chemioterapia e radioterapia che le hanno prescritto al reparto di oncologia. Ha dimostrato una resistenza fuori dal comune e fino all’ultimo ha cercato di “sembrare in salute”, per poi schiantarsi di botto nell’ultimo mese fiaccata dal male e dai continui avvelenamenti. È brutto da dire, ma il suo organismo era così impregnato di tutte quelle schifezze che il suo corpo dopo morta si è anche sformato a grande velocità.
Affermano che le chemioterapie con il passare del tempo stiano aumentando di efficacia perché i malati generalmente vivono più a lungo, nessuno fa notare però che la diagnosi è sempre più precoce e che quindi l’inizio della malattia viene sempre di più “anticipato”; inoltre da qualche tempo i malati vengono indirizzati su percorsi di corretta alimentazione e stili di vita sani.
Chi commercializza e chi propugna le attuali “cure ufficiali” basandosi solo su statistiche abbastanza fasulle dovrebbe essere denunciato per crimini contro l’umanità. Mentire con le statistiche, gran bel libro che consiglio a tutti e che dopo qualche anno forse dovrei rileggere.

Io all’inizio ho cercato di dissuaderla dal percorrere questa strada, ma poi ho rinunciato anche perché convincerla dell’inutilità avrebbe significato annullare anche il possibile effetto placebo.

Le alternative

A mio avviso non ce ne sono di valide. Secondo me finché le case farmaceutiche non capiranno come possono essere fermati i tumori (sempre che non lo sappiano già) si può solo sperare.
Di più o meno certo c’è che l’organismo umano ha un’enorme capacità di guarigione, e spesso tutte le cure alternative si basano sul cercare di spronare l’organismo a dare il meglio di se… l’esatto contrario di quello che fa la chemio.

Digiuni programmati

Da più di una fonte avevo sentito di come dei digiuni intermittenti e non troppo prolungati aiutino l’organismo a ripulirsi, poi lessi che questi digiuni aumentano l’efficacia delle chemioterapie. Secondo me aiutano la chemio solo perché aiuterebbero in ogni caso, e perciò anche gli sventurati che decidono di fare le chemio, ma questa è solo una mia opinione. Di certo c’è solo che i più dei medici ignorano questa cosa, e se gliela dici ti prendono per scemo.

L’aloe

Sinceramente su questo fronte non ci ho capito molto, so solo che a casa mia negli ultimi due anni sono arrivate alcune piante di Aloe, che secondo alcuni ha molte proprietà benefiche e c’è chi lo usa per curare il cancro. Ovviamente l’Airc non è molto favorevole a riguardo.

“Rimedio Pantellini”, l’ascorbato di potassio

Questo Pantellini scopri la sua “cura” per caso, perché un malato terminale non aveva capito cosa il medico gli aveva prescritto per alleviare i suoi dolori.
La preparazione di questo rimedio è piuttosto semplice, ma volendo esiste in commercio il Nike RCK un integratore fatto esattamente in quel modo (non a caso). Una scatola contiene cento coppie di bustine, e cento giorni di “terapia” costano 50€.
Qui il concetto è che il tutto si riconduce a una forte azione antiossidante, e nessuno lo spaccia per un rimedio antitumorale, ma al massimo come strumento di prevenzione.
Noi ne abbiamo sentito parlare all’ultimo e ci abbiamo provato per qualche settimana, ma era veramente troppo tardi.

Varie ed eventuali

Di cure alternative ce ne sono tante altre, e la prima che mi viene in mente è il Metodo Di Bella.
Sinceramente non so che pensare, credo solo che in alcuni casi si tratti di sciacallaggio, e in altri di reali convinzioni dei loro ideatori, anche corroborate da reali guarigioni. Da capire se queste guarigioni ci sarebbero state in ogni caso.
Se dovessi buttarla a cure alternative mi ispirerebbe più fiducia il rimedio Pantellini, se non altro non è niente di brevettato, passa per un integratore alimentare e costa un’inezia, quindi se c’è chi lo pubblicizza è improbabile che lo faccia per guadagnarci tanto sopra.

Dio e i santi

Forse un giorno cercherò di sintetizzare il mio pensiero su Dio, i santi e le religioni in un articolo, ma non è questo il momento. Dico soltanto che mamma ne ha visitati tanti di santuari, ed è sempre stata una credente praticante. A casa ci sono sempre stati santini e immagini sacre, e negli ultimi tre anni sono aumentati.

I miracoli

I miracoli di guarigione a mio avviso sono eventi molto rari che possono scatenarsi per una combinazione di vari fattori:
– grande voglia di vivere, magari non per se stessi ma per gli altri, che può portare a un forte effetto placebo
– diagnosi sbagliate, in cui il problema potrebbe essere giudicato più grave di quello che è realmente
– interruzione dell’assunzione di qualcosa che ha scatenato il problema
– assunzione di qualcosa di benefico, fossero anche soltanto vitamine
In generale se qualcuno che conoscete sta cercando di guarire anche con la preghiera lasciatelo fare, nella peggiore delle ipotesi sarà inutile, nella migliore potrebbe aiutare.

Il mio punto di vista

Non vi saltasse in mente di prendere per oro colato il mio parere, che deriva solo dalla mia esperienza durante la progettazione dell’erp per un reparto di oncologia, dalla malattia di mia madre e da qualche ricerca sul web. (Per fortuna) non sono un medico, una categoria che reputo veramente troppo lontana dalla scienza, e che almeno nel mio caso si è spesso rivelata inetta. Generalmente prescrivono ai malati o quello che vogliono gli sventurati, ciò che hanno letto nei libri (chissà quanti anni prima) o quello che gli è stato detto dai rappresentanti di turno (ovvero dalle case farmaceutiche). Mi considero però un buon analista, e adoro studiare i problemi per cercare di risolverli.

I tumori ci sono sempre stati. Un tempo non erano diagnosticati, la gente si ammalava (anche inconsapevolmente) e guariva, o moriva di “malaccio” o di “dioceguarde”. Ultimamente sembrano essercene di più, ma forse solo perché la popolazione è in costante aumento e perché i tumori non passano più inosservati. A mio avviso stiamo avvelenando il pianeta in maniera vergognosa, e mettiamo in circolo sempre più sostanze di cui non si conoscono gli effetti a lungo termine, men che meno combinati tra loro. Generalmente i tumori sembra abbiano un’incidenza maggiore nelle città molto inquinate, nelle vicinanze degli inceneritori (per favore non chiamateli termovalorizzatori) e nelle campagne fortemente coltivate.
Temo che i pesticidi utilizzati nella viticoltura e non solo, combinati tra loro e poi respirati e assunti con i cibi o con l’acqua proveniente dalle falde acquifere inquinate siano a dir poco devastanti. Un bel thriller sull’argomento: Micheal Clayton. Le polveri sottili generate da combustioni a temperature sempre più alte (inceneritori/fabbriche/marmitte dei mezzi di trasporto), non sono da meno.

In sintesi: triste a chi tocca.
Lo sventurato dovrebbe secondo me per prima cosa cercare di vivere di più invece di preoccuparsi di non morire, e questa cosa vale per tutti, non solo per chi è malato di tumore («vegliate perché non sapete né il giorno né l’ora»).
Chi ha voglia di lottare un po’ per allungare la propria esistenza può provare con i digiuni programmati, dieta sana con poca carne e molte verdure crude, con l’assunzione di forti antiossidanti, molte vitamine, aria buona e un po’ di attività fisica tranquilla. Delle attuali cure canoniche l’unica che per me ha senso è la chirurgia, il resto è un tirare a indovinare.
Finché non ci saranno rimedi di sicura efficacia l’unica cosa che possiamo fare e cercare di irrobustire l’organismo per aiutarlo in questa difficile battaglia… non possiamo colpire il nemico né mandare i rinforzi, ma nessuno ci impedisce di rendere il campo di battaglia più adatto alle nostre truppe e di rinforzare il nostro esercito. Buon senso, niente di più.

Un primo buon proposito per l’anno che verrà: meno Facebook

Stamattina mi sono svegliato e dopo aver “consultato” Facebook sul mio smartphone ho fatto una cosa che non avevo mai osato fare prima: mi sono disconnesso dall’app.

fb-login

Non so voi ma a me tutta quella gente che scorre Facebook ogni momento da fastidio, specialmente quando sono in compagnia; anche se in misura minore il problema riguarda pure me, quindi da oggi a ogni consultazione seguirà un logout. Magari così l’utilizzo di uno strumento molto utile diventerà un po’ meno compulsivo e alienante.

Buon Navale

Il json-schema: forse non una gran soluzione ma a volte può tornare utile

Sono consapevole che documentare e validare i dati anziché la sorgente che li genera potrebbe non essere l’approccio migliore, di recente mi è però capitato di dover mettere in piedi un backend “estremamente lean” (eufemismo per dire che è tutto basato su un file json), e generare un json-schema per verificarne la correttezza mi è sembrato doveroso…

Ma facciamo un passo indietro: l’applicazione mobile “backend-free”

A tutti quelli che fanno questo mestiere prima o poi vengono idee su possibili applicazioni web/mobile da sviluppare per esigenze personali, come progetto di studio o ancora meglio perché vogliamo vedere se la cosa può prendere campo, ma il tempo libero è poco e lo sviluppo di front-end e back-end può significare una mole di lavoro tale da farci lasciar perdere. Ci sono però casi in cui i dati sono pochi e non troppo preziosi, al che mettere inizialmente un file json su una cartella web può essere sufficiente.
Una soluzione che mi è sembrata molto comoda almeno nella fase di “sondaggio del mercato” è quella di copiare il/i file json su una cartella Dropbox, copiarne il link e utilizzare quello come url del nostro “servizio web dei poveri”. Nota: se utilizzate Dropbox è necessario che l’url sia nella forma https://dl.dropbox.com/..., se al posto del “dl” lasciate “www” al vostro client arriva non il file json ma la pagina html di visualizzazione di Dropbox.
Se Dropbox non vi piace di alternative simili ce ne sono tante, oppure se avete uno spazio web potete usare quello, a me però piace Dropbox anche perché non ho limiti di traffico, posso gestire i dati in vari modi, e il rischio che il server “vada giù” è praticamente nullo.
Detto che una soluzione del genere può andar bene soltanto se l’idea che qualcuno vi copi tutti i dati non vi spaventa, la scomodità maggiore è la totale mancanza di qualcosa che vi faciliti nell’inserimento e la manutenzione dei dati, cosa che può portare a inserire dati in un formato non corretto con inevitabili malfunzionamenti sulla vostra applicazione client. Ecco quindi che entra in scena il json-schema.

Il json-schema, sempre di json si tratta

Iniziamo con il dire che così come l’xml-schema è un xml, il json-schema è un json, e allo stesso modo compilarlo è una scocciatura. Il sito web di riferimento per i json-schema è json-schema.org, sito bruttarello ma pieno di risorse.

Sebbene l’idea di scrivere prima o poi uno schema ce l’avessi avuta fin dall’inizio, mi sono ritrovato a farlo soltanto quando la struttura dati era più o meno formata (seppur con dati mock). Mettersi a scrivere lo schema tenendo di fianco i dati è abbastanza noioso e non è nemmeno facile, infatti sono arrivato a un punto che il linter mi segnalava lo schema come non valido e non sapevo il perché.

Alla fine l’approccio che ho seguito è stato il seguente:

  1. scrittura di un json con almeno qualche elemento completo, così da avere dei dati con tutti i casi particolari
  2. generazione dello schema utilizzando un servizio come jsonschema.net; l’importante è che venga fuori una struttura “abbastanza aderente” a quello che avete in mente
  3. pulizia dello schema dagli artefatti inutili e copia in un linter come jsonschemalint.com insieme ai dati
  4. rifinitura dei dettagli relativi ai tipi, gestioni dei valori null, eventuali regex sulle stringhe; descrizioni sui campi meno chiari
  5. eventuali modifiche ai dati per rendere la struttura più uniforme
  6. se serve che qualcuno poco familiare con il formato json “capisca” i dati può essere utile generarsi una documentazione a partire dallo schema, Docson è semplice da usare e da un buon risultato

Qualche dritta sui json-schema

A questo punto è doveroso un esempio riepilogativo con quasi tutte le funzionalità che sono servite a me, così almeno sapete a cosa andrete incontro…

{
  "data": "2015-12-03T00:00:00",
  "lista": [
    {
      "id": 1,
      "nome": "Articolo 1",
      "email": null,
      "tipo": "tipo1",
      "classe": 1,
      "flag": true,
      "figli": [
        {
          "data": "2015-08-16",
          "note": "blablabla"
        }
      ]
    }
  ]
}
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "description": "Esempio",
  "type": "object",
  "properties": {
    "data": {
      "description": "Data con formato yyyy-MM-ddTHH:mm:ss",
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$"
    },
    "lista": {
      "description": "Lista di oggetti",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Identificatore univoco",
            "type": "integer"
          },
          "nome": {
            "type": "string"
          },
          "email": {
            "type": ["string", "null"],
            "format": "email"
          },
          "tipo": {
            "description": "Tipologia a scelta tra tre valori",
            "type": "string",
            "enum": ["tipo1", "tipo2", "tipo3"]
          },
          "classe": {
            "description": "Classe con valore numerico da 1 a 5",
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
          },
          "flag": {
            "description": "Flag booleano",
            "type": "boolean"
          },
          "figli": {
            "description": "Elenco di oggetti figli",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "data": {
                  "description": "Data con formato classico yyyy-MM-dd",
                  "type": "string",
                  "format": "date"
                },
                "note": {
                  "type": ["string", "null"]
                }
              },
              "additionalProperties": false,
              "required": ["data"]
            },
            "additionalItems": false
          }
        },
        "additionalProperties": false,
        "required": ["id", "nome", "tipo"]
      },
      "additionalItems": false
    }
  },
  "additionalProperties": false,
  "required": ["data"]
}

Un esempio abbastanza ricco, e che fa capire quanto uno schema possa venire “corposo” anche quando si riferisce a un json quasi insignificante.

  • campo data di primo livello: classica regex definita con l’attributo pattern, in cui però non si possono usare i classici segnaposto \d, \s
  • campo lista di primo livello: array di oggetti, attenzione perché questo è il modo in cui si gestiscono “oggetti uniformi” (caso tipico secondo me), si possono gestire anche oggetti diversi ciascuno in una posizione dell’array
  • campo email di secondo livello: stringa ma che accetta anche valori null, il formato dell’email viene validato con l’attributo format anziché con una regex (altri formati ammessi sono date, time, date-time
  • campo tipo di secondo livello: enum, ovvero stringa ma che può assumere solo determinati valori
  • campo classe di secondo livello: valore intero con limiti max e min

Da notare come il valore null debba essere inserito esplicitamente tra i tipi ammessi nonostante il campo che accetta null non sia specificato nell’elenco dei campi required.

Conclusioni

Come dicevo all’inizio la scrittura di un json-schema secondo me dovrebbe e potrebbe essere evitata definendo e documentando opportunamente le api che generano i dati. In alcuni casi è comunque uno strumento che può tornarci utile: non solo può aiutare nei casi limite come quello di un’applicazione nello stadio iniziale con dati gestiti in modo minimale, ma anche quando i dati sono in possesso di soggetti terzi che non ne hanno particolare cura o che non ci forniscono appropriata documentazione l’idea di generarci uno schema può aiutarci a evitare spiacevoli inconvenienti, anche perché nessuno ci vieta di utilizzarlo nei nostri test di integrazione, per la serie “fidarsi è bene…”.

Set di icone monocromatiche? Praticamente un font…

inkscape-icon

Purtroppo è da parecchio che non sto più tanto dietro allo sviluppo web, e quindi alcune “novità” tendono ad arrivarmi tardi (leggero eufemismo). La tendenza di usare icone monocromatiche su applicazioni web non è cosa recente, e la somiglianza tra la lettera di un font e un’icona monocromatica è stata notata da tempo, tanto che almeno dal 2010 c’è chi ha avuto l’idea di realizzare “font di icone” per utilizzarle come “icone vettoriali” sul web.
A me questa cosa è arrivata soltanto cinque o sei mesi fa quando mi è stato mostrato Font-Awesome. Mea culpa.

Set di font come se piovesse

Non è mai facile stabilire se sia nato prima l’uovo o la gallina, di certo c’è che le icone sono sempre più monocromatiche, e di set di font con icone di ogni genere ce ne sono ormai una marea. Purtroppo regala’ è morto, e l’utilizzo della maggior parte di questi pacchetti impone il pagamento di licenze o l’inserimento degli autori nei credits/ringraziamenti, a meno di non utilizzare quei set rilasciati con licenza Creative commons che sono originali come l’acqua calda.

Font custom, Inkscape e Icomoon

Tra gli strumenti per realizzare immagini vettoriali uno dei più usati è Inkscape (gratuito e open-source), ma non tutti sanno che in Inkscape è presente anche un editor di font con cui è possibile “raggruppare” dei glifi assegnando a ciascuno un “carattere”, realizzando di fatto un font.
Qui una bella guida sul tema, mentre qui si può trovare un progetto Github con risorse utili per crearsi i propri font.
inkscape-font-editor

Ricapitolando: con Inkscape – partendo da immagini vettoriali – si può arrivare a creare un “font svg” convertibile poi in TrueType (ttf) tramite strumenti esterni. E se non si ha voglia di fare tutti questi passaggi? Come è logico aspettarsi ci sono delle alternative.
Una strada è quella di installarsi un editor di font come FontForge, importarsi i propri glifi svg (opportunamente modificati), e crearsi il font a mano.
Strada più semplice è quella di rivolgersi a un servizio online. Ne ho provati alcuni (tra cui Fontastic), e alla fine l’unico che mi ha sempre importato gli svg e esportato i font correttamente senza distorsioni o ridimensionamenti strani è stato IcoMoon.
icomoon
IcoMoon è di una semplicità disarmante: si selezionano delle icone prese da librerie gratuite/a pagamento messe a disposizione dal sito o tra quelle importate da noi stessi e le si esportano in un pacchetto contenente il font in vari formati più tutte le risorse utili, con possibilità di configurarne anche i codici/nomi delle classi css e adattarne le dimensioni.

“Icone vettoriali” in Titanium

Veniamo alle origini di quest’articolo, visto che come dicevo all’inizio lo sviluppo web purtroppo l’ho abbandonato da un po’ di tempo.
Nel mondo dello sviluppo mobile un problema piuttosto sentito è quello della preparazione di icone e immagini alle varie risoluzioni per una buona resa su tutti i dispositivi che si ha intenzione di gestire. Il problema è ancora più marcato nello sviluppo multipiattaforma perché android e ios (per dirne due) seguono convenzioni dei nomi che non c’entrano niente l’una con l’altra, oltre a girare su dispositivi che gestiscono risoluzioni diverse.
Da un’esigenza nasce (quasi) sempre una soluzione, e in Titanium una parziale soluzione l’ha proposta uno degli sviluppatori di riferimento per questa piattaforma – Fokke Zandbergen – che ha dato alla luce TiCons.
Con TiCons si possono generare le icone dell’app e gli splash screens per tutti i dispositivi, ma la gestione delle immagini usate “all’interno” dell’app resta responsabilità nostra. Per far questo bisogna solitamente ingegnarsi con ImageMagick, che permette di fare velocemente elaborazioni anche complesse a grosse quantità di immagini tramite scripts. Questa cosa però è noiosa e così spesso si finisce per usare immagini con risoluzioni non adatte.

In una delle applicazioni di esempio corporate-directory si vede come sia possibile utilizzare “icone vettoriali” al posto di quelle raster semplicemente aggiungendo il nostro “font contenente le icone” all’interno della directory app/assets/fonts, impostando la proprietà font.fontFamily uguale al nome del font che abbiamo aggiunto e settando la proprietà testuale (es: “text” per le Label o “value” per i TextField) uguale al codice del carattere che rappresenta la nostra icona… più difficile a dirsi che a farsi, basta guardare l’esempio.

Un "esempio riepilogativo" con tutti i pezzi

Un “esempio riepilogativo” con tutti i pezzi

Gli effetti positivi di questa soluzione sono evidenti:

  • miglior renderizzazione delle immagini
  • minor dimensione delle applicazioni
  • possibilità di modificare dimensioni e colori delle icone velocemente e anche a runtime
  • nessun problema in caso di installazione su dispositivi non previsti inizialmente
  • possibilità di cambiare tutto il set di icone anche a runtime semplicemente modificando il nome del font in una classe tss
  • probabilmente ce ne saranno altri che non mi vengono

Un limite è che questa cosa si può fare solo su quel tipo di componenti dove il font (e quindi il font-family) è modificabile, questo significa che per i Tab e forse anche altrove purtroppo bisogna continuare a usare delle immagini raster.

Imparata questa tecnica mi è venuta voglia di usarla dappertutto… non appena sbatterò il muso da qualche parte aggiornerò quest’articolo, per il momento mi godo tutti i punti di cui sopra.

Da Appcelerator Studio a Atom: passaggio abbastanza indolore

Chi sviluppa con Titanium sa che in questo mondo – che poi è solo un sottoinsieme del mondo Javascript – c’è chi utilizza la command line e l’editor/ide di preferenza, e chi preferisce rimanere al calduccio utilizzando tutti e solo gli strumenti messi a disposizione da dalla casa-madre Appcelerator, ovvero Appcelerator Studio.
Appcelerator Studio in se non sarebbe troppo male, il problema è che una versione modificata (e neanche troppo bene) di Eclipse si porta quindi dietro la sua estensibilità ma anche la sua pesantezza. In più a volte ti si blocca mentre stai facendo operazioni banali come aggiungendo stringhe al file strings.xml costringendoti a buttare giù tutto e facendoti perdere del lavoro (le bestemmie che ho tirato giù a causa di questo problema sono veramente tante).
A volte succede anche che l’integrazione con gli stessi servizi di Appcelerator smettano di funzionare, ed è noto come la recente impossibilità di fare build su iOS abbia seminato il caos e costretto molti a un utilizzo più consapevole della CLI.

Sublime? No, Atom

Buona parte dei migliori sviluppatori che conosco, e che hanno a che fare con Titanium, si affidano a Sublime Text, un editor (termine riduttivo) veramente veloce e ben fatto. Per Sublime ci sono plugin di ogni genere, e Titanium non fa eccezione:
https://github.com/AoDev/ti-alloy-in-sublime-text-2
https://github.com/MattTuttle/sublime-ti-build
A me però non va di pagare per utilizzare un editor non open-source, e il simpatico messaggio che compare sempre più spesso con cui invitano ad acquistare una licenza mi da abbastanza fastidio.
sublime-purchase-alert

Chi non usa Sublime ha due grosse alternative: Atom e Visual Studio Code. L’editor di Microsoft (ancora in preview) è molto bello e funziona bene specialmente con linguaggi della galassia Microsoft (vedi Typescript), ma per il resto forse gli è preferibile Atom, giunto da poco alla versione 1.0 e con una miriade di plugins che aumentano e migliorano giorno dopo giorno.

Configurare Atom con il minimo necessario per sviluppare con Titanium

atom
Scelta fatta. Per programmare in Javascript potenzialmente basterebbe un blocco note, e per fare le build con Titanium c’è la CLI, però magari utilizzare qualche aiuto potrebbe non essere una cattiva idea.
Per avere un minimo di auto-completamento ho installato questo plugin che funziona bene:
https://atom.io/packages/titanium-alloy
che ha anche un’integrazione con hyperclick:
https://atom.io/packages/hyperclick

Auto-completamenti e auto-formattazioni non mi hanno mai fatto impazzire, ma un check statico del codice in tempo reale che segnali eventuali imprecisioni ma anche errori e pratiche di cattiva programmazione mi è sempre piaciuto averlo, e su Appcelerator Studio i linter latitano o funzionano male. Un linter è prezioso nel mondo javascript specialmente quando si lavora in squadra, perché sebbene in questi casi si tenda a scrivere in modo simile spesso non lo si fa abbastanza.

In Atom non solo si può installare ESLint, ma si può creare un file di configurazione del linter per ogni progetto.
https://atom.io/packages/linter
https://atom.io/packages/linter-eslint

{
	"globals": {
		"Ti": false,
		"Titanium": false,
		"Alloy": false,
		"$": false,
		"_": false,
		"L": false,
		"arguments": false,
		"require": false,
		"module": false,
		"exports": true,
		"OS_ANDROID": false,
		"OS_IOS": false,
		"ENV_PRODUCTION": false,
		"ENV_DEV": false,
		"setInterval": false,
		"clearInterval": false,
		"setTimeout": false,
		"clearTimeout": false,
		"alert": false,
		"describe": false,
		"it": false,
		"beforeEach": false,
		"afterEach": false
	},
	"rules": {
		"strict": [2, "never"],
		"new-cap": [2, {"capIsNewExceptions": ["L"]}],
		"no-trailing-spaces": [1, { "skipBlankLines": true }],
		"space-infix-ops": [1, {"int32Hint": false}],
		"comma-spacing": [1, {"before": false, "after": true}],
		"key-spacing": [1, {"beforeColon": false, "afterColon": true}],
		"semi-spacing": [1, {"before": false, "after": true}],
		"dot-notation": 1,
		"no-underscore-dangle": 1,
		"no-unused-vars": 1,
		"no-multi-spaces": 1,
		"quotes": [1, "double"],
		"eol-last": 0,
		"no-alert": 0
	}
}

In “globals” si elencano le variabili globali, specificando anche se possono essere assegnate oppure no.
In “rules” si specificano le regole di validazione, indicando se eventuali infrazioni vanno segnalate in rosso come errori (con il 2) o in giallo come warnings (con l’1). Lo 0 le disabilita.
Qui sono elencate tutte le regole di validazione di ESLint.

Altri plugins utili per Atom

Di estensioni ce ne sono una marea, e ognuno ha le sue esigenze, ma finora che mi sono piaciute ce ne sono due in particolare.
Un terminale integrato:
https://atom.io/packages/Termrk
E un project-manager che facilita il passaggio da un progetto all’altro:
https://atom.io/packages/project-manager

Titanium CLI

Come tutti sanno dalla CLI si può fare tutto quello che si fa con Appcelerator Studio. In teoria.
Una cosa che da quanto ne so funziona su Studio ma non sulla CLI è il LiveView, o almeno a me funziona solo su Studio, quando funziona.

Per fare le build io nella mia quasi totale incapacità di scrivere per bash mi sono creato questo script, semplice ma abbastanza efficace. Non è gestito il –liveview perché tanto non funziona.

# The platform: ios or android
PLATFORM=$1
if [ "$PLATFORM" == "" ]; then
	PLATFORM="android"
fi

# The target: device, simulator (ios) or emulator (android)
TARGET=$2
if [ "$TARGET" == "" ]; then
	TARGET="device"
fi

# Y for choosing destination, N for the default
CHOICE=$3
if [ "$CHOICE" == "" ]; then
	CHOICE="N"
fi

if [ "$CHOICE" == "Y" ]; then
	appc ti build --platform $PLATFORM --log-level debug --target $TARGET --skip-js-minify --device-id
else
	appc ti build --platform $PLATFORM --log-level debug --target $TARGET --skip-js-minify
fi

Per fare i deploy (ipa e apk) invece mi sono fatto questo script, forse anche più brutto del precedente:

SRC_PROJECT_NAME="My Project"
DEST_FILE_NAME="MyProject"
OUTPUT_DIR=~/Documents/$DEST_FILE_NAME
ANDROID_OUTPUT_DIR=build/android/bin
IOS_DIST_NAME="My company"
IOS_DIST_UUID="................"

mkdir -p $OUTPUT_DIR

appc ti build --platform ios --build-only --force --log-level info --device-family ipad --target dist-adhoc --distribution-name $IOS_DIST_NAME --pp-uuid $IOS_DIST_UUID --output-dir $OUTPUT_DIR
mv $OUTPUT_DIR"/$SRC_PROJECT_NAME.ipa" $OUTPUT_DIR"/$DEST_FILE_NAME.ipa"

appc ti build --platform android --build-only --force --log-level info
cp $ANDROID_OUTPUT_DIR"/$SRC_PROJECT_NAME.apk" $OUTPUT_DIR"/$DEST_FILE_NAME.apk"

Conclusioni

Appcelerator sembra sulla via del tramonto, opinione diffusa anche nella community. L’aumento di stabilità su Android negli ultimi mesi/anni è evidente e le prestazioni non sono malaccio, ma l’esperienza di sviluppo è pessima rispetto ad altre piattaforme, e il quasi totale abbandono della “gratuità” di sei mesi fa le hanno fatto fare dei passi indietro tra le preferenze degli sviluppatori.
Forse si riprenderanno o forse no, resta il fatto che iniziare a utilizzare con profitto strumenti più generici e utilizzabili anche in altri ambiti può non essere una cattiva idea.
Magari dobbiamo continuare a usare l’SDK di Titanium sui nostri progetti, ma fortunatamente (ancora) nessuno ci obbliga a utilizzare tutti gli strumenti di sviluppo di Appcelerator.

Snellire la libreria google-play-services.jar con Android ProGuard

L’altro giorno stavo cercando di gestire i Google Analytics in una semplice applicazione mobile che sto sviluppando per conto mio con Titanium, ma quando sono andato ad aggiungere il modulo ti.ga non sono più riuscito a compilare niente a causa di un errore dovuto evidentemente a dei conflitti tra librerie.

L’errore di compilazione era questo:
[ERROR] : UNEXPECTED TOP-LEVEL EXCEPTION:
[ERROR] : java.lang.IllegalArgumentException: already added:Lcom/google/android/gms/maps/LocationSource;

Cercando in giro ho avuto la conferma che il problema era dovuto all’inclusione di una libreria google-play-services.jar all’interno del modulo, che faceva a cazzotti con quelle usate in un altro modulo importato nel mio progetto: ti.map.
Per completezza è necessario dire che la libreria ti.map – insieme alle altre native di Titanium – è accessibile in /Utenti/m.piccotti/Library/Application Support/Titanium/modules/android.

Classi duplicate, che fare

Il problema è comune e in molti sul web se ne lamentano, non solo parlando di Titanium e di questi moduli. Ovviamente non si può pensare di eliminare la libreria contenente le implementazioni delle api necessarie al modulo, ma lì per lì non sapevo che fare, finché non ho guardato meglio un altro modulo che mi serviva: ti.admob.
A differenza di ti.map il modulo ti.admob va tirato giù da GitHub e importato nel progetto, quindi mi è balzata all’occhio la presenza delle librerie google-play-services-base.jar e google-play-services-ads.jar; guardando il log ho notato il messaggio che mi interessava:
[DEBUG] : Skipping duplicate jar file: project_directory/modules/android/ti.admob/2.1.6/lib/google-play-services-base.jar

In sostanza Titanium evita l’importazione di librerie duplicate, ma la google-play-services.jar presente all’interno del modulo ti.ga non risultava duplicata ai controlli di Titanium, e il risultato era una duplicazione delle classi Android in fase di compilazione in presenza del modulo all’interno del progetto.

La soluzione

Quando non si sa dove sbattere la testa conviene sempre fare come gli altri, ho quindi preso la libreria google-play-services_base.jar dal modulo ti.admob (sviluppato da quelli di Appcelerator), e mi sono andato a cercare un jar contenente solo le librerie di Google Analytics. Naturalmente non ho trovato niente di simile, ma ero sulla strada giusta.

Pulizie manuali del jar

Mi serviva un jar contenente solo le classi necessarie al funzionamento di Google Analytics. Da ignorante nello sviluppo nativo Android ho fatto quello che avrebbe fatto qualunque altro bimbominkia, scompattando il jar e ricompattandolo solo dopo aver eliminato tutti i package fuori da “analytics”.

Forse un po' troppo drastico

Forse un po’ troppo drastico


Non ha funzionato, per la cronaca comunque un jar si può decomprimere con qualunque utility di decompressione file o con il comando:
jar xf google-play-services-analytics.jar
e si può ricreare con:
jar cf google-play-services-analytics.jar ./com.
Qui si spiega come funziona il comando per la creazione dei jar, questa cosa mi è comunque servita alla fine.

Android ProGuard

Effettivamente ripulire a mano le classi di una libreria sconosciuta aveva probabilità di successo pari a 0.00001, e io non sono così fortunato. Ho trovato però nel giro di poco la soluzione: ProGuard.
ProGuard è un tool che serve per ottimizzare e offuscare il codice Android. A me interessava eliminare dalla libreria google-play-services.jar inclusa nel modulo non funzionante tutto il superfluo lasciando solo la parte di analytics, e questa cosa si fa abbastanza agevolmente.

-injars google-play-services.jar
-outjars google-play-services-analytics.jar

-libraryjars /usr/local/Android/sdk/extras/android/support/v4/android-support-v4.jar
-libraryjars /usr/local/Android/sdk/platforms/android-21/android.jar

-dontoptimize
-dontobfuscate
-dontwarn com.google.**.R
-dontwarn com.google.**.R$*
-dontnote

-keep public class com.google.android.gms.analytics.**  {
    public protected *;
}

Vittoria in (quasi) quattro mosse:

  • includere questi comandi in un file di configurazione (chiamato ad esempio proguard.cfg)
  • copiare il file di configurazione appena creato e la libreria “onnicomprensiva” google-play-services.jar all’interno di /usr/local/Android/sdk/tools/proguard/lib (o comunque all’interno della directory dove si trova proguard.jar)
  • installare android-support-v4.jar se mancante, con l’Android SDK manager
  • eseguire il comando java -jar proguard.jar @proguard.cfg

ga-android-tools-proguard
… e il file salvifico compare magicamente all’interno della stessa directory.

Conclusioni

Ovviamente non è vero che il file risultante funzionava, infatti ho dovuto eliminare a mano tre o quattro classi da quest’ultimo come spiegato nella sezione “Pulizie manuali del jar”.
Il risultato è stato che finalmente quello che doveva funzionare ha funzionato, ma anche che le due librerie “base” e “analytics” pesano insieme meno della metà di quella unica, cosa non di poco conto nel mondo Android.