Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

maggio 2005 Blog Posts

QueryDOM and SQL Server 2005 NS Rules APIs

Con grande fretta e grande gioia segnalo il fatto che alla base di queste due API sta la stessa idea, un object model per le query: QueryDOM di Gianluca Carucci (vedi il namespace DevArchitect.Data.QueryDOM) SQL Server 2005 (CTP) Notification Services Rules di Microsoft (vedi il namespace Microsoft.SqlServer.NotificationServices.Rules) Grande Gianluca! :-)

posted @ martedì 31 maggio 2005 10:59 | Feedback (13) | Filed Under [ Voi ]

Divertimento con il Reflector e un firing method

Se il seguente snippet: delegate void FooFiredEvent(); class Foo{      public event FooFiredEvent FooFired;            public void RaiseFooFired()      {            if (FooFired != null)            {                  FooFired();            }      }} lo compiliamo: csc foo.cs poi lo disassembliamo : ildasm foo.exe /out=bar.il e nel file disassemblato, bar.il, inseriamo la riga in rosso: .event FooFiredEvent FooFired{      .addon instance void Foo::add_FooFired(class FooFiredEvent)      .removeon instance void Foo::remove_FooFired(class FooFiredEvent)      .fire instance void Foo::RaiseFooFired()} dopodiché lo riassembliamo: ilasm /exe bar.il e apriamo il file bar.exe col Reflector impostato per C#, avremo una sorpresa: nel codice disassemblato dell'evento FooFired, è apparsa una sezione, raise, che non c'è ancora nel linguaggio C# :-) public event FooFiredEvent FooFired{      [MethodImpl(MethodImplOptions.Synchronized)] add      {            this.FooFired...

posted @ lunedì 23 maggio 2005 20:47 | Feedback (16) | Filed Under [ Carillon .NET ]

Specifying C# concepts in a mathematical precise manner

Un davvero splendido corso di "Managed Computation" tenuto nella primavera dell'anno scorso al Politecnico federale di Zurigo da Prof. Robert Stärk per gli studenti iscritti al programma di MSc in Computer Science, è scaricabile da questa pagina. Nelle più di 500 slide del corso, le specifiche di C# vengono modellate come macchine astratte (ASM). Una gioia leggerlo, abbiate solo pazienza!

posted @ sabato 21 maggio 2005 19:15 | Feedback (13) | Filed Under [ Carillon .NET Varie ]

Explicitly calling event accessors

Si sa che i metodi corrispondenti agli event accessor devono seguire un pattern di denominazione (vedi CLS Rule 33 e ECMA-335, Partition I, 10.4). Per esempio, l'accessore add deve seguire il pattern: void add_<EventName> (<DelegateType> handler) Luca, in questo interessante post, è arrivato ad aver bisogno di richiamare questi event accessor. Provando col compilatore C#, si ottiene l'errore CS0571 ("cannot explicitly call operator or accessor"). Vediamo se, per il seguente snippet, il compilatore C# genera per i metodi add_FooFired e AddFooFired lo stesso codice IL: class Foo{      private FooFiredEvent mFooFired;      public event FooFiredEvent FooFired      {            add            {                  mFooFired += value;            }            remove            {                 ...

posted @ venerdì 20 maggio 2005 15:50 | Feedback (8) | Filed Under [ Carillon .NET ]

Launch for user

Non sempre quando vi appare una finestra "Just-In-Time Debugging", nel messaggio "An exception 'MyNamespace.MyException' has occurred in MyApplication.exe", l'eccezione debba essere una exception. Può capitare di incontrare al posto di 'MyNamespace.MyException', 'Launch for user' :-) Un esempio, in questo snippet: class Foo{  static void Main()  {    System.Diagnostics.Debugger.Break();  }} Secondo me, crea un po' di confusione il messaggio.

posted @ mercoledì 4 maggio 2005 15:59 | Feedback (102) | Filed Under [ Carillon .NET Bugs? ]

Quiz Sharp #50

Quale tra i seguenti due metodi ricorsivi riuscirà a fare più iterazioni e perché? void Foo(){  System.Reflection.MethodBase.GetCurrentMethod().Invoke(this, null);}void Bar(){  Bar();} A. Foo; B. Bar; C. per Foo non otteniamo StackOverflowException.

posted @ mercoledì 4 maggio 2005 13:43 | Feedback (9) | Filed Under [ Quiz Sharp ]

Il segreto delle mie password

E' semplice: approfito della somiglianza tra la mia lingua madre (il rumeno) e la vostra e creo nuove parole/frasi che non esistono in nessuna delle due lingue ma che mantengano ancora la similitudine. Così me la ricordo facilmente e allo stesso tempo ho la sicurezza che non si trova in nessun dizionario - in più, è anche molto divertente :-) Perché ve lo dico? Perché così potreste fare anche voi con le vostre meravigliose combinazioni dialetto-italiano. A proposito di dialetti: ascolta qualcuno la sfida in dialetto domenica sera su Radio24?

posted @ lunedì 2 maggio 2005 23:40 | Feedback (32) | Filed Under [ Varie ]

Quiz Sharp #49

I seguenti due snippet si compilano con le stesse opzioni, però il codice IL generato per i due foreach, come struttura, è ben diverso: using System;using System.Management;class Foo{  static void Main()  {    foreach (ManagementObject device in new ManagementClass("Win32_LogicalDisk").GetInstances())    {      Console.WriteLine(device["deviceid"]);    }  }} using System;using System.Xml;using System.Xml.Schema;class Foo{  static void Main()  {    string xsd = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) +      "\\Microsoft Visual Studio .NET 2003\\Common7\\Packages\\schemas\\xml\\asp.xsd";    XmlTextReader reader = new XmlTextReader(xsd);    foreach(XmlSchemaObject schemaObj in XmlSchema.Read(reader, null).Items)    {      Console.WriteLine(schemaObj.LineNumber);    }    reader.Close();  }} Offrite una spiegazione.

posted @ lunedì 2 maggio 2005 17:34 | Feedback (9) | Filed Under [ Quiz Sharp ]

Powered by:
Powered By Subtext Powered By ASP.NET