Un’interessante estratto di una presentazione “Color for Dummies” che il miglior contesto di utilizzo per ogni colore:
Da considerare quando ci sara’ da fare la prossima presentazione.
Un’interessante estratto di una presentazione “Color for Dummies” che il miglior contesto di utilizzo per ogni colore:
Da considerare quando ci sara’ da fare la prossima presentazione.
Molte delle promozioni per la navigazione web dal proporio smartphone precisano che l’accesso ad Internet e’ consentito *solo dal device*, e non attaccando il device ad un computer attraverso il tethering (wifi o usb). Mi sono sempre chiesto come facessero i carrier a capire quando stavo navigando nell’uno o nell’altro modo, e grazie a questo commento a questo post ho avuto la risposta, almeno per Android:
The built-in tether support acts as a WiFi hotspot and router. This does a USB tether, and acts as a network proxy. Very different.
The biggest difference, from the carrier’s end, is that routing is pretty easy to detect; each packet that goes through the router, the time-to-live (TTL) field in the IPv4 header is decremented. In addition, there is NAT going on, and there are heuristics to detect that. There are ways around this using Linux’s iptables that can masquerade the routing/NAT, but I’m unaware of any mainstream implementations of this on Android, and it would require root. This app doesn’t; I’m like 90% sure it’s all done over ADB (Android Debug Bridge), which every Android device supports.
With the USB tether acting as a network proxy, there is simply no routing/NAT going on, so there is no way for the carrier to detect what’s going on. It just appears to be data coming from the phone.
Ottimo, penso anche che il meccanismo sia estendibile anche ad altre piattaforme, non si finisce mai di imparare dai commenti! Prossima mossa, vedere se veramente il tethering USB non viene scoperto dai carrier.
Aggiornare il proprio Nexus S al nuovo Android Ice Cream Sandwich e’ ormai solo una questione di pazienza, dato che l’update via OTA e’ in arrivo in questi giorni. Il problema e’ che, se come me avete installato una custom ROM (MIUI, Cyanogenmod o altre), l’aggiornamento via OTA non arrivera’ mai.
Situazione che si puo’ risolvere facilmente, dato che e’ sempre possibile aggiornare manualmente alla ROM ICS ufficiale, ora che sono disponibili.
La guida di partenza che ho usato per fare l’aggiornamento e’ stato questa. Ho scaricato l’ultima ROM 4.0.3 dal link fornito (il file ZD3PyN0t.zip), l’ho copiato nel dispositivo sotto la cartella principale della SD card rinominandolo in update.zip, poi ho spento il device, l’ho riavviato premendo volume up + power in modo da far partire il bootloader, ho selezionato il recovery (nel mio caso il Clockworld Manager, ma funziona anche con quello standard), ho fatto un bel wipe di dati e della cache e ho installato il file update.zip. Un nuovo reboot e voila’, ICS anche sul mio smartphone!
Altra cosa che ho ripristinato e’ stato l’accesso come root al dispositivo. La procedura e’ ben descritta qui, e che contiene l’hack per ottenerli. Il problema e’ che non mi funzionava piu’ il ClockWorld Manager: nel sito con tutte le versioni e’ ancora disponibile la 5.0.2.0, che pero’ a me non partiva dal bootloader. Ho dovuto prendere l’ultimissima versione “non ufficiale” 5.0.2.3 e, installata, il recovery ha ripreso ad andare. Anche in questo post il problema sembra essere conosciuto.
Nello sfortunato caso di brick del Nexus S (non parte piu’ niente), si puo’ sempre tentare un ripristino a basso livello con Odin, come spiegato da questa e da questa guida, ma funzionera’ solo con Windows
Ovviamente anche le ROM custom non sono rimaste a guardare e se Cyanogenmod ha rilasciato una versione di Android Ice Cream Sandwich qualche settimana prima di quella ufficiale, dal canto suo la MIUI ha portato ICS sulla sua versione per Nexus S. Il supporto ad altri dispositivi e’ atteso a breve. Per ora, da quello che ho visto, non ci sono sostanziali differenze rispetto alle ROM stock, quindi ho installato quest’ultima e poi vedro’ se e dove orientarmi.
Infine, per i piu’ curiosi, la lista completa delle ROM e degli update per tutti i modelli di Nexus S.
Appena avuto tra le mani un Kidle Fire, da sviluppatore Android, ho cercato di capire come installare applicazioni NON provenienti dall’Amazon AppStore: ecco i passi necessari.
Di default il Fire non viene neanche rilevato da ADB, quindi occorre forzare il bridge tramite un semplice file di configurazione da modificare sul proprio pc, come spiegato qui.
La soluzione e’ facile, basta aggiungere queste righe al file /etc/udev/rules.d/51-android.rules:
#Amazon Kindle Fire
SUBSYSTEM==”usb”, SYSFS{idVendor}==”1949″, MODE=”0666″
Dove ox1949 e’, appunto, il manufacturer id. Bene, l’USB Debugging e’ ora abilitato e funzionante.
Per installare applicazioni non provenienti dall’Amazon AppStore, basta andare nei Settings (la rotellina vicino all’orologio), poi More, Device, e abilitare Allow Installation of Application From Unknown sources. Ora un semplice adb install nome_file_app.apk funzionera’ senza fare una piega.
Passiamo a qualche personalizzazione piu’ dura, tipo installare la CyanogenMod 7 sul Fire. Gli smanettoni di xda-developers stanno gia’ elaborando una ROM ad hoc per il dispositivo. Buoni tentativi ;)
Ecco i video dell’intervento che ho fatto il 22 Novembre al GTUG Milano, dove ho condiviso con i partecipanti alcuni consigli utili imparati dopo piu’ di due anni di sviluppo per piattaforma Android.
Continue reading ‘Video dell’intervento “Sopravvivere a due anni di sviluppo con Android”’ »
Dopo poco che partecipi ed organizzi eventi ICT in Italia, dalla conference di piu’ giorni all’incontro informale, ti accorgi che ci sono periodi caldi dell’anno in cui ogni weekend, e non solo, e’ gia’ occupato da qualcosa e diventa quasi impossibile infilarci dentro un’altra iniziativa senza pistare i piedi a qualcuno.
Inoltre, in genere, passa sempre del tempo da quando gli organizzatori decidono la data di un evento a quando la rendono pubblica. Per questo ho creato un gruppo dove noi organizzatori possiamo liberamente dire: “vi dico in anteprima che tal giorno avevo intenzione di organizzare tal cosa”, in modo da evitare il piu’ possibile soprapposizioni di date e non impazzire per controllare 100 siti per capire se in quella data c’e’ gia’ qualcosa in programma.
Oltre a questo primo obiettivo, il gruppo potrebbe tornare comodo per condividere risorse logistiche e dritte varie, sempre utili a noi organizzatori: il contatto per accedere a tal posto, il nome di quello speaker, un’anteprima su dei temi che si andranno a trattare in modo da non fare la stessa cosa e magari favorire lo scambio di sinergie, ecc.
Insomma, una mailing list dedicata a noi addetti ai lavori, che ci conosciamo quasi tutti almeno di nome, ma spesso dialoghiamo e scambiamo opinioni solo quando ci incontriamo alle cose che facciamo ;)
Poche regole quindi, almeno all’inizio:
-postare le date degli eventi che si andranno ad organizzare, possibilmente in anteprima (tanto il gruppo non e’ pubblico)
-prima richiesta di aiuto o collaborazione per organizzare qualcosa (richiesta contatti, luoghi, argomenti)
-non usare il gruppo come piazza pubblica di discussione, ma preferire il contatto pvt con gli altri organizzatori
-se conosci un altro organizzatore e vuoi invitarlo, fai pure!
Bene, proviamo e vediamo cosa esce fuori. Questo e’ l’indirizzo del gruppo. Al momento dell’iscrizione, dite anche brevemente chi siete e come mai volete essere iscritti. L’appartenenza non si nega a nessuno, cosiccome l’educazione di chi saluta ;)
Se si sviluppa una libreria, si potrebbe voler essere certi che tutti i permessi necessari al suo funzionamento siano stati aggiunti all’AndroidManifest.xml, invece che sperare che chi la utilizzera’ si ricordi di farlo.
Esiste un modo per avere questa certezza, grazie a questo codice:
private void verifyPermission(Context c, String permission) { int p = c.getPackageManager().checkPermission(permission, c.getPackageName()); if(p == PackageManager.PERMISSION_DENIED) { throw new RuntimeException("ImageLoader : please add the permission " + permission + " to the manifest"); } } |
Magari da richiarame nel momento in cui si crea il servizio/i messi a disposizione:
verifyPermission(c, Manifest.permission.WRITE_EXTERNAL_STORAGE); verifyPermission(c, Manifest.permission.INTERNET); |
Hackathon: maratone di coding dove la passione si mischia alla creativita’, la stanchezza fisica e mentale alla gioia di veder nascere, riga dopo riga, qualcosa che spesso e’ un incredibile prototipo neanche lontanamente immaginato solo qualche ora prima. Oltre ad organizzarne con il WhyMCA, mi piace anche parteciparci. Di seguito la mia personalissima “Hackmission, a crazy developer history”.
OverTheAir Settembre 2008
Primo hackathon a cui abbia mai partecipato, mi e’ sempre rimasto nel cuore. Londra, in notturna, dentro una struttura universitaria, quando il Nokia N95 era ancora il top della gamma. Assieme a Robert, conosciuto sul posto, realizzammo S.N.O.B – Social Network Open Butler, un’applicazione per Windows Mobile in grado di prendere gli avatar di Twitter e di Facebook (che a quel tempo erano ancora accedibili pubblicamente e anonimamente) e associarli ai contatti della propria rubrica. Robert si occupo’ del webservice PHP che tirava fuori l’immagine in base al nome del contatto che il mio client gli passava, io del client per Windows Mobile, appunto, che verificava tutti i nomi della rubrica, faceva una ricerca dei loro avatar e proponeva se associarli o meno al contatto. Vincemmo nella categoria “Most practical / ready for market”, assieme ad uno smartphone Sony Ericsson in palio.
OverTheAir Settembre 2009
Ad un anno esatto dal primo, sempre a Londra e sempre in notturna. Assieme a Stefano e Robert creammo S.A.Y – Something Around You. Un’applicazione per Android che, in base alla posizione corrente, capiva i luoghi limitrofi grazie all’uso di Yahoo Query Language, interrogava Flickr per ottenere foto riguardandi quei luoghi e, alla fine, le visualizzava in realta’ aumentata sfruttando le API di Wikitude. Era anche in grado di ottenere informazioni sugli spettacoli cinematografici circostanti, con tanto di locandina del film, breve descrizione e orari. A Stefano e a Robert la realizzazione dei webservice che ottenere i dati, a me quello del cliente Android per realizzarli. Primi nella categoria “Best use of Yahoo APIs“, ci riportammo a casa una macchina del caffe’ Nespresso.
HackItaly Febbraio 2011
Dopo un anno di assenza forzata dall’OTA, finalmente anche il panorama italiano si era aperto agli hackathon. Cosi, improvvisando in mattinata un team assieme a Magnum e Sammy, abbiamo dato vita a Contestr. L’idea con cui ero partito il giorno prima era quella di realizzare un servizio che permettesse di gestire gare di snowboard tra rider: ti iscrivevi ad un contest e poi giravi sulle piste, accumulando punti in base alla velocita’ raggiunta, chilometri percorsi, trick eseguiti (letti in grazie a giroscopio ed accelerometro). Alla fine della giornata avevamo messo in piedi un sito per organizzare caccie al tesoro in giro per la citta, con prove composte dal checkin in certi luoghi, prove a tempo di corsa e i punti fatti venivano raccolti e trasformati in digital goods grazie a Beintoo. Magnum e Sammy hanno curato il backend in ROR e io invece ho realizzato il client Android. Vittoria come miglior uso delle API di Beintoo e per quelle di Nokia Maps, con un bottino composto da un viaggio in una capitale europea, un Nokia N7 e hosting gratuito su Top-ix per un anno. Estratto a sorte tra noi tre, il viaggio e’ toccato a me.
HackItaly Settembre 2011
Per questo secondo appuntamento sono riuscito a coinvolgere Paolo e Mauro. Nonostante le poche API a disposizione tra cui scegliere, abbiamo partorito Kinect Says, versione aumentata del gioco Simon Says: dall’iPad/iPhone si schiacciavano una sequenza di tasti colorati su una griglia 3×3, accompagnati da una musica riprodotta in streaming grazie alle API di Play.me. Questi tasti premuti venivano salvati sul backend e letti da un’applicazione Windows WPF che, avviata la partita, li riproduceva su una griglia a schermo e, grazie al Kinect SDK, controllava se il giocatore riusciva a “colpirli”, muovendo le braccia nella loro direzione prima che questi scomparissero. sostituiti dal nuovo riquadro da colpire. Sul device del primo giocatore, inoltre, venivano mostrate le mosse giuste e quelle mancate dell’avversario, visto che il match poteva anche essere giocato in contemporanea. Sembra una roba tranquilla, ma vi assicuro che alla fine era una sequenza molto frenetica. A Paolo e’ toccata la realizzazione del client iOS, a Mauro quella del backend in PHP e io ho fatto l’applicazione WPF che parlava col Kinect. Oltre ad un divertimento spropositato, ci siamo portati a casa una XBox 360, come premio per la categoria delle API Kinect.
OverTheAir Settembre 2011
Partiti in sordina, io, Paolo e Andrea ci siamo trovati seduti in un prato sopra alle nostre beanbag, bevendo birra e ammirando le stelle (si, una notte inglese atipicamente calda e serena), e abbiamo partorito l’idea di Hack-The-Mansion, grazie anche allo zampino creativo di Andrea che ci ha fatto compagnia durante il birrastorming. Lanciati nell’impresa, alle 15 del giorno dopo era pronto un gioco per Android che si ispirava al Monopoli, ma molto piu’ articolato. I giocatori dovevano leggere dei QR-Code attaccati sui luogi del campo da gioco (idealmente alberghi o monumenti o altro). Se quel luogo non era stato ancora prenotato da nessuno, c’era l’opzione di prenotarlo per un numero variabile di turni. Se lo era stato, si doveva pagare al proprietario una “tassa di soggiorno” per la durata del turno. Questi flussi di ota-coin componevano il punteggio dei giocatori, che poteva essere incrementato acquistando nuovi ota-coin tramite le Mobile Payment Libraries di Paypal, oppure rispondendo correttamente a delle domande riguardanti il luogo dove si era, generate dal backend che interrogava dei dataset OpenData, come quelli sulla densita’ di popolazione, il numero di abitanti ed altro. A me il client Android, a Paolo e Andrea il backend in ROR. Devo dire di non aver mai scritto tanto codice in un solo hackathon, ma ne e’ valsa la pena: abbiamo vinto il premio come “Best Android Application” e quello come “Best Game”, per un totale di 3 libri, 2 Sony Ericsson Xperia Xplay e ben 3 Nexus S. Insomma, non sapevamo piu’ dove metterli nel bagaglio di ritorno a casa.
Considerazione di fondo. Partecipo agli hackathon sopratutto per divertirmi e per mettere alla prova le mie capacita’. Poi certo, vincere non dispiace mai, ma l’emozione di creare qualcosa che non e’ la solita applicazione che fai al lavoro, dove sacrifichi senza problemi stabilita’ per funzionalita’, dove provi a fare cose cosi’ avveneristiche che magari riutilizzerai tra un anno di tempo, dove scopri quanto e’ bello e ricco il mondo dei mashup tra librerie ed API… Beh, e’ questo il vero premio per 9 o piu’ ore di stress mentale, o per la notte passata in bianco. Ma ne valgono tutte la pena, minuto per minuto. Ci vediamo al prossimo hackathon!
Installare un sistema operativo personalizzato al posto di quello standard presente sul proprio smartphone e’ una pratica consolidata. Gia’ con Symbian era prassi comune quella di eliminare la versione customizzata che l’operatore telefonico installava nel telefono, spesso con crapware e limitazioni varie, per usarne una “stock”, ovvero pulita, spesso piu’ aggiornata, piu’ leggera e senza vincoli. Con Windows Mobile c’e’ stata un’esplosione di questa pratica e le ROM coocked create dalla comunita’ erano spesso di gran lunga migliori di quelle standard: parecchi bugfix, driver e sistemi operativi aggiornati, utility precaricate per risparmiare spazio, Erano insomma capaci di prolungare la vita di un device di un anno o piu’. Dopotutto intendiamoci, i produttori di dispositivi non hanno interesse a rilasciare versioni aggiornate del firmare dei propri prodotti, preferiscono che si buttino via e si ricomprino nuovi con quanto di nuovo c’e’ sul mercato.
Android, ovviamente, non fa differenza. Unica controindicazione di questo processo di customizzazione della ROM e’ la perdita della garanzia, ma si puo’ sempre ripristinare quella originale ;)
Considerazione finale dopo aver sperimentato per un paio di giorni tutto: ma come ho fatto ad aspettare cosi’ tanto tempo prima di usarle sul mio Nexus One!
I passi da seguire per un Nexus One
Ovviamente ogni telefono ha una sua sequenza di comandi per essere sbloccato e personalizzato, di seguito quelli per il mio Nexus One:
Purtroppo, la prima volta che si esegue questo processo, tutti i settaggi delle app saranno irrimediabilmente persi. Quindi addio punti nei giochi, impostazioni di programmi e tutto quello che non viene salvato nativamente nel cloud o sulla SD dalle singole applicazioni. Le volte successive, grazie all’accesso root al dispositivo e ai tool di backup esistenti, questo problema sara’ solo un brutto ricordo. Ragione in piu’ per fare il prima possibile lo sblocco, anche solo per avere un salvataggio completo di tutto, in caso di perdita del device.
Sbloccare il bootloader ed installare Fastboot
Una volta il comando fastboot era installato nell’Android SDK, poi e’ stato tolto. Qui si puo’ trovare un eseguibile multipiattaforma: e questa e’ la procedura dettagliata per sbloccare il boot del device.
Tutti i dati saranno cancellati e il device verra’ riavviato. Per controllare se e’ effettivamente stato sbloccato, avviare nuovamente il bootloader e questa volta, in altro, dovrebbe apparire la scritta *** UNLOCKED ***
Installare una Custom Recovery Image
Compito della Custom Recovery Image e’ quello di installare custom rom, salvare dati, partizionare sd card, cancellare dati, resettare impostazioni particolari di sistema e molto altro. Ci sono diversi programmi molto usati e che fungono bene allo scopo, io ho scelto ClockWorldMod Recovery, ecco spiegato cos’e’. Per installarlo, ho seguito questi passi qui, che comprendono anche il link per il download del file img. In alternativa, c’e’ anche Amon-Ra’s
Ovviamente esiste una versione piu’ nuova della 3.0.0.5, dopo l’installazione della custom rom ci sono le istruzioni per aggiornarla.
Backup del sistema operativo, conosciuto anche come Nandroid backup, e installare di una custom ROM
Prima di installare una qualunque custom rom, e’ buona cosa fare un backup dell’intero sistema operativo, che servira’ anche nel caso in cui le cose vadano storte e il device non si riavvii piu’, ad esempio a a causa di una rom sbagliata, un errore nella sd che ha corrotto il file ecc. Inoltre e’ l’immagine che va rimessa sul dispositivo in caso di invio in assistenza (assieme all’esecuzione del comando fastboot oem lock per ribloccare il bootloader e riportarlo allo stadio originale). Conosciuto anche come Nadroid backup, ecco i passi che ho seguito:
Installazione di una Custom ROM
Ovviamente esistono tantissime custom rom, sia in base al device, sia in base all’orientamento che viene dato alla rom (performance, cool&stylish, funzionalita’ ecc). Personalmente, e per un Nexus One, ritengo che ci siano tre grandi alternative: installare una rom stock, una Cyanogenmod o una MIUI. Consiglio la prima scelta a chi usa il device per sviluppare e testare le proprie applicazioini, ma non vuole perdere i benefici di essere root: le rom customizzate, infatti, sono molto diverse da quella originale, quindi potrebbero anche avere dei comportamenti inattesi / fuori dagli standard che potrebbero pregiudicare il buon esito dei test di funzionamento. La Cyanogenmod, invece, e’ tipicamente per gli smanettoni: tantissimi settaggi, ottimizzazioni alle stelle e velocita’ da urlo. MIUI, infine, e’ esteticamente qualcosa di unico ed offre applicazioni di gran lunga migliori di quelle standard (player musicale, rubrica dei contatti, backup integrato ecc). A voi la scelta. Io le sto provando entrambe e, per ora, la MIUI mi ha conquistato. Seguiranno post piu’ dettagliati.
A prescindere dal tipo di rom i passi sono molto simili, ecco quelli che ho seguito io per la Cyanogenmob, secondo la guida ufficiale.
Continue reading ‘Come installare Cyanogenmod, MIUI o una custom rom sul Nexus One’ »
Nelle ultime settimane mi saranno arrivate almeno 3-4 richieste del tipo “L’azienda XXX dove lavoro sta cercando degli sviluppatori per Android/iPhone/iPad/altro da assumere o a cui commissionare dei lavori da freelance. Sai darmi qualche nome o qualche posto dove guardare?”. Inoltre, capita che venga contattato su LinkedIn da diversi headhunter che cercano sviluppatori, sempre per mobile.
Questi fatti mi portano a fare diverse considerazioni: