Search Share Home Devices Settings


WP7… una risposta ragionata a M.rkino (e a tutti gli altri… :-D)

(c) lorenzo barbieri - 28/02/2011

Volevo rispondere a questo post dell’amico M.rkino, che ha avuto da dire la sua sul suo nuovo WP7 LG Optimus 7.

Premesso che ognuno dice e pensa ciò che vuole, e che su alcune cose non ho nulla da dire, vediamo un po’ alcuni punti:

  • Windows Phone 7 NON è Windows Mobile 6.5.x++, e questo è stato scritto in lungo e in largo.
    • WP7 è stato riscritto completamente da capo, pensando ad una serie di scenari d’uso, che naturalmente non coprono, almeno in questa versione, tutti i possibili utenti
    • Alcune cose sono state progettate in maniera diversa dopo aver svolto studi su diverse migliaia di utenti, tecnici e soprattutto non tecnici
    • Altre cose semplicemente sono state sacrificate in questa prima versione per motivi di tempo, o semplicemente per non implementare le cose “a metà”.
    • Altre cose ancora non potevano essere implementate in questa versione, per motivi vari non dipendenti da noi… ma ci stiamo lavorando.
  • La sincronizzazione Outlook con “il cavetto USB” è uno scenario che ‘per ora’ è stato abbandonato. Non so se verrà introdotto in seguito, visto che il team è molto attento ai feedback, ma era una delle cose di cui gli utenti si lamentavano sempre.
    • Certo, ad oggi l’idea di dover passare da Exchange, Live, Google, o altri non piace a tutti, ma porta una serie di vantaggi, primo fra tutti quello di avere i dati sempre aggiornati, con o senza “il cavetto”.
    • In molti casi è “una questione di abitudini”, come un sacco di gente mi ha detto dopo il primo impatto (Renato Marzaro, Igor Damiani, e tanti altri… Smile)
    • Per quanto riguarda le “foto dei contatti”, c’è sempre la possibilità di tirarle giù dall’account Facebook collegato, in attesa che Live e il connector sistemino questa cosa Smile
    • Questo scenario inoltre funziona con qualsiasi client, incluso Outlook x64, che prima non era supportato Smile
  • Per quanto riguarda l’uso di Zune per tutto quello che riguarda il multimedia, è una delle cose che più preferisco, soprattutto da quando ho fatto lo Zune Pass. Spero che M.rkino sia riuscito a creare una playlist, io le gestisco tranquillamente.
    • l’uso del telefono come memoria di massa era uno dei feedback più negativi che avevamo ricevuto in passato, conosco un sacco di persone che fanno fatica a gestire i vari client dei vari smart/feature phone
    • stessa cosa vale per le schedine microSD, almeno nel mercato dei non-tech (non ti dico le scene che ho visto… Smile)
    • la possibilità di “streammare” o scaricare tutta la musica che voglio per 9€ al mese… per me non ha prezzo
  • Il telefono NON ha un “file system” pubblico, che le applicazioni possono usare, visto che il telefono NON E’ UN PC, almeno nelle intenzioni di chi l’ha progettato. Le applicazioni hanno l’Isolated Storage di Silverlight, e questo, nel bene e nel male, rende difficile implementare alcuni degli scenari richiesti da M.rkino, almeno in questa versione.
    • Per scaricare PDF o altri tipi di file sul telefono si può “spedirseli via mail”, usare Sharepoint, oppure usare DropBox con l’applicazione apposita, o semplicemente condividere la cartella sul PC con IIS e “navigarci” dentro con IE.
    • Questo scenario verrà notevolmente migliorato in futuro, come annunciato a Barcellona.
  • Per quanto riguarda l’appeal verso utenti iPhone e Android, ne conosco molti che sono passati a WP7, visto che i loro scenari d’uso erano pienamente supportati del telefono, ma capisco che ognuno sceglie quello che vuole.
  • Per quanto riguarda l’appeal verso gli utenti WM6.x, io ero uno di quelli, e non ne sento la mancanza, però ci sono vari scenari che in questo momento non sono supportati, mi spiace.
    • Visto il mercato mondiale dei dispositivi, e la nostra quota… non si poteva continuare a cavalcare quel cavallo, e WP7 è una cosa diversa, sotto ogni punto di vista

Ripeto… la parola chiave è “scenari”, se gli scenari implementati da WP7 non soddisfano, non posso farci nulla, e non voglio cercare di convincere nessuno del loro valore.

Questi sono, e tanti altri verranno aggiunti nelle prossime versioni. A volte certi compromessi “fanno male”, altre volte sono “il male minore”, ma sono sempre stati discussi pubblicamente, nessuno ha cercato di nasconderli, o di far passare “messaggi sbagliati”.

P.s. spero di non passare per il solito “fanboy” lobotomizzato che riporta pari pari i comunicati stampa.

A volte pure io mi incazzo per cose che mancano o che non vanno come vorrei, o che prima avevo e che ora sono state rimandate alla versione successiva, però devo dire che avendo provato vari telefoni nell’ultimo anno (c’è chi mi ha visto girare con iPhone o Android quest’estate e che minacciava di pubblicare le foto con la prova Smile) penso che WP7 abbia i suoi meriti, e gli scenari implementati a me vanno più che bene. Per alcuni altri, aspetterò volentieri le prossime versioni, che mi hanno già fatto sbavare nei meeting privati e non vedo l’ora di provare in beta.

Nel frattempo mi godo XBOX Live, il client mail mobile più bello (in attesa del prossimo Winking smile), lo Zune Pass, alcune delle applicazioni più belle (anche in confronto con le stesse su altre piattaforme), e tante altre cose…

Tags: WP7

.NET Campus a Roma e Milano

(c) lorenzo barbieri - 28/02/2011

imageRitorna e raddoppia l’appuntamento annuale con il .NET Campus, il 26/3 a Roma e il 9/4 a Milano.

Ci saranno alcuni degli speaker più importanti d’Italia, moltissime community, gli Student Partner, e tante sorprese.

Tutte le informazioni e i link di iscrizione li trovate qui.

“Probabilmente” ci sarò anch’io, almeno nella tappa meneghina. Ci vediamo la, forse Smile

Tags: Community Conferenze

Piccole differenze tra LG Optimus 7 e Samsung Omnia 7

(c) lorenzo barbieri - 27/02/2011

In questi giorni, oltre ad aver fatto da helpdesk ad un sacco di colleghi alle prese per la prima volta con il loro nuovo WP7 aziendale (p.s. ce ne sono quasi un migliaio in più da venerdì… datevi da fare per “vendergli” delle app Smile), ho notato una serie di differenze tra i due modelli “veri” che ho usato seriamente fino ad ora.

I prototipi non contano, visto che in quel caso la ROM la facciamo noi e non ci sono customizzazioni.

Ecco alcune differenze che ho notato:

  • sul Samsung Omnia 7 non si può spegnere il 3G e lasciare solo il 2G, sull’Optimus 7 si può fare
  • sul Samsung Omnia 7 si può “riaccendere” lo schermo premendo il tasto Windows, sull’Optimus si può usare solo il tasto di accensione

Non sono differenze sostanziali, però magari ce ne sono altre che mi sfuggono Nerd smile

Naturalmente un’altra grossa differenza sono le applicazioni preinstallate e quelle scaricabili dai rispettivi Marketplace, sicuramente più numerose su LG, e con qualche “chicca” come la foto panoramica o l’applicazione sulla ricerca locale tramite realtà aumentata. Bella invece l’applicazione di Samsung sul fotoritocco.

Chi mi regala un HTC o un Dell per confrontarli? Open-mouthed smile

Tags: WP7

E Omnia 7 sia!

(c) lorenzo barbieri - 24/02/2011

Dopo l’LG Pacific (il prototipo con la tastiera che mi era arrivato a maggio 2010), il Samsung Taylor (sempre prototipo, ma con schermo AMOLED e velocissimo), l’LG Optimus 7 (con i suoi 16Gb di storage e le sue app in esclusiva) è l’ora del Samsung Omnia 7, con il suo fantastico schermo Super AMOLED e la velocità degna di un razzo! Winking smile

Me ne mancano tre per arrivare al mitico numero 7, prima di provare in anteprima il “frutto nazionale dell’India” Smile 

Ce la farò?

Tags: WP7

Già che c’ero… ho cambiato un po’ il layout del blog…

(c) lorenzo barbieri - 23/02/2011

Lo potete vedere a destra se siete sul sito, se leggete da un RSS reader eccolo qui:

image

Ho spostato in basso le statistiche, tanto non interessano a nessuno, ho messo una didascalia a fianco della foto, e ho aggiunto il box di Facebook… adesso se qualcuno mi facesse il favore di diventare fan… così, giusto per passare i 400 Smile

Si vede che il corso di ieri mi ha portato nuove energie per la comunicazione… adesso quasi quasi aggiungo anche un box per twitter, anche se non sono sicuro al 100%… voi che dite, serve?

Update: basta... ho deciso io... e l'ho messo!

Tags: Dexter

Microsoft Web Camp il 15 marzo 2011

(c) lorenzo barbieri - 23/02/2011

imageIl 15 marzo alle 14.30 ci sarà il nuovo evento Live in Smoothstreaming HD, seguito da una serie di sessioni di approfondimento on-demand.

I temi principali saranno gli standard Web, l’HTML 5 e il futuro del Web, e come di consueto ci sarà la chat e anche un sacco di premi. Nelle sessioni di approfondimento si vedranno poi applicazioni opensource come ScrewTurn Wiki, Umbraco, Orchard e DotNetNuke, oltre a ASP.NET MVC 3, Web Matrix, e all’approfondimento di HTML 5, CSS3, dei video, etc…

Mi mancherà non essere parte della diretta, ma sarò presente nella chat e pronto a rispondere anche su twitter (#WebCampOnline).

Alcuni mi hanno chiesto se ci sarà ancora #mapi, ma che vi devo dire… mica posso svelarvi subito tutti i segreti!!!

Tags: Web 2.0 IE9 Conferenze

Ne è passata di acqua sotto i ponti…

(c) lorenzo barbieri - 22/02/2011

Settimana scorsa c’è stato il Mobile World Congress dove sono state presentate un sacco di novità riguardanti il futuro di Windows Phone, tra cui l’integrazione con Twitter, SkyDrive, XBOX e Kinect, gli scenari di multitasking e di switch veloce delle applicazioni, etc… etc…

Ieri è stato rilasciato un primo aggiornamento sempre per Windows Phone 7, che però al momento è sconsigliato per gli utenti di cellulari Samsung per un problema di update, che verrà risolto nei prossimi giorni.

Per quanto mi riguarda settimana scorsa, per la prima volta, sono stato a Londra e devo dire che, complici tre giornate senza pioggia, mi sono divertito parecchio.

E’ stata un’occasione per incontrare colleghi europei ed americani, fare il punto sulle best practices relative a WP7, e sulle novità della prossima versione (devo stare Don't tell anyone smile ma sono veramente tante e in tutti i settori), sui progetti per i prossimi mesi. E’ stata anche un’ottima occasione per conoscere persone che fanno il mio stesso lavoro, ed è sempre una delle cose che mi piace di più.

Nel frattempo sto continuando con le applicazioni per WP7, a breve pubblicherò il codice di MagISStra 1.1, con il supporto migliorato per flicker, e lo passerò ai due Alessandro (C# e VB Smile) per integrarlo in http://mywp7brand.codeplex.com il progetto da cui è partito.

Oggi ho fatto un corso di scrittura per il web, molto interessante, che ha integrato il corso che abbiamo fatto qualche settimana fa su come gestire un programma “televisivo” in streaming, per darvi eventi online sempre più curati. Speriamo che gli effetti si vedano subito (a partire dalla frequenza con cui aggiornerò il blog)…

Nei prossimi giorni mi sentirete parlare sempre più di tablet, come dell’Ergo che ho mostrato sabato scorso alla UgiAltNetConf, e che ha riscosso più successo di quello che sperassi. Nei prossimi mesi ci sarà un fiorire di tablet basati su Windows 7, orientati ad essere degli “office tablet”, ovvero tablet business perfettamente integrati con Active Directory, le Group Policy, e in generale con tutto quello che Windows può offrire (driver, periferiche, programmi, etc…).

P.s. vi ricordo che per tutte le micronotizie che una volta riempivano questo blog, ora c’è twitter: genio_del_male.

Tags: WP7

Bye bye pubblicità

(c) lorenzo barbieri - 05/01/2011

Ho tolto la pubblicità dal blog e dal feed.

No, non sto guadagnando milioni con le mie app (praticamente tutte free) per WP7, ma ho deciso di rinunciare a qualche euro al mese e concentrarmi sul contenuto. Troverò un altro modo per pagarmi l’hosting.

[#12] WP7Tips: Creare un handler generico da usare con le Live Tile “schedulate”

(c) lorenzo barbieri - 04/01/2011

Oltre Push Notification, è possibile anche schedulare l’aggiornamento delle Live Tile di Windows Phone 7 ogni ora, giorno, etc...

Nel secondo caso è possibile passare solo l’url dell’immagine da caricare, senza poter cambiare titolo, etc…

Per generare l’immagine nel formato giusto, può venir comodo questo handler ASHX, da copiare in un qualsiasi sito o applicazione ASP.NET, senza necessità di configurazione alcuna.

Usarlo è molto semplice, basta impostarlo come Uri della Tile schedulata, passando eventualmente sulla query string i parametri:

  • url – opzionale, contiene l’url dell’immagine da mostrare sulla tile, scalata a 173x173 in automatico
  • text – opzionale, contiene il testo da scrivere in basso sulla tile, al posto di quello di default. I caratteri “|” (pipe) vengono sostituiti con degli “\n” (a capo).

In questo esempio il caching dell’ASHX è impostato  10 minuti, ma può essere alzato ad 1 ora o ad 1 giorno, a seconda dell’uso che se ne deve fare.

 

<%@ WebHandler Language="C#" Class="Generic_Tile" %>

using System;
using System.Web;
using System.IO;
using System.Xml.Linq;
using System.Drawing;
using System.Net;
using System.Linq;

public class APOD_Tile : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {      
        //imposto il caching dell'ASHX per 10 minuti
        TimeSpan refresh = new TimeSpan(0, 10, 0);
        HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.Add(refresh));
        HttpContext.Current.Response.Cache.SetMaxAge(refresh);
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server);
        HttpContext.Current.Response.Cache.SetValidUntilExpires(true);

        string url = context.Request.QueryString["url"];
        if (url == null )
            url = "";

        string text = context.Request.QueryString["text"];
        if (text == null)
            text = "";
        text=text.Replace('|', '\n');
       
        //creo la live tile e la superficie grafica
        Image tile = new Bitmap(173, 173);
        Graphics artist = Graphics.FromImage(tile);

        // recupero l'immagine e la disegno
        // altrimenti creo una tile del colore del tema
        if (url != "")
        {
            WebRequest req = WebRequest.Create(new Uri(url));
            WebResponse response = req.GetResponse();
            Stream stream = response.GetResponseStream();
            Image img = Image.FromStream(stream);
            artist.DrawImage(img, 0, 0, 173, 173);
        }
        else
        {
            artist.Clear(Color.Transparent);
        }

        if (text != "")
        {
            // preparo un font "simile" a quello del telefono
            Font drawFont = new Font("Segoe UI", 14);
            SolidBrush drawBrush = new SolidBrush(Color.White);

            // controllo che la scritta stia su una riga, altrimenti riduco il font
            SizeF size = artist.MeasureString(text, drawFont);
            if (size.Width > 170)
            {
                drawFont.Dispose();
                drawFont = new Font("Segoe UI", 12);
            }

            // scrivo il testo in basso centrato, a 6px dal bordo
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Far;
            artist.DrawString(text, drawFont, drawBrush, new RectangleF(0, 0, 173, 173 - 6), sf);
        }
       
        artist.Dispose();

        // preparo lo stream con l'immagine in formato PNG
        MemoryStream imageStream = new MemoryStream();
        tile.Save(imageStream, System.Drawing.Imaging.ImageFormat.Png);
        byte[] imageContent = new Byte[imageStream.Length];
        imageStream.Position = 0;
        imageStream.Read(imageContent, 0, (int)imageStream.Length);

        // invio l'immagine nella response, impostando il content type giusto
        context.Response.ContentType = "image/png";
        context.Response.BinaryWrite(imageContent);
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
}

 

Se si usa il parametro text, bisogna “svuotare” il Title della Tile impostato nel file WMAppManifest.xml (attenzione, se si aprono le proprietà del progetto verrà rimesso il Title di default, ricordatevi di “svuotare” di nuovo il Title).

In questo caso ricordatevi anche di impostare un’icona 173x173 (Background.png se non avete modificato il template) “descrittiva”, con il nome della Tile già scritto in modo da farla sembrare “vera”, in quanto quelle schedulate inizieranno ad arrivare dopo un po’ di tempo (anche in base alla frequenza di aggiornamento).


<Deployment>
<App>
  <Tokens>
      <PrimaryToken>
        <TemplateType5>
          <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
          <Count>0</Count>
          <Title> </Title>
        </TemplateType5>
      </PrimaryToken>
    </Tokens>
  </App>
</Deployment>

Tags: WP7 WP7Tips

[#11] WP7Tips: tenere sotto controllo la memoria

(c) lorenzo barbieri - 03/01/2011

In alcuni casi le applicazioni WP7 iniziano ad occupare “troppa” memoria, per via di immagini troppo grandi, listbox non virtualizzate troppo grandi, video, audio, memory leak, etc…

Può essere comodo “tenere sott’occhio” la memoria (che non deve superare i 90Mb, pena la non certificazione sul Marketplace).

Si può fare in due modi. Il primo prevede di stampare i dati sull’occupazione della memoria direttamente nell’Output Window di Visual Studio, aggiungendo queste righe nell’App.xaml.cs :

public App()
{
… 
     #if (DEBUG)
          if (System.Diagnostics.Debugger.IsAttached)
          {
                     System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
                     timer.Interval = TimeSpan.FromMilliseconds(1000d);
                     timer.Tick += new EventHandler(timer_Tick);
                     timer.Start();

           }
      #endif

}

[Conditional("DEBUG")]
void timer_Tick(object sender, EventArgs e)
{
            long deviceTotalMemory = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceTotalMemory");
            long applicationCurrentMemoryUsage = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage");
            long applicationPeakMemoryUsage = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage");
            System.Diagnostics.Debug.WriteLine(DateTime.Now.ToLongTimeString());
            System.Diagnostics.Debug.WriteLine("Device Total : " + deviceTotalMemory.ToString());
            System.Diagnostics.Debug.WriteLine("App Current : " + applicationCurrentMemoryUsage.ToString());
            System.Diagnostics.Debug.WriteLine("App Peak : " + applicationPeakMemoryUsage.ToString());
}

 

Il secondo modo li stampa a video come i counter del framerate presenti di default nei progetti.

Scegliete quello che preferite.

Tags: WP7 WP7Tips