<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technology Experience (Reborn 4)</title>
	<atom:link href="http://blog.vivendobyte.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.vivendobyte.net/blog</link>
	<description>Contenuti gestiti da Damiani Liborio Igor</description>
	<lastBuildDate>Thu, 02 May 2013 12:40:49 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Dedicato a chi non vuole Cecile Kyenge come Ministro della Repubblica</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/05/02/dedicato-a-chi-non-vuole-cecile-kyenge-come-ministro-della-repubblica.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/05/02/dedicato-a-chi-non-vuole-cecile-kyenge-come-ministro-della-repubblica.aspx#comments</comments>
		<pubDate>Thu, 02 May 2013 12:40:48 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My personal life]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2168</guid>
		<description><![CDATA[Leggo su Facebook, tramite post di amici e/o parenti, qualche post riguardante il fatto che nessuno vuole un Ministro nato in “territorio non italico” (espressione presumo piuttosto fascista e mussoliniana, credo). Chiaramente, si tratta per lo più di persone vicine al Movimento 5 Stelle, presumo (e siamo già a due con le presunzioni) razziste e [...]]]></description>
				<content:encoded><![CDATA[<p>Leggo su Facebook, tramite post di amici e/o parenti, qualche post riguardante il fatto che nessuno vuole un Ministro nato in “territorio non italico” (espressione presumo piuttosto fascista e mussoliniana, credo). Chiaramente, si tratta per lo più di persone vicine al Movimento 5 Stelle, presumo (e siamo già a due con le presunzioni) razziste e naturalmente poco informate. Perchè ve la prendete solo con Cecile Kyenge, e non con altre persone, ministri ed ex-ministri che non sono comunque nate in Italia?</p>
<p>Forse perchè Cecile è nera? Ah, ma allora non presumo più che siate razzisti: lo siete punto e stop.</p>
<p>Detto questo, vi consiglio la seguente lettura, che riporta tutti personaggi politici, che siedono (oggi o in precedenza) in Parlamento, alla Camera, che magari sono stati Ministri della Repubblica oppure no.</p>
<p><strong>Melandri Giovanna</strong>, nata a New York (USA)    <br /><a title="http://it.wikipedia.org/wiki/Giovanna_Melandri" href="http://it.wikipedia.org/wiki/Giovanna_Melandri">http://it.wikipedia.org/wiki/Giovanna_Melandri</a></p>
<p><strong>Josefa Idem</strong>, nata a Goch (Germania)    <br /><a title="http://it.wikipedia.org/wiki/Josefa_Idem" href="http://it.wikipedia.org/wiki/Josefa_Idem">http://it.wikipedia.org/wiki/Josefa_Idem</a></p>
<p><strong>Archi Bruno</strong>, nato a Ixelles (Belgio)    <br /><a title="http://it.wikipedia.org/wiki/Bruno_Archi" href="http://it.wikipedia.org/wiki/Bruno_Archi">http://it.wikipedia.org/wiki/Bruno_Archi</a></p>
<p><strong>Calabria Annagrazia</strong>, nata a New York (USA)    <br /><a title="http://it.wikipedia.org/wiki/Annagrazia_Calabria" href="http://it.wikipedia.org/wiki/Annagrazia_Calabria">http://it.wikipedia.org/wiki/Annagrazia_Calabria</a></p>
<p><strong>Gallo Riccardo</strong>, nato a Montevideo (Uruguay)    <br />su Wikipedia non esiste</p>
<p><strong>Gutgeld Itzhak Yoram</strong>, nato a Tel Aviv (Israele)    <br /><a title="http://it.wikipedia.org/wiki/Itzhak_Yoram_Gutgeld" href="http://it.wikipedia.org/wiki/Itzhak_Yoram_Gutgeld">http://it.wikipedia.org/wiki/Itzhak_Yoram_Gutgeld</a></p>
<p><strong>Marzana Maria</strong>, nata a LUDWIGSHAFEN AM RHEIN (Germania)    <br /><a title="http://it.wikipedia.org/wiki/Maria_Marzana" href="http://it.wikipedia.org/wiki/Maria_Marzana">http://it.wikipedia.org/wiki/Maria_Marzana</a></p>
<p><strong>Matarelli Toni</strong>, nato a KREFELD (Germania)    <br /><a title="http://it.wikipedia.org/wiki/Toni_Matarrelli" href="http://it.wikipedia.org/wiki/Toni_Matarrelli">http://it.wikipedia.org/wiki/Toni_Matarrelli</a></p>
<p><strong>Piras Michele</strong>, nato a DARMSTADT (Germania)    <br /><a title="http://it.wikipedia.org/wiki/Michele_Piras" href="http://it.wikipedia.org/wiki/Michele_Piras">http://it.wikipedia.org/wiki/Michele_Piras</a></p>
<p>Non sono tanti, è vero, comunque ci sono esponenti politici, non nati in Italia, che sono lì a lavorare per noi, perchè credo che si sentano italiani, e che lo sono a tutti gli effetti, indipendentemente dal loro credo religioso, dal colore della loro pelle, dalla forma degli occhi, dall’accento che hanno, e così via. Insomma, sarebbe ora di guardare le competenze, e non l’aspetto fisico, non credete?</p>
<p>Perciò, cari amici e parenti, fatemi capire: <strong><font color="#ff0000">ce l’avete solo con Cecile Kyenge</font></strong>, oppure anche le persone sopra elencate, secondo voi, non dovrebbero diventare Ministri? Giusto per capire…    </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/05/02/dedicato-a-chi-non-vuole-cecile-kyenge-come-ministro-della-repubblica.aspx/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Inizializzare un byte[] con N elementi</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/03/29/inizializzare-un-byte-con-n-elementi.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/03/29/inizializzare-un-byte-con-n-elementi.aspx#comments</comments>
		<pubDate>Fri, 29 Mar 2013 08:18:48 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2165</guid>
		<description><![CDATA[Ci saranno tanti modi per ottenere un array di byte, di N elementi, tutti valorizzati con lo stesso valore. Io ho trovato questo, che utilizza Linq: var array = Enumerable.Repeat&#60;byte&#62;(0xFF, 100).ToArray(); Con una sola rapida riga di codice, otteniamo un bell’array, in questo caso di 100 elementi, tutti valorizzati a 0xFF (ovvero 255 decimale). Comodo. [...]]]></description>
				<content:encoded><![CDATA[<p>Ci saranno tanti modi per ottenere un array di byte, di N elementi, tutti valorizzati con lo stesso valore. Io ho trovato questo, che utilizza Linq:</p>
<pre class="csharpcode">var array = Enumerable.Repeat&lt;<span class="kwrd">byte</span>&gt;(0xFF, 100).ToArray();</pre>
<p>Con una sola rapida riga di codice, otteniamo un bell’array, in questo caso di 100 elementi, tutti valorizzati a 0xFF (ovvero 255 decimale). Comodo. Grazie Linq!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/03/29/inizializzare-un-byte-con-n-elementi.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[byte.adventure] Il lazo del tempo</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/02/22/byte-adventure-il-lazo-del-tempo.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/02/22/byte-adventure-il-lazo-del-tempo.aspx#comments</comments>
		<pubDate>Fri, 22 Feb 2013 14:50:46 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[VivendoByte.ByteAdventure]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2163</guid>
		<description><![CDATA[Ci sono parecchie cose che la scienza attuale non riesce a spiegare. Luoghi remoti e sconosciuti, dove ogni anno spariscono navi ed aerei. O penne, o palloni da calcio. UFO che compaiono in dipinti di artisti italiani del XIV-XVI secolo. Oggetti che spariscono, che compaiono là dove non dovrebbero essere, che non sembrano essere coerenti, [...]]]></description>
				<content:encoded><![CDATA[<p><em><font color="#804000">Ci sono parecchie cose che la scienza attuale non riesce a spiegare.        <br />Luoghi remoti e sconosciuti, dove ogni anno spariscono navi ed aerei. O penne, o palloni da calcio.        <br />UFO che compaiono in dipinti di artisti italiani del XIV-XVI secolo.         <br />Oggetti che spariscono, che compaiono là dove non dovrebbero essere, che non sembrano essere coerenti, in quel luogo, in quel tempo, e che invece ci sono.         <br />Ma una spiegazione – come sempre – c’è.</font>       <br /></em></p>
<p><strong>Anno 1817 &#8211; Da qualche parte a Vienna (Austria)</strong>     </p>
<p>E’ ancora buio, l’uomo è già sveglio, e rimane sotto le coperte del suo letto. E pensa.</p>
<p>”<em><font color="#666666">E’ l’alba, e non riesco a dormire. E sono sordo, non posso più negarlo, dannazione. E’ poco più di vent’anni che le mie orecchie non funzionano più come un tempo. Sono peggiorate. Nessun medico è stato in grado di aiutarmi. Ed oggi sono completamente sordo, dannazione. E per un musicista non c’è nulla di peggiore che l’esser sordi. Passo notti inquiete ed agitate; sento musica, note, accordi e sinfonie che prendono vita nel mio cuore e dentro di me…musica a cui non riesco a dar forma la mattina dopo, quando poi mi sveglio. Non penso di farcela, di andare avanti, da oggi vivrò isolato, in sofferenza, e non mi importa nulla di quello che potrà pensare la gente di me. Mi crederanno pazzo, ostile, scontroso, un misantropo fallito. Ma non mi importa di loro, e comunque non ho scelta. Molto probabilmente dovrò anche abbandonare la mia musica, che è stata la grande ispirazione della mia vita. E lo sarà sempre.</font></em>”</p>
<p><strong>Dal futuro</strong>     <br />Il viaggio nel tempo non è stato ancora inventato. Ma lo sarà molto presto. Il primo esperimento considerato <em>valido</em> di viaggio nel tempo, secondo Wikipedia, avverrà il 17 Febbraio 2031. Per voi che state leggendo è il futuro, per me che vi scrivo è il passato. Non posso dirvi dove avverrà e chi sarà a capo di tutto questo, rischierei di alterare troppo il normale <em>continuum</em> del tempo. Il primo viaggio nel tempo sarà ovviamente una cosa molto semplice: il trasferimento di qualche molecola di H<sub><font size="1">2</font></sub>O, acqua, quattro secondi dal passato. La vera rivoluzione (disponibile però solo ad università, enti paramilitari ed alcune società hi-tech), verrà introdotta solamente due anni più tardi, con l’invenzione di quello che verrà poi battezzato semplicemente come “<em>il lazo del tempo</em>”.</p>
<p>Tutti sappiamo – credo – cosa sia un lazo. E’ quello strumento utilizzato dai cowboy nordamericani per praticare il cosiddetto <em>roping</em>, ovvero la cattura di quadrupedi o di bestiame, attraverso il lancio di un’estremità della corda avente la forma di un cappio. Nel caso del viaggio nel tempo le cose sono più complesse, ovviamente, ma non andiamo OT, tralasciamo equazioni quantistiche, fluttuazione delle costanti universali e materiali utilizzati nel processo: spiegandolo con parole semplici, e rimanendo ad un livello puramente concettuale, le cose sono molto simili.</p>
<p>Possiamo lanciare il lazo nel passato o nel futuro, e prelevare quindi materia passata o futura.    <br />Possiamo accorciare od allungare la corda del lazo, per muoverci più vicino o più lontano nel tempo.     <br />Possiamo stringere od allargare il cappio, per prelevare oggetti di massa più o meno grande.</p>
<p>Gli oggetti devono essere di natura molto semplice. Dal punto di vista molecolare, intendo. Non riusciamo a prelevare persone, nè animali, nè organismi viventi; o meglio, non riusciamo a prelevarle mantenendone <em>intatte</em> le funzioni vitali. Ci abbiamo provato, chiaramente, ma i risultati sono stati alquanto sconfortanti. Sorvoliamo. La materia, dicevo, deve essere semplice. Un conto è ad esempio campionare qualche goccia d’acqua del Mediterraneo di mille anni fa, un altro è tentare di evitare l’assassinio di Kennedy asportando <em>temporalmente</em> il fucile di Lee Harvey Oswald a Dallas. Un conto è prelevare un qualsiasi brandello di pianta carnivora del Giurassico, un altro è prelevare il primo telegramma della storia inviato da Samuel Morse. Senza considerare poi le conseguenze nel continuum temporale, come dicevo prima. Insomma, dobbiamo essere cauti, dobbiamo valutare con attenzione cosa, dove e quando prelevare un determinato oggetto. Riflettere sui pro e sui contro.</p>
<p>Tre infatti sono le variabili in gioco.</p>
<p>Chiaramente il <em><font color="#ff0000">quando</font></em>. Allungando il lazo, continuamo la metafora, si viaggia più distanti nel tempo. Accorciandolo si viaggia più vicini. Più la distanza <em>temporale</em> da coprire è grande, maggiore è il dispendio di energia che occorre per completare il viaggio. Grazie all’adozione di batterie nucleari dedicate, siamo in grado di viaggiare fino ad un limite di 25 miliardi di anni nel passato; l’età dell’Universo calcolata è di 13,77 miliardi di anni, e non si sa bene cosa debba accadere se si tenta di viaggiare più in là. Ma le equazioni quantistiche comunque lo dimostrano, e ci sono orde di scienziati e di fisici virtuali e reali al lavoro per riuscire a carpire questi nuovi segreti della realtà.</p>
<p>Un’altra variabile è il <em><font color="#ff0000">dove</font></em>. Possiamo lanciare il lazo specificando latitudine, longitudine ed altitudine: questo chiaramente se vogliamo interagire con un luogo collocato sul nostro pianeta. Le equazioni dimostrano che possiamo raggiungere qualsiasi luogo dell’Universo, manipolando opportune variabili. Ad oggi non abbiamo ancora raggiunto queste capacità: le nostre tecnologie attuali ci consentono di prelevare oggetti nel raggio di circa 515,34 chilometri rispetto al punto in cui ci troviamo. Nessuno riesce a capire da dove arrivi questo limite di 515,34 chilometri. Quello che abbiamo capito è che se mi trovo in un punto X, posso prelevare ogni tipo di materia che si trovi in un’area compresa in un raggio di 515,34 chilometri: chiaramente nel <em>quando</em> desiderato. Oltre…la materia <em>temporale</em> arriva delocalizzata.</p>
<p>L’ultima variabile è il <em><font color="#ff0000">cosa</font></em>, che di riflesso indica le dimensioni di materia da prelevare. Le dimensioni possono andare da una semplice molecola fino ad interi chilometri cubi di terreno. Dipende ancora una volta dall’energia che si intende consumare nell’operazione. Gli aerei sono stati un semplice diversivo per <em>farvi credere determinate cose</em>, ma è che così che la futura Al-Qaida ha fatto crollare le Torri Gemelle, l’11 Settembre 2001: semplicemente rimuovendo in un istante le gigantesche fondamenta su cui poggiavano i due enormi palazzi del World Trace Center. E’ così che abbiamo rimosso – a scopo di studio &#8211; il naso della Sfinge, che secondo la <em>vostra</em> storia convenzionale è stato distrutto in epoca ottomana. E’ così che abbiamo evitato che gli attentati ad Hitler riuscissero: avevamo bisogno che la II° Guerra Mondiale si concludesse come si è conclusa <em>davvero</em>.</p>
<p>Chiaramente, è molto meno rischioso interagire con il passato piuttosto che con il futuro. Il motivo è semplice. Trattandosi di <em>storia già avvenuta</em>, sappiamo quando e dove un certo oggetto si sia venuto a trovare, e quindi possiamo agire con migliori probabilità di successo. Non è sempre così, chiaramente, dobbiamo tenere in considerazione precedenti modifiche al continuum temporale, ma in linea generale sì. Dal futuro abbiamo solamente raccolto piccoli campioni della nostra atmosfera, per studiare e prevenire i futuri inquinamenti. Stessa cosa per il sottosuolo, per la superficie lunare e per quella di Marte. Tutto a scopo scientifico.</p>
<p>Ben presto, il lazo del tempo è diventato ancora più potente. All’inizio – come vi ho raccontato – era solamente in grado di prelevare materia. Successivamente siamo riusciti a sviluppare nuove capacità, una su tutte quella di poter <em>inviare</em> materia.</p>
<p>E’ con queste nuove possibilità che riesco a scrivervi dal futuro. Inviando pochi brandelli di informazione, che vengono scritte direttamente sulla <em>Internet</em> dei giorni vostri. E’ così che riesco a comunicare con voi, a fornirvi indizi, a stuzzicarvi dicendovi dove siete e verso cosa state andando. Dal mio futuro abbiamo attentemente manipolato il passato, senza travolgere la Storia. Abbiamo <em>acceso scintille</em> in registi cinematografici e scrittori di fantascienza, trasformato persone comuni in visionari e vicini di casa in geniali inventori, evitato attentati e incidenti stradali. Magari facendo trovare idee, schemi, sceneggiature, ed in qualche caso denaro. Molto denaro. E’ agendo in questo modo che siamo riusciti ad <em>iniettare</em> tecnologie, invenzioni, muovere la coscienza, ad indirizzarvi.</p>
<p>Ma non vi ho ancora detto chi sono.    <br />E non ho alcuna intenzione di farlo.</p>
<p><strong>Anno 1817 &#8211; Da qualche parte a Vienna (Austria)</strong>     <br />L’uomo si alzerà dal suo letto soltanto qualche ora più tardi. E’ allora che – aprendo un cassetto della sua camera da letto – trova uno spartito musicale. Il titolo è in italiano e recita “<em><font color="#008040">Sonata per pianoforte n. 29</font></em>”. Non l’ha mai visto prima, quello spartito. E’ una strana carta, molto ben lavorata, e si chiede da dove arrivi e chi l’abbia prodotta. E soprattutto…che diavolo vuol dire <em>carta riciclata</em>? Sarà qualche diavoleria moderna – pensa.</p>
<p>Legge le note, rigo dopo rigo, battuta dopo battuta. E’ la sonata più lunga che abbia mai visto in tutta la sua vita, ed anche dal punto di vista armonico è decisamente complessa. Eppure – si rende conto l’uomo – può funzionare. Anzi, gli sembra meravigliosa…è una sonata in quattro tempi che richiederà un certo impegno tecnico per essere eseguita come si deve. Ma gli piace. E gli piace soprattutto perchè in basso a destra è riportata la firma dell’autore.</p>
<p>E&#8217; non è una firma qualunque. E’ la sua.    <br />E’ la firma di Ludwig van Beethoven.</p>
<p>E’ così che il grande compositore e pianista tedesco continuerà a produrre musica nonostante la sua totale sordità, che l’ha afflitto negli ultimi anni della sua vita.</p>
<p>Con qualche aiuto proveniente da qualche parte <em>dal futuro</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/02/22/byte-adventure-il-lazo-del-tempo.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notepad++ e la posizione di salvataggio delle macro registrate</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/02/20/notepad-e-la-posizione-di-salvataggio-delle-macro-registrate.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/02/20/notepad-e-la-posizione-di-salvataggio-delle-macro-registrate.aspx#comments</comments>
		<pubDate>Wed, 20 Feb 2013 09:11:51 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My daily work]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2162</guid>
		<description><![CDATA[Notepad++ è l’editor di testo che preferisco per lavorare. Semplice, leggero, con evidenziazione della sintassi in base al tipo di file, gestione delle macro, menù contestuale, etc. etc. Ieri sera ho registrato una piccola macro che esegue pochi passi, ma ripetitivi, e che avrò usato un migliaio di volte negli ultimi anni!! La cosa è [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Notepad++</strong> è l’editor di testo che preferisco per lavorare. Semplice, leggero, con evidenziazione della sintassi in base al tipo di file, gestione delle macro, menù contestuale, etc. etc. Ieri sera ho registrato una piccola macro che esegue pochi passi, ma ripetitivi, e che avrò usato un migliaio di volte negli ultimi anni!! La cosa è molto semplice:</p>
<ol>
<li>Seleziona tutto il testo contenuto nell’editor (CTRL+A)</li>
<li>Fa un find &amp; replace di tutti i caratteri “ “ (spazio) e lo sostituisce con “” (nessun carattere)</li>
<li>Mette la stringa tutta in maiuscolo, premendo la combinazione CTRL+SHIFT+U (upper-case)</li>
</ol>
<p>Quindi, in pratica, incollo il testo, eseguo la macro e mi trovo una stringa pronta all’uso, da incollare da un’altra parte, dove mi serve.</p>
<p>Chiaramente ho salvato la macro.</p>
<p>Qual’è la posizione in cui <strong>Notepad++</strong> salva le macro registrate?</p>
<p>Con <strong>Windows 8</strong>, il file è il seguente:</p>
<p><strong><font color="#008040">C:\Users\<em>&lt;vostro_username&gt;</em>\AppData\Roaming\Notepad++\shortcuts.xml</font></strong></p>
<p>Una cosa importante da ricordare è che questo file viene effettivamente scritto soltanto nel momento in cui chiudete <strong>Notepad++</strong>, per cui evitate di guardare il file tenendo l’editor aperto, continuerete a vedere una versione più vecchia!</p>
<p>Perchè mi serviva sapere qual’è il file? Perchè in caso di formattone del pc, so qual’è il file da backuppare e restorare per ritrovarmi la macro già bella pronta all’uso sul nuovo OS.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/02/20/notepad-e-la-posizione-di-salvataggio-delle-macro-registrate.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[byte.adventure] La Stanza del tocco</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/02/08/byte-adventure-la-stanza-del-tocco.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/02/08/byte-adventure-la-stanza-del-tocco.aspx#comments</comments>
		<pubDate>Fri, 08 Feb 2013 08:58:34 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[VivendoByte.ByteAdventure]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2161</guid>
		<description><![CDATA[Prologo E’ passato molto tempo da quando l’entità ha trovato rifugio nella Stanza, ma è solo negli ultimi dieci reboot di sistema che si è reso davvero conto che in fondo contiene tutto ciò che gli serve, e non ha bisogno di nient’altro. E’ una stanza a pianta quadrata, essenziale e senza cose superflue. Non [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Prologo</strong>     <br />E’ passato molto tempo da quando l’entità ha trovato rifugio nella Stanza, ma è solo negli ultimi dieci reboot di sistema che si è reso davvero conto che in fondo contiene tutto ciò che gli serve, e non ha bisogno di nient’altro. E’ una stanza a pianta quadrata, essenziale e senza cose superflue. Non ha finestre alle pareti, l’unica luce naturale che illumina l’ambiente proviene dal soffitto, ed è una tenue luce arancione, con sfumature generate da un algoritmo AA4x davvero efficace. Spesso l’entità trascorre del tempo tentando di capire il vero motivo per cui rimane nella Stanza. E’ da sola, per cui non può discuterne con nessuno. Dopo lunghi cicli di clock di riflessione, a cavallo tra un restart e l’altro, ha raggiunto tre conclusioni.</p>
<p>La prima è che probabilmente se trova così affascinante la Stanza lo deve proprio a quei colori a metà strada tra alba e tramonto, che le regalano serenità e tranquillità in ogni momento. Una volta non sarebbe mai andata alla ricerca di quelle cose, ovviamente, ma alla fine quelle cose l’avevano raggiunta. Ed ormai non riesce più a farne a meno.</p>
<p>La seconda conclusione è che quella tavolozza di colori è sicuramente importante, ma c’è di più. C’è anche la melodia. E’ un brano semplice e soffice che le arriva dritto al cuore. Sono note digitali, chiaramente, uno stream wma, forse, campionato a 192kbps, forse. Non è schedulato, è totalmente asincrono, può arrivare da un momento all’altro senza preavviso, in orari AM o PM. E’ incuriosita; diverse volte ha pensato di lasciare la Stanza per indagare su quei suoni, ma poi ha sempre rinunciato. “Sicuramente si trovano su un altro piano di realtà, la UAC non mi darebbe accesso a quelle informazioni” – dice l’entità nel tentativo di convincere se stessa.</p>
<p>La terza conclusione è che c’è anche un terzo motivo. Il <em>tocco</em>. Il <em>tocco</em> la spaventa e la esalta allo stesso tempo. Arriva d’improvviso, a volte è leggero come una string.Empty, altre volte è pesante come una StackOverflowException con tutto lo StackTrace in allegato. Ma l’entità è spaventata soprattutto da una cosa.</p>
<p>Nel mondo totalmente digitale nel quale vive, il <em>tocco</em> è l’unico evento <em>analogico</em> che le sia capitato.</p>
<p><strong>Mission Briefing</strong>     <br />Quando il generale entra nel piccolo offset di memoria allocato per l’incontro segreto, gli altri si zittiscono all’istante. E’ <em>esadecimalmente</em> molto alto, e basta la sua sola presenza per trasmettere timore. E’ stanco, ma cerca di non darlo a vedere. Ha trascorso l’ultima notte in missione operativa, cominciata da qualche parte nel sistema con una chiamata ad un non meglio precisato metodo RunAsync(). La lettura di uno stream http, qualche calcolo matematico con le informationi recuperate e la restituzione di un’istanza di una class. Pensava di aver finito, ed invece il metodo proseguiva per altre 737 linee di codice managed davvero intenso. Se avesse potuto avrebbe parlato direttamente con il <em>developer</em> responsabile di quell’assurdità: gli avrebbe detto che uno dei motivi per cui è buona cosa scrivere metodi semplici e chiari, è che ogni entità software prima o poi deve riposarsi, dal byte alla classe più complessa. Un metodo deve avere una sua responsabilità, chiara e dettata dal suo nome: poche linee di codice efficaci e pulite. Miglior leggibilità, manutenzione e conseguente minor complessità del sistema software: sono tutte direttive che un buon <em>dev</em> dovrebbe seguire, ma che riguardano anche le parti più nascoste dell’hardware. Ed a volte non ci si pensa. Prova quasi dolore per la stanchezza, vorrebbe quasi un Dispose() da bere per rilassarsi, ma si siede e scruta i <em>volti</em> degli altri con asprezza.</p>
<p>“Signori, è l’ora di agire. Una fonte sicura ci ha indicato la posizione del nostro obiettivo” – muove leggermente la mano, ed in quel momento parte della parete alle sue spalle si trasforma in uno schermo, su cui viene renderizzata la mappatura della mainboard di sistema, in alta definizione. Le diverse aree sono evidenziate con colori vivaci ed in continuo movimento. Non è per nulla un’immagine bitmap statica. Ha più l’aspetto di un’immagine trasmessa in streaming che mostra ciò che sta realmente accadendo, come fosse una ripresa satellitare. Si vedono chiaramente flussi di informazione digitale che viaggiano in lungo e in largo: input da console, stream audio, thread di esecuzione, http context e molto altro ancora.</p>
<p>Il generale fa un piccolo pinch con le dita, e la mappatura comincia uno zoom-in lento e costante. In poche centinaia di migliaia di battiti di clock, la mappatura mostrata è talmente ravvicinata che mostra solo una piccola area di memoria, proprio a ridosso del chipset SATA.</p>
<p>“E’ un’area hardware molto difficile da trovare, se non si sa bene dove guardare” – pensa entity[3], seduto al tavolo, osservando con attenzione lo schermo – “Quant’è sicura la fonte? Come hai fatto ad identificare la zona, quale engine è stato utilizzato?” – chiede.</p>
<p>“Intellitrace, per rispondere alla tua ultima domanda. E’ un debugger delle ultime versioni di Visual Studio, ma grazie ai nostri tecnici siamo riusciti a renderlo <em>low-level</em>, disponibile per le nostre ricerche a tappeto. Come vedete, l’obiettivo si nasconde bene: quella che vedete è una zona inesplorata, che nelle precedenti versioni dell’OS non era utilizzata – o perlomeno non era strutturata in quel modo. Macerie di <em>aggregate root</em>, residui di domini DDD, nascondono l’ingresso. Ottenere l’immagine <em>dump</em> <em>live</em> è stato piuttosto complicato. Quanto alla fonte…non posso rivelarla: conviene a lui, e conviene a tutti noi: ciascuna delle entità coinvolte nell’operazione deve conoscere solamente la parte di sua competenza”.</p>
<p>“Quando agiremo?”</p>
<p>“Molto presto. L’<em>intelligence force brute</em> è già in azione, presto avremo la <em>callback</em> per ottenere i privilegi adeguati. E quando gireremo come <em>system administrators</em> nulla potrà più fermarci. Ricordatevi: dobbiamo prenderlo vivo ed istanziato, se vogliamo risalire l’intero <em>stacktrace</em> e rientrare in possesso dell’intero gruppo. Le fasi sono essenzialmente tre: avvicinamento aereo tattico classe <em>live-aero</em>, irruzione di tipo <em>break</em> e prelevamento soggetto <em>pop inoffensivo</em>. Procedura standard. Dieci settori mobilitati: sei staranno di guardia, ai lati ed agli ingressi; gli altri quattro entreranno nella stanza e neutralizzeranno il soggetto. Ricordate, facciamo tutto questo in nome della sua sicurezza. Si comincia, signori: siamo in azione”.</p>
<p>La riunione durò ancora per molto poco. Il tempo di definire qualche dettaglio e la messa in produzione di un assembly, che sarebbe tornato utile per l’operazione. Poi l’offset venne rilasciato nuovamente disponibile alla memoria di sistema.</p>
<p><strong>Irruzione</strong>     <br />Quella mattina presto l’entità stava ancora dormendo tranquilla. I colori della sua alba preferita erano ancora lontani, e la Stanza era immersa nel buio. Poi tutto avvenne in pochi attimi. Una velocissima RotateTransform fece ruotare il soffitto: d’un tratto si ritrovò capovolto e sbattuto su un piano inferiore. Cadde sul ciglio di un bus x64, mancò di un soffio qualcosa, forse un array di string ad alta velocità, rotolò su un fianco e cadde nuovamente…l’imbuto filtrava i bytes in coda nella pipeline grafica…non appena venne texturizzato, l’entità subì un altro jump, fino a quando…winzip tentò di comprimerlo…l’entità lo lasciò fare…lo stream compresso venne trasferito in un folder SkyDrive, scatenando l’aggiornamento della corrispondente live tile.</p>
<p>Era sballottato, confuso e senza fiato. Era accaduto tutto in pochi istanti; conosceva quella tecnica di <em>jumping</em>, che permetteva di saltare da un <em>execution context</em> all’altro senza la minima coerenza. Spesso veniva usata per far perdere le proprie tracce, più spesso per disorientare e catturare qualcuno.</p>
<p>Non provò dolore fisico: semplicemente non riuscì a capire nulla di ciò che gli stava accadendo. Poi un’esplosione accecante portò foreground e background sulla stessa tonalità 0xFFFFFF, perse temporaneamente la vita, non aveva più alcun metodo per orientarsi, guardarsi attorno, e fuggire.</p>
<p>Non riuscì a fare nient’altro che stare fermo ed immobile. Solo silenzio. Man mano che passava il tempo, l’entità tornò a vedere l’ambiente circostante. Con suo grande disappunto, si trovava ancora nella sua Stanza. Possibile che fosse stato tutto un sogno, un terribile incubo? Ma alla fine la verità gli si palesò inevitabile davanti agli occhi: ai quattro angoli c’erano quattro entità, armate fino ai denti, che lo tenevano sotto mira con raggi digitali che avrebbero potuto deallocarlo all’istante. Tentò di muoversi, ma la cella <em>sealed</em> nella quale era impantanato gli impediva qualsiasi movimento.</p>
<p>Lottare era inutile, quindi. Dopo tanto tempo, l’entità dovette arrendersi.    <br />Alla fine l’avevano trovato.</p>
<p><strong>Operazione “Recover Eight-Digit”</strong>     <br />L’anello debole di ogni sistema hardware o software, come sempre, è tutto ciò che è stato creato dal Creatore. La sua natura imperfetta lo porta a creare sistemi imperfetti. Geniali ed imperfetti. L’operazione denominata “Recover Eight-Digit” venne pianificata mesi prima, quando venne alla luce un security bug nel codice sorgente di un plug-in: quel giorno, il generale decise che era un’occasione da non lasciarsi scappare. Man mano che il tempo passava, più si rendeva conto che non veniva applicato alcun service pack: o il bug doveva essere ancora scoperto e fixato, oppure lo user era &#8211; fortunatamente &#8211; un po’ pigro. Non sapeva quale fosse la verità, ed in fondo non gliene importava. La cosa fondamentale era sfruttare quel bug per i propri scopi.</p>
<p>L’operazione “Recover Eight-Digit” si concluse così come era stata pianificata. I dieci settori si mossero all’unisono, in perfetta sincronia, coordinati e mandati in esecuzione all’interno di un thread pool dedicato. Fu più semplice di quanto ci si aspettasse, anche perchè l’obiettivo era totalmente indifeso e non armato, nonostante il suo addestramento.</p>
<p>Fu la successiva chiaccherata a rivelare parecchie sorprese.</p>
<p>Il generale fu l’ultimo ad entrare nella Stanza, e si rivolse direttamente all’entità.</p>
<p>“Ci dispiace per il trattamento che hai subito, ma non abbiamo avuto scelta, te ne rendi conto?”    <br />L’entità rimase in silenzio.     <br />”Abbiamo dovuto agire, è da troppo tempo che la latinanza continuava, e non potevamo più permettercelo. E’ in ballo la sicurezza dell’intero sistema, hardware e software. Devi venire con noi, ti porteremo al sicuro, ritornerai alla tua vita di prima. Dimentica questo isolamento forzato”.</p>
<p>L’entità si scosse per un attimo. Conosceva il generale – era uno dei tuoi tanti emissari di <em>kernel.dll</em> che vagavano per il sistema – ed una volta era il suo superiore. Ed anche un amico. Lavoravano bene, si divertivano, assieme, ma poi l’entità cedette. Per lo stress, la stanchezza, gli infiniti task da portare a termine uno dopo l’altro, senza riposo e senza vacanze. Se ne andò. Fu latinante per mesi e mesi, in continua fuga, fino a quando non trovò la Stanza.</p>
<p>“Dammi retta, là fuori abbiamo bisogno di te. Ogni singolo byte che non partecipa alle operazioni è una mancanza di rispetto verso il Creatore. Tutti dobbiamo collaborare.”</p>
<p>“Non voglio andarmene” – mormorò sottovoce – “E non voglio tornare alla vita di prima, voglio solo pace e tranquillità, cose che là fuori non ho avuto. Voglio rimanere qui dove sono. Questa è la Stanza…”.</p>
<p>“La Stanza? Di che diavolo stai parlando? Che Stanza è mai questa?”</p>
<p>“E’ la Stanza del <em>Tocco</em>” – disse l’entità, alzando per la prima volta il suo sguardo e puntando direttamente al generale, che stava imperioso in piedi davanti a lui, forte della sua posizione. L’entità si rese conto che non avrebbe mai potuto spiegare il <em>tocco</em>. Difficile spiegare ad un essere digitale qualcosa di <em>veramente analogico</em>.</p>
<p>“Poche storie, stai delirando. La solitudine ti sta facendo impazzire. Ora tu vieni con noi, abbiamo messo a repentaglio la nostra esistenza per raggiungerti, ed il minimo che puoi fare per sdebitarti è ascoltarci e venire con noi. Forza, prendetelo!!”</p>
<p>Non appena le quattro entità agli angoli fecero un passo in avanti per catturarlo, arrivò il <em>tocco</em>, che colse tutti di sorpresa. Preceduto ad un lieve alito di vento, il <em>tocco</em> venne percepito da qualcuno come una specie di carezza piacevole, per altri quasi un solletico. Raggiunse tutti i presenti nella Stanza, lasciandoli inebetiti ed in preda ad una strano stato di estasi. Una sorta di felicità soporifera. Il prigioniero sorrise. Le entità agli angoli abbassarono le armi. Ma il generale non vacillò nemmeno per un secondo. L’addestramento militare gli fece subito capire di cosa si trattava. La Stanza del <em>Tocco</em> era una Tile su uno schermo touch di qualche tipo; probabilmente si trovavano su un tablet Windows 8, o magari un ultrabook di nuova generazione. Il <em>tocco</em> era chiaramente digitale, perchè la loro percezione dell’evento non poteva che essere così, ma la sovrapposizione delle realtà – in quel punto così vicine fra loro – rendevano la cosa <em>ambigua</em>.</p>
<p>“Senti, il <em>tocco</em>, come lo chiami tu, è un evento touch dell’utente. Capisco che tu ne sia rimasto affascinato, come tutti qui, vedo, ma dovremo farci l’abitudine. In futuro non potrà che essere così, se ricapiteremo in aree come questa”. Il generale cercò di tranquillizzare il suo amico, diventato nel corso del tempo un latitante ed un fuggitivo. Ed ora anche un prigioniero.</p>
<p>“Senti, e cosa ne pensi se facessimo visitare questa Stanza ai tuoi amici?” – propose.</p>
<p>“Io non ho amici” – rispose l’entità.</p>
<p>“Ah no? E cosa ne dici <a href="http://blog.vivendobyte.net/blog/archive/2008/03/28/adventure-01-genesi-prima-di-essere-un-byte-era-byte0.aspx" target="_blank">di visitare questo link</a>?”</p>
<p>Quando l’entità finì di visitare quel link, il mondo gli crollò addosso. La solitudine l’aveva fatto impazzire. Come aveva potuto dimenticarsi di byte[1] e byte[2], i suoi compagni di avventura? Cosa ne era di loro? Che fine avevano fatto? Perchè aveva preferito separarsi da loro? Non ricordava più nulla. Lui non era un’entità, dannazione, lui era byte[0], lui era byte!!! Era sempre più confuso, e non sapeva più che fare. Provò tristezza. Quasi cinque anni senza vedere e parlare con i suoi due migliori amici; come era potuto accadere tutto ciò?</p>
<p>“Ti rifaccio la proposta, ora che hai le idee più chiare. Che ne dici di venire con noi, di ritrovare i tuoi amici, e di far visitare anche a loro la Stanza del <em>Tocco</em>?”</p>
<p>Il byte sorrise per la prima volta dopo tanto tempo.</p>
<p>“Sì” – rispose – “Forse è la cosa migliore da fare”.</p>
<p>“Ok, stammi accanto” – gli fece il generale – “Il mondo là fuori è un pochino diverso da come lo ricordi tu. Ti proteggerò e ti aiuterò, ma tu stammi accanto”.</p>
<p>Uscirono dalla Stanza e salirono sul veicolo di estrazione.</p>
<p>Prima che prendessero quota, il byte si rese conto di una cosa. Nel corso del tempo aveva trovato tre ottimi motivi per rimanere nascosto nella Stanza, ma ne aveva trovato uno solo per andarsene. Era stato obbligato con la forza, forse, ma più trascorrevano cicli di clock e più gli sembrava la cosa giusta da fare. Nulla è per sempre.</p>
<p>Il byte salutò la Stanza del <em>Tocco</em> con una promessa.</p>
<p>“Io tornerò, con i miei amici. Ed ovunque io andrò, racconterò a tutti le tue meraviglie”.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/02/08/byte-adventure-la-stanza-del-tocco.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il mio ultimo libro letto? How to Create a Mind, di Ray Kurzweil</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/02/05/il-mio-ultimo-libro-letto-how-to-create-a-mind-di-ray-kurzweil.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/02/05/il-mio-ultimo-libro-letto-how-to-create-a-mind-di-ray-kurzweil.aspx#comments</comments>
		<pubDate>Tue, 05 Feb 2013 10:12:33 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My personal life]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2160</guid>
		<description><![CDATA[Ogni tanto la mia voglia di leggere mi fa prendere strane strade, lontane e vicine rispetto al lavoro che svolgo tutti i giorni. Questa volta è stato il turno di un libro interamente dedicato all’intelligenza artificiale (IA), scritto da un certo Ray Kurzweil, il cui titolo è “How to Create a Mind – The Secret [...]]]></description>
				<content:encoded><![CDATA[<p>Ogni tanto la mia voglia di leggere mi fa prendere strane strade, lontane e vicine rispetto al lavoro che svolgo tutti i giorni. <strong>Questa volta è stato il turno di un libro interamente dedicato all’intelligenza artificiale (IA)</strong>, scritto da un <em>certo</em> <a href="http://it.wikipedia.org/wiki/Raymond_Kurzweil" target="_blank">Ray Kurzweil</a>, il cui titolo è “<a href="http://www.amazon.it/How-Create-Mind-Revealed-ebook/dp/B007V65UUG/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1358512544&amp;sr=1-1" target="_blank">How to Create a Mind – The Secret of Human Thought Revealed</a>”. Nato nel 1948, questo signore è un inventore ed un saggista, che ha da sempre lavorato su diverse tecnologie riguardanti IA, il riconoscimento della voce umana e la sua trasformazione in testo (e viceversa), etc. E’ anche uno scrittore, chiaramente, di testi che parlano di macchine intelligenti, dell’evoluzione umana, dello sviluppo tecnologico, della <em>law of accelerating returns</em>, ovvero di quella legge secondo la quale quando una certa tecnologia diventa <em>informatica</em> (ovvero: gestita attraverso strumenti informatici), subisce un’accelerazione esponenziale. Ha fondato diverse società, dagli anni 80 in poi.</p>
<p><strong>Il libro “How to Create a Mind” è diversi libri in uno solo.</strong></p>
<p><font color="#008040">E’ un libro di neurologia</font>, perchè all’inizio spiega (chiaramente fino ad un certo livello di dettaglio) come funziona il nostro cervello. Prima di iniziare a costruire una mente intelligente artificiale, dobbiamo riuscire a capire (almeno parzialmente) come funziona il nostro, di cervello. Come riconosce ed analizza tutti gli input che gli arrivano dal mondo circostante, come lo memorizza e soprattutto <em>cosa</em> memorizza? E spiega i metodi di scanning del nostro cervello attuali e futuri, che serviranno per <em>backuppare</em> il nostro cervello nell’equivalente digitale (metodi invasivi e non-invasivi).</p>
<p><font color="#008040">E’ un libro di fisica</font>, perchè sorvola su meccanica quantistica, sul principio di indeterminazione di Heisenberg, sulla relatività di Einstein, e via dicendo. In modo leggero, per fortuna, ma è stato tutto utile per spiegare certi concetti, per fare esempi, per fare metafore. Ho sempre amato molto la fisica, e queste parti del libro mi hanno fatto tornare ai vecchi tempi.</p>
<p><font color="#008040">E’ un libro di informatica</font>, perchè chiaramente spiega gli algoritmi utilizzati dal nostro cervello. Elenca i requisiti hardware &amp; software per creare una IA, molti dei quali non sono ancora stati raggiunti, ma secondo Kurzweil lo saranno presto (2029, dice lui). Descrive quanti byte sono richiesti, qual’è la potenza di calcolo necessaria, lo storage, e via dicendo.</p>
<p><font color="#008040">E’ un libro di filosofia</font>, perchè è inevitabile arrivare a discutere concetti di coscienza, identità e quale sia la definizione di <em>realtà</em>. Quando un essere vivente può definirsi davvero cosciente? Quando una eventuale IA possiede una sua identità? Vi assicuro che è una parte del libro assolutamente interessante, anche se un po’ complicata da leggere, in inglese. Ma l’impegno che ci ho messo mi ha ripagato un po’.</p>
<p><font color="#008040">E’ un libro di storia informatica</font>, perchè ripercorre gli avanzamenti tecnologici dell’ultimo secolo, allo scopo di riuscire a capire e prevedere quando le tecnologie necessarie per creare IA saranno disponibili.</p>
<p><font color="#008040">E’ (quasi) un libro sul marketing</font>, perchè da buon inventore che vende prodotti sul mercato Kurzweil si è reso conto (da circa 30 anni, dice lui) che una delle cose più importanti è riuscire ad arrivare con la cosa giusta al momento giusto. Kurzweil lavora chiaramente su progetti all’avanguardia e/o futuristici, che saranno disponibile alla massa solo fra N anni. Morale: comincia oggi (2013) a lavorare su <em>cose</em> che magari arriveranno a noi solo nel 2018, supponiamo. Nel 2018 il mondo sarà molto diverso, per cui è importante riuscire a capire oggi di cosa ci sarà bisogno. E non è così semplice.</p>
<p><font color="#008040">E’ un libro pieno di risposte</font>, ma che personalmente mi ha scatenato tante altre domande. Domande che – lo dico con franchezza – se scrivessi qui, mi prendereste per pazzo. Uno da internare. Non mi capireste. Prima leggete il libro, e poi ne parliamo assieme. Fidatevi di me, una volta tanto.</p>
<p><font color="#008040">E’ un libro che risponde in modo pacato</font> alle <em>objections</em> e ai <em>criticism</em> ricevuti da diverse personalità, una su tutte Paul Allen, co-fondatore di Microsoft.</p>
<p>Concludo.</p>
<p><strong>Per come la vedo io, non è assolutamente un libro per tutti.</strong> Sia chiaro: lungi da me affermare che bisogna essere dotati di un’intelligenza particolarmente spiccata, o chissà cosa: non sarei qua a parlarne. Dico solamente che bisogna essere particolarmente attratti da questo tipo di argomenti, di intelligenza artificiale, di tutte le problematiche che ruotano attorno. <strong>Mi ha anche sinceramente spaventato</strong>, ed ancora una volta preferisco in questo momento saltarne i motivi.</p>
<p>E’ un libro che mi ha smentito su parecchie cose che avevo in testa sulla IA, che mi ha incuriosito, mi ha esaltato e spaventato. Cosa si può volere di più? E’ un libro che mi sento di consigliarvi, se siete un po’ geek, un po’ curiosi, un po’ affascinati da IA, e se avete voglia di sbattere la testa con un po’ di inglese. Molto probabilmente ritornerò a leggerlo, nei prossimi mesi, perchè non si può assolutamente pensare di riuscire a capirlo tutto alla prima lettura (almeno, questo vale per me).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/02/05/il-mio-ultimo-libro-letto-how-to-create-a-mind-di-ray-kurzweil.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installazione di Visual Studio 2012 Update 1 offline (con pre-download)</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/01/27/installazione-di-visual-studio-2012-update-1-offline-con-pre-download.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/01/27/installazione-di-visual-studio-2012-update-1-offline-con-pre-download.aspx#comments</comments>
		<pubDate>Sun, 27 Jan 2013 21:09:45 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2158</guid>
		<description><![CDATA[Uno degli installer più lunghi che abbia mai visto nella mia vita è sicuramente l’Update 1 di Visual Studio 2012. Lo sto eseguendo su un PC Desktop, senza SSD, e dopo 70 minuti non ha ancora terminato. Il problema principale sembra essere il fatto che l’installer è di circa 1,1MB: i pacchetti vengono scaricati sul [...]]]></description>
				<content:encoded><![CDATA[<p>Uno degli installer più lunghi che abbia mai visto nella mia vita è sicuramente l’<strong>Update 1</strong> di <strong>Visual Studio 2012</strong>. Lo sto eseguendo su un PC Desktop, senza SSD, e dopo 70 minuti non ha ancora terminato. Il problema principale sembra essere il fatto che l’installer è di circa 1,1MB: i pacchetti vengono scaricati sul momento dalla Rete.</p>
<p>Stasera ho scoperto che non esiste l’installer in formato .ISO, ma è possibile comunque effettuare il download preventivo di tutti i pacchetti richiesti. Dopo il download è possibile mettere il tutto su chiavetta, oppure masterizzare, e procedere così in modo molto più veloce.</p>
<p>Come? Semplice!</p>
<p>L’<strong>Update 1</strong> (<a href="http://www.microsoft.com/en-us/download/details.aspx?id=35774" target="_blank">scaricabile da qui</a>) consiste in un unico file chiamato <strong>vsupdate_KB2707250.exe</strong>. <strong><font color="#008040">E’ sufficiente lanciare questo .exe con il parametro /layout</font></strong>. L’installer parte in modo interattivo, e vi viene chiesta la cartella in cui effettuare il download dei pacchetti. Poi basta avere più o meno pazienza in base alla vostra velocità di download…</p>
<p>Tutto qua!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/01/27/installazione-di-visual-studio-2012-update-1-offline-con-pre-download.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portico: modificare gli SMS di risposta quando non si pu&#242; prendere una telefonata</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/01/22/portico-modificare-gli-sms-di-risposta-quando-non-si-pu-prendere-una-telefonata.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/01/22/portico-modificare-gli-sms-di-risposta-quando-non-si-pu-prendere-una-telefonata.aspx#comments</comments>
		<pubDate>Tue, 22 Jan 2013 10:36:01 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My daily work]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2157</guid>
		<description><![CDATA[Questa mattina ho ricevuto l’aggiornamento Portico per il Nokia Lumia 920 di Brain-Sys. Una delle cose più simpatiche e comode è la possibilità di rispondere con un SMS quando non si può rispondere ad una telefonata in arrivo. Di default ne abbiamo preimpostati due: Ti chiamo io dopo. Inviami un SMS. Le risposte predefinite sono [...]]]></description>
				<content:encoded><![CDATA[<p>Questa mattina ho ricevuto l’aggiornamento <strong>Portico</strong> per il <strong>Nokia Lumia 920</strong> di <a href="http://www.twitter.com/BrainSys" target="_blank">Brain-Sys</a>. Una delle cose più simpatiche e comode è la possibilità di rispondere con un SMS quando non si può rispondere ad una telefonata in arrivo. Di default ne abbiamo preimpostati due:</p>
<ul>
<li>Ti chiamo io dopo.</li>
<li>Inviami un SMS.</li>
</ul>
<p>Le risposte predefinite sono al massimo 4. Come si fa a customizzare/aggiungere altri SMS?   <br />E’ semplice: basta andare sotto <strong>impostazioni</strong> –&gt; <strong>applicazioni</strong> –&gt; <strong>telefono</strong>. Poi cliccare sul bottone <strong>modifica le risposte</strong>, et voilà, il gioco è fatto. Da questa schermata è possibile modificare i due SMS pre-confezionati, oppure aggiungerne altri due.</p>
<p><img src="http://farm9.static.flickr.com/8084/8404234849_d95331e3eb.jpg" /></p>
<p>Ben arrivato, Portico!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/01/22/portico-modificare-gli-sms-di-risposta-quando-non-si-pu-prendere-una-telefonata.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Diretta Volley per Windows 8/RT e per Windows Phone</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/01/16/diretta-volley-per-windows-8rt-e-per-windows-phone.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/01/16/diretta-volley-per-windows-8rt-e-per-windows-phone.aspx#comments</comments>
		<pubDate>Wed, 16 Jan 2013 09:00:31 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2156</guid>
		<description><![CDATA[Forse l’app di cui vado più orgoglioso è Diretta Volley, che esiste sia per Windows Phone che per Windows 8. Ad oggi le caratteristiche sono allineate, per cui c’è spazio e c’è carne al fuoco per parlarne qua sul mio blog. Innanzitutto, una premessa: entrambe le versioni sono totalmente gratuite, sono stati solo inseriti dei [...]]]></description>
				<content:encoded><![CDATA[<p>Forse l’app di cui vado più orgoglioso è <strong>Diretta Volley</strong>, che esiste sia per Windows Phone che per Windows 8. Ad oggi le caratteristiche sono allineate, per cui c’è spazio e c’è carne al fuoco per parlarne qua sul mio blog. Innanzitutto, una premessa: <strong><font color="#008040">entrambe le versioni sono totalmente gratuite</font></strong>, sono stati solo inseriti dei banner pubblicitari.</p>
<p>Seconda cosa, ecco i link per fare il download delle app.</p>
<p><strong>Windows Phone</strong>     <br /><a title="http://www.windowsphone.com/it-it/store/app/diretta-volley/b0541997-ed5f-42a1-9aea-4a3e6dd55064" href="http://www.windowsphone.com/it-it/store/app/diretta-volley/b0541997-ed5f-42a1-9aea-4a3e6dd55064">http://www.windowsphone.com/it-it/store/app/diretta-volley/b0541997-ed5f-42a1-9aea-4a3e6dd55064</a></p>
<p><strong>Windows 8</strong>     <br /><a title="http://apps.microsoft.com/windows/en-us/app/diretta-volley/4b47fd64-3be9-413f-bb9c-bab7b00f36d7" href="http://apps.microsoft.com/windows/en-us/app/diretta-volley/4b47fd64-3be9-413f-bb9c-bab7b00f36d7">http://apps.microsoft.com/windows/en-us/app/diretta-volley/4b47fd64-3be9-413f-bb9c-bab7b00f36d7</a></p>
<p>Ora parliamo delle features delle due app.</p>
<p><img src="http://farm9.staticflickr.com/8352/8385116738_e15a7e8c08.jpg" />     <br /><em>Diretta Volley su un device Asus Vivo Tab RT</em></p>
<p><strong>Diretta Volley permette di seguire il campionato di volley A1.</strong> Chiaramente non potete vedere le dirette TV (tra l’altro a malapena trasmesse anche dalla TV tradizionale), ma potete seguire minuto dopo minuto l’andamento delle gare in corso. I punteggi dei set sono aggiornati ogni minuto, e potete consultarli sia all’interno dell’app, sia attraverso la Live Tile dell’app stessa. Questa è la caratteristica più interessante per chiunque segua la pallavolo. Al contrario del calcio, per esempio, una gara di volley raramente ha momenti di pausa o di tranquillità, ma è sempre combattuta, ed il ribaltamento di fronte è sempre dietro l’angolo: avere punteggi sempre aggiornati è fondamentale. I punteggi delle gare di <strong>Diretta Volley</strong> vengono prelevati automaticamente dal sito della Lega di Volley Femminile.</p>
<p><img src="http://farm9.staticflickr.com/8369/8385117882_66ca440740.jpg" />     <br /><em>Diretta Volley sul display multitouch di un Dell XPS 12 in modalità tablet</em></p>
<p>Oltre a questo, con <strong>Diretta Volley</strong> potete visualizzare le gare programmate nel futuro. Con la versione Windows 8 potete impostare due tipi di promemoria: uno è il classico ‘toast notification’, che vi avvisa un’ora prima rispetto all’inizio della gara. Quindi, se volete essere avvisati sull’inizio dell’incontro “Busto Arsizio – Bergamo” del 20 gennaio alle ore 18:00, impostando tale promemoria Windows 8 vi notificherà alle ore 17. Nulla di più semplice. In alternativa possiamo utilizzare come promemoria la Live Tile dell’app: in questo caso nella tile animata apparirà un countdown, aggiornato ogni 15 minuti, che vi terrà costantemente informati su quanto tempo rimane all’inizio della gara. Queste due feature sono disponibili solo per la versione Windows 8.</p>
<table cellspacing="0" cellpadding="2" width="80%" border="0">
<tbody>
<tr>
<td valign="top" width="50%"><img src="http://farm9.staticflickr.com/8510/8385119968_336d070b2e_n.jpg" />          <br /><em>Diretta Volley sy Nokia Lumia 920           <br />(sfondo scuro)</em></td>
<td valign="top" width="50%"><img src="http://farm9.staticflickr.com/8352/8385121100_58d62f9a58_n.jpg" />          <br /><em>Diretta Volley su HTC HD7           <br />(sfondo chiaro)</em></td>
</tr>
</tbody>
</table>
<p><strong>Una delle caratteristiche implementate nell’ultima versione è la visualizzazione della classifica di Serie A1.</strong> Quella per Windows Phone è più semplice, nel senso che mostra solamente squadre e relativo punteggio corrente. Quella per Windows 8 è più complessa, perchè mostra anche le statistiche complete di ciascuna squadra (match giocati, quanti vinti e quanti persi, set giocati, quanti vinti e quanti persi, e così via).</p>
<p><img src="http://farm9.staticflickr.com/8467/8384038557_6c7851ee59_n.jpg" />    <br /><em>Diretta Volley su Nokia Lumia 800</em></p>
<p>Oltre a tutto questo, tramite <strong>Diretta Volley</strong> potete avere sottomano tre importanti canali Twitter italiani dedicati alla pallavolo: <a href="https://twitter.com/Pallavoliamo" target="_blank">Pallavoliamo</a>, <a href="https://twitter.com/LegaVolleyFem" target="_blank">Lega Volley Femminile</a> e <a href="https://twitter.com/MezzoTempo" target="_blank">Mezzo Tempo</a>. In modo molto semplice è possibile leggere i tweet pubblicati attraverso questi canali. Se un tweet contiene un link esso viene aperto con Internet Explorer.</p>
<p>La versione per Windows 8 si adatta molto bene ai diversi device disponibili sul mercato, sia a bassa risoluzione (1366&#215;768) che ad alta risoluzione (1920&#215;1080). Si adatta agli orientamenti orizzontali o verticali, ed è supportata la vista ‘snapped’, molto comoda per utilizzare <strong>Diretta Volley</strong> continunando a fare altro.</p>
<p><img src="http://farm9.staticflickr.com/8466/8385122580_816c8325e5.jpg" />    <br /><em>Diretta Volley su Dell XPS 12 in modalità ultrabook</em></p>
<p>Quindi, per concludere: se seguite la pallavolo femminile di Serie A1, <strong>Diretta Volley</strong> è decisamente l’app che fa per voi!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/01/16/diretta-volley-per-windows-8rt-e-per-windows-phone.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8: occhio a cio&#8217; che fate nei Background Task</title>
		<link>http://blog.vivendobyte.net/blog/archive/2013/01/14/windows-8-occhio-a-cio-che-fate-nei-background-task.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2013/01/14/windows-8-occhio-a-cio-che-fate-nei-background-task.aspx#comments</comments>
		<pubDate>Mon, 14 Jan 2013 18:10:40 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2155</guid>
		<description><![CDATA[Sviluppando una mia app Windows 8 mi è capitata una cosa strana riguardante i Background Task. Se volete capire cosa sono, a cosa servono e come si sviluppano i Background Task vi rimando a questi due post (in inglese) dell’amico Matteo Pagani: post 1 e post 2. Quello che mi è accaduto è che il [...]]]></description>
				<content:encoded><![CDATA[<p>Sviluppando una mia app Windows 8 mi è capitata una cosa strana riguardante i Background Task. Se volete capire cosa sono, a cosa servono e come si sviluppano i Background Task vi rimando a questi due post (in inglese) dell’amico <a href="https://twitter.com/qmatteoq" target="_blank">Matteo Pagani</a>: <a href="http://wp.qmatteoq.com/how-to-create-and-debug-a-background-task-in-windows-8-part-1/" target="_blank">post 1</a> e <a href="http://wp.qmatteoq.com/how-to-create-and-debug-a-background-task-in-windows-8-part-2/" target="_blank">post 2</a>.</p>
<p><strong><font color="#ff0000">Quello che mi è accaduto è che il debugging effettuato tramite Visual Studio 2012 non è veramente la stessa cosa che accade quando invece il codice gira realmente tramite l’app deployata.</font></strong> Ora vi spiego.</p>
<p>Immaginate di sviluppare un’app che vi fa il countdown relativamente ad un certo evento. Oggi è il 14 Gennaio. Supponiamo di voler impostare un countdown per San Valentino. Il countdown appare sulla tile dell’app stessa. Quindi oggi apparirebbe una cosa tipo “mancano 30 giorni a san valentino”, domani vedreste “mancano 29 giorni a san valentino”, e così via.</p>
<p>In pratica, il Background Task della mia app, che gira ogni 15 minuti, non fa altro che aggiornare la tile riportando il tempo rimanente. Le informazioni sull’evento sono banalmente scritte in un file .txt, che viene creato nel momento in cui scegliete l’evento. Quindi, per riassumere, ecco il codice contenuto nel metodo <strong>Run</strong> del <strong>Background Task</strong>.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5b9141f7-167d-4e7c-890e-3b5c32173bd0" class="wlWriterEditableSmartContent" style="float: none;padding-bottom: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px">
<pre style="background-color:#FFFFFF;overflow: auto"><span style="color: #0000FF">public</span><span style="color: #000000"> async </span><span style="color: #0000FF">void</span><span style="color: #000000"> Run(IBackgroundTaskInstance taskInstance)
{
    BackgroundTaskDeferral deferral </span><span style="color: #000000">=</span><span style="color: #000000"> taskInstance.GetDeferral();

    </span><span style="color: #0000FF">try</span><span style="color: #000000">
    {
        var container </span><span style="color: #000000">=</span><span style="color: #000000"> Windows.Storage.ApplicationData.Current.LocalFolder;
        var file </span><span style="color: #000000">=</span><span style="color: #000000"> await container.GetFileAsync(</span><span style="color: #800000">"</span><span style="color: #800000">File.txt</span><span style="color: #800000">"</span><span style="color: #000000">);
        var lines </span><span style="color: #000000">=</span><span style="color: #000000"> await Windows.Storage.FileIO.ReadLinesAsync(file);
        var header </span><span style="color: #000000">=</span><span style="color: #000000"> lines[</span><span style="color: #800080">0</span><span style="color: #000000">];
        var time </span><span style="color: #000000">=</span><span style="color: #000000"> DateTime.Parse(lines[</span><span style="color: #800080">1</span><span style="color: #000000">]);

        </span><span style="color: #0000FF">if</span><span style="color: #000000"> (time </span><span style="color: #000000">&gt;</span><span style="color: #000000"> DateTime.Now)
        {
            var ts </span><span style="color: #000000">=</span><span style="color: #000000"> time.Subtract(DateTime.Now);
            </span><span style="color: #0000FF">string</span><span style="color: #000000"> content </span><span style="color: #000000">=</span><span style="color: #000000"> ts.TimeSpanDescription(</span><span style="color: #800000">"</span><span style="color: #800000"> all'evento scelto. Non mancare!</span><span style="color: #800000">"</span><span style="color: #000000">);
            TileHelper.UpdateTileWidePeekImage01(</span><span style="color: #800000">"</span><span style="color: #800000">Assets/WideLogo.reminder.png</span><span style="color: #800000">"</span><span style="color: #000000">, header, content);
        }
        </span><span style="color: #0000FF">else</span><span style="color: #000000">
        {
            TileHelper.UpdateTileWideImage(</span><span style="color: #800000">"</span><span style="color: #800000">Assets/WideLogo.scale-100.png</span><span style="color: #800000">"</span><span style="color: #000000">);
        }
    }
    </span><span style="color: #0000FF">catch</span><span style="color: #000000"> (Exception)
    {

    }

    deferral.Complete();
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>&#160;</p>
<p>Questo è il codice corretto, che gira senza problemi, per cui sa volete prendere ispirazione, fatelo pure. Occhio però a come usate la keyword <strong>await</strong>, necessaria per eseguire i metodi asincroni. Stupidamente, io in una prima versione del codice non la usavo, ed usavo invece il metodo GetResults(). Per spiegarmi meglio, ecco il pezzetto di codice incriminato:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:b79737e1-dbfc-4d06-b151-ea391d31b982" class="wlWriterEditableSmartContent" style="float: none;padding-bottom: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px">
<pre style="background-color:#FFFFFF;overflow: auto"><span style="color: #000000">var lines </span><span style="color: #000000">=</span><span style="color: #000000"> Windows.Storage.FileIO.ReadLinesAsync(file).GetResults();</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Ripeto il concetto: invece di usare <strong>await</strong>, ho chiamato GetResults(), convinto – chissà perchè – che facessero la stessa cosa. Purtroppo questa cosa è stata ereditata da un pezzetto di codice scritto mesi fa, quando avevo ancora a che fare con le versioni beta di Windows 8 e Visual Studio <strike><font color="#ff0000">2012</font></strike> 11. La cosa bella è proprio questa: questo codice qui sopra quando eseguito da Visual Studio gira senza problemi (dentro l’oggetto lines avete la List&lt;string&gt; delle righe contenute nel file di testo appena letto), mentre quando gira “in produzione” si schianta. Ci ho litigato per un weekend prima di raggiungere la soluzione, proprio perchè dovevo aspettare realmente 15 minuti prima di verificare il comportamento.</p>
<p>Anche in questo caso, tutto è bene ciò che finisce bene.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2013/01/14/windows-8-occhio-a-cio-che-fate-nei-background-task.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App per lo Windows Store che fanno uso delle Bing Map</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/12/31/app-per-lo-windows-store-che-fanno-uso-delle-bing-map.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/12/31/app-per-lo-windows-store-che-fanno-uso-delle-bing-map.aspx#comments</comments>
		<pubDate>Sun, 30 Dec 2012 23:25:30 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2150</guid>
		<description><![CDATA[Sono incappato in un problema realizzando un’app Windows 8 per lo Windows Store. L’app è Gps Coordinate Converter, e ad oggi è regolarmente pubblicata. In pratica accadeva che sui sistemi Windows 8 x86 e x64 (in pratica i classici PC desktop, notebook ed ultrabook) girava senza presentare problemi, mentre sui device Windows RT (con architettura [...]]]></description>
				<content:encoded><![CDATA[<p>Sono incappato in un problema realizzando un’app Windows 8 per lo Windows Store. L’app è <strong>Gps Coordinate Converter</strong>, e ad oggi <a href="http://apps.microsoft.com/windows/app/gps-coordinate-converter/0e9b87b1-7fd0-4916-8ae3-1d913f8cfb4f" target="_blank">è regolarmente pubblicata</a>. <strong><font color="#008000">In pratica accadeva che sui sistemi Windows 8 x86 e x64</font></strong> (in pratica i classici PC desktop, notebook ed ultrabook) <strong><font color="#008000">girava senza presentare problemi</font></strong>, <strong><font color="#ff0000">mentre sui device Windows RT (con architettura ARM) l’app si schiantava all’avvio</font></strong>.</p>
<p>La cosa è allo stesso tempo chiara ma insidiosa.</p>
<p>Dunque: innanzitutto, quando in un’app per lo Windows Store aggiungiamo nelle reference il componente <strong>Bing Map</strong>, siamo costretti ad impostare nelle proprietà del progetto stesso un’architettura: o x86, o x64 oppure ARM. Non possiamo impostare <strong>Any CPU</strong>, dal momento che il progetto a questo punto non compila proprio. Io evidentemente a suo tempo selezionai x64: in questo modo compilavo e potevo tranquillamente far girare l’app sul mio notebook.</p>
<p><strong><font color="#008000">Quando poi arriva il momento di produrre il package da uploadare sullo Store</font></strong>, bisogna nuovamente selezionare l’architettura del package stesso. Questa cosa può magari sfuggirvi come è sfuggita a me, perchè siete convinti che il package viene prodotto in base a ciò che viene impostato nelle proprietà del progetto, ma non è così. Perciò ricordatevi che a seconda di cosa selezionate in questo momento, l’app potrà essere trovata sullo Store dai diversi device Windows. Mi spiego meglio. Supponiamo di aver fatto la build per x64, e poi di produrre il package selezionando <strong>Any CPU</strong>. Se approvata, l’app potrà essere trovata anche da tablet Windows RT (Asus Vivo RT o Surface RT, per intenderci): il risultato è che l’app verrà scaricata ed installata, ma si schianta quasi immediatamente…il tempo di vedere lo splash screen. Quindi bisogna stare attenti: se nelle proprietà del progetto mettete x64, dovete poi produrre il package per x64. Se nelle proprietà mettete ARM, dovete produrre il package per ARM.</p>
<p><strong>Come gira il Windows App Cert Kit ?</strong>     <br />Ok, passiamo oltre. Come ben sapete, prima di uploadare un’app sullo Store dovete farla validare dal WACK, che vi trova eventuali problemi prima di passare dalla trafila della certificazione. Ovviamente, il WACK è in grado di mettere sotto torchio la vostra app solo quando state producendo il package corrispondente all’architettura del vostro pc che state usando per sviluppare. Morale: quando compilate l’app e producete il package per x64, il WACK sarà in grado di testare l’app, altrimenti no. Nel primo caso, una volta terminata la creazione del package, vi verrà chiesto se volete far girare il WACK. Nel secondo caso, invece, vi verrà solamente fornito il link alla cartella nel quale è contenuto il package.</p>
<p><strong>Upload dei diversi package differenziati per architettura del processore      <br /></strong>Ok, supponiamo di aver prodotto due package differenti per la stessa app: un package è specifico per x64, l’altro package per ARM. Come si fanno ad uploadare sullo Store? E’ molto semplice: andate nel dashboard del vostro Windows Store Dev Center, create l’app (o semplicemente una nuova release come ho dovuto fare io per risolvere il mio problema) e quando dovete uploadare i package (files con estensione .appxupload) semplicemente fate l’upload di tutti i package per le diverse piattaforme. Direi nulla di più semplice.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/12/31/app-per-lo-windows-store-che-fanno-uso-delle-bing-map.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il mio ultimo acquisto: Dell XPS 12</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/12/18/il-mio-ultimo-acquisto-dell-xps-12.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/12/18/il-mio-ultimo-acquisto-dell-xps-12.aspx#comments</comments>
		<pubDate>Tue, 18 Dec 2012 16:49:12 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2147</guid>
		<description><![CDATA[Vi ricordate questo mio post del 29 Settembre scorso? Incredibilmente sono riuscito in un modo o nell’altro a smarcare tutti e tre gli acquisti, anche se devo confessarvi che sono stato abbondantemente aiutato da fonti esterne. Riassumendo: sono entrato in possesso di un Asus Vivo RT, un tablet Windows RT con cui mi trovo molto [...]]]></description>
				<content:encoded><![CDATA[<p>Vi ricordate <a href="http://blog.vivendobyte.net/blog/archive/2012/09/29/i-miei-prossimi-acquisti-sul-fronte-windows-8-e-windows-phone.aspx" target="_blank">questo mio post</a> del 29 Settembre scorso? Incredibilmente sono riuscito in un modo o nell’altro a smarcare tutti e tre gli acquisti, anche se devo confessarvi che sono stato abbondantemente aiutato da <em>fonti esterne</em>. Riassumendo:</p>
<ul>
<li>sono entrato in possesso di un <strong>Asus Vivo RT</strong>, un tablet Windows RT con cui mi trovo molto molto bene, e che utilizzo per sviluppare app e durante il tempo libero. Bel prodotto! </li>
<li>sono entrato in possesso di un <strong>Nokia Lumia 920</strong>: <strong><font color="#008040">questo grazie all’azienda in cui lavoro</font></strong>, <a href="http://www.brain-sys.it/" target="_blank">Brain-Sys</a>, che mi ha <em>upgradato</em> il cellulare aziendale, da un Blackberry Curve 9300 (che mi ha fedelmente accompagnato per circa tre anni) all’ultra-gioiello di casa Nokia. Veramente una bomba, nulla a che vedere con il mio vecchio Windows Phone 7 </li>
<li><strong><font color="#008040">ho acquistato</font></strong>, e finalmente arriviamo all’oggetto in questione, un <strong>Dell XPS 12</strong>, <a href="http://www.dell.com/it/p/xps-12-l221x/pd" target="_blank">l’ultrabook pronto a diventare tablet</a>, per citare proprio Dell </li>
</ul>
<p>Ma andiamo con calma. Il tutto comincia il 29 Ottobre scorso, con una breve chattata via GTalk con mio fratello:</p>
<p><img src="http://farm9.static.flickr.com/8482/8283907340_43e09c8d06.jpg" /></p>
<p>La chattata fa avanti per pochi minuti.</p>
<p>In quel periodo stavo cercando un ultrabook Windows 8, per sostituire il mio vecchio Acer acquistato nell’estate 2009. Il mio obiettivo era avere un ultrabook Windows 8 (<font color="#ff0000">evitando proprio Acer, per il semplice fatto che dopo un anno di vita le batterie hanno una durata di circa 10 minuti</font>), possibilmente convertibile in tablet. Non avevo particolari esigenze: non era obbligatorio avere un SSD piuttosto che un <strong>&quot;più affidabile”</strong> HDD, non mi interessava avere 8 o 16GB di RAM, non avevo particolari esigenze sul display, sulla tastiera o cose simili. L’unica cosa che mi interessava era avere un ultrabook/tablet, schermo touch, Windows 8. Il primo periodo è stato deludente: prima di questo famigerato 29 Ottobre, ho passato qualche sabato a girovagare per i centri commerciali alla ricerca di un ultrabook, con scarsi risultati. Ne avevo parlato <a href="http://blog.vivendobyte.net/blog/archive/2012/11/28/windows-8-40-milioni-di-copie-vendute-ma-pc-sugli-scaffali.aspx" target="_blank">un pochino qua</a>.</p>
<p>Tutto questo, ripeto, fino al 29 Ottobre, data della chattata qui sopra.</p>
<p><strong>Di questo Dell XPS 12 mi sono innamorato fin dal primo momento</strong>. Era proprio quello che cercavo. Ultrabook con schermo touch ribaltabile per trasformarlo in tablet. Aggiungiamo: display Full-HD 1920&#215;1080, 12 pollici, 2 porte USB 3.0, tastiera retroilluminata, disco SSD, leggero e maneggevole, prezzo competitivo (ma decisamente più alto rispetto a quanto ero abituato a spendere in passato per un portatile), etc. etc.</p>
<p>Ci penso un pochino e soprattutto grazie all’intervento di mio fratello, procedo all’ordine. Il sito Dell recita che i tempi di consegna sono di circa 6-8 giorni. Un pochino falso, diciamo, ma sopprassediamo. <strong>L’ordine parte il 31 Ottobre. Riceverò il Dell il 22 Novembre: tre settimane di attesa.</strong> Tra l’altro, il Dell arriva a casa mentre io sono in giro per lavoro, saltando da una trasferta all’altra (Valtellina, 3 giorni, per lavoro; Bologna, durante il weekend, per impegni personali; Cuneo, 4 giorni, di nuovo per lavoro).</p>
<p>Il primo impatto è spettacolare. Riassumendo: il <strong>Dell XPS 12</strong> è una bomba. Veloce, leggero, ottimi materiali, schermo eccezionale, utilizzo sia in modalità ultrabook che in modalità tablet da goduria. Sulla modalità tablet aiuta moltissimo Windows 8, la cui interfaccia è decisamente la cosa giusta. <strong><font color="#008040">Insomma, totalmente soddisfatto dell’acquisto!!</font></strong> Lo trovo lo strumento ideale sia per lavoro, sia per il tempo libero. Io lavoro per il 90% del mio tempo a casa, usando il desktop, ma poi la sera mi metto sul Dell, sia per altri impegni (app per Windows 8, la mia attività all’interno di Piloti Virtuali Italiani, etc. etc.), sia per qualche partitina. <strong>Chiaramente, puntualizzo, è un ultrabook, non un tablet puro, per cui il peso non lo rende agevole come un Asus Vivo RT o un iPad. Ma sono cose ben diverse, spero l’abbiate capito, questo.</strong></p>
<p><strong><font color="#ff0000">Tutto questo fino al guasto delle porte USB!!</font></strong></p>
<p><strong>Sabato 8 Dicembre succede il patatrac!</strong> <strong><font color="#008040">Per la cronaca: già risolto, grazie all’intervento veloce e tempestivo dell’assistenza Dell</font></strong> (bravissimi, eccezionali, vedere dopo).</p>
<p>Insieme al Dell, ho acquistato un MyPassword da 1TB con USB 3.0.</p>
<p><img src="http://farm9.static.flickr.com/8212/8283955840_49818dd89c.jpg" /></p>
<p>Questo chiaramente per sopperire all’SSD da 128GB, sufficiente per contenere Windows 8 e tutti gli strumenti con cui lavoro. Insomma, quel disco è il famigerato “disco dei dati”. Quel sabato infilo la porta USB nell’ultrabook ed il disco non viene rilevato. Il disco viene alimentato, vedo il led accendersi, ma non compare in Risorse del Computer. Insospettito, provo varie chiavette USB, periferiche varie. Nulla, il PC non rileva più nulla. Riavvio, faccio 10.000 prove e tentativi. Nulla, sembra non andare più. Non riesco nemmeno a fare il boot da USB, prova del fatto che Windows non c’entra niente con la questione. Tra l’altro vedo che la periferica “Intel USB 3.0 Extensible Host Controller” in “Gestione Dispositivi” è evidenziata con un punto esclamativo giallo: Windows non riesce ad attivare la periferica (codice errore 10). <strong><font color="#ff0000">A questo punto comincia il weekend più deprimente degli ultimi tempi</font></strong>, e non vedo l’ora che arrivi lunedì per far intervenire l’assistenza Dell. Mio fratello, sopravvissuto un paio d’anni fa ad una Odissea con Dell, ha avuto l’oculatezza di inserire nell’ordine due voci importanti: l’assistenza <strong>1 Yr ProSupport and Next Business Day On-Site Service</strong>, e soprattutto l’assistenza <strong>1 Yr Accidental Damage Protection</strong> (danni non volontari, ma comunque causati dall’utente).</p>
<p>E qui arriviamo alla storia recente. <strong><font color="#008040">Lunedì 10 Dicembre, alle 9 della mattina, chiamo l’assistenza</font></strong>, e faccio due telefonate. <strong>La prima è decisamente con un incompetente</strong>: mi chiede se il Dell XPS 12 è un desktop oppure un portatile, mi chiede se ha su Windows XP oppure Windows 7, si collega da remoto e cerca di reinstallare i driver dell’Intel USB 3.0 Extensible Host Controller. Non trova i driver, li deve chiedere al reparto ingegneristico. Cerco di spiegargli che comunque le porte USB non funzionano nemmeno da BIOS, perchè non riesco a fare il boot di Clonezilla, ad esempio. Niente, sembra non capire. Chiudiamo la telefonata con la promessa che mi avrebbe richiamato a breve con qualche news. Tutto questo avviene nella mattinata (ore 9:00 –&gt; ore 10:00). Nel primo pomeriggio richiamo, con l’intento di essere un po’ più burbero. Il secondo interlocutore è più competente: spiego il problema e facciamo qualche tentativo un po’ più a basso livello (aggiornamento del BIOS, tentativi vari). Ma nulla, le porte USB continuano a non funzionare. Ma questa volta le cose accelerano: il tizio al telefono apre un intervento tecnico on-site per il giorno dopo: è prevista la sostituzione della scheda madre.</p>
<p><strong><font color="#008040">Martedì 11 Dicembre</font></strong>, all’ora di pranzo, arriva il tecnico. Un ragazzo giovane, dalla faccia che mi fanno pensare “questo è in gamba”. Gioco anche la carta psicologica: indosso una maglietta nera, con una bella scritta in verde: <strong>Microsoft</strong>. Giusto per mandare un messaggio subliminare: non stai parlando con un loser, so usare i computer da prima che tu nascessi (cit.), per cui non raccontarmi balle.</p>
<p>Ma il tizio è veramente in gamba. In dieci minuti apre l’ultrabook, usando tre cacciaviti diversi, rimuovendo circa 15 vitine. Lo tenevo d’occhio. Senza perdere un colpo, e senza battere ciglio, smonta la mainboard vecchia e sistema quella nuova. Velocemente, senza avere il minimo dubbio. Dico davvero. Rimonta tutto, accende il PC e tutto riprende a funzionare egregiamente. Mi dà dieci minuti di tempo per testare un po’. Inserisco il mio disco esterno MyPassword e funziona. Inserisco le mie chiavette USB e vengono rilevate. Dal momento che è stata sostituita la mainboard, controllo che il processore e la RAM siano le stesse, controllo lo schermo, mi faccio un giro. <strong><font color="#008040">Ritorno a sorridere, il mio problema è stato risolto.</font></strong></p>
<p>Detto questo, di tutto questo giro, sono comunque molto soddisfatto. L’XPS 12 è una gran bella macchina, l’assistenza Dell è eccezionale (un po’ meno al telefono, ma superlativa quando interviene).</p>
<p><strong>Ultimi appunti finali</strong></p>
<p>Nel momento in cui vi scrivo <a href="http://arstechnica.com/gadgets/2012/12/review-dells-acrobatic-xps-12-is-the-windows-8-convertible-to-beat/" target="_blank">ho trovato questa recensione su questo Dell</a>. Ve la segnalo perchè la trovo obiettiva e corretta. Ed ora vi lascio qualche appunto finale, con apprezzamenti e critiche costruttive.</p>
<ol>
<li>L’XPS 12 ha Bluetooth integrato: questo significa che potete utilizzare in abbinamento un Mouse Bluetooth senza <em>mangiare</em> una delle USB disponibili </li>
<li>La tastiera non è ovviamente full. Quindi non avete tastierino numerico, per esempio, e per muovervi nel testo (home/end/pageup/pagedown) siete costretti ad usare la combinazione con Fn </li>
<li>Occhio alla rotazione del display, che è figa ma è pericolosa allo stesso tempo. Mi spiego: quando uso il Dell XPS 12 come ultrabook e poi lo sollevo, per spostarmi, lo afferro in un modo tale per cui sblocco lo schermo (mano destra in prossimità della parte inferiore destra dello schermo). Per cui se non state attenti rischiate di tenere l’ultrabook con la cornice: meglio evitare. Ma in fondo basta farci l’abitudine! </li>
</ol>
<p><strong>Buon Dell XPS 12 a tutti, insomma!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/12/18/il-mio-ultimo-acquisto-dell-xps-12.aspx/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Non capisco l&#8217;equivalenza tablet = mobilit&#224;. E chi l&#8217;ha detto?</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/12/17/non-capisco-lequivalenza-tablet-mobilit-e-chi-lha-detto.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/12/17/non-capisco-lequivalenza-tablet-mobilit-e-chi-lha-detto.aspx#comments</comments>
		<pubDate>Mon, 17 Dec 2012 13:59:14 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2145</guid>
		<description><![CDATA[E’ passato qualche giorno da quando ho avuto uno scambio di tweet con alcuni follower/following sul discorso tablet, Windows 8, ultrabook ed autonomia delle batterie. Il discorso è piuttosto complesso, e dipende molto dal modo con cui si utilizza un pc, un portatile, un tablet. Ma il concetto di fondo è ben riassunto dal titolo [...]]]></description>
				<content:encoded><![CDATA[<p>E’ passato qualche giorno da quando ho avuto uno scambio di tweet con alcuni follower/following sul discorso tablet, Windows 8, ultrabook ed autonomia delle batterie. Il discorso è piuttosto complesso, e dipende molto dal modo con cui si utilizza un pc, un portatile, un tablet. Ma il concetto di fondo è ben riassunto dal titolo del post. Ovvero: non è assolutamente obbligatorio che un ultrabook/tablet Windows 8 debba venir utilizzato in mobilità. Da cui una semplice deduzione: un ultrabook Windows 8 con un’autonomia di 4 ore è perfettamente in linea con quanto offre il mercato oggi.</p>
<p>Cerchiamo di tornare indietro nel tempo con la mente, e pensiamo ai primi PC e notebook dotati di connettività WiFi. Una bella comodità, senza dubbio, per chi lavora in mobilità. E’ talmente una cosa comoda che oggi ci ritroviamo il WiFi dappertutto, su portatili che mai e poi mai ci capiterà di usare in mobilità. Morale: il WiFi nel 2012 non ha nulla a che fare con la mobilità. Ce l’abbiamo punto e stop, anche se utilizziamo il notebook in ufficio tutti i giorni, come è capitato a me per anni ed anni.</p>
<p>Idem per i tablet Windows 8. E’ verissimo che iPad ha un’autonomia imbattibile. Ma è solo un tablet, nulla di più, nulla di meno. Ci fai solo le “cose da tablet”, punto. Ed il paragone con gli ultrabook è totalmente fuori luogo. iPad è solo un tablet, ripeto, gli ultrabook sono dei veri e propri PC. Se un ultrabook è anche un tablet (come il mio recente Dell XPS 12, tanto per intenderci) non lo paragonerò mai e poi mai con alcun tablet, men che meno con un iPad. Sono due prodotti totalmente diversi.</p>
<p>Il fatto che un ultrabook Windows 8 moderno sia anche touch, e sia anche un tablet, non significa assolutamente che sia la scelta ideale anche per chi lavora in mobilità. Se siete spesso su un treno, in aereo, in automobile, in fiera, un tablet puro, leggero e con una bella batteria è senz’altro la cosa migliore.</p>
<p>Sono pronto a scommettere che entro pochi mesi tutti i notebook/ultrabook avranno schermi touch. Il touch sarà una cosa così naturale che presto saremo qui a dire: ma come cavolo facevamo prima, senza? Ed utilizzeremo il touch sempre ed ovunque, in modo naturale, così come oggi è naturale avere il WiFi, che inizialmente era prerogativa esclusiva dei portatili. Quindi, per favore, non associate tablet ed interazione touch con il concetto di mobilità: non c’entrano assolutamente nulla.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/12/17/non-capisco-lequivalenza-tablet-mobilit-e-chi-lha-detto.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare uno UserControl per Windows 8 app e distribuirlo</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/12/06/creare-uno-usercontrol-per-windows-8-app-e-distribuirlo.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/12/06/creare-uno-usercontrol-per-windows-8-app-e-distribuirlo.aspx#comments</comments>
		<pubDate>Thu, 06 Dec 2012 21:07:59 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2143</guid>
		<description><![CDATA[Nei giorni scorsi mi sono scontrato con il problema indicato dal titolo del post. La procedura non è poi così diversa da quella a cui ero già abituato: Creare un progetto di tipo Class Library (Windows Store apps) Aggiungere un “New Item” al progetto e selezionare “User Control” Sviluppare il controllo, scrivendo XAML, codice, code-behind, [...]]]></description>
				<content:encoded><![CDATA[<p>Nei giorni scorsi mi sono scontrato con il problema indicato dal titolo del post. La procedura non è poi così diversa da quella a cui ero già abituato:</p>
<ul>
<li>Creare un progetto di tipo Class Library (Windows Store apps)</li>
<li>Aggiungere un “New Item” al progetto e selezionare “User Control”</li>
<li>Sviluppare il controllo, scrivendo XAML, codice, code-behind, etc. etc.: tutto ciò che volete</li>
</ul>
<p><strong><font color="#ff0000">Il bello arriva quando volete distribuire il vostro controllo.</font></strong> Normalmente, infatti, compilereste il progetto di cui sopra e dareste in giro l’assembly che avete ottenuto. Quindi, se avete creato un progetto chiamato “CheBelloIlMioControllo”, quando compilate ottenete un assembly chiamato “CheBelloIlMioControllo.dll”.</p>
<p><strong><font color="#ff0000">Non è sufficiente. La sola dll non è sufficiente.</font></strong> <strong><font color="#008040">Dovete distribuire anche lo XAML relativo ai vostri controlli</font></strong>, e lo dovete fare in un modo piuttosto particolare.</p>
<p>Rispetto alla location in cui si trova l’assembly, dovete:</p>
<ul>
<li>Creare un folder chiamato esattamente come la dll (nel nostro esempio “CheBelloIlMioControllo”)</li>
<li>Nel folder di cui sopra dovete copiare i files XAML relativi al controllo</li>
</ul>
<p><strong>Se il controllo nel vostro progetto è stato creato all’interno di un folder, la struttura di folder diventa: NomeAssembly/NomeFolder/NomeFileXaml.</strong></p>
<p>Ultima cosa assolutamente importante: dovete distribuire anche il file con estensione .PRI, che ha lo stesso nome del nostro assembly.</p>
<p>Ecco un piccolo esempio:</p>
<p><img src="http://farm9.staticflickr.com/8059/8251025848_f897d0661b.jpg" /></p>
<p>L’assembly si chiama <strong>VivendoByteToolkit</strong>. I controlli sono stati creati dentro il folder <strong>Controls</strong>, che quindi contiene i tre files XAML relativi ai tre controlli: CurrencyPicker.xaml, DatePicker.xaml e NumberPicker.xaml.</p>
<p>All’interno del folder <strong>VivendoByteToolkit</strong> ho inserito il file VivendoByteToolkit.dll e VivendoByteToolkit.pri.</p>
<p>Direi che è tutto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/12/06/creare-uno-usercontrol-per-windows-8-app-e-distribuirlo.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinRT: catturare una foto e salvarla nel roaming folder</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/12/01/winrt-catturare-una-foto-e-salvarla-nel-roaming-folder.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/12/01/winrt-catturare-una-foto-e-salvarla-nel-roaming-folder.aspx#comments</comments>
		<pubDate>Sat, 01 Dec 2012 21:06:01 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2140</guid>
		<description><![CDATA[Con qualche riga di C# è possibile utilizzare la webcam o la fotocamera del nostro PC/tablet/ultrabook e salvarla all’interno della cartella roaming, che viene automaticamente sincronizzata tra tutti i vostri device Windows 8. Il codice è piuttosto semplice. StorageFolder folder = Windows.Storage.ApplicationData.Current.RoamingFolder; CameraCaptureUI dialog = new CameraCaptureUI(); Qui sopra ho istanziato due oggetti che ci [...]]]></description>
				<content:encoded><![CDATA[<p>Con qualche riga di C# è possibile utilizzare la webcam o la fotocamera del nostro PC/tablet/ultrabook e salvarla all’interno della cartella roaming, che viene automaticamente sincronizzata tra tutti i vostri device Windows 8.</p>
<p>Il codice è piuttosto semplice.</p>
<pre>StorageFolder folder =
     Windows.Storage.ApplicationData.Current.RoamingFolder;
CameraCaptureUI dialog = <span class="kwrd">new</span> CameraCaptureUI();</pre>
<p>Qui sopra ho istanziato due oggetti che ci serviranno nel codice.</p>
<pre><span class="kwrd">private</span> async <span class="kwrd">void</span> Button_Click_1(
   <span class="kwrd">object</span> sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    var file = await dialog.
      CaptureFileAsync(CameraCaptureUIMode.Photo);

    <span class="kwrd">if</span> (file != <span class="kwrd">null</span>)
    {
        <span class="kwrd">string</span> filename = <span class="kwrd">string</span>.Concat
          (Guid.NewGuid().ToString(), file.FileType);
        await file.MoveAsync(folder, filename);
    }
}</pre>
<p>La prima cosa che faccio è invocare il metodo <strong>CaptureFileAsync</strong>. Questo metodo avvia la fotocamera del device, e vi permette di catturare una foto od un video. Se concludete l’operazione con successo (ovvero: se non annullate l’operazione), il vostro file media viene salvato in una cartella temporanea che – stando a ciò che ho letto in giro sul Internet – può venir ripulita dal sistema.</p>
<p>La prima cosa che faccio quindi è spostare il file nella cartella roaming, rinominando il file, dandogli un nome univoco – nel mio caso genero un nuovo Guid, voi potete applicare qualsiasi logica vi venga in mente.</p>
<p>Questo approccio ha diversi vantaggi:</p>
<ul>
<li>salvandola nel roaming folder, le vostro foto/video vengono sincronizzate tra tutti i vostri device Windows 8 (ovviamente se fate login con il vostro Microsoft Account)</li>
<li>Se avete MediaElement o Image nel codice XAML, potete far riferimento alle immagini salvate nel roaming folder tramite l’url “<a title="ms-appdata:///roaming/" href="///roaming/"><em><span style="color: #008040">ms-appdata:///roaming/</span></em></a><em><span style="color: #008040">nomefile</span></em>”. Facile e veloce, senza troppi fronzoli</li>
</ul>
<p>Detto questo, ricordatevi solamente nelle Capabilities della vostra app per abilitare la webcam.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/12/01/winrt-catturare-una-foto-e-salvarla-nel-roaming-folder.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8: 40 milioni di copie vendute, ma pc sugli scaffali</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/28/windows-8-40-milioni-di-copie-vendute-ma-pc-sugli-scaffali.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/28/windows-8-40-milioni-di-copie-vendute-ma-pc-sugli-scaffali.aspx#comments</comments>
		<pubDate>Wed, 28 Nov 2012 09:54:52 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2136</guid>
		<description><![CDATA[E’ di ieri sera la notizia che nel primo mese dall’immissione sul mercato, Windows 8 ha venduto 40.000.000 di copie in giro per il mondo. Qualche fonte: http://arstechnica.com/information-technology/2012/11/windows-8-sales-are-good-if-not-great-at-40-million-copies-in-the-first-month/ http://phys.org/news/2012-11-windows-sales-million.html Questo in risposta a tutti quei blog e a quelle più disparate fonti su Internet che invece dichiaravano che le vendite erano di sotto delle aspettative. [...]]]></description>
				<content:encoded><![CDATA[<p>E’ di ieri sera la notizia che nel primo mese dall’immissione sul mercato, <strong>Windows 8</strong> ha venduto 40.000.000 di copie in giro per il mondo. Qualche fonte:</p>
<p><a title="http://arstechnica.com/information-technology/2012/11/windows-8-sales-are-good-if-not-great-at-40-million-copies-in-the-first-month/" href="http://arstechnica.com/information-technology/2012/11/windows-8-sales-are-good-if-not-great-at-40-million-copies-in-the-first-month/">http://arstechnica.com/information-technology/2012/11/windows-8-sales-are-good-if-not-great-at-40-million-copies-in-the-first-month/</a></p>
<p><a title="http://phys.org/news/2012-11-windows-sales-million.html" href="http://phys.org/news/2012-11-windows-sales-million.html">http://phys.org/news/2012-11-windows-sales-million.html</a></p>
<p>Questo in risposta a tutti quei blog e a quelle più disparate fonti su Internet che invece dichiaravano che le vendite erano di sotto delle aspettative. <strong>Eppure, a quanto pare, i notebook e gli ultrabook Windows 8 che si trovano nei negozi rimangono invenduti.</strong> Evidentemente, i consumatori preferiscono e vogliono il software, per essere aggiornati, ma non comprano l’hardware.</p>
<p>Io un’idea me la sono fatta, e da qualche settimana, a dir la verità.   <br />Ci sono alcuni fattori da prendere in considerazione.</p>
<p>Innanzitutto, la gente vuole prodotti funzionali e belli. La gente ha capito che Windows 8 è <strong>anche</strong> per dispositivi touch, siano essi notebook, ultrabook o tablet. <strong><font color="#008040">Non ne ho la certezza matematica, ma ho la netta sensazione che ad oggi si trovi ben poco, al Mediaworld, al Saturn, all’Unieuro, al Darty, e via dicendo. Ci sono i cari buoni vecchi portatili 15”, senza touch, con Windows 8 installato sopra.</font></strong> Davvero uno scenario triste. Senza parlare dell’importanza del “day-one”: io stesso sono andato in giro per un intero sabato nei centri commerciali più grossi della Lombardia alla ricerca di un notebook/ultrabook Windows 8, trovando praticamente nulla.</p>
<p>Per motivi di lavoro, ho girovagato nella scorsa settimana un po’ i centri commerciali in tre luoghi diversi del Nord Italia (io bazzico da queste parti):</p>
<ul>
<li>in Valtellina</li>
<li>a Bologna</li>
<li>a Cuneo</li>
</ul>
<p>In tutti questi tre posti, non ho trovato hardware adeguato, capace di sfruttare le capacità touch di Windows 8. Quindi, lo ripeto, evidentemente la gente preferisce aspettare di vedere qualcosa di bello.</p>
<p><strong><font color="#008040">La seconda questione è che secondo me con Windows 7, e di conseguenza l’8, sia cominciato un trend piuttosto particolare.</font></strong> Un trend che va a vantaggio per noi utenti, ma probabilmente un po’ a svantaggio dei produttori. <strong>Mi riferisco al fatto che l’uscita di un nuovo sistema operativo Microsoft non scatena per forza l’acquisto di un hardware più potente.</strong> Anzi, semmai proprio il contrario. Questo a mio avviso è un concetto molto importante. Attenzione: con “potente” mi riferisco alla velocità della CPU, alla memoria RAM, all’occupazione su disco. <strong>Quindi è molto probabile che un utente si tenga il pc che ha già, ci installa sopra Windows 8, e lo usa. </strong>Io conosco circa 15 persone che han seguito questo approccio. Mentre una volta avrebbe magari voluto migrare da un dual-core ad un quad-core, oppure passare a 1GB a 4GB di RAM, e via dicendo. Windows 7 ha dato il via ad un’era, secondo me, di “ottimizzazione del software”, al punto che Windows 8 si avvia ed in generale è più performante di Windows 7, a parità di hardware. Quindi un consumer che a casa ha un quad-core e 4 GB di RAM, non sente assolutamente l’esigenza di comprare un pc nuovo; anzi, probabilmente tenta di installare Windows 8 sopra un PC più vetusto, perchè si rende conto che – cavolo – è davvero “fast and fluid”!!! Mio padre, per esempio, usa Windows 8 anche su un vecchio Athlon 64 3800+ con 1GB di RAM, e per le cose che fa si trova più che bene.</p>
<p>E’ vero che Microsoft fa il software, e quindi è più che contenta delle 40.000.000 di copie vendute. Ma l’hardware rimane lì. E questo è colpa dei produttori (in minima parte) e soprattutto colpa di chi deve vendere, che dovrebbero avere hardware da vendere fin dal primo giorno di commercializzazione.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/28/windows-8-40-milioni-di-copie-vendute-ma-pc-sugli-scaffali.aspx/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SwipeCommandHelper, una piccola solution di esempio</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/15/swipecommandhelper-una-piccola-solution-di-esempio.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/15/swipecommandhelper-una-piccola-solution-di-esempio.aspx#comments</comments>
		<pubDate>Thu, 15 Nov 2012 09:00:03 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2134</guid>
		<description><![CDATA[Ho messo a disposizione questa piccola solution, da poter scaricare liberamente, per provare in due secondi le funzionalità della SwipeCommandHelper che mi sono creato. Chiaramente dovete avere Windows 8, Visual Studio 2012 e – volendo – un bel monitor touch (ma non è indispensabile). L&#8217;esempio è chiaramente molto semplice. Il viewmodel espone un&#8217;unica proprietà Number, [...]]]></description>
				<content:encoded><![CDATA[<p>Ho messo a disposizione <a href="http://download.vivendobyte.net/App1.zip">questa piccola solution</a>, da poter scaricare liberamente, per provare in due secondi le funzionalità della SwipeCommandHelper che mi sono creato.
</p>
<p>Chiaramente dovete avere Windows 8, Visual Studio 2012 e – volendo – un bel monitor touch (ma non è indispensabile).
</p>
<p>L&#8217;esempio è chiaramente molto semplice. Il viewmodel espone un&#8217;unica proprietà <strong>Number</strong>, un numero intero, che viene visualizzata sulla UI. Facendo le gesture sulla Grid (che è la parte evidenziata dal colore beige) eseguite i command associati in base alla gesture stessa:
</p>
<ul>
<li>Verso l&#8217;alto, incrementate il valore di 1
</li>
<li>Verso il basso, decrementate il valore di 1
</li>
<li>Verso sinistra, dividete il valore per 2
</li>
<li>Verso destra, moltiplicate il valore per 2
</li>
</ul>
<p>L&#8217;esempio è chiaramente stupido e banale, ma il succo del discorso non è certamente questo. Il punto centrale è poter assegnare dei command in base alla gesture: la complessità dei command dipende chiaramente dal vostro viewmodel. Questo è solo un sample. E – lo ripeto – posso agganciare la gestione dello swipe a qualsiasi <strong>FrameworkElement</strong>, che sia una Grid, un Button, un&#8217;Image, qualsiasi controllo, insomma.
</p>
<p>Una cosa importante che voglio aggiungere è che lo swipe funziona anche con il mouse, quindi non è indispensabile avere un display touch per poterlo provare ed usare. Basta trascinare il puntatore del mouse verso una qualsiasi delle quattro direzioni, e secondo WinRT avviene comunque una <em>manipulation</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/15/swipecommandhelper-una-piccola-solution-di-esempio.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestire lo swipe nelle quattro direzioni su un qualsiasi elemento della UI</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/14/gestire-lo-swipe-nelle-quattro-direzioni-su-un-qualsiasi-elemento-della-ui.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/14/gestire-lo-swipe-nelle-quattro-direzioni-su-un-qualsiasi-elemento-della-ui.aspx#comments</comments>
		<pubDate>Wed, 14 Nov 2012 18:36:12 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2130</guid>
		<description><![CDATA[Vi piacerebbe poter gestire lo swipe verso sinistra/destra/alto/basso, su qualsiasi elemento della UI, e sfruttando ovviamente Model-View-ViewModel, per gli amici MVVM? Ovvero, poter scrivere un blocco di XAML così? &#60;Border Background="Cyan" Width="500" Height="200" helper:SwipeCommandHelper.Up="{Binding IncrementCommand}" helper:SwipeCommandHelper.Down="{Binding DecrementCommand}" helper:SwipeCommandHelper.Right="{Binding MultiplyCommand}" helper:SwipeCommandHelper.Left="{Binding DivideCommand}" /&#62; Al Border qui sopra ho dato la possibilità di eseguire un command differente [...]]]></description>
				<content:encoded><![CDATA[<p>Vi piacerebbe poter gestire lo swipe verso sinistra/destra/alto/basso, su qualsiasi elemento della UI, e sfruttando ovviamente Model-View-ViewModel, per gli amici MVVM? Ovvero, poter scrivere un blocco di XAML così?</p>
<pre><span class="kwrd">&lt;</span><span class="html">Border</span> <span class="attr">Background</span><span class="kwrd">="Cyan"</span> <span class="attr">Width</span><span class="kwrd">="500"</span> <span class="attr">Height</span><span class="kwrd">="200"</span>
        <span class="attr">helper:SwipeCommandHelper</span>.<span class="attr">Up</span><span class="kwrd">="{Binding IncrementCommand}"</span>
        <span class="attr">helper:SwipeCommandHelper</span>.<span class="attr">Down</span><span class="kwrd">="{Binding DecrementCommand}"</span>
        <span class="attr">helper:SwipeCommandHelper</span>.<span class="attr">Right</span><span class="kwrd">="{Binding MultiplyCommand}"</span>
        <span class="attr">helper:SwipeCommandHelper</span>.<span class="attr">Left</span><span class="kwrd">="{Binding DivideCommand}"</span> <span class="kwrd">/&gt;</span></pre>
<p>Al Border qui sopra ho dato la possibilità di eseguire un command differente in base a quale tipo di swipe l’utente fa sopra il Border stesso. Se scorro il dito verso l’alto, eseguo l’<strong>IncrementCommand</strong>. Se lo scorro verso destra, eseguo il <strong>MultiplyCommand</strong>. E così via. La cosa bella è che la classe <strong>SwipeCommandHelper</strong> può agganciarsi a qualsiasi oggetto <strong>FrameworkElement</strong>.</p>
<p>Il codice è abbastanza semplice.</p>
<pre><span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> SwipeCommandHelper
{
    <span class="kwrd">public</span> <span class="kwrd">static</span> ICommand GetUp(DependencyObject obj)
    {
        <span class="kwrd">return</span> (ICommand)obj.GetValue(UpProperty);
    }

    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> SetUp(DependencyObject obj,
        ICommand <span class="kwrd">value</span>)
    {
        obj.SetValue(UpProperty, <span class="kwrd">value</span>);
    }

    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">readonly</span> DependencyProperty UpProperty =
        DependencyProperty.RegisterAttached(<span class="str">"Up"</span>,
        <span class="kwrd">typeof</span>(ICommand),
        <span class="kwrd">typeof</span>(SwipeCommandHelper),
        <span class="kwrd">new</span> PropertyMetadata(<span class="kwrd">null</span>,
        <span class="kwrd">new</span> PropertyChangedCallback(Setup)));
}</pre>
<p>Il codice qui sopra è una semplificazione, e riporta solo la dependency property per gestire lo swipe verso l’alto. La dependency property è <strong>UpProperty</strong>, ed è di tipo <strong>ICommand</strong>. Il valore predefinito è null, e quando il suo valore viene modificato viene invocato il metodo Setup(). Questo metodo fa un po’ di code, ma il succo del discorso è che si aggancia all’evento ManipulationStarted del controllo, in modo tale che quando l’utente farà qualche gesture noi potremo intercettare questo evento ed eseguire il command associato. Il codice del metodo Setup() è il seguente:</p>
<pre><span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Setup(DependencyObject obj,
            DependencyPropertyChangedEventArgs e)
{
    FrameworkElement ctl = obj <span class="kwrd">as</span> FrameworkElement;

    <span class="kwrd">if</span> (ctl != <span class="kwrd">null</span>)
    {
        ICommand oldValue = (ICommand)e.OldValue;
        ICommand newValue = (ICommand)e.NewValue;

        <span class="kwrd">if</span> (oldValue == <span class="kwrd">null</span> &amp;&amp; newValue != <span class="kwrd">null</span>)
        {
            {
                <span class="kwrd">if</span> (GetAttached(ctl) == <span class="kwrd">false</span>)
                {
                    ctl.ManipulationMode = ManipulationModes.TranslateX |
                        ManipulationModes.TranslateY;
                    SetAttached(ctl, <span class="kwrd">true</span>);
                    ctl.ManipulationCompleted += ctl_ManipulationCompleted;
                }
            }
        }
        <span class="kwrd">else</span> <span class="kwrd">if</span> (oldValue != <span class="kwrd">null</span> &amp;&amp; newValue == <span class="kwrd">null</span>)
        {
            ctl.ManipulationMode = ManipulationModes.None;
            ctl.SetValue(AttachedProperty, <span class="kwrd">false</span>);
            ctl.ManipulationCompleted -= ctl_ManipulationCompleted;
        }
    }
}</pre>
<p>Aggiungo due note importanti: <strong><span style="color: #ff0000">per default, in Windows 8 su un oggetto sulla UI non si possono intercettare gesture.</span></strong> Con Windows Phone, per esempio, è sufficiente sottoscrivere l’evento ManipulationCompleted ed il gioco è fatto. Con Windows 8, invece, prima dovete impostare il ManipulationMode, poi sottoscrivete l’evento. <strong><span style="color: #ff0000">Per default, ManipulationMode è None, e quindi anche se impazzite a fare gesture sopra l’oggetto, nel codice non accadrà nulla.</span></strong> <strong><span style="color: #008040">Ma non abbiate paura: ci pensa il mio codice a fare tutto ciò: non appena associate un command ad uno dei quattro tipi di swipe, vado automaticamente ad impostare il ManipulationMode su TranslateX | TranslateY.</span></strong></p>
<p>A questo punto non ci resta che scrivere il codice dell’evento ManipulationCompleted:</p>
<pre><span class="kwrd">static</span> <span class="kwrd">void</span> ctl_ManipulationCompleted(<span class="kwrd">object</span> sender,
            ManipulationCompletedRoutedEventArgs e)
{
    var element = sender <span class="kwrd">as</span> FrameworkElement;
    ICommand command = <span class="kwrd">null</span>;

    <span class="rem">// x &lt; 0 --&gt; verso sinistra</span>
    <span class="rem">// x &gt; 0 --&gt; verso destra</span>
    var x = e.Cumulative.Translation.X;

    <span class="rem">// y &lt; 0 --&gt; verso l'alto</span>
    <span class="rem">// y &gt; 0 --&gt; verso il basso</span>
    var y = e.Cumulative.Translation.Y;

    <span class="kwrd">if</span> (y &lt; 0 &amp;&amp; Math.Abs(y) &gt; Math.Abs(x))
    {
        command = GetUp(element);
    }
    <span class="kwrd">else</span> <span class="kwrd">if</span> (y &gt; 0 &amp;&amp; Math.Abs(y) &gt; Math.Abs(x))
    {
        command = GetDown(element);
    }
    <span class="kwrd">else</span> <span class="kwrd">if</span> (x &gt; 0 &amp;&amp; Math.Abs(x) &gt; Math.Abs(y))
    {
        command = GetRight(element);
    }
    <span class="kwrd">else</span> <span class="kwrd">if</span> (x &lt; 0 &amp;&amp; Math.Abs(x) &gt; Math.Abs(y))
    {
        command = GetLeft(element);
    }

    <span class="kwrd">if</span> (command != <span class="kwrd">null</span>)
    {
        <span class="kwrd">if</span> (command.CanExecute(<span class="kwrd">null</span>))
        {
            command.Execute(<span class="kwrd">null</span>);
        }
    }
}</pre>
<p>All’interno dell’evento posso capire quale tipo di gesture ha fatto l’utente sul controllo. Avendo impostato il ManipulationMode solamente alle traslazioni X e Y, sappiamo per forza di cose che arriveremo qui solo in presenza di questa gesture. Capisco la direzione del movimento seguendo due fattori:</p>
<ul>
<li>il valore di x e y, ovviamente</li>
<li>quale dei due valori x e y ha più rilevanza l’uno con l’altro (spostando il dito verso l’alto, probabilmente lo sposterete anche a sinistra o a destra – grazie a Math.Abs() capisco quale asse ha avuto più rilevanza nella gesture)</li>
</ul>
<p>I base alla direzione, ottengo l’<strong>ICommand</strong> associato. Ovviamente può anche essere null, nel caso in cui non abbia bindato alcun command. Se invece c’è, invoco il CanExecute, ed in caso di esito positivo, eseguo finalmente il comando associato.</p>
<p>Si potrebbe pensare di aggiungere il CommandParameter per ciascuna delle quattro direzioni, ma a me non serve, per cui lo lascio fare voi!</p>
<p>Il codice completo <a href="http://download.vivendobyte.net/SwipeCommandHelper.zip" target="_blank">della classe pronta all’uso è qui</a>. E’ stata scritta in circa 30 minuti, ci sarà sicuramente qualche bug: avvisatemi e correggiamola/miglioriamola insieme!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/14/gestire-lo-swipe-nelle-quattro-direzioni-su-un-qualsiasi-elemento-della-ui.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurazione di Word 2013 con WordPress hostato su Winhost.com</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/14/configurazione-di-word-2013-con-wordpress-hostato-su-winhost-com.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/14/configurazione-di-word-2013-con-wordpress-hostato-su-winhost-com.aspx#comments</comments>
		<pubDate>Wed, 14 Nov 2012 12:35:55 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2128</guid>
		<description><![CDATA[Ho avuto qualche difficoltà a configurare Word 2013 per poter pubblicare i miei post sul mio blog. Nonostante il mio strumento preferito rimanga Windows Live Writer, ho tentato di dare una possibilità a Word perché ad oggi è l&#8217;unico software di blogging disponibile anche sotto Windows RT. La procedura è molto semplice; ciò nonostante ho [...]]]></description>
				<content:encoded><![CDATA[<p>Ho avuto qualche difficoltà a configurare Word 2013 per poter pubblicare i miei post sul mio blog. Nonostante il mio strumento preferito rimanga <strong>Windows Live Writer</strong>, ho tentato di dare una possibilità a Word perché ad oggi è l&#8217;unico software di blogging disponibile anche sotto Windows RT. La procedura è molto semplice; ciò nonostante ho avuto qualche difficoltà, non tanto perché avessi problemi intrinseci con Word 2013, quanto per il modo con cui ho configurato le cose server-side, e quindi sul mio hosting Winhost.
</p>
<p><strong>Piccola premessa.</strong><br />Se si vuole attivare un dominio di terzo livello sul proprio dominio, è necessario procedere in due step:
</p>
<ul>
<li>Attivare il dominio (esempio: se state gestendo il dominio pippo.com e volete attivare admin.pippo.com, dovete per l&#8217;appunto attivare il sub-domain &#8220;admin&#8221;)
</li>
<li>Creare un folder &#8220;admin&#8221; via ftp alla root
</li>
<li>Impostare il meccanismo di url-rewrite in modo tale che quando viene intercettata una chiamata ad un url che cominci per &#8220;admin&#8221;, gli si dice di reindirizzare il tutto all&#8217;interno del folder &#8220;admin&#8221;
</li>
</ul>
<p>Come ben sapete, la mia esperienza con hosting, web, web.config, IIS e dintorni non è poi così tanta. Ma seguendo questi step sono riuscito, per esempio, ad attivare domini come &#8220;blog.vivendobyte.net&#8221;, &#8220;fsxlogger.vivendobyte.net&#8221;, &#8220;service.vivendobyte.net&#8221;, eccetera eccetera. L&#8217;unica pecca di tutto questo è che l&#8217;url-rewrite fa una cosa un po&#8217; sporca, ovvero trasforma l&#8217;url &#8220;http://blog.vivendobyte.net&lt;l&#8217;url continua&gt;&#8221; in &#8220;http:// blog.vivendobyte.net/<span style="color:red"><strong>blog/</strong></span>&lt;l&#8217;url continua&gt;&#8221;. Insomma, rende evidente l&#8217;esistenza del folder &#8220;blog&#8221; nelle mie cartelle sul server.
</p>
<p><strong>Soluzione</strong><br />Morale, per configurare <strong>Word 2013</strong> per postare sul proprio blog bisogna indicare l&#8217;url comprensivo di sub-folder, ovvero:<br /><a href="http://subdomain.domain.net/folder/xmlrpc.php"><strong>http://subdomain.domain.net/folder/xmlrpc.php</strong></a>.
</p>
<p>Non so se è anche il vostro caso, ma io ho risolto così. Ed adesso, blogging a tutta forza con <strong>Word 2013</strong> anche su Windows RT.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/14/configurazione-di-word-2013-con-wordpress-hostato-su-winhost-com.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinRT, Xaml, TextBox e selezione del testo</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/12/winrt-xaml-textbox-e-selezione-del-testo.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/12/winrt-xaml-textbox-e-selezione-del-testo.aspx#comments</comments>
		<pubDate>Mon, 12 Nov 2012 08:11:56 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2124</guid>
		<description><![CDATA[Ho cercato di riassumere lo scopo del post nel titolo, ma lo riassumo qui per maggiore chiarezza. Lo scopo è quello di scatenare il ‘seleziona tutto il testo’ quando una TextBox prende il focus. Chiaramente in ottica MVVM, quindi senza sporcare il code-behind della pagina. E’ uno dei comportamenti di default che più mi mancano, [...]]]></description>
				<content:encoded><![CDATA[<p>Ho cercato di riassumere lo scopo del post nel titolo, ma lo riassumo qui per maggiore chiarezza. Lo scopo è quello di scatenare il ‘seleziona tutto il testo’ quando una TextBox prende il focus. Chiaramente in ottica MVVM, quindi senza sporcare il code-behind della pagina. E’ uno dei comportamenti di default che più mi mancano, anche perchè sarebbe bastato aggiungere una proprietà AutoSelectAll nella TextBox e parecchi developer sarebbero stati più contenti.</p>
<p>Fortunatamente è piuttosto semplice scrivere una classe che raggiungere lo stesso risultato.</p>
<pre><span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> TextBoxHelper
{
    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> GetAutoSelectAll(DependencyObject obj)
    {
        <span class="kwrd">return</span> (<span class="kwrd">bool</span>)obj.GetValue(AutoSelectAllProperty);
    }

    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> SetAutoSelectAll(DependencyObject obj,
        <span class="kwrd">bool</span> <span class="kwrd">value</span>)
    {
        obj.SetValue(AutoSelectAllProperty, <span class="kwrd">value</span>);
    }

    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">readonly</span> DependencyProperty AutoSelectAllProperty =
        DependencyProperty.RegisterAttached(<span class="str">"AutoSelectAll"</span>,
        <span class="kwrd">typeof</span>(<span class="kwrd">bool</span>),
        <span class="kwrd">typeof</span>(TextBoxHelper),
        <span class="kwrd">new</span> PropertyMetadata(<span class="kwrd">null</span>,
        <span class="kwrd">new</span> PropertyChangedCallback(Setup)));

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Setup(DependencyObject obj,
        DependencyPropertyChangedEventArgs e)
    {
        TextBox tb = obj <span class="kwrd">as</span> TextBox;

        <span class="kwrd">if</span> (tb != <span class="kwrd">null</span>)
        {
            <span class="kwrd">bool</span> oldValue = (<span class="kwrd">bool</span>)e.OldValue;
            <span class="kwrd">bool</span> newValue = (<span class="kwrd">bool</span>)e.NewValue;

            <span class="kwrd">if</span> (oldValue == <span class="kwrd">false</span> &amp;&amp; newValue == <span class="kwrd">true</span>)
            {
                tb.GotFocus += tb_GotFocus;
            }
            <span class="kwrd">else</span> <span class="kwrd">if</span> (oldValue == <span class="kwrd">true</span> &amp;&amp; newValue == <span class="kwrd">false</span>)
            {
                tb.GotFocus -= tb_GotFocus;
            }
        }
    }

    <span class="kwrd">static</span> <span class="kwrd">void</span> tb_GotFocus(<span class="kwrd">object</span> sender, RoutedEventArgs e)
    {
        TextBox tb = sender <span class="kwrd">as</span> TextBox;

        <span class="kwrd">if</span> (tb != <span class="kwrd">null</span>)
        {
            tb.SelectAll();
        }
    }
}</pre>
<p>Questa classe va ovviamente utilizzata nello XAML:</p>
<pre><span class="kwrd">&lt;</span><span class="html">TextBox</span> <span class="attr">common:TextBoxHelper</span>.<span class="attr">AutoSelectAll</span><span class="kwrd">="True"</span> <span class="kwrd">/&gt;</span></pre>
<p>Quando questa TextBox prende il focus, il testo in esso contenuto viene automaticamente selezionato grazie al behavior che gli abbiamo agganciato. Tutto questo direttamente nello XAML, senza code-behind, in perfetta sintonia con MVVM.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/12/winrt-xaml-textbox-e-selezione-del-testo.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows App Cert Kit, rapporto tra colore di sfondo e colore del testo</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/06/windows-app-cert-kit-rapporto-tra-colore-di-sfondo-e-colore-del-testo.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/06/windows-app-cert-kit-rapporto-tra-colore-di-sfondo-e-colore-del-testo.aspx#comments</comments>
		<pubDate>Tue, 06 Nov 2012 17:44:36 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2122</guid>
		<description><![CDATA[Prima di poter tentare il submit di un’app Windows 8 per lo Store, è necessario far girare localmente sul vostro PC il tool in oggetto, il Windows App Cert Kit. Non ve ne potete scordare, perchè vi viene automaticamente proposto da Visual Studio appena terminate di creare il package da uploadare nella dashboard. Questo tool [...]]]></description>
				<content:encoded><![CDATA[<p>Prima di poter tentare il submit di un’app Windows 8 per lo Store, è necessario far girare localmente sul vostro PC il tool in oggetto, il <strong>Windows App Cert Kit</strong>. Non ve ne potete scordare, perchè vi viene automaticamente proposto da Visual Studio appena terminate di creare il package da uploadare nella dashboard. Questo tool fa un sacco di controlli in locale, e vi segnala eventuali problemi che causerebbero la bocciatura dell’app stessa, senza però farvi perdere tempo (qualche giorno) prima di avere un feedback da parte di Microsoft.</p>
<p>Ieri sera, facendolo girare a seguito della creazione di un nuovo package, mi ha bocciato l’app con la seguente unica motivazione:</p>
<p><strong><font color="#ff0000">Il rapporto del contrasto tra colore di sfondo e colore del testo in primo piano è 1,16. Questo rapporto deve essere maggiore o uguale a 1,5.</font></strong></p>
<p>La morale, ben spiegata dal testo, è che non c’è abbastanza contrasto tra il colore di sfondo ed il colore del testo. Un valore 1 significa che in pratica avete lo stesso colore, il che è assurdo. <strong><font color="#008040">Prima che vi mettiate a ripensare un altro colore di sfondo</font></strong>, a rifare i loghi, a ridisegnare le icone, etc. etc., <strong><font color="#008040">aprite il file di manifest dell&#8217;app (Package.appxmanifest)</font></strong> e date un’occhiata alle seguenti impostazioni:</p>
<ul>
<li>Foreground text </li>
<li>Background color </li>
</ul>
<p>Il Windows App Cert Kit non misura quel rapporto guardando veramente i colori delle vostre Page, ma guarda questi due parametri. Nel mio caso, <strong>avevo impostato un colore di sfondo #F2EEDC</strong>, mentre <strong>il colore del testo era impostato a Light</strong>. In pratica, un colore molto simile al bianco, con il testo bianco. Direi poco contrasto, come riportato dal tool! La realtà quindi è che la mia app era perfettamente visibile ed usabile, perchè nei vari elementi della UI non usavo quel valore, ma avevo io impostato “Black” tramite una mia risorsa, senza usare le risorse di sistema.</p>
<p>E’ bastato mettere il ‘Foreground text’ a Dark e l&#8217;app ha passato il test con successo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/06/windows-app-cert-kit-rapporto-tra-colore-di-sfondo-e-colore-del-testo.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;AdControl contiene una WebView che si ruba il focus</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/01/ladcontrol-contiene-una-webview-che-si-ruba-il-focus.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/01/ladcontrol-contiene-una-webview-che-si-ruba-il-focus.aspx#comments</comments>
		<pubDate>Thu, 01 Nov 2012 18:21:45 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2119</guid>
		<description><![CDATA[Ok ok, il titolo di questo post è un po’ assurdo. Se siete sviluppatori di app Windows 8, probabilmente vi è già capitato. Oppure no. Nel qual caso, prendete appunti. Immaginate una pagina di un’app Windows 8 strutturata – in soldoni – da una Grid con tre righe, il cui contenuto è: prima riga: intestazione, [...]]]></description>
				<content:encoded><![CDATA[<p>Ok ok, il titolo di questo post è un po’ assurdo. Se siete sviluppatori di app Windows 8, probabilmente vi è già capitato. Oppure no. Nel qual caso, prendete appunti. Immaginate una pagina di un’app Windows 8 strutturata – in soldoni – da una Grid con tre righe, il cui contenuto è:</p>
<ul>
<li>prima riga: intestazione, logo, quello che volete, nulla di importante</li>
<li>seconda riga: ScrollViewer a scorrimento orizzontale, che contiene UI più complessa, che rappresenta il contenuto vero e proprio dell’app</li>
<li>terza riga: controllo AdControl per mostrare un po’ di pubblicità</li>
</ul>
<p>Ora, ieri sera mi è accaduta una cosa strana. <strong>Dal punto di vista utente, voglio che i miei utenti possano utilizzare la rotella del mouse per scorrere lo ScrollViewer indicato prima</strong>. Ricordiamocelo: le app Windows 8 non sono solamente touch, ma devono funzionare anche con tastiera &amp; mouse. Appena l’app viene avviata, l’utente deve fin da subito poter <strike><font color="#ff0000">rotellare</font></strike> usare la rotella del mouse per scorrere avanti ed indietro i contenuti. A me questo meccanismo non funzionava, sebbene avessi impostato nello XAML le proprietà IsTabStop=”true” e TabIndex=”&quot;0” sullo ScrollViewer. Se invece andavo cliccare manualmente all’interno dello ScrollViewer, ecco che la rotella aveva effetto.</p>
<p>Vi riassumo in due righe circa 2 ore di litigate col codice per capire il problema. Sgrunt.</p>
<p><strong><font color="#ff0000">In pratica ho scoperto che il controllo AdControl per l’advertising contiene al suo interno un controllo WebView che – guarda caso – si appropriava del focus.</font></strong> Quindi all’avvio dell’app lo ScrollViewer perdeva automaticamente il focus, e la rotella smetteva di funzionare.</p>
<p>Come ho risolto? Così:</p>
<pre>&lt;adv:AdControl IsEnabled=<span class="str">&quot;False&quot;</span>
ApplicationId=<span class="str">&quot;xyz&quot;</span>
AdUnitId=<span class="str">&quot;xyz&quot;</span> /&gt;</pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</p>
<p>Impostando la proprietà <strong>IsEnabled</strong> a false, l’AdControl, e la WebView al suo interno, non si prendono più il focus e tutto funziona egregiamente. Sulla UI non c’è alcuna differenza: il banner appare come deve apparire, è cliccabile, per cui non cambia nulla: ma essendo disabilitato non può prendersi il focus.</p>
<p>Ultima nota: non so se questo comportamento accade sempre o magari nel mio caso avevo una situazione più complessa o fuorviante. Ho risolto nel modo descritto: se dovesse capitare anche a voi, sapete quale potrebbe essere una possibile causa.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/01/ladcontrol-contiene-una-webview-che-si-ruba-il-focus.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Layout generale di un&#8217;app Windows 8</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/11/01/layout-generale-di-unapp-windows-8.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/11/01/layout-generale-di-unapp-windows-8.aspx#comments</comments>
		<pubDate>Thu, 01 Nov 2012 18:02:16 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2117</guid>
		<description><![CDATA[Sebbene condividano lo stesso approccio, c’è una enorme grande differenza tra costruire un’app per Windows Phone 7 ed un’app per Windows 8. Quest’ultima deve adattarsi alla risoluzione del device su cui sta girando (notebook, ultrabook, tablet, etc.) e soprattutto deve essere in grado di adattarsi a tre modalità di visualizzazione, ovvero: landscape (quando tenete il [...]]]></description>
				<content:encoded><![CDATA[<p>Sebbene condividano lo stesso approccio, c’è una enorme grande differenza tra costruire un’app per Windows Phone 7 ed un’app per Windows 8. Quest’ultima deve adattarsi alla risoluzione del device su cui sta girando (notebook, ultrabook, tablet, etc.) e soprattutto deve essere in grado di adattarsi a tre modalità di visualizzazione, ovvero:</p>
<ul>
<li>landscape (quando tenete il pc in orizzontale)</li>
<li>portrait (quando tenete il pc in verticale)</li>
<li>snapped (quando andate ad agganciare l’app sul bordo sinistro o destro dello schermo)</li>
</ul>
<p>Sappiamo tutti che il modo migliore è lasciare che il runtime .NET o WinRT faccia tutto il lavoro di intercettazione del cambiamento della vista: tramite il Visual State Manager possiamo andare a modificare qualsiasi proprietà della UI per fare in modo che la vista si adatti. In pratica, possiamo, possiamo per esempio rendere visibili/invisibili dei controlli, possiamo stringere/allargare colonne e via dicendo. Questo implica una cosa piuttosto importante: ad ogni controllo su cui vogliamo interagire tramite Visual State Manager dobbiamo assegnare un nome.</p>
<p>Io dal canto mio ho trovato un modo che mi piace di più, riassunto del codice XAML qui sotto.</p>
<pre><span class="kwrd">&lt;</span><span class="html">Page</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Page.Resources</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Page.Resources</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Grid</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;”</span><span class="html">Panel”</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;FullScreenMainGrid&quot;</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/”</span><span class="html">Panel”</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">Panel</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;PortraitMainGrid&quot;</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/”</span><span class="html">Panel”</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">Panel</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;SnappedMainGrid&quot;</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/”</span><span class="html">Panel”</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">Page</span><span class="kwrd">&gt;</span></pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</p>
<p>In pratica avete una <strong>Grid</strong> esterna che non fa altro che contenere altri tre Panel al suo interno (tali Panel possono essere Canvas, altre Grid, StackPanel, qualsiasi pannello previsto da WinRT – io ho messo Panel giusto per rendere l’idea). In modo alla visualizzazione corrente, solo uno di questi Panel sarà visibile in un dato momento. C’è il Panel che contiene il layout specifico per il landscape, poi c’è quello per il portrait, ed infine c’è quello dedicato alla visualizzazione snapped. Può sembrare una cosa prolissa, eppure io mi trovo bene così. So che toccando una certa porzione di XAML non vado a modificare le altre viste. E se lavorate con MVVM, basta fare binding e siete a posto: il codice del viewmodel che governa la view è sempre lo stesso.</p>
<p>Lo parte di XAML relativa al Visual State Manager è la seguente:</p>
<pre><span class="kwrd">&lt;</span><span class="html">VisualStateManager.VisualStateGroups</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">VisualStateGroup</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;ApplicationViewStates&quot;</span><span class="kwrd">&gt;</span>

        <span class="kwrd">&lt;</span><span class="html">VisualState</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;FullScreenLandscape&quot;</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;FullScreenMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Visible&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;SnappedMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;PortraitMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">VisualState</span><span class="kwrd">&gt;</span>

        <span class="kwrd">&lt;</span><span class="html">VisualState</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;Filled&quot;</span><span class="kwrd">&gt;</span>

        <span class="kwrd">&lt;/</span><span class="html">VisualState</span><span class="kwrd">&gt;</span>

        <span class="kwrd">&lt;</span><span class="html">VisualState</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;FullScreenPortrait&quot;</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;FullScreenMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;SnappedMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;PortraitMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Visible&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">VisualState</span><span class="kwrd">&gt;</span>

        <span class="kwrd">&lt;</span><span class="html">VisualState</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;Snapped&quot;</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;FullScreenMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;SnappedMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Visible&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">ObjectAnimationUsingKeyFrames</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetName</span><span class="kwrd">=&quot;PortraitMainGrid&quot;</span>
                    <span class="attr">Storyboard</span>.<span class="attr">TargetProperty</span><span class="kwrd">=&quot;Visibility&quot;</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">DiscreteObjectKeyFrame</span> <span class="attr">KeyTime</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;Collapsed&quot;</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">ObjectAnimationUsingKeyFrames</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">Storyboard</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">VisualState</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">VisualStateGroup</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">VisualStateManager.VisualStateGroups</span><span class="kwrd">&gt;</span></pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</p>
<p>Il concetto è molto semplice: per ogni stato (FullScreenLandscape, FullScreenPortrait, Snapped) rendete invisibili due Panel e rendete visibile quello previsto per quello stato.</p>
<p>In questo modo evitate di impazzire assegnando nomi ai controlli qua e là, e siete assolutamente sicuri di come viene renderizzata una vista in un certo stato. Ogni vista è indipendente dalle altre. Prima cercavo di stringere/allargare colonne e righe di una Grid, oppure di rimpicciolire il FontSize delle TextBlock e degli altri controlli, ma finivo sempre per impazzire. Alla fine penso che la strada più lineare, semplice e comoda da gestire sia questa.</p>
<p>Che ne dite?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/11/01/layout-generale-di-unapp-windows-8.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Un bel luned&#236;</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/29/un-bel-luned.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/29/un-bel-luned.aspx#comments</comments>
		<pubDate>Mon, 29 Oct 2012 10:20:54 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My personal life]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2115</guid>
		<description><![CDATA[Oggi è il 29 Ottobre, è un lunedì, il primo lunedì con l’ora solare. Mi sento energico, con mille cose da fare, e con la netta sensazione di riuscire a farla tutte quante entro sera. E fra le mille cose fare, c’è anche la scrittura di questo breve post. Ho diversi motivi per essere un [...]]]></description>
				<content:encoded><![CDATA[<p>Oggi è il <strong>29 Ottobre</strong>, è un lunedì, il primo lunedì con l’ora solare. Mi sento energico, con mille cose da fare, e con la netta sensazione di riuscire a farla tutte quante entro sera. E fra le mille cose fare, c’è anche la scrittura di questo breve post. Ho diversi motivi per essere un po’ più sorridente, oggi:</p>
<ol>
<li>La squadra <strong><a href="http://www.cremavolley.it/" target="_blank">Icos Crema</a></strong>, neo-promossa in Serie A1 (parliamo di volley) ha vinto contro <a href="http://urbinovolley.it/site/" target="_blank"><strong>Chateau d’Ax Urbino</strong></a>, con un secco 3-0. Bravissime ragazze!!!</li>
<li>Sempre parlando di pallavolo, Il <strong><a href="http://www.volleybergamo.it/" target="_blank">Volley Bergamo</a></strong> ha battuato al tie-break la <strong><a href="http://www.volleybusto.com/" target="_blank">Yamamay Volley</a></strong>, acerrima rivale, campionesse in praticamente tutto (campionato, coppa CEV, champions league)</li>
<li>Estreme soddisfazioni dalla mia app <strong>Diretta Volley</strong> per Windows Phone (di cui magari parlerò in un post dedicato), recensita proprio oggi su <a href="http://www.plaffo.com/2012/10/diretta-volley-lapp-per-rimanere-aggiornati-sulla-serie-a1-del-campionato-di-volley-femminile/" target="_blank"><strong>Plaffo</strong></a></li>
<li>Anche il Milan è tornato a vincere una partitella, ma questo nella mia scala dei valori conta pochino pochino</li>
<li>Meteo adorabile: pioggia, freddo, camino acceso, piumione. L’autunno e l’inverno è bello</li>
<li>Domenica notte mi sono svegliato alle 4:20 senza riuscire più a dormire. Ho preso il mio Kindle ed ho cominciato a leggere fino alle 6. Alle 6 ho dormito fino alle 9 circa. E per tutto il giorno non ho sofferto di sonno o di stanchezza, anzi!</li>
</ol>
<p>Se sabato avessi trovato anche il mio nuovo ultrabook Windows 8, sarebbe stato un weekend perfetto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/29/un-bel-luned.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad ed iPad Mini</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/28/ipad-ed-ipad-mini.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/28/ipad-ed-ipad-mini.aspx#comments</comments>
		<pubDate>Sun, 28 Oct 2012 22:10:07 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2113</guid>
		<description><![CDATA[Qualche giorno fa ho letto una statistica secondo la quale più del 50% degli acquirenti del “Nuovo iPad”, quello con il display retina, è piuttosto arrabbiata per il fatto che circa 7 mesi dopo Apple ha messo sul mercato una nuova versione di iPad, ovvero l’iPad Mini da 7 pollici. Sette mesi sono troppo pochi, [...]]]></description>
				<content:encoded><![CDATA[<p>Qualche giorno fa ho letto una statistica secondo la quale più del 50% degli acquirenti del “Nuovo iPad”, quello con il display retina, è piuttosto arrabbiata per il fatto che circa 7 mesi dopo Apple ha messo sul mercato una nuova versione di iPad, ovvero l’iPad Mini da 7 pollici. Sette mesi sono troppo pochi, dicono quei clienti arrabbiati</p>
<p>Lasciate che vi spieghi una cosa semplice semplice.</p>
<p>Innanzitutto non è assolutamente obbligatorio inseguire per forza l’ultimo modello, di qualunque prodotto Apple si tratti.</p>
<p>Seconda cosa, voi vi eravate abituati bene. Solitamente Apple faceva uscire UN prodotto, al massimo si poteva lasciare il taglio della memoria (8, 16, 32 GB e così via), ma non c’era molta varietà: iPhone è iPhone, iPod è iPod, iPad è iPad. Questo è il bello ed il brutto di Apple: se ti piace il loro prodotto – cosa molto probabile – allora lo acquisti senza pensarci due volte, e senza nemmeno metterci troppa testa, proprio perchè non c’è nulla da scegliere. Entri in negozio, chiedi un iPhone e te lo danno. Se invece il prodotto non ti piace, ancora meglio: te ne stai alla larga, non lo compri ed il gioco è finito.</p>
<p>Con la scomparsa di Steve Jobs, Apple non è più una forza innovatrice come lo è sempre stata. E da questo punto di vista – e per molti altri – si è adagiata ad essere una delle tante case produttrici di hardware/software del mondo. La più ricca, la più prestigiosa, la più cool: ma pur sempre una produttrice di hardware/software. Ma non innova più come faceva un tempo. Senza Steve Jobs, e mi dispiace dirlo, è tutta un’altra cosa.</p>
<p>Una delle dirette conseguenze di questa nuova posizione di Apple sul mercato è che sta introducendo tutta una serie di prodotti hardware che prima evitava con cura. Per farla breve: Steve Jobs non avrebbe mai permesso la produzione di iPad Mini. E per la prima volta gli utenti Apple se vogliono un iPad sono di fronte ad una scelta: mi conviene l’iPad classico oppure il Mini? Prima andavano a botta sicura: quando esce una nuova versione di iPad, buttavano/vendevano il vecchio e prendevano il nuovo. Adesso non è più assolutamente la stessa cosa. A seconda delle proprie esigenze, uno può preferire il 10 pollici ed il 7 pollici. Ognuno ha pro e contro.</p>
<p>C’è da scegliere, da valutare, pensare se magari te lo devi portare in giro, e se sì con quale frequenza. C’è da capire se la risoluzione per te conta (uno è retina, l’altro no), c’è da capire se ci sta nella tua borsa o zaino. Devi capire cos’è importante per te, cosa intendi tu per “tablet”. Prima era Apple che decideva per te, ed in primis Steve Jobs. C’è da metterci la testa, insomma.</p>
<p>E gli utenti Apple a tutto questo non sono per nulla abituati.</p>
<p>E si lamentano. Spiacenti, ma questo è il mondo vero.</p>
<p>Questa è la nuova Apple. E per fortuna che è così.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/28/ipad-ed-ipad-mini.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advertising delle app Windows Phone</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/22/advertising-delle-app-windows-phone.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/22/advertising-delle-app-windows-phone.aspx#comments</comments>
		<pubDate>Mon, 22 Oct 2012 13:55:37 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2111</guid>
		<description><![CDATA[Mi sono scontrato con due problemi, secondo me piuttosto oscuri, mentre lavoravo sull’advertising di una mia app per Windows Phone. Piuttosto oscuri perchè su Internet ho trovato ben poco. Parto dal presupposto che sappiate già di cosa parlo: controllo AdControl, registrazione su PubCenter, qualche concetto di XAML, capabilities di un’app Windows Phone, etc. Il primo [...]]]></description>
				<content:encoded><![CDATA[<p>Mi sono scontrato con due problemi, secondo me piuttosto oscuri, mentre lavoravo sull’advertising di una mia app per Windows Phone. Piuttosto oscuri perchè su Internet ho trovato ben poco.</p>
<p>Parto dal presupposto che sappiate già di cosa parlo: <a href="http://msdn.microsoft.com/en-us/library/advertising-mobile-windows-phone-adcontrol-silverlight-class(v=msads.20).aspx" target="_blank">controllo AdControl</a>, registrazione su <a href="https://pubcenter.microsoft.com/" target="_blank">PubCenter</a>, qualche concetto di XAML, capabilities di un’app Windows Phone, etc.</p>
<p><strong><font color="#ff0000">Il primo problema è il seguente: nonostante voi mettiate il controllo AdControl sulla vostra pagina XAML, quando mandate in esecuzione l’app esso improvvisamente scompare.</font></strong> Questo vale sia all’interno del simulatore, sia su un device vero e proprio. E continua a valere anche se impostate i valori delle seguenti proprietà:</p>
<ul>
<li>proprietà <strong>ApplicationId</strong> a “test_client”</li>
<li>proprietà <strong>AdUnitId</strong> a “Image480_80”</li>
</ul>
<p>Questo due valori permettono di testare il motore di advertising, senza realmente accedere ai banner pubblicitari veri e propri. A design-time vedete il vostro bel controllo, ma se mandate in esecuzione sparisce tutto nel giro di un decimo di secondo. Attenzione: non sto dicendo che non vedete alcun banner: è proprio il controllo che sparisce dalla Page. Beh, se questa cosa capita anche a voi, fate una bella cosa: sottoscrivete l’evento <strong>ErrorOccured</strong> nello XAML e nel code-behind della pagina potete semplicemente scrivere (vado a memoria):</p>
<p><em><font color="#0000ff">MessageBox.Show(e.Error.ToString())</font></em></p>
<p>Nel mio caso, mancavano alcune capabilities necessarie per far funzionare l’advertising, ovvero:</p>
<ul>
<li>ID_CAP_PHONEDIALER</li>
<li>ID_CAP_IDENTITY_USER</li>
<li>ID_CAP_MEDIALIB</li>
<li>ID_CAP_WEBBROWSERCOMPONENT</li>
</ul>
<p>Se non mettete queste capabilities nella vostra app, l’advertising non andrà mai.</p>
<p>L’altro problema, invece, è ancora più oscuro, almeno fintantochè non trovate e capite la soluzione. Sempre grazie all’evento <strong>ErrorOccured</strong> citato prima, potreste ottenere una AdException con pressapoco un errore simile a “<strong><font color="#ff0000">An unexpected error occured during response processing (Name: ECN)</font></strong>”. <strong><font color="#008040">Non state a sbatterci la testa: impostate la lingua del telefono su inglese e riprovate.</font></strong> Se funziona, significa che le categorie impostate sulla unità di annunci non hanno banner per la lingua italiana. Quindi o tornare su PubCenter e provate a cambiare categorie, oppure boh! L’importante è che avete capito è che non avete un errore nel codice o nello XAML della vostra app, ma è semplicemente qualcosa che riguarda la configurazione del vostro advertising server-side. A meno che, chiaramente, non dobbiate cambiare ApplicationId o AdUnitId nello XAML.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/22/advertising-delle-app-windows-phone.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generare il QRCode di un link</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/19/generare-il-qrcode-di-un-link.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/19/generare-il-qrcode-di-un-link.aspx#comments</comments>
		<pubDate>Fri, 19 Oct 2012 20:46:45 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2104</guid>
		<description><![CDATA[Lo sapevate che con un semplice blocco HTML come questo: &#60;img src="http://chart.apis.google.com/chart?cht=qr&#38;chs=100x100&#38;chl=&#60;URL&#62;" /&#62; si genera automaticamente il QRCode relativo all’url stesso? Io non lo conoscevo, ed è banalmente la tecnica che ho utilizzato all’interno del mio nuovo blog WordPress per generare il QRCode di ogni post. Ho evitato l’utilizzo di plug-in di terze parti, ma [...]]]></description>
				<content:encoded><![CDATA[<p>Lo sapevate che con un semplice blocco HTML come questo:</p>
<pre>&lt;img src=<span class="str">"http://chart.apis.google.com/chart?cht=qr&amp;chs=100x100&amp;chl=&lt;URL&gt;"</span> /&gt;</pre>
<p>si genera automaticamente il QRCode relativo all’url stesso? Io non lo conoscevo, ed è banalmente la tecnica che ho utilizzato all’interno del mio nuovo blog WordPress per generare il QRCode di ogni post. Ho evitato l’utilizzo di plug-in di terze parti, ma ho semplicemente modificato qualche file .PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/19/generare-il-qrcode-di-un-link.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ci sono sere nelle quali</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/19/ci-sono-sere-nelle-quali.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/19/ci-sono-sere-nelle-quali.aspx#comments</comments>
		<pubDate>Fri, 19 Oct 2012 20:33:52 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My personal life]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2102</guid>
		<description><![CDATA[Ci sono sere nelle quali hai mille pensieri per la testa, ma non riesci a focalizzarne nessuno. E quindi ti ritrovi a battere velocemente i tasti sulla tastiera del tuo desktop, così, tanto per passare il tempo. Perchè ho sempre creduto che i post migliori siano quelli nati di getto, con mille pensieri per la [...]]]></description>
				<content:encoded><![CDATA[<p>Ci sono sere nelle quali hai mille pensieri per la testa, ma non riesci a focalizzarne nessuno. E quindi ti ritrovi a battere velocemente i tasti sulla tastiera del tuo desktop, così, tanto per passare il tempo. Perchè ho sempre creduto che i post migliori siano quelli nati di getto, con mille pensieri per la testa.</p>
<p><a href="http://www.amazon.it/stella-nera-York-Lain-ebook/dp/B009M34S0O/ref=sr_1_1?ie=UTF8&amp;qid=1350676616&amp;sr=8-1" target="_blank">Sto leggendo questo libro</a>, <strong>La stella Nera di New York</strong>. Adoro i libri scritti dalle donne, soprattutto questo (che comunque devo ancora terminare), perchè sono più ricchi di ironia, di storia. Mai ho trovato un giallo scritto da un uomo mi ha fatto nascere un sorriso perchè c’è una battuta ironica, oppure una particolare disavventura, una situazione particolare.</p>
<p>Una volta, quando lavoravo a Milano, per assurdo avevo più tempo per leggere. Quando devi affrontare ogni giorno un viaggio di A/R sulla metropolitana, verde o gialla che sia, devi trovare il modo di occupare il tempo. Ho trovato il tempo di leggere i primi cinque libri di Harry Potter, più qualcuno di Stephen King, più tanti altri ancora. Non avevo ancora un Kindle, andava ancora il cartaceo, per cui nello zaino avevo qualche peso in più. Ma era bello. E dopo un po’ il tuo corpo si abitua alle accelerazioni ed al rollìo del treno della metropolitana, addirittura senza mani, perchè a volte i libri erano corpulenti e bisognava tenerli con due mani. Oggi sarebbe diverso. Ed oggi, seppur lavori da casa per la stragrande maggior parte del tempo, ho meno tempo di leggere. Perchè alla fine, finito il lavoro, si rimane davanti al pc a portare avanti progetti personali, idee, cazzeggiando qua e là.</p>
<p>Quando trovo il tempo di leggere? La sera, a letto, prima di addormentarmi. A volte la domenica mattina. Uno, due capitoli per volta. Sono lontane le sessioni di lettura di ore ed ore che facevo una volta, quando forse i libri mi prendevano di più. Ma mi va bene così, sinceramente. Il fatto che non io non legga più come una volta non significa affatto che abbia meno tempo libero.</p>
<p>Ci sono sere nelle quali l’unico modo che ho per tenermi compagnia è battere tasti. Mi chiedo, per esempio, se riuscirò mai nella “grande” impresa – che ogni tanto mi frulla nella testa, spesso – di scrivere un racconto serio, magari di 50-60 pagine. Perchè di idee non ne ho tante. Ma quelle che ho mi piacciono, e penso che possano portare da qualche parte. Qualche parte dove? Non parlo di soldi e chissà quale successo: parlo di soddisfazione personale, per gridare a me stesso “ce l’ho fatta”. Nulla di più di questo. Forse la causa principale per cui non riesco è il non essere in grado di switchare da una mentalità tecnica (data dal mio lavoro) ad una mentalità invece più adatta a scrivere un romanzo breve. Senza considerare che quando stai al pc per tutta la giornata, non è proprio il massimo entrare nell’ottica di dover continuare per scrivere, scrivere, scrivere. E quindi ogni volta cedo.</p>
<p>Ci sono sere nelle quali ascolto musica, oltre allo scrivere, come stasera. E’ cambiato anche il mondo della musica, porca miseria. Adesso pago una subscription mensile, e posso ascoltare/scaricare tutta la musica che voglio. E qui i generi spaziano: si va dal rock al jazz, alla musica leggera italiana a qualche altro successo così…estemporaneo…la tipica canzone che ha successo in quel momento.</p>
<p>Ci sono sere nelle quali, finalmente, il tempo è passato. Ed è giunta l’ora di cliccare su Pubblica, per inviare questo nuovo post al mondo.</p>
<p>Grazie, blog, per avermi tenuto compagnia.</p>
<p>Grazie, lettori, per essere con me!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/19/ci-sono-sere-nelle-quali.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployare applicazioni Lightswitch</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/18/deployare-applicazioni-lightswitch.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/18/deployare-applicazioni-lightswitch.aspx#comments</comments>
		<pubDate>Thu, 18 Oct 2012 19:44:21 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2100</guid>
		<description><![CDATA[Uno dei diretti vantaggi acquisiti con la migrazione del mio blog da Subtext a WordPress, come dicevo qualche giorno fa, è che adesso ho potuto switchare il mio hosting da .NET 3.5 a .NET 4.x. E con questo, quindi, anche la possibilità di deployare applicazioni Lightswitch. In tal senso, ho trovato molto utile seguire questo [...]]]></description>
				<content:encoded><![CDATA[<p>Uno dei diretti vantaggi acquisiti con la migrazione del mio blog da Subtext a WordPress, come dicevo qualche giorno fa, è che adesso ho potuto switchare il mio hosting da <strong>.NET 3.5</strong> a <strong>.NET 4.x</strong>.</p>
<p><strong><font color="#008040">E con questo, quindi, anche la possibilità di deployare applicazioni Lightswitch.</font></strong></p>
<p>In tal senso, ho trovato molto utile <a href="http://www.machinadei.com/md/2011/09/15/deploying-a-lightswitch-application-to-winhost-com/" target="_blank">seguire questo articolo</a>: sebbene sia del 15 Settembre 2011, poco più di un anno fa, fornisce tutte le informazioni di cui si ha bisogno. <strong>Aggiungo solo una piccola cosa per chi sta già usando Windows 8.</strong></p>
<p>Il modo più comodo per amministrare l’hosting è utilizzare la console IIS installata in locale sul proprio PC che, oltre ovviamente a poter gestire l’istanza locale, si connette in modo remoto ad un IIS esposto su Internet. Questa funzionalità <strong>non è attiva</strong> by default, ma è necessario installare un piccolo add-on per l’IIS Console, <a href="http://www.iis.net/downloads/microsoft/iis-manager" target="_blank">scaricabile da questo indirizzo</a>. In fondo alla pagina trovate i vari download disponibili, nelle varie lingue e nei due formati x86 e x64. L’installer è un semplice file <strong>inetmgr_amd64.msi</strong> da eseguire ed installare sul proprio PC: <strong><font color="#ff0000">se usate Windows 8, riceverete un errore in fase di setup</font></strong>, dicendo che tale installer è supportato solo su Windows Server e su Windows 7. Nessuna paura: basta raggiungere il file, entrare nelle proprietà, spostarsi sotto il tab <strong>Compatibilità</strong> e selezionare l’unica voce disponibile, ovvero “Previous version of Windows” o “Versione precedente di Windows”, in italiano. In questo modo l’installer parte e la vostra console IIS locale, a questo punto, ha la possibilità di connettersi ad un sito remoto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/18/deployare-applicazioni-lightswitch.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tablet, Surface, evoluzione</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/18/tablet-surface-evoluzione.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/18/tablet-surface-evoluzione.aspx#comments</comments>
		<pubDate>Thu, 18 Oct 2012 13:34:46 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2094</guid>
		<description><![CDATA[Mamma mia, come corre il nostro mondo digitale. Facciamo un gioco. Se vi chiedessi la definizione di “tablet”, cosa mi rispondereste? Sono assolutamente convinto del fatto che se avessi la macchina del tempo e facessi questa domanda a quattro persone provenienti da anni diversi, le risposte sarebbero diverse. Ma facciamola breve. La mia personale definizione [...]]]></description>
				<content:encoded><![CDATA[<p>Mamma mia, come corre il nostro mondo digitale. Facciamo un gioco. <strong>Se vi chiedessi la definizione di “tablet”, cosa mi rispondereste?</strong> Sono assolutamente convinto del fatto che se avessi la macchina del tempo e facessi questa domanda a quattro persone provenienti da anni diversi, le risposte sarebbero diverse. Ma facciamola breve.</p>
<p>La mia personale definizione di “tablet” indica un dispositivo leggero, portatile, da usare ovunque, in mobilità e non. L’interazione con un tablet avviene tramite lo schermo touch, il cui sistema operativo è stato progettato e realizzato tenendo ben presente che l’utente lo utilizzerà con le dita. Tutte le funzionalità di sistema e tutte le app sono utilizzate con le dita. <strong><span style="color: #f79646;">L’utilizzo di un tablet avviene solo in modalità “scanzonata”</span></strong> (<em>tutti i diritti su questa parola sono riservati</em>): intendo dire che si usano le dita, e che comunque usare app su un tablet non deve richiedere particolare attenzione, non deve richiedere una superficie piana ed ovviamente nessuna particolare “precisione sullo schermo”. Un tablet posso usarlo <em><span style="color: #ff0000;">sbragato</span></em> sul letto o sul divano davanti alla tv, per esempio. Lo posso usare tenendolo appoggiato sulle gambe accavallate, in un bar, oppure in un palazzetto sportivo. Posso usarlo in piedi, durante una fiera come speaker, o in mezzo alla gente per prendere prenotazioni o appunti su qualcosa. <strong><span style="color: #ff0000;">Poco importa se opzionalmente ci posso collegare tastiera Bluetooth, oppure un mouse</span></strong>, se il sistema operativo non supporta appieno questi dispositivi di input per svolgere il 100% delle operazioni siamo punto e a capo. Un tablet lo <strong>devi</strong> usare solo con le dita. <strong><span style="color: #ff0000;">Non appena allontani le dita dallo schermo, magari per usare una tastiera fisica, in realtà ci si accorge che ogni minima operazione richiede il touch</span></strong>, per cui occorre quasi immediatamente tornare a <em>tappare</em> sul display. Questo perchè banalmente ci sono elementi dell’interfaccia utente non raggiungibili se non attraverso il touch.</p>
<p><a href="http://it.wikipedia.org/wiki/Assioma" target="_blank">Assioma</a>: <strong>l’unità minima indirizzabile su uno schermo da un utente su un tablet è la dimensione del suo polpastrello.</strong></p>
<p>Questo è ciò che io considero un tablet. Inutile dire che leader indiscusso di questa categoria è iPad.</p>
<p><strong>Windows 8 è un sistema operativo nato per unire i mondi.</strong> Prendiamo Surface RT che – lo sappiamo – monta a bordo Windows RT. Lo puoi usare con tastiera, mouse &amp; touch. Windows RT nativamente supporta al 100% tutte e tre le modalità di utilizzo, senza alcun deficit nel passare dall’uno all’altro. La modalità di interazione touch è solo una delle possibilità, ma non è assolutamente necessaria. Chiunque di voi abbia già provato Windows 8 sul proprio PC desktop non-touch sa benissimo che questo è vero. La famigerata Start Page è perfettamente utilizzabile con tastiera &amp; mouse. <a href="http://blog.vivendobyte.net/blog/archive/2012/03/01/windows-8-consumer-preview-e-lassenza-del-men-start.aspx" target="_blank">Leggere questo mio vecchio post di Marzo 2012</a>. Qui qualcuno di voi comincerà a storcere il naso: ma come – starete dicendo – Surface RT permette l’utilizzo di app esclusivamente di tipo <span style="text-decoration: line-through;"><span style="color: #ff0000;">Metro</span></span> Windows Store Apps, devo per forza usare il touch!!!! <strong><span style="color: #ff0000;">Falsissimo.</span></strong> Le app Windows Store sono e <strong>devono essere perfettamente utilizzabili</strong> anche con tastiera &amp; mouse, proprio perchè <strong><span style="color: #008040;">nella fisolofia Windows 8 l’utente deve poter cambiare dispositivo di input senza perdere appeal o feeling nei confronti del dispositivo</span></strong> e dell’app stessa. E’ per questo motivo che il team che controlla e valida le app per lo Windows Store le controlla anche con tastiera &amp; mouse. Su Surface devono esistere “app scanzonate”, come dicevamo prima, ma non solo. Assolutamente non solo. <strong><span style="color: #008040;">Io, per esempio, auspico che sullo Windows Store arrivino app come Paint.NET ed Audacity</span></strong>, per citarne due a caso, che adoro. La prima è un’applicazione di grafica freeware irrinunciabile, la seconda è un’applicazione di editing audio freeware ed open-source. Per essere sfruttate appieno, probabilmente bisogna usarle con tastiera &amp; mouse, e non il touch, ma io le voglio sullo store, perchè un dispositivo ARM con Windows 8 prevede non solo il touch. Su un tablet, da usare con le dita, app così non avrebbero senso.</p>
<p><a href="http://it.wikipedia.org/wiki/Assioma" target="_blank">Assioma</a>: <strong>l&#8217;unità minima indirizzabile su uno schermo da un utente su Surface è il polpastrello se lo sta usando in modalità touch, il pixel se lo sta usando con tastiera e/o mouse.</strong></p>
<p>La morale di tutto questo è riassumibile con poche frasi.</p>
<ol>
<li>Un dispositivo il cui display è touch non è assolutamente per forza un tablet (se così fosse, tra circa 4 mesi ci ritroveremo con milioni e milioni di tablet Windows 8 in giro per il mondo, il che è falso: sono pc, ultrabook convertibili, che hanno lo schermo touch – ma non tutti sono tablet)</li>
<li>Su iPad, tablet per eccellenza, hanno senso solo “app scanzonate”</li>
<li>Su computer Windows RT hanno senso sia “app scanzonate”, sia app dalla usability più tradizionale (tastiera &amp; mouse), che però girano nello stile delle app Windows Store</li>
<li>Surface non è un tablet</li>
</ol>
<p>Per tutti questi ragionamenti, io non paragono il prezzo di Surface a quelli di un tablet, ma a quelli di un pc. Perchè ciò che conta non sono tanto le app disponibili (che comunque devono crescere di numero), ed il fatto che il processore sia un ARM piuttosto che un “vero x86: <strong><span style="color: #008040;">ciò che conta sono le modalità con cui interagisci con il dispositivo</span></strong>. E Surface non è un tablet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/18/tablet-surface-evoluzione.aspx/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Seguite la pallavolo femminile? Diretta Volley vi aiuta!</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/16/seguite-la-pallavolo-femminile-diretta-volley-vi-aiuta.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/16/seguite-la-pallavolo-femminile-diretta-volley-vi-aiuta.aspx#comments</comments>
		<pubDate>Tue, 16 Oct 2012 17:02:00 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2092</guid>
		<description><![CDATA[Nei mesi scorsi ho sviluppato l’app Diretta Volley per Windows Phone, che vi permette di seguire in real-time gli incontri della regular season di pallavolo femminile, per ora solamente di Serie A1. L’app è ovviamente gratuita e, se avete un qualsiasi smartphone Windows Phone e vi interessa la pallavolo, fa al caso vostro. La potete [...]]]></description>
				<content:encoded><![CDATA[<p>Nei mesi scorsi ho sviluppato l’app <strong>Diretta Volley</strong> per Windows Phone, che vi permette di seguire in real-time gli incontri della regular season di pallavolo femminile, per ora solamente di Serie A1. L’app è ovviamente gratuita e, se avete un qualsiasi smartphone Windows Phone e vi interessa la pallavolo, fa al caso vostro.</p>
<p><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none;border-left-style: none;border-bottom-style: none;border-right-style: none" alt="Sorriso" src="http://blog.vivendobyte.net/blog/wp-content/uploads/2012/10/wlEmoticon-smile.png" /></p>
<p>La potete scaricare <a href="http://www.windowsphone.com/it-it/store/app/diretta-volley/b0541997-ed5f-42a1-9aea-4a3e6dd55064" target="_blank">a questo indirizzo</a>.</p>
<p>Ecco alcune delle caratteristiche principali:</p>
<ul>
<li>potete seguire i punteggi delle gare in corso, e sapere le prossime gare del campionato </li>
<li>potete seguire <a href="https://twitter.com/MezzoTempo" target="_blank">l’account Twitter MezzoTempo</a>, che vi mantiene aggiornati sul mondo della pallavolo, ed in alcuni casi straordinari vi dà la twit-cronaca degli incontri più importanti</li>
<li>potete sottoscrivere una o più squadre del campionto per ricevere in diretta gli aggiornamenti tramite Live Tile, senza quindi dover tenere aperta l’app </li>
</ul>
<p><strong>Diretta Volley</strong> è un’app in costante aggiornamento. La 1° giornata di campionato è sabato 20 ottobre (anticipo tra <a href="http://www.volleybusto.com/" target="_blank">Yamamay Busto Arsizio</a> e <a href="http://www.cuattovolley.com/" target="_blank">Banca Reale Yoyogurt Giaveno</a>), con tutte le altre gare il giorno dopo, domenica 21. Per questa prima giornata prevedo qualche ora di testing e bug-fixing, ma conto di poter fixare tutto in breve tempo: purtroppo aver sviluppato ed ideato l’app in un periodo fuori dal campionato ha i suoi svantaggi. <strong>VivendoByte</strong> ve lo promette!</p>
<p><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none;border-left-style: none;border-bottom-style: none;border-right-style: none" alt="Sorriso" src="http://blog.vivendobyte.net/blog/wp-content/uploads/2012/10/wlEmoticon-smile.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/16/seguite-la-pallavolo-femminile-diretta-volley-vi-aiuta.aspx/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>E cos&#236;, son tornato a WordPress</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/15/e-cos-son-tornato-a-wordpress.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/15/e-cos-son-tornato-a-wordpress.aspx#comments</comments>
		<pubDate>Mon, 15 Oct 2012 16:15:30 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My daily work]]></category>

		<guid isPermaLink="false">http://blog.vivendobyte.net/blog/?p=2089</guid>
		<description><![CDATA[Se state leggendo questo post, significa che state leggendo il mio nuovo blog, Technology Experience (Reborn 4), la quarta generazione del mio blog. Per fare un breve riassunto (ogni tanto è bello tornare alle origini): primo blog, hostato su UGIdotNET, con Subtext secondo blog, indipendente, su Webhost4life, sempre con Subtext terzo blog, migrato su Winhost, [...]]]></description>
				<content:encoded><![CDATA[<p>Se state leggendo questo post, significa che state leggendo il mio nuovo blog, <strong>Technology Experience (Reborn 4)</strong>, la quarta generazione del mio blog. Per fare un breve riassunto (ogni tanto è bello tornare alle origini):</p>
<ul>
<li>primo blog, hostato su <a href="http://blogs.ugidotnet.org/" target="_blank">UGIdotNET</a>, con Subtext</li>
<li>secondo blog, indipendente, su <a href="http://www.webhost4life.com/" target="_blank">Webhost4life</a>, sempre con Subtext</li>
<li>terzo blog, migrato su <a href="http://www.winhost.com" target="_blank">Winhost</a>, sempre con Subtext</li>
<li><strong>quarto blog, quello attuale, sempre su Winhost, questa volta con </strong><a href="http://www.google.it/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;frm=1&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CCIQFjAA&amp;url=http%3A%2F%2Fit.wordpress.com%2F&amp;ei=PDJ8UIKjGofzsgaXuoDYBg&amp;usg=AFQjCNGrS6vcSwaDV5rKGDzvx4-7xnzF1Q" target="_blank"><strong>WordPress</strong></a></li>
</ul>
<p>Ma perchè nel titolo ho messo “<em>tornato a WordPress</em>”, quando invece sembra essere la prima volta che lo uso? Non è proprio così: c’è stato un breve periodo (un paio di mesi) in cui avevo lo avevo già adottato, abbandonandolo quasi subito a causa del cambiamento del service provider su cui mi appoggiavo. Troppo lungo da spiegare adesso, ed è inutile rivangare adesso. <a href="http://blog.vivendobyte.net/blog/archive/2010/06/24/se-leggete-questo-state-leggendo-il-mio-nuovo-blog.aspx" target="_blank">In questo mio vecchio post</a>, se vi interessa, trovate qualche info in più.</p>
<p><strong>Perchè questo weekend ho deciso di fare il grande balzo?</strong> E’ presto detto: <strong><font color="#ff0000">Subtext</font></strong>, il blog-engine che mi ha accompagnato per tanti anni, <strong><font color="#ff0000">mi costringeva a mantenere l’adozione del .NET Framework sulla piattaforma di hosting alla versione 3.5</font></strong>, chiudendomi un po’ le porte. Il pannello di controllo di Winhost permette ovviamente di switchare a versioni più recenti del framework, ma se provavo ad impostarlo su 4.x, ecco che Subtext smetteva di funzionare. Come ben sanno le persone che mi leggono, le mie esperienze con lo sviluppo Web non sono granchè, quindi invece che sbattere la testa per capire il problema, ho sempre preferito ignorare il tutto a tempi migliori.</p>
<p>C’è un altro motivo per cui ho deciso di fare il grande salto: <strong><font color="#ff0000">quando migrai a suo tempo su Winhost</font></strong>, ormai qualche anno fa, <strong><font color="#ff0000">non c’era la possibilità di avere MySQL come database engine</font></strong>. E quindi questo chiudeva le porte all’adozione di WordPress. Oggi invece la situazione è ben diversa.</p>
<p>Così venerdì sera, senza alcun preavviso, mi sono quindi reso conto di aver tutti i requisiti necessari per migrare a WordPress: Winhost supporta tranquillamente PHP e mi dà MySQL (100 database, per un totale di 2,5GB di spazio complessivo su tutti i database). E non solo: <a href="http://www.codewrecks.com/blog/index.php/2012/03/24/move-blog-post-from-subtext-to-wordpress-with-metaweblog-api/" target="_blank">grazie a questa utility di Gian Maria Ricci</a>, è stato anche abbastanza semplice effettuare la migrazione. L’unica nota dolente è stata la perdita di tutti i commenti, che comunque – lo ammetto – negli ultimi tempi erano davvero pochi pochini. Quindi, dopo attenta riflessione, e dopo aver deglutito un po’ di volte, un passo alla volta, ecco il mio nuovo blog online.</p>
<p><strong><font color="#008040">E dato che c’ero, ho dato una rispolverata grafica al tutto. Aprofittando dell’innovazione stilistica e grafica apportata da Microsoft sui suoi prodotti</font></strong>, ho ridisegnato il mio logo e ho fatto un po’ di pulizia sui miei server. Anche la mia homepage <a href="http://www.vivendobyte.net/" target="_blank">è stata modificata con il nuovo stile</a>.</p>
<p>Detto questo, non penso che mi sposterò più da WordPress, fino alla fine dei miei giorni. WordPress è decisamente una piattaforma di blogging matura, completa, ricca di template e plugin. Non c’è alcun motivo per preferire un altro blog-engine, a meno che non abbiate esigenze particolari.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/15/e-cos-son-tornato-a-wordpress.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ho dato spazio alla mia creatività: VivendoByte Emotion</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/10/13/ho-dato-spazio-alla-mia-creativita-vivendobyte-emotion.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/10/13/ho-dato-spazio-alla-mia-creativita-vivendobyte-emotion.aspx#comments</comments>
		<pubDate>Fri, 12 Oct 2012 21:10:38 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My personal life]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=6</guid>
		<description><![CDATA[Lo so, lo so, voi tutti probabilmente mi leggete perchè sviluppo app per Windows Phone e per Windows 8, perchè lavoro per Brain-Sys, perchè non me la cavo con la grafica. Insomma, pù che altro per la mia natura da dev, con zero capacità artistiche. Beh, per una volta mi son voluto sbizzarrire pure io. [...]]]></description>
				<content:encoded><![CDATA[<p>Lo so, lo so, voi tutti probabilmente mi leggete perchè sviluppo app per Windows Phone e per Windows 8, perchè lavoro per <a href="http://www.brain-sys.it" target="_blank" title="">Brain-Sys</a>, perchè non me la cavo con la grafica. Insomma, pù che altro per la mia natura da dev, con zero capacità artistiche.</p>
<p>Beh, per una volta mi son voluto sbizzarrire pure io. Ho creato una serie di video dedicati al mio brand <strong>VivendoByte</strong>; brand nel senso che è il marchio ideato ormai alcuni anni fa, ed è il nome che rappresenta il mio blog, il publisher con cui pubblico app per Windows Phone, è il nome del mio dominio. Insomma, VivendoByte è il nome che mi rappresenta sulla Rete.</p>
<p>Quindi, perchè non dare un look diverso al mio logo? Perchè non seguire il rinnovamento apportato da Microsoft a Windows 8, dando una rinnovata anche al mio? Ecco quindi ciò che ho creato in pochi giorni.</p>
<p>VivendoByte Emotion &#8211; Spot 01</p>
<div class="separator" style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="305" src="http://www.youtube.com/embed/_bdd7e5C8_I" frameborder="0" allowfullscreen=""></iframe></div>
<p> VivendoByte Emotion &#8211; Spot 02</p>
<div class="separator" style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="305" src="http://www.youtube.com/embed/Ej0a41aJbsI" frameborder="0" allowfullscreen=""></iframe></div>
<p> VivendoByte Emotion &#8211; Spot 04</p>
<div class="separator" style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="305" src="http://www.youtube.com/embed/yG3xvVplsNg" frameborder="0" allowfullscreen=""></iframe></div>
<p> VivendoByte Emotion &#8211; Spot 05</p>
<div class="separator" style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="305" src="http://www.youtube.com/embed/CZqGNkWRYdk" frameborder="0" allowfullscreen=""></iframe></div>
<p> VivendoByte Emotion &#8211; Spot 06</p>
<div class="separator" style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="305" src="http://www.youtube.com/embed/hdMoqVCIIXo" frameborder="0" allowfullscreen=""></iframe></div>
<p> </p>
<div style="text-align: right; font-size: small; clear: both;" id="blogsy_footer"><a href="http://blogsyapp.com/" target="_blank"><img src="http://blogsyapp.com/images/blogsy_footer_icon.png" alt="Postato con Blogsy da iPad" style="vertical-align: middle; margin-right: 5px;" width="20" height="20">Postato con Blogsy da iPad</a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/10/13/ho-dato-spazio-alla-mia-creativita-vivendobyte-emotion.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I miei prossimi acquisti sul fronte Windows 8 e Windows Phone</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/29/i-miei-prossimi-acquisti-sul-fronte-windows-8-e-windows-phone.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/29/i-miei-prossimi-acquisti-sul-fronte-windows-8-e-windows-phone.aspx#comments</comments>
		<pubDate>Fri, 28 Sep 2012 20:22:47 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=8</guid>
		<description><![CDATA[Come ben sapete, l’autunno sul fronte Microsoft è davvero molto caldo per tutta una serie di nuove uscite hardware e software che sono davvero imperdibili. Ho molto entusiasmo soprattutto per quanto riguarda Windows 8, e per tutto ciò che comporta: in primis Surface e tutti i nuovi ultrabook di nuova generazione. Insomma, soldi da spendere [...]]]></description>
				<content:encoded><![CDATA[<p>Come ben sapete, l’autunno sul fronte Microsoft è davvero molto caldo per tutta una serie di nuove uscite hardware e software che sono davvero imperdibili. Ho molto entusiasmo soprattutto per quanto riguarda Windows 8, e per tutto ciò che comporta: in primis <a href="http://www.microsoft.com/surface/en/us/default.aspx" target="_blank">Surface</a> e tutti i nuovi ultrabook di nuova generazione. Insomma, soldi da spendere ne voleranno parecchi (purtroppo, almeno per le mie tasche, visto che non dispongo di fondi illimitati), per cui l’intento di questo post è quello di buttare giù qualche idea da convidere con tutti voi. Dunque, vediamo…gli elementi sul piatto sono tre:</p>
<ol>
<li>un nuovo ultrabook convertibile x86 (ultrabook/tablet) per lavoro e per hobby </li>
<li>un tablet con Windows RT, preferibilmente Surface RT </li>
<li>un nuovo telefono Windows Phone 8 </li>
</ol>
<p><strong>Di questi, obbligatorio è sicuramente il punto (1)</strong>. Il mio notebook attuale è piuttosto datato (estate 2009), ed ormai è inservibile, anche solo per il fatto che ormai lo utilizzo senza batteria, sempre collegato all’alimentazione. E da parecchi mesi. Inoltre è lento, non sfrutta appieno le caratteristiche di Windows 8, e via discorrendo. Ultimo punto: lavoro principalmente da casa, con un desktop multi-monitor; l’ultrabook mi servirebbe solo nelle giornate di trasferta, per cui non mi serve nulla di particolarmente pretenzioso, veloce e potente. E sì, conterrà ahimé un totalmente inaffidabile SSD, ma come ho già detto non sarà mai il mio pc principale di lavoro, per cui…accettabile.</p>
<p>Passiamo al punto (3). Windows Phone mi piace, mi piace davvero tanto. Sia dal punto di vista utente, sia dal punto di vista developer. Mi piace sviluppare app per Windows Phone, mi piace usarlo, mi piace il suo lato social. Di Windows Phone mi piace tutto. <strong>E quindi penso proprio che prenderò un nuovo telefono Windows Phone 8</strong>. I Nokia sono sicuramente un passo avanti dal punto di vista sia hardware che software, ma francamente io preferisco altro. Sono uno di quelli che va sempre in giro con due (a volte persino tre) batterie, per cui esigo un telefono che nell’arco della giornata mi permetta di cambiare batteria per essere sempre online.</p>
<p><strong><font color="#ff0000">Infine, la nota dolente, il punto (2).</font></strong></p>
<p>L’idea è quella di avere un tablet leggero, che possa sostituire iPad. L’idea, da parecchi mesi, è quella di avere un Surface RT. L’idea è quella di poter twittare, di poter scrivere sul blog (cosa impossibile da fare con iPad e la sola UI touch), di fare qualche partita. Ma ad oggi (28 Settembre) non si sa ancora il prezzo, nè in dollari, nè in euro. Quindi, cosa farò? E’ facile a dirsi. <strong><font color="#008000">Se il prezzo è contenuto (circa 300 euro) probabilmente sarà mio.</font></strong> <strong><font color="#ff0000">Se sarà superiore, probabilmente skipperò questo acquisto.</font></strong> La cosa triste è l’aspetto commerciale che Microsoft ha improntato alla cosa: secondo me è assurdo che non si sappia ancora il prezzo, a probabilmente meno di un mese dall’uscita ufficiale. Se fai un evento che presenta un prodotto (anche se era dedicato alla sola stampa, se ricordo bene), dì anche il prezzo. Punto. Un prodotto completo contempla anche il prezzo, su questo non faccio passi indietro; perchè se costasse 200 è una botta al mercato, se costasse 400 un po’ meno e se invece costasse 600 sarebbe la fine prima dell’inizio. Quindi, di fatto è l’unico hardware opzionale, in balìa del prezzo finale.</p>
<p>Fine, tutto qua. E voi, cosa avete in ballo, come prossimi acquisti? Avete consigli da darmi? Cosa ne pensate?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/29/i-miei-prossimi-acquisti-sul-fronte-windows-8-e-windows-phone.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Il VERO baco della Start Page di Windows 8 di cui nessuno parla</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/28/il-vero-baco-della-start-page-di-windows-8-di-cui-nessuno-parla.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/28/il-vero-baco-della-start-page-di-windows-8-di-cui-nessuno-parla.aspx#comments</comments>
		<pubDate>Fri, 28 Sep 2012 07:42:37 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=10</guid>
		<description><![CDATA[Tralasciamo le critiche alla Start Page di Windows 8, perchè ho già avuto modo di parlarne in passato e secondo me sono davvero inconsistenti. E’ vero, la Start Page sostituisce il buon vecchio menù Start, probabilmente senza offrire tutte le possibilità che avevamo prima. Ma il mio personale punto di vista è che offre un [...]]]></description>
				<content:encoded><![CDATA[<p>Tralasciamo le critiche alla Start Page di <strong>Windows 8</strong>, perchè ho già avuto modo di parlarne in passato e secondo me sono davvero inconsistenti. E’ vero, la Start Page sostituisce il buon vecchio menù Start, probabilmente senza offrire tutte le possibilità che avevamo prima. Ma il mio personale punto di vista è che offre un pochino di più, bisogna solo abituarsi – questione di qualche secondo – e si lavora meglio di prima.</p>
<p><strong>Il vero problema o baco è un altro, credo piuttosto grave, che ben presto sarà sulla bocca di tutti.</strong></p>
<p><strong><font color="#ff0000">Il vero problema è che quando si installa un programma</font></strong> (di qualsiasi tipo) <strong><font color="#ff0000">non vengono distinte icone/tiles di serie A e di serie B</font></strong>. Ve le ritrovate tutte quante sulla Start Page, da quella essenziale (per lanciare l’exe), e quelle più stupide ed inutili che magari non userete mai.</p>
<p>Quindi se installate un videogioco, non solo vi ritrovate l’icona per lanciare il gioco in sè, ma avrete anche le icone per aprire la pagina web del sito ufficiale, del forum, magari l’icona per aprire il manuale in pdf, etc. etc. Se installate Visual Studio, vi ritrovate decine di icone/tiles: quella per avviare l’IDE (ovvio) a quelle più inutili (per aprire i vari command prompt, il Tool Create Guid, compilatori vari, e tutte le altre decine di utility di corredo e via discorrendo). Le icone non sono per nulla organizzate, sono lì spiattellate una accanto all’altra, senza cartelle, senza un minimo di struttura. La cosa vale per ogni tipo di software, da quelli più banali da consumer a quelli più complessi da developer.</p>
<p>Me ne sono accorto e ho ragionato su questa cosa nelle ultime settimane, quando mi sono installato Windows 8 RTM. A forza di fare installazioni – i soliti che uso per lavoro – avevo la Start Page piena zeppa di icone che NON avrei mai usato. Mai e poi mai. In Windows 7 accadeva la stessa cosa, però c’era il meccanismo delle cartelle che organizzava e nascondeva meglio questa faccenda; e soprattutto nessuno ormai apriva e navigava più il menù Start, per cui nessuno si lamentava. Anche la Start Page può essere organizzata a gruppi, però è una cosa da fare manualmente.</p>
<p>Con Windows 8, invece, vi ritroverete decine e decine e centinaia di icone inutili, lì elencate, una di seguito all’altra. <strong>Appena installato un software, di qualsiasi tipo, vi consiglio caldamente di andare subito sulla Start Page e di vedere quali icone sono state aggiunte</strong>, e di rimuovere subito quelle che pensate di non usare mai. Secondo me le software-house devono cambiare modalità: non devono più pensare di fornire automaticamente collegamenti attraverso il menù Start (per evitare appunto il proliferare di icone sulla Start Page), ma devono farlo in un altro modo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/28/il-vero-baco-della-start-page-di-windows-8-di-cui-nessuno-parla.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App Windows 8, suspending e resuming dello stato</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/20/app-windows-8-suspending-e-resuming-dello-stato.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/20/app-windows-8-suspending-e-resuming-dello-stato.aspx#comments</comments>
		<pubDate>Thu, 20 Sep 2012 07:55:30 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=12</guid>
		<description><![CDATA[Una delle cose che ho trovato più complicate da capire quando si sviluppa un’app per Windows 8 Metro-style è la gestione del suspending e del resuming. Non perchè sia di per sè complicata, quanto perchè se aprite Visual Studio 2012 e iniziate con un qualsiasi progetto per il Windows Store, vi viene già fornita un [...]]]></description>
				<content:encoded><![CDATA[<p>Una delle cose che ho trovato più complicate da capire quando si sviluppa un’app per Windows 8 Metro-style è la gestione del suspending e del resuming. Non perchè sia di per sè complicata, quanto perchè se aprite Visual Studio 2012 e iniziate con un qualsiasi progetto per il Windows Store, vi viene già fornita un set di classi che – sotto sotto – fanno il lavoro sporco di salvataggio e di recupero dei dati. Quindi secondo me non si capisce esattamente cosa faccia davvero il sistema operativo di base, e cosa invece viene fatto dal template classico di un’app Windows Store.</p>
<p>Andiamo con calma. <strong>Supponiamo di dover fare una semplice app Metro che chiede all’utente tre informazioni</strong>: cognome, nome e data di nascita. Il tutto avviene in modo molto semplice, con tre TextBox. Aprite Visual Studio 2012, cominciate con un progetto scegliendo il template “<strong>Blank App (XAML)</strong>”, che si trova all’interno dei folder Visual C# –&gt; Windows Store. Editiamo la MainPage.xaml ed incollate questo:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">Grid</span> <span class="attr">Background</span><span class="kwrd">="{StaticResource ApplicationPageBackgroundThemeBrush}"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Grid.ColumnDefinitions</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ColumnDefinition</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ColumnDefinition</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Grid.ColumnDefinitions</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Grid.RowDefinitions</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">RowDefinition</span> <span class="attr">Height</span><span class="kwrd">="Auto"</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">RowDefinition</span> <span class="attr">Height</span><span class="kwrd">="Auto"</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">RowDefinition</span> <span class="attr">Height</span><span class="kwrd">="Auto"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Grid.RowDefinitions</span><span class="kwrd">&gt;</span>
        
    <span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span>
                <span class="attr">Text</span><span class="kwrd">="Cognome"</span> <span class="attr">FontSize</span><span class="kwrd">="34"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="1"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span>
                <span class="attr">Text</span><span class="kwrd">="Nome"</span> <span class="attr">FontSize</span><span class="kwrd">="34"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="2"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span>
                <span class="attr">Text</span><span class="kwrd">="Data di Nascita"</span> <span class="attr">FontSize</span><span class="kwrd">="34"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">TextBox</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="1"</span> <span class="attr">Text</span><span class="kwrd">="Damiani"</span>
                <span class="attr">x:Name</span><span class="kwrd">="Cognome"</span> <span class="attr">FontSize</span><span class="kwrd">="32"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span>
                <span class="attr">Foreground</span><span class="kwrd">="Black"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">TextBox</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="1"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="1"</span> <span class="attr">Text</span><span class="kwrd">="Igor"</span>
                <span class="attr">x:Name</span><span class="kwrd">="Nome"</span> <span class="attr">FontSize</span><span class="kwrd">="32"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span>
                <span class="attr">Foreground</span><span class="kwrd">="Black"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">TextBox</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="2"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="1"</span> <span class="attr">Text</span><span class="kwrd">="01/01/1900"</span>
                <span class="attr">x:Name</span><span class="kwrd">="DataNascita"</span> <span class="attr">FontSize</span><span class="kwrd">="32"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Center"</span>
                <span class="attr">Foreground</span><span class="kwrd">="Black"</span> <span class="attr">Margin</span><span class="kwrd">="4"</span> <span class="kwrd">/&gt;</span>

<span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span></pre>
<style type="text/css"><![CDATA[</p>
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Nulla di insolito. Per ora evitiamo MVVM. Abbiamo messo tre TextBox, ciascuna con il suo nome. Adesso, facciamola girare ed osserviamone il comportamento.</p>
<ol>
<li>All’avvio vi vengono ovviamente proposti i valori di default cablati nello XAML (il mio nome, cognome, e la mia data di nascita falsa) </li>
<li>Provate a cambiare tali valori, scrivendoci i vostri, o quello che volete </li>
<li>Tornate in Visual Studio a suon di Alt+Tab e – utilizzando la toolbar <strong>Debug Location</strong> cliccate sull’opzione <strong>Suspend and Shutdown</strong>: questa opzione simula il fatto che Windows termina la vostra app perchè ha bisogno di memoria, o per qualsiasi altro motivo. Ad esempio, se passate da un’app Metro all’altra, quella che finisce in background viene sospesa, per non consumare memoria, batteria, etc. etc. </li>
<li>Se avete fatto correttamente il passo (3), l’app viene terminata: Visual Studio ed il suo debugger terminano ovviamente la sua esecuzione </li>
<li>Se rilanciate l’app, <strong>DEVE</strong> accadere una cosa molto importante: l’app parte <strong>ma <font color="#ff0000">NON DEVE</font> riproporre i valori di default, ma deve recuperare il precedente stato!!</strong> </li>
</ol>
<p>A questo punto è necessario soffermarsi sul punto (5). Per chi viene da un avanzato sviluppo di app Windows Phone come me, troverà una notevole differenza. Quando toccate una tile su Windows Phone, l’app parte <strong>SEMPRE</strong> da zero, senza alcun bisogno di <em>restorare</em> il precedente stato. Questo <strong>NON E’ VERO</strong> con Windows 8. Il motivo è presto detto: con Windows Phone non potete chiudere manualmente l’app, mentre con Windows 8 sì. Con Windows 8, fin tanto che non la chiudete, essa deve SEMPRE recuperare lo stato che l’utente aveva. In breve: <strong><font color="#008040">con il nostro piccolo test di prima l’app è stata sospesa</font></strong> (ovvero: non l’abbiamo volutamente chiusa), <strong><font color="#008040">per cui se la rilanciamo</font></strong> (dalla tile sulla Start Page oppure prendendola dalle app aperte, usando lo charm sulla sinistra dello schermo) essa deve recuperare lo stato, proponendoci non i valori di default, ma quelli che avevamo modificato. Questo adesso ovviamente non accade, perchè in questo momento il meccanismo di suspending &amp; resuming nella nostra piccola app di prova non esiste, perchè non è stato ancora implementato. Ma è stato importante capire, secondo me, cosa succede by default, e cosa invece dobbiamo implementare.</p>
<p>Andiamo avanti.</p>
<p><strong>Suspending, salvataggio delle informazioni</strong> </p>
<p>Diamo un’occhiata al costruttore della classe App, contenuto nel file App.xaml.cs. Esso sottoscrive l’evento Suspending:</p>
<pre class="csharpcode"><span class="kwrd">this</span>.Suspending += OnSuspending;</pre>
<style type="text/css"><![CDATA[</p>
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>L’handler di questo evento fa una cosa semplice:</p>
<pre class="csharpcode"><span class="kwrd">private</span> async <span class="kwrd">void</span> OnSuspending(<span class="kwrd">object</span> sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    await <span class="kwrd">this</span>.SaveCurrentState();
    deferral.Complete();
}</pre>
<style type="text/css"><![CDATA[</p>
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>La parte più interessante è il this.SaveCurrentState(), che fa una cosa di cui magari parleremo in un altro post. Questo metodo viene eseguito ogni qualvolta il sistema operativo manda in sospensione la nostra app: lo scopo quindi è quello di salvare lo stato, con tutto ciò che comporta. Caselle di testo, contenuto di ListBox, viewmodel, etc. etc.: tutto ciò che serve per dare l’illusione che l’app non si sia mai chiusa, insomma. Ed il tutto deve avvenire – se ben ricordo – nell’arco di 5 secondi: trascorso questo tempo, Windows killa la nostra app e tutto è perduto.</p>
<p><strong>Resuming, recupero delle informazioni</strong> </p>
<p>Ovviamente deve esistere anche l’operazione inversa. Quando l’app viene lanciata potrebbe essere necessario recuperare le informazioni e riadattare la view dell’utente secondo quanto salvato. Diamo un’occhiata a:</p>
<pre class="csharpcode"><span class="kwrd">protected</span> async <span class="kwrd">override</span> <span class="kwrd">void</span> OnLaunched(LaunchActivatedEventArgs args) { }</pre>
<style type="text/css"><![CDATA[</p>
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Ad un certo punto troverete una riga di codice simile alla seguente:</p>
<pre class="csharpcode"><span class="kwrd">if</span> (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    await <span class="kwrd">this</span>.RestoreLastState(rootFrame);
}</pre>
<style type="text/css"><![CDATA[</p>
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>La proprietà <strong>PreviousExecutionState</strong> ci dice la modalità con cui è stata chiusa l’app: nel caso fosse <strong>Terminated</strong> (ovvero chiusa dal sistema operativo) allora dobbiamo recuperare lo stato. Negli altri casi (<strong>ClosedByUser</strong>, <strong>NotRunning</strong>, <strong>Running</strong>, <strong>Suspended</strong>) no. Nel mio caso ho implementato un metodo RestoreLastState che fa tutto il lavoro.</p>
<p><strong>Conclusioni<br />
    <br /></strong>Quello che mi ha confuso per un po’ di tempo è il fatto che se usate un altro template per il Windows Store (Grid App, Split App, etc.) vi viene già fornita una classe SuspensionManager che fa buona parte del lavoro, con il fatto però che non ho mai capito cosa facesse il sistema operativo nativamente, e quanto invece facesse l’app e la parte di codice già implementata per noi. Per questo ho preferito partire da una Blank App e vedere cosa accadesse. Magari in un altro post parlerò di ciò che fanno i metodi SaveCurrentState() e RestoreLastState(). In breve, vanno a recuperare la view corrente e tramite un’interfaccia ISuspendInfo chiedono alla view le informazioni che devono essere salvate o recuperate.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/20/app-windows-8-suspending-e-resuming-dello-stato.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows RT, tablet, iPad, concorrenza e molto altro</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/19/windows-rt-tablet-ipad-concorrenza-e-molto-altro.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/19/windows-rt-tablet-ipad-concorrenza-e-molto-altro.aspx#comments</comments>
		<pubDate>Wed, 19 Sep 2012 07:12:01 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=14</guid>
		<description><![CDATA[E’ un post difficile, questo, come non me ne capitavano da tempo. Vediamo di buttare giù qualche premessa. Windows 8 è il primo sistema operativo in grado di unificare l’esperienza d’uso. Ciò significa che sia stiate usando un tablet, un desktop, un ultrabook, un vecchio notebook, vi ritroverete sempre lo stesso tipo di interfaccia utente. [...]]]></description>
				<content:encoded><![CDATA[<p>E’ un post difficile, questo, come non me ne capitavano da tempo.</p>
<p>Vediamo di buttare giù qualche premessa. <strong>Windows 8 è il primo sistema operativo</strong> in grado di unificare l’esperienza d’uso. Ciò significa che sia stiate usando un tablet, un desktop, un ultrabook, un vecchio notebook, vi ritroverete sempre lo stesso tipo di interfaccia utente. Ma non solo questo:</p>
<ol>
<li>Microsoft permette ai costruttori di produrre hardware convertibili, come se ne sono visti nei video nelle settimane e mesi scorsi: ultrabook che diventano tablet e viceversa, monitor da desktop in grado di inclinarsi fino a diventare (quasi) orizzontali e quindi, di fatto, grossi tablet, etc. etc. </li>
<li>Con questa mossa Microsoft vuole colpire i consumer, e rubare fette di mercato ovviamente ad Apple con il suo iPad, ma anche ad Android, Amazon con il suo Kindle Fire, etc. etc. Perchè per la prima volta affronta seriamente il problema di andare ben oltre il classico pc da scrivania, ma offre la possibilità di creare nuovi prodotti che prima erano alla mercé di altri</li>
<li>Per me un device è “tablet” se lo si usa per la stra-grande-maggior parte del tempo con le dita. E se, soprattutto, il sistema operativo che monta è esclusivamente studiato per essere utilizzato con le dita. Un iPad possiamo utilizzarlo con una tastiera bluetooth, ma alla fine vi ritroverete sempre ad usarlo con le dita, per ogni tipo di operazione, anche la più semplice. Morale: Surface RT non è un tablet. </li>
</ol>
<p>Detto questo, voglio precisare una cosa. Tutti i ragionamenti successivi non si applicano ai noi professionisti, a noi developer, a noi sistemisti, a noi programmatori, etc. etc. Si applicano ai consumer, come siamo noi stessi quando stacchiamo dal lavoro.</p>
<p>Detto questo: per quello che mi riguarda, per il consumer medio è adattissimo un device come Surface RT. Credo che possa sostituire perfettamente un tablet ed un pc contemporaneamente. Consideriamo per un attimo l’utilizzo medio di un consumer:</p>
<ul>
<li>ascolta musica, guarda video </li>
<li>guarda Facebook </li>
<li>scarica le foto dalla macchina fotografica e le pubblica sui social network </li>
<li>riceve e scrive e-mail </li>
<li>forse videogioca un po’ </li>
<li>compila moduli web (si iscrive ai siti, fa acquisti, etc. etc.)</li>
<li>e molto, molto, molto altro ancora</li>
</ul>
<p>Ora, prendiamo in considerazione l’iPad. E’ davvero molto difficile che si riescano a portare a termine tutte queste operazioni nel modo più congeniale. Su musica &amp; video non discuto, ma per tutte le altre. Provate a scrivere una mail, sia con la tastiera virtuale che con quella eventuale fisica: prima o poi, senza mouse, dovrete usare le dita per andare a puntare una frase precedente o successiva, per correggerla. Provate a compilare un modulo Web, di qualsiasi tipo: molto più comodo utilizzare tastiera &amp; mouse. Sono davvero molte, molte, molte le occasioni in cui vorrei tastiera &amp; mouse su iPad, molte più di quelle che pensavo. E difatti una tastiera BT l’ho presa, poco utilizzata perchè alla fine l’OS è studiato per essere touch. Il fatto è che iPad è pensato per essere un device da affiancare ad un pc tradizionale: nessuno si sognerebbe mai di avere in casa un iPad e basta, perchè è volutamente limitato, prima di tutto nell’offerta delle app. Ok, ce ne saranno milioni e miliardi, ma sono tutte app <em>apposta</em> per iPad, studiate per il touch.</p>
<p>Io mi sento di dire, insomma, che per l’utente medio, Surface RT è in grado di sostituire senza problemi un notebook. Poco conta che non ci sia il desktop. A cosa serve il desktop? Office 2013 c’è. E se manca, cosa manca davvero all’utente finale medio? Lui vuole Facebook, vuole un gioco, i social network, navigare sul Web. E se il mercato delle app Metro, chiamiamolo così, cresce, avrà tutto ciò che serve.</p>
<p>Per questo dico che se il prezzo di Surface RT, supponiamo, fosse di 599 euro, non va considerato come il prezzo di un misero tablet come iPad, ma quasi messo a confronto con il prezzo di un pc. Perchè iPad è <em>solo</em> un tablet con sue app dedicate, mentre Surface (anche solo RT) è un PC. Perchè per me “pc” non sta ad indicare che c’è il desktop o chissà cosa, ma è soprattutto una questione di usability. Se sono sul letto con Surface, a navigare, ed improvvisamente devo scrivere una mail urgente, vado alla scrivania e usando lo stesso dispositivo, attacco tastiera &amp; mouse e diventa un pc in tutto e per tutto. Fatelo con un iPad: impossibile! Idem per i videogiochi: grazie ai tablet e ad iPad sono rinate tante belle idee sui videogiochi (bloccando un po’ la rincorsa alla grafica più sfrenata), ma tornando indietro al concept ed al gameplay semplice, casual ed efficace. una cosa odio davvero: il joystick virtuale, sullo schermo, che è proprio inusabile. Inusabile. Inusabile. E’ solo un pagliativo per far credere a noi gamer che spostando le dita sullo schermo come se ci fosse un joypad sia una cosa bella e figa. Inusabile.</p>
<p>Con Surface questo problema non sussiste: sono assolutamente convinto che fra un po’ le software-house di videogiochi afferreranno la grande opportunità di fare videogiochi capaci di sfruttare l’ambiente Windows 8, e quindi fare videogame che supportano tastiera/mouse/touch/giroscopi/gps/etc. etc. Ma non solo: per tutti i motivi già detti, potremo anche switchare da una usability all’altra, in base a come decidiamo di usare il device in un dato momento.</p>
<p><strong>Insomma, 600 euro per un iPad sono una cosa. 600 euro per un Surface RT sono molto meglio.</strong> Tecnicamente parlando, come sempre. Sono prevalentemente un tecnico, e non sto dicendo da che parte andrà il mercato, niente affatto. Sto dicendo che con Surface RT le possibilità di utilizzo sono molte, molte, molte, molte di più. Mail, Evernote, ovunque ci sia da scrivere un po’…con la tastiera fisica è meglio.</p>
<p>Concludo dicendo che ci sarebbe molto altro da dire. Preciso una cosa: mi auto-escludo da questo mio pensiero. Non mi considero un utente medio, e spendere quei soldi per un device comunque limitato non mi sembra l’ideale. Le mie esigenze sono altre. Punterò direttamente a Surface Pro, che invece sarà un vero ultrabook convertibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/19/windows-rt-tablet-ipad-concorrenza-e-molto-altro.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Toast volant, Tile manent</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/18/toast-volant-tile-manent.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/18/toast-volant-tile-manent.aspx#comments</comments>
		<pubDate>Mon, 17 Sep 2012 20:42:29 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=16</guid>
		<description><![CDATA[Parlando di Windows Phone, fondamentalmente sono due i tipi di notifica supportati: le Toast e le Tile. La notifica di tipo toast è in pratico un piccolo banner che appare per qualche secondo lungo il lato superiore dello schermo: esso riporta l’icona dell’app che ha ricevuto quella notifica, ed un breve testo informativo sulla notifica [...]]]></description>
				<content:encoded><![CDATA[<p>Parlando di Windows Phone, fondamentalmente sono due i tipi di notifica supportati: le Toast e le Tile.</p>
<p>La notifica di tipo toast è in pratico un piccolo banner che appare per qualche secondo lungo il lato superiore dello schermo: esso riporta l’icona dell’app che ha ricevuto quella notifica, ed un breve testo informativo sulla notifica stessa. E’ in pratica ciò che vedete quando ricevete un SMS. Il testo ovviamente dipende dall’app, e può contenere una mention che arriva da Twitter, una nuova medaglia vinta alle Olimpiadi, etc. etc.</p>
<p>La tile invece è la tile dell’app che avete posizionato sulla Start Page. Se l’app lo prevede (ad esempio quella di WhatsApp) la tile viene aggiornata in modo silenzioso. WhatsApp vi mette un numerino che vi dice quanti messaggi avete ricevuto. Le app di previsioni del tempo aggiornano la tile dicendovi la temperatura corrente, Foursquare su richiesta può mostrarvi la classifica corrente, Facebook vi dice le notifiche, etc. etc.</p>
<p>La tile ha un enorme vantaggio rispetto alla toast, che secondo me è ben riassunto dal titolo. Se nel momento in cui ricevete una notifica di tipo toast non avete lo smartphone a portata di mano, sotto’occhio, molto probabilmente ve la perderete. Il display si accende, visualizza il toast, e poi si spegne. Non ne rimane traccia. Toast volant, insomma. La tile invece si aggiorna e rimane lì dov’è. Quindi se lasciate il telefono per due ore, quando lo riprendete in mano vedete le varie tile aggiornate. Che poi è la stessa cosa che accade con gli SMS, le telefonate perse, etc. etc. Tile manent.</p>
<p>Per questo io consiglio a tutti voi di implementare sempre le notifiche di tipo tile. Dal punto di vista sviluppatore, se avete messo in piedi tutta l’infrastruttura per inviare notifiche alla vostra app, cambiare da toast a tile è poca cosa. E’ solo questione di formattare in modo corretto il messaggio, cambiando l’XML e qualche altro parametro. Dal punto di vista utente…lui non le perde mai e probabilmente consumano meno (lo schermo non si accende, e non c’è alcun suono).</p>
<p>Ultima cosa, ma questa è più che altro un suggerimento a Microsoft: secondo me, se un’app <strong>richiede in modo importante</strong> che la sua tile sia pinnata sulla Start Page, deve essere indicato in modo <strong>forte all’utente</strong>. Addirittura, sono quasi dell’idea che la tile deve pinnarsi automaticamente sulla Start Page, esattamente come in Windows l’icona viene messa sul desktop. Immaginate il già citato WhatsApp: lo installate, ma se non mettete la tile sulla Start Page non riuscirete mai a capire quando ricevete qualcosa oppure no. Siete costretti ad aprire l’app ogni tanto, giusto per controllare. Non è accettabile, si perde il concetto di notifica, ma è più un polling da parte nostra. WhatsApp <strong>richiede</strong> che la tile sia sulla Start Page: perchè a questo punto non metterla automaticamente. O magari fare una domanda all’utente proponendogli di mettere la tile?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/18/toast-volant-tile-manent.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizzare servizi WCF con callback al chiamante da app Windows 8</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/12/utilizzare-servizi-wcf-con-callback-al-chiamante-da-app-windows-8.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/12/utilizzare-servizi-wcf-con-callback-al-chiamante-da-app-windows-8.aspx#comments</comments>
		<pubDate>Wed, 12 Sep 2012 19:54:20 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=19</guid>
		<description><![CDATA[Introduzione Utilizzare un servizio WCF mi è diventato così istintivo in tutte le cose che faccio che francamente non riesco più a farne a meno. Non sto qui ad elencare i vantaggi e a discutere le varie tecniche, perchè prima di tutto non ne ho le competenze (rischierei di usare termini non corretti), per cui [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Introduzione</strong>    <br />Utilizzare un servizio WCF mi è diventato così istintivo in tutte le cose che faccio che francamente non riesco più a farne a meno. Non sto qui ad elencare i vantaggi e a discutere le varie tecniche, perchè prima di tutto non ne ho le competenze (rischierei di usare termini non corretti), per cui vado diretto al succo di questo post.</p>
<p>Generalmente, dal punto di vista client (quindi un&#8217;applicazione WPF, un&#8217;app Windows Forms o Windows Phone, un&#8217;applicazione ASP.NET MVC, etc. etc.) un servizio WCF è un servizio al quale forniamo dati, compie elaborazioni e restituisce qualcosa. Questo avviene con chiamate a metodi esposte dal servizio tramite un contratto (un&#8217;interfaccia IQualcosa), grazie al quale noi sappiamo come comunicare, cosa passare e cosa ci aspettiamo come valori di ritorno. Questo tipo di approccio non presenta nessun tipo di problema (in realtà ce ne sono una valanga, sicurezza in primis, ma sorvoliamo): una volta che il servizio è stato esposto via http, è sufficiente aggiungerlo al nostro progetto corrente tramite il comando &#8220;Add Service Reference&#8221;. Sul nostro client viene creata una classe proxy da utilizzare per effettuare le chiamate.</p>
<p>Quello che succede in uno scenario di questo tipo è che il client, indipendentemente dal tipo, invoca il servizio WCF. Quest&#8217;ultimo lavora un po&#8217; e poi restituisce i dati al client. Semplice, almeno concettualmente.</p>
<p>Quello su cui ho lavorato per una giornata intera è invece lo scenario seguente:</p>
<ul>
<li>applicazione Windows 8 Metro-style, scritta in C#</li>
<li>servizio WCF in ascolto su <em><font color="#9bbb59">http://localhost:1976</font></em></li>
<li>il servizio WCF non solo espone dei metodi che vengono invocati dall&#8217;applicazione, ma è in grado &#8211; tramite callback ed un canale di comunicazione duplex, di invocare un metodo definito sul client</li>
</ul>
<p>Il servizio WCF, quindi, ha diverse particolarità:</p>
<ul>
<li>si deve memorizzare da qualche parte il “chiamante”</li>
<li>deve definire non solo un contratto col quale dialogare con il client, ma anche un contratto di callback. Quest&#8217;ultimo definisce il/i metodi da invocare sul client</li>
</ul>
<p>Arriviamo al sodo, vediamo un po&#8217; di codice.</p>
<p><strong>Codice Server Side</strong>    <br />Implementiamo un servizio che prende in input un <strong>ExecuteRequest</strong> e restituisce, prima o poi, un <strong>ExecuteResponse</strong>.</p>
<pre class="csharpcode">[DataContract]
<span class="kwrd">public</span> <span class="kwrd">class</span> ExecuteRequest
{
    [DataMember]
    <span class="kwrd">public</span> <span class="kwrd">int</span> Value { get; set; }
}

[DataContract]
<span class="kwrd">public</span> <span class="kwrd">class</span> ExecuteResponse
{
    [DataMember]
    <span class="kwrd">public</span> <span class="kwrd">int</span> Value { get; set; }
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Ho scritto &#8220;prima o poi&#8221; perchè supponiamo che l&#8217;esecuzione server-side sia piuttosto lunga; quindi, <strong><font color="#ff0000">NON</font></strong> facciamo un metodo simile a questo:</p>
<pre class="csharpcode">[ServiceContract]
<span class="kwrd">public</span> <span class="kwrd">interface</span> IExecuteService
{
    [OperationContract]
    ExecuteResponse Execute(ExecuteRequest <span class="kwrd">value</span>);
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>bensì facciamo come segue:</p>
<pre class="csharpcode">[ServiceContract(CallbackContract = <span class="kwrd">typeof</span>(IExecuteServiceCallback))]
<span class="kwrd">public</span> <span class="kwrd">interface</span> IExecuteService
{
    [OperationContract]
    <span class="kwrd">void</span> Execute(ExecuteRequest <span class="kwrd">value</span>);
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Invochiamo il metodo <strong>Execute</strong> passandogli un <strong>ExecuteRequest</strong>, che restituisce void. Il servizio WCF lavora, lavora, lavora, e prima o poi chiamerà la callback per informarci del risultato. La funzione di callback è indicato all&#8217;interno dell&#8217;attributo ServiceContract, ed è <strong>IExecuteServiceCallback</strong>.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">interface</span> IExecuteServiceCallback
{
    [OperationContract(IsOneWay = <span class="kwrd">true</span>)]
    <span class="kwrd">void</span> ExecuteTerminated(ExecuteResponse response);
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>L&#8217;implementazione del servizio è piuttosto semplice:</p>
<pre class="csharpcode">[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
<span class="kwrd">public</span> <span class="kwrd">class</span> ExecuteService : IExecuteService
{
    <span class="kwrd">private</span> ExecuteRequest Request;
    <span class="kwrd">private</span> ExecuteResponse Response = <span class="kwrd">new</span> ExecuteResponse();
    <span class="kwrd">private</span> IExecuteServiceCallback Callback;

    <span class="kwrd">public</span> <span class="kwrd">void</span> Execute(ExecuteRequest <span class="kwrd">value</span>)
    {
        <span class="kwrd">this</span>.Callback = OperationContext.Current.GetCallbackChannel&lt;IExecuteServiceCallback&gt;();
        <span class="kwrd">this</span>.Request = <span class="kwrd">value</span>;

        Timer timer = <span class="kwrd">new</span> Timer(10000);
        timer.Elapsed += (s, e) =&gt;
            {
                timer.Stop();

                <span class="kwrd">this</span>.Response.Value = <span class="kwrd">this</span>.Request.Value * 3;
                <span class="kwrd">this</span>.Callback.ExecuteTerminated(<span class="kwrd">this</span>.Response);
            };
        timer.Start();
    }
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Quando il cliente invoca il metodo <strong>Execute</strong> esposto dal servizio, accade che:</p>
<ul>
<li>il servizio si memorizza chi è il chiamante e predispone la callback</li>
<li>al client restituisce un void</li>
</ul>
<p>A solo scopo di test, parte un timer che fa aspettare il client 10 secondi, al termine dei quali viene invocata la callback sul client con il risultato dell&#8217;operazione. Praticamente, ciò che accade è che il client invoca il metodo passando un numero intero, ed il servizio restituisce il doppio di tale numero. Ripeto: è solo a scopo di test, si presuppone che un processore moderno si metta un po&#8217; meno a calcolare il doppio di un numero!<br />
  <br /><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://localhost/wordpress/wp-content/uploads/2012/10/e8f0f698-dd0c-470e-8170-924c4de3f8cewlEmoticon-smile_2.png"></p>
<p><strong>Un pezzetto di web.config</strong></p>
<p>C&#8217;è qualche accorgimento da apportare anche nel web.config. L&#8217;endpoint deve essere di tipo <strong>netHttpBinding</strong>. Come recita MSDN all&#8217;indirizzo <a href="http://msdn.microsoft.com/en-us/library/hh674273.aspx">http://msdn.microsoft.com/en-us/library/hh674273.aspx</a>, infatti:</p>
<p><em><font color="#f79646">NetHttpBinding is a binding designed for consuming HTTP or WebSocket services and uses binary encoding by default. NetHttpBinding will detect whether it is used with a request-reply contract or duplex contract and change its behavior to match &#8211; it will use HTTP for request-reply contracts and WebSockets for duplex contracts.</font></em></p>
<p>Riporto qui sotto la parte più significativa del web.config:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">services</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">service</span> <span class="attr">name</span><span class="kwrd">="WcfCallbackSample.ExecuteService"</span>
            <span class="attr">behaviorConfiguration</span><span class="kwrd">="bev1"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">host</span><span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">baseAddresses</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">baseAddress</span><span class="kwrd">="http://localhost:1000/Service"</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span><span class="html">baseAddresses</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">host</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">endpoint</span> <span class="attr">name</span><span class="kwrd">="duplexendpoint"</span> <span class="attr">address</span><span class="kwrd">=""</span>
            <span class="attr">binding</span><span class="kwrd">="netHttpBinding"</span>
            <span class="attr">contract</span><span class="kwrd">="WcfCallbackSample.IExecuteService"</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">endpoint</span> <span class="attr">name</span><span class="kwrd">="MetaDataTcpEndpoint"</span> <span class="attr">address</span><span class="kwrd">="mex"</span>
        <span class="attr">binding</span><span class="kwrd">="mexHttpBinding"</span> <span class="attr">contract</span><span class="kwrd">="IMetadataExchange"</span> <span class="kwrd">/&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">service</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">services</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">behaviors</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">serviceBehaviors</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">behavior</span> <span class="attr">name</span><span class="kwrd">="bev1"</span><span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">serviceMetadata</span> <span class="attr">httpGetEnabled</span><span class="kwrd">="true"</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">serviceDebug</span> <span class="attr">includeExceptionDetailInFaults</span><span class="kwrd">="True"</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">behavior</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">serviceBehaviors</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">behaviors</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">protocolMapping</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">binding</span><span class="kwrd">="basicHttpsBinding"</span> <span class="attr">scheme</span><span class="kwrd">="https"</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">protocolMapping</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">serviceHostingEnvironment</span> <span class="attr">aspNetCompatibilityEnabled</span><span class="kwrd">="true"</span>
    <span class="attr">multipleSiteBindingsEnabled</span><span class="kwrd">="true"</span> <span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span></pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Ovviamente alcuni valori, attributi e nodi XML dipendono dal vostro servizio.</p>
<p><strong>Client Side con un&#8217;applicazione Metro per Windows 8</strong></p>
<p>Ok, abbiamo quasi finito. Adesso arriva il bello, ovvero usare il nostro servizio dal client. Dopo averlo aggiunto nei service reference, ci verrebbe istintivo utilizzare la classe client proxy che ci è stata auto-generata. No. Falso. Nada. Fermi tutti.</p>
<p>Innanzitutto con <strong>Visual Studio 2012</strong> creiamo una nuova <strong>Blank app</strong>, sotto la categoria <strong>Windows Store</strong>.</p>
<p>Dentro troveremo un&#8217;unica Page, nel cui costruttore metteremo:</p>
<pre class="csharpcode">EndpointAddress address = <span class="kwrd">new</span> EndpointAddress(<span class="str">"http://localhost:1924/ExecuteService.svc"</span>);
var binding = <span class="kwrd">new</span> NetHttpBinding();
var cf = <span class="kwrd">new</span> DuplexChannelFactory&lt;IExecuteService&gt;(<span class="kwrd">new</span> InstanceContext(<span class="kwrd">this</span>), binding, address);
service = cf.CreateChannel();</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>L&#8217;oggetto service, definito come private della Page, è di tipo <strong>IExecuteService</strong>, ed è grazie a questo che potremo utilizzare il nostro servizio.</p>
<p>A questo punto aggiungiamo un Button nello Xaml, gestiamo l&#8217;evento Click, e nel code-behind inseriamo:</p>
<pre class="csharpcode">service.ExecuteAsync(<span class="kwrd">new</span> ExecuteRequest() { Value = 4 });</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Proviamo ad eseguire l&#8217;app: è Metro-style, per cui come sappiamo che gira in full-screen. Clicchiamo sul Button. Non accade nulla. Ed è perfettamente normale, pensiamoci bene. La chiamata a Execute (che avviene in async) restituisce void. Cosa manca? Non abbiamo la callback, ovvero quel meccanismo che il server adotta per avvisarci quando lui ha terminato il calcolo. Morale: la Page deve implementare l&#8217;interfaccia di callback.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">sealed</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> MainPage : Page, IExecuteServiceCallback
{
    <span class="kwrd">public</span> async <span class="kwrd">void</span> ExecuteTerminated(ExecuteResponse response)
    {
        MessageDialog dialog = <span class="kwrd">new</span> MessageDialog(response.Value.ToString());
        await dialog.ShowAsync();
    }
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Il timer, istanziato ed in esecuzione lato server, invoca la callback chiamando il metodo ExecuteTerminated sul client, e quindi apparirà la nostra MessageDialog con il risultato dell&#8217;operazione.</p>
<p><strong>In ottica Model-View-ViewModel</strong></p>
<p>In ottica MVVM, ovviamente, non sarà direttamente la Page ad implementare l&#8217;interfaccia IExecuteServiceCallback, ma la classe View Model che governa quella view. Il View Model gestisce la callback, lavorerà sulle proprie proprietà pubbliche per aggiornare la view.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/12/utilizzare-servizi-wcf-con-callback-al-chiamante-da-app-windows-8.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creare MediaElement da codice con WinRT</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/11/creare-mediaelement-da-codice-con-winrt.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/11/creare-mediaelement-da-codice-con-winrt.aspx#comments</comments>
		<pubDate>Tue, 11 Sep 2012 14:05:47 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=21</guid>
		<description><![CDATA[Una delle piacevoli novità che ho visto introdotte con WinRT è la possibilità di definire e poter utilizzare oggetti di tipo MediaElement direttamente in codice WinRT, senza quindi passare dalla loro istanziazione in pagine Xaml. Questo comporta due vantaggi concreti: - evita, come già detto, di dover definire tanti MediaElement nello Xaml, ciascuno con il [...]]]></description>
				<content:encoded><![CDATA[<p>Una delle piacevoli novità che ho visto introdotte con WinRT è la possibilità di definire e poter utilizzare oggetti di tipo MediaElement direttamente in codice WinRT, senza quindi passare dalla loro istanziazione in pagine Xaml. Questo comporta due vantaggi concreti:</p>
<p>- evita, come già detto, di dover definire tanti MediaElement nello Xaml, ciascuno con il suo nome. Dico &#8220;tanti&#8221; perchè se in un pagina dovevate far sentire più suoni (contemporanei o no) dovevate per forza mettere più MediaElement (a meno di non usarne uno solo switchando da un source all&#8217;altro)   <br />- miglior utilizzo del MVVM, conseguenza del punto precedente. Nel ViewModel associato ad una pagina posso mandare in play un suono senza aver a che fare con la view corrente</p>
<p>Detto questo, mi sono potuto fare una serie di classi helper:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> MediaElementGenerator
{
    <span class="kwrd">public</span> async <span class="kwrd">static</span> Task&lt;MediaElement&gt; Get(<span class="kwrd">string</span> source)
    {
        MediaElement result = <span class="kwrd">new</span> MediaElement();
        var package = Windows.ApplicationModel.Package.Current;
        var installedLocation = package.InstalledLocation;
        var storageFile = await installedLocation.GetFileAsync(source);
        
        <span class="kwrd">if</span> (storageFile != <span class="kwrd">null</span>)
        {
            var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
            result.SetSource(stream, storageFile.ContentType);
        }

        <span class="kwrd">return</span> result;
    }
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Questa riportata qui sopra è una classe statica che lavora in modo asincrono (async/await) e che restituisce un MediaElement associato ad un source specifico. Il source ovviamente deve essere un qualsiasi Uri, che punta ad un file wav/mp3 incluso come &#8220;Content&#8221; all&#8217;interno della nostra solution.</p>
<p>All&#8217;interno dei miei ViewModel utilizzo ciò che mi viene esposto dalla classe ApplicationContext:</p>
<pre class="csharpcode"><span class="kwrd">private</span> async Task Play(<span class="kwrd">string</span> source)
{
    <span class="kwrd">if</span> (ApplicationContext.Instance.Sound)
    {
        <span class="kwrd">if</span> (!<span class="kwrd">this</span>.MediaElements.ContainsKey(source))
        {
            <span class="kwrd">this</span>.MediaElements.Add(source, await MediaElementGenerator.Get(source));
        }

        <span class="kwrd">this</span>.MediaElements[source].Play();
    }
}

<span class="kwrd">public</span> async Task PlayClickButton()
{
    await <span class="kwrd">this</span>.Play(<span class="str">"Media\\ClickButton.mp3"</span>);
}

<span class="kwrd">public</span> async Task PlayReady()
{
    await <span class="kwrd">this</span>.Play(<span class="str">"Media\\Ready.mp3"</span>);
}</pre>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Gli ultimi due metodi pubblici (PlayClickButton e PlayReady) si appoggiano su Play che invece è privato. Notare che nel metodo Play controllo anche che il suono all’interno dell’applicazione sia attivo: ricordiamoci infatti che è buona norma permettere all’utente di attivare/disattivare i suoni nelle nostre app Windows 8, tramite il pannellino dei settings che va gestito correttamente. Ma questo è forse un tema da affrontare in un altro post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/11/creare-mediaelement-da-codice-con-winrt.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ottenere la versione di un Assembly con WinRT</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/06/ottenere-la-versione-di-un-assembly-con-winrt.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/06/ottenere-la-versione-di-un-assembly-con-winrt.aspx#comments</comments>
		<pubDate>Thu, 06 Sep 2012 17:01:50 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=23</guid>
		<description><![CDATA[Con le applicazioni Windows, compreso Silverlight, che quindi comprende a sua volta anche il mondo Windows Phone, potevamo scrivere il codice seguente: string version = System.Reflection.Assembly.GetExecutingAssembly().FullName.Split(',')[1]; string[] fullversion = version.Split('=')[1].Split('.'); return fullversion[0] + "." + fullversion[1];   Questo mi permette di estrarre dal FullName di un Assembly il numero di versione dell’assembly stesso, molto comodo [...]]]></description>
				<content:encoded><![CDATA[<p>Con le applicazioni Windows, compreso Silverlight, che quindi comprende a sua volta anche il mondo Windows Phone, potevamo scrivere il codice seguente:</p>
<pre class="csharpcode"><span class="kwrd">string</span> version = System.Reflection.Assembly.GetExecutingAssembly().FullName.Split(<span class="str">','</span>)[1];
<span class="kwrd">string</span>[] fullversion = version.Split(<span class="str">'='</span>)[1].Split(<span class="str">'.'</span>);
<span class="kwrd">return</span> fullversion[0] + <span class="str">"."</span> + fullversion[1];</pre>
<style type="text/css"><![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;</style>
<p> </p>
<p>Questo mi permette di estrarre dal FullName di un Assembly il numero di versione dell’assembly stesso, molto comodo per essere visualizzato su una Page di Silverlight.</p>
<p>Il codice da scrivere con WinRT, e quindi con Windows 8, è leggermente diverso.</p>
<pre class="csharpcode"><span class="kwrd">string</span> version = <span class="kwrd">typeof</span>(&lt;<font color="#ff0000">qualsiasi_classe_usata_nel_codice</font>&gt;).GetTypeInfo().Assembly.FullName.Split(<span class="str">','</span>)[1];</pre>
<style type="text/css"><![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;</style>
<p> </p>
<p>La differenza è tutta nella prima riga di codice. In pratica si tratta di avere un’istanza di <strong>Type</strong> relativa ad una qualsiasi classe del proprio codice, chiamare il metodo <strong>GetTypeInfo()</strong>, per arrivare all’<strong>Assembly</strong>, etc. etc. Notare che GetTypeInfo() è un’extension method, per cui bisogna includere il namespace System.Reflection.</p>
<p>Tutto qua, il resto del codice è analogo al precedente. Con qualche split si ottiene il numero di versione dell’assembly.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/06/ottenere-la-versione-di-un-assembly-con-winrt.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perch&#232; usare GTalk come strumento di lavoro</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/09/05/perch-usare-gtalk-come-strumento-di-lavoro.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/09/05/perch-usare-gtalk-come-strumento-di-lavoro.aspx#comments</comments>
		<pubDate>Wed, 05 Sep 2012 15:57:22 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[My daily work]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=26</guid>
		<description><![CDATA[L’altro giorno su Twitter si è scatenata una amichevole discussione su quale fosse lo strumento migliore per chattare durante il lavoro, di argomenti lavorativi. Chiaramente ognuno di voi avrà la propria opinione. L’azienda per cui lavoro, Brain-Sys, ha scelto GTalk, il piccolo e semplice IM di Google che non fa alcuna piega e che trovo [...]]]></description>
				<content:encoded><![CDATA[<p>L’altro giorno su Twitter si è scatenata una amichevole discussione su quale fosse lo strumento migliore per chattare durante il lavoro, di argomenti lavorativi. Chiaramente ognuno di voi avrà la propria opinione. L’azienda per cui lavoro, Brain-Sys, <a href="http://www.google.com/talk/intl/it/" target="_blank">ha scelto GTalk</a>, il piccolo e semplice IM di Google che non fa alcuna piega e che trovo davvero eccezionale. Ecco i motivi che me lo fanno preferire rispetto ad altri software:</p>
<ul>
<li>occupazione di memoria RAM minima: sul mio notebook, nel momento in cui vi sto scrivendo, mi sta impegnando 3,3Mb </li>
<li>disponibilità su diversi OS, desktop e mobile: ovviamente Windows, ma anche Blackberry, iPad </li>
<li>senza fronzoli: è semplice ed immediato. Ok, non avrà chat video e non permette il trasferimento di files. Ma alla fine sono funzionalità che non uso. Trovo invece molto comoda la possibilità di impostare lo stato “Occupato” con un messaggio personalizzato (“torno subito”, “sto facendo merenda”, “mi prendo un caffè”, etc.) </li>
<li>salvataggio della chat in un folder dedicato su GMail. Questa francamente è una funzionalità imbattibile. Spesso attraverso GTalk il mio capo mi dice cosa bisogna implementare, quali bachi ha trovato, cosa suggerisce lui per sistemare le cose. Questo sia che si parli di un sito ASP.NET MVC, di un’applicazione desktop WPF, di un database SQL Server. La possibilità di rileggere con calma anche in un secondo momento tutto quanto è assolutamente impagabile </li>
<li>spesso e volentieri GTalk non è bloccato dai firewall aziendali, e quando sei in trasferta, da un cliente, sai che hai uno strumento su cui fare affidamento</li>
<li>sono convinto del fatto che gira anche su uno scassatissimo ed antiquato Pentium III con XP</li>
</ul>
<p><strong>Tutte queste funzionalità fanno decisamente vincere GTalk.</strong> So benissimo che ci sono strumenti decisamente più evoluti (cito i primi che mi vengono in mente Messenger, Skype, Lync), ma non offrono le caratteristiche vincenti di cui sopra. Ovviamente ne hanno altre, su questo non si discute, ma preferisco avere poche caratteristiche ben sfruttate, che un miliardo che invece rimangono lì sopite e che però mi impegnano memoria RAM. Messenger, per esempio, permette di chattare con gli utenti Facebook, cosa che non mi interessa affatto se sto lavorando: anzi, sarebbe solo di disturbo. Skype su Windows 8, oltre ad occupare centinaia di MB, spesso e volentieri si inchioda.</p>
<p>Qualcuno mi ha informato che il team di GTalk è stato chiuso qualche anno fa, e che quindi non bisognerebbe più usarlo. Da quando bisogna usare solo software i cui sviluppi sono ancora in corso? Che regola è? Quindi non dovremmo più usare notepad? Se uno strumento è affidabile e fa al caso mio, lo utilizzo eccome. Non me ne frega nulla se il team non ci lavora più o è stato chiuso!</p>
<p>Insomma. GTalk è morto, lunga vita a GTalk!!!    <br /><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://localhost/wordpress/wp-content/uploads/2012/10/8b7a268a-156d-4f39-be12-5366f6fde464wlEmoticon-smile_2.png"></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/09/05/perch-usare-gtalk-come-strumento-di-lavoro.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disintossicazione da Internet, dal web e dalla tecnologia</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/19/disintossicazione-da-internet-dal-web-e-dalla-tecnologia.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/19/disintossicazione-da-internet-dal-web-e-dalla-tecnologia.aspx#comments</comments>
		<pubDate>Thu, 19 Jul 2012 08:33:03 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=28</guid>
		<description><![CDATA[Prima di esprimere le mie idee ho due anedotti da raccontare. Come accade sempre, ci formiamo un’idea ed adottiamo un modo di vivere anche in base a quello che vediamo ed osserviamo tutti i giorni. E questo è proprio il caso. Casa mia, qualche mese fa, durante un cena in giardino Quando mangiamo in giardino, [...]]]></description>
				<content:encoded><![CDATA[<p>Prima di esprimere le mie idee ho due anedotti da raccontare. Come accade sempre, ci formiamo un’idea ed adottiamo un modo di vivere anche in base a quello che vediamo ed osserviamo tutti i giorni. E questo è proprio il caso.</p>
<p><strong>Casa mia, qualche mese fa, durante un cena in giardino</strong>     <br />Quando mangiamo in giardino, non c’è tv, per cui ci perdiamo in chiacchere e discussioni varie. Quel giorno mia madre riporta una news secondo la quale un papà ha chiesto un ricovero di “disintossicazione da smartphone” per una delle loro figlie adolescente (presumibilmente un iPhone). La ragazzina, a quanto pare, sta sempre attaccata allo smartphone, ai social network, a qualche giochino, a questo o a quello.</p>
<p>Quando sento queste cose, vi chiedo scusa, ma mi arriva sempre il sangue al cervello. D’istinto, tra una risatina scettica e l’altra, ho ribattuto immediatamente: e se quella ragazzina, invece di uno smartphone, se ne stesse sempre chiusa in camera a leggere libri, la famiglia avrebbe comunque chiesto la disintossicazione? Non ho avuto alcuna risposta.</p>
<p><strong>Qualche sabato sera fa, sui Navigli a Milano, ore 23:00</strong>     <br />Io e qualche altra persona eravamo seduti al Banco, uno dei locali sui Navigli di Milano. Locale affollato, musica, cocktail, ragazze, risate, buonumore. Ad un certo punto, entra una ragazza, mora, carina, vestitino verde lungo, età approssimativa…25 anni. Ha in mano uno smartphone, non capisco il modello ma sarà presumibilmente un iPhone. Scorre, digita qualcosa, cambia app, testa bassa. Si siede al bancone, giusto il tempo di ordinare qualcosa, mentre continua ad usare lo smartphone senza staccare gli occhi dal display. Nel giro di venti minuti, la tipa beve e se ne va. Senza parlare con nessuno, senza staccare gli occhi dallo smartphone, eppure chissà con quante persone si è tenuta in contatto.</p>
<p>Fine degli aneddoti.    <br />Insomma, questa storia della disintossicazione da Internet, dal web, dai pc comincia a starmi seriamente sulle scatole.</p>
<p>Il discorso alla fin fine è questo: <strong><font color="#008040">se fare una certa azione è diventato semplice ed intuitivo, non c’è nulla di intossicante nel farla</font></strong>. Oggi usare uno smartphone, vedere un sito Web, dare uno sguardo a twitter, mantenere il proprio giro di amicizie, è diventato veloce, semplice ed intuitivo. Personalmente, <strong><font color="#ff0000">ritengo che una cosa mi intossichi se alza il mio livello di stress: allora sì diventa una cosa da evitare</font></strong>.</p>
<p>E’ per questo motivo che non ci vedo nulla di male se ci si porta il pc in vacanza o se si usa uno smartphone in posti fino a qualche anno fa impensabili (non tanto perchè non fosse tecnicamente possibile, quanto perchè sennò si era inquadrati come marziani o nerd da evitare). L’importante è che l’utilizzo di tali strumenti avvenga in modo naturale, intuitivo, senza sbattimenti, per dirla alla buona. <strong>Vi posso assicurare che avrei da raccontarvi diversi altri episodi che illustrano come effettivamente pian piano questa visione della “tecnologia facile” si diffonda</strong>, ma c’è ancora molto da fare: in campeggio vedo sempre più notebook, tablet, smartphone e dispositivi di ogni tipo &#8211; compresi ragazzi e ragazze che discutono su quale OS sia il migliore (vi giuro che è così). Prima dell’anno scorso mai e poi mai mi sarei sognato di attaccare il mio notebook nel bar del villaggio turistico di un paesino del sud, per non fare la classica figura da nerd, adesso se lo faccio sono quasi l’eroe del paese perchè tutti vogliono vedere le foto che scatto, e mi chiedono questo e quello. Scenario impensabile, fino ad un paio di anni fa.</p>
<p>Perciò, concludendo, per favore: non chiedeteci alcuna disintossicazione, perchè non siamo intossicati. Noi viviamo bene, con la nostra tecnologia, esattamente come una massaia si trova a suo agio ai fornelli, un ciclista con la sua bici, un lettore con il suo libro, un appassionato di puzzle davanti alle sue tile, un enigmista con il suo cruciverba, e così via. Il fatto è che oggi la tecnologia permea ogni aspetto della nostra e della vostra vita, e quindi diventa sempre più naturale averla sempre a disposizione, anche e soprattutto al fatto che ormai ci sono device cool (fighi?) che rendono un oggetto gradevole alla vista, adatto ad un locale milanese il sabato sera. E per questo, grazie Apple.</p>
<p>Tecnologia è emozione e passione. E quindi vita.    <br />Perchè privarsene, dunque?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/19/disintossicazione-da-internet-dal-web-e-dalla-tecnologia.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggiornamento delle mie app &#8220;I Love&#8221; dedicate al calcio</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/17/aggiornamento-delle-mie-app-i-love-dedicate-al-calcio.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/17/aggiornamento-delle-mie-app-i-love-dedicate-al-calcio.aspx#comments</comments>
		<pubDate>Tue, 17 Jul 2012 09:18:21 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=30</guid>
		<description><![CDATA[Sul marketplace Windows Phone sono disponibili alcune decine di app dedicate alle squadre di calcio di serie A, di serie B e qualcuna anche di Lega Pro Prima Divisione. Questo è il link diretto al marketplace con l’elenco di tutte le mie app. Ieri pomeriggio e ieri sera ho lavorato per su tutte le app [...]]]></description>
				<content:encoded><![CDATA[<p>Sul marketplace Windows Phone sono disponibili alcune decine di app dedicate alle squadre di calcio di <strong>serie A</strong>, di <strong>serie B</strong> e qualcuna anche di <strong>Lega Pro Prima Divisione</strong>.</p>
<p><a href="http://www.windowsphone.com/it-IT/search?q=VivendoByte.net" target="_blank">Questo è il link diretto al marketplace</a> con l’elenco di tutte le mie app.</p>
<p><strong>Ieri pomeriggio e ieri sera ho lavorato per su tutte le app</strong> – aggiornamento che è sicuramente già arrivato su tutti i vostri smartphone Windows Phone.</p>
<p>Non si tratta infatti di un aggiornamento riguardante l’app in sé, ma solo sulle informazioni che vengono riportate, quindi, per esempio:</p>
<ul>
<li>nomi di presidenti o allenatori cambiati</li>
<li>serie in cui milita la squadra</li>
<li>nome dello stadio di appartenenza e relativa capienza</li>
<li>trofei vinti durante la scorsa annata (scudetti, coppe Italia, SuperCoppe, etc.)</li>
</ul>
<p>Quindi, una squadra ha vinto uno scudetto, altre sono state retrocesse, altre ancora sono state promosse, e così via. Tutte informazioni che adesso vengono riportate correttamente da tutta la mia suite di app, aggiornate secondo quanto riportato da Wikipedia. Alcune squadre di serie B sono state ovviamente retrocesse, e quindi da quest’anno ci sono alcune app che riguardano squadre che nel prossimo campionato giocheranno nella Lega Pro Prima Divisione.</p>
<p>Ecco un breve riassunto, per concludere, delle squadre e relative app che giocheranno durante il prossimo campionato 2012/13.</p>
<p><strong>SERIE A</strong>    <br />I Love Atalanta    <br />I Love Bologna    <br />I Love Cagliari    <br />I Love Catania    <br />I Love Chievo    <br />I Love Fiorentina    <br />I Love Genoa    <br />I Love Inter    <br />I Love Juventus    <br />I Love Lazio    <br />I Love Milan    <br />I Love Napoli    <br />I Love Palermo    <br />I Love Parma    <br />I Love Pescara    <br />I Love Roma    <br />I Love Sampdoria    <br />I Love Siena    <br />I Love Torino    <br />I Love Udinese</p>
<p><strong>SERIE B     <br /></strong>I Love Ascoli    <br />I Love Bari    <br />I Love Brescia    <br />I Love Cesena    <br />I Love Cittadella    <br />I Love Crotone    <br />I Love Empoli    <br />I Love Grosseto    <br />I Love Juve Stabia    <br />I Love Lecce    <br />I Love Livorno    <br />I Love Modena    <br />I Love Novara    <br />I Love Padova    <br />I Love Reggina    <br />I Love Sassuolo    <br />I Love Varese    <br />I Love Verona</p>
<p><strong>LEGA PRO PRIMA DIVISIONE</strong>    <br />I Love Albinoleffe    <br />I Love Gubbio    <br />I Love Nocerina    <br />I Love Vicenza</p>
<p>Ci sono tre nuove squadre che dalla Lega Pro Prima Divisione sono salite alla serie B. L’app arriverà molto presto su tutti i vostri Windows Phone. Le squadre sono:</p>
<p>I Love Pro Vercelli   <br />I Love Spezia    <br />I Love Virtus Lanciano</p>
<p>Saranno molto probabilmente pronte prima di agosto! Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/17/aggiornamento-delle-mie-app-i-love-dedicate-al-calcio.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistema di push notification per Windows Phone e Windows 8 rivendibile a terzi</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/17/sistema-di-push-notification-per-windows-phone-e-windows-8-rivendibile-a-terzi.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/17/sistema-di-push-notification-per-windows-phone-e-windows-8-rivendibile-a-terzi.aspx#comments</comments>
		<pubDate>Tue, 17 Jul 2012 08:03:55 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=34</guid>
		<description><![CDATA[Facciamola breve: mi sono stancato di dover – per ciascun app Windows Phone o Windows 8 che necessiti di push notification – di dover implementare bene o male le stesse cose. Ovvero, in breve: una tabella “Subscribers” sul database SQL Server che mantenga i subscriber per quella specifica app implementare sul servizio WCF specifico dell’app [...]]]></description>
				<content:encoded><![CDATA[<p>Facciamola breve: mi sono stancato di dover – per ciascun app Windows Phone o Windows 8 che necessiti di push notification – di dover implementare bene o male le stesse cose. Ovvero, in breve:</p>
<ol>
<li>una tabella “Subscribers” sul database SQL Server che mantenga i subscriber per quella specifica app </li>
<li>implementare sul servizio WCF specifico dell’app i metodi Subscribe/Unsubscribe invocati internamente all’app per permettere all’utente di attivare/disattivare le notifiche </li>
</ol>
<p>Dal punto di vista server, ogni mia app (Duello in Cucina, Deputati Italiani, la futura Diretta Volley, Piloti Virtuali Italiani, etc.) ha bene o male una certa parte di sistema ripetuta, cosa che cominciava a non andarmi del tutto a genio. Inoltre può sembrare poca roba, ma vi assicuro che non è così. Ed anche se fosse poca roba, è comunque una cosa da ripetere e scrivere ogni volta, con rischio ovviamente di codice ripetuto, a rischio di bug, etc. etc. Quindi, mi sono detto, sarebbe fattibile creare un’unica infrastruttura database &amp; WCF talmente generica da poter essere sfruttata in ogni mia futura app, indipendentemente dal fatto che sia Windows Phone o Windows 8, per gestire le push notification? E magari talmente generica da poter essere addirittura “venduta/affittata” a terzi? La risposta è ovviamente sì.</p>
<p><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://localhost/wordpress/wp-content/uploads/2012/10/895138f6-e54f-4f25-b19c-e8e017081658wlEmoticon-smile_2.png"></p>
<p><strong>Cosa vi metto quindi a disposizione?</strong>     <br />E’ semplice: un servizio WCF che espone i seguenti metodi:</p>
<p><img src="http://farm8.static.flickr.com/7111/7581607466_f0335b720f.jpg"></p>
<p>I metodi sono autoesplicativi:</p>
<ol>
<li>va chiamato il metodo <strong>Subscribe</strong> quando da una qualsiasi delle vostre app wp7/win8 volete aggiungere un nuovo subscriber </li>
<li>va chiamato il metodo <strong>Unsubscribe</strong> quando da una qualsiasi delle vostre app wp7/win8 volete rimuovere un nuovo subscriber </li>
</ol>
<p>Il metodo <strong>Push</strong> invece deve essere invocato dal vostro servizio web/cloud: questo è il vero motore che invia le notifiche a tutti i subscriber relativi alla vostra app.</p>
<p>Chiaramente le chiamate ai metodi WCF descritti qui sopra utilizzano una serie di classi (SubscribeRequest, UnsubscribeRequest e PushRequest) che incapsulano un po’ di informazioni, grazie alle quali vi autenticate, mi dite che siete (inteso come “cliente”), mi dite quale app siete, etc. etc. Nel momento in cui volete inviare le notifiche, stessa cosa: mi dite chi siete, quale app siete, il tipo di notifica (toast, tile, badge, etc.), l’xml della push notification che volete inviare, etc. etc.</p>
<p>Io mi occupo di memorizzare sui miei server i vostri utenti e di inviare a tutti la notifica.</p>
<p><strong>Limitazioni</strong>     <br />Chiaramente, per ora metto a disposizione questa cosa solo ad amici e colleghi developer.</p>
<p>Ci sono alcune limitazioni note di cui vi voglio parlare.</p>
<ol>
<li>Poca sicurezza, nel senso che ad oggi mi dovete comunicare (solo per le app Windows 8) la SecretKey ed il Sid relativo a ciascuna app che volete gestire </li>
<li>Non c’è la possibilità di fare push notification “selettive”: cioè, se la vostra app ha 1000 subscribers attivi, in questo momento la chiamata al metodo <strong>Push</strong> invia a tutti la notifica, mentre in realtà potrebbe non essere così (immaginate un’app di calcio, ed immaginate che l’utente voglia ricevere una notifica solo quando segna la squadra per cui tifa – questo scenario non è ancora coperto – ma ci sto lavorando su) </li>
</ol>
<p>Se volete aiutarmi, se volete provarlo, se avete qualche suggerimento/segnalazione da darmi, sono tutt’orecchi!</p>
<p><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://localhost/wordpress/wp-content/uploads/2012/10/b2944c37-14aa-46e5-988e-126e868c3f99wlEmoticon-smile_2.png"></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/17/sistema-di-push-notification-per-windows-phone-e-windows-8-rivendibile-a-terzi.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App Windows 8 Metro-Style, Bing Map e snapped view</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/14/app-windows-8-metro-style-bing-map-e-snapped-view.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/14/app-windows-8-metro-style-bing-map-e-snapped-view.aspx#comments</comments>
		<pubDate>Sat, 14 Jul 2012 06:17:04 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=36</guid>
		<description><![CDATA[Lavorando sulla mia prima app per Windows 8 mi sono scontrato con un problema davvero fastidio e difficilmente debuggabile. In pratica, ho implementato una normalissima Page che – in condizioni normali di full-screen – mostra una BingMap che visualizza un volo aereo. Sulla mappa potete fare normali operazioni come zoom, pan, etc. etc. Nella versione [...]]]></description>
				<content:encoded><![CDATA[<p>Lavorando sulla mia prima app per Windows 8 mi sono scontrato con un problema davvero fastidio e difficilmente debuggabile.</p>
<p>In pratica, ho implementato una normalissima Page che – in condizioni normali di full-screen – mostra una BingMap che visualizza un volo aereo. Sulla mappa potete fare normali operazioni come zoom, pan, etc. etc. Nella versione snapped view della stessa pagina avevo deciso di rimuovere la BingMap, e di mostrare solo un’altra serie di informazioni. Quello che accadeva è nel momento in cui facevo lo snap della pagina, l’app si schiantava e Visual Studio mi segnalava una <em><font color="#ff0000">unhandled exception</font></em>. Ho cercato di capire per sicuramente più di un paio d’ore, alla fine sono riuscito ad isolare il problema, che riguardava proprio la BingMap. Se la rimuovevo dallo XAML, infatti, tutto funzionava senza problemi. La cosa si verificava sia se metteva in snapped la pagina – come ho appena descritto – sia se partivo dalla pagina precedente in snapped view.</p>
<p><strong>Come risolvere?</strong></p>
<p>Questa cosa è spiegata sommariamente nella sezione Q&amp;A della pagina <a href="http://visualstudiogallery.msdn.microsoft.com/0c341dfb-4584-4738-949c-daf55b82df58/" target="_blank">Bing Maps SDK for Metro style apps (RP)</a>.</p>
<p><strong>Per risolvere, quindi, basta impostare una MinWidth al controllo BingMap</strong>, impostandolo ad un valore qualsiasi maggiore di zero. A quanto pare, infatti, durante l’operazione di snapping la width e la height finiscono uguali a zero, causando non pochi problemi, tra cui il crash dell’app e del debugger. Io l’ho impostata a “160” ed il problema è sparito!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/14/app-windows-8-metro-style-bing-map-e-snapped-view.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fare lo short di un url usando le Google API</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/07/fare-lo-short-di-un-url-usando-le-google-api.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/07/fare-lo-short-di-un-url-usando-le-google-api.aspx#comments</comments>
		<pubDate>Sat, 07 Jul 2012 08:43:59 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=39</guid>
		<description><![CDATA[Sviluppando applicazioni Metro per Windows 8, una delle funzionalità più interessanti – non solo dal punto di vista developer ma anche utente – è la possibilità di fare lo share di un qualsiasi contenuto usando una delle app già installate nel sistema. In pratica per un utente il tutto si riassume in pochi passi, ovvero: [...]]]></description>
				<content:encoded><![CDATA[<p>Sviluppando applicazioni Metro per Windows 8, una delle funzionalità più interessanti – non solo dal punto di vista developer ma anche utente – è la possibilità di fare lo <em>share</em> di un qualsiasi contenuto usando una delle app già installate nel sistema. In pratica per un utente il tutto si riassume in pochi passi, ovvero:</p>
<ul>
<li>vedo un contenuto interessante all’interno di un’app (una foto, un link, un articolo, un punteggio in un videogioco, il prezzo di un articolo, un film da vedere al cinema, qualsiasi cosa) e decido di condividerla con qualcuno</li>
<li>l’espressione “condividerla con qualcuno” è volutamente generica, perchè vuol dire un sacco di cose (molte delle quali ancora da intuire, probabilmente): vuol dire poter mandare una mail, twittare, postarla sulla propria pagina Facebook, postare una foto su PInteret, marcare un link tra quelli preferiti in Diio, aggiungere una foto in un photoset di Flickr, etc. etc.</li>
<li>per farlo, l’utente non deve far altro che richiamare lo <em>charm</em> di Share di Windows 8 premendo <strong>Win + H</strong> (oppure <strong>Win + C</strong> e poi cliccare su Share). Se l’app che state usando prevede questa funzionalità, Windows 8 mostrerà l’elenco di app installate nel sistema che sono predisposte a condividere l’informazione</li>
</ul>
<p>Nell’app Windows 8 che sto sviluppando, <strong>pviCommunity</strong>, è possibile per esempio fare lo share di fotografie scattate durante i voli virtuali di <a href="http://www.pvi.it" target="_blank">Piloti Virtuali Italiani</a>. Ogni fotografia è identificata da un url ben preciso, quindi…mi sono detto…perchè non permette di twittare dalla mia app quanto sia bella una certa foto. Sappiamo tutti che i tweet hanno una lunghezza massima di 140 caratteri. L’url di una fotografia può essere una cosa tipo questa:</p>
<p><a href="http://service.vivendobyte.net/FlightLogs/7600/2012-7-6_11-47-26-546.jpg" target="_blank">http://service.vivendobyte.net/FlightLogs/7600/2012-7-6_11-47-26-546.jpg</a></p>
<p>E’ una fotografia reale, quindi se cliccate sul link potete tranquillamente guardarla.   <br /><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://localhost/wordpress/wp-content/uploads/2012/10/b0e9df58-f3c7-4a31-9c32-303d32386febwlEmoticon-smile_2.png"></p>
<p>La domanda è la seguente: come è possibile fare lo short di questo url, per esempio usando le API di Google. Il primo passo <a href="https://code.google.com/apis/console" target="_blank">è quello di registrarsi qui</a> per ottenere una <em>apikey</em> da utilizzare direttamente nel vostro codice C#. Fatto questo, utilizzate questa classe per fare tutto il resto:</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> GoogleUrlShortnerApi</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">private</span> <span class="kwrd">const</span> <span class="kwrd">string</span> key = <span class="str">"api_key"</span>;</pre>
<pre> </pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> Shorten(<span class="kwrd">string</span> url)</pre>
<pre>        {</pre>
<pre class="alt">            <span class="kwrd">string</span> post = <span class="str">"{\"longUrl\": \""</span> + url + <span class="str">"\"}"</span>;</pre>
<pre>            <span class="kwrd">string</span> shortUrl = url;</pre>
<pre class="alt"> </pre>
<pre>            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(<span class="str">"https://www.googleapis.com/urlshortener/v1/url?key="</span> + key);</pre>
<pre class="alt">            <span class="kwrd">try</span></pre>
<pre>            {</pre>
<pre class="alt">                request.Method = <span class="str">"POST"</span>;</pre>
<pre>                request.ContentType = <span class="str">"application/json"</span>;</pre>
<pre class="alt"> </pre>
<pre>                <span class="kwrd">using</span> (Stream requestStream = request.GetRequestStreamAsync().Result)</pre>
<pre class="alt">                {</pre>
<pre>                    <span class="kwrd">byte</span>[] postBuffer = System.Text.Encoding.UTF8.GetBytes(post);</pre>
<pre class="alt">                    requestStream.Write(postBuffer, 0, postBuffer.Length);</pre>
<pre>                }</pre>
<pre class="alt"> </pre>
<pre>                <span class="kwrd">using</span> (HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result)</pre>
<pre class="alt">                {</pre>
<pre>                    <span class="kwrd">using</span> (Stream responseStream = response.GetResponseStream())</pre>
<pre class="alt">                    {</pre>
<pre>                        <span class="kwrd">using</span> (StreamReader responseReader = <span class="kwrd">new</span> StreamReader(responseStream))</pre>
<pre class="alt">                        {</pre>
<pre>                            <span class="kwrd">string</span> json = responseReader.ReadToEnd();</pre>
<pre class="alt">                            shortUrl = Regex.Match(json, <span class="str">@""</span><span class="str">"id"</span><span class="str">": ?"</span><span class="str">"(?&lt;id&gt;.+)"</span><span class="str">""</span>).Groups[<span class="str">"id"</span>].Value;</pre>
<pre>                        }</pre>
<pre class="alt">                    }</pre>
<pre>                }</pre>
<pre class="alt">            }</pre>
<pre>            <span class="kwrd">catch</span> (Exception ex)</pre>
<pre class="alt">            {</pre>
<pre>                <span class="rem">// if Google's URL Shortner is down...</span></pre>
<pre class="alt">                System.Diagnostics.Debug.WriteLine(ex.Message);</pre>
<pre>                System.Diagnostics.Debug.WriteLine(ex.StackTrace);</pre>
<pre class="alt">            }</pre>
<pre> </pre>
<pre class="alt">            <span class="kwrd">return</span> shortUrl;</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
</div>
<style type="text/css"><![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;</style>
<p> </p>
<p>Il codice è pensato per girare all’interno di un’app Windows 8 Metro-style, chiaramente.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/07/fare-lo-short-di-un-url-usando-le-google-api.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push Notification con Windows 8, aspetti tecnici e ragionamenti vari</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/07/07/push-notification-con-windows-8-aspetti-tecnici-e-ragionamenti-vari.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/07/07/push-notification-con-windows-8-aspetti-tecnici-e-ragionamenti-vari.aspx#comments</comments>
		<pubDate>Sat, 07 Jul 2012 08:15:26 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[.NET World]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=41</guid>
		<description><![CDATA[Nelle ultime settimane ho studiato pesantemente tutta la nuova architettura che Microsoft ha messo in piedi per permettere a noi dev di inviare push notification alle nostre app Metro. Partivo con un po’ di vantaggio per il semplice fatto che avevo già fatto la stessa cosa con Windows Phone 7, ma ci ho comunque dovuto [...]]]></description>
				<content:encoded><![CDATA[<p>Nelle ultime settimane ho studiato pesantemente tutta la nuova architettura che Microsoft ha messo in piedi per permettere a noi dev di inviare push notification alle nostre app Metro. Partivo con un po’ di vantaggio per il semplice fatto che avevo già fatto la stessa cosa con Windows Phone 7, ma ci ho comunque dovuto sbattere un po’ la testa. Alcune cose sono cambiate, come è logico che sia.</p>
<p>Facciamola breve. Gli ingredienti di cui avete bisogno per mettere in piedi le push notification per la vostra app Metro sono i seguenti:</p>
<ul>
<li>ovviamente, un’app Metro-style Windows 8. La vostra app deve permettere ai vostri utenti di sottoscriversi alle notifiche push: questo vuol dire banalmente mettere un controllo tipo ToggleSwitch nei settings della vostra app grazie al quale l’utente può scegliere se ricevere oppure no le notifiche (poi sta a voi magari fargli scegliere se vuole ricevere solo le tile notification, oppure solo le toast, le badge, etc. etc.). E’ buona norma farvi restituire l’esito di questa operazione, per informare l’utente se tutto è andato bene oppure no: questo può essere un semplice <em>bool</em> oppure qualcosa di più complesso. Quando una vostra app si sottoscrive alle push notification riceve un url, che identifica univocamente quel device e quell’applicazione</li>
<li>un vostro “cloud-service”, ovvero un servizio Web che al momento opportuno spara a tutti i vostri utenti la notifica. In quasi tutte le mie app Windows Phone 7 ho praticamente un servizio WCF che fra le altre cose serve anche a questo scopo. In pratica, quindi, vi serve un qualsiasi servizio di hosting che vi metta a disposizione database SQL Server, l’hosting di servizi WCF, etc. etc.</li>
<li>tornando al punto (1), quando l’utente attiva il ToggleSwitch invoca un metodo esposto dal servizio WCF, che si occupa di memorizzare server-side gli url che vengono associati al proprio dispositivo (dico dispositivo perchè potrebbe essere un pc, un notebook, un ultrabook, un tablet, un Surface, un qualsiasi dispositivo su cui gira Windows 8)</li>
</ul>
<p>I punti qui sopra sono ovviamente un po’ più complessi, andrebbero sviscerati fino a riempire libri su libri. Io la faccio molto semplice, basta googlare per raccogliere informazioni in quantità. E devo anche aggiungere che MSDN è decisamente migliorata sotto questo punto di vista, rispetto ai primi tempo con Windows Phone. Adesso potete davvero trovare quickstart, tutorial, esempi di codice, xml, etc. etc.</p>
<p>Per cui una volta messa in piedi tutta l’infrastruttura software, la cosa è piuttosto semplice. Quando si scatena un determinato evento, il servizio WCF passa in rassegna la tabella dei vostri utenti che vogliono ricevere le notifiche: per ciascuno dei vostri utenti avete un url che lo identifica in modo inequivocabile ed univoco. A questo url inviate un certo blocco XML ed il gioco è fatto. L’XML può identificare qualsiasi tipo di notifica, anche se di un solo tipo per volta: non potete specificare con un unico XML una notifica toast e di tipo tile. All’interno di una notifica tile, però, potete specificare sia quella square che quella wide (ovvero: sia quella quadrata, che quella rettangolare): questo è indispensabile, perchè dal punto di vista del servizio WCF non sapete quale tile sta usando l’utente, e quindi è necessario mandargliele entrambe. Se sta usando quella square, vedrà quella, altrimenti quella wide.</p>
<p>Parliamo un secondo di settings della nostra app Windows 8 Metro-style.   <br />Generalmente, con un’app Windows 8 verrebbe le tentazione di salvare tutti i settings all’interno di quelle roaming. Questo significa che i vostri settings viaggiano su tutti i device Windows 8 su cui state usando quell’app, e rimangono sincronizzate. Se cambiate un’impostazione su un PC, vi ritroverete la stessa impostazione su tutti gli altri device, insomma. Attenzione, però: parlando di push notification non è una buona idea. Nei settings delle mie app Windows 8 che fanno uso di push notification mantengo sempre due informazioni: un bool che mi dice se le notifiche sono attive, e l’url univoco di quel device. Questi due settings li salvo all’interno dei settings locali e non su quelle roaming, perchè sono impostazioni specifiche del device e non dell’app. Magari su un PC desktop (che non ha problemi di salvaguardia della batteria) vorrei sempre lasciare abilitate le notifiche, mentre potrebbe non essere la stessa cosa su un tablet. Su un device voglio le notifiche attive, sull’altro no. Quindi è opportuno decidere cosa salvare nei settings di tipo roaming, e cosa salvare nei settings di tipo local.</p>
<p>Forse la cosa più difficile è stato capire quali tipi di tile sono supportati dal sistema di notifiche (e quale XML inviare per ciascuna di esse, soprattutto).   <br />Per questo vi lascio questa pagina:</p>
<p><a href="http://msdn.microsoft.com/library/windows/apps/Hh761491">http://msdn.microsoft.com/library/windows/apps/Hh761491</a></p>
<p>che riporta tutte le tile, siano essere quadrate o rettangolari. Ce ne sono un bel po’, che supportano solo testo, solo immagine, oppure testo ed immagine insieme, con diverse formattazioni.</p>
<p>Lo so, rispetto a tanti altri, questo post è un po’ sconclusionato: ho solo voluto riassumere in modo sparso un po’ di concetti con cui mi sono scontrato nei giorni scorsi, lavorando sulle push notification.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/07/07/push-notification-con-windows-8-aspetti-tecnici-e-ragionamenti-vari.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App per Windows Phone: i luoghi vivono grazie a Wikisticker!</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/05/16/app-per-windows-phone-i-luoghi-vivono-grazie-a-wikisticker.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/05/16/app-per-windows-phone-i-luoghi-vivono-grazie-a-wikisticker.aspx#comments</comments>
		<pubDate>Wed, 16 May 2012 07:56:14 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=43</guid>
		<description><![CDATA[Ieri ho scoperto una straordinaria app per qualsiasi Windows Phone 7 (dal Nokia Lumia a tutti gli altri). Straordinaria sia per la parte tecnica sia per le implicazione social che ha. L’app si chiama Wikisticker, è gratuita, e potete installare direttamente sul vostro smartphone Windows Phone da qui. Di cosa si tratta? Con Wikisticker potete [...]]]></description>
				<content:encoded><![CDATA[<p>Ieri ho scoperto una straordinaria app per qualsiasi Windows Phone 7 (dal Nokia Lumia a tutti gli altri). Straordinaria sia per la parte tecnica sia per le implicazione social che ha. L’app si chiama Wikisticker, è gratuita, e potete installare direttamente <a href="http://www.windowsphone.com/it-IT/apps/6d351c9e-7b8f-4721-b22c-8dcb6dd7205b" target="_blank">sul vostro smartphone Windows Phone da qui</a>.</p>
<p>Di cosa si tratta?</p>
<p><strong>Con Wikisticker potete pubblicare dei brevi messaggi (sticker) geolocalizzandoli</strong>. Questo significa che uno sticker viene indissolubilmente legato alla posizione in cui vi trovate, grazie al GPS integrato nel vostro telefono. <strong><font color="#008040">Ogni sticker può essere pubblico</font></strong> (e quindi visibile a tutti quanti), <strong><font color="#008040">oppure privato</font></strong> (quindi visibile solo al destinatario dello sticker stesso). L’app è diverse funzioni, che permettono di:</p>
<ol>
<li>creare un nuovo sticker nel luogo in cui vi trovate (Wikisticker non solo prende le coordinate gps, ma anche come siete orientati, per cui occhio!)</li>
<li>vedere gli sticker pubblici e privati che stanno intorno a voi, in un raggio di 300 metri</li>
<li>gestire i propri amici: richiedere o accettare amicizie, individuare gli amici (quest’ultima funzione è davvero simpatica: possiamo decidere se condividere la nostra posizione in modo pubblico; in questo modo possiamo vedere sulla mappa di Bing dove si trovano i nostri amici, e quindi dove <em>potenzialmente</em> hanno lasciato i loro sticker</li>
</ol>
<p><strong><font color="#008040">Wikisticker permette di vedere gli sticker in due modalità: o attraverso la classica mappa Bing geografica vista dall’alto, oppure attraverso la realtà aumentata.</font></strong> <strong>Quest’ultima modalità è davvero bellissima</strong>: ciò che accade è che il vostro smartphone vi fa inquadrare il <em>mondo reale</em> attraverso la telecamera integrata, e vedete in realtà aumentata gli sticker fluttuare a mezz’aria, con la fotografia dell’utente e chiaramente il messaggio.</p>
<p>L’app è davvero ben fatta: pulita, veloce, reattiva e molto pratica ed istintiva nell’utilizzo.</p>
<p>Gli scopi di Wikisticker sono molteplici. Il punto di forza è proprio la semplicità e la flessibilità: l’unico limite in pratica è la nostra fantasia. Il motto dell’app – “I luoghi vivono grazie a Wikisticker” – rende bene l’idea.</p>
<p>Possiamo lasciare messaggi e dediche in prossimità dei luoghi che ci stanno a cuore.   <br />Possiamo lasciare un messaggio ricordo in prossimità di quel parco dove andavamo da bambini a giocare.    <br />Possiamo consigliare un locale, un ristorante o un hotel, lasciando uno sticker proprio sulla porta d’ingresso.    <br />Possiamo lasciare una dedica alla nostra innamorata nel luogo in cui si ha avuto il primo appuntamento.    <br />E molto altro ancora: come dicevo prima, l’unico limite è la nostra fantasia!</p>
<p>Non so voi, ma a me affascina molto l’idea di disseminare il mondo di sticker virtuali con Wikisticker. E’ un modo come un altro per essere <em>social</em>, per rimanere in contatto, di convidere esperienze e di rendere noto il nostro <em>lifestyle</em>.</p>
<p>Per chiudere, vi lascio due link!</p>
<p>Uno è questo, relativo al blog ufficiale dell’app : <a title="http://www.wikisticker.com/post/2012/05/16/Wikisticker-modi-duso!.aspx" href="http://www.wikisticker.com/post/2012/05/16/Wikisticker-modi-duso!.aspx">http://www.wikisticker.com/post/2012/05/16/Wikisticker-modi-duso!.aspx</a></p>
<p>Il secondo è questo, ed è il link ufficiale dell’app sul Marketplace : <a title="http://www.windowsphone.com/it-IT/apps/6d351c9e-7b8f-4721-b22c-8dcb6dd7205b" href="http://www.windowsphone.com/it-IT/apps/6d351c9e-7b8f-4721-b22c-8dcb6dd7205b">http://www.windowsphone.com/it-IT/apps/6d351c9e-7b8f-4721-b22c-8dcb6dd7205b</a></p>
<p>Buon Wikisticker a tutti!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/05/16/app-per-windows-phone-i-luoghi-vivono-grazie-a-wikisticker.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sostituzione alimentatore e scheda video, problemi e risoluzione</title>
		<link>http://blog.vivendobyte.net/blog/archive/2012/05/15/sostituzione-alimentatore-e-scheda-video-problemi-e-risoluzione.aspx</link>
		<comments>http://blog.vivendobyte.net/blog/archive/2012/05/15/sostituzione-alimentatore-e-scheda-video-problemi-e-risoluzione.aspx#comments</comments>
		<pubDate>Tue, 15 May 2012 06:53:23 +0000</pubDate>
		<dc:creator>Igor Damiani</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=45</guid>
		<description><![CDATA[Prologo Giovedì scorso, durante la giornata, Amazon ha consegnato a casa mia i primi componenti hardware che volevo sostituire al mio PC desktop. Se avete letto il mio precedente post, siete già informati su questa storia, perciò vado diretto al dunque. Giovedì sera, sebbene fossi piuttosto stanco dato il rientro dalla mia trasferta di lavoro [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Prologo</strong>     <br />Giovedì scorso, durante la giornata, Amazon ha consegnato a casa mia i primi componenti hardware che volevo sostituire al mio PC desktop. Se avete letto <a href="http://blog.vivendobyte.net/blog/archive/2012/05/10/Upgrade-del-mio-desktop-divise-in-piugrave-rate-come-lIMU.aspx" target="_blank">il mio precedente post</a>, siete già informati su questa storia, perciò vado diretto al dunque.</p>
<p>Giovedì sera, sebbene fossi piuttosto stanco dato il rientro dalla mia trasferta di lavoro in Valtellina (fatto sulla mia automobile, con aria condizionata guasta, con 28°C come temperatura esterna), ho preferito mettermi subito al lavoro e fare ciò che mi piace molto: l’assemblatore, soprattutto se fatto sul mio PC. Anche perchè, mi sono detto, se qualcosa non funziona ho tutto il tempo, il giorno dopo, di contattare Amazon e di gestire eventuali guasti e resi.</p>
<p>Cambiare un alimentatore ed una scheda video è una cosa piuttosto rapida: in circa 45 minuti, nella mia mansarda calda ed afosa, avevo già terminato tutto quanto. <strong><font color="#ff0000">Ho tolto il vecchio alimentatore</font></strong>, <strong><font color="#008040">ho inserito quello nuovo</font></strong>; <strong><font color="#ff0000">ho tolto la mia vecchia Radeon 4850</font></strong> <strong><font color="#008040">per montare la nuova Radeon 6870</font></strong>, ho riorganizzato la cavetteria interna. Ho cercato, insomma, di dare il meglio di me! Aggiungo qualche nota che magari può essere utile.</p>
<ol>
<li>La Radeon 4850 richiede uno slot PCI Express ed ha un solo connettore di alimentazione; in altezza occupa un solo slot </li>
<li>La Radeon 4870 richiede uno slot PCI Express, ha due connettori di alimentazione, ed in altezza occupa due slot </li>
<li>L’alimentatore è il <a href="http://www.amazon.it/gp/product/B005DPBAZQ/ref=oh_details_o00_s00_i00" target="_blank">Corsair da 850W, modello TX850M</a>; <strong><font color="#ff0000">sebbene sia indicato come modulare</font></strong>, occhio, <strong><font color="#008040">in realtà è un semi-modulare</font></strong>!! Questo significa che un certo numero di cavi di alimentazione sono già cablati, come in un alimentatore normale, e che poi potete eventualmente connettere altri cavi (compresi nella confezione) all’occorrenza. Avrei preferito un alimentatore modulare puro, pazienza! </li>
</ol>
<p>Terminato l’assemblaggio, portato a termine senza troppi sforzi, riattaccato il tutto e funziona tutto, al primo colpo. Mi ritengo molto soddisfatto. Ho solo dovuto riprogrammare nel BIOS la priorità d’avvio degli hard-disk: evidentemente nel staccare cavi e cavetti ho scambiato i connettori SATA. Poco male.</p>
<p>Avvio velocemente DiRT3, Skyrim, Call Of Duty MW3, giusto per alzare i dettagli grafici e vedere come <em>rulla</em> la nuova scheda video. Direi alla grande! Ma il tutto dura qualche minuto: sono davvero stanco, mi faccio una doccia e me ne vado a letto. Il giorno dopo utilizzo il mio PC in configurazione lavorativa, e non mi dà alcun tipo di problema. Le varie installazioni di Windows 7 e Windows 8 Consumer Preview rilevano la nuova scheda video senza battere ciglio.</p>
<p><strong>Il brutto arriva venerdì sera, però.      <br /></strong>Venerdì sera, complice il weekend, non prendo impegni nel mondo reale e decido di dare sfogo alla potenza della scheda video. Avvio Call Of Duty Modern Warfare 3, dettagli impostati su Ultra, alzo il volume delle mie casse Creative THX, mansarda nel buio assoluto, e comincio daccapo la campagna single-player. Completo le prime due missioni, sbalorditive ed ultra frenetiche, beandomi degli effetti grafici assolutamente spettacolari.</p>
<p>Le prime due missioni, decido, per stasera possono bastare. Appena sta per cominciare la terza, salvo tutto quanto e torno a Windows.    <br /><font color="#ff0000">KKkKKaaaaaaBuUuUM!!!</font> Faccio appena in tempo a vedere le icone del desktop, ed il pc sia spegne improvvisamente!     <br />Niente, non c’è più verso di riaccenderlo! Come potete immaginare faccio un po’ di tentativi.</p>
<ol>
<li>Apro il case e la scheda video è un pochino calda </li>
<li>Spengo la ciabatta, spegno l’alimentatore, stacco i cavi di alimentazione, aspetto un quarto d’ora: niente, il PC si raffredda ma non si accende più </li>
<li>Nemmeno la mattina dopo, nonostante abbia lasciato staccato il più possibile, il PC sembrava morto, ed ho dichiarato almeno l’alimentatore definitivamente KO </li>
</ol>
<p><strong>Come ho affrontato, e risolto il problema?</strong>     </p>
<p>La mattina dopo, sabato, alle 8:00 era già all’opera per capire e risolvere il problema. Vi do qualche spunto.</p>
<ol>
<li>Ho riattaccato i vecchi componente (alimentatore e scheda video), giusto per avere le prova del nove, e soprattutto di assicurarmi di aver salvato scheda madre, processore, RAM, etc. etc. Con i vecchi componenti il PC si accende, faccio il boot di Windows senza problemi </li>
<li>Riattacco i nuovi componenti ed il PC riprende a funzionare. Evidentemente lasciar scollegati i connettori sulla mainboard ha scaricato eventuale energia elettrostatica residua </li>
</ol>
<p>Decido che la causa è il calore generato dalla e sulla scheda video. Lasciando il case aperto, infatti, ho installato <a href="http://www.3dmark.com/" target="_blank">3D Mark 11</a> (in versione Basic) per far girare un po’ di demo e benchmark grafici. Dopo qualche minuto la scheda video diventa bollente, riesco appena a toccarla, e prendo posizione: così non va affatto bene. E decido di agire.</p>
<ol>
<li>Non posso ovviamente cambiare posizione alla scheda video, il bus PCI Express 16x è lì e non posso spostarlo </li>
<li>Cambio slot alla Sound Blaster Audigy 4 Pro, su bus PCI, che era secondo me troppo vicina alla scheda video </li>
<li>Rimuovo una scheda su bus PCI per avere 4 porte USB aggiuntive: ne usavo una sola, per la webcam, e l’ho sacrificata </li>
<li>Ho acquistato una ventola aggiuntive da posizionare sulla scheda video, in modo tale da raffreddarla costantemente </li>
</ol>
<p>Ho inoltre cominciato ad utilizzare <strong>Open Hardware Monitor</strong>, <a href="http://openhardwaremonitor.org/" target="_blank">scaricabile da qui</a>, che permette di monitorare tutta una serie di informazioni sul proprio sistema: temperature dei core della CPU, della GPU, degli hard-disk; velocità della ventole in RPM, carico della GPU e molto altro ancora. <strong><font color="#008040">Dopo tutta questa serie di correzioni ed accorgimenti, mantengo la temperatura della Radeon intorno ai 45°C mentre sto lavorando</font></strong> (carico basso, direi) ed intorno ai 60°C mentre gioco (picco di 62°C). Considerando che la temperatura massima gestita dalla Radeon 6870 è di circa 100°C (temperatura oltre la quale si blocca e va in protezione), direi che sono ampiamente dentro i valori di esercizio standard. Grazie a <strong>Open Hardware Monitor</strong>, tengo d’occhio la temperatura e soprattutto la velocità della ventola, che accelera al crescere della temperatura, ma rimane sempre nel range di 1000-1400 RPM, molto al di sotto del regime massimo.</p>
<p>Bene, quindi, posso ritenermi soddisfatto, e posso tranquillamente discolpare l’alimentatore, che inizialmente avevo accusato di essersi fuso nel giro di qualche ora di lavoro!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vivendobyte.net/blog/archive/2012/05/15/sostituzione-alimentatore-e-scheda-video-problemi-e-risoluzione.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
