Le mie prime impressioni sul Tech-Ed

by Andrea 12 November 2008 15:45

Questo è il primo Tech-Ed a cui partecipo, ed è anche la prima volta che mi trovo a Barcellona…peccato solo non aver il tempo di fare un pò il turista. :D

In questi 3 giorni sono riuscito a seguire parecchie sessioni, alcune delle quali mi hanno parecchio deluso o per come è stato trattato un argomento o per l’esposizione dello speaker (cosa che non credevo capitasse ad un evento di questo tipo), ma altre invece sono state particolarmente interessanti…
Tra le mie preferite spiccano Hight Performance ASP.NET e “Ruynning on the Metal” with the .NET Micro Framework sono al momento le sessioni che più mi hanno interessato e soddisfatto.

La sessione Hight Performance ASP.NET era dedicata al cosa fare per ottimizzare le nostre applicazioni, e ai piccoli accorgimenti da compiere per ottenere maggiori performance. Accorgimenti che vanno dall’uso della cache (sia lato client che server), di come organizzare JavaScript e CSS, e l’utilizzo di AJAX. Comunque andrò in maggior dettaglio in un prossimo post in quanto ritengo siano argomenti a volte sottovalutati.

La sessione sul .NET Micro Framework l’ho seguita per una mia curiosità. Io sono diplomato in elettronica, la programmazione di microcontrollori mi ha sempre interessato, e in questa sessione devo ammettere di aver trovato un nuovo stimolo per riavvicinarmi. Al momento stò valutando l’acquisto di una scheda che mi permetta di giocare un pò con questa tecnologia, perchè credo sia il modo migliore per capirne bene le potenzialità, e chissà che non escano cose interessanti.

Technorati Tags: ,

Tags:

.NET | Microsoft

"Choose toolbox items" vi chiude Visual Studio 2008 SP1

by Andrea 20 October 2008 02:45

In Visual Studio 2008 SP1 stavo cercando di aggiungere dei nuovi Items nella toolbox e mi accingo a fare il solito iter:

apro la toolbox –> click sul tasto destro del mouse –> click su “Choose Items…”

e Visual Studio mi si chiude senza darmi nessun messaggio di avviso. Avvio nuovamente VS e ci riprovo, e mi si ripresenta nuovamente il problema. Allora decido di vedere se fosse già capitato a qualcun’altro.

Cercando su connect ho trovato che l’unica soluzione (workaround) è quella di avviare Visual Studio in safe mode ().
Per farlo dovete aprire il Command Prompt e digitare

devenv.exe /safemode

Se dovesse capitare anche a voi, vi consiglio di segnalarlo direttamente qui:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=365943

Tags:

.NET | Microsoft

Un nuovo MVP

by Andrea 01 October 2008 09:45

MVP_FullColor_ForScreen E' con un'emozione unica che vi voglio rendere partecipi...oggi mi è stato conferito il premio di MVP (Most Valuable Professionals) nella categoria ASP/ASP.NET.

Oltre alla mail arrivata, ecco un post di Alessandro Teglia che ne da la conferma: MVP Award Program – October 2008

Mi sento di dover ringraziare Andrea Boschin e Davide Vernole perchè è per merito loro che sono potuto crescere professionalmente fino a questi livelli…e sono semper loro che hanno saputo trasmettere in me cosa significa fare community ed essere community.
Un grazie va a Microsoft (ad Alessandro Teglia) per credere nelle mie capacità, e un enorme grazie a tutte le persone che hanno partecipato agli eventi XeDotNet e Microsoft, o che mi hanno scritto in questo blog, per avermi motivato e stimolato ogni giorno a continuare in ciò che credevo, e a dare sempre di più.
Grazie davvero.

Ho sempre pensato che il premio di MVP fosse per me un punto di arrivo, un sogno (quasi irraggiungibile)....ed invece ora è diventato uno stimolo maggiore per crescere, e per diffondere lo spirito di community. GRAZIE

 

Technorati Tags: ,,

Tags:

.NET | +1 | ASP .NET | Microsoft

LINQ to SQL - Generare query IN utilizzando CONTAINS

by Andrea 29 July 2008 14:02

Oggi mi sono trovato ad affrontare un problema di quelli banali, ma che (come al solito) mi ha fatto perdere un bel pò di tempo.
Il mio problema era ricavare un elenco di ID e Title dato un array di questi ID.

In SQL quello che avrei fatto sarebbe stato semplicissimo e con l’operatore IN avrei rislto in questo modo:

select id, title from Pages where id in (1,2,3,8,9)

Nel progetto a cui stò lavorando stò però utilizzando LINQ to SQL e trovare l’equivalente query è stata davvero dura (è il primo progetto dove uso seriamente LINQ to SQL), ma alla fine grazie al Contains sono riuscito a trovare la soluzione:

int[] pagesID = new int[] {1,2,3,8,9};
 
var pages = (from p in dc.Pages
             where pagesID.Contains(p.ID)
             select new { p.ID, p.Title });

Questa invece è la query generata da LINQ per recuperare i dati, che come vedete è simile a quella che avremmo realizzato noi:

exec sp_executesql N'SELECT [t0].[id] AS [ID], [t0].[Titolo] AS [Title]
FROM [dbo].[Pages] AS [t0]
WHERE [t0].[id] IN (@p0, @p1)',N'@p0 int,@p1 int',@p0=701,@p1=694

La soluzione è davvero banale, ma lo posso dire solo ora, dopo che ci ho sbattuto la testa, e la posto qui nel caso servisse anche a qualcuno di voi, o a me nel caso perdessi la memoria. ;-)

Lo spunto per la soluzione l’ho trovata in questo post: Creating IN Queries With Linq To Sql

Technorati Tags: ,

Tags:

ASP .NET | .NET

Passaggio a BlogEngine. Addio WordPress

by Andrea 30 May 2008 02:23

Era da tempo che avevo iniziato la cosa, ma per un motivo o per un'altro avevo sempre posticipato. Ecco che ora il mio blog gira su BlogEngine e non più su WordPress.

Perchè questo?
Semplice perchè BlogEngine è sviluppato in .NET e questo mi permette di personalizzarlo e aggiungergli funzionalità a mio piacimento, senza dipendere da plugin di terze parti.
WordPress è una piattaforma di blog davvero stupenda, e credo proprio di poter dire che è la migliore che conosca, e la consiglierei a tutti....ma purtroppo è in PHP e non ho la voglia (e il tempo) di approfondirlo come argomento (dite pure che è pigrizia). Ecco il motivo di questo cambiamento.
In questo modo avrò anche la possibilità di testare le ultime tecnologie riguardanti il mondo del .NET Framework direttamente nel mio blog, e non è una cosa da poco.

Cambia il blog e cambia anche il dominio.
Il nuovo dominio ora è http://blog.dottor.net perchè il target del mio blog è un pò cambiato da quando ho iniziato, e "il silenzio di un urlo" ha poco a che vedere con i post relativi alle tecnologie Microsoft .NET.
Ma non ho intenzione di far morire quel dominio perchè ci sono proprio affezionato...lo terrò quindi per qualche idea/progetto futuro (che non si sa mai).

Dal vecchio blog è attivo un redirect (redirect 301) che ridirige i vecchi url verso quelli nuovi (e per questo rigrazio Roberto che mi ha dato una mano a riguardo), e spero di esser riuscito a redirigerli tutti. Spero poi che google mi dia una mano, a riposizionare il mio nuovo blog allo stesso livello di quello vecchio, per permettervi di trovare velocemente i miei vecchi post.

Il feed invece rimane invariato, e per chi non lo ha ancora sottoscritto, ecco qui: http://feeds.dottor.net/ilsilenziodiunurlo

Inoltre, se riscontrate qualche problema, non esitate a contattarmi.

Technorati Tags: ,

Tags: , ,

.NET | Sito

RockScroll - scrollbar sostitutiva per Visual Studio

by Andrea 20 May 2008 11:05

Vi avevo promesso che lo avrei postato, ed eccomi qui. 

All'ultimo meeting alcuni mi voi mi hanno chiesto cosa fosse la scrollbar che utilizzavo in Visual Studio.

RockScroll_5Altro non è che un tool che va a rimpiazzare la normare scroolbar e al suo posto ci mette una miniatura del testo presente nel file, evidenziando la parte di testo correntemente visualizzata.

Una dele caratteristiche che mi piace, è la possibilità di fare doppio click su di una parola, e vedere evidenziate tutte le occorenze di quel testo all'interno del file.

RockScrollOltre a questo, ci sono altre funzionalità davvero carine come la possibilità di riconoscere direttamente dalla barra le parti di testo commentate, e anche le righe di codice che sono state modificate.

 

 

Per scaricarlo e per maggiori info, vi riporto al post dell'autore Scott Hanselman: Introducing RockScroll

Technorati Tags: ,,

Tags:

.NET | Microsoft

Statement continue in un ciclo for

by Andrea 05 February 2008 20:02

Navigando un pò su msdn.microsoft mi è capitato di imbattermi in uno statement che (ammetto) non conoscevo.

Se si vuole interrompere l'esecuzione di una parte di codice all'interno di un ciclo for, continuando comunque a ciclare gli item, ci viene in soccorso uno statement comodissimo, che si chiama continue.

Ad esempio, con il seguente codice:

for (int i = 1; i <= 10; i++) 
{
    if (i < 9) 
        continue//  <<-----
    Console.WriteLine(i);
}

verrrà renderizzato come output:

9
10

perchè l'istruzione continue eviterrà di eseguire la parte di codice posta tra questo statement e la fine del ciclo for (che in questo esempio corrisponde solamente a Console.WriteLine(i);).

Perchè posto una cosa così semplice?!
Il motivo è che fino all'altro giorno, quello che avrei fatto sarebbe stato racchiudere parte del codice all'interno di un if, e ad una determinata condizione non l'avrei eseguito.
Ma devo ancora decidermi su quale delle due metodologie sia più elegante e corretta. Secondo voi?

Links:
continue (C# Reference)
Jump Statements (C# Reference)

Technorati Tags: ,

Tags:

.NET

Heroes, gli EROI sono {qui}

by Andrea 04 February 2008 19:02

Ed ecco che XeDotNet si fa partecipe anche dell'evento community afterhour che si terrà dopo l'evento 2008 Launch Roadshow nella tappa di Padova, e lo fa con un team d'eccezione:
Andrea Boschin,
Andrea Dottor,
Davide Senatore,
Mirco Vanini e
Davide Vernole.

Gli EROI sono {qui}: Gli speaker e i community Expert di XeDotNet

Iscrizioni: Iscriviti all'evento

Technorati Tags: ,

Tags:

.NET | XeDotNet

CryptographicException, Keyset does not exist

by Andrea 29 August 2007 20:08

bug In un componente COM (sviluppato in .net e utilizzato in una pagina ASP) che si occupa di decriptare alcuni messaggi, accadeva che dopo il suo utilizzo venisse generata un'eccezione di tipo CryptographicException con il messaggio "Keyset does not exist".

Ho sbattuto la testa per diverso tempo per capire dove venisse generata questa eccezzione e il perchè accadesse dopo l'utilizzo del componente (con un ritardo variabile).

Agganciandomi in Remote Debugging (come vi ho detto nel precedente post) ho avuto qualche dato in più, ed esattamente:

System.Security.Cryptography.CryptographicException was unhandled
Message="Keyset does not exist"
Source="mscorlib"
StackTrace:
at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
at System.Security.Cryptography.SafeKeyHandle._FreeHKey(IntPtr pKeyCtx)
at System.Security.Cryptography.SafeKeyHandle.ReleaseHandle()
at System.Runtime.InteropServices.SafeHandle.InternalFinalize()
at System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing)
at System.Runtime.InteropServices.SafeHandle.Finalize()

che mi ha fatto capire che fosse scatenata al passaggio del Garbage Collection per fare un pò di pulizia.

Con questi dati in più, e googlando un pò in rete ho trovato questo commento ad un post su codeproject ".NET Encryption Simplified" che dava un suggerimento per la soluzione del problema, e cioè quello di avere un KeyContainerName diverso per ogni istanza di utilizzo.

Con questa indicazione sono riuscito a risolvere il problema passando al costruttore del RSACryptoServiceProvider un CspParameters che avesse un KeyContainerName diverso ad ogni utilizzo della funzione nel seguente modo:

CspParameters param = new CspParameters();
param.KeyContainerName = "Decryption.RSACryptoServiceProvider." + Guid.NewGuid().ToString();
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param);

Tags:

.NET

Scompattare un file zip

by Andrea 04 July 2007 12:07

In un progettino che stò sviluppando avevo la necessità di fare l'upload e scompattare un archivio zip. Per fare ciò mi sono appoggiato alla liberia #ziplib che si è dimostrata di una facilità estrema, infatti con poche righe di codice sono riuscito nel mio intento:

/// <summary>
/// Unzip the zip file.
/// </summary>
/// <param name="fileZipPath">The path of file zip.</param>
private void UnZipFile(string fileZipPath)
{
    using (ZipInputStream s = new ZipInputStream(File.OpenRead(fileZipPath)))
    {
        ZipEntry entry;
        while ((entry = s.GetNextEntry()) != null)
        {
            // Prelevo solo il nome del file all'interno dello zip
            string fileName = Path.GetFileName(entry.Name);
            // Combino il path su disco con quello che il file ha all'interno del file zip
            string filePath = Path.Combine(Path.GetDirectoryName(fileZipPath), entry.Name);
            // Se la directory non esiste la creo
            if (!Directory.Exists(Path.GetDirectoryName(filePath)))
                Directory.CreateDirectory(filePath);
 
            if (fileName != String.Empty)
                using (FileStream streamWriter = File.Create(filePath))
                {
                    int size = 2048;
                    byte[] data = new byte[2048];
                    while (true)
                    {
                        size = s.Read(data, 0, data.Length);
                        if (size > 0)
                        {
                            streamWriter.Write(data, 0, size);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
        }
    }
}

Credo (appena avrò tempo) di  approfondire un pò meglio questa libreria perchè mi sembra proprio fatta bene.
Ecco il link alla pagina di downlad.

Technorati tags: , ,

Tags:

.NET