Posts
163
Comments
179
Trackbacks
5
giugno 2007 Blog Posts
Ajax Tip: Startup Script e UpdatePanel

Spesso e volentieri nelle mie applicazioni web, visualizzo alert javascript per segnalare all'utente errori o warning. In ASP.NET 2.0 la funzione da usare è la Page.ClientScript.RegisterStartupScript. Nel caso si utilizzino update panel e AJAX ci sono dei problemi e lo script che si tenta di registrare non sembra essere eseguito.
La soluzione è usare la funzione RegisterStartupScript dello ScriptManager e in particolare bisogna usare questa sintassi:

ScriptManager.RegisterStartupScript(Me.UpdatePanel1, GetType(String), "errorMessage", script, True)

posted @ giovedì 28 giugno 2007 09:35 | Feedback (3)
ASP.NET Ajax: problemi di memoria con il CalendarExtender

Sto iniziando ad usare le estensioni AJAX di Microsoft in modo più approfondito. Aggiungendo un CalendarExtender ad una pagina ASP.NET mi sono accorto, insieme ai miei colleghi, di una lentezza esasperante e di un'occupazione spropositata in memoria.
Pensando ad un errore nel mio sito o ad un problema nella mia versione del control toolkit mi sono scaricato l'ultima versione e ho fatto un test sul SampleWebSite. Anche in questo caso gli stessi problemi.
A questo punto mi sono deciso ad indagare e ho fatto affidamento su San Google. Ho trovato questo issue nel sito CodePlex del progetto. Sebbene al momento sia stato chiuso perchè non riproducibile, non mi pare che sia stato effettivamente risolto, come viene sottolineato da chi ha aperto la segnalazione.

Al momento l'unica soluzione è quella di scaricarsi il codice sorgente e andarsi a modificare il file CalendarBehavior.js. Le modifiche da fare sono quelle elencate nella segnalazione:

I fixed the problem. In fact, there are two problems.
-1st: if I remove the "select" event in _popupDiv$delegates, it removes one of the memory leak problem. Moreover, I do not understand why this event is used, because IE and Firefox works fine without (perhaps for other browser ?).
-2nd: in the dispose method, there are some bad conditions to remove the handlers on _daysTable, _monthsTable and _yearsTable: they are on _daysRows, _monthsRows and _yearsRows, that are properties of the class but never initialized, so I remove this properties and change conditions from _[...]Rows to _[...]Table.

Sul primo punto non mi pronuncio, anche a me sembra che l'evento select non sia mai chiamato. Per quanto riguarda la dispose, vengono controllate delle proprietà che effettivamente non sono mai istanziate e quindi dovrebbero essere sempre null.
Eseguendo queste modifiche anche nella mia installazione i problemi di memoria sono scomparsi. In ogni caso mi sembra che il Calendar sia ancora troppo pesante e reagisca lentamente all'input dell'utente. Mah!

posted @ martedì 26 giugno 2007 18:07 | Feedback (1)
UpdatePanel e Validators: la soluzione sono gli ASP.NET AJAX Validators

Probabilmente chi lavora da un po' con ASP.NET e AJAX, si sarà accorto che inserendo un validator in un update panel non tutto funziona come dovrebbe.
Il problema risiede nel partial rendering e nelle nuovi API di AJAX che lo cosentono. Come potete leggere nel post di Matt Gibs, sarebbe dovuta uscire una patch distribuita attraverso il Windows Update che avrebbe dovuto risolvere il problema andando ad aggiornare l'assembly System.Web.
A me sembra di aver aggiornato Windows con gli ultimi aggiornamenti, ma i problemi tra validator e update panel sono gli stessi. A questo punto non so se la patch sia effettivamente stata rilasciata o meno. Attendo lumi da chi è più informato di me. In ogni caso seguendo le indicazioni del post segnalato in precedenza il problema si risolve e possiamo tornare ad utilizzare i nostri validators senza nessun problema.

posted @ mercoledì 20 giugno 2007 15:45 | Feedback (0)
Generare file Excel senza automazione

Sicuramente è un problema che molti avranno avuto: la generazione di file Excel da applicazioni Windows o ASP.NET.
Il motivo è molto semplice: Excel, come Word, ormai sono usati dappertutto e spesso gli utenti finali hanno una certa familiarità e una certa dimestichezza con questi strumenti. E' facile quindi che chiedano esportazioni di vario tipo su Excel per elaborazioni successive.
Con la versione 2007 di Office e con il formato OpenXML è tutto molto più facile. Ma se volessimo supportare le versioni precedenti? Se volessimo avere qualcosa che funzioni sia su Office XP, sia su Office 2003 sia su Office 2007?
L'automazione non è sicuramente la scelta giusta e si porta dietro tantissimi problemi, il primo fra i quali è il fatto di richiedere la presenza di Excel sulle macchine (e sui server) in cui girano le applicazioni.
La soluzione è quella di usare il formato Xml Workbook introdotto sin dalla versione XP di Office. In questo modo è possibile creare documenti Excel in modo semplice e pulito, anche da pagine ASP.NET. Chiaramente esistono delle limitazioni, ma in molti casi questo formato è sufficiente a soddisfare le necessità delle nostre applicazioni.
Per facilitare la generazione di questo tipo di file è possibile costruirsi una propria libreria o, più semplicemente, utilizzare quella di Carlos Aguilar che è free e utilizzabile anche in progetti commerciali.
Attualmente ho fatto solo dei semplici test e ho verificato che i file generati si riescono ad aprire ed elaborare sia con Excel 2003 che con Excel 2007.
Se qualcuno è a conoscenza di altre librerie di questo tipo si faccia avanti!

posted @ giovedì 14 giugno 2007 09:40 | Feedback (3)
Firefox e i Tooltip per le immagini

E' da molto tempo che mi dedico allo sviluppo di applicazioni web, ma fino a poco tempo fa ero esclusivamente orientato verso il browser di casa Microsoft.
Chiaramente era una pacchia ! Nessun problema con CSS, javascript, margini e quant'altro. Adesso piano piano, sto scoprendo quanto è vario il panorama dei browser e mi sto rendendo conto che le differenze sono molte e spesso si ricorre a trucchi (hack o per fare i fighi).
Il trucco di oggi riguarda i tooltip che spesso e volentieri gli sviluppatori web associano alle immagini, come descrizione aggiuntiva e come indicazione verso l'utente. Se come me eravate abituati ad usare il tag alt, questo frammento della FAQ di Firefox vi aprirà gli occhi:


Dove sono i tooltip (suggerimenti a comparsa) delle immagini?

Molti siti utilizzano l'attributo HTML alt per associare dei commenti alle immagini. Questo è sbagliato. L'attributo corretto per l'utilizzo dei tooltip è title. L'attributo alt ha lo scopo importantissimo di fornire un testo alternativo in sostituzione alle immagini per i browser che non le mostrano, per scelta o meno dell'utilizzatore (come i lettori a schermo per i non vedenti). Se i browser grafici continuano a visualizzare l'attributo alt come tooltip, gli sviluppatori di siti web non saranno incoraggiati ad utilizzarlo per lo scopo previsto. Per maggiori informazioni su tale argomento leggere il bug di Mozilla 25537. In breve, è compito degli sviluppatori web utilizzare l'attributo corretto per i tooltip. Se si è nel dubbio leggere qui per altre informazioni.

Esiste comunque un'estensione che abilita la visualizzazione dell'attributo alt come tooltip. È possibile installarla dalla pagina delle estensioni.


A quando browser veramente compatibili? A quando un'unica versione dei CSS senza hack e senza smaneggiamenti vari?


P.S. Passi dover fare trucchi tra Internet Explorer e Firefox, ma tra Internet Explorer 6 e 7 no!!!!!!

posted @ lunedì 11 giugno 2007 18:20 | Feedback (4)
Greasemonkey: interfacciarsi ad un web service .NET

Avevo già accennato qualcosa su Greasemonkey nel mio post precedente. Non mi dilungo sull'utilità e sulle possibilità che Greasemonkey offre, voglio subito passare al sodo!

Una delle necessità principali quando si realizzano script per Greasemonkey è quella di andare a reperire dati esterni da integrare nelle pagine web che si stanno modificando. Come fare? Greasemonkey mette a disposizione la funzione GM_xmlhttpRequest tramite la quale è possibile fare chiamate asincrone verso un qualsiasi URL. Il frammento di codice seguente mostra un esempio di utilizzo:

1 GM_xmlhttpRequest( 2 { 3 method: 'GET', 4 serviceUrl, 5 headers: { 6 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 7 'Accept': 'application/atom+xml,application/xml,text/xml', 8 }, 9 onload: function(responseDetails) 10 { 11 // Qui va inserito il codice di gestione della risposta 12 } 13 );

Nell'esempio viene richiamato l'url presente nella variabile serviceUrl e una volta ricevuta la risposta, viene eseguito il codice all'interno della funzione di callback. Ovviamente con la stessa sintassi posso richiamare anche un web service .NET.
Nel caso di un web service .NET non occorre fare niente di particolare. Nel caso in cui si volesse utililizzare la GET, bisogna abilitarla da web.config dato che di default non è disponibile. Il frammento di codice seguente mostra come abilitare la GET:

1 <system.web> 2 <webServices> 3 <protocols> 4 <add name="HttpGet"/> 5 protocols> 6 webServices> 7 .... 8 .... 9 system.web>

E se il nostro web service .NET dovessere restituire oggetti complessi, custom entities o collection? Nessun problema. Utilizziamo il DOMParser sulla risposta XML del nostro web service. A questo punto possiamo navigare tra i nostri oggetti con semplici query e comandi. Qui di seguito un piccolo esempio:

var parser = new DOMParser(); var dom = parser.parseFromString(responseText,"application/xml"); var entries = dom.getElementsByTagName('custom_object_name');

Alla prossima!

posted @ venerdì 1 giugno 2007 15:20 | Feedback (0)
"PHP è gratis, Microsoft si fa pagare cara!"

Quante volte avete sentito dire questa frase? Personalmente un sacco, l'ultima questa mattina (Francesco, non ce l'ho con te, ho solo preso spunto dalla nostra breve chat!). Penso che quando un programmatore .NET e Microsoft oriented come me, parla con uno open-source oriented come ce ne sono tanti, è inevitabile che prima o poi quel commento venga fuori.
Prima di venir attaccato da tutte le parti, preciso che in passato ho programmato in PHP e attualmento lo faccio a tempo perso. Non mi ritengo esperto di PHP, ma mi ritengo piuttosto ferrato su ASP.NET. Non ritengo PHP uno "strumento del demonio", non sono un suo fan sfegatato, ma posso tranquillamente ammettere che ha cose carine e unito a MySQL diventa uno strumento piuttosto potente.

Detto questo non sopporto quella cavolo di frase. E' vero PHP è gratis. Installi Linux, Apache, PHP e MySQL. Tutto gratis (o quasi...). Se usi ASP.NET devi avere un server con IIS e la licenza si paga. Se usi SQL Server devi avere un server e la licenza si paga.
Ma quando qualcuno fa queste considerazioni e questi raffronti sui costi, confronta mai il tempo che ci vuole per realizzare il medesimo sito X in PHP o in ASP.NET? Qualcuno confronta i tempi di installazione, configurazione, manutenzione, aggiornamento? Qualcuno considera che ci sono in giro servizi di hosting che non fanno pagare chissà quale cifra stratosferica anche nel caso di ASP.NET? Qualcuno considera che se si sale di complessità e si realizzano siti o applicazioni di livello medio o enterprise le differenze iniziano a diventare abissali?

Boh, forse sono miope io, forse sono solo io che vedo Finestre e Uffici dappertutto, ma mi pare che "dall'altra parte della barricata" non si faccia mai un discorso complessivo e non si faccia mai una valutazione oggettiva. Se questi ragionamenti fossero limitati ai programmatori o ai fan del mondo open-source il problema sarebbe "limitato", ma spesso è il discorso viene fatto da chi, in enti pubblici o privati, deve scegliere una soluzione piuttosto che l'altra.
Siamo proprio sicuri che sia una scelta che fa risparmiare sempre?

<provocation mode="true">
       E' solo casuale l'associazione ternaria "ente pubblico - open source - inefficienza" ?
</provocation >

Update
Mancava il tag provocation che è molto importante :)

posted @ venerdì 1 giugno 2007 14:51 | Feedback (7)
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS