Azkaban, un posto come un altro dove vivere http://blogs.ugidotnet.org/azkaban/Default.aspx Il blog di Filippo Macchi it-IT Filippo Macchi Subtext Version 2.6.0.0 Azkaban, un posto come un altro dove vivere http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/azkaban/Default.aspx 77 60 Ajax: dalla RC alla RTM --> un incubo!!! http://blogs.ugidotnet.org/azkaban/archive/2007/01/24/68379.aspx Sono in ufficio alle 7,30 e leggo che ieri è stata rilasciata la versione definitiva di Ajax. Bene, andiamo con l'aggiornamento. Mi scarico l'installazione. Leggo le tips da seguire per l'aggiornamento, quindi disinstallo la versione RC e procedo con l'installazione della RTM. Tutto liscio come l'olio. Apro Visual Studio, apro il mio progetto, e vado per aggiornare il web.config...... ahhhhhhhhhh!!!!!!!!!!!!!! Con mio orrore scopro che non posso o non riesco a cliccare sulla toolbox dell'esplora soluzione, subito non ci credo, quindi chiudo VS e riapro, stesso risultato. Allora con calma disinstallo la RTM e riprovo l'installazione, risultato lo stesso. Impossobile cliccare su una qualunque delle toolbox. Chiudo la mia soluzione e provo a fare un nuovo progetto AJAXEnabledWebApplication, progetto creato correttamente ma di nuovo impossibile clicca, assurdo. Risultato, disinstallo la RTM e rimango in attesa, non so bene di cosa. Forse qualcuno avrà il mio stesso problema. Adesso sto postando sul forum di ajax.net vediamo un po' come finisce sta cosa.<img src="http://blogs.ugidotnet.org/azkaban/aggbug/68379.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2007/01/24/68379.aspx Wed, 24 Jan 2007 10:37:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2007/01/24/68379.aspx#feedback 65 http://blogs.ugidotnet.org/azkaban/comments/commentRss/68379.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/68379.aspx Google dipendenza Rigorosamente OT http://blogs.ugidotnet.org/azkaban/archive/2005/11/25/30533.aspx Sono da sempre una persona di facili entusiasmi e nel lavoro non faccio certo differenza. Eccomi quindi a riflettere, così quasi per caso, sui vari software che ogni giorno utilizzo per il lavoro. Tralasciando VS, mi sono reso conto che ho praticamente eliminato il messenger a favore di GTalk, per le ricerche uso l'immancabile Google Desktop, Outlook e quasi sempre chiuso mentre Gmail sempre aperto, ho eliminato tutti i software di aggregazione usando solo il reader di Google, i gruppi di discussione li ho spostati da Outlook Express a Google, infine ho brasata WebTrends a favore di Google Analytics. Tutto ciò è normale!? Penso di sì, sarà la moda, sarà che alla fine in qualunque posto di lavoro mi trovo (dentro e fuori dall'ufficio) ho tutte le risorse che mi servono, non so cosa sia fatto sta che sto diventanto Google dipendente.<img src="http://blogs.ugidotnet.org/azkaban/aggbug/30533.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/11/25/30533.aspx Fri, 25 Nov 2005 14:55:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/11/25/30533.aspx#feedback 58 http://blogs.ugidotnet.org/azkaban/comments/commentRss/30533.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/30533.aspx [OT] Caos o quasi Rigorosamente OT http://blogs.ugidotnet.org/azkaban/archive/2005/10/20/28380.aspx <P>Di base sono una persona ordinata ma non sul lavoro, sopratutto quando si parla di scrivania.<BR>Volevo quindi farvi partecipi del caos che regna sulla mia in una normale giorno di lavoro.</P> <P><IMG src="http://www.filippomacchi.it/image/desk.jpg" border=1> </P><img src="http://blogs.ugidotnet.org/azkaban/aggbug/28380.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/10/20/28380.aspx Thu, 20 Oct 2005 17:22:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/10/20/28380.aspx#feedback 5 http://blogs.ugidotnet.org/azkaban/comments/commentRss/28380.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/28380.aspx Google rules! Rigorosamente OT http://blogs.ugidotnet.org/azkaban/archive/2005/10/04/27516.aspx Non so se è già capitato a qualcuno di voi, però a me è la prima volta che un baco di programmazione viene per così dire messo in evidenza da google. In pratica: poco prima delle ferie di agosto ho aggiornato un database di un portale di un mio cliente, nuove funzionalità, dati aggiornati ecc., poi bello tronfio parto per le ferie ed al mio ritorno ecco i primi problemi. Mi vengono segnalati dei forti rallentamenti sul server web. Pensa e te ripensa, all'inizio non davo troppo peso alla cosa, anche perchè i problemi erano veramente sporadici in più su quel server gira una nuova applicazione ancora in beta che gestisce l'extranet del cliente. Nelle ultime settimane però la cosa si è fatta preoccupante, diversi processi in lock su SQL, IIS rallentato, CPU spesso al 100%..... insomma un vero casino. Dopo averle provate tutte ecco che finalmente i nodi vengono al pettine e il risultato è il seguente: la copia cache dell'ultima indicizzazione di google puntava a certe schede prodotto ormai obsolete e non più presenti a db, il risultato è che quando il robots girava per l'indicizzazione del sito il tutto andava in blocco. Soluzione: con un semplice if il baco nel codice è stato risolto. Grazie Google.<img src="http://blogs.ugidotnet.org/azkaban/aggbug/27516.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/10/04/27516.aspx Tue, 04 Oct 2005 15:57:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/10/04/27516.aspx#feedback 6 http://blogs.ugidotnet.org/azkaban/comments/commentRss/27516.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/27516.aspx I primi 3 giorni della settimana Rigorosamente OT http://blogs.ugidotnet.org/azkaban/archive/2005/09/07/25972.aspx <P>Luned&#236;: lavoro come un negro con il mio bel progettino e faccio tutto quello che devo fare.</P> <P>Marted&#236;: iniziano i primi problemi, il debug di VS non va pi&#249;, riavvio server, pc, router, hub, firewall, insomma riavvio il mondo e non va. Poche saracche (+ discreto).</P> <P>Mercoled&#236;: come per magia il debug &#232; ripartito, che cose belle che sono queste.</P><img src="http://blogs.ugidotnet.org/azkaban/aggbug/25972.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/09/07/25972.aspx Wed, 07 Sep 2005 17:49:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/09/07/25972.aspx#feedback 41 http://blogs.ugidotnet.org/azkaban/comments/commentRss/25972.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/25972.aspx Un datagrid per ogni riga di un datagrid Sample Code http://blogs.ugidotnet.org/azkaban/archive/2005/07/28/24454.aspx <P><FONT size=2>La necessit&#224;: per ogni riga di un datagrid visualizzare una datagrid con informazioni esplose.<BR>La soluzione: girovagando un po' in giro ho trovato diverse soluzioni sul Master and Detail Datagrid, perfino qualcuno che si &#232; creato a proprio uso e consumo un controllo personalizzato.<BR>Io ovviamente non ho n&#232; il tempo n&#232; le capacit&#224;, quindi risolvo pi&#249; artigianalmente in questo modo.</FONT></P> <P><FONT size=2>Lo scenari per varie motivi che non sto ad elencare, mi trovo costretto a dover visualizzare dei blocchi di record, a 3 a 3, relazionati tra loro attraverso apposita tabellina di sql.</FONT></P> <P><FONT size=2>Partiamo quindi dal codice del pageload:</FONT></P> <BLOCKQUOTE dir=ltr> <P><FONT size=2>strlSQL = "SELECT&nbsp;ID FROM tblRelationship WHERE Divisione = @Divisione AND NOT Stato ='3'"</FONT></P> <P><FONT size=2><FONT color=#0000ff>Dim</FONT> da <FONT color=#0000ff>As</FONT> <FONT color=#0000ff>New</FONT> SqlDataAdapter(strSQL, conn)<BR>dsRelationship = <FONT color=#0000ff>New</FONT> DataSet<BR>da.Fill(dsRelationship, "miaTabella")</FONT></P><FONT size=3><FONT size=3> <P><FONT size=2>grdTEST.DataSource = dsRelationship <BR>grdTest.</FONT><FONT size=2><FONT color=#000000>DataKeyField = ID<BR></FONT>grdTEST.DataBind()</FONT></P></BLOCKQUOTE> <P dir=ltr><FONT size=2>Ottengo cos&#236; il datagrid popolato di ID.<BR>Adesso passiamo ad implementare la funzioncina che per ogni riga mi interroga il db popolandomi un bel datagrid:</FONT></P><FONT color=#0000ff> <BLOCKQUOTE dir=ltr> <P><FONT size=2>Protected</FONT></FONT><FONT size=2> <FONT color=#0000ff>Function</FONT> getOrdersDataSource(<FONT color=#0000ff>ByVal</FONT> _ID <FONT color=#0000ff>As</FONT> <FONT color=#0000ff>String</FONT>) <FONT color=#0000ff>As</FONT> DataView<BR><FONT color=#0000ff>&nbsp;&nbsp; Dim</FONT> strSQL <FONT color=#0000ff>As</FONT> <FONT color=#0000ff>String</FONT> = "SELECT Fields FROM tblMiaTabella WHERE sr.ID =&nbsp;@ID AND sp.Divisione =&nbsp;@Divisione "</FONT></P> <P><FONT size=2><FONT color=#0000ff>&nbsp;&nbsp; Dim</FONT> conn <FONT color=#0000ff>As</FONT> SqlConnection<BR>&nbsp;&nbsp; conn = <FONT color=#0000ff>New</FONT> SqlConnection(ConfigurationSettings.AppSettings("conn"))<BR><FONT color=#0000ff>&nbsp;&nbsp; Dim</FONT> ds <FONT color=#0000ff>As</FONT> DataSet<BR><FONT color=#0000ff>&nbsp;&nbsp; Dim</FONT> daRel <FONT color=#0000ff>As</FONT> <FONT color=#0000ff>New</FONT> SqlDataAdapter(strSQL, conn)<BR>&nbsp;&nbsp; ds = <FONT color=#0000ff>New</FONT> DataSet<BR>&nbsp;&nbsp; daRel.Fill(ds, "ds")<BR><FONT color=#0000ff>&nbsp;&nbsp; Return</FONT> ds.Tables(0).DefaultView<BR><FONT color=#0000ff>End</FONT> <FONT color=#0000ff>Function</FONT></FONT></P></BLOCKQUOTE> <P dir=ltr><FONT color=#0000ff><FONT color=#000000 size=2>A questo punto personalizziamo il codice HTML.</FONT></FONT></P> <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"> <P dir=ltr><FONT size=2>&lt;asp:DataGrid id="grdTEST"&nbsp; AutoGenerateColumns="False" runat="server"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Columns&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:TemplateColumn HeaderText="ID"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ItemTemplate&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:Label Runat="server" Text='&lt;%# Container.DataItem("ID") %&gt;' ID="lblID"&gt;&lt;/asp:Label&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ItemTemplate&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:TemplateColumn&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:TemplateColumn&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ItemTemplate&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:DataGrid runat="server" AutogenerateColumns="False" DataSource='&lt;%# getOrdersDataSource(DataBinder.Eval(Container.DataItem, "ID")) %&gt;' ID="grdRow"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Columns&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [... template column]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Columns&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:DataGrid&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ItemTemplate&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:TemplateColumn&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Columns&gt;<BR>&lt;/asp:DataGrid&gt;</FONT></P></BLOCKQUOTE></FONT></FONT><img src="http://blogs.ugidotnet.org/azkaban/aggbug/24454.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/07/28/24454.aspx Thu, 28 Jul 2005 17:49:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/07/28/24454.aspx#feedback 10 http://blogs.ugidotnet.org/azkaban/comments/commentRss/24454.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/24454.aspx Application Block assolutamente micidiali! Sample Code http://blogs.ugidotnet.org/azkaban/archive/2005/07/21/23994.aspx <P><FONT size=2>Questa mattina mi chiedono di implementare su un sito di un cliente un sistema molto semplice di scontistica applicato all'input di un codice promozionale.<BR>Niente di pi&#249; semplice dico io.<BR>Scrivo la mia bella store procedure per verificare la correttezza del codice digitato:</FONT></P><FONT color=#0000ff> <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"> <P><FONT size=2>CREATE&nbsp;PROCEDURE </FONT></FONT><FONT size=2>dbo.uspCheckBuonoAcquisto<BR>@CS <FONT color=#0000ff>nvarchar</FONT>(6),<BR>@Esito <FONT color=#0000ff>nvarchar</FONT>(6) </FONT><FONT color=#0000ff><FONT size=2>output</FONT></P> <P><FONT size=2>AS</FONT></P></FONT> <P><FONT size=2><FONT color=#0000ff>IF&nbsp;EXISTS</FONT>(<FONT color=#0000ff>SELECT </FONT>field <FONT color=#0000ff>FROM </FONT>Table <FONT color=#0000ff>WHERE&nbsp;<FONT color=#000000>field</FONT></FONT> = @CS)<BR><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET </FONT>@Esito = 1<BR></FONT><FONT size=2><FONT color=#0000ff>ELSE<BR></FONT><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET </FONT>@Esito = 0<BR><FONT color=#0000ff>RETURN</FONT></FONT></P></BLOCKQUOTE> <P dir=ltr><FONT color=#000000 size=2>Poi passo a modifica la classe che gestisce l'ordine inserendo intanto una funzioncina per la validazione del codice:</FONT></P> <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"><FONT color=#0000ff><FONT color=#0000ff> <P><FONT size=2>Public</FONT></FONT><FONT size=2><FONT color=#000000> </FONT><FONT color=#0000ff>Shared</FONT><FONT color=#000000> </FONT><FONT color=#0000ff>Function</FONT><FONT color=#000000> CheckBuonoAcquisto(</FONT><FONT color=#0000ff>ByVal</FONT><FONT color=#000000> strCodice </FONT><FONT color=#0000ff>As</FONT><FONT color=#000000> </FONT><FONT color=#0000ff>String</FONT><FONT color=#000000>) </FONT><FONT color=#0000ff>As</FONT><FONT color=#000000> </FONT><FONT color=#0000ff>Boolean</FONT></FONT></P> <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"> <P><FONT color=#000000><FONT size=2><FONT color=#0000ff>Dim</FONT> ParamList(1) As</FONT></FONT><FONT size=2><FONT color=#000000> SqlParameter<BR>ParamList(0) = </FONT><FONT color=#0000ff>New</FONT></FONT><FONT size=2><FONT color=#000000> SqlParameter("@CS", SqlDbType.NVarChar, 6)<BR>ParamList(0).Value = strCodice<BR>ParamList(1) = </FONT><FONT color=#0000ff>New</FONT></FONT><FONT color=#000000 size=2> SqlParameter("@Esito", SqlDbType.NVarChar, 6)<BR>ParamList(1).Direction = ParameterDirection.Output</FONT></P> <P><FONT color=#000000 size=2>SqlHelper.ExecuteNonQuery(ConfigurationSettings.AppSettings("cs"), CommandType.StoredProcedure, "uspCheckBuonoAcquisto", ParamList)</FONT></P> <P><FONT color=#000000><FONT size=2><FONT color=#0000ff>If</FONT> ParamList(1).Value = 0 </FONT></FONT><FONT size=2><FONT color=#000000><FONT color=#0000ff>Then</FONT><BR></FONT><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return </FONT></FONT><FONT color=#0000ff size=2>False<BR></FONT><FONT size=2><FONT color=#000000><FONT color=#0000ff>Else</FONT><BR></FONT><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return </FONT></FONT><FONT size=2><FONT color=#0000ff>True<BR></FONT><FONT color=#0000ff>End If</P></BLOCKQUOTE></FONT></FONT> <P><FONT size=2><FONT color=#0000ff>End</FONT> <FONT color=#0000ff>Function</FONT></FONT></P></BLOCKQUOTE> <P dir=ltr><FONT color=#0000ff><FONT size=2><FONT color=#000000>Con mio assoluto sconcerto mi accorgo che il parametro</FONT> </FONT><FONT color=#000000><FONT size=2>ParamList(1) &#232; praticamente sempre null, qualuque cosa succeda nella store procedure.<BR>Dopo aver rotto l'anima a destra e a manca, trovo un bel post in un forum che spiega una cosa bellissima; praticamente richiamando il metodo ExecuteNonQuery nel modo pi&#249; semplice, che &#232; quello che uso normalmente&nbsp;</FONT><SPAN id=_ctl0__ctl0_BodyContentRegion_PostFlatView><FONT size=2><EM>SqlHelper.ExecuteNonQuery(sqlConnectionObjectGoesHere,&nbsp;&nbsp;"StoredProcedureNameGoesHere",&nbsp;&nbsp;parameters)</EM> tra le controindicazioni leggo:&nbsp;<!--StartFragment --> <SPAN id=_ctl0__ctl0_BodyContentRegion_PostFlatView><STRONG>You cannot use "output" parameters or "return_value" parameter</STRONG>.</SPAN> <BR>Rimango sconcertato...<BR>Mi accingo quindi a modificare la funzione con la nuova sintassi:&nbsp;<!--StartFragment --> <SPAN id=_ctl0__ctl0_BodyContentRegion_PostFlatView><EM>SqlHelper.ExecuteNonQuery(sqlConnectionObjectGoesHere,&nbsp;CommandType.StoredProcedure,&nbsp;"StoredProcedureNameGoesHere",&nbsp;parameters)</EM> e voil&#224; il tutto funziona perfettamente.</SPAN></FONT></SPAN></FONT></P></FONT></FONT><img src="http://blogs.ugidotnet.org/azkaban/aggbug/23994.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/07/21/23994.aspx Thu, 21 Jul 2005 17:09:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/07/21/23994.aspx#feedback 8 http://blogs.ugidotnet.org/azkaban/comments/commentRss/23994.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/23994.aspx Definizione di Tooltip Rigorosamente OT http://blogs.ugidotnet.org/azkaban/archive/2005/07/20/23906.aspx <P>Stamattina preso da un raptus di follia&nbsp;mi rendo conto che ignoro il significato di <STRONG>tooltip</STRONG>.<BR>I pensieri sono i pi&#249; svariati, ma tutti hanno in comune la prospettiva di un concetto complicatissimo, del resto ignorando la cosa non sapevo cosa aspettarmi, chiaro no?!</P> <P>Decido quindi di scrivere un'umile email al mio mentore per chiedere lumi...<BR>In risposta ricevo una comunicazione solo grafica contenente questa immagine:</P><IMG height=432 src="http://www.sugaman.it/files/tooltip.JPG" width=576 border=0> <P>Non contento ricerco in rete "<STRONG>what is tooltip</STRONG>" e trovo codesta definizione:&nbsp;<!--StartFragment --> <EM>Piccola etichetta gialla che in un programma descrive le funzioni della barra dei pulsanti</EM>.</P> <P><STRONG>L'ignoranza &#232; una brutta cosa.</STRONG></P><img src="http://blogs.ugidotnet.org/azkaban/aggbug/23906.aspx" width="1" height="1" /> Filippo Macchi http://blogs.ugidotnet.org/azkaban/archive/2005/07/20/23906.aspx Wed, 20 Jul 2005 15:03:00 GMT http://blogs.ugidotnet.org/azkaban/archive/2005/07/20/23906.aspx#feedback 1247 http://blogs.ugidotnet.org/azkaban/comments/commentRss/23906.aspx http://blogs.ugidotnet.org/azkaban/services/trackbacks/23906.aspx