• Raffaele Fanizzi su LinkedIn

Archives

Archives / 2012
  • Italo e Twitter: Orario Treni si aggiorna alla versione 2.3

    Sull'Apple Store è disponibile la nuova versione di Orario Treni, la 2.3, che introduce parecchie novità.

    La più richiesta in assoluto da parte degli utenti è l'integrazione con Italo. Il nuovo servizio ferroviario di NTV è parecchio diffuso, infatti, specie in ambito business, ed è per questa ragione che negli ultimi mesi abbiamo lavorato per integrare Italo nella ricerca delle soluzioni viaggio e dello stato in tempo reale di un treno.

    Orario Treni 2.3, inoltre, è stato ottimizzato per iPhone 5, il che garantirà a chi possiede l'ultimo gioiellino di Apple di vedere sfruttato appieno il suo display più lungo, utile specie nella consultazione degli arrivi/partenze di una stazione e delle fermate effettuate/da effetturare di un treno. Sfortunatamente Apple non consente di pubblicare applicazioni ottimizzate per iPhone 5 e contestualmente conservare la retrocompatibilità con le vecchie versioni di iOS e di iPhone. E' per questo motivo che questa versione di Orario Treni è disponibile solo per chi ha iOS 4.3 o superiore e per chi possiede almeno un iPhone 3GS  o un iPod Touch di terza generazione.

    L'integrazione con Twitter è un'altra nuova funzionalità. Questa idea non ci è stata segnalata da nessuno, ma ha l'obiettivo di consentire a chi è in attesa di un treno di twittarne lo stato. Orario Treni genera automaticamente un messaggio composto dal nome del treno, dall'hashtag dell'operatore (#trenitalia o #italotreno), lasciando poi liberta di integrare il messaggio prima di pubblicarlo. Chiaramente per poter usufruire di questa funzionalità è necessario avere almeno iOS 5 con Twitter correttamente configurato.

    altro

  • Windows 8: autenticazione automatica

    Lo so che in questo post potrei passare per uno che è legato al "vecchio", ma aggiornando tutti i miei computer a Windows 8 ho sentito la necessità di risolvere un problema che magari alcuni di voi hanno riscontrato. Io sono uno di quelli che ha ancora il caro vecchio desktop o pc fisso che trovo ancora utile perché posso avere la mia bella postazione fissa con doppio monitor ed un sistema aggiornabile e potente senza dover ogni volta cambiare tutto il computer (come accadrebbe per esempio con un notebook). Come ogni buon utilizzatore di un PC fisso, non trovo utile ad ogni avvio dover eseguire l'autenticazione di Windows.

    Fino ad oggi, tutti i sistemi operativi da Windows 95 in poi, si avviavano senza chiedere nulla, anche perché il più delle volte il PC era impostato con un solo utente amministratore senza password. Con Windows 8, tuttavia, è stata introdotta una straordinaria possibilità: utilizzare il proprio account live per autenticarsi. Questa possibilità consente ad un utente di installare applicazioni, configurarle, etc.... ritrovandosi magicamente tali impostazioni su tutti i computer con Windows 8 che utilizzano il medesimo account. In realtà questo meccanismo non è automatico per tutte le app, ma dipende da come queste sono fatte: impostazioni come gli account email e dei social network funzionano in questo modo e lo trovo molto comodo. Il problema principale di questo approccio è che Windows 8 richiede l'immissione della password ad ogni avvio e, se tale pratica la trovo utile e consigliabile per un notebook o un tablet, francamente sul mio caro vecchio PC fisso voglio evitarla.

    Per fare in modo che Windows 8 si avvii automaticamente autenticandosi senza richiedere password, dovete seguire la seguente procedura:

    1. Avviate un programma chiamato netplwiz (consiglio WIN+R e poi netplwiz + INVIO)
    2. Si aprirà una schermata che mostra tutti gli utenti del vostro sistema
    3. Eliminate la spunta "Users must enter a user name and password to use this computer" (o l'equivalente in italiano)
    4. Vi verrà chiesto nome utente e password da usare per l'autenticazione automatica all'avvio del computer
    5. Cliccate su Ok

    Al successivo riavvio potrete verificare che il sistema operativo parte senza richiedere nulla :)

    altro

  • Microsoft DevCamps 2012 Bari: un altro grande evento

    Venerdì scorso io insieme a molti altri membri di DotNetSide abbiamo affrontato insieme a Lorenzo Barbieri e Vito Lorusso di Microsoft un altro evento, il Microsoft DevCamps 2012 Bari. E' stata una piacevolissima esperienza preceduta da una divertentissima serata pre-evento ricca di specialità enogastronomiche pugliesi (crudo di mare, sporcamusi, ecc...) e di un terribile mojito al frutto della passione :D

    Anche la giornata dell'evento è stata caratterizzata da ampie parentesi culinarie (questa volta a base di burratine, mozzarelle e ricotta), ma oltre a questo aspetto, senza ombra di dubbio preponderante, sono stati affrontati nel corso dell'evento molteplici argomenti legati alla programmazione basata su Visual Studio 2012 e .NET Framework 4.5 che, spero, abbiano soddisfatto tutti i partecipanti.

    Le slide del mio intervento sono disponibili in questo post mediante Slideshare, mentre a breve verranno pubblicate su DotNetSide sia le slide che la demo.

    Ringrazio Fabio Cozzolino, Vito Arconzo, Salvatore Aprile, Andrea Colaci e i ragazzi di Microsoft per aver reso anche questo evento divertente, piacevole ed interessante con la loro personalità e professionalità.

    altro

  • Cosa penso dell'iPhone 5

    Amici, parenti, colleghi, tutti mi fanno questa domanda e allora ho pensato: dedico a questa risposta un post nel mio blog in maniera da rendere pubblica la mia posizione sull'iPhone 5.

    Cominciamo subito col dire che chi si aspettava qualcosa di completamente o significativamente diverso rimarrà deluso dall'iPhone 5, ma questo di fatto vale per qualsiasi nuovo iPhone che è stato presentato a partire dal 3G. Insomma, parliamoci chiaramente: che Apple decida di punto in bianco di modificare radicamente come è iOS e, conseguentemente, il layout dei propri dispositivi è e risulterà anche in futuro ampiamente improbabile. Il motivo è presto detto ed è legato alla retrocompatibilità da mantenere nei confronti di un ecosistema hardware e software con uno store che conta più di 600.000 applicazioni. Esiste un fattore poi legato alla riconoscibilità dell'iPhone, sia dal punto di vista estetico, che della user interface, che ha dimostrato di funzionare molto bene e che non verrà stravolto solo perché chi ha avuto i precedenti iPhone pretende qualcosa di radicamente nuovo.

    Quello che voglio fare, quindi, è analizzare ciò che è cambiato in iPhone 5, non con gli occhi di chi ha avuto alcuni dei modelli precedenti e che quindi a seguito di una prima sbrigativa occhiata emette la fatidica frase "è uguale al precedente", ma con l'oggettività che una valutazione del genere merita. Se si esegue un'analisi del genere è impossibile non rendersi conto che l'iPhone 5 ha praticamente tutto di diverso rispetto ai precedenti. Analizziamo i punti nel dettaglio.

    Processore (o SoC)

    Questo è uno degli aspetti più interessanti che meritano di essere sviscerati. L'iPhone 5 introduce un nuovo processore denominato A6 che sorprende da svariati punti di vista. Molti si aspettavano un processore quadcore, pensando che la scelta più logica in questo settore sarebbe stata quella di rincorrere la concorrenza rappresentata da dispositivi Android dotati di processori quadcore (come il Tegra 3  di NVIDIA o l'Exynos di Samsung) o di introdurre un processore dual core, con core di tipo ARM A15, una nuova famiglia di core concessi in licenza da ARM e particolarmente efficienti.

    Apple, tuttavia, ha spiazzato tutti decidendo di realizzare un processore dual core dotato di core dal design custom (nè Cortex A9, nè A15), particolarmente curato sotto il profilo dell'accesso alla memoria, identificato da Apple come uno dei maggiori colli di bottiglia. In particolare è stata ampliata l'ISA supportata dalla CPU aggiungendo le estensioni VFPv4 all'ISA ARMv7-A. Queste estensioni sono tipiche dei processori ARM A15 e garantiscono prestazioni nettamente superiori in specifici ambiti d'uso. Si tratta nel complesso di un approccio che pochi operatori del settore sono in grado di perseguire visto che, fatta salva Samsung, tutti gli altri produttori di smartphone non producono SoC in casa.

    Il processore Apple A6, inoltre, è costruito con un processo produttivo a 32 nm (sviluppato da Samsung) che, rispetto ai 45 nm dell'A5 (iPhone 4S/iPad 2) e dell'A5X (New iPad), gli consente di raggiungere un duplice obiettivo: consumare meno ed essere più piccolo (95 mm2 rispetto ai 122 del A5 e 163 A5X)

    Il risultato di queste innovazioni? I numeri di Anandtech parlano chiaro: il processore A6 dell'iPhone 5 è il più potente SoC attualmente disponibile per smartphone, superiore nei benchmark anche ai più raffinati quadcore concorrenti, come quello che equipaggia il famigerato Samsung Galaxy S3, uscito circa 4 mesi prima.

    GPU

    Sul versante GPU l'iPhone 5 introduce una configurazione del tutto inedita. Apple da sempre si è affidata ai processori grafici della famiglia PowerVR di Imagination Technologies (della quale detiene anche un bel gruzzoletto di azioni), la cui raffinata architettura Tile Based Deferred Rendering ha in più occasioni dimostrato la sua superiorità in termini di performance per watt.

    L'iPhone 4S utilizza una GPU PowerVR SGX543 MP2 di tipo dual core, il che gli ha garantito per parecchio tempo le migliori prestazioni nella grafica 3D rispetto alla concorrenza. Questa è la stessa GPU utilizzata precedentemente nell'iPad 2, mentre il New iPad introdusse una GPU PowerVR SGX543 MP4 di tipo quad core. Quest'ultima scelta è stata dettata  dalla necessità di fornire un'adeguata potenza di calcolo ad un tablet che ha la più elevata risoluzione del display attualmente in circolazione (ben 2048x1536),

    Con l'iPhone 5, Apple ha deciso di utilizzare la medesima GPU, ma se da un lato voleva fornire il doppio delle prestazioni, dall'altro voleva mantenere compatto il SoC e i consumi. Pertanto poiché la GPU quad core del New iPad avrebbe comportato la realizzazione di un SoC troppo grande e avido di energia per uno smartphone, Apple ha deciso di realizzare di utilizzare la GPU una GPU PowerVR SGX543 MP3 a tre core. Chiaramente un core in più non avrebbe consentito il raddoppio delle prestazioni rispetto all'iPhone 4S ed è per questo motivo che la frequenza di clock rispetto a quest'ultimo è stata incrementata.

      

    Sempre Anandtech ha misurato le prestazioni di questa GPU utilizzando un GLBenchmark disponibile sia sul marketplace Android che Apple. Da notare che già l'iPhone 4S se la cavava bene da questo punto di vista, ma l'iPhone 5 fa nettamente meglio risultando essere il doppio più veloce del suo predecessore e, in generale, il più veloce in assoluto rispetto agli altri smartphone. 

    Display, costruzione e dimensioni

    L'incremento delle dimensioni del display dell'iPhone 5 è tra le più discusse del web. Si tratta indubbiamente di una delle caratteristiche che saltano subito all'occhio, visto che da essa è determinata buona parte delle modifiche estetiche del device. L'iPhone 5 monta un display LCD IPS (i cui produttori se non erro sono LG e Sharp) dalla risoluzione di 1136x640 pixel. I 176 pixel in più in verticale gli hanno consentito di mantenere una densita pari a 326 pixel per pollice, la stessa dell'iPhone 4/4S, nonostante il display sia passato da 3,5 a 4 pollici. La scelta di adottare questa nuova configurazione ha l'obiettivo di coniugare due esigenze: aumentare la dimensione del display così da competere meglio con gli smartphone concorrenti e conservare la compatibilità con le migliaia di app disponibili sull'Apple Store. Tutte le app studiate per i precedenti iPhone, infatti, funzioneranno perfettamente senza alcuna modifica adottando semplicemente due bande nere in alto e in basso, mentre quelle che verranno aggiornate potranno adottare i nuovi strumenti di sviluppo per iOS 6 grazie ai quali è possibile realizzare app la cui interfaccia si adatta dinamicamente alla risoluzione del display.

    Il nuovo display è stato, inoltre, significativamente migliorato sotto il profilo della resa dei colori. In particolare è stato coperto al 100% lo spazio dei colori RGB, oltre ad essere migliorati i parametri relativi al rapporto di contrato ed alla luminosità. Per maggiori informazioni su questi aspetti vi invito a leggere l'analisi di Anandtech di questo display, della quale vi riporto semplicemente le conclusioni:

    "Wrapping up, the iPhone 5 display is a quantum leap better than the display on the iPhone 4. Contrast levels and light output have both been increased, and color performance is astonishing. The full sRGB gamut is present here, and color errors are remarkably low even for a high end desktop display. While many were hoping for a move to OLED or some other screen innovation, this really is a huge step up that is very easy to quantify. To put this in perspective, in the past few years I've reviewed probably 30-40 different displays, from PC monitors to TVs to projectors. Not a single one, out of the box, can put up the Gretag Macbeth dE numbers that the iPhone can, and perhaps one projector (which listed for $20,000) can approach the grayscale and color accuracy out of the box"

    Nel complesso Anandtech loda non solo le caratteristiche generali, ma soprattutto la maniacale cura di Apple nella regolazione dei parametri del display al fine di rendere la sua calibrazione perfetta.

    Le novità, tuttavia, non finiscono qui. Il nuovo display, infatti, introduce una nuova tecnica di costruzione denominata in-cell, grazie alla quale, contrariamente a quanto è accaduto fino ad ora in cui il display ed il sensore touchscreen erano separati, queste due fondamentali componenti sono state integrate al fine di rendere questo LCD particolarmente sottile.

    Diretta conseguenza delle scelte legate al display sono le dimensioni dell'iPhone 5: 123,8 x 58,6 x 7,6 mm. La larghezza è la stessa che ha caratterizzato l'iPhone 4 e 4S, mentre aumenta l'altezza da 115,2 mm a 123,8 e diminuisce lo spessore da 9,3 mm a 7,6 mm. Il nuovo processore grafico più piccolo, unito al nuovo display e ai nuovi materiali, inoltre, hanno consentito all'iPhone 5 di ridurre il suo peso dai 140 gr dell'iPhone 4S a soli 112 gr.

    Il ridotto peso è anche figlio dei nuovi materiali e dalla differente costruzione dell'iPhone 5 rispetto al suo predecessore. Benché vedendolo frontalmente possa risultare simile al 4S, l'iPhone 5 in realtà è fatto in maniera radicamente differente: il suo corpo è ora in alluminio anodizzato con bordi tagliati a 45° (utilizzando un diamante!!!) e sparisce buona parte del vetro posteriore, a tutto vantaggio

    Fotocamera e nuovo connettore

    Questo sono i due aspetti a mio modo di vedere più deludenti. L'iPhone 5 introduce un nuovo connettore completamente digitale denominato Lightning che va a sostituire il precedente connettore a 30 pin (misti digitali e analogici) e che ha il vantaggio di essere più compatto e di poter essere inserito in entrambi i versi. Di fatto, tuttavia, questa modifica risulta essere distruttiva in termini di retrocompatibilità con tutti gli acccessori che fino ad ora sono stati prodotti per iPhone e iPod Touch. Chiaramente esiste un adattatore dal vecchio al nuovo formato, ma deve essere acquistato separamente. Insomma, niente di grave per chi userà l'iPhone 5 senza averne avuti altri, mentre sarà una rottura di scatole per i restanti.

    Il sensore della fotocamera è lo stessa utilizzato dall'iPhone 4S. Si tratta in verità un ottimo sensore, che si è ben difeso nei confronti con gli altri smartphone di fascia alta fino ad ora, e al quale è stata affiancata un'ottica migliorata e un cristallo di protezione in zaffiro. Non so quanto queste migliorie portino effettivamente un miglioramento delle capacità fotografica dell'iPhone 5, ma in ogni caso sono certo che non faranno gridare al miracolo quanto le novità che sta introducendo Nokia con il suo prossimo Lumia 920 basato su Windows Phone 8.

    Conclusioni

    Nel complesso, con questa mia disamina, penso di aver dimostrato portando numeri, benchmark e cifre oggettive (e figlie di analisi accurate ed imparziali che chi conosce Anandtech apprezza da tempo) che l'iPhone 5 è il doppio più veloce sia per la CPU che per la GPU, più sottile, più leggero, più residente e dallo schermo più grande e con colori migliori. Insomma che l'iPhone 5 introduca nulla o poco di nuovo è palesamente falso e può essere affermato solo se lo si osserva con occhi poco critici e molto probabilmente annebbiati dall'astio nei confronti di Apple. Che poi il suo prezzo sia commisurato alle sue caratteristiche è un discorso che può essere affrontato fino ad un certo punto: quando si spende lo si fa sia analizzando gli aspetti oggettivi che, soprattutto, soggettivi. I numeri dimostrano indiscutibilmente che l'iPhone 5 è uno smartphone di fascia alta ed ha un prezzo (almeno nella versione a 16 GB) che non è molto diverso da quello degli altri suoi concorrenti di fascia alta al momento della loro commercializzazione. E' evidente che nel prezzo di un iPhone 5 si paga anche l'esclusività che da sempre il marchio Apple si porta dietro, ma questo mio articolo vuole dimostrate che si tratta di un'esclusività dovuta non solo alla componente glamour della mela morsicata, ma a mio parere soprattutto da altri fattori quali la ricerca della perfezione, la cura dei particolari (che indubbiamente contraddistinguono tutti i prodotti Apple), un ecosistema software che garantisce un parco di app di maggiore qualità e aggiornamenti costanti e continui di iOS per diversi anni, tutto alla portata di tutti, senza dover smanettare e senza dover sapere cosa è e dove reperire ROM custom o app (leggesi virus) di dubbia provenienza.

    altro

  • La Crypto Suite diventa per tutti

    Tutte le applicazioni della Crypto Suite (CryptoBox Pro, CryptoBox, CryptoDoc e CryptoPic) si aggiornano alla versione 1.2 che introducono significativi miglioramenti nella stabilità e nelle prestazioni. In particolare, a seguito della segnalazione di alcuni utenti dotati di iOS 4 e iPod Touch, ho verificato che effettivamente l'app crashava in queste condizioni a causa di una serie di funzionalità non presenti nella meno recente versione di iOS.

    La nuova versione risolve tutte queste incompatibilità e, grazie all'aggiornamento a Monotouch 5.4, migliora anche drasticamente le prestazioni di encrypting e decrypting delle informazioni. Questa nuova versione, infatti, introduce un mapping diretto degli algoritmi di cifratura AES sull'implementazione nativa di iOS. In altre parole: se prima i calcoli venivano eseguiti con le unità di calcolo tradizionali, adesso sono delegati alle unità ottimizzate presenti nei processori di tutti gli iPhone e iPod Touch, anche i più datati. Benchmark effettuati dal sottoscritto hanno evidenziato un incremento delle prestazioni del 500% :)

    altro

  • Si passa a Disqus

    Quest'oggi vi presento un piccolo aggiornamento del mio blog: l'implementazione di Disqus quale sistema per la gestione dei commenti.

    Disqus è un progetto interessante, uno di quelli destinato ad avere grande diffusione e, infatti, è stato adottato da siti del calibro della CNN, Time, People, IGN, ecc... L'idea alla sua base è molto semplice: vista la diffusione dei social network e considerando che la maggioranza di chi naviga in internet ha almeno un account tra Facebook, Google, Twitter, ecc..., Disqus consente ad un sito che pubblica contenuti di qualunque tipo (blog, notizie, recensioni, ecc...), di associare ad ogni contenuto un sistema di commenti a disposizione dei suoi lettori.

    Senza Disqus la maggioranza dei siti, per consentire ai propri lettori di scrivere commenti, ha richiesto fino ad oggi una registrazione o, al più, lo ha consentito in forma anonima. Grazie a Disqus chiunque abbia un account con i più diffusi social network può commentare senza doversi nuovamente registrare e autenticare.

    Si tratta di un'evoluzione importante perché commentare è alla base dell'interazione tra un sito e i suoi lettori e questo strumento abbatte una barriera importante (appunto quella della registrazione e autenticazione), raggiungendo due importanti obiettivi: integrarsi con i social network e realizzare una sorta di single sign-on (il che significa autenticarsi una volta su un social network e risultare autenticati automaticamente su qualsiasi sito che usa Disqus).

    Chiaramente Disqus, anche nella sua versione gratuita, mette a disposizione del sito che lo utilizza tutti gli strumenti di moderazione necessari sia per evitare la degenerazione delle discussioni, evento, vi assicuro, non troppo infrequente sul web, sia per proteggersi dallo spam.

    altro

  • Orario Treni 2.2 e CryptoBox 1.1

    Come anticipato nel precedente post, una nuova versione di Orario Treni, la 2.2, ha fatto capolino da qualche giorno nell'Apple Store. La novità principale di questa versione è rappresentata dalla compatibilità con iOS 6. A tal proposito faccio i miei complimenti a Giuseppe per avermi contattato ed aver indovinato questa novità riconoscendo nello screenshot del precedente post che la barra di stato è colorata di rosso. In iOS 6, infatti, tutte le app che usano la barra di navigazione, imposteranno automaticamente la barra di stato ad una tonalità leggermente più scura rispetto a quella della barra di navigazione.

       

    Inoltre, tutte le applicazioni della Crypto Suite (CryptoBox Pro, CryptoBox, CryptoDoc e CryptoPic) sono state aggiornate alla versione 1.1 che, oltre ad essere compatibili con iOS 6, risolvono alcuni bug ed aggiungono la possibilità di modificare la password ed il suggerimento relativo. A tal proposito vi faccio presente che la modifica della password è un'operazione realmente costosa in quanto l'app deve decriptare tutti i dati con la vecchia password e ricriptarli con la nuova. Effettuate, quindi, questa operazione solo se è strettamente necessario.

    altro

  • Orario Treni in versione 2.1 per iOS e 1.2 per Windows Phone, ma non è tutto...

    Quest'oggi è stata pubblicata la versione 2.1 di Orario Treni per iOS che risolve una serie di problematiche ed aggiunge anche nuove funzionalità. In particolare è stato risolto un crash che si verificava all'avvio dell'app in particolari condizioni di passaggio dalla rete 3G alla rete WiFi. In questi casi può accadere che lo stack network di iOS faccia le bizze ed è necessario gestire la cosa, pena un crash dell'applicazione.

    Orario Treni 2.1

    In termini funzionali è stata aggiunta la possibilità di aggiornare gli orari di un treno direttamente dalla sua schermata di dettaglio. Fino ad oggi, invece, era necessario uscire ed entrare nuovamente nel dettaglio di un treno per aggiornarne le informazioni. Questa funzionalità era già stata implementata nella versione di Orario Treni per Windows Phone.

    I più attenti noteranno un particolare nello screenshot sopraesposto che preannuncia l'arrivo di una nuova versione per iOS nel giro di poche settimane. Al primo che mi invia un'email ed indovina di cosa di tratta regalo un codice promozionale dell'app :)

    La versione 1.2 di Orario Treni per Windows Phone introduce la funzionalità di localizzazione delle stazioni ferroviarie basate su GPS, il supporto ufficiale a Windows Phone Tango, nuove animazioni di transizione da una schermata alla successiva, oltre a risolvere alcuni bug relativi alla precedente versione.

    Tutti i fruitori di Orario Treni, inoltre, sia per Windows Phone che per iOS, avranno a disposizione informazioni più precise e corrette per quanto concerne i binari dei treni.

    Orario Treni per iPhone 

    altro

  • Windows 8, Visual Studio 2012 e .NET Framework 4.5

    Ieri, 15 Agosto 2012, è stata una giornata abbastanza importante per chi come me è appassionato delle tecnologie Microsoft. Benché Windows 8 abbia raggiunto la sua versione definitiva, la cosiddetta RTM (Release to Manufacturing), il 1 Agosto, solo ieri tale versione è stata rilasciata al pubblico e, in particolare, a chi è provvisto di una sottoscrizione MSDN. Non stiamo parlando, quindi, di un rilascio alla massa nella sua versione inscatolata (ammesso che qualcuno lo abbia mai acquistato in questa forma), ma di una commercializzazione che coinvolge prevalentemente aziende e sviluppatori software. 

    Chiaramente da appassionato e sviluppatore quale sono, negli anni ho sempre atteso questo momento per installare e toccare con mano la nuova versione di Windows, anche se quest'anno c'è ben poco lasciato all'immaginazione. La politica adottata da Microsoft che ha visto la pubblicazione online di ben due versioni non definitive di Windows 8 (Customer Preview e Release Preview) ha da un lato consentito a chiunque volesse di provare il suo nuovo OS, ma d'altro canto ci ha privato di quel fattore sorpresa al quale eravamo abituati fino ad ora. Come tutte le scelte, anche questa ha i suoi pro e contro e ritengo comunque apprezzabile l'apertura di Microsoft a questo nuovo modello di rilascio, certamente più vicino al pubblico finale rispetto al passato.

    Windows 8 ha fatto e farà sicuramente parlare di sé in quanto è il tentativo di Microsoft di coniugare due strade che fino ad oggi sono sempre state ben distinte tra loro: il mondo del PC e quello dei dispositivi mobile (tablet in particolare). L'unica azienda che fino ad ora ha iniziato un percorso simile è Apple, che con il suo Mac OS in ambito personal computer e iOS nel suo iPad ha provato, prevalentemente grazie all'uso della piattaforma iCloud, a rendere il più fluido possibile il passaggio da una piattaforma all'altra.

    Windows 8

    Microsoft si è posta un traguardo ancora più ambizioso: non solo parte essenzialmente da zero nel mercato tablet (Windows 7 Starter non lo considero nemmeno, del resto qualcuno tra voi l'ha sentito forse nominare prima d'ora?), ma ci si fionda con un nuovo sistema operativo che sarà lo stesso che troveremo installato sulla prossima generazione di personal computer e notebook. Windows 8 rappresenta, quindi, una fusione a freddo tra PC e tablet con la sua nuova interfaccia Metro (specificatamente ideata per dispositivi touchscreen) che mette in secondo piano (ma non elimina) la classica visualizzazione del desktop.

    Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP, Windows Vista e Windows 7 avevano in comune almeno un elemento: il menu Start. Con Windows 8 si cambia e tale menù è stato sostituito da questa nuova interfaccia.

    E' chiaro che i puristi dei personal computer non potranno che storcere il naso di fronte ad una scelta così radicale, ma in fin dei conti immagino che anche quando arrivò il menu Start esisteva una generazione di power user che non vide di buon occhio tale novità. Più in generale, le novità sono spesso difficili da digerire: bisogna comprenderle, adattarsi, bisogna imparare ad usarle. In altre parole richiedono impegno ed un allargamento dei propri orizzonti e delle proprie abitudini che non tutti hanno voglia di affrontare.

    Windows 8 non è nuovo solo perché ha una nuova interfaccia grafica, ma è stato profondamente rinnovato in moltissime componenti a basso livello e tale opera di rinnovamento ha permesso di dare vita ad un'altra grande novità: Windows RT. Sui vostri personal computer, notebook e anche sui prossimi tablet saranno disponibili due versioni di questo nuovo OS: Windows 8 e Windows 8 Pro (la versione Enterprise non penso che la vedrete mai). Queste versioni funzioneranno su tutti i personal computer con processore x86 e x64, esattamente come è stato fino ad ora per Windows 7.

    Con Windows RT, invece, Microsoft vuole conquistare il mercato dei PC, notebook e, in particolar modo, tablet basati su processori ARM, cioè CPU (o forse sarebbe meglio dire SoC - System On Chip) con un instruction set diverso da quello x86 e che fino ad oggi abbiamo potuto vedere solo sugli iPad o sui tablet Android. I processori ARM hanno un'efficienza energetica particolarmente elevata e, pertanto, ben si prestano alla realizzazione di dispositivi ultraportatili come lo sono i tablet. Un esempio di dispositivo che verrà proposto sia in versione x86 con Windows 8 Pro, che in versione ARM con Windows RT è Surface di Microsoft.

    Oltre a Windows 8, ieri sono stati rilasciati anche Visual Studio 2012 e il .NET Framework 4.5.... ma poiché devo correre ad installare Windows 8 ne riparleremo tra qualche giorno :)

    altro

  • Crypto Suite: le app per proteggere i propri dati

    Contestualmente alla nuova grafica di questo blog, vi presento il frutto di qualche mese di lavoro: una nuova famiglia di app per iPhone che nasce con l'obiettivo di proteggere i vostri dati.

    Come spesso accade nel mondo degli sviluppatori software, l'idea dietro lo sviluppo di un software scaturisce da un'esigenza personale e la suite di app in questione è stata elaborata proprio a seguito di una mia necessità: poter avere a portata di mano (o se vogliamo di app) una serie di informazioni sensibili.

    Il primo esempio che mi sovviene è quello della carta di credito o prepagata. Personalmente mi è capitato più di una volta di dover effettuare acquisti su internet a casa, in ufficio o magari in viaggio e, pertanto, di dover avere sotto mano i dati dalla carta prepagata che solitamente uso per questo tipo di acquisti. Altrettanto accade per le password o il pin per accedere a siti internet o per fare operazioni bancarie. Sono sicuro che più di uno tra voi ha memorizzato questi numeri in qualche voce della vostra rubrica telefonica, una soluzione sicuramente pratica, ma assolutamente non sicura per ragioni che potete facilmente intuire.

    La soluzione a questo problema è stata quella di sviluppare un'app che potesse consentirmi di immagazzinare e proteggere nel mio iPhone questi dati. Come immaginavo realizzare questo tipo di app è una sfida da molteplici punti di vista. Oggi non è infrequente nello sviluppo software concentrarsi principalmente sulle funzionalità, delegando problematiche quali le prestazioni, l'uso della RAM, ecc... ai potenti computer che abbiamo a disposizione.

    Volete un esempio? Supponiamo di voler criptare un file di testo e di aver già scelto l'algoritmo di cifratura e tutte le impostazioni ad esso associato. Possiamo decidere di leggere interamente il file in memoria, di criptarlo sempre interamente in memoria e di persisterlo ad operazione conclusa. Oppure possiamo scegliere di fare un bel ciclo e, data la dimensione di un buffer, ad ogni ciclo leggere, criptare e persistere solo la quantità di informazioni presente nel buffer. Vi assicuro che il risultato finale in entrambi i casi è lo stesso, ma in termini di utilizzo della memoria le cose cambiano notevolmente.

    Conosco diversi amici e colleghi che si preoccuperebbero di usare meno memoria possibile solo se messi alle strette, ma quando si sviluppa un'app per uno smartphone bisogna fare i conti con due aspetti:

    • benché oggi esistano smartphone quad core con 1 GB di RAM, la realtà è che se vogliamo sviluppare un'app che funzioni sul più ampio numero di dispositivi possibile (dal l'iPhone 3G al 4S per quanto mi riguarda) dobbiamo imporci ordini di grandezza di parecchio inferiori rispetto a quelli messi a disposizione su un PC moderno sia in termini di potenza di calcolo, sia di memoria
    • iOS non è Windows e ciò significa che non esiste pagining o un qualche altro meccanismo che, arrivati al limite della RAM fisica, vi aiuta tutto sommato ad andare avanti. In iOS se un'app consuma più di quanto il sistema operativo ritenga giusto (sul iPhone 3G parliamo di qualche decina di MB, non di più), la prima volta gli arriva un bel Memory Warning, la seconda volta viene piallata senza alcuna possibilità di gestire la cosa

    Qualcuno potrà chiedersi: "ma ci vuole così tanta RAM per criptare quattro cifre del PIN?". Il problema è che come spesso accade mi sono lasciato prendere la mano e, quindi, nello sviluppo di queste app non mi sono limitato alla possibilità di criptare e memorizzare dati testuali, ma ho esteso il tutto a documenti, immagini e fotografie. Vi assicuro che in quest'ultimo caso, quando fai una foto a 8 MPixel, non stiamo parlando di pochi byte, ma di parecchi MB di dati in grado di mettere facilmente in ginocchio le limitate risorse hardware di uno smartphone.

       

    Nel complesso le applicazioni che vi presento oggi sono quattro: CryptoBox Pro, CryptoBox, CryptoPic e CryptoDoc. Le prime due sono in grado di immagazzinare e criptare informazioni testuali, immagini, foto e documenti, mentre le restanti rappresentano delle versioni lite che non implementano rispettivamente la parte documentale e delle immagini.

    Tutte le app utilizzano cifratura AES a 256 bit, mentre solo CryptoBox Pro affianca alla cifratura l'hashing per verificare che i dati non siano stati in qualche modo manipolati dall'esterno.

    Sull'Apple Store trovate decine di app che vi consentono di proteggere i vostri dati, ma la differenza fondamentale tra le mie app e, fatte le dovute eccezioni, la maggioranza delle altre app, è che queste ultime nascondono semplicemente i dati dietro una password senza preoccuparsi di criptarli. In questi casi è sufficiente accedere al file system dell'iPhone per leggere i vostri dati bypassando l'app.

    CryptoBox Pro, CryptoBox, CryptoPic e CryptoDoc, invece, proteggono le vostre informazioni in un formato che risulterebbe inutilizzabile a chiunque non conosca la password che avete scelto per criptarli: anche nel malaugurato caso in cui doveste perdere l'iPhone, non dovreste temere nulla.

    Tra le altre funzionalità vi segnalo anche l'elenco degli accessi non autorizzati che riporta data, ora, posizione GPS e foto di tutti gli accessi non autorizzati, e la antipanic gesture, una gesture che vi consente di riportare rapidamente l'app nella prima schermata di accesso semplicemente coprendo lo schermo con la mano, utile se si avvicina qualcuno al quale non volete far vedere i vostri dati.

    Le app in questo momento sono localizzate in inglese. Anche se penso che le funzionalità siano così semplici ed immediate da essere pienamente comprensibili da chiunque conosca anche molto superficialmente l'inglese, sto comunque lavorando alla traduzione in italiano.

    Se volete maggiori informazioni su queste nuove app vi invito a visitare il nuovo sito http://cryptolab.vifani.com/

    altro

  • E' arrivato Orario Treni 2.0

    E' giunto anche per Orario Treni il momento di aggiornarsi e con il rilascio di questa major release 2.0 per iPhone, iPod Touch e iPad abbiamo raggiunto il duplice scopo di continuare a migliorare le funzionalità dell'app sottoponendo contestualmente la stessa ad un profondo restyling grafico. Ecco quindi che molte maschere hanno sfondi inediti e anche in termini di combinazioni di colori, trasparenze e dimensioni dei font si è giocato al fine di rendere più personale ed accattivante l'app senza tuttavia sacrificare la leggibilità e l'usabilità.

    La versione 2.0 di Orario Treni introduce formalmente il supporto all'iPad fissando come requisito minimo iOS in versione 3.2, il primo per il tablet di Apple. Non abbiamo ancora lavorato ad una UI dedicata esclusivamente a questo dispositivo, ma sappiate che è nell'elenco dei prossimi sviluppi.

    Dal punto di vista funzionale l'app introduce la localizzazione delle stazioni ferroviarie basata sulla propria posizione GPS. Anche se penso che normalmente chi usa Orario Treni utilizzi prevalentemente i preferiti per richiamare le stazioni e le tratte a cui è interessato, la localizzazione basata su GPS può risultare essere utile nel caso in cui non si conosce il nome della stazione. Chiaramente questa funzionalità è alla sua prima implementazione e, così come per le restanti funzionalità dell'app, siamo pronti ad accogliere suggerimenti per migliorarla.

    Buon download a tutti!

    Orario Treni per iPhone

    altro

  • Rubrica PA per Windows Phone

    Rubrica PA

    Oggi vi presento Rubrica PA, la mia nuova app per Windows Phone che integra un database di oltre 100.000 voci tra cui scuole, biblioteche, URP, agenzie ACI e, più in generale, qualsiasi ufficio legato alla pubblica amministrazione (comuni, province, regioni, ministeri, ...). Inoltre, per ogni voce è possibile accedere a tutte le informazioni utili per contattare il relativo ufficio: telefono, email, sito web, indirizzo, ecc...

    Ammetto che questa volta non è stato affatto semplice nè realizzare, nè pubblicare questa app per Windows Phone. La sfida in termini di implementazione è stata prevalentemente quella legata alla gestione e alla ricerca all'interno di una così grande mole di dati. Chiaramente non ho potuto usare un motore di ricerca full text in Windows Phone come quello che abbiamo a disposizione in SQL Server (benché comunque i dati stiano in un database SQL Server CE) e non ho verificato se fosse possibile utilizzare una libreria come Lucene. In parole povere ho implementato a manina  un vero e proprio motore di ricerca full text che analizza la sorgente dati, tokenizza le stringhe, assegna ad ogni token un peso, ecc... Il risultato penso sia abbastanza soddisfacente :)

    Rubrica PA è stata sottomessa al processo di certificazione Microsoft il 15 Maggio, mentre è arrivata online solo l'8 Giugno. Il problema in questo caso è stato duplice: da un lato per ragioni a me sconosciute Microsoft ha impiegato 15 giorni per farmi sapere la prima volta che l'app non aveva passato la certificazione perché avevo inserito tra i paesi in cui pubblicarla una serie di paesi in cui è vietato l'uso di Bing Maps (Cina, Vietnam, ecc...). Dopodiché l'ho sottoposta nuovamente a Microsoft il 30 Giugno e ci sono voluti un'altra decina di giorni per vederla online (in realtà era stata approvata il 5 Giugno, ma sul Marketplace è comparsa solo oggi).

    Buon download a tutti!

    altro

  • Come soddisfare lo Zio Sam se avete fatto un'app per iPhone

    Negli ultimi giorni mi sono imbattuto in una problematica molto particolare. Pubblicando sull'Apple Store alcune mie nuove app che fanno uso di cifratura AES, ho scoperto che è necessario fare una dichiarazione al U.S. Bureau of Industry and Security. In particolare bisogna sottomettere a questo organismo governativo statunitense il modulo chiamato "Encryption Registration Supplement No. 5 to Part 742".

    In base a quello che ho sostanzialmente capito, se si esporta dall'USA ad altri paesi un prodotto che utilizza tecnologie di cifratura che vanno oltre determinati standard (per esempio se usate AES a più di 64 bit), bisogna dichiararlo con questo modulo al fine di ottenere un Encryption Registration Number (ERN). Poiché quando si pubblica un'app sull'Apple Store si invia ai server di Apple in USA un software che poi viene venduto in tutto il mondo (quindi esportato), è necessario fare questo tipo di dichiarazione ed inviare l'ERN ad Apple nel momento in cui si pubblicano le applicazioni.

    Da italiano quale sono, abituato agli standard della pubblica amministrazione del Bel Paese, mi sono immediatamente preoccupato dei tempi che tale procedura avrebbe comportato. In realtà dopo aver svolto la procedura posso rassicurare tutti coloro che, come me, potrebbero trovarsi nella stessa situazione: l'USA non è l'Italia e, anche se tale obbligo potrebbe risultare essere ai più eccessivo (i soliti discorsi dello Zio Sam che vuole sapere e controllare tutto), in realtà non se ne sono andate più di 4 ore per completare il tutto :)

    La procedura da seguire è abbastanza semplice:

    1. Andate sul sito https://snapr.bis.doc.gov/registration/Register.do e registratevi
    2. Vi invieranno un paio di email per confermare la registrazione e scegliere le vostre credenziali. Questo è essenzialmente tutto il tempo che perderete, perché avute le credenziali il resto della procedura sarà immediata
    3. Autenticatevi sul sito https://snapr.bis.doc.gov/snapr/exp/UserLoginLoad
    4. Selezionate la voce "Create Work Item"
    5. Come type selezionate "Encryption Registration" e mettete un Reference Number nel formato richiesto (è un numero di riferimento di vostra fantasia, ma con un formato da rispettare)
    6. Cliccate su "Create"
    7. Nella schermata che vi verrà presentata, potrete, in fondo, allegare documenti in formato PDF. Create un documento nel formato del Supplement No. 5 to Part 742 e compilatelo (un esempio di compilazione potete trovarla in questo blog). Allegate il documento appena creato in formato PDF
    8. Procedete nel "Submit" del work item
    9. Completata questa procedura, tornate alla home del sito e, restando autenticati, andate nell'elenco dei messaggi ricevuti e troverete un messaggio come questo contenente l'ERN di cui avete bisogno
    10. Fate uno screenshot del messaggio, mettetelo in un documento ed allegate questo documento all'atto della pubblicazione dell'app sull'Apple Store

    Come anticipato, non lasciatevi intimorire dalla procedura: è semplice e veloce e potrete sottomettere ad Apple la vostra app che usa API di encryption senza alcun timore che in futuro ve la ritirino dall'Apple Store.

    Chiaramente tale procedura è necessaria solo ed esclusivamente se la vostra app usa tecnologie di cifratura oltre determinati standard (sul sito del Bureau trovate le specifiche), mentre non è richiesta in altri casi. Ponete particolare attenzione, infine, nel caso in cui avete implementato un qualche metodo di cifratura custom: se l'uso di algoritmi standard richiede al più l'ERN, se ne avete inventato uno tutto vostro la documentazione da presentare sarà molto più complessa e i tempi risulteranno essere più lunghi.

    altro

  • Orario Treni si aggiorna alla versione 1.2.2

    Orario Treni

    Vi segnalo che è stata appena rilasciata la versione 1.2.2 di Orario Treni, l'app di riferimento per chi viaggia in treno, che introduce le seguenti migliorie:

    • Prestazioni: sono state migliorate le prestazioni su tutti gli iPhone 3GS/4/4S
    • Grafica: alcuni elementi dell'interfaccia grafica sono stati migliorati
    • iOS 5.1: è stato aggiunto il supporto ufficiale a iOS 5.1
    • Bug: una serie di bug che ci sono stati segnalati sono stati risolti

    La versione 2.0 è in lavorazione e sarà ricca di tantissime novità. Stay tuned!

    altro

  • Community Days 2012 Bari: due giorni da favola

    Negli ultimi due giorni ho preso parte all'evento Community Days 2012 Bari, evento che si è tenuto per la prima volta a Bari e che mi ha colpito notevolmente. Non capita tutti i giorni di vedere nella mia città professionisti nel settore dello sviluppo software di tale caratura ed è stato un vero piacere conoscere di persona speaker che negli ultimi anni ho potuto solo seguire sul web o al WPC. Noi di DotNetSide chiaramente abbiamo dato il nostro contributo e, grazie anche alla sponsorizzazione di Edilportale.com, gli ultimi due giorni li ho trascorsi piacevolmente tra confronti, sessioni tecniche, nuove e vecchie conoscenze, oltre che chiaramente cene, pranzi e coffee break :) Il tutto ha avuto luogo nella fantastica sede di Edilportale.com, una realtà che si conferma come tra le più giovani, dinamiche ed interessanti nel panorama pugliese delle aziende in qualche modo legate al web.

    Nel mio piccolo ho contribuito con una sessione sulle Push Notification in Windows Phone, della quale potete trovare slide e demo sul sito dell'evento.

    altro

  • AutomationFactory in Silverlight 5

    E' da diverse versioni che Silverlight supporta la possibilità di richiamare Automation Server mediante l'API AutomationFactory. In Silverlight 5, tuttavia, la possibilità di avere applicazioni in browser di tipo Trusted, consente un più ampio ventaglio di utilizzi di questa tecnologia. Fino a Silverlight 4, infatti, qualsiasi operazione che richiedesse un aumento dei privilegi poteva essere eseguita solo ed esclusivamente se l'applicazione era di tipo out of browser il che, soprattutto dal punto di vista commerciale/marketing, potrebbe rappresentare un problema. Diciamolo chiaramente: gli addetti al settore sanno benissimo che Silverlight, così come Flash, non possono essere definite tecnologie puramente web. Se si vuole fare un sistema web puro, si deve usare HTML, Javascript e qualche linguaggio server side. Tuttavia, benché con HTML 5, CSS 3 e tutto ciò che gira attorno, tale tendenza sembra essere quella che inevitabilmente da qui a qualche anno si diffonderà, utilizzare ambienti di sviluppo come Silverlight rappresenta a mio parere, almeno fino ad ora, un notevole vantaggio nei seguenti aspetti:

    • linguaggio di programmazione - con tutto il rispetto per javascript, usare C# garantisce una netta superiorità dal punto di vista della produttività, degli strumenti di sviluppo/debug, degli strumenti per test automatici e dell'implementazione di design pattern
    • accesso a risorse locali - non tutte le applicazioni possono astrarsi dalla macchina su cui lavorano, alcune necessitano si accedere a dispositivi hardware e molto spesso non possibile accedervi usando javascript

    In Silverlight 5 è possibile, quindi, lavorare con applicazioni Trusted in browser e questa peculiarità ci permette di eseguire operazioni come, per esempio, il deploy in locale di un pacchetto Windows Installer che, una volta installato, potrebbe esporci mediante una libreria COM visible, funzionalità normalmente non accessibili. Di seguito un esempio di codice che recupera il pacchetto di installazione da risorse dello XAP stesso (ma potreste scaricarlo da un web server o in qualunque altro modo), lo scrive sul disco (la funzione WriteStreamIntoStream non fa altro che travasare gli stream) e poi lo esegue utilizzando l'oggetto COM WScript.Shell e, in particolare, il metodo Run:

    StreamResourceInfo srMSI = Application.GetResourceStream(new Uri("Test;component/Packages/Test.msi", UriKind.Relative));
    var filePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Test.msi");
    using (var setupStream = File.Open(filePath, FileMode.OpenOrCreate))
    {
    	WriteStreamIntoStream(srMSI.Stream, setupStream);
    }
    
    var shell = AutomationFactory.CreateObject("WScript.Shell");
    var result = shell.Run(filePath, 1, true);
    return result == 0;

    Chiaramente se il pacchetto di installazione richiede privilegi di amministratore, in ambienti come Windows Vista o Windows 7 con UAC attivo, verrà richiesta l'elevazione dei privilegi e, a tal proposito, vi consiglio caldamente di firmare con un certificato digitale il pacchetto MSI in modo che il cliente abbia ben chiara l'origine dell'operazione.

    altro

  • Microsoft .NET Framework 4.0.3

    In attesa che esca il nuovo .NET Framework 4.5 in versione definitiva, Microsoft ha rilasciato un aggiornamento del .NET Framework 4 alla versione 4.0.3. Analogamente ai precedenti aggiornamenti (4.0.1 e 4.0.2), questo introduce alcune novità ed una serie di migliorie, oltre chiaramente a risolve bug più o meno gravi. Tra le novità principali segnalo la possibilità di utilizzare l'engine di Workflow Foundation 4 anche in ambienti medium trust, il che amplia significativamente gli ambiti d'uso di questa libreria. Workflow Foundation 4 è una libreria probabilmente poco conosciuta, ma in termini di workflow engine, rappresenta un significativo passo in avanti rispetto all'ormai obsoleta versione introdotta con il framework 3.0: nel caso in cui sia a voi sconosciuta, consiglio caldamente di dargli un'opportunità.

    Altri miglioramenti riguardano la gestione di ADO.NET con configurazioni di SQL Server particolarmente care a chi utilizza SQL Azure, per le quali sono stati risolti una serie di antipatici bug.

    Maggiori informazioni sull'aggiornamento potete trovarle qui. Potete invece scaricare l'aggiornamento che include anche un'update di Visual Studio 2010 SP1 qui.

    altro

  • Visual Studio 2010 SP1 loading toolbox...

    Se avete installato i Silverlight 5 Tools per Visual Studio 2010 SP1 è molto probabile che al primo accesso alla toolbox, Visual Studio si blocchi per 50-60 secondi con il seguente messaggio nella status bar:

    Loading toolbox content from package Microsoft.VisualStudio.IDE.Toolbox.ControlInstaller.ToolboxInstallerPackage '{2C98B35-07DA-45F1-96A3-BE55D91C8D7A}'

    Il problema sembra essere causato dall'installazione dei Silverlight 5 Tools e, in particolare, dal toolkit dei WCF RIA Services e di Silverlight 5 stesso. Per risolvere questo problema potete trovare online una serie di workaround, ma quello che a mio parere è il più valido è il seguente

    1. Disinstallate WCF RIA Services V1.0 SP2
    2. Disinstallate WCF RIA Services Toolkit
    3. Disinstallate Silverlight 5 Toolkit
    4. Avviate Visual Studio 2010 -> Pulsante Destro sulla Toolbox -> Reset Toolbox
    5. Chiudete Visual Studio 2010
    6. Andate in %USERPROFILE%\Local Settings\Application Data\Microsoft\VisualStudio\10.0 ed eliminate tutti i file .TBD

    Dopo aver eseguito questa procedura, il primo avvio di Visual Studio sicuramente sarà più lento del solito, in particolare per caricare la toolbox, ma tutti i successivi avvii non vi riproporranno più l'antipatico problema. Se avete necessità di utilizzare i vari toolkit disinstallati, vi consiglio caldamente di abbracciare l'approccio NuGet e di smetterla di installarvi sull'ambiente di sviluppo e in GAC tutte le librerie che usate.

    altro

  • Banding su Windows Phone

    Anche se non sono un grafico, aver lavorato per diversi anni come redattore per Hardware Upgrade e, in particolare, fare recensioni di schede video, mi ha reso particolarmente sensibile ad alcuni artefatti grafici tipici delle schede di un tempo. Dovete sapere, infatti, che fino a quando il monopolio delle schede video acceleratrici 3D era in mano a 3dfx Interactive (e qui una lacrima riga il mio viso), buona parte delle elaborazioni grafiche veniva eseguita a 16 bit. Per chi non lo sapesse, questo significa che il numero massimo di colori visualizzabili sullo schermo era pari a 65536, tanti potreste pensare voi, ma in realtà pochissimi in molte circostanze.

    Il problema si pone in particolare quando è necessario sfruttare un'ampio spettro di sfumature di uno stesso colore. In questo specifico ambito i 16 bit mostrano tutti i loro limiti e gli oltre 16 milioni di colori che oggi ammiriamo grazie ai 32 bit diventano indispensabili. L'effetto più evidente che si nota quando il numero di colori diventa insufficiente è il cosiddetto banding.

    L'immagine sopra esposta ben evidenzia la problematica. A questo punto alcuni si staranno chiedendo: cosa c'entra il banding con i Windows Phone? Purtroppo molto perché Microsoft ha deciso di impostare 16 bit come profondità di colore predefinita delle applicazioni Windows Phone sviluppate in Silverlight. La motivazione è presto detta: 16 bit richiedono molta meno potenza di calcolo, molta meno memoria video e di sistema, oltre a rappresentare il minimo comune denominatore dei colori supportati dagli schermi sui Windows Phone.

    Ecco quindi che, esattamente come alla fine degli anni 90 abbiamo dovuto lottare per conquistare i 32 bit nella grafica tridimensionale dei videogiochi, oggi ci tocca fare altrettanto con i Windows Phone. Fortunatamente, contrariamente all'epoca, la scelta di Microsoft non è dettata da limiti hardware, ma da una scelta votata all'ottimizzazione delle risorse di un telefono, il che significa che per abilitare i 32 bit nelle vostre app per Windows Phone non dovrete fare altro che aprire il file WMAppManifest.xml ed impostare l'attributo BitsPerPixel a 32.

    Controindicazioni? In teoria vi macchierete del crimine di non risparmiare le risorse hardware del Windows Phone sul quale gira la vostra app, ma onestamente a mio parere è più alto il rischio di fare brutta figura con il banding, che non quello di perdere qualche decimale di batteria in più. Detto questo, valutate su uno smartphone (e non sull'emulatore) l'entità della problematica e, eventualmente, prendete le dovute contromisure.

     altro

  • Font custom in Windows Phone

      

    Mi è capitato di dover far uso in un'applicazione Windows Phone di font custom, che vanno quindi oltre i classici disponibili nel piccolo OS di casa Microsoft dedicato agli smartphone. Implementare questa funzionalità è abbastanza banale, ma ve lo riporto perché non sempre le cose semplici vengono in mente facilmente. Innanzitutto è necessario aggiungere al progetto il font in questione ed assicurarsi che la Build Action sia impostata su Resource. A questo punto il font vi comparirà magicamente nell'elenco dei font disponibili, per esempio, per il testo di una TextBox.

    altro

  • Info Uovo: le uova non hanno più segreti

      

    Oggi vi propongo una piccola e simpatica app sviluppata nel tempo libero che vi consente di identificare l'origine delle vostre uova. Forse non tutti sapete, infatti, che secondo una normativa europea le uova che acquistiamo devono avere un codice identificativo attraverso il quale è possibile risalire a tipo, nazione, provincia e comune dell'allevamento in cui è stata allevata la gallina che lo ha deposto.

    L'aspetto che ho trovato più interessante è quello relativo alle tipologie di allevamenti. Infatti, la prima cifra del codice va da 0 a 3 e vi dice il tipo di allevamento: consiglio caldamente di non acquistare uova con tipologia 2 o 3 in quanto le condizioni di vita della gallina sono assurde (ad esempio, vivono in un box delle dimensioni di una scatola di scarpe fino alla fine dei loro giorni), il che indipendentemente dal fatto di essere più o meno amanti degli animali, secondo una serie di studi influenza negativamente la qualità delle uova.

    Info Uovo vi illustra queste informazioni e si integra anche con Bing Maps per mostrarvi direttamente il comune di origine dell'uovo identificato. L'app è disponibile gratuitamente per Windows Phone sul Marketplace.

    altro

  • Orario Treni 1.1 per Windows Phone

      

    Orario Treni per Windows Phone giunge alla versione 1.1 che introduce una serie di novità. Innanzitutto è ora disponibile la trial mode, cioè è possibile provare l'applicazione in versione di valutazione in cui non sono disponibili le seguenti funzionalità:

    • Scioperi
    • Preferiti
    • Dettaglio di un treno
    Maggiori informazioni su come implementare la trial mode saranno disponibili in un prossimo post di questo blog. Sono state inoltre risolte alcune problematiche nella ricerca delle soluzioni di viaggio al fine di migliorarne l'usabilità quando per una determinata fascia oraria non sono disponibili soluzioni. Bene, in attesa delle prossime novità che non tarderanno ad arrivare, che altro dire se non BUON DOWNLOAD!

    altro

  • Command Query Responsibility Segregation

    Nel precedente post vi ho proposto una rapida comparativa tra SQL Azure e l'Azure Table Storage, tentando di analizzare punti di forza e di debolezza di entrambe queste tecnologie destinate prevalentemente a cui sviluppa sistemi cloud based su Windows Azure.

    Quest'oggi vi parlerò di un design pattern denominato Command Query Responsibility Segregation che si sposa ottimamente con le caratteristiche del cloud, in particolare per lo sviluppo di sistemi che richiedano una scalabilità orizzontale elevatissima (diciamo potenzialmente infinita). Per analizzare questo design pattern partiamo da un esempio di classica architettura client-server.

    CQRS

    Si tratta della classica architettura che abbiamo spesso di fronte ai nostri occhi quando lavoriamo ad un gestionale. Il tutto si traduce nei seguenti passaggi: il client richiede al server un DTO, cioè in sostanza dati, li manipola e li reinvia al server il quale non dovrà far altro che identificare le modifiche fatte al DTO originario e tradurle in aggiornamenti nella base dati. I domain object, con l'avvento degli ORM, possono essere solitamente identificati negli EntityObject, nelle Tracking Instances, nei POCO o una qualsiasi altra forma supportata dall'ORM stesso. I DTO vengono spesso mappati 1-1 sul modello sottostante.

    Questa architettura è stata fortemente incentivata da Microsoft con tecnologie come l'Entity Framework ed i WCF RIA Services/ADO.NET Data Services e, contrariamente a quanto si possa pensare, non ha nulla a che fare con un design di tipo Domain Driven. Qualcuno potrebbe obiettare che il modello dei dati è fortemente basato sul dominio applicativo, ma questo non è esatto per almeno due ragioni. Innanzitutto modellare le entità e lo schema del database sulla base del dominio applicativo è una conseguenza della semplicità nell'eseguire questo tipo di operazione messa a disposizione dagli ORM e non una conseguenza del voler adottare un design Domain Driven. In secondo luogo, un'architettura Domain Driven non ha nulla a che fare con le classiche operazioni di CRUD gestite dall'architettura che vi ho proposto, ma piuttosto è di tipo Task Driven, cioè espone nella UI le operazioni logiche del dominio applicativo e non quelle fisiche di persistenza sul database.

    Chiaramente è possibile che Create, Update e Delete corrispondano anche ad operazioni logiche del dominio applicativo, ma di fatto normalmente quello che ci si limita a fare è recuperare i dati lato client, modificarli e lanciare una SaveChanges. Questo approccio non è un design di tipo Domain Driven ed è fatto per semplificare la vita dello sviluppatore, non per semplificare la vita dell'utente finale dell'applicazione. Volete un esempio? Pensate che, in un rubrica, recuperare dal database la riga di un contatto, esporre tutti i campi in una form, cambiare il campo "Indirizzo" e cliccare su "Salva" sia un'operazione intuitiva per chi non sa che significhi fare una INSERT, UPDATE e DELETE? E' comodo per noi sviluppatori, ma per l'utente forse sarebbe più comodo avere un pulsante denominato "Cambia indirizzo", una maschera che mostra solo l'indirizzo e un pulsante "Ok".

    Al di là del voler adottare o meno un design di tipo Domain Driven, scelta più che lecita in molteplici ambiti applicativi, il problema più grande dell'architettura sopra esposta è la assoluta centralità del database nel corso della normale operatività. In tutti i casi è necessario tradurre i dati che vogliamo recuperare in una query SQL, dobbiamo quindi risolvere il problema dell'Impedance Mismatch (lo fanno per noi gli ORM, ma ha comunque un costo), tradurre il tutto in DTO, tracciare le modifiche effettuate e ritradurle un query SQL per aggiornare la base di dati. In tutto questo giro gli RDBMS devono rispettare le ACID (Atomicity, Consistency, Isolation, e Durability) e questo rappresenta un collo di bottiglia non indifferente. Sappiate, infatti, che potete anche avere due processori da 4 core l'uno e 64 GB di RAM sul vostro server, ma se vengono lanciate in parallelo  tante operazioni sui medesimi dati, entreranno in gioco i meccanismi di ROW LOCK, RANGE LOCK o, peggio, TABLE LOCK, che metteranno tutte le operazioni in fila rendendo vano il vostro sforzo economico per la scalabilità verticale.

    CQRS

    Come se ne esce dunque? Beh la Command Query Responsibility Segregation propone un diverso approccio all'architettura di un sistema al fine di risolvere questi problemi. Il concetto fondamentale è quello della separazione delle operazioni di lettura da quelle di scrittura. Questa separazione ci permette di separare anche i rispettivi modelli: se in lettura nella UI ho bisogno di denormalizzare i miei dati, cioè di unire due informazioni che nel database sono normalizzate, ma che in visualizzazione mostro insieme, per quale ragione devo forzare il sistema ogni volta che ho bisogno di questi dati in lettura ad eseguire LOCK e JOIN? La soluzione, quindi, è di separare le letture dalle scritture sia dal punto di vista del modello, che della persistenza. Ecco, quindi, che il modello concettuale, che nell'architettura classica è mappato il più possibile sul database (o, se preferite, il contrario con un approccio Code First), si scinde in due distinti modelli: il command model ed il query model. Il primo è utilizzato per invocare da parte della UI operazioni sui dati, mentre il secondo ha il solo scopo di modellare i dati nel modo più vicino possibile ai DTO richiesti dalla UI.

    Non mi dilungherò eccessivamente nelle modalità operative con le quali è possibile implementare questo approccio, ma vi faccio un esempio di come adottarlo sulla piattaforma Azure: potremmo utilizzare SQL Azure come database sul quale lanciare i comandi di scrittura definiti nei vari command model inviati dal client, mentre l'Azure Table Storage è un eccellente candidato per persistere le informazioni opportunamente denormalizzate. In base all'analisi del software, potrebbe essere necessario replicare un dato presente una volta su SQL Azure, più volte nell'Azure Table Storage. Per esempio, si potrebbe voler avere uno stesso dato replicato N volte, una per ogni forma denormalizzata (o, se vogliamo, vista) richiesta dal client per accedere in lettura a quel dato. A tal proposito vi invito a non preoccuparvi eccessivamente dei costi di storage: il costo di 5 GB su SQL Azure corrisponde a 175 GB sul Table Storage.

    Come qualcuno avrà certamente intuito l'implementazione di quest'architettura richiede la risoluzione di un problema: mantenere opportunamente sincronizzati i dati su SQL Azure e sull'Azure Table Storage, ma la criticità di questa problematica dipende fortemente dall'ambito applicativo. Anche se aggiornare entrambe le basi di dati (indipendentemente dalla tecnica utilizzata) è sicuramente più oneroso rispetto ad aggiornarne solo una, se per ogni scrittura di un dato, vengono effettuate più letture, ecco che il costo pagato in fase di aggiornamento sarà ampiamente controbilanciato dalla scalabilità in lettura offerta dall'Azure Table Storage.

    In sostanza, maggiore è il rapporto tra le letture e le scritture, maggiore sarà il vantaggio in scalabilità potenzialmente perseguibile. Questo è sicuramente il caso dei portali web e dei social network: il numero di letture è certamente superiore, e non di poco, a quello delle scritture. Va, inoltre, considerato che non sempre è necessario un aggiornamento del dato in tempo reale. Pertanto, se è tollerabile un piccolo lasso di tempo nel quale le informazioni tra le due basi di dati non sono sincronizzate, la fase di sincronizzazione potrebbe anche essere eseguita asincronamente rispetto all'aggiornamento, rendendo quest'ultimo più rapido e non bloccante.

    altro

  • SQL Azure vs Azure Table Storage

    Una delle diatribe più interessanti alle quali si assiste nel momento in cui ci si approccia alle tecnologie per il cloud messe a disposizione da Microsoft è quella che mette in contrapposizione SQL Azure e l'Azure Table Storage.

    SQL Azure è il database relazionale marchiato Microsoft per il cloud ed essenzialmente è una versione di SQL Server che gira nei datacenter in maniera analoga alle compute instance di Windows Azure.

    SQL Azure

    Trattandosi di un database relazionale, le applicazioni che si basano su SQL Server non avranno, teoricamente, grandi difficoltà nell'utilizzare SQL Azure come database. Esistono ad oggi alcune limitazioni in questa piattaforma rispetto ad un'installazione Standard o Enterprise di SQL Server, ma nel tempo molte di queste limitazioni sono state risolte. Per esempio in SQL Azure non è disponibile la ricerca fulltext, gli Analysis Services, così come le reference cross-database (cioè la possibilità di coinvolgere in una query tabelle appartenenti a database distinti), tuttavia altre deficienze presenti nel passato sono state implementate ed un esempio è rappresentato dai Reporting Services. Per maggior informazioni in merito alle funzionalità che ci piacerebbe vedere in SQL Azure vi consiglio di fare riferimento al sito dedicato.

    L'Azure Table Storage, invece, fa parte, insieme ai Blob e Queue Storage, dei Windows Azure Storage Services, cioè di servizi di immagazinamento dei dati messi a disposizione da Microsoft nell'ambito della piattaforma cloud Windows Azure. Il Table Storage può essere considerato un database NoSQL. Cosa contraddistingue questo tipo di database? Beh contrariamente ai RDBMS che si basano sull'ormai robusto e collaudato modello relazionale e sul rispetto delle ACID (Atomicity, Consistency, Isolation, e Durability), i database NoSQL nascono per risolvere problematiche differenti e, in particolare, il loro focus è spesso la scalabilità orizzontale.

    Supponiamo di avere un server con un'istanza di database e di renderci conto che è arrivato al suo limite massimo di prestazioni a causa del carico di lavoro. Scalare verticalmente significa aumentare la potenza di calcolo del server attraverso un aggiornamento di CPU, RAM e quant'altro contribuisca a migliorarne le prestazioni. Quest'ultimo è il classico approccio che si adotta, ma non è di certo il migliore per svariante ragioni:

    • Limiti: per quanto si possano aggiornare le componenti di un server, prima o poi si raggiungerà il limite massimo della piattaforma hardware
    • Costi: il prezzo dell'hardware non scala linearmente alla sua potenza, ma spesso le componenti migliori costano svarianti ordini di grandezza più delle controparti meno prestanti
    • Scarso equilibrio: aggiornando l'hardware del proprio server si rischia di dimensionarlo sulla base di carichi di lavoro che possono rappresentare semplicemente dei picchi rispetto al carico standard. Chiaramente questa considerazione è fortemente dipendente del dominio applicativo, ma in linea di principio è pur sempre valida

    Scalare orizzontalmente significa poter affiancare all'istanza applicativa in difficoltà, una seconda, magari su un server virtuale o fisico diverso, e vederne raddoppiare il carico di lavoro sostenibile.

    I database relazionali storicamente non hanno una enorme capacità di scalare orizzontalmente, soprattutto se i dati sottoposti maggiormente agli accessi sono concentrati in alcune specifiche tabelle relazionate tra loro. Il dover sottostare al rispetto delle ACID, comporta il lock dei dati alla loro modifica al fine di conservare la consistenza del dato. La problematica diventa ancor più stringente nel momento in cui si fanno uso di transazioni che coinvolgono parecchie righe e tabelle.

    SQL Azure mette a disposizione alcune funzionalità per migliorare la scalabilità:

    • Distribuire i dati su più database ne garantisce la scalabilità orizzonale perché database SQL Azure distinti possono essere distribuiti su server differenti. Chiaramente ciò limita la possibilità di fare
    • Database Sharding: è una tecnica che consente in sostanza di partizionare i propri dati in base ad una serie di criteri (ID, Range di ID, ecc...) al fine di distribuirli automaticamente su più database e, quindi, ottenere la scalabilità orizzonale nel caso in cui le query siano distribuite più o meno equamente su tutti i database

    Con queste tecniche si può ottenere la scalabilità anche su un database relazionale on the cloud come SQL Azure, ma è possibile che ciò non sia sufficiente. Supponiamo di avere a che fare con un ambito applicativo nel quale abbiamo tantissimi dati in tabelle per le quali non è possibile effettuare lo sharding, cioè distribuirle su più database in base ad una chiave o ad una range di chiavi o che comunque, anche se possibile, non trarrebbe alcun beneficio da questa soluzione perché magari a livello di SELECT si deve accedere quasi sempre ai dati in maniera globale.

    Un altra situazione nel quale la scalabilità orizzontale di SQL Azure può comunque non essere sufficiente è rappresentata dai costi: 5 GB su SQL Azure costano circa € 35, mentre con la medesima cifra è possibile ottenere 325 GB su Table Storage con 4 milioni di transazioni al mese.

    Table Storage

    Esistono svariati tipi di database NoSQL e il Table Storage di Windows Azure può essere considerato di tipo "Key-Value". In pratica è possibile definire tabelle in ognuna delle quali ogni riga è univocamente identificata da una RowKey ed una PartitionKey, la cui coppia essenzialmente è la chiave primaria. Ogni riga può avere fino a 255 proprietà o colonne e non può contenere complessivamente più di 1 MB di dati.

    Nel processo di ingegnerizzazione di un software destinato ad usare il Table Storage è fondamentale scegliere accuratamente la RowKey e la PartitionKey. Quest'ultima in particolare rappresenta il partizionamento dei dati: tutti i dati di una partizione si trovano sul medesimo server e, quindi, sarebbe opportuno sceglierla in maniera che le interrogazioni del software siano uniformemente distribuite su tutte le partition key per massimizzarne le performance.

    Un altro aspetto interessante è la replicazione automatica dai dati in tre copie nel medesimo datacenter e in due datacenter del medesimo continente. Questa caratteristica garantisce sia una maggiore fault tolerance, sia maggiori performance di accesso in lettura ai dati stessi.

    Non è obiettivo di questo post fornire un HOW-TO delle operazioni di interrogazione su Table Storage, ma vi posso anticipare che è possibile sia farlo mediante banali richieste HTTP REST, che attraverso le comodissime API WCF Data Services che consentono di eseguire query anche mediante LINQ.

    Chiaramente non sono tutte rose e fiori: il servizio di Table Storage, infatti, non è un database relazionale e, pertanto, non vi consente di eseguire query mettendo in join più tabelle. Questa operazione è possibile eseguirla solo client side, cioè scaricando sul client i contenuti di entrambe le tabelle e mettendole in join con LINQ to Objects, ma chiaramente questa non è una soluzione ottimale da nessun punto di vista. La realtà è che se si intende far lavorare questo tipo di servizio come se fosse un database relazionale, si otterranno risultati molto poco soddisfacenti.

    Le interrogazioni su Table Storage sono molto efficienti a patto che il filtro coinvolga prevalentemente la RowKey e la PartitionKey. Qualsiasi altro uso comporterà quello che in ambito RDBMS chiameremmo un FULL SCAN e cioè qualcosa da evitare assolutamente.

    Limitazioni esistono anche nell'uso delle transazioni: queste sono supportate solo se coinvolgono non solo righe appartenenti da una sola tabella, ma devono far riferimento ad una stessa partizione di quella tabella.

    E' chiaro, quindi, che non è possibile pensare di migrare un sistema da SQL Server al Table Storage senza dover riprogettare interamente lo strato di accesso ai dati. E' necessario progettare l'architettura del software con l'obiettivo di sfruttare tutti i punti di forza del Table Storage, chiaramente laddove l'ambito applicativo lo consenta e, soprattutto, ne tragga beneficio.

    I più scettici e i più grandi sostenitori del modello relazionale sicuramente avranno già cestinato l'idea di utilizzare il servizio di Table Storage, ma vi posso assicurare che è possibile sfruttare un database non relazionale con successo e grandi soddisfazioni e social network come Facebook e Twitter sono esempi evidenti dell'uso di database NoSQL in ambiti applicativi dove la scalabilità ha la priorità su tutto, scalabilità che non si sarebbe mai raggiunta affidandosi solo ai cari vecchi database relazionali.

    Il prossimo post vi parlerò di un'architettura ideata proprio con l'obiettivo di trarre il massimo beneficio da database come il Table Storage.

    altro

  • Orario Treni per Windows Phone è qui

      

    Infine è arrivato, Orario Treni per Windows Phone fa la sua comparsa nel Marketplace di Microsoft. Tutte le funzionalità disponibili per la versione Apple iOS, sono ora a fruibili da coloro che hanno scelto il sistema operativo mobile di Redmond per il proprio smartphone.

    Dal punto di vista dello sviluppo, Orario Treni può vantare le seguenti chicche:

    • design pattern Model View ViewModel per la separazione della logica applicativa dalla definizione dell'interfaccia grafica
    • uso di SQL Server CE 4, per lo storage dei dati sul telefono
    • chiamate WCF a servizi SOAP per il download di tutti i dati consultabili sui treni

    Per coloro che non conoscessero l'applicazione, riassumo brevemente le funzionalità salienti:

    • Soluzioni di viaggio dirette e con cambi, indicando una stazione di partenza e di arrivo
    • Treni in arrivo ed in partenza data una stazione, completo di segnalazione dell'eventuale ritardo
    • Dettaglio di un treno a partire dal suo numero o dalle funzionalità precedenti, che consente di monitorare il percorso del treno, completo di numero di binario e minuti di ritardo per ogni sua fermata
    • Consultazione degli scioperi in atto e previsti su tutto il territorio nazionale nel settore dei trasporti (treni, aerei, trasporto pubblico locale, ecc...)

    Maggiori informazioni sono disponibili nella pagina dedicata del sito.

    Orario Treni richiede necessariamente che il proprio Windows Phone sia stato aggiornato alla versione Mango. Buon diverimento e mi raccomando, se avete consigli e/o critiche costruttive, io sono qua :)

    altro

  • DateTime.Kind e ADO.NET

    Nell'ambito della realizzazione di un sistema cloud based è necessario prestare particolare attenzione alla gestione dei DateTime. Se, infatti, nel deployment di soluzioni on premise è possibile controllare (non sempre, ma spesso si) le impostazioni relative al timezone del server e del client, quando un'applicazione gira dei datacenter di Microsoft, tale controllo non c'è. Potete chiaramente ben intuire quale problema si ponga nel momento in cui il timezone del client sia diverso da quello del server: poiché ADO.NET, quando recupera un DateTime dal database, di default gli imposta la proprietà Kind su Unspecified che, in sostanza, viene trattato lato client come se si trattasse di un valore locale, supponendo che il valore sia stato generato lato server con la chiamata DateTime.Now, capite bene che il rischio di ritrovarsi sul client date locali del server è molto elevato. Per risolvere questo problema esistono vari approcci, ma quello che preferisco è il seguente:

    • Lato server è necessario bandire la chiamata DateTime.Now ed utilizzare piuttosto DateTime.UtcNow
    • Lato server, nel momento in cui si recuperano i dati, è necessario assicurarsi che le date siano DateTime con la proprietà Kind impostata su DateTimeKind.Utc. Se si utilizzano le care vecchie DataTable, vi renderete conto che queste vi restituiscono sempre DateTime con Kind impostato un Unspecified. Per risolvere questo problema è necessario impostare la proprietà DataColumn.DateTimeMode su DataSetDataTime.Utc
    • Lato client, prima di visualizzare o inserire i dati, sarà necessario convertirli da e verso il formato Utc nel formato locale. Il tutto può essere fatto mediante converter in WPF/Silverlight e con apposite formattazioni in ASP.NET

    altro