gen 13 / Igor Damiani

Cosa dovrebbero sempre avere le vostre app per Windows Phone

Nel momento in cui vi scrivo, VivendoByte ha pubblicato quasi un centinaio di app per Windows Phone, e purtroppo molte meno per Windows 8.1. Diciamo che mi sento piuttosto preparato sull’argomento, per cui ho deciso di scrivere questo post, che spero possa essere utile a tutti quelli che sviluppano app – teoricamente non solo per Windows Phone, contenente tutta una serie di piccoli accorgimenti che renderanno la vostra app più gradevole. Il tema predominante è di questo vademecum è il tema “mantenere il contatto con i vostri utenti”. In cosa consiste? Partiamo subito!

Se avete un account Twitter dedicato, usatelo!
Per esempio, do un po’ di tempo ho aperto l’account @VivendoByte, che utilizzo soprattutto per comunicare l’uscita di nuove app, oppure aggiornamenti per quelle già disponibili sullo store, oppure altre informazioni riguardanti il mondo VivendoByte. Come sfruttare questa cosa dalla vostra app? Beh, sappiamo che per ottenere la certificazione siamo già obbligati adesso ad implementare una pagina di About, con i nostri vari recapiti digitali (e-mail per il supporto tecnico, nome dell’applicazione, versione, etc.). Nulla vieta di inserire da qualche parte una voce “Seguici su Twitter” (“Follow us on Twitter”, in inglese), che apre Internet Explorer. In questo modo l’utente sa che esistete anche sul social network dei cinguettii, e può followarli in modo estremamente rapido. Questa funzionalità può essere inserita ovunque: nell’application bar dell’app, oppure in qualsiasi altro luogo.

Invogliate l’utente a dare un feedback alla vostra app
Statisticamente sappiamo che gli utenti Windows Phone sono i più restii ad andare sullo store per lasciare un qualche commento alla vostra app. Come realizzare tutto ciò? Vi do qualche consiglio:

  1. sappiamo che c’è un launcher che permette di raggiungere la pagina della nostra app: questo launcher deve essere proposto ogni tanto all’utente
  2. cosa intendo con “ogni tanto”? Dipende. Può essere “ogni 5 volte che l’utente avvia l’app”, che è la tecnica che mi piace di più. Può dipendere da quanto tempo utilizza l’app stessa.

Qui purtroppo c’è una cosa che ad oggi non è fattibile. Mi piacerebbe avere del codice C# che mi permette di capire se l’utente ha già lasciato un feedback alla mia app. Se no, lo devo quasi amichevolmente costringere; se sì, posso fare in modo di rinviare la proposta di rating, ad esempio che appaia solo dopo che sono trascorsi 3 mesi.

Se l’app è un gioco (ma non solo), posso decidere di sbloccare determinate caratteristiche (livelli, funzionalità avanzate, etc.) solo se l’utente decide di dare un feedback.

Mail di supporto tecnico
Come dicevo prima, per la certificazione è necessario inserire da qualche parte la vostra mail di contatto. Se per caso stiate sottovalutando questa cosa, non fatelo. Dalle mie quasi 100 app ho ricevuto diverse mail, di ogni tipo, dall’Italia e dall’Estero. Erano mail di chiarimento, di segnalazione bug, di suggerimento, di nuove proposte. Ne ricordo due in particolare: una tizia americana (il cui indirizzo e-mail era associato ad Intel Inc.) che mi faceva i complimenti per la mia app “Gps Coordinate Converter”; l’altra invece era di un italiano, che mi ha segnalato un errore di conteggio nella mia app “Deputati Italiani” per Windows Phone. Quindi, fatelo: inserite una mail di supporto tecnico, e fateci affidamento, perchè non si può mai sapere cosa potrebbero dirvi. Oltre a questo, molto meglio ricevere una mail piuttosto che un feedback sullo store con una sola misera stellina, giusto?

Un bel tutorial
Mi è capitato, a volte, di scaricare e di provare ad usare app semplici, ma che all’inizio mi facevano sentire spaesato, soprattutto se magari trattano di argomenti che non siete abituati a padroneggiare. Altre volte, invece, app complesse con cui mi sono trovato a mio agio.

Io vi do un piccolo consiglio. Indipendentemente dal fatto che stiate sviluppando un’app banale o complessa, inserite un tutorial, o comunque una Page che spieghi semplicemente come usare l’app. Io qui dentro spiego un po’ di tutto:

  • cosa fa l’app, in due parole
  • come “navigare” all’interno dell’app
  • eventuali limitazioni della versione trial, e le potenzialità di quella a pagamento
  • aprofittatene, ancora una volta, per sollecitare il contributo dell’utente: lasciare una review sul marketplace, di scrivere una mail in caso di problemi, invogliarlo in questo senso promettendogli di rilasciare nuovi e tanti aggiornamenti dell’app nel caso in cui l’app avrà un certo numero di download

App a pagamento? Invogliatelo all’acquisto, ma occhio a come lo fate!
Se la vostra app è a pagamento, ed avete sviluppato la versione trial, monitorate il numero di avvii che l’app fa. Ogni cinque avvii potreste proporre all’utente l’acquisto, mandandolo direttamente sulla pagina della vostra app pubblicata sul marketplace. Evitate, ma questo è un parere del tutto personale, di fare antipatici in-app purchase all’interno di app freeware: penso che sia una presa in giro. Vi faccio un esempio: non ricordo esattamente quale fosse l’app, so per certo che registrava video da pubblicare su Vine. L’app era gratuita, per cui ero bello soddisfatto e contento. L’ho usata a Parigi alcune volte. Poi una sera, di fronte a non so cosa, la lancio, registro il video e TAC: per pubblicare il video avrei dovuto “sbloccarla” pagando 2,49 euro. Non l’ho acquistata per principio, perchè mi sono sentito preso in giro. Se l’app fosse stata a pagamento, l’avrei magari acquistata senza problemi. Il fatto che fosse freeware, e senza alcun preavviso mi avesse chiesto dei soldi me l’ha resa automaticamente antipatica.
Perciò pensateci bene!

Fine
Tutto qua, spero di avervi dato qualche dritta interessante.

Send to Kindle
gen 9 / Igor Damiani

Se siete dev Windows Phone, non potete non seguire WP Dev Fusion

Il 2014 si sta aprendo con un nuovo nome che gira attorno al mondo degli sviluppatori Windows Phone. Grazie al contributo del mio amico Matteo Pagani (MVP su Windows Phone e Nokia Developer Champion), ma non solo, sta nascendo il brand WP Dev Fusion, che porterà eventi ed altre iniziative importanti, in Italia e nel mondo.

Altre informazioni sulle vere origini di questa iniziativa le potete trovare direttamente sul blog di Matteo e chiaramente sul sito ufficiale http://www.wpdevfusion.com/. Sappiamo poche cose finora, e tutto questo non fa altro che accrescere ulteriormente la voglia di vedere cosa stiano organizzando dietro le quinte.

Ma l’attesa sta per finire, dal momento che il prossimo 22 Gennaio, alle 18 ora italiana, ci sarà il primo evento, esclusivamente online, in cui gli speaker ci illustreranno la tecnologia Windows Phone con una serie di sessioni riguardanti gli argomenti più interessanti. Per registrarvi andate direttamente a questa pagina su EventDay. Sarà tutto in inglese, chiaramente, perchè quando parliamo di WP Dev Fusion parliamo di qualcosa a livello internazionale, e non solo una cosa riguardante il panorama italiano.

Francamente non mi resta che consigliarvi di puntare la vostra attenzione su WP Dev Fusion. Sicuramente ne vedremo delle belle!

Send to Kindle
gen 2 / Igor Damiani

Due cose che Steam dovrebbe migliorare

Sono sempre stato un grande estimatore di Steam, perchè mi permette di sfogliare un catalogo fornitissimo contenente tutte le uscite dei videogiochi, perchè c’è molto indie e perchè spesso e volentieri ci sono sconti che mi permettono di acquistare questo o quel gioco a prezzi estremamente bassi. A volte apro il client senza nemmeno accorgermene, così, giusto per dare un’occhiata e vedere se c’è qualcosa che può fare al caso mio (preferibilemente giochi horror, rally, ma non solo: mi sono accorto che proprio il grande catalogo mi ha fatto acquistare giochi di diversi generi a pochissimi eurini, anche solo per curiosità).

Detto questo, ritengo che ci siano due cose in cui Steam può e DEVE migliorare.

La prima cosa, assolutamente necessaria, è l’indicazione delle lingue supportate da ciascun gioco, che in qualche caso è fuorviante. Fino a qualche mese fa non veniva detto nulla in merito, per cui non si capiva se un gioco fosse solo in inglese, oppure in altre lingue, oppure in cosa fosse tradotto (tra interfaccia, audio ed eventuali sottotitoli). Insomma, un vero incubo. L’unico modo era chiedere sui forum, oppure chiedere a qualcun’altro che abbia già fatto lo stesso acquisto. Altrimenti si rischiava un po’. Ultimamente le cose sono migliorate, dal momento che adesso Steam ci dice chiaramente le lingue supportate da ciascun gioco: è sufficiente entrare nella scheda di un gioco. Peccato che a volte le indicazioni siano errate. Un esempio? L’ultimo Tomb Raider, la cui scheda è visibile qui. Tale scheda ci dice che il gioco supporta 13 lingue, tra cui l’italiano (sia interfaccia che audio). Peccato però che non sia vero: io l’ho acquistato ed il gioco è solo in inglese!! Nel mio caso ho risolto praticamente “barando”, nel senso che sul web si trovano i files di traduzione, per cui è bastato scaricarli, metterli nella cartella dove il gioco si aspetta di trovarli ed ho fatto. Ma così facendo si vanno a cambiare/sostituire alcuni files originali del gioco, per cui il meccanismo di backup di Steam smette di funzionare. Lo trovo profondamente sbagliato ed ingiusto, anche perchè non tutti possono avere le capacità per farlo. E la cosa non riguarda solo Tomb Raider, mi è capitato con altri giochi. Steam, devi rimediare!!!

L’altra questione è il punteggio Metascore che Steam dà ad ogni gioco come valutazione, ovvero il solito punteggio da 0 a 100 e che esprime la qualità del gioco, pratica che arriva dalle riviste e dai siti specializzati in recensione. Sopra il 90 significa che il gioco è eccezionale, da prendere al volo, man mano che si scende la qualità diminuisce. Il problema è che ormai Steam ha nel catalogo giochi in qualche caso davvero vecchi, che all’epoca avevano preso punteggi altissimi, e che sono ancora lì nelle prime posizioni in classifica. Io, alla veneranda età di 37 anni, li conosco, li ho giocati all’epoca, ma oggi sono punteggi che devono essere ridimensionati, senza alcun dubbio. Faccio qualche esempio.

Half Life 2, uscito il 16/11/2004, ha un punteggio 96. Se scaricato e giocato oggi, sarebbe imbarazzante, perchè è ovvio che la grafica nel frattempo ha fatto passi da gigante.

Il primissimo Quake, splendido all’epoca e che ha fatto scuola, ha un punteggio di 94, ed è uscito nel lontano 1996. Probabilmente ci si gioca a 640×480, e la grafica oggi sarebbe davvero inguardabile.

C’è persino il primo Thief (30 Novembre 1998), punteggio 92. Oggi probabilmente sui PC non ci gira nemmeno più, la grafica è 320×240 stile Doom, e sarebbe assolutamente inguardabile, ingiocabile, da evitare, una cosa davvero indecente. Eppure è lì.

Tra un gioco antico e l’altro, spuntano invece nomi recenti di tutto rispetto, come Skyrim, Dishonored, Batman Arkham City, Sid Meier’s Civilization V, e via dicendo. E poi compaiono, sempre mischiati, Star Wars Jedi Knight: Dark Forces II (9 Ottobre 1997). Ripeto: chi è anziano come me riesce a valutare, altri più giovani possono rischiare di fare un acquisto sbagliato.

Bisogna trovare un modo per regolare il Metascore in base all’anzianità del gioco esprimendo un semplice concetto: il gioco xyz all’epoca si è beccato un bel 94, ma oggi equivale a 54. Praticamente stanne alla larga! E non è, ahimè, un concetto solo legato al tempo, ma dipende molto da come invecchia un gioco. Un gioco FPS invecchia molto più rapidamente rispetto ad uno strategico, perchè un FPS basa molto il gameplay su grafica, effetti speciali e coinvolgimento dell’azione. Esempio: la serie Call Of Duty deve sfornare un titolo all’anno per rimanere a galla, mentre Civilization sopravvive al progresso più agevolmente. Ci vuole un po’ di attenzione, insomma.

Queste sono le due critiche che rivolgo alla piattaforma Steam, che per tutto il resto è perfetta. Per offerta, prezzi, apertura al mondo indie, sondaggi, community, etc. etc. E sto attendendo con molta impazienza anche la Steam Machine, forse la prima console che abbia davvero un senso per chi proviene dal mondo PC. Staremo a vedere!!!

Send to Kindle
dic 18 / Igor Damiani

2013 Odissea fra i Centri Vodafone

Sabato pomeriggio sono entrato in possesso, grazie a Brain-Sys, di un nuovo telefono aziendale, il favoloso Nokia Lumia 1520, il primo phablet Windows Phone sul mercato. Siccome prima avevo un Nokia Lumia 920, ho dovuto cambiare la SIM, che cambia da MicroSIM a NanoSIM. Vi racconterò in questo post la mia odissea per questa sostituzione, che è avvenuta di corsa, con molta fretta, per diversi motivi. Quello che mi interessa raccontare sono le vicende che ho vissuto in cinque centri Vodafone differenti; vicende nate dal fatto che la SIM è aziendale, e quindi la sostituzione è passata da stati come “estremamente banale” a “praticamente impossibile senza un foglio firmato da un qualche dio ultraterreno, oppure con delega di un antico re babilonese”.

I Centri Vodafone a cui mi sono rivolto sono, in ordine cronologico, i seguenti:

  1. Centro Vodafone in Via Orefici 2, a Milano
  2. Centro Vodafone in Via Torino, a Milano
  3. Centro Vodafone presso il Centro Commerciale Milanofiori, ad Assago (Milano)
  4. Centro Vodafone presso il Centro Commerciale Bennet di Pieve Fissiraga (Lodi)
  5. Reparto telefonia di Mediaworld, a Cornegliano Laudense (Lodi)

Prologo
Alle 16:30 circa sono a casa dei miei capi, che mi consegnano il Lumia 1520, ed ai quali io consegno un po’ di cioccolato proveniente, fresco fresco, da Cuneo, dove ero stato pochi giorni prima per lavoro. Il tempo di chiaccherare un po’, di raccontarci un po’ di cose, alle 17:00 scappo via di corsa, verso Milano, per due missioni: una bella tagliata di capelli ed – appunto – la sostituzione della SIM. Ho preferito andare a Milano, così sapevo di andare a colpo sicuro, dal momento che altre persone “delle mie parti” hanno avuto problemi a trovare centri assistenza con disponibilità di NanoSIM.

Ecco cosa mi è successo.

Fase 1 – Centro Vodafone in Via Orefici 2, a Milano
Sabato pomeriggio, ore 19:05 circa. Entro trafelato, veramente di corsa, nel punto vendita in cui ho comprato ad Ottobre 2010 il mio primo Windows Phone. Il ragazzo che mi accoglie mi blocca, proprio all’ingresso, mi guarda gelido e mi fa: “Buonasera! Di cosa ha bisogno?”. Gli spiego che devo semplicemente sostituire una MicroSIM con una NanoSIM. Lui: “Spiacente, siamo in formazione ed in chiusura, l’operazione in questo momento è impossibile”. Lo guardo sconsolato e gli faccio notare che è questione di pochi minuti, ma lui non fa una piega e mi dice che sono in chiusura. Poco male: so che c’è un altro centro Vodafone a qualche centinaio di metri da quello. Esco e ricomincio a correre.

Fase 2 – Centro Vodafone in Via Torino, a Milano 
Chissà in quanti possono capire cosa significa percorrere di corsa Via Torino, una delle vie più incasinate di persone, soprattutto alle ore 19:20 circa, sabato pomeriggio, per giunta sotto Natale. Entro nel centro Vodafone, attendo qualche minuto. Quando parlo con l’addetto, gli spiego: avevo un Lumia 920 e devo switchare ad un Lumia 1520, per cui devo cambiare la SIM. “Nessun problema!”, mi dice lui, “seguimi di là”. Mentre lavora al PC, tira fuori il suo Lumia 1020 e capisco di aver di fronte uno della famiglia. Io ero veramente a corto di fiato, stanchissimo, gambe a pezzi, per cui sollevato e tranquillizzato aspetto senza fare domande e recuperando fiato. Dopo qualche minuto il tipo mi consegna la nuova SIM, non pago nulla, esco soddisfatto, tiro il fiato e percorro Via Torino verso Piazza Duomo, per prendere la metropolitana. E’ qui che scopro il dramma: il tizio Vodafone mi ha dato una MicroSIM, identica a quella che ho già nel Lumia 920. Non me ne faccio nulla, di un’altra MicroSIM, io avevo bisogno di una NanoSIM. Cretino io che non ho controllato sul posto, cretino il tizio che non sa che dentro il Lumia 1520 ci vuole una NanoSIM. Non mi perdo d’animo: chiamo mio fratello, che era da tutt’altra parte dell’hinterland milanese, nel grossissimo Centro Commerciale di Milanofiori ad Assago (Milano), e gli chiedo di controllare se ci fosse un centro Vodafone, e se poteva cambiarmi la SIM. Mio fratello mi richiama nel giro di pochi minuti e mi conferma: sì, Vodafone c’è, e la sostituzione la fanno immediatamente. Torno al parcheggio multipiano, prendo la macchina e ad una velocità davvero sostenuta, in tangenziale, in circa 15 minuti raggiungo il centro commerciale, che chiude alle 21.

Fase 3 – Centro Vodafone presso il Centro Commerciale Milanofiori, ad Assago (Milano)
Intorno alle 20:30 circa arrivo nel Centro Commerciale, trovo il centro Vodafone, mi metto in fila. Aspetto un quarto d’ora buono, finalmente parlo con la ragazza addetta. Mi chiede il numero di telefono, lei si accorge che è aziendale, e mi chiede la visura camerale, che ovviamente non ho. Comincio effettivamente a sbraitare, e le spiego che trenta minuti prima, in un altro centro Vodafone, un altro tizio mi ha fatto la sostituzione senza chiedermi alcun documento, nè particolari procedure. Evidentemente la tipa è piuttosto puntigliosa, la chiusura è dietro l’angolo e lei vuole essere meticolosa: “non è la procedura corretta” – mi dice lei – “, ci vuole la visura camerale”. Esco sconsolato anche da questo terzo Centro Vodafone con un nulla di fatto. Ho un portentoso Nokia Lumia 1520 fra le mani, ma nessuna NanoSIM per poterlo utilizzare a tutti gli effetti.

E’ qui che probabilmente tocco il fondo, nel senso che nel centro commerciale comincio a sbraitare, perchè non capisco perchè ogni Centro Vodafone segua regole diverse per una semplice sostituzione di SIM. Uno alle 19 stava già chiudendo, mentre gli altri no, il terzo mi chiede una visura camerale che gli altri non hanno nemmeno citato. Detto questo, chiudo il sabato con una sconfitta.

Fase 4 – Centro Vodafone presso il Centro Commerciale Bennet di Pieve Fissiraga (Lodi)

Il giorno dopo, domenica, ritorno sul campo di battaglia, di buon’ora. Alle 9:30 circa vado nel Centro Commerciale più vicino a casa mia, ed al cui interno c’è un punto assistenza Vodafone. Dopo la solita fila, qui scopro che non hanno alcuna NanoSIM disponibile, ma ne aprofitto comunque per chiedere come funziona il processo di sostituzione di una SIM aziendale. La risposta è disarmante. In pratica ci vuole:

  1. la visura camerale dell’azienda
  2. la delega da parte del titolare che mi autorizza all’operazione
  3. un mio documento di identità

Il tizio mi dice di tornare martedì o mercoledì: le NanoSIM dovrebbero arrivare; basta che vado lì con tutta la documentazione e mi fanno la sostituzione. Esco dal Centro Commerciale, ancora una volta sconfitto.

Fase 5 – Reparto telefonia di Mediaworld, a Cornegliano Laudense (Lodi)
Ultima tappa. Vado dal mio Mediaworld di fiducia (a circa 1 km dal centro commerciale di prima), reparto telefonia. Solita fila, poi tocca a me. “Devo sostituire una MicroSIM con una NanoSIM”, affermo. La tipa mi dice che devo pagare 8 euro, e mi rimanda all’addetto più giusto per quel tipo di attività. Quest’ultimo mi chiede numero di telefono e partita iva dell’azienda. Gli do il numero e gli detto la partita iva. Non pago nulla (al contrario di quello che mi aveva detto inizialmente la ragazza), e non mi è stata chiesta alcuna visura camerale, ma soltanto un mio documento di identità. Pochi minuti ed ho in mano, finalmente, una NanoSim da poter infilare nel mio nuovo Lumia 1520. Finalmente. Finalmente. Finalmente. Finalmente. Finalmente, direi. Mamma mia che odissea.

Epilogo
Per fortuna, ancora una volta, tutto è bene ciò che finisce. Ma quanta arrabbiatura, ma quanto tempo perso, quanta benzina e tempo buttati via. Quanto stress. E comunque ho notato che i ragazzi sono più amichevoli e permissivi (nessuno dei ragazzi con cui ho parlato mi ha chiesto documenti particolari, nè ho dovuto pagare nulla), mentre le ragazze sono decisamente più puntigliose, e soprattutto una di queste mi ha detto che avrei dovuto pagare 8 euro (falso). Ditemi voi. Grazie, Vodafone, per la tua chiarezza: fossi in te, cercherei di uniformare i tuoi corsi di formazione interni, in modo tale che la procedura di sostituzione sia più chiara ed uguale dappertutto, e soprattutto uniformata tra uomini e donne (ci sono troppe differenze tra quello che mi hanno detto i ragazzi e le ragazze: i primi forse troppo permissivi causa “lato nerd”, le seconde forse troppo meticolose e che alla fine, sostanzialmente, mi hanno solo causato un disservizio ed un sacco di tempo perso.

Send to Kindle
nov 30 / Igor Damiani

Un Nokia Lumia 925 tutto per te, con il programma DVLUP di Nokia

Il programma DVLUP di Nokia è un’ottima iniziativa di Nokia che mette alla prova tutti i developer di Windows Phone, con una serie di sfide (challenge), che consistono per lo più nel pubblicare app entro una certa data limite, oppure semplicemente aggiornarle, soddisfacendo allo stesso tempo alcuni requisiti specifici di ogni particolare challenge. Il tutto per guadagnare experience points (XP); e tutto ciò mi riporta alla mia gioventù, quando giocavo di ruolo. Ci sono challenge riguardanti i giochi, per esempio, altre app generiche, oppure altre ancora che vi obbligano ad implementare determinate features: utilizzare le Nokia Maps, le Nokia Music API, oppure supportare tutti i tipi di tiles di Windows Phone. Insomma, ce n’è per tutti i gusti, da chi è appena arrivato a sviluppare su questa piattaforma, a chi invece ha già un po’ di esperienza sulle spalle.

C’è una challenge molto interessante, ovvero questa, che vi segnalo in modo particolare.

In breve, se riuscite a pubblicare sullo store tre nuove app per Windows Phone ed altrettante per Windows 8 entro il 24 Dicembre prossimo, Nokia vi regalerà un bellissimo Nokia Lumia 925 (allo stato attuale probabilmente il mio smartphone preferito – potente come il 920, ma molto più elegante e leggero – uhm, adesso che ci penso, ci sarebbe anche il 1020).

Insomma, direi che è un’occasione da non lasciarsi scappare, che ne dite?

Send to Kindle
nov 28 / Igor Damiani

Ricordare la posizione delle Window di WPF usando MVVM

Una delle caratteristiche che trovo simpatiche in un’applicazione Windows è quando si ricorda la posizione e la dimensione delle finestre. Questa cosa diventa ancora più utile se si utilizza più di un monitor, perchè a questo punto la nostra applicazione si ricorderà di aprire le finestre anche sull’eventuale monitor secondario, ridimensionate e nella stessa identica posizione in cui la avevamo lasciate l’ultima volta.

Fare questa cosa con il code-behind è piuttosto banale, perchè basta gestire gli eventi Closed e Loaded delle finestre: nel primo caso bisogna salvare da qualche parte posizione e dimensione, nel secondo caso bisogna leggerle e ripristinarle.

E se volessi implementare questo meccanismo in un’applicazione enterprise sviluppata con MVVM? Magari scrivendo un codice XAML di questo tipo:

<Window x:Class="AppDiProva.UI.WPF.Views.LoginWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:helper="clr-namespace:Helpers.Xaml"
        Title="Titolo" Height="370" Width="500" ResizeMode="NoResize"
        
        helper:WindowStateHelper.Active="True">
</Window>

 

Ho volutamente lasciato una riga spaziata per evidenziare l’helper che utilizzo, e che ovviamente mi sono scritto per gestire questo scenario. In pratica, si tratta di una classe WindowStateHelper, con una sola dependency property booleana, che imposto a “True”. Quando viene attivata, come nell’esempio qui sopra, internamente fa tutto quanto il lavoro, che può essere riassunto così:

  1. sottoscrive gli eventi Closed e Loaded della Window
  2. quando una finestra viene chiusa, salvo in un semplice file di testo la dimensione e la posizione della finestra; il nome del file viene generato prendendo in pratica il nome della classe, sostituendo ogni “.” con “-“, giusto per rendere il nome del file gradevole. Quindi lo stato di una Window con nome VivendoByte.MioSoftware.UI.LoginWindow verrebbe salvato nel file “VivendoByte-MioSoftware-UI-LoginWindow.txt”
  3. quando una finestre viene riaperta, controllo se esiste un file che contiene il suo stato (prendo il nome della classe, come nel punto 2): se esiste, lo leggo e lo decodifico, e reimposto dimensione e posizione. Se non esiste, significa che è la prima volta che è stata aperta, per cui non faccio nulla
  4. I files vengono salvati nella directory Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Mio Programma\\"; evitate la cartella di roaming, perchè in questo modo andreste a sincronizzare i files sugli altri PC con cui vi loggate con lo stesso Microsoft Account. E quindi significa che se su un PC avete due monitor Full HD, e su un notebook avete una vetusta 1366×768, le finestre potrebbero non comparire perchè al di fuori dell’area visibile

Lo trovo piuttosto elegante, e soprattutto molto trasparente, perchè il developer finale dell’applicazione non si accorge di nulla. Lui sa che lo stato delle finestre viene salvato e ripristinato, e tanto basta, senza troppe complicazioni e concentrandosi sulla sua applicazione finale.

Il codice dell’helper è scaricabile da qui. E’ sicuramente migliorabile, ma è un buon punto di partenza.

Send to Kindle
nov 26 / Igor Damiani

Milano, la routine, la pioggia ed il Natale

Milano è una grande città, questo si sa e non c’è bisogno che ve lo ricordi. Eppure, nonostante le sue dimensioni di città a livello europeo, visito sempre gli stessi posti, seguendo quasi le stesse strade, gli stessi percorsi. Leggendo mesi fa un libro sul funzionamento del cervello umano, ho scoperto che abbiamo bisogno di routine, perchè il cervello funziona meglio. Ed inconsapevolmente è ciò che faccio. Da qualche anno, ormai, mi sono trovato un barbiere a Milano, e vado sempre lì, nonostante abiti in un paese a circa 30km di distanza, nonostante mi costringa, una volta al mese, a prendere l’auto, poi l’autostrada, la metropolitana. Eppure, tutto ciò non mi pesa, diciamo, perchè quando si lavora a casa tutti i giorni della settimana, durante il weekend un po’ di casino lo vuoi anche vedere e vivere.

E poi, ne aprofitto, per fare tante cose: per fare due passi, per entrare in qualche negozio, per vedere qualche bella ragazza, per respirare un po’ di aria inquinata. Come dicevo prima, poi, tutto ormai è diventato routine: parcheggio a San Donato Milanese, metropolitana, scendo in Porta Romana, mi taglio i capelli e poi via, da qualche parte. E’ solo a questo punto che prendo in considerazione qualche variante: se è estate prendo la bicicletta con il BikeMi (servizio eccezionale della città di Milano), oppure riprendo la metropolitana. Per arrivare in Duomo, il famoso Duomo di Milano. E poi via, due passi, in Galleria, oppure verso San Babila, visitando negozi conosciuti e perciò rassicuranti.

Solitamente, sono un tipo piuttosto mattinieri, e quindi bene o male tutto questo avviene il sabato, dalla mattina presto fino a mezzogiorno.

Ma d’autunno, o d’inverno, Milano dà il suo meglio nel tardo pomeriggio.

E’ una cosa che mi tocca il cuore, ed è davvero difficile spiegarvelo. Il cielo scuro, il look gotico del Duomo, imponente, che ti guarda, le vetrine dei negozi, gente che va e che viene con le borse piene di acquisti. Le strade con i sampietrini, che quando piove sono scivolosi, i tram ricolmi di gente. I grandi punti vendita delle catene di elettronica di consumo, dove trovi di tutto, e che per me sono una tappa obbligata. E poi, gente di ogni tipo: italiani, russi, giapponesi, cinesi, ragazze e ragazzi dell’europa dell’est oppure dell’america del sud: alcuni turisti, altri invece che vivono che vivono qua insieme a noi. Gente che magari senti parlare in un italiano perfetto, ed un secondo dopo parla con la moglie in una lingua che neppure riesci a capire da dove arrivi. E poi, i neri che tentano di venderti braccialetti della fortuna. Le tre linee della metropolitana, in cui molte volte mi sono “nascosto” ed ho cercato rifugio, in qualche bar a fare colazione, di fretta e furia. Immancabile poi qualche manifestazione proprio in Piazza Duomo: che si tratti di “un qualcosa di religioso”, oppure di chissà che altro, Milano è sempre viva, e ti fa sentire vivo.

Sotto Natale, poi, è ancora meglio. Tempo fa sono entrato nella Rinascente, sempre in Duomo, ed ho salito un piano dopo l’altro. Praticamente, è quasi tutto abbigliamento: uomo, donna, bambino, grandi stilisti, moda ultra-chic di ogni tipo. Quando sono arrivato all’ultimo piano, mi si è aperto il cuore: era già tutto addobbato per Natale. C’erano festoni appesi ovunque, abeti di qua ed abeti di là, presepi, luci colorate dappertutto. Mi è quasi sembrato di entrare in un villaggio natalizio, lontano anni luce dal centro di Milano. Milano è anche questo. Ed è anche jazz, mostre e musei di ogni tipo. E’ la città della notte bianca. E’ la città dove ho passato i miei ultimi capodanni all’aperto.

Adoro Milano, e francamente non potrei farne mai a meno. Se un giorno dovessi trovarmi dall’altra parte del mondo, probabilmente continuerei a cercarla anche laggiù.

Send to Kindle
nov 25 / Igor Damiani

Surface 2 ed il servizio di assistenza

Ebbene sì: senza indugiare troppo, ho aprofittato dell’offerta di Mediaworld per acquistare il nuovo Surface 2 con in bundle un Nokia Lumia 520, che ho ceduto a mia madre, che era ferma ad un vecchio Nokia con Symbian.


(immagine gentilmente presa da questo articolo)

Felice dell’acquisto io, molto, molto contenta mia madre, sia per il tablet di Microsoft che per lo smartphone di Nokia. Davvero: mia madre non è mai stata molto avvezza alla tecnologia, e vederla adesso ogni sera navigare su Internet oppure giocare con Surface, mi rende un pochino felice.

Ma come in tutte le migliori storie, anche qui abbiamo dovuto combattere un pochino, perchè a circa una settimana dall’acquisto, ho scoperto un dead pixel sullo schermo, nel quadrante in basso a destra. Prima ho tentato di risolvere il problema da solo, con qualche app scaricata dallo Store per tentare di risvegliare il pixel, ma chiaramente…nulla da fare. Sinceramente mi stavo intristendo, perchè so benissimo che per un pixel bruciato nessuno ti sostituisce il prodotto.

Nessuna, tranne Microsoft (ad essere onesti, qualcun’altra ce n’è: me l’hanno detto via Twitter, ma in questo momento non ricordo quali siano). Aggiungo: per sostituire un iPad con pixel bruciati, Apple vi dice che ne deve avere almeno 4. Questa cosa mi è stata detta da un tizio presso un Apple Store a Milano (ho chiesto apposta per evitare di scrivere cose inesatte), anche se poi, googlando, vedo versioni differenti su questa questione. Può essere benissimo che la politica delle varie case produttrici sia cambiata nel corso del tempo.

Ma torniamo a noi. Ecco bene o male ciò che ho fatto.

  1. Ho registrato Surface 2 sul sito http://www.microsoft.com/surface/it-it/support (chiaramente indicando il serial number del prodotto)
  2. Indicando di avere un “Problema con un dispositivo”, ho successivamente espresso di avere un “Problema dello schermo”. Qui ho descritto a parole mie il problema.
  3. Siccome in quel momento non sapevo che un pixel bruciato fosse sufficiente per la sostituzione in garanzia, ho richiesto una telefonata con un tecnico, perchè volevo togliermi il dubbio prima di fare qualsiasi altra cosa. Telefonata che praticamente arriva un secondo dopo aver cliccato “Invia” sul form Web. Quel click secondo me fa partire una telefonata da Microsoft verso il numero di telefono che avete indicato, in modo tale che la telefonata non sia a carico vostro.
  4. Parlo per 30 minuti buoni con Valeria, una ragazza cordiale, simpatica e soprattutto molto molto competente. Non appena gli do il mio Microsoft Account, si spaventa per tutte le subscription che ho attivato, di ogni tipo, sia da user che da developer. A parte questo, mi spiega la procedura da seguire, per filo e per segno.

In pratica mi spiega che Microsoft sostituisce il mio Surface 2 a costo zero, anche con un solo pixel bruciato sullo schermo. Tutto questo avviene il 12 Novembre scorso, martedì. Valeria apre una pratica di assistenza a nome mio: pochi minuti dopo aver chiuso la telefonata, via mail mi arriva un’etichetta elettronica per UPS, che dovrò attaccare sul pacco per spedire il Surface 2. Chiamo UPS per prenotare il ritiro, specificando di avere un’etichetta elettronica. IMPORTANTE: nel pacco devo mettere solo il tablet, senza alimentatori e senza usare la scatola originale. All’ora di pranzo del 13 Novembre, mercoledì, passa il corriere UPS e Surface 2 parte in assistenza. Eccezionale, davvero, tutto il meccanismo, perchè ho il tracking number della spedizione, per cui posso seguire passo passo dove si trova il mio Surface 2. Arriverà a destinazione (Olanda) due giorni dopo, il 15 Novembre, venerdì.

Il 18 Novembre, lunedì mattina, ore 8:30 circa, ricevo una mail di notifica da Microsoft, che mi dice, più o meno: ok, abbiamo ricevuto il tuo Surface 2, gli daremo un’occhiata entro i prossimi 2 giorni. Sempre lunedì mattina, due ore più tardi, ricevo un’altra mail da Microsoft, che più o meno mi dice: ok, abbiamo dato un’occhiata al tuo Surface 2, ti stiamo spedendo il nuovo Surface 2. Evidentemente, in Microsoft sono riusciti a comprimere 2 giorni in 2 ore: geniali. In questa mail è contenuto il tracking number della spedizione di ritorno. Figata. Ma non figata tanto per dire, perchè questo trattamento è rassicurante. Sì, rassicurante è la parola esatta.

Surface 2 arriva a casa mia il giorno dopo, 19 Novembre, martedì, nel tardissimo pomeriggio. Praticamente 5-6 giorni lavorativi in tutto. Chiaramente, è stato sostituito, e quello nuovo non ha più il pixel bruciato e funziona a meraviglia.

Esperienza eccezionale, insomma. Un servizio di assistenza semplicemente sublime, in ogni più piccolo dettaglio. Valeria gentilissima, paziente, con una bella voce squillante come piacciono a me, mi ha seguito nelle varie fasi; nell’arco di questi 5-6 giorni mi ha telefonato altre 2 volte per assicurarmi che l’avessi spedito, che fosse tornato, e che quello nuovo fosse ok. Siccome l’avevo informata del mio blog, le avevo promesso che avrei scritto un articolo su questa vicenda, come ho fatto in passato per altri casi che ho vissuto in prima persona.

Detto questo, qualche piccola considerazione:

  1. Microsoft dovrebbe occuparsi con lo stesso stile anche dell’assistenza su Windows Phone: darebbe la birra a tutti quanti
  2. Ci sono servizi di assistenza migliori, come Dell ad esempio, ma è in quel caso sono servizi a pagamento, e non di certo per un pubblico meramente consumer
  3. Apple, oggettivamente e probabilmente, fa meglio: grazie alla presenza degli Store un po’ ovunque, può sostituire un iPad danneggiato sul posto, senza spedizioni e relativi tempi di attesa. Ma un iPad costa decisamente di più (un Surface 2 con 32GB costa 439 euro; iPad Air WiFi con 32GB costa 569 euro – anche il Mini costa di più); inoltre, lo ribadisco, con un solo pixel bruciato Apple col cavolo che mi avrebbe sostituito l’iPad. E non venitemi a dire che iPad fa molto di più, perchè nel mio caso non è assolutamente vero. Grazie
  4. Complimenti al personale dell’assistenza: non so se sono stato fortunato io. Nel caso sia così, quando chiamate l’assistenza, chiedete espressamente di Valeria e siete in buone mani

Ottimo lavoro, insomma. Lo so, forse sono di parte e fan di Microsoft, come sono fan delle tastiere Logitech, di Steam, di Canon, di Mediaworld, di Amazon, di tanti altri brand che sono i miei preferiti quando devo fare un acquisto. E non ci vedo nulla di male. Se Microsoft continua a trattarmi come ha sempre fatto negli ultimi 15-20 anni, continuerà a vedermi come suo cliente ancora per molto tempo!

Send to Kindle
nov 21 / Igor Damiani

Brain-Sys ed il suo evento di Event Storming dell’8 Novembre scorso

Di cosa si tratta?
Venerdì 8 Novembre scorso ho vissuto un evento aziendale, interno alla società in cui lavoro, Brain-Sys, davvero molto, molto interessante. Qualche premessa prima di cominciare. Brain-Sys è una società magari-piccola-nei-numeri, ma eccezionale per altri motivi: innanzitutto crede nel telelavoro, perchè permette a ciascun dipendente di lavorare da casa propria. Per questo motivo, fisicamente ci vediamo poco, anche perchè siamo distribuiti geograficamente in posti differenti: chi in zona Lodi come me, chi in zona Pavia come i capi e chi in Valtellina. Abbiamo clienti altrettanto distribuiti geograficamente, con i quali riusciamo a lavorare perfettamente con tutta una serie di strumenti, dal meno tecnologico (telefono) al più tecnologico (Office 365, Lync, Skype, etc.). Personalmente è tre anni che lavoro in questo modo: i clienti che seguo sono piuttosto soddisfatti, io altrettanto, e credo che tutta Brain-Sys tragga vantaggio da tutto questo. Ed io pure.

Tutto questo per dire che l’evento dell’8 Novembre è stata anche un’occasione per ritrovarci tutti quanti, per conoscerci ancora meglio e per conoscere qualche nuovo componente che da poco si è aggiunto alla famiglia Brain-Sys.

Ma è stata anche un’importante occasione per lavorare, chiaramente, e per mettere in pratica una tecnica (metodologia?) di cui avevamo letto io e Gabriele nelle settimane/giorni scorsi. Questa tecnica viene denominata “Event Storming”, ed abbiamo preso spunto dalle sessioni e dai post di un certo Alberto Brandolini, alias @ziobrando su Twitter).

In pratica, ci siamo ritrovati tutti in una location molto raffinata (per la cronaca: Cascina Scova, a Pavia, un hotel 4 stelle con annesso centro benessere) e….Fermi!!! Tutti chi??? Per assurdo che sia, una delle cose che mi ha più colpito è proprio questo “tutti”. Normalmente, infatti, quando si tratta di sviluppare un software, succede più o meno la seguente cosa: un gruppo di persone si riunisce e decide vita, morte e miracoli di questo software. Normalmente, questo “gruppo di persone” include il cliente, un’analista ed un gruppo di commerciali. Rarissima volte il developer viene coinvolto in questa fase: a lui arriva una mazzetta di fogli, o al massimo una mail, con il contenuto riassunto di quella riunione.

Quando si applica Event Storming, invece, quello che accade è che viene organizzata una riunione a cui partecipano tutti quanti gli attori (numericamente, ci si aggira – dice @ziobrando – intorno alle 6-8 persone: l’importante è che siano diversi “punti di vista” attorno allo stesso problema): il cliente (che espone ciò di cui ha bisogno), il developer, un moderatore, l’esperto di dominio, magari un commerciale e così via. Questo è un vantaggio impressionante, di cui secondo me ci si rende conto solo a fine giornata: tutto il team coinvolto ha ragionato sullo stesso problema, ed una volta “educato” anche con la stessa terminologia (ubiquitous language), e ciascuno ha imparato dagli altri qualcosa. Un vero e proprio brainstorming, insomma, una tempesta di cervelli che alla fine i suoi frutti li dà eccome.

Facciamo un passo indietro.
Event Storming è un workshop con una struttura ben precisa.

Ci si ritrova in un certo numero di persone, ci vuole un bel rotolo di carta da appendere alla parete, ci vogliono post-it di diverso colore, penne, matite, scotch, etc. etc. Il cliente espone inizialmente il problema che ha, e che teoricamente il nostro software dovrebbe risolvere. Perchè si chiama Event Storming? E’ semplice: perchè la prima cosa che il team deve fare è pensare agli eventi che accadono all’interno del sistema. Nella vita reale, ciascuno di noi “fa qualcosa” in reazione “a questa cosa che è accaduta”. La stessa cosa deve accadere nel software. Gli eventi devono essere espressi con il “participio passato”, perchè un evento è avvenuto, punto e stop. Un evento non si può annullare, viene persistito, da questo non si scappa. Gli eventi vengono rappresentati da post-it di un colore ben preciso, che vanno attaccati al rotolo di carta sulla parete. E vi posso assicurare che, in base alla composizione del team che avete riunito, i risultati possono essere buoni o cattivi: noi ci siamo trovati alla grande. Nel nostro gruppo c’erano developer junior e senior, c’erano almeno due persone che con la programmazione non c’entravano nulla, eppure hanno partecipato ugualmente con produttività, per esempio. Una volta definiti gli eventi, siamo passati ai comandi, che possono scatenarsi da: un evento utente (click di un bottone, per esempio), dal semplice trascorrere del tempo (se entro le ore XX non è accaduto questo, avviene questo evento), oppure come semplice conseguenza di un altro evento. Ed ovviamente anche i comandi sono stati rappresentati sul foglio di carta con altri post-it, di un colore diverso. Poi gli aggregati, i domini, i bounded context, tutti concetti derivanti da Domain Driven Design (per gli amici DDD). I primi (aggregati) rappresentati ancora da post-it, gli altri da linee di separazione sulla carta, con diversi stili.

Chiaramente, Event Storming non serve e probabilmente non è utile per tutti i progetti. Dà il meglio su progetti complessi, perchè è molto utile per:

  1. uniformare il linguaggio (ubiquitous language): alla fine della giornata, tutti noi (il cliente, i developer, il grafico, l’esperto di dominio, chiunque) eravamo allineati sulla terminologia da utilizzare (vocabolario), evitando ambiguità, fraintendimenti, conflitti vari. Fidatevi, per una volta: vi posso assicurare che una semplice parola, a cui voi attribuite un significato chiaro e limpido, per altri può significare una cosa completamente diversa. E’ importante uniformarsi, creare un ubiquitous language che sarà utilizzato nel codice, nella documentazione, sulla UI, in qualsiasi riunione con il cliente
  2. team building: la giornata personalmente mi è piaciuta molto, perchè tutti noi abbiamo collaborato strettamente, di persona, per cui alla fine tutto ciò aumenta il feeling con gli altri componenti dell’azienda. Abbiamo scherzato, e lavorato, ci siamo presi in giro ed abbiamo discusso, abbiamo avuto idee che non avremmo mai pensato di avere all’inizio della giornata. Sì: come succede spesso in Brain-Sys abbiamo lavorato divertendoci.
  3. chiarezza del progetto: forse, inerente il punto (1). Al di là del linguaggio, tutti noi abbiamo le idee chiare su ciò che dovrà fare il progetto, dalla A alla Z. Sappiamo i confini entro i quali si estende il dominio, abbiamo per certi versi separato le responsabilità, identificato ciascun bounded context

Da quella giornata, siamo tutti tornati a casa molto, molto soddisfatti. Prima di lasciare la location (davvero spettacolare!), abbiamo ovviamente ripulito tutto quanto, ed abbiamo scattato foto al rotolo di carta prima di staccarlo, per avere anche in futuro la nostra modellazione a portata di mano, come documentazione. Pian piano, il progetto sta prendendo vita anche dal punto di vista del codice.

Qualche ringraziamento!!
Beh, l’elenco può essere lungo.

  1. Innanzitutto, ai capi: Gabriele Gaggi ed Alessandra Maggi, perchè oltre ad essere i capi, sono amici e persone sempre disponibili, non solo rendendomi partecipe della vita dell’azienda, con i giusti limiti, ma anche dal punto di vista personale
  2. A Nazareno Manco, che si è mosso dall’est dell’Italia, per raggiungerci, portando con sè la sua famiglia, la sua simpatia, e la sua competenza durante l’Event Storming. Persona bravissima, in gamba, e competente. Ed anche un amico, soprattutto per il supporto morale di questa estate, che non dimenticherò mai, probabilmente. Ok, scusate l’OT
  3. Ad Andrea Barbaini, anche lui si è imbarcato in un lungo viaggio da Roma per essere dei nostri. Non è da tutti!!!
  4. Posso ringraziare ancora qualcuno? Ok, grazie. Aggiungo allora l’intero staff di Managed Designs, Andrea Saltarello e Mauro Servienti in primis, che nel corso del tempo mi hanno fatto entrare in testa i concetti di CQRS, Event Sourcing, e soprattutto DDD, metodologie e tecniche che non riguardano solo il mero sviluppo del codice, ma aiutano a pensare meglio, da molto prima di cominciare a scrivere il codice, al progetto software in cui ci si sta imbarcando
  5. All’intera famiglia Brain-Sys, cioè a tutti noi, perchè siamo (anche) bravi. E come dicevo alla nostra Chiara durante l’evento “Certo che noi della Brain-Sys siamo proprio belli!”!!!!
Send to Kindle
ott 29 / Igor Damiani

Uploadare/Scaricare files da Windows Phone 8 su Skydrive

Una delle features a mio avviso che è poco sfruttata all’interno delle app Windows Phone è quella di poter uploadare/scaricare files dallo smartphone sul cloud (nel caso specifico Skydrive). A cosa potrebbe servire? Beh, immaginatevi un’app di qualsiasi tipo, che abbia impostazioni, files, fotografie, audio, qualsiasi contenuto. Se comprate un altro telefono Windows Phone, oppure se resettate il telefono, quei contenuti li perdete, perchè erano inclusi nell’Isolated Storage di quell’app specifica. Esempio concreto: immaginate Rowi, uno dei client Twitter più importanti ed utilizzati: voi lo acquistate la prima volta, lo impostate con i vostri account, e regolate le impostazioni come piacciono a voi. Poi sostituite il telefono, oppure resettate l’attuale, e perdete tutto quanto, e siete costretti a reimpostare daccapo tutto quanto. Oppure un gioco come Angry Birds: tutte le volte che lo installate, non c’è alcun modo per recuperare le partite che avevate. E così via, in generale il discorso si può applicare a bene o male tutte le app Windows Phone.

Grazie al Live Connect SDK, possiamo sfruttare le potenzialità del cloud Skydrive all’interno delle nostre app Windows Phone. Quindi: all’interno di una nostra app possiamo:

  • inviare su Skydrive qualsiasi files che abbia un senso (impostazioni, file di dati dell’utente, etc.)
  • scaricare i files per recuperare i vecchi contenuti

Il livello base l’ha già spiegato l’amico Matteo Pagani, in questo post sul suo blog in inglese. Qui viene spiegato quali reference aggiungere al progetto, come aggiungere il pulsante di login, e come inviare/scaricare files. Il tutto riguarda Windows Phone 7, ma va benissimo anche per Windows Phone 8: possiamo però sfruttare qualche miglioria, che ai tempi della stesura del post non esisteva (esempio: possiamo utilizzare le tecniche async/await, evitando le varie callback che complicano la leggibilità del codice). Però il 95% va più che bene.

Quello che non mi piace è che quel codice salva i files alla root di Skydrive.

Questo comporta che l’utente potrebbe inavvertitamente cancellare i files, perchè non li riconosce. Oppure potrebbe capitare che più app vadano a scrivere sugli stessi files: cosa un po’ assurda da pensare, ma mica tanto: non è poi così assurdo pensare che le impostazioni di un’app vengano salvate in un file chiamato Settings.xml, tramite serializzazione/deserializzazione. E quindi è assolutamente una cosa da evitare (almeno io la penso così).

La conclusione di tutto ciò è che si comincia a lavorare con i folder su SkyDrive.

Quindi, supponiamo: stiamo sviluppando un’app chiamato “La mia bella app”, che intenda inviare/scaricare files su Skydrive, dentro un folder chiamato “La mia bella app”. Cosa si realizza tutto ciò? Io mi sono inventato questo metodo helper, che in pratica fa una cosa molto semplice: dopo che ha ottenuto l’accesso al vostro account Skydrive, legge la root, e scansiona tutte le directory presenti, alla ricerca di quella che si chiama “La mia bella app”. Se la trova, ne recupera il Folder ID; se non la trova, la crea e ne recupera il Folder ID. Tramite questo Folder ID, possiamo utilizzare gli stessi metodi spiegati da Matteo Pagani nel suo post, solo che invece di lavorare alla root, lavoriamo all’interno del nostro folder.

private async Task EnsureSkyDriveFolderExists(string folderName)
{
    this.SkyDriveOperationWaiting.IsIndeterminate = true;
    this.SkyDriveOperationDescription.Text = "Controllo cartella su SkyDrive";
    var response1 = await client.GetAsync("me/skydrive/files");
    List<object> items = response1.Result["data"] as List<object>;

    foreach (object item in items)
    {
        IDictionary<string, object> directories = item as IDictionary<string, object>;

        if (directories["name"].ToString() == folderName)
        {
            this.SkyDriveOperationDescription.Text = "Cartella su SkyDrive ok";
            ApplicationContext.Instance.FolderIdSkyDrive = directories["id"].ToString();
            App.SaveSettings();
            return;
        }
    }

    this.SkyDriveOperationDescription.Text = "Creazione cartella su SkyDrive";
    
    var folderData = new Dictionary<string, object>();
    folderData.Add("name", folderName);

    var response4 = await client.PostAsync("me/skydrive", folderData);
    ApplicationContext.Instance.FolderIdSkyDrive = response4.Result["id"].ToString();
    App.SaveSettings();

    this.SkyDriveOperationDescription.Text = "Cartella su SkyDrive ok";
}

 

Il codice va un po’ ripulito, perchè ci sono riferimenti a controllo sulla UI, come ProgressBar e TextBlock, che mantengono informato l’utente su ciò che sta accadendo. La logica è questa:

  1. Grazie al path “me/skydrive/files” recupero l’elenco di file e directory presenti alla root di Skydrive
  2. Ottenuto l’elenco, lo ciclo alla ricerca della directory chiamata “folderName”, che è una stringa che arriva in input a questo metodo
  3. Se la trova, salva il Folder ID da qualche parte (io la memorizzo in una classe singleton AppicationContext), salva le nuove impostazioni ed esce
  4. Se il folder non viene trovato, allora viene creato (metodo PostAsync), viene recuperato il Folder ID, il tutto viene salvato e si esce dal metodo

Una precisazione è d’obbligo.

Teoricamente parlando, il codice potrebbe salvarsi il Folder ID al momento della prima generazione della cartella, in modo tale che si eviterebbe ogni volta di controllare se esiste oppure no. Sbagliato! Ricordiamoci che l’utente potrebbe cancellare il folder su SkyDrive (attraverso il sito, oppure attraverso una qualsiasi app Windows Phone, Windows 8, etc.). Quindi è importante andare a controllare l’esistenza del folder, ogni volta.

Una volta che si esce da questo metodo, si è pronti per inviare files all’interno di questo folder:

await client.UploadAsync(ApplicationContext.Instance.FolderIdSkyDrive, s,
    stream, OverwriteOption.Overwrite);

 

Il primo parametro del metodo UploadAsync è proprio il Folder ID che abbiamo ottenuto. Matteo nel suo post indicava “me/skydrive”, per uploadare nella root. Indicando il Folder ID, i files vengono uploadati all’interno del nostro folder.

Scaricare un files è un filo più complesso. Con questo metodo:

var response2 = await client.GetAsync(
    string.Format("{0}/files",
    ApplicationContext.Instance.FolderIdSkyDrive));

recuperiamo l’elenco dei files contenuti nel folder indicato da Folder ID. Una volta che abbiamo l’elenco, dobbiamo ciclare la lista e scaricare solo quello che ci interessa (oppure banalmente implementare un foreach per scaricarli tutti quanti). Per scaricare un file, si utilizza questo metodo:

var response3 = await client.DownloadAsync
    (string.Format("{0}/content",
    fileId));

Il risultato di tutto questo giro di codice è che sulo Skydrive del nostro utente ci sarà un folder chiamato come vogliamo noi, con tutto ciò che abbiamo deciso di uploadare. Se abbiamo dato un nome chiaro al folder, l’utente lo riconoscerà senza problemi: potrebbe decidere di cancellarlo oppure no (questo è chiaramente al di fuori del nostro controllo, per cui non ci dobbiamo fare troppo affidamento).

Send to Kindle