Archives / 2003 / May
  • Entity: why do some people who write IT books re-invent definitions?

    Paul Gielens blogged about a possible misunderstanding about the term 'Entity'. Reading his text it appears as if the general term 'Entity' has changed recently. The reason: Eric Evans created a different definition. Let me be blunt here: if a definition of a general group of knowledge is known for years by a given term, do not use that term to extend that definition so it will cause misinterpretations between people thinking they are talking about the same definition. The term here is 'Entity', and it is defined for a long time, firstly by Peter Chen if I'm correctly informed, in his article 'The Entity-Relationship Model', ACM Transactions on Database Systems vol.1 nr.1 (March 1976), and his book 'The Entity-Relationship Approach to Logical Database Design' - Wellesley, Mass.: Q.E.D. Information Sciences, 1977.

    Chen's work is about a model to design databases, the Entity-Relationship model, in short the E/R model. As you can see, this model is rather old, more than 25 years, and is replaced later by the work of prof. G.M. Nijssen and prof. T.A. Halpin (Conceptional Schema and Relational Database Design, 1989) by their work on the NIAM modelling methodology, later renamed to ORM and extended by prof. T.A. Halpin. (read more about ORM here)

  • A quick update on LLBLGen Pro

    You might have heared about the DAL generator I released last year, LLBLGen, which as a surprise to me, became a worldwide success (over 25,000 downloads). I'm currently busy developing its big brother LLBLGen Pro, which should be released later this summer. As a quick update on what this successor is capable of, some lines of example code which uses some generated code (entities, collections) that is produced with an alpha version of LLBLGen Pro.

    It loads a collection of entity objects (that's right, normal entity classes) of the type OrderDetail, from the Northwind database, which contain references to the product with ID '24', binds it using databinding to a datagrid in a form, which allows full editing of the OrderDetail objects, and after that, all changed objects are saved using an embedded transaction to the persistent storage using a single line of code. I think it's pretty neat :) Of course this is one of the many ways to retrieve / construct entity objects using the O/R mapper code generated by LLBLGen Pro. More updates later on.

  • My wish-list for the next Visual Studio.NET release

    I'm now working for a week or so with VS.NET 2003 and it has some neat features that version 2002 didn't have which are, well, neat to have, but also started me thinking why they are implemented the way they are and why there is so much ground left untouched. Below I've formulated some wishes for the next version of Visual Studio.NET (2004?), and as with every wish-list, I hope the wishes come true, or better: what's wished for is a bad example of a short sighted vision of how reality should be and the next version of VS.NET (2004?) will prove that :)

  • Firebird .NET data provider v1.0 released

    Yesterday, the Firebird team released their .NET provider for the Open Source database Firebird (based on the Interbase code). The provider is also open source and of course free. I haven't played with the Firebird database recently but according to the features Interbase had and looking at what the Firebird team added / updated in the source code, it is a massive alternative for those developers who need a true RDBMS with ACID compliance throughout the system and full stored procedure and trigger support but can't afford SqlServer (or alternatives which cost even more money).

  • Quick note from the HN-rehab center

    A quick note on the Hungarian Notation/Coding blog I wrote this morning and which was food for some good replies from Patrick and Chad. I now am a full day clean, that is, no Hungarian Notated member variable or parameter left my fingertips. The arguments I had this morning, about the naming problems of some parameters I had and the prefixing of private member variables, were not that hard to overcome.

  • Farewell, beloved Hungarian Coding.

    Today, is a memorable day for me. This morning I had to bite the bullet: get rid of my Hungarian Coding style in C#. Not because I hate Hungarian Coding, on the contrary: I love it, but because I have to. The reason for this is that when you want to sell a library which targets .NET, you simply can't feed your customers a library with interfaces which use input parameters like cmdCommandToExecute or efEntityField. I did convince myself when I started this project, it was my code and I should decide how the interfaces looked like. But this is just plain stubbornness. A customer doesn't give a you-know-what about the zillion + 1 reasons you can bring to the table why you had to make the interfaces of the classes inconsistent with the rest of the classes used in the application (f.e. the .NET classes).

  • Concurrency Control Methods. Is there a silver bullet?

    Which concurrency control method do you use most of the time? "First Save Wins" ? (optimistic locking in ADO.NET) "Last Save Wins" ? (Overwrite the row, no matter what). Ever wondered what the difference between the two is when it comes to efficiency? Most people haven't and think "Last Save Wins" is BadTM and "First Save Wins" is GoodTM. But both make at least one person loose his work to preserve the work of another person. I read a thread today in the microsoft.public.dotnet.framework.adonet newsgroup where one person asked how he could make the SQL generator in Visual Studio.NET to use the Last Save Wins method and another person stepped in and bashed him for using a not very smart concurrency control method like Last Save Wins. But does it matter which one you pick when both are as inefficient as you can possibly make them to be (i.e. someone looses work) ?

  • Microsoft gets Database Performance crown back!

    On May 20, HP regained the TPC-C performance crown for non-clustered (you know, "Big Iron") , using Microsoft Windows server 2003 Datacenter Edition and SqlServer 2000 Enterprise Edition 64-bit. It almost also nailed the clustered (you know, "Little Iron") record, also HP/Windows/SqlServer, result which was submitted September 2001. A stunning 707,102 transactions per minute were clocked on this beast with 64 Itanium 2 processors.

  • "Framework-Hell"-solution is here: ISV's can upgrade to VS.NET 2003 without pain.

    Yesterday I blogged about a problem ISV's can run into when they are selling .NET class libraries compiled with Visual Studio.NET 2003 to customers using Visual Studio.NET 2002. Today I've found a solution, which seems to be used by other ISV's already, and which solves the problem which caused me to post my rant yesterday. Below I'll first describe in a few words the exact definition of the problem and then the solution which works without any problem for your customers. After that I'll enlighten a bit the things you have to keep an eye on when implementing this technique.

  • "Framework-Hell"-solution is here: ISV's can upgrade to VS.NET 2003 without pain.

    Yesterday I blogged about a problem ISV's can run into when they are selling .NET class libraries compiled with Visual Studio.NET 2003 to customers using Visual Studio.NET 2002. Today I've found a solution, which seems to be used by other ISV's already, and which solves the problem which caused me to post my rant yesterday. Below I'll first describe in a few words the exact definition of the problem and then the solution which works without any problem for your customers. After that I'll enlighten a bit the things you have to keep an eye on when implementing this technique.

  • Beware of the UnUnloadable IL!

    Today an interesting thread was started on the DOT-NET CLR mailing list. The topic: a possible memory leak can occur when you are not careful with XSL transformations or compiled regular expressions. The reason for these memory leaks is that the CLR is generating IL behind the scenes and generated IL cannot be unloaded from an AppDomain unless the complete AppDomain is unloaded. Garbage Collection (GC) is not fixing this. The XSL transformations which will cause trouble are the ones which have to deal with XSL stylesheets with JScript embedded. The JScript is compiled into IL and as said, this will never be unloaded.

  • VS.NET 2003 isn't all that bad (sort of)

    A few days ago, I blogged about a serious flaw in the ASP.NET editor in Visual Studio.NET 2003. Now, don't get me wrong, I really find it stunning this Bad BoyTM is still around, and according to the follow ups to Mike Moore's posting in the usenet thread about this issue, more people are seriously offended by this lack of customer support, but... Visual Studio.NET 2003 isn't all bad. In fact, some great enhancements are finally available.

  • Serious ASP.NET Editor flaw lives on in VS.NET 2003

    Several (ok, a lot) of people have been bitten by the "I-format-your-HTML-code-as-I-please"-bug in the ASP.NET HTML editor in Visual Studio.NET v2002. To recap what the bug does to you: you are working in HTML view on a page. You have to do this because f.e. you are working on a repeater template. Because you are a good developer, you create a readable layout of your code, so also for this HTML. When you come to the point where you have to add a control to your ASP.NET page, you have to switch over to design view, drag it from the toolbox onto the page, switch back to HTML view to add f.e. templates or additional properties or even position it correctly. When you switch back from design view to HTML view, your code sometimes (not allways) gets reformatted randomly, even if you switch off any auto-formatting feature in Visual Studio.NET. Hitting control-z undo's this formatting, but it gets annoying over time.

  • The 'benchmark' code

    I've decided to post the code I used to test what's faster: dynamic queries or stored procedures with optional parameters. The code can be found here. Let me add a disclaimer here, that I'm not pretending to have done scientific research or other scientific benchmarking. All I've done is wrote a couple of routines which represent for me a real life situation using either one of the techniques. Of course the routines can be sped up and recoded in other forms, and perhaps I've made a mistake in the code which results in the slow speed of either one of the used techniques. Feel free to comment :)

  • Relationships

    No, this is not a piece of text about a broken/just started relationship between two people :). 'Relationships' should be read in a geeky context: relationships between attributes and entities in databases / object hierarchies, you know, the kind of relationships a computer-savvy person feels comfy with.

    On April 18, Edgar (Ted) Codd died. This man is probably not the man you remember as the 'hero' you adored and who convinced you computers were your future, but it is the man who invented the concept of 'relationships' in our world, the software developers world, which resulted in the concept of Relational Databases. Now, as we say in The Netherlands, "Over de doden niets dan goeds", which means something like "Say only good things about the people who died", I shouldn't be saying this but in the last couple of days I'm seriously starting to doubt the quality of the form Codd defined the concept of a relational database as we know today. I think it is seriously flawed, and when I say seriously, I mean: really seriously, as much that we should start using other models today, instead of keeping this flawed model around any longer.

  • Borland's prices are too high?

    S.B Chatterjee wrote: "Borland has announced their C#/.NET Builder tools along with the prices. $69 for a personal edition and $999 for a professional version. That's fourteen times as much! jeez... I don't see developers flocking for that one. I'll stick with my VS.NET (under MSDN Universal, of course)."

  • Hotmail: 48 spammails per day, per mailbox

    According to, Microsoft blocks per day 2.4 billion (that's 2,400,000,000) email messages targeting Hotmail subscriber in-boxes. If you take into account that Hotmail has roughly 50,000,000 active users, that means that per mailbox, 48 (2,400,000,000 / 50,000,000) spam-messages were on their way to enlighten the eagerly awaiting mailbox-owner that those days of a whimpy penis and denty tits can be over for good.

  • It's not all bizznizz apps

    Every day I check the image of the day over at, which is the place for Joe Geek and Family to show off their sunday-afternoon graphics software. It's amazing what people come up with from time to time, and today, a programmer from Belgium send in his 3D-terrain renderer/generator using OpenGL and C#. It's a great way showing off what you can do with C# and .NET besides the always charming n-tier / remoting / webserices / webapplication-oriented software. It utilizes the great work of the csgl guys who, as you all know, wrote a library for C# to work with OpenGL. As a former OpenGL junkie myself, I always get a "those were the days" feeling, while reading about graphics software. ;)

  • Speaking of patterns...

    A lot of patterns do share a 'trick' that can be hard to grasp for new OO-developers. It's the trick which is made possible by polymorphism: you define a virtual method in a base class B, override it in a derived class D, and suddenly code in class B will call code in class D. To me this sounded confusing at first (hey, I'm raised with Kernighan-Ritchie C, the non-ANSI version, bite me :P). However it's a very neat way to 'plug in' code later (in a derived class) while defining the flow of the code now (in the abstract / base class).

  • A pattern in patterned confusion.

    Chad Osgood talked this morning about a semi-rant from Bruce Eckel about patterns and the Gang of Four (GoF) book in particular. Reading the snippet from Bruce, I do not see why he (Bruce) critisizes the GoF book that much. As an example he shows the diagrams of the strategy pattern and the state pattern. They look familiar indeed, but they are semantically different, and that's why they form different patterns. When swapping algorithms you use the strategy pattern. When swapping state objects you use the state pattern. A different world altogether. The UML-ish diagrams may look familiar, but they're not.

  • I'm alive!

    These days, it's hard to claim you're truely a geek when you don't have your own blog. And, if I might add, the blog has to be placed on a blogspace which holds some value. I'm very happy that I can conquer those suits at upcoming birthday parties again, when they start ventilating their coolness because they 'blog': I now too have my blog, and on one of the major blogspaces!