Technology Experience

Mese: Settembre 2010

.NET World

Windows Phone 7 e le icone nell’application bar

Una buona abitudine da seguire quando si sviluppano applicazioni per WP7 è quello di sfruttare la zona denominata Application Bar, che si trova nella parte inferiore dello schermose tenete il telefono in posizione Portrait, oppure sul lato destro dello schermose tenete il telefono in posizione Landscape.

Nell’Application Bar potete inserire una o più icone, a seconda delle vostre necessità, che fanno un qualcosa quando l’utente le clicca. Ecco quindi il pulsante Refresh, il pulsante Settings, il pulsante Nuovo tweet, etc. etc.

Dove trovate le icone? Non girovagate troppo per il Web, per due motivi. Il primo è quello di tener presente che al primo posto c’è il nostro utente, e quindi se su WP7 ci sono n applicazioni, ognuna delle quali usa un’icona Refresh diversa, probabilmente lo stiamo confondendo e basta. Quindi evitiamo inutili complicazioni.

Per farla breve, andate nella directory C:Program Files (x86)Microsoft SDKsWindows Phonev7.0Iconslight del vostro PC e usate questi PNG. Ovviamente questa directory esiste se avete installato i developer tools per WP7. Usate questi, e non quelli contenuti in “dark”, perchè questi hanno lo svantaggio di smettere di funzionare se l’utente switcha il tema da dark a light e viceversa. Se usate il tema light, tutto ok, mentre quando usate il dark le icone non si vedono più.

Usate quelle in C:Program Files (x86)Microsoft SDKsWindows Phonev7.0Iconslight e siete a posto!

Grazie a Lorenzo per il tip!

Send to Kindle
.NET World

Qualche info in più sul file WMAppManifest.xml

Ogni applicazione per Windows Phone 7 è corredata dal file WMAppManifest.xml, contenuto nel folder Properties della solution di Visual Studio 2010. Questo file è un normalissimo file XML, che contiene un po’ di informazioni inerenti la nostra applicazione.

Il nodo IconPath (all’incirca a riga 5) contiene il path dell’icona piccola della nostra applicazione – l’icona che viene utilizzata nel menù di Windows Phone 7.

Il nodo BackgroundImageURI (suppergiù riga 18) contiene il path dell’icona grande della nostra applicazione – l’icona che viene utilizzata nel menù Start. Questa icona viene utilizzata solamente nel momento in cui l’utente decide di voler metter la nostra applicazione sulla schermata principale di Windows Phone 7 – il menù Start appunto.

Il nodo App (riga 4) contiene diversi informazioni utili:

  • attributo Title (esempio: “Bank Finder”)
  • attributo Author (esempio: “Damiani Liborio Igor”)
  • attributo Description (esempio: “bla bla bla”, e non ho capito dove viene mostrato)
  • attributo Publisher (esempio: “VivendoByte.net”)
  • attributo Genre (esempio: “apps.normal”)

Quest’ultimo riveste un’importanza particolare quando sviluppate giochi – sia Silverlight che XNA. Secondo il documento delle specifiche Microsoft, i giochi devono apparire all’interno dell’hub XBOX Live. Se lasciate “apps.normal” – che è il valore di default, questo non accade.

E’ necessario impostare l’attributo Genre a “apps.games”.

Ho preferito dare un po’ di enfasi, perchè se googlate fate un po’ di difficoltà a trovare questa cosa. Troverete post che dicono di mettere “app.game”, “App.Games”, insomma, una variante infinita di maiuscole/minuscole/plulari/singolari, mentre l’icona della vostra applicazione rimane inchiodata lì dov’è. Fidatevi, mettete “apps.games” e siete a posto. Smile

L’ultimo appunto riguarda il tag Capabilities: all’interno di questo nodo dovete specificare quali funzionalità del telefono WP7 sono richieste dalla vostra applicazione. Quindi, aggiungete un nodo Capability con Name impostato a dovere. Avete bisogno del GPS? Aggiungete ID_CAP_LOCATION. Avete bisogno del microfono? Aggiungete ID_CAP_MICROPHONE. Accelerometro? ID_CAP_SENSORS. E così via. Maggiori informazioni direttamente su MSDN a questo indirizzo.

Questa cosa è importante, perchè una volta sul Marketplace, e prima di acquistare/scaricare l’applicazione, l’utente dovrà essere informato su cosa è richiesto dall’app per funzionare (c’è traffico dati per la rete? mi accende il gps e mi localizza? etc. etc.), e questa cosa – presumo – arriva direttamente dai metadati contenuti nel file WMAppManifest.xml.

Send to Kindle
Community

Partecipazione all’evento di lancio Windows Phone 7

Giovedì 23 settembre ho partecipato, grazie all’invito del buon Lorenzo, all’evento che si è tenuto a Roma, per il lancio della piattaforma Windows Phone 7. Sugli scaffali dei negozi i telefoni non li trovate ancora, però manca davvero poco. Quello che potete fare sin da subito è scaricare i developer tools, installarveli sul PC e cominciare e scrivere le vostre app da distribuire in futuro attraverso il Marketplace.

E’ stata una bella esperienza, seduto fra il pubblico, in uno studio di registrazione vero, con telecamere, operatori, regista, assistenti di studio e la splendida presenza di Mapi – di cui avevo già sentito parlare in passato. Mapi? Come chi è Mapi??? Per maggiori informazioni cliccare qua! Open-mouthed smile La diretta via streaming è durata circa tre ore, durante le quali ce ne siamo stati buoni e tranquilli seduti al nostro posto, ad applaudire al momento giusto e ovviamente ad assistere alle sessioni della trasmissione, che si sono sussegguite veloci veloci. Personalmente conoscevo già parecchie delle cose che sono state spiegate, ma alcune chicche invece no: ad esempio, lo sapevate che switchare il tema light/dark di Expression Blend for Windows Phone serve a simulare il cambiamento del tema sul cellulare? In questo modo è più facile avere un’anteprima diretta mentre si programma. Ed altre cosucce interessanti.

La giornata insomma è stata molto divertente, emozionante e stancante allo stesso tempo. D’altronde un viaggio a Roma in giornata in aereo richiede un certo impegno, soprattutto per chi come me non ci è tanto abituato. Ma ne è valsa la pena. Sinceramente ho molta fiducia in questa nuova mission di Microsoft, e non me ne frega proprio un acca se iPhone o Android oggi hanno più applicazioni o rappresentano lo stato dell’arte. Mi piace WP7, perchè per la prima volta posso sviluppare applicazioni belle ed accattivanti per uno smartphone. Microsoft mette nelle nostre mani una potenzialità incredibile, perchè nessun altro può permettersi di dare nelle mani degli sviluppatori gli stessi strumenti usati per programmare applicazioni desktop & web. Insomma, praticamente aggratis possiamo creare piccole e grandi apps con lo stesso know-how ben consolidato che abbiamo già in tasca. Volete mettere? Smile

Allora, adesso per concludere vediamo un po’ di ringraziare un po’ di persone:

  1. grazie a Gabriele, il mio capo, che mi ha concesso di poter partecipare
  2. grazie a Lorenzo per l’invito e per la possibilità di avere un WP7
  3. grazie al vulcano islandese per non aver eruttato, e a tutti gli altri eventi, che mi hanno permesso di tornare a casa senza troppi sbattimenti – rispetto all’ultima volta
  4. grazie a chiunque abbia scelto Mapi per giornate così: per lei, per il vestito e per i capelli sciolti lunghi sulle spalle
  5. grazie al catering di pizzette, focaccine e sfogliatelle: super-slurp
  6. grazie alla compagnia di tutti gli amici nuovi & vecchi che ho trovato: sono stato contento di aver conosciuto Dovellonsky, così anche a lui posso dare un volto vero Smile
  7. grazie al taxi per il viaggio di ritorno: guadagnato un sacco di tempo e un po’ di stress in meno

Insomma, che dire, una giornata indimenticabile!

Send to Kindle
.NET World

Silverlight ed il download di file

Allora, questo è un problema che mi attanaglia. Considerate la seguente schermata:

IeDownloadFile

E’ una applicazione Silverlight brutta e orribile, con 4 pulsanti. Non c’è uso di M-V-VM, ma il caro e buon vecchio code-behind. Tutti questi pulsanti effettuano il download di un normalissimo file pdf raggiungibile via http.

Cliccando sul pulsante PDF con code behind il codice eseguito è un semplice:

private void button1_Click(object sender, RoutedEventArgs e)
{
    HtmlPage.Window.Navigate(new Uri(URL, UriKind.Absolute));
}

 

Cliccando sul pulsante PDF con timer il codice è il seguente:

private void button2_Click(object sender, RoutedEventArgs e)
{
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(3);
    timer.Tick += (s2, e2) =>
        {
            timer.Stop();
            HtmlPage.Window.Navigate(new Uri(URL, UriKind.Absolute));
        };
    timer.Start();
}

 

Cliccando sul terzo pulsante PDF con javascript il codice è il seguente:

private void button3_Click(object sender, RoutedEventArgs e)
{
    object[] param = new object[1];
    param[0] = URL;
    System.Windows.Browser.HtmlPage.Window.Invoke("openPDF", param);
}

 

Con javascript, viene invocata una funzione ‘openDF’ definita nella pagina .aspx che hosta il plug-in di Silverlight.

Comunque sia, in tutti questi casi elencati sopra, il download del file PDF da parte di Internet Explorer viene inizialmente bloccato per motivi di sicurezza. IE fa apparire una toolbar gialla:

IeDownloadBlocked

Per effettuare il download, dovete dare l’autorizzazione e ripetere l’operazione. Nella mia applicazione scema di oggi non ci sono troppi problemi Smile, ma in un’applicazione reale viene effettuato il refresh della pagina .aspx, e quindi l’utente deve rifare tutto daccapo. Sad smile

L’unica soluzione che ho trovato è stata quella di usare un HyperlinkButton, “templizzato” in modo tale che sulla pagina della nostra applicazione possa apparire (quasi) come un normale Button. Cliccando sul bottone PDF con HyperlinkButton IE non blocca un bel nulla, e fa apparire il classico dialog Apri/Salva.

Ora, però, fate un passettino in avanti: supponiamo che l’url venga generato dinamicamente. Voi cliccate, richiamato un qualcosa-lato-server che genera il PDF, e restituisce al client l’indirizzo http completo. Il controllo HyperlinkButton diventa (quasi) inutile: nello XAML non impostate la proprietà NavigateUri – perchè non la conoscete – voi cliccate ed ovviamente non succede un bel nulla. Nemmeno l’evento Click serve a qualcosa, perchè semplicemente non viene invocato.

E quindi? Se avete consigli, aiuti o qualche dritta, sono tutt’orecchi.

Send to Kindle
.NET World

Video appena registrato della mia app “Prova del Cuoco” per Windows Phone 7

Qualche minuto fa ho registrato un piccolo video della mia applicazione per Windows Phone 7, “La Prova del Cuoco”, pubblicato ovviamente su YouTube.

Video su YouTube

 

E’ una piccola applicazione, sviluppata in un paio di serate, che è stata implementata con:

  1. emulatore Windows Phone 7 (all’inizio) ed un telefono Windows Phone 7 (alla fine)
  2. Visual Studio 2010 Professional + WP7 Developer Tools in RTM
  3. Un servizio WCF hostato sul mio hosting che viene consumato sul device e che mi dice giorno per giorno chi ha vinto
  4. Un backend sviluppato in 15 minuti con ASP.Net Dynamic Data Entities Web Application
  5. Il backend è stato tradotto in italiano per permettere a chi deve usarlo (in breve: mio padre) di inserire velocemente i dati, ogni giorno (in breve: l’ho schiavizzato Smile with tongue out)
Send to Kindle
Community

Windows Phone 7: da aprile ad oggi, come è andata?

La prima volta che ho sentito parlare di Windows Phone 7 (WP7) è stato ad Aprile 2010, durante il Basta! Italia. In quel frangente si disse, lo ricordo come fosse ieri, che chiunque sapesse sviluppare applicazioni con Silverlight, era già automaticamente in grado di sviluppare applicazioni per WP7. Appena sono uscite le beta dei Developer Tools, quindi, non ho resistito.

Ed effettivamente è proprio così. Se volete sviluppare apps per WP7, è sufficiente che conosciate Silverlight per produrre qualcosa di simpatico sui cellulari Microsoft che presto vedremo nei negozi. E questa – lasciatemelo dire – è una cosa eccezionale per tutti noi sviluppatori che arrivano dal mondo Microsoft, perchè per la prima volta possiamo produrre software per telefoni cellulari, tra l’altro di una qualità leggermente superiore a ciò a cui siamo abituati (almeno io parlo per me, possessore da praticamente sempre di telefoni Nokia).

L’altra cosa importante da tener presente è che tutti i software verranno venduti attraverso il MarketPlace di Microsoft. Tutti, tutti i software. Anche i nostri software. Per maggiori informazioni consultate il sito ufficiale. Questo vuol dire – in soldoni – che quando avete lo .xap della vostra applicazione bello pronto, lo inviate al MarketPlace; questo deve essere validato e se viene accettato, il vostro software viene pubblicato. Attivare un account sul MarketPlace costa 75 dollari all’anno (ci sono delle eccezioni, però), e vi dà diritto a pubblicare 5 applicazioni freeware, ed un numero infinito di applicazioni a pagamento.

Per questo motivo, mi sono dato subito da fare. Certo, magari non si diventerà ricchi, ma l’idea di poter scrivere e diffondere piccole applicazioni per WP7 mi ha interessato fin da subito. Lo devo ammettere, però: sono abbastanza fortunato, perchè da quest’anno ho cominciato a sviluppare con Silverlight, conoscevo già WPF, negli anni scorsi avevo già sviluppato per il mondo mobile, e quindi avevo tutti i presupposti per buttarmi subito in modo indolore nel mondo WP7.

Giovedì scorso ho partecipato ai lab in Microsoft dedicati a WP7, un piccolo evento durante il quale ho potuto testare su veri device le applicazioni che avevo preparato per l’occasione. Le applicazioni sono fondamentalmente due:

  • Keyzard, un porting del buon vecchio Keyzard che avevo sviluppato nel 2004 per il mondo desktop. Sono passati circa 6 anni da quei giorni, ma so per certo che Keyzard è scaricato ed utilizzato ancora oggi: ma sto andando OT, magari ne parlerò in un altro post
  • Prova del Cuoco, una simpatica applicazione – davvero molto semplice – che permette di consultare giorno per giorno i risultati della gara dell’omonima trasmissione su Rai Uno. Dal punto di vista tecnico, mi sono divertito a creare questa app, perchè lato server ho un piccolo db auto-gestito che contiene i risultati ed un servizio WCF che espone queste informazioni. Sul telefono sfrutto questo servizio WCF per visualizzare le informazioni. L’utente può usare gesture sul telefono per scorrere i giorni, semplicemente facendo scorrere il dito da sinistra a destra o viceversa per spostarsi di data

Se mi seguite su Twitter o Facebook, sapete bene che Keyzard è stata la ‘best app’ del giorno! Smile

Se cercate su Internet, troverete un sacco di informazioni su come sviluppare apps per WP7, dalle più semplici alle più complesse. Da quelle composte da una sola schermata, e quelle che utilizzano il tombstoning per memorizzare il proprio stato interno, per essere in grado di auto-ripristinarsi, etc. etc. Un piccolo consiglio? Scrivete app semplici semplici. La piattaforma WP7 è studiata per essere user-centrica, per essere utilizzata per utenti evoluti, per essere forse in concorrenza con iPhone. Insomma, per farla breve, niente applicazioni aziendali, di inserimento dati, etc. etc. Piuttosto applicazioni graficamente accattivanti, divertenti, di entertainment. Fate un giro sull’app store di iPhone per vedere il tipo di applicazioni più scaricate e vendute. Sfruttare il GPS interno, sfruttare l’accelerometro per fare qualcosa di divertente.

Questo fondamentalmente per due motivi: i progetti di cui ho parlato prima sono due piccoli progetti che ho realizzato a tempo perso, nel mio tempo libero. Quindi secondo me è fondamentalmente evitare in imbarcarsi in progetti di-chissà-quale-durata e complessità. Per questo, lo dico francamente, in un ambiente come WP7 aborro anche pattern complessi come MVVM, pattern che invece adotto da mesi nel progetto di cui mi occupo nel mio ruolo di programmatore di Brain-Sys. Perchè aborro? Aborro perchè MVVM è solo una complicazione, perchè quando si crea un’applicazione nell’arco di una serata, qualsiasi pattern è una complicazione. Smile Ricordiamoci che le “Windows Phone 7 Application Certification Requirements” dicono che la prima schermata della nostra app deve apparire entro 5 secondi da quando l’utente la “tappa” sullo schermo touch del WP7. Quindi, siate snelli e veloci e – se può valere un qualcosa quello che vi dico – scrivete applicazioni anche old-style, senza tirare in ballo framework & pattern che aggiungono solo sovra-ingegenerizzazione. Questa è la mia piccola opinione, tutto qua.

Datevi da fare, ragazzi, perchè Windows Phone 7 prima o poi arriverà. Fatevi trovare pronti!

Send to Kindle
My personal life

Tutte le strade portano a casa

Abito a Sant’Angelo Lodigiano, un paese di poco più di 10.000 abitanti in provincia di Lodi. Mi capita spesso di andare in giro – o per lavoro o per altri affari – e al 99% per andare dove devo andare prendo l’autostrada. Il casello dista circa 5 km da casa mia, lo si raggiunge attraverso la statale, ed è molto comodo. La A1 mi permette in pochi minuti di prendere le tangenziali milanesi, e posso arrivare praticamente ovunque.

E’ sulla strada del ritorno che le cose si fanno più interessanti. Esco dal casello di prima, arrivo ad un rondò, prendo la prima uscita a destra e dopo 5 km arrivo. Ci sono due modi per arrivare proprio davanti a casa: uno è più comodo e veloce, ci si mantiene sulla statale, si arriva ad un altro rondò, si torna indietro e finisce qua.

L’altra strada è più interessante perchè quando si arriva a Sant’Angelo, si può passare attraverso il paese. Ed è interessante perchè – ad esempio – passo davanti al negozio di informatica dove cominciai a lavorare tanti anni fa (correva l’anno 1995, o giù di lì). Adesso quel negozio non c’è più: alle saracinesche c’è appeso un bel cartello Vendesi, con un bel numero di cellulare. Ma il locale è ancora sfitto. Qualche anno fa avevo pensato di prendermelo io, ma poi il mio lavoro è diventato prevalentemente il consulente, e di un ufficio non ne ho bisogno. In quel locale d’estate fa un caldo boia, perchè le vetrine scaldano molto.

La strada è interessante perchè passo davanti all’azienda in cui appena 18enne ho lavorato per un’estate come esperto di Autocad. In realtà cercavo di cavarmela, con le mie conoscenze di informatica dell’epoca da una parte, ed il manuale di Autocad dall’altra. Passo davanti al luogo dove una volta i miei zii avevano un negozio di arredamenti. Passo davanti al mio ex-barbiere (ex perchè adesso è in pensione, e ho dovuto trovarmene un altro). Passo davanti a Cremonesi, la cartoleria dove da ragazzino compravo biro, quaderni e fogli di protocollo per la scuola. Passo davanti all’acquedotto. E non vi sto parlando di chilometri e chilometri di strade: il tutto è condensato in 1 chilometri, o poco di più. E’ questo il bello di vivere in un paese piccolo, lo stesso paese che ti ha visto nascere e crescere. Ci sono volte in cui ricordi persino…qua ha beccato Alessia, qua mi sono schiantato in bicicletta, qua ho fatto a botte con Antonello, qua questo & qua quello.

La strada è interessante anche perchè attraversa Viale Montegrappa, il viale delle scuole elementari e medie. Ed è il viale degli extracomunitari che se ne stanno sempre davanti ai due bar (uno di fronte all’altro). Quando ci arrivo con la mia Opel Astra, spesso abbasso i finestrini, rallento, e loro mi fissano sempre. Mi fissano strano perchè si staranno chiedendo chi sono, come se il fatto che non lo sappiano non mi dà il diritto di transitare da lì. E’ lo stesso viale dove una volta c’era una sala-giochi, dove una volta mi sono riparato – da ragazzino, parlo – durante un terrificante acquazzone. Ma l’acquazzone non finiva mai, e alla fine son dovuto comunque uscire perchè la sala-giochi stava chiudendo. Bei tempi.

Sono appena tornato dal cinema e in Viale Montegrappa ho persino un bimbo – avrà avuto 3-4, forse – che pedalava sul suo triciclo, da solo. Forse da qualche parte i genitori c’erano, ma io non li ho visti. Insomma, un bambino molto piccolo in giro da solo dopo la mezzanotte del venerdì. A Sant’Angelo Lodigiano succede anche questo, insomma.

Tutte le strade prima o poi portano a casa. ‘Notte a tutti!

Send to Kindle
Software

Togliere la conferma del download file da Internet Explorer

Per impostazione predefinita, le ultime versioni di Internet Explorer bloccano il download di un file, facendo apparire all’utente una barra di avviso proprio sotto la barra degli indirizzi, e sotto la barra dei tab. Ho sempre odiato questa cosa, essenzialmente per due motivi diversi:

  1. sono un utente che so quello che sta facendo, per cui sono sul sito xyz e clicco un pulsante Download, probabilmente quello che voglio fare ed ottenere è proprio il download di un file
  2. confermando il download, IE refresha la pagina: spesso è un semplice refresh, altre volte (come su MSDN Download) la cosa è più fastidiosa, perchè bisogna rifare daccapo tutta la navigazione che si era fatta per raggiungere il link del download

Se volete togliere questa barra di avviso, potete fare come segue:

  1. Aprite Internet Explorer, poi andate sul menù Tools e poi su internet Options
  2. Andate sotto il tab Security e cliccate sul pulsante Custom level…
  3. Cercate la voce Automatic prompting for file downloads ed attivate l’opzione Enable (in italiano appare come Richiesta di conferma automatica per download di file)
  4. Chiudete e confermate il tutto

DownloadAutomaticoIE

Adesso IE non vi chiede più nulla, scaricate e basta!

Send to Kindle