Skip to content

Google Cloud Endpoints Code-on

i passi necessari per utilizzare i Google Cloud Endpoints su un’applicazione Google App Engine per reallizzare RESTful API. Slide dell’intervento su http://goo.gl/Dp9F2

(13 Giugno 2013, Google Cloud Dev Conf in LUISS ENLABS a Roma)

Ubuntu Phone sul mio Nexus 7

Ubuntu-PhoneLa tentazione di provare Ubuntu Phone era forte e, complice una serata libera, mi sono lanciato nell’impresa sfruttando il Nexus7 su cui stavo gia’ sperimentando Ubuntu per Nexus7. Istruzioni della wiki ufficiale alla mano, la procedura sembrava semplice e lineare.

Ho seguito i passi indicati, tutto liscio compreso il device unlock, ed e’ quindi toccato al successivo comando:
phablet-flash -b
che si e’ miseramente interrotto facendomi notare che nessun device era riconosciuto. Dal log di errore ho scoperto subito il problema: viene eseguito il comando adb, ma purtroppo il mio device aveva gia’ installata una Ubuntu per Nexus7, quindi per adb e’ come se non esistesse.

Ho dato un’occhiata allo script che viene lanciato per l’installazione, ovvero phablet-flash
type phablet-flash -> phablet-flash is /usr/bin/phablet-flash
gedit /usr/bin/phablet-flash

e ho visto  che adb viene lanciato all’inizio per fare il riconoscimento automatico del device. Scartabellando nel codice, ho trovato che e’ possibile saltare questa fase specificando il paramentro, -d o –device, seguito dal nome del tipo di device sul quale si vuole installare Ubuntu Phone. Dalla pagina della wiki ho visto che il Nexus7 corrisponde al codice “grouper”, e quindi stavolta ho lanciato:
phablet-flash -d grouper -b
Le cose sono andate un filino meglio, mi ha scaricato tutti i file necessari, ma appena finito il download e’ arrivato un nuovo errore “Error while excetuting adb shell df“. Male :(

Sempre esplorando lo script, ho notato che viene fatto un controllo per verificare se c’e’ abbastanza spazio sul device prima di copiarci i file necessari ad Ubuntu. Ho rimosso questo controllo commentando la linea validate_device(adb) e di nuovo lanciato:
phablet-flash -d grouper -b
Altro giro, altro errore: “Pushing /home/rainbowbreeze/Downloads/phablet-flash/95/quantal-preinstalled-phablet-armhf.zip to /sdcard/autodeploy.zip“.

Altro giro di analisi per scoprire che adb viene chiamato per copiare questo file nel device. Ho quindi modificato lo script commentando la riga push_for_autodeploy(adb, download_mgr.files[settings.ubuntu_image]), responsabile di questo errore, conscio pero’ del fatto che stavolta stavo tralasciando qualcosa di importante. Ho anche notato che nel metodo bootstrap, chiamato subito dopo, adb viene invocato nuovamente per riavviare il device in modalita’ bootloader.  Ho commentato anche la riga adb.reboot(bootloader=True) in questo metodo, ho riavviato a mano il device in modalita’ bootloader (volume up e down spinti mentre si preme il tasto power)  e ho e rilanciato nuovamente lo script:
phablet-flash -d grouper -b
Stavolta almeno lo script e’ riuscito ad installare una recovery ed ad avviarla (la buona vecchia ClockworkMod recovery). Ovviamente poi si e’ fermato tutto a causa del commento messo alla riga push_for_autodeploy ma, sorpresa, all’interno della CWM stavolta adb c’e’ e funziona!!!

Lasciando il dispositivo sulla CWM Recovery, ho decommentato le 2 righe che avevo appena commentato (push_for_autodeployadb.reboot) e lanciato nuovamente il comando:
phablet-flash -d grouper -b
Bingo, robottino verde che indica che una nuova immagine sta venendo flashata nel sistema. Ancora un po’ di attesa ma finalmente sono pronto a giocare un po’ con Ubuntu Phone…

E invece, ho solo ottenuto continui riavvii del dispositivo che non va mai oltre la scritta Google che compare appena acceso! #fail :(

Update 19/03: Siccome sono testardo, non mi sono arreso e ho deciso di fare tutte le cose pulite ripartendo da zero. Per questo ho scaricato la factory image di Android per il mio Nexus 7 (nakasi) e l’ho installata sul dispositivo (istruzioni qui, sezione Returning your Nexus 7 to stock Android). Una volta riavviato il disposito con Android, ho eseguito di nuovo la procedura per l’installazione di Ubuntu Phone e stavolta tutto e’ andato liscio. Comincia la sperimentazione! :)

Un Android che parla e ti ascolta, MobileTea#3

Un passo verso le Natural User Interfaces: creare app in grado di “conversare” con l’utente, utilizzando le API che Android mette a disposizione per riconoscere quello che l’utente dice e far parlare il nostro device.

(13 Marzo 2013, MobileTea#3 CodeInvaders Roma)

Postepay e quel vizietto di contattare servizi in background

Update 17:30: ho modificato il precedente titolo “Postepay e quel vizietto di contattare server di terze parti” in quanto, finche’ non si fa dello sniffing, non e’ possibile sapere a chi e’ destinato il traffico. Il bello e’ che lo avevo scritto anche nei commenti, ma mi era sfuggito il titolo ed e’ rimasto cosi’ quando l’ho pubblicato ^_^ Ribadisco, ho rimosso l’app perche’ effettuava delle chiamate in background pur non essendo stata avviata e senza un motivo apparente. Grazie ai ragazzi di 01tribe per avermi fatto notare la svista.
———————–

Stavo facendo un po’ sano di debug di una mia app Android quando,casualmente, mi cade l’occhio su queste stringhe nella shell con l’output di adb logcat:

D/dalvikvm(27834): GC_CONCURRENT freed 429K, 6% free 8894K/9412K, paused 26ms+47ms, total 115ms
D/kM      (27834): =============================== RESPONSE START ================================
D/kM      (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/kM      (27834): <ns2:context-response xmlns:ns2="http://moni.01tribe.com/context">
D/kM      (27834):     <ns2:response-header>
D/kM      (27834):         <ns2:status>
D/kM      (27834):             <ns2:status-code>999</ns2:status-code>
D/kM      (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/kM      (27834):         </ns2:status>
D/kM      (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/kM      (27834):     </ns2:response-header>
D/kM      (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/kM      (27834): </ns2:context-response>
D/kM      (27834): ================================ RESPONSE END ================================
I/System.out(27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
I/System.out(27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
I/System.out(27834):     <ns2:response-header>
I/System.out(27834):         <ns2:status>
I/System.out(27834):             <ns2:status-code>999</ns2:status-code>
I/System.out(27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
I/System.out(27834):         </ns2:status>
I/System.out(27834):         <ns2:trace-id>791654851</ns2:trace-id>
I/System.out(27834):     </ns2:response-header>
I/System.out(27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
I/System.out(27834): </ns2:context-response>
D/EXPIRED (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/EXPIRED (27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
D/EXPIRED (27834):     <ns2:response-header>
D/EXPIRED (27834):         <ns2:status>
D/EXPIRED (27834):             <ns2:status-code>999</ns2:status-code>
D/EXPIRED (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/EXPIRED (27834):         </ns2:status>
D/EXPIRED (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/EXPIRED (27834):     </ns2:response-header>
D/EXPIRED (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/EXPIRED (27834): </ns2:context-response>
D/fB      (27834): Siamo spiacenti. Non è stato possibile effettuare l'operazione richiesta. Si prega di riprovare più tardi

Mmmm, insospettito da un messaggio del genere, inizio a chiedermi cosa possa averlo generato e, scorrendo il log, trovo poco sopra quest’altro messaggio:

D/kM      (27834): +++++++++++++++++++++++++++++++ REQUEST START +++++++++++++++++++++++++++++++
D/kM      (27834):<?xml version="1.0" encoding="UTF-8"?>
<context:context-request xmlns:context="http://www.01tribe.com/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <context:request-header>
    <context:trace-id>791654851</context:trace-id>
    <context:channel>mobile</context:channel>
    <context:workflow-name>appCheckPublicWorkflow</context:workflow-name>
    <context:action-name>ActionAppCheck</context:action-name>
    <context:user-agent>Android</context:user-agent>
    <context:language-code>it</context:language-code>
    <context:country-code>IT</context:country-code>
  </context:request-header>
  <context:body>
    <PivotInAppCheck>
      <appName>postepay</appName>
      <appVersion>1.2.3</appVersion>
    </PivotInAppCheck>
  </context:body>
</context:context-request>
D/kM      (27834): ++++++++++++++++++++++++++++++++ REQUEST END ++++++++++++++++++++++++++++++++

Postepay app on Android E scopro che l’artefice di tutto questo e’ l’applicazione Postepay, realizzata da 01tribe.

Ora, de gustibus, ma a me app che mandano richieste in background a servizi senza dirmi niente, senza essere in esecuzione e che richiedono permessi anche un po’ sospetti (tipo Phone calls, Your social information) anche se poi vengono tutti usati legittimamente dentro l’app, a me queste app mi provocano una reazione immediata: disinstallazione.

Certo, potrei controllare con uno sniffer il traffico realmente scambiato (ammesso di riuscire a riprodurre questa situazione) e verificare che sia innocuo per la mia privacy, ma in questo momento ho altro da fare, quindi bye bye Postepay, io ho installato la tua app, non capisco perche’ devi contattare server di un sito di cui non so niente in background. E per fare cosa poi?

Watman

C’e’ un motivo per cui a me questi linguaggi non strongly-typed mi puzzano sempre un po’…

Alcuni video sulle “persone sincronizzate”

Mi ero stupito guardando la precisione di tutte le persone che avevano preso parte alla cerimonia di apertura delle olimpiadi di Pechino del 2008, ma evidentemente non conoscevo che gli orientali non sono nuovi a questo genere di sport: “le persone sincronizzate”

Tanto bello quanto inquietante!

Ubuntu su Nexus7, la mia esperienza

Un terminale e la tastiera virtuale

Dato il mio debole per il Nexus7 e per Ubuntu, ho dovuto provare ad installare questa distro sul tablet dopo che Canonical stessa ha rilasciato un’immagine ufficiale e delle istruzioni per farlo.

Preciso col dire che ho voluto provare tutto senza usare tastiera e/o mouse esterno. Installazione tendenzialmente indolore, tutto e’ filato abbastanza liscio fino alla fine. Ho solo dovuto resettare il device un paio di volte dato che non mi funzionava piu’ la tastiera virtuale durante la configurazione dell’utente. Ma una volta ripartito, anche il first-time setup e’ ripartito, permettendomi di completare tutta la configurazione.

Dopo qualche giro di aggiornamenti e un paio di altri riavvii forzati causa blocco dell’interfaccia grafica, riporto un po’ di impressioni.

E’ estremamente “nerd” avere una distro GNU/Linux come Ubuntu che gira sul tablet: tutto e’ disponibile come se fosse il tuo pc principale e le possibilita’, davvero, sono limitate solo dalla fantasia di chi lo usa. Nonostante questo, pero’, devo dire che il tutto e’ poco piu’ di un giochino di cui ci si stufa presto. Non che avessi altre aspettative dopo il post chiarificatore di Bacon, e con cui concordo su tutta la linea.

Il problema maggiore, per ora, e’ che l’interfaccia grafica si blocca spesso, le finestre rimangono li, la tastiera virtuale non funziona e l’unica cosa da fare e’ spegnere e riaccendere. Il sistema non e’ eccessivamente responsivo e occorre aspettare anche qualche secondo prima che appaia un’applicazione dopo il lancio. Senza un mouse e una tastiera esterni il sistema e’ difficile da utilizzare, ma se il terminale e’ il proprio amico, allora non ci saranno grosse difficolta’, se non quella di eseguire un po’ scomodamente le shortcut sulla tastiera virtuale.

Nonostante questo, pensare che sono installabili molti dei pacchetti disponibile sui repository Ubunto e che ci si piu’ collegare praticamente qualunque periferica USB mi fa venire in mente tante cose: un server DLNA domestico, una webcam USB con ZoneMinder ed ecco fatto un sistema di videosorveglianza a basso costo, si puo’ creare un server di praticamente qualunque servizio per la propria rete domestica, un hard disk esterno collegato via USB e Samba ed ecco pronto un file server dove fare backup e condividere materiale, potrebbe diventare un server torrent oppure donkey, hostare un intero sito web gestito da Apache e addirittura questo stesso blog. E ancora, devo capire cosa ci si possa utilizzare come device per fare pentest. E molto, molto altro.

Nei repo non ho ancora trovato applicazioni ottimizzare per un’interfaccia tablet, se ne avete notizia fatemi pure sapere e saro’ felice di provarle e scrivervi com’e’ andata.

Nexus One, un Android come Torrent server

Nexus One come Torrent serverDopo un paio d’anni quasi di glorioso servizio (prima come smarthphone principale e poi come device di test per lo sviluppo), proprio non riuscivo a contemplare l’idea di mandare in pensione il mio glorioso Nexus One. Cosi’, dopo qualche sperimentazione, ho scoperto che posso ancora reimpiagarlo con successo come torrent client domestico, centralizzando su di esso (quasi) tutto il download. Di materiale legale, ovviamente!

Per prima cosa ho messo sul  mio N1 una CyanogenMod, giusto per dare un’aggiornata al sistema e incrementarne un po’ le performance. Questo passo e’ solo consigliato, ma non necessario. Inoltre, ho messo un microSD da 16Gb come storage, per avere la possibilita’ di mettere piu’ di qualche file in coda contemporaneamente. Anche tagli piu’ piccoli di microSD vanno bene: dipende tutto da quello che ci si vuole fare.

Come software per il download dei torrent ho scelto, tra tanti, tTorrent, principalmente per questi motivi:

  • riavvio automatico del programma al riavvio del dispositivo ed altre impostazioni per il risparmio di energia
  • supporto dell’uPNP, quindi con i router compatibili (tutto oggigiorno) non devo preoccuparti di aprire le porte necessarie per massimizzare il traffico in entrata
  • possibilita’ di limitare la banda sia in download che in upload
  • capacita’ di analizzare qualunque file messo in una determinata cartella e, se corrisponde ad un .torrent, viene automaticamente messo in download
  • plugin per la ricerca dei torrent direttamente all’interno del programma
  • scelta dei file da scaricare contenuti in ogni .torrent
  • ha un’interfaccia ottimizzata per i tablet

Gli altri software che ho esaminato, come aTorrentµTorrent Beta o BitTorrent Beta (che e’ uguale ad µTorrent) non avevano tutte queste caratteristiche assieme, soprattutto quella dell’analisi dei file .torrent messi in una cartella del dispositivo. Magari nel tempo le implementeranno.

Altra esigenza da gestire e’ quella di condivedere i file scaricati dal telefono al proprio PC. La soluzione piu’ semplice e’ quella di collegare il telefono all’USB del proprio computer e abilitare l’USB storage, anche se poi questo interromperebbe i download in corso. Soluzione piu’ elegante prevede l’uso di un server FTP sul dispositivo. Ho scelto Ftp Server, anche se non mi soddisfa ancora appeno (non riparte, ad esempio, al riavvio del dispositivo). Dai test che ho fatto, con questa app riesco a fare il download dei file a piu’ di 2 Mbyte/secondo, tenendo pero’ disattivato il tTorrent, altrimenti va molto piu’ lento. In alternativa, anche un server samba, come Samba Filesharing, puo’ egregiamente svolgere il suo compito, dipende tutto dalle vostre preferenze.

Combinando tTorrent e il server FTP (o Samba), basta copiare un file .torrent in una specifica cartella del dispositivo (di default /sdcard/torrent/incoming) e tTorrent iniziera’ a scaricare quanto richiesto, senza neanche toccare il telefono. Se invece volete direttamente ricercare e scaricare tutto dal telefono, il consiglio e’ di installare il plugin apposito di tTorrent per fare le ricerche direttamente dentro l’app oppure Torrent Search, in grado di cercare su IsoHunt e BitSnoop ed con alcuni filtri predefiniti come il tipo di file da cercare (video, musica ecc) e l’history delle ricerche fatte.

Ciliegina sulla torta: iMediaShare per visualizzare direttamente i video su TV dotate di WiFi e server DLNA, oppure con una XBox 360 o PlayStation 3 collegate. Non c’e’ neanche piu’ da accendere il pc o collegare cavi :)

Per quanto riguarda il consumo energetico, posso dire che e’ praticamente nullo: senza corrente la batteria del telefono dura per piu’ di una giornata, mentre per la ricarica l’ho attaccato alla presa USB del mio router, risparmianto un alimentatore e una presa di corrente.

I limiti attuali del sistemino che ho messo in piedi sono sostanzialmente due: la prima e’ la velocita’ di download, che nella versione Lite di uTorrent e’ limitata a 250 kb/sec, ma basta acquistare la versione a full dell’app e non e’ piu’ un problema, oppure usare un altro torrent client come aTorrent. La seconda rigurda le dimensioni del file: essendo la microSD formattata in FAT32, non si possono scaricare file piu’ grandi di 4GB. Devo fare qualche prova per vedere se, formattando con ext2, questo limite puo’ essere aggirato (risolto, guardare la sezione primo update).

Nonostante questi limiti, la goduria e’ massima: aver riciclato un device che altrimenti avrei lasciato inutilizzato, un consumo energetico praticamente pari a zero, portabilita’ totale, magari per andare una sera a casa di amici e continuare a scaricare da loro ;)

Variazioni sul tema: invece di scaricare sulla microSD del dispositivo, se avere gia’ uno storage server domestico che supporta il protocollo SMB (direi tutti), potete sempre mappare la sua condivisione Samba su una cartella del device con app quali AndSMB, e impostare poi tTorrent per scaricare direttamente su quella cartella. Perdete la portabilita’, ma almeno non avrete piu’ problemi di spazio e/o dimensione del file. Occorrerebbe verificare le performance, che potrebbero diminuire facendo passare tutto e sempre sulla rete WiFi.

 

Primo update

Come pensavo, grazie alla combinazione Cyanogenmod (o altra ROM che supporta il filesystem di tipo ext2), mi e’ bastato formattare la SD in ext2 invece che un FAT32 per aggiungere il supporto a download di file oltre i 4GB. Per fare questa operazione ho collegato il Nexus all’USB del mio pc con Ubuntu e ho attivato l’USB storage su quest’ultimo, potendo in questo modo usare la SD del device come un normale disco esterno sul mio desktop. Ho copiato tutti i dati presenti nell’unita’, ho lanciato GParted e l’ho formattata in ext2. Finita la formattazione, ho ricopiato i dati salvati nella sd e dal terminale ho eseguito questo comando: sudo chmod -R 777 * (all’interno della root folder della SD). Ho smontato dal pc l’unita’ e ho riavviato il Nexus.

ll lunedi’ nero di Trenord (e anche il mio)

Stazione-Rogoredo

Un obiettivo: prendere l’aereo a Malpensa alle 11.10, partendo da Pavia il lunedi’ mattina. 88km di strada, in macchina ci si mette meno di un’ora. Diversi collegamenti ferroviari con treni frequenti, qualche alternativa anche via autobus, impresa fattibile. Soluzione scelta: Pavia – Milano Bovisa con treno S13 e poi Bovisa-Malpensa con treno Malpensa Express. Due ore stimate, con un po’ di cuscinetto che non fa mai male. E invece quando Murphy ci si mette, non ce n’e’ per nessuno. Cronaca di un’epopea che fa emergere diverse carenze di un’infrastruttura fondamentale di uno stato, quella dei trasporti.

Parto da Pavia con la S13 (che nasce proprio da Pavia), ma dobbiamo prima aspettare il passaggio sulla tratta di un altro treno con maggiore priorita’. Niente di nuovo sotto il sole, succede molto spesso (di norma 3 giorni su 5). Alla fine, arrivo a Milano Nord Bovisa con un ritardo di 15 minuti, tanto basta a farmi perdere la coincidenza con il Malpensa Express che sarebbe partito alle 8:42. Fortunatamente c’e’ quello delle 9.42, dovrei ancora farcela. E invece, arrivato in stazione, mi cadono le braccia.

Per alcuni non precisati motivi, tutti, ma proprio tutti, i treni sono in ritardo o vengono cancellati, con paralisi estesa della viabilita’ ferroviaria. 20/30 minuti se va bene. E’ un terno al lotto, le persone aspettano davanti al tabellone sperando che qualcosa arrivi, prima o poi. Leggo che il treno delle 9.42 ha 10 minuti di ritardo, dovrei farcela lo stesso. Mi dicono inoltre che il Malpensa Express, costando i suoi 11 euro, e’ prioritario e quello delle 8,42 e’ partito in orario. Bene. Valuto l’idea di prendere un taxi, ma alla fine rinuncio visto che, nonostante i 35 minuti di tempo necessari per percorrere 48 km che Google Maps mi da, e’ noto a tutti che non ci si mette mai meno di un’ora, a causa di ingorghi e problemi sulla strada. Il lunedi’ poi, mi dicono, ci vuole ancora di piu’, come minimo un’ora e mezzo. Sarei troppo al pelo, rinuncio. Con un treno invece che sarebbe arrivato di li a 10 minuti e che comunque ci mette 30 minuti per arrivare, sono abbastanza sicuro di potercela ancora fare.

Passano 10 minuti, il personale ai tornelli non sa niente, guardano anche loro il tabellone degli orari che ormai e’ diventato come l’oracolo. Alle 9.40, ancora 10 minuti di ritardo dichiarato, ancora ho speranze. Poi si fanno le 9.50, nessun binario annunciato per l’Express. Poco dopo i minuti da 10 passano a 20. E dopo altri 10 minuti, siamo a 30 dichiarati. Un ritardo in crescita progressiva. Alla fine, sui binari, il treno arriva con 35 minuti di ritardo. Corro all’aeroporto, l’aereo deve ancora arrivare per problemi a Zurigo ma hanno gia’ chiuso la procedura in imbarco bagagli e check-in: non si parte :(

Valuto alternative, cambi volo, altre compagnie: no way. Riparto per Pavia verso le 12, arrivo alle 16.30. Treni cancellati all’ultimo secondo e stessa storia anche sulla via del ritorno, 4 ore per percorrere questi 88 km, peggio della mattinata. In bici ci avrei messo di meno. Parlando con il personale delle varie stazioni, un tassello alla volta, riesco a capire cos’e’ successo: Domenica hanno cambiato gli orari dei treni, ma non hanno aggiornato i turni del personale, e senza capotreni e macchinisti disponibili, molti treni rimangono semplicemente fermi alle stazioni, spenti. Il problema c’e’ stato anche con gli altri operatori, ad esempio quelli ai tornelli, ma essendo solo una sessantina di persone, mezza giornata di forsennato lavoro manuale, qualche abaco qua e la, e dei turni d’emergenza sono stati approntati. Ma per gli altri, visto che sono di piu’, ci vorra’ molto piu’ tempo.

Stamattina (martedi’), dopo 24 ore, uno pensa che la situazione si sia normalizzata (eh, il mio animo da ottimista, smentito poi dai fatti). Pur essendo convinto che non ce ne sara’ bisogno, stavolta che ho l’esperienza dalla mia, appronto un piano di attacco degno di Sun Tzu. So che partono piu’ treni da Cadorna o Bovisa rispetto a Centrale, quindi confermo la soluzione del giorno prima. Parto 4 ore prima del volo, alle 7 da Pavia, cosi’ posso prendere il Malpensa Express delle 8 e qualcosa, 8.33, 8.42 e 9.42. Ben quattro treni di tolleranza, sembra un margine insensatamente precauzionistico, ma preferisco perdere ore in aeroporto che non partire neanche stavolta. Arrivato a Bovisa,  stessa storia di ieri. Ma non mi faccio trovare impreparato: inizio subito a chiedere al personale ai tornelli di farmi sapere se il Malpensa Express e’ partito da Cadorna oppure no, e alla fine li tampino cosi’ tanto che si accordano per farsi richiamare dai loro colleghi in Cadorna quando il treno sara’ partito, perche’ si accorgono anche loro che il tabellone degli orari non e’ affidabile. Il treno delle 8:33 arriva verso le 9 e qualcosa (anche qui con ritardi progressivi, fino alle 8:35 sembrava addirittura in orario dal tabellone), quello della 8:42 viene soppresso e non so che fine possa aver fatto quello delle 9:42. Ma sono arrivato sano e salvo in aeroporto.

Cosa ho imparato

Non mi fidero’ mai piu’ di Trenord, Trenitalia o Tren-salcavolo cosa. E un cliente che non ha fiducia in un servizio ma e’ costretto ad usarlo dato che non ci sono alternative, e’ una situazione a cui un po’ tutti i libri di marketing sconsigliano di arrivare.

Non basatevi sui cartelloni per sapere i ritardi reali: scassare sempre le scatole al personale per informazioni, e se dicono che non lo sanno, chiedere loro di informarsi alla stazione dal quale il treno dovrebbe arrivare, ed insistere, insistere, insistere. Con cortesia e gentilezza, ma insistere. Sono cose che loro hanno modo di sapere, ed e’ assolutamente inadatto il dover dipendere da un cartello. Per la cronaca, era in panne anche il sito m.viaggiatreno.it, che uso da tempi immemori per sapere i reali ritardi dei treni.

Un’informazione piu’ trasparente alla stazione aiuterebbe le persone a scegliere meglio eventuali alternative (bus, taxi, altro). E invece il servizio offerto nasconde molto, troppo. Come mai non indicano che il treno non e’ partito ancora? Come mai non vengono mostrati i ritardi *reali*, considerando che basta andare su m.viaggiatreno.it per averli, e quindi le informazioni ci sono e sono pubbliche? Come mai non si sa un cavolo di niente e bisogna aspettare, aspettare, aspettare? I gli stranieri, come li trattiamo?

Ma sara’ davvero il software che ha sbagliato oppure il problema e’ dentro un’azienda che, nel suo processo di burocratizzazione, si e’ dimenticata della sua funzione principale, quella di fornire un servizio? E’ normale che una cosa cosi’ importante come il cambio di orario sia andata male, sia sfuggita a tutti i controlli e simulazioni del caso e, dopo 36 ore, e’ ancora li che deve essere risolta? O e’ incredibile, o e’ un filino vergognoso. Oppure entrambe!

E per finire, una perla: avete notato che quando ci sono tanti treni in ritardo, i tabelloni vanno in panne perche’ non hanno piu’ spazio per mostrare i nuovi treni, quindi capita il paradosso che alle 8:43 siano mostrati solo i treni fino alle 8:40 e non tutti i nuovi?

#fail :(

Update: Dicevo di Murphy. Ecco, arrivato a Zurigo il mio aereo aveva piu’ di un’ora di ritardo, e quindi ho perso la coincidenza per San Francisco, rimando a Zurigo fino al giorno dopo. In pratica, Pavia – San Francisco 3 giorni, neanche fossi andato a nuoto :S

Perche’ saranno (anche) i developers a salvare il mondo

Rompo il silenzio di questi mesi (non ho proprio il tempo per scrivere niente purtroppo) per riportare un bellissimo scambio di email a cui ho assistito oggi. Riguarda la guerra in Israele e sulla Striscia di Gaza e viene da alcuni membri di un Google Developer Group (una community locale di sviluppatori).

————————————————–
Thank you for your interest! 

Here in Israel we are trying to continue life normally as much as possible, hoping for the fighting to end soon, so far we have 3 dead civilians from the southern part of the country, and alerts going all day long there. People spend a lot of time in shelters.

We have decided to organize a special hackaton for creating apps to help people during these times, for example, maps of closest shelters, real time alerts, and so on, and we hope it to be successful. The Israeli GDGs are all participating in organizing this hackaton…

Let’s pray for good :-)

Tel-Aviv GDG, Israel
————————————————–

E poi, pochi minuti dopo, la risposta di un’altra persona

————————————————–
Just wanted to add that despite the situation we are open to collaboration with our Palestinian neighbors, so if there’s any one reading this – please let us know if you want one!
————————————————–

Ecco, a me queste cose toccano davvero il cuore, e mi fanno capire come davvero la solidarieta’ e l’amore tra le persone poco se ne fa dello stereotipo dei nerd con gli occhialoni spessi, sociopatici e tendenzialmente incuranti del resto del genere umano.