Posts
163
Comments
179
Trackbacks
5
luglio 2007 Blog Posts
Velocissima considerazione su Visual Studio 2008 beta 2

Anche io come molti altri, ho scaricato la beta 2 di Visual Studio 2008. Nel mio caso mi sono scaricato la macchina virtuale per non avere problemi di installazione e soprattutto di rimozione quando arriveranno altri aggiornamenti.

Essendo uno sviluppatore quasi totalmente orientato sul web, la cosa principale che mi premeva verificare erano le novità su ASP.NET e in particolare il debugging e l'intellisense su Javascript. Non ci posso credere ma funziona veramente! Non sono solo dicerie!!!
Si possono inserire i punti di interruzione come nel codice VB e verificare i valori delle variabili. Mi viene quasi da piangere alla sola idea di abbandonare i vari alert o il più sofisticato Firebug (che fa tante altre cose, ma che usavo anche per avere errori JS più precisi).

posted @ martedì 31 luglio 2007 14:20 | Feedback (3)
.NET Tip: recuperare l'owner di un file

Condivido questo piccolo tip, sperando di velocizzare la ricerca a qualcun altro nel caso avesse la stessa mia esigenza.
Tornando a noi, pensavo erroneamente che la classe FileInfo contenesse tutte le informazioni relative ad un file, compreso l'owner.
Invece non è così! Fortunamente se stiamo utilizzando NTFS (non so se funziona anche in altri contesti) e il Framework 2.0 possiamo utilizzare le nuove funzioni per la gestione della security e delle ACL.
Per recuperare l'owner del file è sufficiente utilizzare il seguente codice:

1 Dim fInfo As New FileInfo(filePath) 2 Dim owner As String 3 Try 4 owner = fInfo.GetAccessControl.GetOwner(GetType(System.Security.Principal.NTAccount)).Value 5 Catch ex As Exception 6 owner = "Sconosciuto" 7 End Try

posted @ martedì 31 luglio 2007 14:02 | Feedback (0)
SQL Server 2005 Migration Assistants

Segnalo, come altri prima di me, questa serie di Migration Assistants per migrare database di vario tipo verso SQL Server 2005. Attualmente sono disponibili quelli per Access, Oracle e Sybase. A breve dovrebbero essere disponibili quelli per DB2 e Informix.

Per chi non lo sapesse si tratta di tool che che, attraverso dei semplici wizard, permettono la migrazione di database vari verso SQL Server 2005 (funzionano anche con la Express). Al momento sono riuscito solo a provare quello di Access e devo dire che funziona molto bene. Sono riuscito a replicare i miei database senza nessun problema. Sarei curioso di verificare quello per Oracle, ma attualmente non ho un database con cui poter fare qualche prova.

Ultima nota: sono tutti gratuiti, previa registrazione e download di un piccolo fie di licenza.

posted @ lunedì 30 luglio 2007 16:33 | Feedback (0)
ASP.NET: utilizzare SQL Server Compact Edition 2005 al posto di Access?

Iniziamo subito con il dire che utilizzare Access con ASP.NET non è una cosa buona e giusta. Possono saltar fuori tanti problemi, le prestazioni sono quelle che sono e non si hanno tante belle cose che troviamo in SQL Server 2005.
Però è innegabile che a volte fa comodo. A volte fa comodo non dover installare nessun db engine. A volte, quando si hanno piccoli siti o piccole applicazioni web, Access compie egregiamente il suo compito.

Quello che mi chiedevo in questi giorni è: perchè non utilizzare SQL Server CE 2005 al posto di Access? Anche in questo caso non dovrei installare niente, è sufficiente copiare un unico file, come nel caso di Access. Quali possono essere i problemi e le limitazioni?

Utilizzare SQL CE 2005 nelle nostre applicazioni .NET è abbastanza banale. Possiamo infatti sfruttare il sistema a provider di ADO.NET anche con SQL CE 2005. In questo caso dobbiamo refenziare il giusto assembly, System.Data.SqlServerCe.dll, che ci viene installato con il piccolo pacchetto di installazione.
I problemi però iniziano fin da subito: appena si tenta di aprire una connessione salta fuori la seguente eccezione:

System.NotSupportedException: SQL Server Compact Edition is not intended for ASP.NET development.


Una veloce googlata fa saltar fuori tanti post che descrivono il problema e la sua risoluzione. Sostanzialmente è sufficiente aggiungere la seguente riga di codice

1 AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);


Quello che però non mi piace di tutto questo è proprio il fatto di utilizzare SQL Server CE 2005 in un ambito non previsto.

Comunque, continuando nell'utilizzo saltano fuori anche altri problemi derivanti da alcune limitazioni di SQL Server CE 2005. Ad esempio l'esecuzione di una query banale come SELECT TOP 10 FROM Tabella causa un errore in quanto lo statement TOP non è supportato.
Fortunatamente alcune di queste limitazioni saranno rimosse nella prossima versione, quella inclusa nel Framework 3.5. Alcune delle novità presenti saranno:

    1. SQL Server Compact Edition 3.5 Beta implements the timestamp (row version id) data type.
    2. SQL Server Compact Edition 3.5 BETA supports local transaction scope on a desktop and Tablet PC.
    3. SQL Server Compact Edition Table Designer in Visual Studio Code Name "Orcas" has been enhanced to provide a user interface for creating primary key and foreign key relationships between tables.
    4. SQL Server Compact Edition 3.5 Beta support for Transact-SQL statements has been extended as follows:
      • Nested query in SELECT FROM clause
      • CROSS APPLY and OUTER APPLY
      • CAST
      • TOP
    5. SQL Server Compact Edition 3.5 Beta supports data replication with SQL Server 2005 by using Microsoft Synchronization Services for ADO.NET. Microsoft Synchronization Services for ADO.NET is available for desktop and Tablet PCs only.
    6. SQL Server Compact Edition 3.5 Beta supports the ADO.NET Entity Framework. The support for ADO.NET Entity Framework is available for desktop and Tablet PCs only.
    7. SQL Server Compact Edition 3.5 Beta can be installed side-by-side with the previous version, SQL Server Compact Edition 3.1, on desktop and Tablet PC computers. Using SQL Server Compact Edition 3.5, you can open database files (*.sdf) created in SQL Server Compact Edition 3.1. Be aware that when a database file is opened in SQL Server Compact Edition 3.5, the file is updated to 3.5 and you will no longer be able to open the database by using SQL Server Compact Edition 3.1. Databases created by using SQL Server Compact Edition 3.5 cannot be opened by earlier versions of SQL Server Compact Edition.

In conclusione l'idea di sostituire Access con SQL CE 2005 al momento non mi sembra praticabile. Delle semplici prove hanno già evidenziato alcuni problemi e alcune limitazioni. Inoltre mi chiedo anche se utilizzare SQL CE 2005 nell'ambito web non possa causare problemi o side-effects particolari. Nel caso di ASP.NET, cosa succede se più utenti accedono contemporaneamente all'applicazione? Già come prassi sono abiutato a non lasciar mai aperta la connessione al db. E' sufficiente questo?
Qualcuno ha fatto test più approfonditi e mi sa dare delle dritte?

posted @ lunedì 30 luglio 2007 15:07 | Feedback (2)
Usare coppie chiave/valore in un AutoCompleteExtender

E' uno dei problemi più sentiti nel forum dell'Ajax Control Toolkit ed è anche il work item più votato. Il problema è molto diffuso: a volte la necessità dell'autocompletamento non si limita a recuperare un testo da una lista. A volte al testo selezionato è associato un id numerico che dovrà essere poi utilizzato per le operazioni lato server.

Immaginiamo ad esempio di avere una tabella con delle categorie e supponiamo che ogni categoria sia definita da un id numerico e da una descrizione. L'autocompletamento in questo caso dovrebbe permettere all'utente di "navigare" tra le varie voci descrittive dell'elenco, ma una volta selezionato un elemento dovrebbe essere recuperato il valore numerico associato. Come fare?

Beh la soluzione è abbastanza semplice come descritto in questo post. E' abbastanza semplice perchè il lavoro è già stato fatto e si tratta solo di scaricare l'ultima build dell'Ajax Control Toolkit e seguire le indicazioni di quel post.

Da sottolineare che l'unica possibilità che viene offerta allo sviluppatore è quella di definire una funzione javascript che viene richiamata in fase di selezione di un elemento. In questa funzione è poi possibile ricavare l'id dell'elemento. Sarebbe stato molto utile avere anche una proprietà lato server tipo GetValue in modo da poter recuperare anche in fase di postback il valore associato al testo.

In ogni caso è facile porvi rimedio: in questo post viene indicato come modificare dell'Ajax Control Toolkit per esporre una proprietà di questo tipo. Personalmente ho preferito non toccare il toolkit e creare un mio custom control che avesse anche questa proprietà.

posted @ mercoledì 25 luglio 2007 17:32 | Feedback (0)
Esportare documenti da applicazioni .NET

Non credo di essere il solo ad aver avuto la necessità di esportare dati sotto forma di documenti PDF o documenti Word. L'esempio classico è quello della stampa da ASP.NET fatta sotto forma di generazione di un PDF.
E' possibile utilizzare diverse componenti per quanto riguarda i PDF, mentre per Word la soluzione che si utilizzava di solito è quella dell'automazione, con tutti i problemi che comporta.

Se non si hanno grosse necessità e si devono esportare documenti editabili, segnalo la libreria gratuita Gios Word .NET che permette di creare file in formato RTF senza aver la necessità di installare niente in locale o sul server nel caso si stia sviluppando in ASP.NET. La cosa interessante è che permette di creare tabelle, paragrafi, settare font, colori, includere immagini, footer, header etc..

Chiaramente non si riesce a fare tutto, ma credo che per tantissime necessità sia perfetta.

P.S. L'autore è italiano, quindi meglio ancora!

posted @ mercoledì 25 luglio 2007 14:56 | Feedback (3)
Un'alternativa all'AutocompleteExtender

Perchè mai dover cercare qualcosa di alternativo all'AutoCompleteExtender delle estensioni AJAX per ASP.NET? Beh i motivi potrebbero essere tanti: la necessità di gestire coppie chiave/valore (sarà inclusa nella prossima release), l'autocompletamento multiplo che così com'e' fatto può non piacere o la pesantezza quando si inseriscono tanti AutocompleteExtender in una pagina (almeno questo è quello che ho notato io).
In ogni caso, qualsiasi sia la motivazione, se siete alla ricerca di un'alternativa all'AutoCompleteExtender segnalo questo plug-in per jQuery:

http://www.pengoworks.com/workshop/jquery/autocomplete.htm 

Lo sto testando e mi sembra ben fatto. E' anche vero che sono dovuto intervenire in alcuni punti e correggere qualche funzione che non si comportava come volevo io (vedi gestione della cache).

posted @ mercoledì 25 luglio 2007 14:13 | Feedback (0)
Testare siti ASP.NET 2.0 Ajax Enabled con Multiple IE

Oggi è una giornata di post! Per chi non lo sapesse Multiple IE, consente di installare sulla stessa macchina versioni multiple di Internet Explorer, dalla 3.0 alla 6.
Chiaramente la cosa diventa molto importante quando si deve testare la propria applicazione ASP.NET con le varie versioni del browser di mamma Microsoft.

Sembra tutto rose e fiori e invece qualche problema c'e'. Provando infatti a testare un semplice sito ASP.NET che fa uso solo di UpdatePanel ecco l'errore che mi ritrovo quando si esegue il postback.

Provando con la stessa versione del browser, sulla stessa macchina (IE 6 sulla macchina, IE 6 su Multiple IE) l'errore non c'e' più.
Ho visto diversi post su questo problema, quindi prima di "smontare" la vostra applicazione pezzo, per pezzo fate sempre una prova su di una macchina reale o su una virtuale e attenzione ad usare questo strumento.

posted @ mercoledì 11 luglio 2007 14:29 | Feedback (1)
Mettere un'applicazione ASP.NET 2 off-line

La nuova caratteristica di ASP.NET 2.0 per mettere un'applicazione off-line è sicuramente molto comoda: si aggiunge un file app_offline.htm nella root della nostra applicazione ASP.NET e il gioco è fatto. In caso di aggiornamenti pesanti è molto comodo poter avvisare gli utenti e poterli "bloccare" senza che si trovino in mezzo alle operazioni di aggiornamento.

Se usate IE6 o 7 potreste però avere qualche problemino con questa caratteristica. Questo post di Scott Guthrie spiega il motivo e fornisce un piccolo esempio funzionante.

posted @ mercoledì 11 luglio 2007 12:10 | Feedback (0)
.NET, MySql e le transazioni

So bene che non è un argomento prettamente dotnettiano, ma onde evitare "coccoloni" a qualcuno (come è successo a me) occorre sapere che esistono vari tipi di tabelle configurabili in MySQL: MyIsam, InnoDb, etc.. (sto utilizzando per test vari la versione 4.1 di MySQL non so se sia ancora così anche nella 5).

Come molti altri, anche io mi sono fatto la mia classe SQL Helper o Data Helper o quello-che-è helper. Utilizzandola in più parti e con più database ormai ho funzioni ben testate che fanno sempre le stesse cose.
Un'operazione comune è quella di fare più query in una transazione e poi in caso di errore di una di queste fare il rollback. Penso che tutti ormai utilizzino le transazioni indipendentemente dal db e dalla complessità dell'applicazione.

Beh, attenzione con MySQL perchè non tutti i suoi tipi di tabelle supportano le transazioni. Ad esempio le tabelle MyIsam (che provengono dalla versione 3) non le supportano e chiamare il rollback della nostra transazione creata da .NET non ha effetto!

Ovviamente è sufficiente cambiare il tipo nella tabella in uso, ma magari è comodo saperlo soprattutto quando il db è preparato da altri! 

posted @ mercoledì 11 luglio 2007 09:53 | Feedback (1)
dotTrace: una piacevole scoperta!

Devo ammetterlo non lo conoscevo! E quindi un doveroso grazie va a tutto lo staff di DotNetMarche che, avendomi estratto come fortunato vincitore di una licenza, mi ha dato la possibilità di provare questo tool.

Per quelli come me che non lo conoscono, dotTrace 3.0 è un semplice, ma utilissimo profiler per applicazioni .NET. E' possibile analizzare sia le performance che l'occupazione della memoria, sia per applicazioni Windows forms sia per applicazioni ASP.NET che attualmente sono quelle di mio interesse.

Che dire mi sembra di tornare ai vecchi tempi del C++ quando cercavo di ottimizzare il mio semplice motore 3D, ottimizzando ogni singola funzione, sostituendo blocchi di codice C con l'equivalente in assembler, sempre alla ricerca di quel frame in più!

posted @ martedì 10 luglio 2007 09:33 | Feedback (1)
DotNetMarche: considerazioni post workshop

Mattina post-workshop anche per me. Iniziamo con le mie considerazioni.

Partiamo dalla location: ottima! Nel senso che andare ad un workshop in bicicletta sotto il sole nella mia bella città non ha prezzo!

Ma veniamo alle cose serie: anche io come Corrado avevo seguito janky solo in webcast e devo dire che dal vivo è molto più coinvolgente. Gli argomenti da lui trattati mi interessano molto e la chiarezza espositiva e la sua professionalità sono sicuramente eccellenti.

Gian Maria invece non lo conoscevo proprio se non per qualche interazione nel blog di Guisa e in quello di DotNetMarche. Devo dire che è stata una piacevole "scoperta" e anche il suo intervento è stato molto interessante (soprattutto la paret di IoC). Peccato solo che l'AOP sia stata trattata molto (troppo) velocemente, ma è anche vero che le cose da dire erano sicuramente tantissime e come ha detto il buon Diego, nonostante quello che si faccia o si preveda, alla fine si sfora sempre.

Unica nota negativa: non aver potuto partecipare alla cena!  

In conclusione è stata sicuramente un'ottima giornata che spero si possa ripetere nel prossimo futuro!

P.S. La spilla è proprio tooooga!

posted @ sabato 7 luglio 2007 12:47 | Feedback (1)
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS