L’annuncio degli iBeacon sembra aver scosso un po’ il mercato mobile, come se questi oggetti fossero un qualcosa di magico che consente di fare un po’ tutto, dalla geolocalizzazione indoor, ai pagamenti, dalla casa intelligente, a retail experience. Il limite è sempre la fantasia, basta che questa sia poi effettivamente supportata da una sufficiente conoscenza del dispositivo in questione per capire cosa è effettivamente realizzabile.
Diversi “esperti” di marketing si sono cimentati nello spiegare cosa è un iBeacon e voglio provarci anche io, dato che a tempo perso ci sto giochicchiando.

Read more!

La pirateria – e forse dico una cosa scontata – è un grosso problema anche per iOS.

Nel mondo del Jailbreak esistono AppStore fittizi dove è possibile scaricare gratuitamente copie di app che normalmente si trovano a pagamento.

Il tipo di utenza che usufruisce di questo servizio è divisibile in due macro-categorie:

a. persone che non compreranno mai la tua app

b. persone intenzionate all’acquisto, ma che desiderano provarla prima di investire i loro soldi nel tuo prodotto 

Riguardo al successivo pagamento da parte degli utenti tipo b. non bisogna farsi molte illusioni: sono davvero pochi coloro che regolarizzano la loro posizione andando sullo store virtuale di Apple.

Lo scenario è, dunque, tutt’altro che roseo. Un’ulteriore complicazione viene anche dalla natura stessa delle applicazioni. Questo genere di prodotti ha, infatti, una vita brevissima di utilizzo-medio, con il tangibile rischio che la ”prova” gratuita coincida perfettamente con il termine di utilizzo. Detto questo le app hanno anche costi rappresentativi del loro effettivo utilizzo. Apple, inoltre, non fornisce alcun periodo di trial sui prodotti distribuiti attraverso l’AppStore.

Come accade per altri settori, anche le tecniche per evitare la pirateria sulle app sono molto complesse, facilmente aggirabili e dall’elevata possibilità di creare un danno anche a chi l’applicazione l’ha regolarmente acquistata. Questo a causa di falsi positivi che possono essere causati anche per una semplice sostituzione del device. Non dimentichiamoci, poi, che Apple non vincola l’applicazione al dispositivo sul quale è stata scaricata, ma all’account dell’utente che l’ha acquistata.

Esistono soluzioni al problema? Una tecnica ottimale sarebbe quella di verificare se effettivamente l’utente ha effettuato l’acquisto, richiedendo una sorta di ricevuta digitale. Con iOS7 è stato introdotto un set di nuove API che consentono di ottenerla (anche se – a dire il vero – il sistema era comunque disponibile già con Lion). La classe è in oggetto SKReceiptRefreshRequest , interessante vero? Peccato che la verifica dello scontrino digitale sia ancora una procedura particolarmente complessa.

La ricevuta digitale sarebbe anche utilizzabile nel passaggio da applicazione a pagamento ad applicazione con modello freemium, in questo modo sarebbe possibile fornire a chi ha già pagato un set superiore di risorse.

La speranza è che venga rilasciata una qualche utility che renda l’analisi più snella (esiste già una lib su GitHub, che comunque richiede diverse conoscenze nell’ambito di certificati etc). O il danno economico diventerà sempre meno gestibile.

Ci siamo lasciati dall’ultimo evento di Apple con alcune previsioni sensate (articolo keynote Apple 10 settembre).

Successivamente ho espresso il mio disappunto (riflessioni sulla presentazione dei nuovi iPhone) di fronte al fatto che tutti i prodotti mostrati (ottimi prodotti) non avessero suscitato in me un particolare stupore o sorpresa anche a causa dei continui leaks da parte dei produttori cinesi.

Domani presteremo nuovamente la nostra attenzione all’evento organizzato da Cupertino, con il suo “We still have a lot to cover”. Dunque, cosa dobbiamo aspettarci dalla presentazione di Apple? Ci sarà una sorpresa?

Partiamo dal keynote precedente, quello del 10 settembre. Se la linea iPhone è stata rinnovata, sono, invece, mancati all’appello gli iPad. Per questi sono previsti aggiornamenti hardware e nel caso della versione “grande” è previsto un cambio abbastanza radicale dello chassis che lo renderà molto più simile al mini. Riguardo a quest’ultimo, è altamente probabile che la speranza di molti di veder integrato un display retina verrà frustrata.

Il nome dato all’evento ha un che di sibillino: “We still have a lot to cover”. Come è noto, “cover” in inglese significa anche custodia… Per associazione potremmo ipotizzare che si sia di fronte a una produzione multicolore come per l’iPhone C. In fondo – come è accaduto il 10 settembre – anche questa volta il manifesto di lancio dell’evento è supercolorato…

Tutto qui? Assolutamente no!

Apple dovrà stupirci ancora con lo splendido Mac Pro rivelandone – fra le altre cose – il costo e con la nuova release di OSX che dopo anni abbandona la famiglia dei felini per trasformarsi in Mavericks (come uno dei luoghi californiani più amati dai surfisti).

Sono, inoltre, previsti aggiornamenti hardware per i MacBook Pro con i nuovi processori Haswell di Intel (più potenti e dal minor consumo di batteria), per i MacMini e per Apple TV

Insomma, tutto procederà da piano o avremo qualche (bella) sorpresa?

Ma sopratutto: che il mio pendolino sia davvero migliore di quello del compianto Maurizio Mosca

IOS7 è uscito, lo sappiamo e molti di noi lo hanno già installato. Il nuovo sistema operativo rappresenta un cambiamento radicale rispetto al 6, un cambiamento necessario per svecchiare un prodotto che rischiava di essere visto come “datato”, specie se confrontato con quelli proposti da concorrenti che, con il trascorrere degli anni, hanno saputo produrre sistemi operativi molto accattivanti.

Non parlerò delle funzioni di iOS7, delle quali è stato detto già abbastanza. Voglio guardare “il dietro le quinte” e ripercorrere le trasformazioni che iOS7 ha subito negli ultimi mesi, dalla developer preview 1 fino al rilascio ufficiale odierno. Un’altra maniera per capire il modus operandi di Apple, fra tentativi, certezze e modifiche dell’ultima ora.

Per noi sviluppatori iOS7 rappresenta “un problema” anzi, due problemi. Il primo è il missmatch creativo che si è creato tra sistema operativo e applicazioni “vecchie” che per lo più utilizzavano lo scheumorfismo.

Il secondo sono le API e il nuovo modo di “vedere” le applicazioni.

La questione ha due risvolti, entrambi da considerare.

Senza dubbio per innovare, è necessario guardare avanti e, nel caso, prendere decisioni unilaterali, di forza, in maniera che tutti vi si adeguino senza negoziare. Lasciando troppa libertà si corre il rischio che ognuno continui sulla sua vecchia strada, implementando API vecchie. Una nota personale: è da tempo che mi riprometto di imparare bene il linguaggio “Ruby”, ma ad ogni rilascio di sistema operativo mi vedo costretto a ricominciare a studiare tutto daccapo.

Apple è decisamente coerente con quello che dice e fa; alcuni elementi dell’interfaccia grafica standard sono stati macellati da diversi sviluppatori (me compreso) per accontentare le richieste di clienti a cui non piaceva il pop up bluetto perché non in linea con i colori aziendali. Da Cupertino, infatti, non si smetteva di sconsigliare modifiche a tali componenti, avvertendo che release future avrebbero potuto generare cambiamenti, con il rischio di dare vita a comportamenti inaspettati con l’applicazione di questi hack… Insomma tutti ne erano consapevoli tanto ieri come oggi.

 

Tuttavia, se la filosofia che sta dietro a determinate scelte è comprensibile, le vie che propone per renderla operativa sono talvolta meno limpide.

Parliamo del minimalismo dell’interfaccia grafica di iOS7. È chiaro che questa scelta non è fine a sé stessa come su altri sistemi (una pura questione estetica, di gusto), ma propedeutica al contenuto e al contesto presentato, animazioni incluse.

Meno chiaro, invece, la maniera attraverso la quale trasformare il concetto in qualcosa di reale, attraverso la programmazione. Infatti, benché iOS7 preveda che tutte le app compilate debbano utilizzare come area lo schermo intero, ad oggi sembra non esistere un modo semplice per cambiare questa azione e renderla simile ad iOS6. Una scelta che ha fatto letteralmente impazzire un certo numero di sviluppatori. Capita che le “vecchie” applicazioni ricompilate vengano visualizzate con un layout diverso e con i contenuti che “scivolano” sotto la status bar. Un problema non da poco per chi come me sta lavorando per implementare animazioni di transizione diverse da quelle standard tra una sezione e un’altra senza usare gli strumenti forniti da Apple.

Non c’è dunque da stupirsi se il forum ufficiale della Mela morsicata è animato da discussioni visitate da migliaia di persone. In pratica, con questa scelta, si obbliga lo sviluppatore da una parte a “ridisegnare” gran parte del layout e dall’altra a tenere sempre presente la bicompatibilità con il vecchio sistema.

Gli stessi ingegneri Apple si sono dimostrati non esattamente all’altezza: le loro risposte ancora latitano e quando arrivano, non sono del tutto esaustive, soffermandosi su un solo modo di programmare , talvolta utilizzato da una percentuale minima dei programmatori. Intanto anch’io mi sono cimentato, proponendo una soluzione che riduca l’impatto sulle ore di lavoro e mantenga la retrocompatibilità con il 6. La speranza è che funzioni.

 

Il confronto con i programmatori ha portato Apple ha fare alcuni importanti correttivi. Dai primi giorni di settembre è possibile scaricare anche le versioni vecchie per quelle app che hanno interrotto la compatibilità con i precedenti sistemi operativi.

Nel nostro caso stiamo sviluppando un update per un nostro prodotto, iEtiquette che sarà compatibile solo con iOS7. Mentre per chi non avesse o potesse aggiornare sarà comunque possibile scaricare la versione precedente. Questa è una scelta di importanza enorme perché favorisce sia sviluppatori che utenti.

Il cambiamento, come dicevo all’inizio di questo post è radicale. Sicuramente qualcuno si lamenterà. Negli ultimi giorni ho letto di diverse polemiche riguardo ad aggiornamenti  di applicazioni a pagamento che – con il pretesto del passaggio al sistema 7 – dovranno essere pagate di nuovo dagli utenti che le avevano a suo tempo scaricate. Un caso eclatante – notizia di oggi – riguarda il task manager CLEAR che nella nuova versione iOS7 compatibile richiede ben 3 euro.

L’effort per rendere una app compatibile con iOS7 è molto elevato e per applicazioni complicate (CLEAR non è tra queste) è abbastanza normale che gli sviluppatori richiedano un pagamento. Il problema è che non è possibile fissare un prezzo di update, o gratis o tutto. D’altra parte ritengo che sia normale che un’applicazione supporti gratuitamente un solo sistema operativo. È una situazione che nel mondo desktop viviamo tutti i giorni (è probabile che qualcuno se ne approfitti, avvelenando il mercato).

 

Altre sorprese passate in sordina sono la possibilità di scaricare app in 3G fino a 100MB (prima il limite era di 50MB) e che un’applicazione per iPhone su iPad userà le risorse per retina display e verrà visualizzata a quasi tutto schermo, con un miglioramento sull’usabilità davvero notevole.

 

In attesa delle novità Apple, alcune previsioni e un paio di riflessioni.

Sono passati 3 mesi circa dalla presentazione di iOS7 e OSX Mavericks e in questo periodo si sono susseguite un’infinità di immagini inerenti al fantomatico iPhone low cost e all’ iPhone 5S. In realtà niente di sorprendente. I primi leak di questi modelli risalgono già ai primi mesi del 2014. È possibile che Apple non sia più in grado di stupirci? (come si è detto nel precedente articolo http://cloudintouch.it/2013/09/05/apple-e-la-capacita-di-inventare-il-futuro/). Senza dubbio l’ufficio marketing di Cupertino è abile a creare un “clima di attesa” intorno ai nuovi prodotti attraverso un gioco di mezze verità e un po’ di smentite. Tuttavia, è anche evidente un grosso problema di sicurezza interna. Basti pensare che  le immagini dei primi iPhone 5 furono mostrate prima della presentazione del 4s.

Read more!

I video di iOS7 hanno sorpreso tutti quanti per l’interessantissimo effetto di parallasse. Ma come funziona? E come è possibile implementarlo anche su versioni precedenti di iOS?

Potete osservarne il funzionamento in questo video dei ragazzi di iDownloadBlog.com

Partiamo dalle basi, spiegando cos’è un effetto di parallasse. La definizione su wikipedia è: “fenomeno per cui un oggetto sembra spostarsi rispetto allo sfondo se si cambia il punto di osservazione”. Nulla da aggiungere, lo sperimentiamo ogni giorno con i nostri occhi. Il nostro cervello per dare aspetto di tridimensionalità a quello che guardiamo grazie alla visione binoculare riesce a comporre immagini che fanno sembrare gli oggetti più vicini più grandi di quelli lontani, fornendo quindi una certa profondità all’immagine composta.

Un esempio lampante è quando si viaggia in treno, lo sfondo sembra composto da più strati che si muovono a velocità diverse.

Su iOS questo effetto ovviamente ottenuto tramite una simulazione con l’aiuto del giroscopio. Credo che ben pochi non siano al corrente che sui dispositivi Apple (da iPhone 4 in su e iPad 2 in su) sia installato un giroscopio oltre al classico accelerometro. Con l’accelerometro si familiarizza più facilmente: è un dispositivo che misura le accelerazioni sui 3 assi cartesiani. Il giroscopio, invece, misura accelerazioni angolari. È un dispositivo molto interessante che consente in alcune applicazioni di fornire un’esplorazione panoramica di una foto (o universo di un gioco) ruotando sul nostro asse. Si tratta dello stesso dispositivo che ci consente di creare le foto panoramiche.

È un tipo di tecnologia proveniente dall’aeronautica e dai lanci spaziali… davvero interessante!

Salvo smentite, sugli ultimi dispositivi, il chip MEMS (se non sapete cos’è un MEMS leggete qua, non posso dirvi tutto io) del giroscopio è fabbricato da una certa STMicroelectronics azienda italo-francese, ma con origini italiane (solo un nome: Adriano Olivetti).

Grazie ai giroscopi è possibile ottenere gli angoli di rotazione del dispositivo. Angoli che hanno il nome di imbardata, beccheggio e rollio, nomi che derivano dalla navigazione marina e aeronautica.

Giroscopes, courtesy Apple Inc.

Giroscopio

 

Su iOS gli accelerometri sia assiali che angolari sono gestiti da un framework chiamato CoreMotion. Esistono tre classi all’interno di questo framework che consentono l’ottenimento dei dati:

  1. CMAccelerometerData: fornisce le accelerazioni assiali
  2. CMGyroData: fornisce le accelerazioni angolari
  3. CMDeviceMotion: incapsula le misurazioni combinate come l’”assetto” del dispositivo

Istanze di CMMotionManager danno l’accesso a questo tipo di informazioni. I dati possono essere ottenuti in due modi:

  •  push: specificando un intervallo di tempo si fornisce un block per gestire i dati. Ad ogni intervallo il block verrà inserito all’interno di una specifica coda di esecuzione in attesa di essere processato
  • pull: è un tipo di richiesta effettuato direttamente dall’app, che in determinati momenti richiede lo stato del dispositivo

Ottenere le informazioni dagli accelerometri è un’operazione che richiede diversa energia e che quindi tende a consumare molta batteria, per questo motivo generalmente è meglio richiedere le informazioni in modalità pull.

CMDeviceMotion è la classe che ci interessa, perché non ci fornisce il dato diretto dagli accelerometri, ma lo rielabora in modo, ad esempio, da eliminare l’accelerazione gravitazionale. Une delle sue proprietà è l’attitude, cioè l’asseto del dispositivo. La simulazione del parallasse funziona leggendo la posizione del dispositivo e modificando la posizione di quello che stiamo guardando sullo schermo, in pratica se prima eravamo noi a muoverci adesso è ciò che viene visualizzato che si muove.

Questa è solo una prima parte. Per dare un effetto di tridimensionalità non è sufficiente che l’immagine si muova, è necessario anche fornirle una prospettiva. In questo ci viene in aiuto il CATransformLayer e la sua proprietà -sublayerTransform.

CATransformLayer è una classe particolare che non appiattisce le trasformazioni all’interno della gerarchia dei sub-layer, ma riesce a mantenerne la tridimensionalità. -sublayerTransform è invece una proprietà di tutti i CALayer che consente di applicare una trasformazione a tutti i sublayer di quel layer specifico. Preso coscienza della tridimensionalità, esiste ancora una proprietà che fa cambiare prospettiva a tutto quello che vediamo e per farlo bisogna per forza applicarlo alla -sublayerTransform property, in modo che venga propagato lungo tutta la gerarchia di sublayer. In particolare ci interessa toccare un parametro della matrice di trasformazione: il valore m34 (non è un gruppo musicale, quelli sono gli m83 e hanno fatto la colonna sonora di Oblivion). Il valore di m34 rappresenta il punto di fuga applicato alla prospettiva dei layer ed è proprio quello che fornisce realismo a questo effetto.

Per una applicazione che stiamo sviluppando qui a Cloud In Touch, ho deciso di creare un effetto simile a quello di iOS7. Dopo aver navigato sul web, sono venuto a conoscenza del progetto di Arnaud Coomans chiamato Parallax. Si trattava di un ottimo punto di partenza che, purtroppo, non si adattava al porting su un’app da rilasciare in AppStore. Sembrava perfetto… ma solo in apparenza: un bug abbastanza fastidioso portava l’immagine ad impazzire quando l’utente provava a tenere il dispositivo dritto, in modalità portrait.

fuuuuuuuu

FUUUUUUUUUUUUU

Partendo da quel progetto in sé ben studiato (cosa rara), ho deciso di trovare un fix. Ammetto che per un certo tempo la mia mente ha vagato nel vuoto, poi i miei mille anni di ingegneria mi hanno ricordato un concetto di aeronautica che aveva attirato particolarmente la mia attenzione: il cosiddetto GIMBAL LOCK (blocco cardanico) e i QUATERNIONI.

QUATER CHE???????

Cosa è il Gimbal lock e perché è così importante? In pratica è :

perdita di un grado di libertà in uno spazio tridimensionale che avviene quando due, dei tre giunti cardanici, si trovano una configurazione parallela, bloccando il sistema in una rotazione su due dimensioni

Questa immagine con un aereo può fornire un aiuto per comprendere meglio la situazione.

Gimbal lock, courtesy wikipedia

Gimbal lock

Il Gimbal lock è una cosa seria che ha quasi compromesso la missione Apollo 11 (quella dell’allunaggio). Inoltre la questione è ben nota anche a chi ha visto il film nel film Apollo 13.

Non devo allunare, ma solo prendere dei valori corretti da sensori. E in questo caso vengono in aiuto due entità matematiche: le matrici di trasformazione o i quaternioni. Bisogna abbandonare gli angoli di Eulero (imbardata, beccheggio e rollio) per addentrarsi in mondo un po’ più complicato.

Descrivere un quaternione è una cosa complessa vi basti sapere che è un’estensione dei numeri immaginari, trattasi di spazio vettoriale a dimensione 4. Per saperne di più, ecco un bel link a wikipedia (per me rimane un mistero).

Utilizzando questi valori o la matrice di rotazione è possibile evitare quel fastidioso effetto di “agitazione” dell’immagine.

Una volta rilasciata l’app verrà rilasciata anche la classe che crea questo effetto, nel frattempo godetevi il video!! SII PUO’ FARE!!!!

Fonti:

Wikipedia

http://www.macworld.com/article/2042808/inside-the-technology-behind-ios-7s-parallax-effect.html