July 2003 Blog Posts

Holiday..., Celebrate!

Basandomi sul principio che "Non si vive di solo .NET" ho deciso di passare i prossimi 11 giorni alle Seychelles a ricaricarmi le batterie (e a scaricare quelle delle macchina fotografica).Portero' qualche libro su .NET?, non ho ancora deciso, ci pensero' un attimo prima di partire...Buone vacanze a tutti, ci riconnettiamo dal giorno 8 Agosto. Sayonara...:-)

posted @ Monday, July 28, 2003 12:13 AM | Feedback (2)

VB.NET e GetInvocationList

Oggi nel newsgroup Microsoft su VB.NET e' stato chiesto come scorrere l'elenco dei subscribers ad un determinato evento. La risposta era alquanto semplice: Utilizzare la GetInvocationList() esposta dalla classe Delegate.L'equivalente in C# era qualcosa tipo: public class Clock{public delegate void TickDelegate();public event TickDelegate Tick;public void DoTest(){foreach(System.Delegate d in Tick.GetInvocationList()){ d.DynamicInvoke(null);}}L'equivalente in VB.NET: Public Class Clock Public Event Tick() Public Sub DoClick() For Each del As [Delegate] In ???  del.DynamicInvoke(Nothing) Next End SubEnd Class Il problema era come recuperare il delegate che VB.NET crea per noi quando creiamo un evento, dopo qualche prova non andata a buon fine (ho provato tutto quello che Reflection mi metteva a disposizione...) ho lanciato...

posted @ Wednesday, July 23, 2003 5:28 PM | Feedback (7)

Eventi e Delegates

Oggi parlando con alcuni VB'ers mi sono reso conto di come il concetto di Delegate non sia cosi' chiaro, infatti si sono un po' meravigliati quando gli ho detto che una classe che consuma un evento non verra' recuperata dal garbage collector fino a quando la classe che genera' l'evento non sara' a sua volta distrutta oppure fino a quando la classe 'consumer' si cancellera' dalla InvocationList della classe fonte dell'evento. (e qui il fumo si alzava...)Probabilmente il tutto deriva dal fatto che la keyword WithEvents (eredita' di VB6) maschera parecchia roba (forse troppa) agli occhi del programmatore VB mentre...

posted @ Monday, July 21, 2003 11:19 PM | Feedback (1)

Una library interessante

Girovagando nella C# community ho trovato questa classe che wrappa un po di chiamate utili a chi ha a che fare quotidianamente con le Windows Forms (ad esempio la FindWindow e la EnumWindows...) Nella stessa pagina viene citata anche la mia classe :-)

posted @ Wednesday, July 16, 2003 10:23 PM | Feedback (1)

A grande richiesta una nuova versione della mia classe per gestire la RS232.

Sono stato sommerso dalle richieste di aiuto e di modifica che alla fine ho dovuto cedere... :-)Mi e' stato da sempre chiesto di implementare la gestione degli eventi (tipo RING,CD,RTS) sopratutto per poter emulare con .NET il famoso evento OnComm che il controllo mscomm32.ocx ha e che, mi sono reso conto solo ora, e' diffusissimo.Non l'avevo implementato inizialmente perche', come sempre dico, ho sviluppato la classe nel lontano 2001 per mia esigenza personale e, lavorando sempre in modalita Master-Slave non ho mai usato gli eventi.La modalita' Async presente nella versione precedente non e' mai stata testata a fondo anche se...

posted @ Wednesday, July 16, 2003 9:14 PM | Feedback (5)

Whidbey video

Dopo averlo scaricato qualche giorno fa mi sono finalmente visto i 12 minuti di presentazione di VB.NET in Whidbey, che dire, i Queen direbbero "I want it all, i want it now... di certo e' che l'Edit & Continue e il nuovo oggetto Printer sono molto interessanti anche se il controllo Sound e le nuove features della Listview non sono per niente male.Speriamo solo non includano anche il VB.NET rapper...

posted @ Thursday, July 10, 2003 1:05 AM | Feedback (0)

Un form all'interno di un form parent

Girando per la rete ho trovato un esempio carino per avere un form contenuto all'interno di un altro form che fa da contenitore senza necessariamente essere MDI (potrebbe benissimo essere una palette di tools) Form f2=new Form2();f2.TopLevel=false;this.Controls.Add(f2);f2.Show(); Alla fine non fa altro che aggiungere un form alla collezione di controlli e questo lo rende automaticamente contenuto all'interno del form di cui fa parte la collezione.Semplice e it works!

posted @ Thursday, July 10, 2003 12:59 AM | Feedback (1)

Non si finisce mai di imparare...

Ho finalmente scoperto come mai le applicazioni VB.NET si portano appresso la fantomatica Microsoft.VisualBasic.dll, infatti analizzando il manifest di un applicazione VB.NET si nota sempre la presenza di .assembly extern Microsoft.VisualBasic{  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:  .ver 7:0:5000:0} Questo e' dovuto al fatto che il codice IL non e' in grado di supportare tutte le funzionalita' messe a disposizione da VB, infatti se si 'boxa' un Int, IL permette di "unboxarlo" esclusivamente a un Int, quindi per fare giochetti tipo  Dim i As Int32 = 1 Dim o As Object = i Dim f As Single =...

posted @ Thursday, July 10, 2003 12:18 AM | Feedback (0)

I want it now!, and i want it faster!

Seduta pleanaria per gli inviati UGI alla sessione dedicata a come scrivere codice managed ottimizzato.In sala c'era parecchia gente quindi il problema e' parecchio, sentito peccato che (opinione personale) lo speaker non fosse proprio all'altezza o forse e' stata la totale assenza di demos a far cadere l'interesse verso un argomento molto interessante.Breve resoconto: Se la vostra applicazione ha dei problemi nel rinfrescare le finestre oppure il cursore e' in perenne fase di WaitCursor allora e' tempo di metterci mano e ottimizzare.Come? ci sono molte alternative quali caching oppure background processing sfruttando i momenti morti della vostra applicazione (vi incuriosisce,...

posted @ Thursday, July 3, 2003 6:05 PM | Feedback (2)

Messenger a go go...

Credo che dopo Internet Explorer, Messenger sia il programma piu' usato di TechEd :-)In attesa della prossima sessione (ultima...) su Writing Faster Managed Code, ho aggiornato le foto che, come al solito, trovate quiCU L8R...  

posted @ Thursday, July 3, 2003 3:56 PM | Feedback (0)

No Touch Deployment Tips & Tricks

Direttamente da Redmond Jamie Cool ha mostrato come e' possibile eseguire della applicazioni Windows Forms senza dovere necessariamente installare l'applicazione sulla macchina locale (ma noi di UGI questo gia' lo sapevamo...) ovviamente gran parte della sessione e' stata dedicata all'inevitabile "problema" (o fortuna...) che questo tipo di tecnica implica, ovvero il fatto che in realta' l'applicazione gira all'interno di una propria sandbox con le proprie restrizioni e che quindi alcune features sono giustamente bloccate.E' stato fatto anche un accenno ai problemi di performances che queste applicazioni possono avere, ad esempio a causa del probing della varie assemblies (che se fatto...

posted @ Thursday, July 3, 2003 1:07 PM | Feedback (1)

Data access best practices with Compact Framework

Mi aspettavo una sessione dedicata all'accesso ai dati mentre in realtà si è trattata di una sessione in cui si è parlato di come ottimizzare le applicazioni per CF tenendo conto anche i casi particolari in cui si è connessi in maniera remota ad una fonte dati (DB o WebService)Per quanto riguarda le applicazioni in generale, sul CF bisogna tenere presente il fenomeno del Code Pitching ovvero il fatto che quando la memoria scarseggia il framework comincia a scaricare le parti di codice 'jittate' per far spazio alla nuova richiesta e questo può provocare un rallentamento generale della nostra applicazione,...

posted @ Thursday, July 3, 2003 11:55 AM | Feedback (0)

Compact Framework Phone Features

Essendo ormai stato rinominato Corrado "Smartphone" non potevo perdermi questa sessione dove si è parlato delle features mobile del CF e in particolar modo di Pocket PC Phone Edition e, ovviamente, SmartPhone. Lo sviluppo su PPC Phone Edition è massivamente basato su PInvoke, sono infatti disponibili nel Telephony toolkit API delle dll (Phone.dll,CellCore.dll e SMS.dll) che esportano delle funzioni per utilizzare le varie funzioni Phone tipo chiamare,accedere alla SIM card e gestire ricezione e invio di SMS. L'utilizzo non è complesso ma è comunque a basso livello e il consiglio è quello di wrappare le chiamate in una classe per...

posted @ Thursday, July 3, 2003 11:54 AM | Feedback (1)

Aggiornamento...

Ok, l'ultimo blog non e' formattato perfettamente ma bloggando 'live' certe cose possono accadere (cosi' come l'errore nel titolo...)Ho aggiunto un paio di foto prese dalla sessione di Christian Wagel se volete dare un occhiata cliccate qui A domani... ;-)

posted @ Wednesday, July 2, 2003 7:49 PM | Feedback (0)

Svilupp di applicazioni internazionali

Mentre la maggior parte dei bloggers è impegnata nella cella #7 (WebServices internal) sono alla sessione di Christian Wagel sulla realizzazione di applicazioni Internazionali.Non c'è molta gente e lo speaker (con uno spiccato accentro Tedesco) non è di certo un fulmine.Innazitutto viene fatta una differenziazione tra Globalizzazione (il fatto che l'applicazione funzioni correttamente su versioni di S.O diverse da quella dove il software è stato installato) e Localizzazione (il fatto che la GUI segua la lingua del S.O dove sta girando)Si inizia parlando di globalizzazione analizzando le classi di System.Globalization (tipo DateTimeInfo e, ovviamente CultureInfo) e puntualizzando tra CurrentCulture e...

posted @ Wednesday, July 2, 2003 7:35 PM | Feedback (0)

Datemi una connessione WI-Fi, please...

Dopo essere stato al booth "Ask the Expert" tra speakers e "Software Legends" (che emozione!) eccomi qui a fare l'hacker con i PC di TechEd perche' la connessione wireless e', a dir poco, scandalosa...Comunque (buon hacker non mente :-) ) sono riuscito ad aggiornare le foto quindi se volete 'vedere' live cosa succede cliccate quiBlog recording, starts in 10 minutes...

posted @ Wednesday, July 2, 2003 5:49 PM | Feedback (0)

C# best practices

Forse il titolo della sessione non e' stato azzeccato al 100% visto che, a parte qualche dettaglio, non ho visto nulla che non si potesse fare in VB.NET.La prima parte della sessione e' stata completamente dedicata alle best practices applicate all'OOP, si e' parlato di come utilizzare correttamente i delegates (tenendo sopratutto conto di eventuali eccezioni generate dai consumer dell'evento) di intefacce e classi astratte (quando usare una o l'altra) e di come disegnare correttamente un interfaccia (e' palese che un interfaccia con 30 metodi non e' ben disegnata)La seconda parte e' stata dedicata ad argomenti diversi tipo Threading (avete...

posted @ Wednesday, July 2, 2003 1:13 PM | Feedback (0)

CodeDOM: la parte oscura del framework

Credo che assieme a Remoting, CodeDOM rappresenti una parte oscura del framework (almeno per me) anche se, senza saperlo, Visual Studio .NET ne fa grosso uso.Se vi siete mai chiesti come ASP.NET è in grado di compilare il vostro file .cs oppure come viene generata la proxy class di un WebService, CodeDOM è la risposta.CodeDOM è una rappresentazione in memoria di codice sorgente indipendente dal linguaggio e, un volta disponibile questa rappresentazione, associandovi l'opportuno provider è possibile generare/compilare codice per quel determinato tipo di linguaggio.Supponiamo vi venga chiesto di creare un wizard che possa poi generare degli skeleton in C#,VB.NET,J#,VC++...

posted @ Wednesday, July 2, 2003 11:49 AM | Feedback (0)

DataSet "The Show"

Prima sessione di oggi, nella cella frigorifera #7... :-)Jackie Goldstein ha mostrato le nuove features di ADO.NET iniziando spiegando i gli oggetti principali (SQLConnection,SQLCommand...) per poi addentrarsi nel magico mondo del DataAdapter spiegando in dettaglio come usare InsertCommand/DeleteCommand... non limitandosi al semplice codice generato da CommandBuilder.Si e' proseguito mostrando come e' possibile filtrare/ordinare i dati attraverso l'uso di DataView applicati a dati provenienti da piu' tabelle.E' stato fatto notare come SQLServer offre la possibilita' di esportare i dati in formato XML utilizzando For XML Auto percui e' possibile in risposta ad una query SQL ottenere un file XML corredato del...

posted @ Wednesday, July 2, 2003 9:59 AM | Feedback (0)

KeyNote ovvero "Parola d'ordine: WebServices"

Pur essendo stata la prima sessione della giornata vi aggiorno in ritardo causa mancanza di tempo (che giornate stressanti! :-) ).Qualche migliaio di developers erano seduti questa mattina nella megasala dove Jean-Philippe Courtois (presidente EMEA Microsoft) ha ufficialmente aperto TechEd 2003 e ha premiato i primi 3 classificati al concorso ImagineCup, al primo classificato (uno studente del Nebraska) va il premio di 25000$ e la soddisfazione di avere vinto grazie ad un WebService che prende le ordinazioni dai tavoli di un ristorante e le 'traduce' per il cuoco che, solitamente, non e' dello stesso stato (e spesso manco parla la stessa...

posted @ Tuesday, July 1, 2003 6:57 PM | Feedback (0)

Windows Forms: Tips & Tricks

Dopo 4 ore di "Ask the Expert" sono finalmente riuscito a seguire la mia prima sessione tecnica, il tutto si e' tenuto nella cella frigorifera #6 (-20°c)Si e' iniziato parlando della proprieta' OwnerDraw dei controlli applicati ad una listview proseguendo con alcuni trick relativi all'uso del DataBinding (ad esempio come utilizzarlo per il classico giochino dove la selezione di una checkbox fa apparire/sparire alcuni controlli)es: Panel.DataBindings.Add("Visible",checkBox1,"checked")Altro esempio carino e' stata la dimostrazione di come sincronizzare lo scroll di 2 Datagrid sfruttando la possibilita' di creare dei controlli ad-hoc che ereditano da controlli pre-esistenti (la Datagrid in questo caso).Dopo un applicazione...

posted @ Tuesday, July 1, 2003 6:39 PM | Feedback (2)

Ask the Expert: Meeting con Scott Currie

Per chi non lo sapesse Scott e' il PM di Visual C++...E' incredibile notare la disponibilita' con cui una persona del suo calibro ascolta le nostre domande e 'a fiume' risponde in modo dettagliato e preciso.Tra le vagonate di domande (alcune sotto NDA) gli ho chiesto se pensava che C# potesse diventare il linguaggio leader della piattaforma offuscando un po' la fama di VC++, mi ha risposto dicendo che nella prossima release (Whidbey) ci saranno delle nuove features che faranno si' che nessun sviluppatore VC++ sentira' il bisogno (o la voglia) di utilizzare C#.Da quello che ho capito nell prossima release...

posted @ Tuesday, July 1, 2003 4:03 PM | Feedback (1)