Gestione Della Cache Su Windows Phone 7

Author: ollie10 8/3/2010 5:49 PM

Se l'uso della cache nelle applicazioni web serve sopratutto a rendere più veloce la restituzione delle pagine e accedere meno al database, su un dispositivo come un cellulare, l'uso della cache si rivela fondamentale in tutte quelle applicazioni che devono leggere dati dal "cloud" e poterle avere disponibili senza scaricarle nuovamente, ottimizzando così l'applicazione e la quantità di dati trasmessa dal cellulare. Questo è utile sopratutto a quegli utenti che possono non avere un piano dati flat.
Qui di seguito vediamo un esempio di wrapper che può essere usato nelle nostre applicazioni per mettere in cache dei files di cui avremo bisogno. La classe sfrutta il pattern singleton e l'isolated storage per salvare i file nella cache. Gestisce le scadenze tramite l'utilizzo dell'orario in formato UTC nel nome del file, questo permette di verificare se l'oggetto in cache è scaduto o meno.

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.IsolatedStorage;
using System.Linq;
using System.Runtime.Serialization;

namespace Ollie10.Classes
{
    public class Cache
    {
        public static readonly DateTime NoAbsoluteExpiration = DateTime.MaxValue;
        public static readonly TimeSpan NoSlidingExpiration = TimeSpan.Zero;

        readonly IsolatedStorageFile _myStore = IsolatedStorageFile.GetUserStoreForApplication();

        private object _sync = new object();


        private static Cache _current;
        /// <summary>
        /// Gets the current instance of the cache
        /// </summary>
        /// <value>The current.</value>
        public static Cache Current
        {
            get { return _current ?? (_current = new Cache()); }
        }

        /// <summary>
        /// Adds the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        /// <param name="absoluteExpiration">The absolute expiration.</param>
        /// <param name="slidingExpiration">The sliding expiration.</param>
        public void Add(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration)
        {
            lock (_sync)
            {
                if (Contains(key))
                    Remove(key);

                if (absoluteExpiration == NoAbsoluteExpiration)
                    Add(key, DateTime.UtcNow + slidingExpiration, value);
                if (slidingExpiration == NoSlidingExpiration)
                    Add(key, absoluteExpiration, value);
            }
        }

        /// <summary>
        /// Adds the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="expirationDate">The expiration date.</param>
        /// <param name="value">The value.</param>
        private void Add(string key, DateTime expirationDate, object value)
        {
            lock (_sync)
            {
                if (!_myStore.DirectoryExists(key))
                    _myStore.CreateDirectory(key);
                else
                {
                    string currentFile = GetFileNames(key).FirstOrDefault();
                    if (currentFile != null)
                        _myStore.DeleteFile(string.Format("{0}\\{1}", key, currentFile));
                    _myStore.DeleteDirectory(key);
                    _myStore.CreateDirectory(key);
                }

                string fileName = string.Format("{0}\\{1}.cache", key, expirationDate.ToFileTimeUtc());

                if (_myStore.FileExists(fileName))
                    _myStore.DeleteFile(fileName);

                NormalWrite(fileName, value);
            }
        }

        /// <summary>
        /// Determines whether the cache contains the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns>
        /// 	<c>true</c> if [contains] [the specified key]; otherwise, <c>false</c>.
        /// </returns>
        public bool Contains(string key)
        {
            lock (_sync)
            {
                if (_myStore.DirectoryExists(key) && GetFileNames(key).Any())
                {
                    string currentFile = GetFileNames(key).FirstOrDefault();
                    if (currentFile != null)
                    {
                        var expirationDate =
                            DateTime.FromFileTimeUtc(long.Parse(Path.GetFileNameWithoutExtension(currentFile)));
                        if (expirationDate >= DateTime.UtcNow)
                            return true;
                    }
                }
                return false;
            }
        }

        /// <summary>
        /// Removes the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        public void Remove(string key)
        {
            lock (_sync)
            {
                if (!Contains(key))
                    throw new AccessViolationException("The key does not exist in the cache");
                string currentFile = GetFileNames(key).FirstOrDefault();
                if (currentFile != null)
                    _myStore.DeleteFile(string.Format("{0}\\{1}", key, currentFile));
                _myStore.DeleteDirectory(key);
            }
        }

        /// <summary>
        /// Gets the file names.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        private IEnumerable<string> GetFileNames(string key)
        {
            return _myStore.GetFileNames(string.Format("{0}\\*.cache", key));
        }

        /// <summary>
        /// Gets the specified key.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        public T Get<T>(string key)
        {
            lock (_sync)
            {
                string currentFile = GetFileNames(key).FirstOrDefault();
                if (currentFile != null)
                {
                    var expirationDate =
                        DateTime.FromFileTimeUtc(long.Parse(Path.GetFileNameWithoutExtension(currentFile)));
                    if (expirationDate >= DateTime.UtcNow)
                    {
                        return NormalRead<T>(string.Format(@"{0}\{1}", key, currentFile));
                    }
                    Remove(key);
                }
                return default(T);
            }
        }

        #region Serialization

        private T NormalRead<T>(string fileName)
        {
            using (var isolatedStorageFileStream = new IsolatedStorageFileStream(fileName, FileMode.Open, _myStore))
            {
                DataContractSerializer s = new DataContractSerializer(typeof(T));

                var value = s.ReadObject(isolatedStorageFileStream);
                isolatedStorageFileStream.Close();
                return (T)value;
            }
        }

        private void NormalWrite(string fileName, object value)
        {
            using (var isolatedStorageFileStream = new IsolatedStorageFileStream(fileName, FileMode.OpenOrCreate, _myStore))
            {
                DataContractSerializer s = new DataContractSerializer(value.GetType());

                s.WriteObject(isolatedStorageFileStream, value);
            }
        }

        #endregion
    }
}

Tags: , ,
Categories:
Permalink | Comments (0)
  • condividi Gestione Della Cache Su Windows Phone 7 su facebook
  • condividi Gestione Della Cache Su Windows Phone 7 su twitter
  • condividi Gestione Della Cache Su Windows Phone 7 su stumbleupon
  • condividi Gestione Della Cache Su Windows Phone 7 su digg
  • condividi Gestione Della Cache Su Windows Phone 7 su delicious
  • condividi Gestione Della Cache Su Windows Phone 7 su reddit
  • condividi Gestione Della Cache Su Windows Phone 7 su google
  • condividi Gestione Della Cache Su Windows Phone 7 su netvibes
  • aggiungi il feed di Gestione Della Cache Su Windows Phone 7


Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone

Author: ollie10 7/27/2010 5:55 PM

Come ormai è stato detto più volte, almeno nella prima versione di Windows Phone 7 non sarà disponibile il Multitasking, questo significa che le applicazioni di terze parti (quindi tutte quelle non di Microsoft), non potranno rimanere in esecuzione, a questo va aggiunto anche il fatto che un utente può uscire da un'applicazione in diversi modi. Ciò comporta che lo sviluppatore adotti delle politiche di salvataggio/recupero dei dati, ma come fare?

More...

Tags: , , ,
Categories:
Permalink | Comments (0)
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su facebook
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su twitter
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su stumbleupon
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su digg
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su delicious
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su reddit
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su google
  • condividi Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone su netvibes
  • aggiungi il feed di Ciclo Di Vita E Tombstoning Delle Applicazioni Per Windows Phone


Realizzare Una Splash Screen Personalizzata Su Windows Phone 7

Author: ollie10 7/23/2010 2:15 PM

Come sappiamo nelle nostre applicazioni su Windows Phone abbiamo la possibilità di inserire un'immagine di Splash Screen che verrà mostrata al caricamento, semplicemente inserendo un file di nome SplashScreenImage.jpg nella root della nostra solution. Questo metodo però non ci da il controllo sull'applicazione e si limita a mostrare un'immagine statica e null'altro. Con pochissimo codice è possibile personalizzare la nostra splash screen inserendo una barra di caricamento che resterà attiva fin quando non avremo finito di fare le operazioni necessarie al caricamento dell'applicazione stessa.

More...


Tags: ,
Categories: Windows Phone
Permalink | Comments (0)
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su facebook
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su twitter
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su stumbleupon
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su digg
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su delicious
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su reddit
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su google
  • condividi Realizzare Una Splash Screen Personalizzata Su Windows Phone 7 su netvibes
  • aggiungi il feed di Realizzare Una Splash Screen Personalizzata Su Windows Phone 7


Specifiche Bluetooth Su Windows Phone 7

Author: ollie10 7/20/2010 11:43 AM

Nel web c'è un pò di confusione per quanto riguarda le specifiche che saranno supportate dal bluetooth su windows phone, elenco qui quelle che "dovrebbero" essere le definitive ed ufficiali

  • Hands-Free Profile (HFP) 1.5. This is typically used for hands-free interfaces in automobiles.
  • Headset Profile (HSP). The most common BT profile, HSP provides support for wireless headsets.
  • Advanced Audio Distribution Profile (A2DP) 1.2. This provides high quality mono and stereo audio playback over Bluetooth.
  • A/V Remote Control Profile (AVRCP) 1.0. This allows a Bluetooth device to be used as a remote control. Windows Phone supports only the most basic remote control features (play, pause, stop, and so on).
  • Phone Book Access Profile (PBAP). This allows a BT-compatible device to exchange address book (contacts) data with another BT-compatible device. It is typically used with car kits so that contact names can appear on the in-car display.

Tags: ,
Categories: Windows Phone
Permalink | Comments (1)
  • condividi Specifiche Bluetooth Su Windows Phone 7 su facebook
  • condividi Specifiche Bluetooth Su Windows Phone 7 su twitter
  • condividi Specifiche Bluetooth Su Windows Phone 7 su stumbleupon
  • condividi Specifiche Bluetooth Su Windows Phone 7 su digg
  • condividi Specifiche Bluetooth Su Windows Phone 7 su delicious
  • condividi Specifiche Bluetooth Su Windows Phone 7 su reddit
  • condividi Specifiche Bluetooth Su Windows Phone 7 su google
  • condividi Specifiche Bluetooth Su Windows Phone 7 su netvibes
  • aggiungi il feed di Specifiche Bluetooth Su Windows Phone 7


28 Design Templates Ufficiali Per Windows Phone 7

Author: ollie10 7/17/2010 11:32 AM

windows phone design templateMicrosoft ha rilasciato fra la sua documentazione un set di 28 template per Photoshop contenenti gli elementi di grafica più usati nell'interfaccia del telefono. L'intenzione è quella di realizzare un set di elementi base in modo da poter poi disegnare dei mock-up perfetti.

Il set di templates è disponibile in download da qui


Tags: , ,
Categories:
Permalink | Comments (1)
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su facebook
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su twitter
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su stumbleupon
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su digg
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su delicious
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su reddit
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su google
  • condividi 28 Design Templates Ufficiali Per Windows Phone 7 su netvibes
  • aggiungi il feed di 28 Design Templates Ufficiali Per Windows Phone 7


Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7

Author: ollie10 7/15/2010 5:11 PM

Nella demo di oggi vediamo come usare il sistema SIP (Software Input Panel) e cambiare il tipo di tastiera che apparirà quando apriamo il pannello di inserimento in una textbox o in altri controlli dove è possibile immettere del testo. Il SIP è quel componente che gestisce la comparsa e la scomparsa della tastiera virtuale quando facciamo tap su un controllo che prevede l'inserimento del testo.

Di norma la tastiera che ci verrà presentata è una tastiera standard che può andare bene per un uso generico, noi possiamo personalizzare questo comportamento settando sul controllo che ci interessa l'input scope adatto alla situazione. Gli input scope sono rappresentati da un enumerator che contiente più di 50 valori molti dei quali non verranno mai usati. Nel caso però, in cui avremo bisogno di un campo per l'inserimento di un numero di telefono potremo usare l'input scope TelephoneNumber che farà apparire una tastiera esclusivamente numerica (come da screenshot).

demo windows phone input scope

Settare un input scope su un controllo non cambia solo l'apparenza del SIP ma ne cambia anche le funzionalità, ad esempio l'input scope di default fa poco per aiutare l'utente ma se impostiamo l'input scope su Text verranno attivate anche delle funzionalità come l'auto-completamento, il maiuscolo sulla prima lettera ed altre utili funzionalità. La personalizzazione dell'input scope può essere fatta sia a livello di xaml sia programmaticamente con c#, vediamo come:

Versione XAML:

<TextBox Height="72" HorizontalAlignment="Center" Margin="0,85,0,0" Name="textBox1" Text="Email Input Scope" VerticalAlignment="Top" Width="460">
	<TextBox.InputScope>
		<InputScope>
			<InputScopeName NameValue="EmailUserName" />
		</InputScope>
	</TextBox.InputScope>
</TextBox>

Versione c#

InputScope inputScope = new InputScope();
InputScopeName inputScopeName = new InputScopeName();
inputScopeName.NameValue = InputScopeNameValue.TelephoneNumber;
inputScope.Names.Add(inputScopeName);
textBox2.InputScope = inputScope;

Qui di seguito una lista degli input scoper più utilizzati:

Keyboard Type

Layout

Default

Standard QWERTY layout

Text

Standard layout with ASCII-based emoticons

E-mail Address

Standard layout with .com and @ keys

Phone Number

Typical 12-key layout

Web Address

Standard layout with .com key and customized Enter key

Maps

Standard layout with a customized Enter key

Search

Semi-transparent layout with a Search and .com key

SMS Address

Standard layout with easy access to phone number layout


Tags: ,
Categories:
Permalink | Comments (0)
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su facebook
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su twitter
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su stumbleupon
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su digg
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su delicious
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su reddit
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su google
  • condividi Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7 su netvibes
  • aggiungi il feed di Usare Gli Input Scope Per Cambiare Il Tipo Di Tastiera Virtuale Su Windows Phone 7


Uso Dei Comandi Vocali Su Windows Phone 7

Author: ollie10 7/14/2010 6:05 PM

In questo video viene mostrato come funzionano i comandi vocali su windows phone 7


Tags:
Categories:
Permalink | Comments (1)
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su facebook
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su twitter
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su stumbleupon
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su digg
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su delicious
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su reddit
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su google
  • condividi Uso Dei Comandi Vocali Su Windows Phone 7 su netvibes
  • aggiungi il feed di Uso Dei Comandi Vocali Su Windows Phone 7


Rilasciati i Windows Phone Developer Tools Beta!

Author: ollie10 7/13/2010 10:02 AM

Nella giornata di ieri finalmente è stata rilasciata finalmente la nuova versione (beta) dei tools di sviluppo per windows phone, il download è disponibile a questo link.

Come scritto nel post originale siamo molto vicini alla versione finale dei tools: "The term “Beta” is understood to mean that things are close to being finished. Well, that’s what we mean anyway. This Beta release represents the near final version of the tools for building applications and games for Windows Phone 7."

Ovviaiamente come è stato per il passaggio dalla ctp alla ctp refresh c'è bisogno di disinstallare la versione precedente perchè altrimente il setup ci restituirà il seguente errore:

Incompatible products
Setup has detected that following incompatible version of products or components are installed on
your machine. Please uninstall the following products or components in specified order:
* Microsoft Windows Phone Developer Tools CTP Refresh
* Windows Phone 7 Add-in for Visual Studio 2010 CTP Refresh - ENU
* Microsoft Windows Phone Developer Resources
* Microsoft XNA Game Studio 4.0
* Microsoft XNA Game Studio 4.0 Windows Phone Extensions

Una delle caratteristiche più interessanti è che ora expression blend per windows phone è completamente integrato nel pacchetto di installazione dei developers tools beta. Qui trovate le release notes tra cui le più importanti:

  • Microsoft Expression Blend for Windows Phone – Blend is now integrated completely into the Windows Phone Developer Tools Beta.
  • Developer Registration Utility – Now you can unlock you Windows Phone 7 device for development purposes.
  • XAP Deployment Tool – if you want to deploy XAP files directly to an unlocked device, now you can.
  • The Windows Phone 7 API – we’re getting close to completion.  Many namespaces that were previously distributed over several different DLLs have now been consolidated into one.  In addition, there have been realignments and changes in several other namespaces as well.  Push Notifications, Accelerometer and App Bar APIs have all been updated.
  • Additional Controls – There are some additional controls coming in the next few weeks (i.e. Panorama and Pivot) which didn’t make the beta release.  They are coming soon.
  • Control Templates – Silverlight for Windows Phone control templates have been updated to match evolutions in the overall OS.

Qui trovate un post che spiega le differenze e le modifiche da fare per aggiornare i nostri progetti alla beta build, buon download a tutti


Tags: , ,
Categories: Windows Phone
Permalink | Comments (1)
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su facebook
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su twitter
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su stumbleupon
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su digg
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su delicious
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su reddit
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su google
  • condividi Rilasciati i Windows Phone Developer Tools Beta! su netvibes
  • aggiungi il feed di Rilasciati i Windows Phone Developer Tools Beta!