<?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>Roberto Conte Rosito</title>
	<atom:link href="http://www.robertoconterosito.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.robertoconterosito.com</link>
	<description>Chi sbaglia, apprende meglio di chi non ha mai commesso errori</description>
	<lastBuildDate>Mon, 22 Feb 2010 15:24:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Microsoft SQL Server Management Express</title>
		<link>http://www.robertoconterosito.com/2010/02/22/microsoft-sql-server-management-express/</link>
		<comments>http://www.robertoconterosito.com/2010/02/22/microsoft-sql-server-management-express/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:12:22 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft Sql Server]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[SQL Server Management Express]]></category>
		<category><![CDATA[SQL Server Management Studio]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=443</guid>
		<description><![CDATA[Potrei sbagliarmi, lo spero, forse quanto sto per dire dipende unicamente dalla mia &#8220;inettitudine&#8221; o dalla mia capacità poco sviluppata di utilizzare questo strumento (anche se sono ormai più di 3 anni che ci lavoro). Avete mai provato a:

Creare un database su SQL Server Standard o Enteprise.
Successivamente, con SQL Management Studio Express creare una copia di [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.robertoconterosito.com/wp-content/uploads/2010/02/SQL-Server-Management.gif"><img class="size-full wp-image-447 alignleft" title="SQL Server Management" src="http://www.robertoconterosito.com/wp-content/uploads/2010/02/SQL-Server-Management.gif" alt="" width="32" height="32" /></a>Potrei sbagliarmi, lo spero, forse quanto sto per dire dipende unicamente dalla mia &#8220;inettitudine&#8221; o dalla mia capacità poco sviluppata di utilizzare questo strumento (anche se sono ormai più di 3 anni che ci lavoro). Avete mai provato a:</p>
<ol>
<li>Creare un database su SQL Server Standard o Enteprise.</li>
<li>Successivamente, con <em>SQL Management Studio <strong>Express</strong></em> creare una copia di backup del database per ripristinarlo su un&#8217;altra macchina.</li>
<li><em><span style="text-decoration: underline;">Cercare</span></em> di ripristinare il backup effettuato sulla nuova macchina (utilizzando sempre <em>SQL Management Studio Express</em>) ed ottenete un messaggio di errore che tra le righe riporta <strong>Accesso Negato</strong>.</li>
</ol>
<p>Ci ho pensato parecchio, un problema cosi da cosa può dipendere? Allora ho provato a seguire una strada diversa. Mi sono collegato direttamente alla macchina server che monta motore di database ed <em>SQL Management <strong>Studio</strong></em>, da qui creo il backup. Successivamente, sulla macchina dove voglio ripristinare il backup, eseguo l&#8217;operazione senza alcun problema, questa volta utilizzando <em>SQL Management </em><strong><em>Express</em>. </strong></p>
<p>Ora mi chiedo, ci sono differenze? Sicuramente ma avrò perso qualche passaggio, un backup viene visto in maniera molto differente se effettuato da una versione Express ad una Studio! Questa è una piccola nota, nel caso vi dovesse accedere quanto è successo a me, potete sempre tentare questa strada, attualmente sto analizzando il problema per capire &#8220;dove sbaglio&#8221; (perchè sicuramente dipende, come dicevo prima, dalla mia inettitudine <img src='http://www.robertoconterosito.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/02/22/microsoft-sql-server-management-express/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>
<!-- Quick Adsense Wordpress Plugin: http://techmilieu.com/quick-adsense -->
<div style="float:none;margin:10px 0 10px 0;text-align:center;">
<script type="text/javascript"><!--
google_ad_client = "pub-5106536302672881";
/* Banner Blu */
google_ad_slot = "4835520859";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/02/22/microsoft-sql-server-management-express/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ASP.NET &#8211; Connection Pooling</title>
		<link>http://www.robertoconterosito.com/2010/02/19/asp-net-connection-pooling/</link>
		<comments>http://www.robertoconterosito.com/2010/02/19/asp-net-connection-pooling/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 15:28:40 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft DOT.NET]]></category>
		<category><![CDATA[Microsoft Sql Server]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[web-application]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=430</guid>
		<description><![CDATA[Argomento molto interessante, mi occupo di web-application da molto tempo e questo problema è sempre ricorrente.  L&#8217;aumentare del numero di utenti che visitano un sito web è direttamente proporzionale all&#8217;attenzione che si deve porre nei confronti dei vari meccanismi che si occupano di far interagire ui e database. Per rendere questo &#8220;collegamento&#8221; performante si può [...]]]></description>
			<content:encoded><![CDATA[<p>Argomento molto interessante, mi occupo di web-application da molto tempo e questo problema è sempre ricorrente.  L&#8217;aumentare del numero di utenti che visitano un sito web è direttamente proporzionale all&#8217;attenzione che si deve porre nei confronti dei vari meccanismi che si occupano di far interagire ui e database. Per rendere questo &#8220;collegamento&#8221; performante si può utilizzare il <strong>Connection Pooling</strong>.</p>
<blockquote><p>Il connection pooling è una cache delle connessioni mantenute dal database, queste rimangono in memoria per un determinato periodo di tempo T, durante il quale il db, per richieste esterne, può erogare ottenendo cosi un servizio più veloce.</p></blockquote>
<p>Il concetto è semplice, il server di database non chiude subito le connessioni al db, al contrario le lascia aperte in attesa che qualcuno possa richiederle. Come si attiva questo meccanismo? Basta modificare attentamente la connection string all&#8217;interno del web.config della nostra applicazionie come nel seguente esempio:</p>
<pre class="brush:xml">&lt;configuration&gt;
 &lt;connectionStrings&gt;
  &lt;add name="Connessione"
            ConnectionString="Server=localhost;Integrated Security=SSPI;Pooling=true;Min Pool Size=1; Max Pool Size=10" /&gt;
 &lt;/connectionStrings&gt;
&lt;/configuration&gt;</pre>
<p>Sostanzialmente sono stati inseriti tre parametri all&#8217;interno della connessione:</p>
<ul>
<li><strong>Min Pool Size:</strong> numero minimo di connessioni su cui applicare il pooling (quindi cache e riutilizzo);</li>
<li><strong>Max Pool Size:</strong> numero massimo di connessioni su cui applicare il pooling;</li>
<li><strong>Pooling:</strong> con questa proprietà stiamo attivando il meccanismo di pool per la ConnectionString;</li>
</ul>
<p>Attenzione, <strong>Min Pool Size</strong> e <strong>Max Pool Size</strong>, hanno importanza assoluta. Questi due valori vanno impostati dopo un attento studio in quanto determinano proprio l&#8217;aumentare o meno delle performance del server sql, se configurati male possono creare più rallentamenti che benefici. Se per esempio ho un&#8217;applicazione web in cui <strong>sò</strong> per certo che avrò un numero di connessioni minime simultanee di 10 persone, logicamente imposterò il mio Min Pool Size = 10.<br />
Spero possa aiutarvi! Enjoy! <img src='http://www.robertoconterosito.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/02/19/asp-net-connection-pooling/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/02/19/asp-net-connection-pooling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shuffle</title>
		<link>http://www.robertoconterosito.com/2010/02/10/shuffle/</link>
		<comments>http://www.robertoconterosito.com/2010/02/10/shuffle/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 16:05:19 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft DOT.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=420</guid>
		<description><![CDATA[Un oggetto molto simpatico che è in grado di disordinare qualsiasi cosa, a me è servito molto quando ho dovuto implementare campionamenti a grappolo casuali.

internal class Shuffle&#60;T&#62;
{
    internal List&#60;T&#62; Execute(List&#60;T&#62; list)
    {
        return Execute(list, list.Count);
    }

    [...]]]></description>
			<content:encoded><![CDATA[<p>Un oggetto molto simpatico che è in grado di disordinare qualsiasi cosa, a me è servito molto quando ho dovuto implementare campionamenti a grappolo casuali.</p>
<pre class="brush:csharp">
internal class Shuffle&lt;T&gt;
{
    internal List&lt;T&gt; Execute(List&lt;T&gt; list)
    {
        return Execute(list, list.Count);
    }

    internal List&lt;T&gt; Execute(List&lt;T&gt; list, int size)
    {
        List&lt;T&gt; values = new List&lt;T&gt;(size);
        Random r = new Random();
        int index = 0;
        while ((list.Count > 0) &#038;&#038; (values.Count < size))
        {
            index = r.Next(list.Count);
            values.Add(list[index]);
            list.RemoveAt(index);
        }
        r = null;
        return values;
    }

    internal List&lt;T&gt; Execute(List&lt;T&gt; list, double perc)
    {
        int size = Round(perc * list.Count);
        return Execute(list, size);
    }

    internal static int Round(double d)
    {
        Random r = new Random();
        double rvalue = r.NextDouble();
        int id = unchecked((int)(Math.Floor(d)));
        double pd = (d - Math.Floor(d));
        r = null;

        return (rvalue > pd) ? id : id + 1;
    }

}</pre>
<p>Uno dei tanti modi per usare i Generics.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/02/10/shuffle/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/02/10/shuffle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ciclo di vita di una pagina ASP.NET</title>
		<link>http://www.robertoconterosito.com/2010/02/02/ciclo-di-vita-di-una-pagina-asp-net/</link>
		<comments>http://www.robertoconterosito.com/2010/02/02/ciclo-di-vita-di-una-pagina-asp-net/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:47:11 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft DOT.NET]]></category>
		<category><![CDATA[ASP.NET Page Life Cycle]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[web-application]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=411</guid>
		<description><![CDATA[Lavorando ogni giorno con applicazioni web, ho pensato di fornire qualche dettaglio in più su come funziona una pagina asp.net, argomento molto interessante per chi come me sviluppa software in cui l&#8217;engine è totalmente asincrona per sfruttare al meglio il framework e rendere le applicazioni web più reattive quando il bacino di utenza è elevato [...]]]></description>
			<content:encoded><![CDATA[<p>Lavorando ogni giorno con applicazioni web, ho pensato di fornire qualche dettaglio in più su come funziona una pagina asp.net, argomento molto interessante per chi come me sviluppa software in cui l&#8217;engine è totalmente asincrona per sfruttare al meglio il framework e rendere le applicazioni web più reattive quando il bacino di utenza è elevato (o non si sa mai, anche quando il server web che ospita non è dei migliori!).</p>
<p>Partiamo da una lista dei principali steps di cui si compone la generazione di una pagina web asp.net:</p>
<ol>
<li>Inizializzazione</li>
<li>Costruzione dei controlli</li>
<li>Gestione dello stato</li>
<li>Gestione degli eventi (<em>event handler</em>)</li>
<li>Disegno della pagina (<em>rendering</em>)</li>
</ol>
<dl>
<dt>Dove tutto ha inizio.</dt>
<dd>
Ma da dove parte tutto? Semplice! Da una richiesta <strong>Page Request</strong>, il framework, in base alle impostazioni decide se inizializzare nuovamente la pagina o prenderne una copia dalla cache (<em>vi consiglio di leggere qualcosa a riguardo: </em><em>caching, outputCache</em>); proprietà della pagina come <em>Request</em> e <em>Response</em> vengono impostate, la Request viene inizializzata in base al tipo di richiesta, cioè se la pagina viene caricata per la prima volta o se è in PostBack (tra le proprietà della pagina ce n&#8217;è proprio una che si chiama <em>IsPostBack</em>, ovviamente sarebbe opportuno leggere qualcosa anche su questa variabile che differisce come significato dall&#8217;argomento outputCahce) ed infine vengono caricate le proprietà relative alla Cultura (<em>ICulture</em>).
</dd>
<dt>Il caricamento</dt>
<dd>
Subito dopo vengono inizializzati tutti i controlli presenti nella pagina, per riassumere: tutti gli elementi html con attributo <em>runat=&#8221;server&#8221;</em> ed identificati da un <em>ID</em> univoco.<br />
Poi si passa al Caricamento, <strong>Load</strong>, se la pagina è in PostBack i dati dei controlli vengono caricati dal ViewState (<em>solamente se nella direttiva </em><em>Page</em>, <em>EnableViewState</em> &egrave; impostato a true), in caso contrario viene eseguita la logica descritta dallo sviluppatore.</dd>
<dt>La validazione</dt>
<dd>
<strong>Validation</strong>, viene richiamato il metodo di Validazione di ogni controllo per capire se questo ha subito variazioni problematiche. Se la pagina è in PostBack, vengono eseguiti i metodi chiamanti (<em>es. pressione di un bottone a cui è collegato un evento</em>).
</dd>
<dt>Il disegno</dt>
<dd>
Finalmente arriviamo al Disegno vero è proprio, <strong>Rendering</strong>, attraverso il quale la pagina viene disegnata, un OutputStream carica al suo interno il contenuto HTML generato da ogni controllo presente in essa(si perchè ognuno di essi contiene un metodo che si chiama RenderControl che accetta un HttpTextWriter su cui rilascia codice html per quanto riguarda &#8220;se stesso&#8221;) e poi di volta in volta per tutti gli altri elementi presenti.
</dd>
<dt>Il rilascio</dt>
<dd>
Alla fine, viene avviata un operazione di &#8220;pulizia&#8221; (si perchè il framework vuole ordine), cosi si passa al processo di <strong>Unload</strong>. Una volta che la pagina &egrave; stata disegnata ed inviata al richiedente tutte le sue proprietà vengono rilasciate (si parla proprio di Dispose). </dd>
</dl>
<p>Molto importante in questo contesto è il concetto di <strong>Event wire-up</strong>, ASP.NET cerca di trovare dei metodi che corrispondono ad una denominazione convenzionale (<em>Page_Load, Pag_Init etc.</em>), &egrave; possibile attivare o meno questo comportamento (che per Default &egrave; lo è già) impostando la proprietà (nella System.Page) <strong>AutoEventWireup</strong> su true/false.<br />
Con questo breve articolo ho cercato di fornire qualche spiegazione in più, utile durante quei lunghi debug dove delle volte ci riesce davvero difficile capire dove risieda il problema ma più in generale anche per avere più chiarezza sulle strumentazioni che si utilizzano!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/02/02/ciclo-di-vita-di-una-pagina-asp-net/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/02/02/ciclo-di-vita-di-una-pagina-asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sviluppatori freeware</title>
		<link>http://www.robertoconterosito.com/2010/01/30/sviluppatori-freeware/</link>
		<comments>http://www.robertoconterosito.com/2010/01/30/sviluppatori-freeware/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 22:42:44 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Personale]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=408</guid>
		<description><![CDATA[Oggi ho scoperto una cosa interessantissima, solitamente se dici faccio il muratore o sono idraulico ti dicono che sei un lavoratore con i fiocchi che per portare a casa lo stipendio fà veramente tanto, ma se dici che sei uno sviluppatore di software?
Mi chiama una persona: ciao, mi ha dato il tuo contatto xyz, so [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi ho scoperto una cosa interessantissima, solitamente se dici <q>faccio il muratore</q> o <q>sono idraulico</q> ti dicono che sei un lavoratore con i fiocchi che per portare a casa lo stipendio fà veramente tanto, ma se dici che sei uno sviluppatore di software?<br />
Mi chiama una persona: <q>ciao, mi ha dato il tuo contatto xyz, so che fai siti web, vorrei un sito che fà questo, quello che non so e alcune cose che potrei voler fare ma che oggi non conosco!</q>.<br />
Io: <q>ciao, si faccio sito web, quello che mi chiedi si può fare!</q> (le ho spiegato per bene cosa avrei fatto e subito dopo ho proposto &#8220;vediamoci per parlarne di persona&#8221;.<br />
Persona: <q>mmm, si ma prima di vederci vorrei chiederti a quanto ammonterebbe la spesa?</q>.<br />
Io: <q>verrebbe ZZZ &euro;</q> (vì garantisco che la cifra chiesta non è superiore al quantitativo di lavoro da fare!).<br />
Persona: <q>ah&#8230; ma io pensavo che potevi farmi questo lavoro &#8220;amatorialmente&#8221;, cioè io vorrei che me lo facesse un ragazzo a cui piace fare queste cose, che lo faccia a tempo perso cosi con 100/200 euro si finisce l&#8217;opera!</q>.<br />
Io: <q>ah.. capisco, allora le posso chiedere una cortesia? Quando trova il ragazzo che fà questi lavori per passione, mi avvisa, sà perchè? Sarei interessato a fargli fare qualcosina!</q>.</p>
<p>Non continuo a parlavi di questo assurdo discorso, ma effettivamente qui al sud è un pò cosi, se non fai un lavoro in cui la sera torni a casa stanco per la fatica fisica, non è un lavoro, semplicemente stai facendo ciò che ti piace e se lo fai significa che è automaticamente gratis! <em>No comment</em></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/30/sviluppatori-freeware/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/30/sviluppatori-freeware/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Siamo artisti o atleti?</title>
		<link>http://www.robertoconterosito.com/2010/01/28/siamo-artisti-o-atleti/</link>
		<comments>http://www.robertoconterosito.com/2010/01/28/siamo-artisti-o-atleti/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:17:27 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Personale]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=397</guid>
		<description><![CDATA[Delle volte mi chiedo quale sia il ruolo di uno sviluppatore, voi ci avete mai pensato? I Project Manager si occupano di organizzare e suddividere il lavoro, un analista fà il punto della situazione per capire cosa và fatto e poi arriva lo sviluppatore, lui che ruolo ha? Per me ne esistono due tipologie: artisti [...]]]></description>
			<content:encoded><![CDATA[<p>Delle volte mi chiedo quale sia il ruolo di uno sviluppatore, voi ci avete mai pensato? I Project Manager si occupano di organizzare e suddividere il lavoro, un analista fà il punto della situazione per capire cosa và fatto e poi arriva lo sviluppatore, lui che ruolo ha? Per me ne esistono due tipologie: <strong>artisti e atleti</strong>.</p>
<p>Il primo è una persona che fà del suo lavoro un&#8217;arte, ci mette tutta la sua passione, le sue risorse, la sua buona volontà, per produrre qualcosa che successivamente riterrà essere &#8220;una sua creazione&#8221;, penso di aver incontrato davvero poche persone che si possano chiamare &#8220;Artisti del Software&#8221;, al contrario, mi sono ritrovato a lavorare moltissime volte con gli atleti, voi vi chiedere <q>ma chi sono?</q>. Persone che si caratterizzano per la velocità con cui producono software e successivamente per la stessa lentezza con cui sono costretti a risolvere problemi non previsti(?). Paragonate un atleta sviluppatore a me che vado in palestra il primo giorno, prefisco evitare i consigli del personal trainer ed inizio subito ad allenarmi iniziando con una corsa di 40 minuti e subito dopo una quantità industriali di pesi, arrivo a fine allenamento soddisfatto e stanco per quanto fatto, il giorno dopo mi ritrovo a fare i conti con l&#8217;acido lattico nei muscoli ed il dolore che mi rende impossibile qualsiasi movimento. In realtà l&#8217;atleta sviluppatore ha come obiettivo sviluppare e rilasciare in tempi record ed applica perfettamente il mio modo di fare in palestra (<em>tradotto: copia codice, cerca di arrangiare il software, evita l&#8217;informazione e l&#8217;aggiornamento a favore di tecniche antiquate ma che lui conosce bene, etc. etc.</em>).<br />
Perchè scrivo questo post? Perchè ultimamente mi piace visitare forum e fornire aiuto (nel limite del possibile) ed è proprio qui che ho notato un enorme squadra di atleti, anche qualche artista ma ormai rassegnato al fatto di non poter pretendere di &#8220;spiegare&#8221; qualcosa perchè poi possa diventare una lezione per gli altri, questa è una cosa davvero molto triste, io non mi ritengo un artista ma ogni giorno cerco di esserlo, l&#8217;informazione, la conoscenza, l&#8217;incessante bisogno di sapere dovrebbero essere la matita con cui noi progettiamo applicazioni, ma oggi proprio non è possibile&#8230;</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/28/siamo-artisti-o-atleti/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/28/siamo-artisti-o-atleti/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aggiornare lo schema di una vista con sp_refreshview.</title>
		<link>http://www.robertoconterosito.com/2010/01/28/aggiornare-lo-schema-di-una-vista-con-sp_refreshview/</link>
		<comments>http://www.robertoconterosito.com/2010/01/28/aggiornare-lo-schema-di-una-vista-con-sp_refreshview/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 15:58:10 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Stored Procedure]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=392</guid>
		<description><![CDATA[Spero possa essere utile anche a voi quanto sto per scrivere, per me in primis vuole essere un appunto da tenere sempre a portata di mano nei momenti in cui la mente mi abbandona. Vi è capitato di creare e subito dopo modificare viste (view) in SQL Server e di trovarvi in questa situazione: creo [...]]]></description>
			<content:encoded><![CDATA[<p>Spero possa essere utile anche a voi quanto sto per scrivere, per me in primis vuole essere un appunto da tenere sempre a portata di mano nei momenti in cui la mente mi abbandona. Vi è capitato di creare e subito dopo modificare viste (<em>view</em>) in SQL Server e di trovarvi in questa situazione: creo una vista che prende dati da un&#8217;altro database presente nello stesso server:</p>
<pre class="brush:sql">
CREATE VIEW MyView AS
	SELECT Column1,Column2 FROM Database.dbo.Table
</pre>
<p>Successivamente creo un&#8217;altra vista quasi identica che per determinati motivi si &#8220;appoggia&#8221; direttamente alla prima facendo una <strong>SELECT *</strong> (<em>START</em> premettendo che &egrave; sbagliato eseguire una select in questo modo in quanto a risentirne di pi&ugrave; sono proprio le performance del server SQL).</p>
<pre class="brush:sql">
CREATE VIEW MyView2 AS
	SELECT * FROM MyView
</pre>
<p>Dopo un pò di tempo torno sulla prima view e ne modifico le colonne, ne aggiungo di nuove. Cosa succede? Che MyView2 interrogata, mi risponde riportando solo le vecchie colonne e non le nuove. Questo succede perchè lo schema della vista non &egrave; stato aggiornato correttamente, per ovviare a questa situazione basta un semplice comando:</p>
<pre class="brush:sql">
EXEC sp_refreshview @view = N'MyView2'
</pre>
<p>Successivamente, la vista contiene l&#8217;elenco delle colonne aggiornate! </p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/28/aggiornare-lo-schema-di-una-vista-con-sp_refreshview/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/28/aggiornare-lo-schema-di-una-vista-con-sp_refreshview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come si stabilisce la calma in ufficio</title>
		<link>http://www.robertoconterosito.com/2010/01/27/come-si-stabilisce-la-calma-in-ufficio/</link>
		<comments>http://www.robertoconterosito.com/2010/01/27/come-si-stabilisce-la-calma-in-ufficio/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:50:09 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Personale]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=384</guid>
		<description><![CDATA[
Il tuo collega scrive un &#8220;contratto&#8221; a cui chi vuole può partecipare mettendo una firma. Riassumendo, questo documento dice che:
Qualsia parolaccia e/o volgarità detta in ufficio viene punita con il versamento di 0,10 €, le bestemmie pagano 1 €.
Tu firmi il contratto con la speranza che da oggi non ti altererai più durante l&#8217;orario di [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.robertoconterosito.com/wp-content/uploads/2010/01/office_cartoons.png"><img class="alignnone size-medium wp-image-386" title="office_cartoons" src="http://www.robertoconterosito.com/wp-content/uploads/2010/01/office_cartoons-300x236.png" alt="" width="300" height="236" /></a></p>
<p>Il tuo collega scrive un &#8220;contratto&#8221; a cui chi vuole può partecipare mettendo una firma. Riassumendo, questo documento dice che:</p>
<p>Qualsia parolaccia e/o volgarità detta in ufficio viene punita con il versamento di 0,10 €, le bestemmie pagano 1 €.</p>
<p>Tu firmi il contratto con la speranza che da oggi non ti altererai più durante l&#8217;orario di lavoro (bug, codice che non funziona, il cliente che ti chiama sul cellulare personale perchè vuole sapere), alla fine attendi che qualcosa succede, mentre guardi i tuoi colleghi che di volta in volta versano soldi, ad un certo punto tocca anche a te!<br />
Sono passati 3 giorni, da quando lunedi abbiamo avviato questa simpatica iniziativa, ho già versato 80 centesimi, ringrazio i miei colleghi per il loro &#8220;impegno&#8221; (si perchè si sono davvero dati da fare) per fregarmi.<br />
Morale? Appena il galateo d&#8217;ufficio avrà fregato abbastanza soldi, organizziamo una cena.</p>
<p><strong>Su richiesta del promotore di questa &#8220;iniziativa&#8221;, vorrei ringraziare Claudio Vicenti per il suo operato.</strong></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/27/come-si-stabilisce-la-calma-in-ufficio/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/27/come-si-stabilisce-la-calma-in-ufficio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Web.Config</title>
		<link>http://www.robertoconterosito.com/2010/01/25/web-config/</link>
		<comments>http://www.robertoconterosito.com/2010/01/25/web-config/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:08:58 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft DOT.NET]]></category>
		<category><![CDATA[appSettings]]></category>
		<category><![CDATA[connectionStrings]]></category>
		<category><![CDATA[Server Visual Studio Development]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[web-application]]></category>
		<category><![CDATA[Web.Config]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=380</guid>
		<description><![CDATA[&#200; buona norma, quando si progetta un applicazione web utilizzando il dot.net, sfruttare al meglio &#34;tutte le potenzialit&#224;&#34; offerte dal framework. Una di queste &#232; la configurazione del web.config.
Il web.config viene(solitamente) utilizzato per la configurazione dei parametri necessari al corretto funzionamento dell&#8217;applicazione (il classico esempio &#232; la ConnectionString), questi, devono poter essere facilmente modificabili da [...]]]></description>
			<content:encoded><![CDATA[<p>&Egrave; buona norma, quando si progetta un applicazione web utilizzando il dot.net, sfruttare al meglio &quot;tutte le potenzialit&agrave;&quot; offerte dal framework. Una di queste &egrave; la configurazione del web.config.</p>
<p>Il web.config viene(solitamente) utilizzato per la configurazione dei parametri necessari al corretto funzionamento dell&#8217;applicazione (<em>il classico esempio &egrave; la ConnectionString</em>), questi, devono poter essere facilmente modificabili da parte dello sviluppatore in fase di test e/o installazione [evitando di dover avere a portata di mano i sorgenti in cui modificare le famose "COSTANTI" e dover subito dopo ricompilare tutto, trasferire etc. etc. :@ (si, alla fine ci si incazza per dover effettuare una semplice modifica)]. </p>
<p>Mi capita molte volte di avere delle(grosse) incognite durante lo sviluppo  di web-application. Lavorando in ambito ospedaliero e dovendo interfacciare le mie applicazioni con altre sorgenti dati, non s&ograve; mai di  preciso, nel momento in cui installer&ograve; l&#8217;applicazione, quale server,  quale password, insomma &#8220;CHI,COSA (mi manca il quando) e PERCH&Egrave;?&#8221;. Per questo sfrutto il web.config a mio favore, cerco di spiegarvi come attraverso questo esempio:<br />
<em>ho un&#8217;applicazione x che deve reperire dei dati Anagrafici da un db posizionato<br />
sul server [ServerCheNonConosco] sul database [DatabaseAncoraIgnoto].</em></p>
<p>Quindi il mio obiettivo &egrave; configurare il web.config in modo tale da potergli passare dati reali nel momento stesso in cui sar&ograve; a conoscenza di questi (nel frattempo emulo il tutto utilizzando server demo).</p>
<p>Il primo passo &egrave; agire direttamente sul web.config:</p>
<pre class="brush:xml">
<configuration>
	<appsettings>
		<add key="ServerCheNonConosco" value="ServerDemo" />
		<add key="DatabaseAncoraIgnoto" value="DBName" />
	</appsettings>
	<connectionstrings>
		<!-- ConnectionString del server remoto -->
		<add name="RemoteConnectionString"
			connectionString="User Id=xxxx;Password=lfkkssow" />
	</connectionstrings>
</configuration>
</pre>
<p>Alcune note su quanto scritto: i nomi sono frutto della mia immaginazione, nello sviluppo, durante la creazione del web.config utilizzare nomi appropiati che siano il pi&ugrave; descrittivi possibile rispetto alla funzionalit&agrave; svolta, utilizzare anche i commenti se necessario. Per quanto riguarda la ConnectionString ricordate sempre di crittografare per avere una maggiore sicurezza.</p>
<p>Passiamo alla pratica, ho sfruttato la sezione <strong>appSettings</strong> per memorizzare alcuni &#8220;parametri&#8221;, infatti all&#8217;interno di questo elemento possiamo inserire coppie di dati (Chiave, Valore) che successivamente possiamo reperire dall&#8217;applicazione stessa. Il passo successivo &egrave; implementare nel nostro progetto quanto necessario per leggere questi valori.</p>
<pre class="brush:csharp">
namespace MioProgetto
{
	internal sealed class WebConfig
	{
		// Preleva un valore dal web.config
		internal static string GetValue(string appSettingName)
		{
			return ConfigurationManager.AppSettings[appSettingName];
		}

		internal static string ServerCheNonConosco
		{
			get { return GetValue("ServerCheNonConosco"); }
		}

		internal static string DatabaseAncoraIgnoto
		{
			get { return GetValue("DatabaseAncoraIgnoto"); }
		}

		internal static string ConnectionString
		{
			get
			{
				ConnectionStringSettings css = ConfigurationManager.ConnectionStrings["RemoteConnectionString"];
                    		SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(css.ConnectionString);
                    		sb.DataSource = ServerCheNonConosco;
		                sb.InitialCatalog = DatabaseAncoraIgnoto;
	                    	string connectionString = sb.ConnectionString;
		                sb = null;
                    		css = null;
                    		return connectionString;
			}
		}
	}
}
</pre>
<p>Voi direte? <q>Ma non &egrave; pi&ugrave; semplice ricostruire la connection string ogni qual volta i dati cambiano?</q>, ma poi c&#8217;è da crittografare, quindi ci si dovr&agrave; riconnettere al server, effettuare le operazioni necessarie a reperire la connessione, modificarla e crittografarla! Con questo metodo abbiamo creato un oggetto che fornisce in ogni momento (all&#8217;interno della web-application) le informazioni necessarie per la connessione, sfruttando il web.config! Se pensi che esista un metodo alternativo o modalit&agrave; migliori per eseguire queste operazioni e vuoi dirmelo, non esitare, in qualche modo (commenti, email) fammi conoscere la tua opinione!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/25/web-config/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/25/web-config/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AGIRE per Haiti</title>
		<link>http://www.robertoconterosito.com/2010/01/25/agire-per-haiti/</link>
		<comments>http://www.robertoconterosito.com/2010/01/25/agire-per-haiti/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 10:09:10 +0000</pubDate>
		<dc:creator>Roberto Conte Rosito</dc:creator>
				<category><![CDATA[Personale]]></category>

		<guid isPermaLink="false">http://www.robertoconterosito.com/?p=373</guid>
		<description><![CDATA[Guardando B-log(0) ho pensato che sia la cosa più sensata e giusta da fare. Un aiuto concreto per quanto è successo ad Haiti inizia proprio da qui. 
Evitando ripetizioni e quant&#8217;altro, potete reperire informazioni più dettagliate sull&#8217;operato direttamente qui.
UN AIUTO IMPORTANTE PER HAITI
Share on Facebook]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">Guardando <a href="http://logzero.wordpress.com">B-log(0)</a> ho pensato che sia la cosa più sensata e giusta da fare. Un aiuto concreto per quanto è successo ad Haiti inizia proprio da qui. <a href="http://www.agire.it/it/hp_it.html"><img class="size-full wp-image-374 aligncenter" title="logoagire" src="http://www.robertoconterosito.com/wp-content/uploads/2010/01/logoagire.gif" alt="" width="277" height="85" /></a></p>
<p style="text-align: left;">Evitando ripetizioni e quant&#8217;altro, potete reperire informazioni più dettagliate sull&#8217;operato direttamente <a href="http://logzero.wordpress.com/2010/01/18/agire-per-haiti/#comment-532">qui</a>.</p>
<p style="text-align: center;"><a href="http://www.agire.it/it/hp_it.html">UN AIUTO IMPORTANTE PER HAITI</a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.robertoconterosito.com/2010/01/25/agire-per-haiti/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertoconterosito.com/2010/01/25/agire-per-haiti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
