<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Coding</title>
	
	<link>http://coding.altervista.org/blog</link>
	<description>Chi sbaglia apprende meglio di chi non ha mai commesso errori, l'importante è non prenderci gusto!</description>
	<lastBuildDate>Mon, 07 Nov 2011 21:52:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/altervista/coding" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="altervista/coding" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">altervista/coding</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>ASP.NET MVC &amp; Microsoft Chart Controls</title>
		<link>http://coding.altervista.org/blog/2011/11/asp-net-mvc-microsoft-chart-controls/</link>
		<comments>http://coding.altervista.org/blog/2011/11/asp-net-mvc-microsoft-chart-controls/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 20:50:57 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[Microsoft .Net]]></category>
		<category><![CDATA[Microsoft Chart Controls]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/11/asp-net-mvc-microsoft-chart-controls/</guid>
		<description><![CDATA[Ultimamente mi sono concentrato molto sull’utilizzo di ASP.NET MVC per lo sviluppo di un progetto abbastanza grosso, tra le varie cose è sorta l’esigenza di poter utilizzare uno strumento per la generazione di grafici di vario tipo. All’inizio la mia scelta è ricaduta su “Libero API for Fusion Charts”, un prodotto fatto davvero molto bene [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente mi sono concentrato molto sull’utilizzo di ASP.NET MVC per lo sviluppo di un progetto abbastanza grosso, tra le varie cose è sorta l’esigenza di poter utilizzare uno strumento per la generazione di grafici di vario tipo. </p>
<p>All’inizio la mia scelta è ricaduta su “<a href="http://liberofusioncharts.codeplex.com/" target="_blank">Libero API for Fusion Charts</a>”, un prodotto fatto davvero molto bene e che offre la possibilità di implementare diverse tipologie di grafico (tante!). Nonostante le sue caratteristiche ho dovuto mettere da parte questa libreria in quanto legata all’utilizzo del componente Flash (sempre questioni di <a href="http://en.wikipedia.org/wiki/Legacy" target="_blank">legacy</a>). </p>
<p>Alla fine ho optato per la soluzione che poi si è rivelata anche la migliore (e ancora mi chiedo perché non ci ho pensato prima?). La scelta è ricaduta su “<a href="http://www.microsoft.com/download/en/details.aspx?id=14422" target="_blank">Microsoft Chart Controls</a>”. </p>
<p>Partiamo dal presupposto che questo prodotto non si presta bene, se non dopo qualche piccolo accorgimento, per essere utilizzato con ASP.NET MVC. Infatti nasce per funzionare principalmente all’interno di applicazioni Web Forms, la cui struttura è nettamente diversa da quella di un progetto MVC. Essendo il chart un controllo Server, necessita di una pagina web di tipo <code>System.Web.UI.Page</code> in cui poter essere posizionato, sappiamo bene che in una pagina MVC non è possibile inserire controlli di questo tipo.</p>
<p>Oggi vorrei spiegarvi come configurare il vostro progetto MVC perché i Microsoft Charts possano funzionare correttamente e senza alcun tipo di problema.</p>
<p>Prima di tutto è necessario estendere le funzionalità dell&#8217;oggetto <code>Page</code> perché possa occuparsi anche del disegno dei grafici ms. Lo facciamo realizzando un helper come nell’esempio che segue:</p>
<pre><code>namespace MvcApplication.Helpers
{
	public static class HelperCharts
	{
		public static void RenderChart(this Page page, System.Web.UI.DataVisualization.Charting.Chart chart)
		{
			var writer = new HtmlTextWriter(page.Response.Output);
			chart.RenderControl(writer);
		}
	}
}</code></pre>
<p>Chiaramente le istruzioni che abbiamo scritto sono poche e semplici, ritengo in ogni caso che lavorare in questo modo garantisce una migliore leggibilità e pulizia del codice&#160; e, soprattutto per quanto riguarda MVC, rispetto delle regole imposte dal pattern.</p>
<p>Completato il metodo dobbiamo assicurarci che tale funzionalità sia poi disponibile in tutte le <code>Views</code> e che la gestione dei Charts possa essere correttamente eseguita dal .Net Framework, per tale motivo è necessario il file web.config:</p>
<pre><code>&lt;configuration&gt;
	&lt;appSettings&gt;
		&lt;add key=&quot;ChartImageHandler&quot; value=&quot;storage=file;timeout=20&quot; /&gt;
	&lt;/appSettings&gt;
	&lt;system.web&gt;
		&lt;httpHandlers&gt;
		&lt;add path=&quot;ChartImg.axd&quot; verb=&quot;GET,HEAD,POST&quot;
			type=&quot;System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
				System.Web.DataVisualization, Version=4.0.0.0,
				Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot;
	        	validate=&quot;false&quot; /&gt;
		&lt;/httpHandlers&gt;
		&lt;pages&gt;
			&lt;namespaces&gt;
				&lt;add namespace=&quot;MvcApplication.Helpers&quot; /&gt;
			&lt;/namespaces&gt;
		&lt;/pages&gt;
	&lt;/system.web&gt;
&lt;/configuration&gt;
</code></pre>
<p>Come da documentazione è necessario aggiungere la chiave <code>ChartImageHandler</code> per definire le modalità di generazione del grafico (considerando che questo alla fine non è altro che un’immagine). Nell’elenco degli <code>HttpHandlers</code> è necessario configurare la risorsa utilizzata per la generazione dei grafici e, per concludere, volendo rendere visibile la funzione precedentemente scritta (<code>RenderChart</code>) in tutte le viste senza dover effettuare una import in ogni pagina del namespace, aggiungiamo all’elenco dei default <code>namespaces</code> anche quello in cui risiede il metodo da noi implementato.</p>
<p>In seguito possiamo realizzare un DTO fatto in questo modo:</p>
<pre><code>namespace MvcApplication.Models.DTO
{
	public sealed class SampleDTO
	{
		public Chart Chart { get; private set; }

		public SampleDTO(Chart chart)
		{
			Chart = chart;
		}
	}
}
</code></pre>
<p>Possiamo ora creare un controller di esempio che dispone di un’Action che restituisce il DTO precedentemente realizzato:</p>
<pre><code>namespace MvcApplication.Controllers
{
	using MvcApplication.Models.DTO;
	public class SampleController : Controller
	{
		[HttpGet] public ActionResult GetSampleChart()
		{
			Chart chart = new Chart();
			// Configure Chart...
			SampleDTO sampleDTO = new SampleDTO(chart);
			return View(sampleDTO);
		}
	}
}
</code></pre>
<p>E per concludere si passa alla View che si presenta come nell’esempio:</p>
<pre><code>&lt;%@ Page
	Title=&quot;Sample&quot;
	Language=&quot;C#&quot;
	MasterPageFile=&quot;~/Views/Shared/Shell.Master&quot;
	Inherits=&quot;System.Web.Mvc.ViewPage&lt;MvcApplication.Models.DTO.SampleDTO&gt;&quot; %&gt;
&lt;h2&gt;Chart Sample&lt;/h2&gt;
&lt;div&gt;
&lt;% 	Page.RenderChart(Model.Chart); &gt;
&lt;/div&gt;
</code></pre>
<p>Con poche righe, abbiamo realizzato quanto necessario per poter sfruttare in modo corretto e pulito i Microsoft Charts nel nostro progetto MVC.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/11/asp-net-mvc-microsoft-chart-controls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IIS – “Could not load file or assembly ‘Oracle.DataAccess’ or one of its dependencies. An attempt was made to load a program with an incorrect format.”</title>
		<link>http://coding.altervista.org/blog/2011/06/iis-could-not-load-file-or-assembly-oracle-dataaccess-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format/</link>
		<comments>http://coding.altervista.org/blog/2011/06/iis-could-not-load-file-or-assembly-oracle-dataaccess-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 09:51:04 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Could not load file or assembly]]></category>
		<category><![CDATA[Enable 32-Bit Applications]]></category>
		<category><![CDATA[Oracle.DataAccess]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/06/27/iis-could-not-load-file-or-assembly-oracle-dataaccess-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format/</guid>
		<description><![CDATA[In quest’ultimo periodo mi sono occupato dello sviluppo di un progetto basato su ASP.NET MVC ed Oracle. Per l’accesso ai dati abbiamo utilizzato Oracle.DataAccess, una libreria presente all’interno di un pacchetto di strumenti raggruppati sotto il nome di “Oracle Client”. Nel dover rilasciare l’applicativo si è verificato un particolare problema all’interno del Web Server IIS [...]]]></description>
			<content:encoded><![CDATA[<p>In quest’ultimo periodo mi sono occupato dello sviluppo di un progetto basato su ASP.NET MVC ed Oracle. Per l’accesso ai dati abbiamo utilizzato Oracle.DataAccess, una libreria presente all’interno di un pacchetto di strumenti raggruppati sotto il nome di “Oracle Client”. </p>
<p>Nel dover rilasciare l’applicativo si è verificato un particolare problema all’interno del Web Server IIS ospitante. Provando a chiamare l’applicazione da Browser veniva visualizzato il seguente messaggio di errore:</p>
<p class="warning"><code>Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.</code></p>
<p>Provando a cercare online una possibile soluzione al problema mi sono imbattuto in una serie di Post infiniti in cui vengono proposti particolari workground da applicare direttamente sul file <code>web.config</code> per risolvere un problema di riferimenti che si creano durante l’utilizzo della libreria. C’è da notare che questo problema <strong>non si verifica</strong> se si lavora con il server web Cassini integrato in Visual Studio. </p>
<p>Poi però ho trovato una soluzione meno invasiva a livello applicativo ma configurabile direttamente sul web server. In pratica per risolvere il problema è necessario apportare una piccola modifica al Pool Applicativo utilizzato per l’esecuzione dell’applicazione quando questa gira su un server a 64bit. Aprendo <em>Internet Information Services Manager</em> è possibile, all’interno della voce “Application Pools” configurare in maniera più dettagliata uno di questi pool selezionando la voce “Advanced Settings…” subito dopo averne selezionato uno. </p>
<p>Per l’applicazione MVC realizzata è stato scelto come pool predefinito “ASP.NET v4.0”, nelle opzioni avanzate ho spuntato la voce “<strong>Enable 32-Bit Applications</strong>” in modo tale da permettere l’esecuzione di codice a 32 ed a 64 bit insieme. </p>
<p>Rigenerando il pool e riavviando l’applicazione, il problema non si presenta più!</p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/06/iis-could-not-load-file-or-assembly-oracle-dataaccess-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 – Installare NoDo</title>
		<link>http://coding.altervista.org/blog/2011/03/windows-phone-7-installare-nodo/</link>
		<comments>http://coding.altervista.org/blog/2011/03/windows-phone-7-installare-nodo/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 00:49:08 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Install NoDo]]></category>
		<category><![CDATA[NoDo]]></category>
		<category><![CDATA[Upgrade]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/?p=1140</guid>
		<description><![CDATA[Prima di continuare nella lettura di questa breve guida sono necessarie due considerazioni: è necessario avere molta pazienza perchè questo processo funzioni; il processo è stato testato da me personalmente dopo non pochi tentativi totalmente falliti; In ogni caso se avete problemi o non vi è chiaro qualche passaggio potete lasciare un commento e provvederò [...]]]></description>
			<content:encoded><![CDATA[<p>Prima di continuare nella lettura di questa breve guida sono necessarie due          considerazioni:</p>
<ol>
<li>è necessario avere molta pazienza perchè questo processo funzioni;</li>
<li>il processo è stato testato da me personalmente dopo <strong> non pochi tentativi totalmente falliti</strong>;</li>
</ol>
<p>In ogni caso se avete problemi o non vi è chiaro qualche passaggio         potete lasciare un commento e provvederò a rispondere non appena possibile.         Ora partiamo con la guida!</p>
<ul>
<li>Scarichiamo USAIP.pbk dal seguente <a href="http://usaip.eu/en/USAIP.pbk">link</a> e successivamente facciamo doppio-click sul file appena scaricato.</li>
<li>Nella finestra che ci viene proposta selezioniamo la connessione              &#8220;<em>EUROIP PPTP Hungary</em>&#8221; ed inseriamo le seguenti credenziali di accesso:<br />
Username: <code>demo</code><br />
Password: <code>demo</code><br />
<strong>Attenzione: </strong>questa connessione viene automaticamente             chiusa dopo 7 minuti quindi cerchiamo di fare in fretta e con attenzione             le operazioni successive (in ogni caso è sempre possibile effettuare una riconnessione).<br />
<strong>Altra nota:</strong> se la connessione di rete non viene aperta, è necessario             modificare il registro di sistema scaricando una patch (un file reg) dal seguente             <a href="http://usaip.eu/en/ipsec.reg">link</a>, successivamente è necessario             riavviare il computer perchè tutto funzioni correttamente (quindi ripetiamo             il primo passaggio).</li>
<li>Ora sul nostro terminale Windows Phone disattiviamo la <strong>Connessione WIFI</strong> e ci assicuriamo che &#8220;<em>Modalità Aereo</em>&#8221; sia disattivata e &#8220;<em>Rete Dati</em>&#8221; sia attiva</li>
<li>Avviamo Zune e nello stesso tempo lasciamo la configurazione &#8220;rete dati&#8221; (sul              dispositivo) aperta             in modo tale da poterci operare velocemente (fare un fast siwtch On|Off).</li>
<li>Manualmente cerchiamo aggiornamenti da Zune (Settings -&gt;Phone-&gt;Update)</li>
<li><strong>Dopo qualche secondo</strong> (il tempo è molto variabile, leggendo i vari commenti su              XDA Developers alcune persone hanno aspettato 10-15 secondi, altre dai 33 ai 35 ed altre ancora addirittura             oltre i 55 secondi), io con il mio HTC HD7 ho aspettato 15 secondi(dopo aver effettuato ben 3 diversi tentativi con 3 tempi diversi e 3 ripetizioni per ogni range temporale) prima di             disattivare la rete dati (rispettivamente le voci &#8220;<em>Rete dati</em>&#8221; e &#8220;<em>Connessione 3G</em>&#8220;).</li>
<li>Aspettiamo un&#8217;altro pò ed un popup sul nostro cellulare dovrebbe notificarci             che un nuovo aggiornamento è disponibile!</li>
<li>Questi primi passaggi avranno sicuramente impegnato molto tempo (più o meno 7 minuti,              io in totale sono andato oltre i 30 minuti prima di completare l&#8217;operazione, tempo              in cui è stata effettuata più volte la riconnessione tramite pbk) quindi riattiviamo              la connessione alla rete &#8220;EUROIP L2TP Hungary&#8221; ed ora, con molta calma,             Zune procederà al download del primo aggiornamento ufficiale per Windows Phone 7!</li>
<li style="color: red;">Se non dovesse funzionare ripetiamo questo passaggio facendo attenzione             al numero totale di secondi che aspettiamo ogni volta prima di disattivare             la rete dati.</li>
</ul>
<p>Lascio ad un altro giorno la mia recensione sull&#8217;HTC HD7 o più in generale su Windows Phone ma voglio concludere questo brevissimo post esponendo la mia opinione: quando ho comprato Windows Phone una delle caratteristiche che più mi attraeva (o che forse ho idealizzato io nella mia mente) era la poca frammentazione che questo sistema avrebbe creato (rispetto ad Android per esempio) o più in generale la facilità con cui un utente avrebbe potuto ricevere aggiornamenti sul proprio terminale senza dover aspettare o fare chissà cosa. Il fatto che io abbia scritto questo post <strong>è per me una delusione</strong>. Il primo update ufficiale è stato rilasciato quasi una settimana fà ed ancora oggi la maggior parte dei possessori di un Windows Phone riscontrano problemi nel reperire facilmente gli aggiornamenti (quindi non sto parlando solo di Italia).</p>
<p>In ogni caso spero che questa guida sia utile a voi tanto quanto lo è stata per me! Enjoy and stay tuned!</p>
<p>Fonte ufficiale: <a href="http://forum.xda-developers.com/showthread.php?t=1012189">http://forum.xda-developers.com/showthread.php?t=1012189</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/03/windows-phone-7-installare-nodo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Differenze tra Web Site e Web Application Project in Visual Studio</title>
		<link>http://coding.altervista.org/blog/2011/03/differenze-tra-web-site-e-web-application-project-in-visual-studio/</link>
		<comments>http://coding.altervista.org/blog/2011/03/differenze-tra-web-site-e-web-application-project-in-visual-studio/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 17:38:58 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Web Application Project]]></category>
		<category><![CDATA[Web Site Project]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/03/09/differenze-tra-web-site-e-web-application-project-in-visual-studio/</guid>
		<description><![CDATA[Secondo me è fondamentale capire quali siano le reali differenze tra questi due tipi di progetti, io personalmente sono abituato ad utilizzare sempre e solo Web Application Project ma mi è capitato di lavorare su progetti in cui è stato utilizzato un “Web Site” (guarda caso proprio un progetto in Team). Conoscerne le differenze è [...]]]></description>
			<content:encoded><![CDATA[<p>Secondo me è fondamentale capire quali siano le reali differenze tra questi due tipi di progetti, io personalmente sono abituato ad utilizzare sempre e solo Web Application Project ma mi è capitato di lavorare su progetti in cui è stato utilizzato un “Web Site” (guarda caso proprio un progetto in Team). Conoscerne le differenze è un buon punto di partenza per poter capire quale delle due soluzione è più giusto scegliere in base al contesto.</p>
<h5>Web Site</h5>
<p>Un progetto “Web Site” non è altro che un insieme di file raggruppati all’interno di cartelle e sotto cartelle il cui tipo varia dalla semplice immagine, al file di testo per finire con i file di codice dell’applicazione. Non esiste un progetto reale associato ma una cartella root in cui tutto è contenuto. Un progetto di questo tipo è compilato dinamicamente mentre l’applicazione è in esecuzione e non contiene al suo interno una cartella <strong>bin</strong>.</p>
<p>Vantaggi:</p>
<ul>
<li>non è necessario avere un file di progetto o una cartella virtuale per la sua esecuzione</li>
<li>il sito può essere facilmente distribuito facendo un copia incolla dei file da cui è composto</li>
</ul>
<p>Svantaggi:</p>
<ul>
<li>non essendoci il file di progetto non è possibile avere un file di questo tipo con cui, facendo doppio click, è possibile aprire il progetto ottenendo l’elenco completo di tutto il materiale da cui è composto.</li>
<li>per <em>DEFAULT</em> tutti i file che sono presenti all’interno della cartella del progetto sono da considerare parte stessa di questo, per tale motivo, se alcuni di questi vogliamo escluderli, dobbiamo inserire un suffisso per i file in questione: <strong>.exclude</strong></li>
</ul>
<h5> Web Application Project</h5>
<p>Questo tipo di progetto è molto più con un semplice “Web Site”. Pensato più in la nel tempo rispetto al suo predecessore, è considerato come un Add On di Visual Studio, aggiunto per la prima volta a partire da VS 2005, viene predisposto anche nei nuovi ambienti (Visual Studio 2008 e 2010).</p>
<p>Vantaggi:</p>
<ul>
<li>Tutto il codice viene compilato in un singolo Assembly il cui contenuto viene piazzato all’interno della cartella <strong>bin</strong>.</li>
<li>Escludere file che non servono direttamente nel progetto è più semplice, essendoci una soluzione ed un file di progetto che ne identifica la struttura.</li>
</ul>
<p>Svantaggi:</p>
<ul>
<li>Condividere il lavoro con altri colleghi risulta più complesso nel caso si utilizzi Microsoft Visual Source Safe e roba simile.</li>
</ul>
<p>Chiariti questi macro concetti diventa più facile decidere, in ogni caso la documentazione MSDN mette a disposizione molta più roba in merito, il mio articolo vuole essere un <strong>riassunto molto “short”</strong> di ambedue le possibilità. A voi la scelta developer! </p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/03/differenze-tra-web-site-e-web-application-project-in-visual-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net – Windows Form Applications &amp; Context Sensitive Help</title>
		<link>http://coding.altervista.org/blog/2011/03/net-windows-form-applications-context-sensitive-help/</link>
		<comments>http://coding.altervista.org/blog/2011/03/net-windows-form-applications-context-sensitive-help/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 17:24:02 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[chm]]></category>
		<category><![CDATA[Context Sensitive Help]]></category>
		<category><![CDATA[Microsoft Compiled HTML Help]]></category>
		<category><![CDATA[Windows Forms]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/03/02/net-windows-form-applications-context-sensitive-help/</guid>
		<description><![CDATA[Esistono diverse strategie con cui è possibile realizzare un Help che realmente possa essere utile. Il .Net Framework, per le applicazioni “Windows Form” mette a disposizione una serie di strumenti che è possibile utilizzare a proprio piacimento per la realizzazione di una documentazione in linea, tema la cui importanza non va assolutamente sottovalutata perché un [...]]]></description>
			<content:encoded><![CDATA[<p>Esistono diverse strategie con cui è possibile realizzare un Help che realmente possa essere utile. Il .Net Framework, per le applicazioni “Windows Form” mette a disposizione una serie di strumenti che è possibile utilizzare a proprio piacimento per la realizzazione di una documentazione in linea, tema la cui importanza non va assolutamente sottovalutata perché un buon software è sempre corredato da una buona documentazione.</p>
<p>Oggi voglio mostrarvi come ho realizzato una guida in linea sensibile al contesto (<em><a href="http://en.wikipedia.org/wiki/Context-sensitive_help">Context Sensitive Help</a></em>) all’interno di una Client Application realizzata con il .Net Framework.</p>
<p><em>* Tralasciando la spiegazione di come si realizza una guida in linea (<a href="http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help">Microsoft Compiled HTML Help</a>), argomento su cui ci sarebbe molto da discutere, questo post vuole spiegare come integrare un file di questo tipo all’interno di un’applicazione Windows Form.</em></p>
<p>Partiamo dai presupposti, un oggetto di tipo <code>System.Windows.Forms.Form</code> espone una serie di proprietà, tra queste troviamo anche un evento chiamato <code>HelpRequested</code> che lo sviluppatore può eventualmente implementare, a riguardo la documentazione parla chiaro:</p>
<blockquote><p>L&#8217;evento HelpRequested viene solitamente generato quando l&#8217;utente preme il tasto F1 o fa clic su un pulsante della Guida sensibile al contesto.</p>
</blockquote>
<p>L’implementazione risulta molto semplice, nei form in cui vogliamo fornire aiuto possiamo decidere di invocare un metodo che possa, in base al contesto, darci informazioni utili reperite direttamente dal file di guida.</p>
<p>Inoltre è necessario sapere che un file di guida “Microsoft Compiled HTML Help” contiene al suo interno una serie di file html compressi, questi file vengono associati ad un identificatore univoco definito in un file Header (scritto in C) e che riporta il riferimento ad ogni link, questo file viene utilizzato in fase di compilazione della guida e serve propri per indicizzare i contenuti della nostra documentazione per poterla successivamente interrogare utilizzando un <strong>TopicId</strong>.</p>
<p>Ora, all’interno dei Windows Form sono si presenti delle proprietà per la gestione dell’Help ma non sono quelle di cui noi abbiamo bisogno (in pratica il .Net Framework mette a disposizione una serie di Tooltip che vengono visualizzati per dare aiuto). Supponiamo di aver definito nel nostro file di guida un argomento chiamato “Come effettuare il login”, a questo è stato assegnato l’indice 1000, come fare per ottenere un focus su questo argomento nella guida in linea direttamente dall’applicazione? La soluzione che ho applicato è molto semplice, ogni controllo, all’interno di un applicazione Windows espone una proprietà chiamata <code>Tag</code> che è di tipo <code>Object</code>, lo scopo di questa è proprio memorizzare informazioni aggiuntive nel nostro form come per esempio oggetti, stringhe o quanto ci possa tornare più utile, io ho deciso di inserire in questo campo il TopicId che dovrebbe essere richiamato se l’utente chiede aiuto durante l’esecuzione dell’applicazione, successivamente ho realizzato un oggetto che ho chiamato <code>HelpProvider</code> il cui compito è attivare l&#8217;help in linea su un determinato form:</p>
<pre><code>internal sealed class HelpProvider
{
	//Nome del file guida
	private const string ChmFileName = &quot;Docs.chm&quot;;
	private Form _form;

	internal Form Form
	{
		get
		{
			return (this._form);
		}
	}

	private HelpProvider()
	{
		this._form = null;
	}

	internal HelpProvider(Form form)
	{

		HelpNamespace = Path.Combine(
			Environment.CurrentDirectory,
			ChmFileName);

		_form = form;
		_form.HelpRequested += new HelpEventHandler(OnHelpRequestedAction);
	}

	internal void TryAsk()
	{
		Control ctrl = null;
		if ((this._form.ActiveControl != null)
			&amp;&amp;
		    (!IsNull(this._form.ActiveControl)))
			ctrl = this._form.ActiveControl;
		else
			ctrl = _form;

		if (ctrl.Tag == null)
		{
			Program.ShowWarning(&quot;Unable to retrive help information for this argument.&quot;);
			return;
		}

		Help.ShowHelp(ctrl, HelpNamespace, HelpNavigator.TopicId, ctrl.Tag as string);
	}

	/// &lt;summary&gt;
	/// Event Handled when an help request is execute by pressing F1
	/// &lt;/summary&gt;
	/// &lt;param name=&quot;sender&quot; /&gt;
	/// &lt;param name=&quot;hlpevent&quot; /&gt;
	private void OnHelpRequestedAction(object sender, HelpEventArgs hlpevent)
	{
		this.TryAsk();

		hlpevent.Handled = true;
	}
}</code></pre>
<p>Il funzionamento è molto semplice, questo oggetto riceve in ingresso un <code>Form</code> su cui imposta l’evento&#160; <code>HelpRequested</code> per poter successivamente intercettare le richieste da parte dell’utente, resta in attesa, quando una richiesta viene inoltrata, viene scatenato l’evento <code>OnHelpRequestedAction</code> in cui viene invocato il metodo <code>TryAsk</code>.</p>
<p>Questo metodo effettua diverse operazioni, prima di tutto legge il valore del Tag del controllo che gli viene passato, se questo valore è diverso da NULL,&#160; invoco un metodo, <code>ShowHelp</code>, che fornisce la classe Help del .Net Framework in cui passo:</p>
<ul>
<li><strong>ctrl: </strong>Controllo che chiede Aiuto (un form o un qualsiasi controllo presente nella maschera corrente) </li>
<li><strong>HelpNamespace: </strong>nome del file di guida da invocare per la documentazione </li>
<li><strong>HelpNavigator.TopicId</strong>: modalità di lettura della documentazione,cioè, quando apro la guida, cosa devo fare esattamente, se cercare per argomento, per indice etc. </li>
<li><strong>ctrl.Tag:</strong> identificativo dell’argomento di cui vogliamo le informazioni. </li>
</ul>
<p>L&#8217;<code>HelpProvider</code>, può essere facilmente utilizzato in questo modo: nel form in cui vogliamo rendere attiva la funzionalità di help, dichiariamo una variabile privata di tipo <code>HelpProvider</code> che andiamo ad inizializzare nel costruttore del nostro <code>Form</code> come nell’esempio che segue:</p>
<pre><code>public class MyWindowsApp : System.Windows.Forms.Form {
	private HelpProvider _helpProvider;

	public MyWindowsApp() {
		_helpProvider = new HelpProvider(this);
	}
}</code></pre>
<p>Con queste poche righe di codice abbiamo attivato un help in linea completo e funzionante!</p>
<p><strong>Ricordate che per funzionare è necessario che i controlli e / o direttamente i form per cui devono essere disponibili informazioni, devono avere la variabile <code>Tag</code> valorizzata con un certo indice equivalente ad un TopicId del nostro file “Windows Compiled HTML Help”, in caso contrario l’help non viene mostrato.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/03/net-windows-form-applications-context-sensitive-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Errore con SqlDataReader  &amp; Output Parameters in Stored Procedure</title>
		<link>http://coding.altervista.org/blog/2011/02/errore-con-sqldatareader-e-stored-procedure-output-parameters/</link>
		<comments>http://coding.altervista.org/blog/2011/02/errore-con-sqldatareader-e-stored-procedure-output-parameters/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 12:05:15 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[Output Parameters]]></category>
		<category><![CDATA[ParameterDirection.Output]]></category>
		<category><![CDATA[Sql Stored Procedure]]></category>
		<category><![CDATA[SqlCommand]]></category>
		<category><![CDATA[SqlDataReader]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/02/17/errore-con-sqldatareader-e-stored-procedure-output-parameters/</guid>
		<description><![CDATA[Molto spesso mi capita di dover lavorare su progetti realizzati in .Net 2.0 in cui viene fatto largo uso del namespace System.Data.SqlClient, è sempre molto spesso mi capita di incontrare un problema molto antipatico di cui dimentico puntualmente la soluzione! Il problema è questo: supponiamo di voler implementare la chiamata ad una Stored Procedure il [...]]]></description>
			<content:encoded><![CDATA[<p>Molto spesso mi capita di dover lavorare su progetti realizzati in .Net 2.0 in cui viene fatto largo uso del namespace System.Data.SqlClient, è sempre molto spesso mi capita di incontrare un problema molto antipatico di cui dimentico puntualmente la soluzione!</p>
<p>Il problema è questo: supponiamo di voler implementare la chiamata ad una Stored Procedure il cui compito è:</p>
<ul>
<li>restituire un elenco di risultati </li>
<li>restituire dei valori in output </li>
</ul>
<p>La Stored Procedure accetta in input <em>N</em> parametri e restituisce in output altri <em>M</em> parametri. Per l&#8217;esempio che voglio proporvi ne utilizzeremo uno che si chiama <code>@RowCount</code>. Nella maggior parte dei casi viene commesso un errore logico durante la scrittura del codice:</p>
<pre><code>//...
command = DataFactory.GetProcedure(SearchProcedure);
command.Parameters.Add(&quot;@RowCount&quot;, SqlDbType.Int, 4).Direction = ParameterDirection.Output;
DataFactory.OpenConnection();		

reader = command.ExecuteReader();
// L'errore che commettiamo è qui:
pi.RowCount = (int)command.Parameters[&quot;@RowCount&quot;].Value;

//...</code></pre>
<p>Cosa succede? In questa porzione di codice vengono effettuate diverse operazioni:</p>
<ul>
<li>Viene inizializzato un comando </li>
<li>Viene specificato un parametro in output che dovrà essere valorizzato nella stored procedure e restituito nella variabile di output </li>
<li><strong>Viene eseguita la query ed il risultato viene caricato in un <code>SqlDataReader</code> </strong></li>
<li style="color: tomato">Viene prelevato il valore del parametro in output 
  </li>
</ul>
<p>Il problema si può verificare a partire dalla descrizione specificata in grassetto (nell&#8217;elenco) e si verifica proprio se eseguiamo il passo successivo.</p>
<p>In pratica non è possibile prelevare dei valori in output ad una stored procedure, tramite un <code>SqlCommand,</code> se alla connessione è associato un <code>SqlDataReader</code> aperto, fin quando non invochiamo il metodo <code>Close()</code> dell&#8217;oggetto <code>reader</code>, le variabili in output della <code>SqlParameterCollection</code> non vengono caricate, motivo per cui la porzione di codice sopra mostrata genera un eccezione in riferimento al fatto che il <code>.Value</code> è NULL. Se invece proviamo a modificare il codice inserendo un <code>reader.Close()</code> prima di prelevare i valori in output, il tutto funziona correttamente!</p>
<p>Per informazioni più dettagliate sull’argomento potete <a href="http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.71%29.aspx">cliccare qui</a>. Nello specifico la frase che più ci interessa (e che mi salva la vita ogni volta) è questa:</p>
<blockquote><p>If your <strong>Command</strong> contains output parameters or return values, they will not be available until the <strong>DataReader</strong> is closed. </p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/02/errore-con-sqldatareader-e-stored-procedure-output-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF – Dependency Properties</title>
		<link>http://coding.altervista.org/blog/2011/02/wpf-dependency-properties/</link>
		<comments>http://coding.altervista.org/blog/2011/02/wpf-dependency-properties/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 22:11:01 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[DependencyProperties]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2011/02/03/wpf-dependency-properties/</guid>
		<description><![CDATA[Quando inizi a lavorare con WPF, ti capita fin da subito di dover avere a che fare con le DependencyProperties. Sono molto simili alle proprietà che normalmente utilizziamo sotto .Net ma un po&#8217; più complesse e potenti. La differenza principale è che il valore di una proprietà è direttamente leggibile da un membro privato della [...]]]></description>
			<content:encoded><![CDATA[<p>Quando inizi a lavorare con WPF, ti capita fin da subito di dover avere a che fare con le DependencyProperties. Sono molto simili alle proprietà che normalmente utilizziamo sotto .Net ma un po&#8217; più complesse e potenti.</p>
<p>La differenza principale è che il valore di una proprietà è direttamente leggibile da un membro privato della classe o dalla classe stessa che la implementa, mentre il valore di una DependencyProperty viene risolto dinamicamente quando viene chiamato il metodo <code>GetValue</code> che viene ereditato da DependencyObject.</p>
<p>Quando il valore di una DependencyProperty viene settato, questo non viene memorizzato subito nell’oggetto contenitore ma in un dizionario di chiavi e valori che viene fornito da DependencyObject. La chiave corrisponde proprio al nome della proprietà ed il valore corrisponde al contenuto di questa.</p>
<p>I vantaggi che si possono ottenere utilizzando le dependency properties sono molti:</p>
<ul>
<li><strong>Si eliminano </strong><a href="http://en.wikipedia.org/wiki/Memory_footprint" target="_blank"><strong>Memory Footprint</strong></a><strong>:</strong> se pensiamo che nella maggior parte dei casi il valore delle proprietà dei nostri oggetti rimane invariato per tutta l’esecuzione del programma aumentando in ogni caso l’utilizzo di memoria per l’applicazione, le dependency properties risolvono questo problema memorizzando solo le proprietà che vengono modificate. I valori di default vengono memorizzati una sola volta all’interno delle proprietà di dipendenza. </li>
<li><strong>Ereditarietà dei valori:</strong> quando si accede ad una proprietà, questa viene letta utilizzando una strategia di risoluzione secondo la quale se si verifica la situazione in cui nessun valore è impostato, la proprietà di dipendenza continua a cercare seguendo uno schema ad albero fin quando non trova un valore. Se per esempio in un controllo imposto la proprietà FontWeight, questa viene impostata anche per tutti gli elementi figlio eccetto quelli per cui non predisponiamo personalmente un comportamento diverso. </li>
<li><strong>Meccanismo di notifica:</strong> le dependency properties hanno un meccanismo automatico di notifica. In pratica è possibile impostare una dependency property in modo tale da poter ricevere una notifica nel caso in cui questa cambi. </li>
</ul>
<h5>Strategie di risoluzione dei valori</h5>
<p>Ogni volta che accediamo ad una dependency property, internamente si scatena un meccanismo automatico in grado di risolvere il valore della proprietà, questo meccanismo segue uno schema logico secondo cui prova a cercare un certo tipo di valore fino ad arrivare ad un Default, lo schema di seguito chiarisce meglio il concetto:</p>
<p><a href="http://coding.altervista.org/blog/wp-content/uploads/2011/02/ResolvePropertyStrategy.png"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ResolvePropertyStrategy" border="0" alt="ResolvePropertyStrategy" src="http://coding.altervista.org/blog/wp-content/uploads/2011/02/ResolvePropertyStrategy_thumb.png" width="494" height="581" /></a></p>
<p>Ogni controllo registra un set di DependencyProperty nella classe statica. Ognuna di queste consiste in una chiave che deve essere univoca per tipo oltre ad una serie di metadati che contengono le chiamate di callbacks ed i valori di Default. Tutti i tipi che vogliono utilizzare le DependencyProperties devono derivare da DependencyObject. Questa classe base definisce un dizionario di chiavi &#8211; valore che contengono le proprietà della classe che eredita. Una chiave in ingresso è una chiave specificata con una DependencyProperty.</p>
<p>Quando viene effettuata una chiamata ad una DependencyProperty, .Net esegue dietro le quinte una chiamata <code>GetValue(DependencyProperty)</code> per accedere al valore. Questo metodo utilizza una strategia di risoluzione che segue a grandi linee lo schema esposto sopra. Se un valore locale è presente, viene letto questo direttamente dal dizionario, al contrario, se non è impostato, viene effettuata una ricerca ad albero in tutte i controlli ereditati. Se nessun valore viene trovato, viene impostato il valore di Default descritto nei metadati.</p>
<p>Questo schema può chiarire meglio l’idea di ciò che accade:</p>
<p><a href="http://coding.altervista.org/blog/wp-content/uploads/2011/02/image.png"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://coding.altervista.org/blog/wp-content/uploads/2011/02/image_thumb.png" width="643" height="431" /></a></p>
<h5>Come si crea una DependencyProperty</h5>
<p>Per creare una DependencyProperty è necessario aggiungere un campo statico di tipo DependencyProperty sul tipo di riferimento e successivamente chiamare <code>DependencyProperty.Register()</code> per creare un istanza dell’oggetto. Il nome della DependencyProperty <strong>deve avere come suffisso Property</strong>, è una convenzione di WPF. Per renderlo accessibile come una normale proprietà .Net è necessario creare un Property Wrapper. Questo non fa altro che settare e prelevare internamente il valore della proprietà utilizzando rispettivamente <code>GetValue()</code> e <code>SetValue()</code> dal DependencyObject passando la DependencyProperty come chiave.</p>
<pre>// Dependency Property
public static readonly DependencyProperty CurrentTimeProperty =
     DependencyProperty.Register( &quot;CurrentTime&quot;, typeof(DateTime),
     typeof(MyClockControl), new FrameworkPropertyMetadata(DateTime.Now));

// .NET Property wrapper
public DateTime CurrentTime
{
    get { return (DateTime)GetValue(CurrentTimeProperty); }
    set { SetValue(CurrentTimeProperty, value); }
}</pre>
<p>Ogni DependencyProperty permette di impostare un evento di callback per notifiche di cambiamento, validazione etc. Queste chiamate vengono registrate come viene mostrato di seguito:</p>
<pre>new FrameworkPropertyMetadata( DateTime.Now,
                       OnCurrentTimePropertyChanged,
                       OnCoerceCurrentTimeProperty ),
                       OnValidateCurrentTimeProperty );</pre>
<p>Nella chiamata di callback si verifica se il valore è valido, se questa chiamata restituisce false viene sollevata un eccezione.</p>
<pre>private static bool OnValidateTimeProperty(object data)
{
    return data is DateTime;
}</pre>
<h5>Chiamate di Callback</h5>
<p>La chiamata di callback è un metodo statico che viene chiamato ogni qual volta il valore della proprietà cambia. Il nuovo valore viene passato tramite EventArgs, l’oggetto di cui questo valore è cambiato, viene passato come source:</p>
<pre>private static void OnCurrentTimePropertyChanged(DependencyObject source,
        DependencyPropertyChangedEventArgs e)
{
    MyClockControl control = source as MyClockControl;
    DateTime time = (DateTime)e.NewValue;
    // Put some update logic here...
}</pre>
<h5>Readonly DependencyProperties</h5>
<p>Alcune dependency property in WPF sono in sola lettura. Sono utilizzate spesso per riportare lo stato di un controllo come <code>IsMouseOver</code>, si può dedurre che in questi casi non ha alcun senso impostare un setter.</p>
<p><strong>Ma la domanda principale, che molte volte, durante lo studio di questo argomento, mi sono posto è: perché utilizzare dependency properties al posto delle normali proprietà che è possibile utilizzare con .Net?</strong></p>
<p><em>La prima importante ragione è che con .Net non è possibile impostare dei trigger sulle proprietà.</em></p>
<p>Create una proprietà in sola lettura è molto simile a creare una proprietà in .Net. All’interno della chiamata <code>DepedencyProperty.Register()</code> si può chiamare <code>DependencyProperty.RegisterReadonly()</code>. Viene restituita una <code>DependencyPropertyKey</code>, questa dovrebbe essere memorizzata in una variabile privata o protetta (Statica) ed in sola lettura. La chiave ti permette di avere accesso al valore e settarlo come normalmente si farebbe con una Property. La seconda cosa da fare è impostare una DependencyProperty pubblica assegnata a <code>DependencyPropertyKey.DependencyProperty</code>. Questa proprietà è in sola lettura e può essere richiamata dall’esterno.</p>
<pre>// Register the private key to set the value
private static readonly DependencyPropertyKey IsMouseOverPropertyKey =
      DependencyProperty.RegisterReadOnly(&quot;IsMouseOver&quot;,
      typeof(bool), typeof(MyClass),
      new FrameworkPropertyMetadata(false));

// Register the public property to get the value
public static readonly DependencyProperty IsMouseoverProperty =
      IsMouseOverPropertyKey.DependencyProperty;    

// .NET Property wrapper
public int IsMouseOver
{
   get { return (bool)GetValue(IsMouseoverProperty); }
   private set { SetValue(IsMouseOverPropertyKey, value); }
}</pre>
<p>Per concludere, l’argomento può sembrare di difficile comprensione nei primi momenti (tristissimi momenti) ma subito dopo, se si ha modo di poter vedere in azione queste funzionalità la comprensione risulta molto più facile. Spero che questa guida possa essere di aiuto a qualcuno che come me, alle prime esperienze con nuove tecnologie, si trovi spiazzato e disorientato!</p>
<p>Per qualsiasi domanda ci sono i commenti! </p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2011/02/wpf-dependency-properties/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Il mio 2010</title>
		<link>http://coding.altervista.org/blog/2010/12/il-mio-2010/</link>
		<comments>http://coding.altervista.org/blog/2010/12/il-mio-2010/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 17:20:27 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[Personale]]></category>
		<category><![CDATA[Il mio 2010]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2010/12/14/il-mio-2010/</guid>
		<description><![CDATA[Un anno di incazzature, sorprese, delusioni, idee e nuovi progetti ma la sensazione di “non-completezza” è sempre li in agguato. Personalmente ho vissuto questo 2010 pieno di aspettative, con tante idee per la testa, alcune realizzate, altre in parte e poi ci sono tutta quella infinità di progetti che vorrebbero prender vita ma la cui [...]]]></description>
			<content:encoded><![CDATA[<p>Un anno di incazzature, sorprese, delusioni, idee e nuovi progetti ma la sensazione di “non-completezza” è sempre li in agguato. Personalmente ho vissuto questo 2010 pieno di aspettative, con tante idee per la testa, alcune realizzate, altre in parte e poi ci sono tutta quella infinità di progetti che vorrebbero prender vita ma la cui fattibilità è sempre messa in discussione grazie a quelle che sono le 24 ore che tutti noi abbiamo a disposizione e che pur troppo <strong>non bastano mai!</strong></p>
<p>Un anno fatto di tanti momenti in cui il nervosismo prende il sopravvento, in cui tanta gente, maleducata e scortese pensa di potersi prendere gioco di te, un anno in cui hai la possibilità di capire che <strong>il cliente ha ragione quando paga</strong>, non<strong>&#160;</strong>se hai la fortuna di poter scegliere con chi avere a che fare e di selezionare i tuoi lavori. Allo stesso tempo ho avuto modo di lavorare con persone che ti apprezzano e valorizzano, clienti che sono in grado di trasmetterti quella soddisfazione che solo tu, dopo tutto il lavoro che hai fatto, sei in grado di poter percepire.</p>
<p>Un anno fatto di sorprese, una ragazza che ogni giorno continua a sopportarmi nonostante le mie passioni e la mia ostinazione nel volerle sempre parlare dei miei progetti, delle mie ambizioni e dei miei piani futuri, mai stanca del mio continuo parlare; dei genitori ed una sorella fantastica sempre vicini ed in prima linea per questo ragazzo che ha sempre la testa da un’altra parte!</p>
<p>Un anno fatto di idee e progetti, scaturiti dalla voglia di spingersi sempre più verso qualcosa di grande e soddisfacente. Un periodo in cui ho avuto la fortuna di poter collaborare con <a href="http://www.hangelot.eu">persone</a> straordinarie accomunati da un obiettivo. Forza di volontà, ottimismo e voglia di conoscenza sono alla base di questo 2010.</p>
<p>Un anno all’insegna della “non-completezza”, quando hai tanto in testa e poco tempo per fare tutto, in alcuni momenti hai la sensazione di non farcela, poi, grazie sempre a quelle persone che ti sostengono e ti sono vicine, una spinta ad essere più forte ed attivo di prima arriva ed è proprio in quei momenti che ritrovi lo spirto giusto per rimetterti a fare quello che hai lasciato a metà. </p>
<p>Un amico, tempo fa, mi ha “regalato” un consiglio, un suo modo di fare che si è rivelato per me grandioso: un foglio, una penna e tanta attenzione nel catturare ogni idea che la testa tira fuori, annotarle e tenerle sempre d’occhio, capire quando è il momento di di mettersi all’opera. Nella mia stanza c’è un foglio, appeso al muro, cosi visibile che nemmeno mia madre può fare a meno di notarlo, tanti punti da completare, tante cose da fare, tante X sopra ad ogni frase per indicare ciò che sono riuscito a fare e ciò che ancora è in attesa di essere fatto. Mi basta guardarlo per sentirmi soddisfatto di quello che sono oggi pensando che domani quella lista sarà ancora più lunga e con più X ad indicare ogni mio nuovo traguardo.</p>
<blockquote><p>Da quando ho imparato a camminare mi piace correre. (<em>Friedrich Nietzsche</em>)</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2010/12/il-mio-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikileaks – Man in the middle</title>
		<link>http://coding.altervista.org/blog/2010/12/wikileaks-man-in-the-middle/</link>
		<comments>http://coding.altervista.org/blog/2010/12/wikileaks-man-in-the-middle/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 17:05:40 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Julian Assange]]></category>
		<category><![CDATA[Man in the middle]]></category>
		<category><![CDATA[MIM]]></category>
		<category><![CDATA[Wikileaks]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2010/12/09/wikileaks-man-in-the-middle/</guid>
		<description><![CDATA[Man in the middle, letteralmente Uomo in&#160; mezzo, è un tipo di attacco attraverso il quale è possibile leggere, modificare o inserire messaggi senza che nessuna delle due parti (mittente e destinatario) sia in grado di capire se la comunicazione è compromessa. Julian Assange è il MIM del momento, l’uomo che è in mezzo alle [...]]]></description>
			<content:encoded><![CDATA[<p>Man in the middle, letteralmente <strong>Uomo in&#160; mezzo</strong>, è un tipo di attacco attraverso il quale è possibile leggere, modificare o inserire messaggi senza che nessuna delle due parti (mittente e destinatario) sia in grado di capire se la comunicazione è compromessa. <a href="http://it.wikipedia.org/wiki/Julian_Assange">Julian Assange</a> è il MIM del momento, l’uomo che è in mezzo alle comunicazioni planetarie, colui che ha pubblicato documenti classificati come confidenziali, interni e top-secret, a tutto il mondo.</p>
<p>Viene definito il Robin Hood dei nostri tempi, ruba ai ricchi per dare ai poveri, una volta erano cibo, vestiti e monete d’oro, ora la ricchezza è informazione, libera e trasparente. Alle sue spalle un curriculum davvero notevole che ha portato la sua società no-profit Wikileaks ad essere premiata in diverse manifestazioni internazionali. Oggi questo uomo è vittima di un complotto internazionale in cui gli USA fanno da padroni, catturato su “appuntamento”, <strong>è bene chiarirlo</strong>, Julian Assange non è stato colto di sorpresa da nessuno, <strong>si è costituito alle forze dell’ordine per essere processato, </strong>si trova ora in carcere ed aspetta di essere processato per un reato che non ha commesso, se poi avere rapporti sessuali consenzienti è paragonabile a violenza allora siamo su un altro pianeta (infatti).</p>
<p>Di fatto, attualmente, quella che viene definita la “Infowar” è una guerra in cui le truppe di Wikileaks hanno la meglio. Se una volta l’arresto di Assange sarebbe bastato per porre fine alla pubblicazione di queste informazioni, ora non è più cosi. La sua assicurazione circola su internet da ormai molto tempo, un file di diversi Gigabyte crittografato contenente l’archivio completo delle informazioni (anche quelle non ancora pubblicate).</p>
<p class="fumetto">Se dovesse accadermi qualcosa verrà pubblicata la chiave con cui poter aprire l’archivio completo</p>
<p class="text-justify">In parallelo un gruppo di hacker informatici hanno avviata quella che viene chiamata “<a href="http://en.wikipedia.org/wiki/Operation_Payback">Operation Payback</a>”, molte sono le compagnie online che hanno voltato le spalle a Wikileaks senza fornire una giusta causa, siti web per il pagamento online e servizi di web hosting che all’improvviso hanno sospeso i servizi di pubblicazione e pagamento per Assange e la sua associazione.</p>
<p class="text-justify">La situazione che si prospetta è da film, una potenza mondiale che vuole mettere fine ad un buco nella propria sicurezza, alla fuori uscita di informazioni cosi riservate da poter diventare un vero problema se pubblicate. Questo momento storico non è altro che il resoconto di un lungo periodo in cui Governi di tutto il mondo si sono fatti autori di azioni imperdonabili, gesti privi di umanità, è un momento molto cupo per la storia dell’uomo, uno evento che mette in evidenza quanto l’avidità ed il potere siano oggi ambiti tanto quanto lo erano in passato.</p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2010/12/wikileaks-man-in-the-middle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Antivirus Choice Screen?</title>
		<link>http://coding.altervista.org/blog/2010/11/antivirus-choice-screen/</link>
		<comments>http://coding.altervista.org/blog/2010/11/antivirus-choice-screen/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 10:20:10 +0000</pubDate>
		<dc:creator>RoBYCoNTe</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Antivirus Ballot Screen]]></category>
		<category><![CDATA[Choice Screen]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Security Essentials]]></category>

		<guid isPermaLink="false">http://coding.altervista.org/blog/2010/11/10/antivirus-choice-screen/</guid>
		<description><![CDATA[Tempo fa’ Opera ha chiesto che Microsoft inserisse all’interno del proprio sistema operativo la famosa “Ballot Screen” per dare all’utente la possibilità di scegliere quale browser installare sul proprio sistema operativo. Tralasciando le mie idee a riguardo (non sono per niente con la richiesta di Opera), il risultato finale? Opera e alleati (Firefox, Chrome etc.) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://coding.altervista.org/blog/wp-content/uploads/2010/11/rman3882l.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="rman3882l" border="0" alt="rman3882l" src="http://coding.altervista.org/blog/wp-content/uploads/2010/11/rman3882l_thumb.jpg" width="240" height="235" /></a> </p>
<p>Tempo fa’ Opera ha chiesto che Microsoft inserisse all’interno del proprio sistema operativo la famosa “Ballot Screen” per dare all’utente la possibilità di scegliere quale browser installare sul proprio sistema operativo. Tralasciando le mie idee a riguardo (non sono per niente con la richiesta di Opera), il risultato finale?</p>
<p>Opera e alleati (Firefox, Chrome etc.) entrati in campo in un secondo momento attirati dalla gustosa soluzione di poter distribuire il proprio Browser su larga scala tramite MS, hanno ottenuto miglioramenti quantificabili in piccolissime percentuali di utenti in più che <strong>hanno scelto</strong> tramite questa finestra quale browser utilizzare, percentuali europee che se paragonate al resto del mondo rendono la situazione praticamente impercettibile. </p>
<p>Un interessante articolo a riguardo lo trovate <a href="http://www.downloadsquad.com/2010/10/27/statistics-show-microsoft-windows-browser-ballot-screen-is-useless/">qui</a> (un po’ vecchio, letto tempo fa’, ma rende bene l’idea della situazione venutasi a creare).</p>
<p>E’ interessante notare come, nonostante questo completo fiasco, altri Competitor in altri campi abbiano deciso di provare a sfruttare la stessa mossa. <em>Trend Micro</em> e <em>Panda</em> hanno fatto richiesta per una medesima finestra per la scelta dell’antivirus da utilizzare sul proprio computer definendo <strong>Windows Security Essentials </strong>un ostacolo ed una mossa scorretta da parte di Microsoft che da parte sua definisce il suo prodotto come GRATUITO ed una soluzione di base da avere sul PC. </p>
<blockquote><p>E’ preferibile avere Security Essentials rispetto a non avere alcuna protezione <em>(MS)</em></p>
</blockquote>
<p>Trend Micro e Panda ritengono le modalità di distribuzione di questo software non valide, in quanto MSE viene distribuito tramite Windows Update, <strong>però è importante ricordare che MS non obbliga ad installare il software. </strong></p>
<p>Personalmente penso che questa situazioni si vengono a creare in un contesto in cui la stessa MS viene vista come Monopolista di qualsiasi mercato in cui i prodotti sono strettamente legati al sistema operativo. L’utente è libero di scegliere, MSE è un buon prodotto, <strong>gratuito</strong>, quindi ha le sue limitazione e non può essere paragonato ad una soluzione a pagamento ma la sua distribuzione viene proposta in un ottica di “protezione per gli utenti che acquistano un sistema operativo MS”. Ovviamente ritengo questa mossa da parte delle due sopracitate compagnia scorretta, favorita soprattutto dagli episodi passati che quasi incentivano azioni di ostruzionismo! In definitiva spero che almeno per questa volta, se l’antitrust dovesse essere chiamato a decidere, faccia scelte diverse rispetto al passato.</p>
]]></content:encoded>
			<wfw:commentRss>http://coding.altervista.org/blog/2010/11/antivirus-choice-screen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

