Archives / 2004
  • Merry Christmas & Happy New Year!

    I would like to wish everybody a very Merry Christmas and a Happy New Year, or in other words: Happy Holidays!

    Here a small christmas message from us, with the Pier of Scheveningen, and part of the beach, that's 300meters from my house.

  • VS.NET 2003 C# code-editor tip of the day

    Three tips actually. All color coding related. Open VS.NET, click Tools - Options and then Environment - Fonts and Colors

    1. Under display items, browse down to Operator. Select 'Maroon' for foreground color and check 'Bold'.
    2. Under display items, browse down to String. Select 'Dark Blue' for foreground color.
    3. Under display items, browse down to Xml Doc Comment. Select 'Custom' for background color and select a very light grey, like RGB 245, 245, 245. Do this also for Xml Tag
    Hit OK. Your code will now be more readable, routines are more recognizable, operators are more recognizable.

  • SqlServer 2005 and VS.NET 2005 delayed


    Microsoft has decided to delay the release of SQL Server 2005 from the first half of 2005 until later in the summer of that year. A Community Technical Preview will be released as an interim beta with possibly more to come before the final beta and the product’s eventual release.

  • Solving the Data Access problem: to O/R map or not To O/R map

    On the forums (the architecture section), a person asked in the 'Your favorite O/R mapper' thread, why someone would use a 3rd party component for data-access and why would that be an O/R mapper and if so, which one? I've tried to answer these questions in that thread, but because I think it can be of benefit for more people than just the readers of that long forum thread, I've reworked the text into an article you'll find below. Keep in mind I've tried to keep things simple to understand, so perhaps I've left out a detail here and there, however I don't think these details will matter much to the overall conclusions and descriptions. As I've addressed a couple of questions, which I think are related to each other, I've re-written the forum response as a Q & A.

  • Major upgrade of LLBLGen Pro released!

    After 3 months of hard work, today, a major upgrade of one of the leading O/R mappers for .NET, LLBLGen Pro, has been released! . A large amount of new features are added to the new runtime libraries and templates, among them: MS Access 2000/XP/2003 support, prefetch paths, paging in entity collections and lists, aggregate function support and sql expression support and much more. Below is the full list of new things.

    This upgrade is of course free for our customers .

  • Killing a Yukon myth

    About once a week or so I get the question what the strategy will be with our O/R mapper LLBLGen Pro in relation with Yukon (SqlServer 2005): will the O/R mapping code run totally inside the database server or will it be running outside the database, like with SqlServer 2000. This is actually a question that I can imagine is puzzling a lot of developers, also the ones not using any O/R mapper at all: will we be able to run the DAL inside Yukon and with that benefit from the close connections between DAL code and database server, and how do we call this DAL?

  • Assembly '04 ends

    One of the most famous demo parties ever, Assembly, has just finished. I just saw the winning 64KByte (that's 64*1024 bytes, people) intro and it's simply breathtaking. Another one worth watching is the 2nd placed demo competition winner of Andromeda Software Development: really a kick-ass demo and to me far superior to the 1st place winner.

  • Windows XP SP2 pulled at last moment

    The Inquirer reports (and C|Net as well, so it's not an Inq. crackpot story) that Microsoft has pulled Service pack 2 for Windows XP at the last moment. It was scheduled to RTM last night and to be made available for MSDN subscribers today. . But I'm sure they have their reasons. I however hope that MS realizes that their patching strategy of releasing one big pile of fixes every 2 years is not working: 1 glitch in 1 patch inside that SP2 can delay the complete set of fixes. With smaller set of fixes released more often, this wouldn't have been the case. But I'm sure they'll address this in the (near) future.

  • Ok the spammers win: no more comments...

    This is the second day in a row where I have to delete a massive amount of comments full with just URLs to obscure sex sites and other crap , so enough is enough: for now comments are disabled. Personally I don't like this situation of not offering the ability for the reader to leave a comment, but at the moment there is no other option.

    Until .text is updated with a better system for comments (i.e.: not being anonymous), I'll leave comments off. Sorry for that.

  • VS.NET 2005 Express: find / replace accept only single line strings

    I filed it here, so you can vote on it . Early in the whidbey alpha program proposed screenshots were posted of the new search/replace dialogs. I then mentioned it would be great (because I ran into this limitation a couple of times) if the find/replace dialog would accept multi-line search and replace strings, so you could search for 2 lines for example and / or replace with a multi-line string. A lot of people in the whidbey alpha group agreed.

  • VS.NET 2005: dialogs will not be resizable :(

    I filed a suggestion last week about the fact that a lot of the VS.NET 2005 dialogs are fixed size and often (read: always) too small to show all the content they contain and that these dialogs should be made resizable.

    Here's the response I got:
    Thanks for the suggestion. This is a know limitation of our current architecture, and one of the first things I want to tackle in the next version.

  • Tech-ed 2004 impressions.

    Tech-ed 2004 is my first Tech-ed / Microsoft conference ever, I didn't know what to expect however it turned out to be really cool. It's Thursday evening now, just before the party starts. Yesterday I hosted the O/R mapper BoF session and it went really well. At first I had to warm the audience up a little, most people were waiting for others to answer the questions. What surprised me was that so little people had actually worked with an O/R mapper, about 15% or so of the audience of roughly 50-60 people. The number one issue most people seemed to have was what are the advantages of an O/R mapper over the dataset approach. Related to that was the discussion about which situations are best for an O/R mapper and which situations are probably better handled with a more set based approach. The session progressed really well after the slow start (which I filled with a short lecture about O/R mapping in general) and it turned out there wasn't enough time to handle all the questions people had. A session worth repeating!

    Currently I'm typing this on my laptop in one of the wireless work areas on Tech-ed, and it's also my first experience with wireless networking, which was kind of a struggle at first, due to me not having configurated my VPN settings correctly, ah well ;)

    The network is very good, a little slow sometimes, but that's fine. At least there aren't any situations like we had in the old days on demoparties where your computer suddenly switched off because some person pulled the power plug out of the socket, forgetting that his powersocket block was powering a whole set of computers next to him. :).

    The sessions are nice and there is a truckload of different material to choose from. They graded the sessions with numbers so you can see if a session is at the level you expect it to be (so you don't end up in a session where they try to explain what an object is when you expect some lowlevel CLR hacking info and vice versa). Not always are these levels matching the real session level but that's ok. Overall there is always something to learn.

    In the MVP lounge I met Thomas Tomiczek of EntityBroker and we had some nice discussions about O/R mapping, C# and .NET. It was great to meet him. I also ran into Lorenzo Barbieri, a fellow blogger, great to see the faces behind the names you see and discuss with every day :)

    Ok, I'm a little exhausted now so I'll end this little Tech-ed impression by showing a picture of the main hall where we have our lunch. :)

    lunch hall

  • LLBLGen Pro v1.0.2004.1 released!

    After 3 months of development, we finally released a new LLBLGen Pro version, v1.0.2004.1! This update was focussed on upgrading the GUI with various new features like creation of relations and custom properties (name-value pairs, usable to generate gui elements at runtime for example), updating our database provider model to make sure all logic and gui elements is located in the driver assemblies, adding various small enhancements under the hood and add support for Oracle 10g and Firebird 1.x/Interbase 6.0.

  • VC++ New DLL project humor

    I started a little C++ Dll test project this morning and a good start for that is to fire up VS.NET 2003, create a new Win32 project and specify that it is a DLL.

    VS.NET creates an initial .cpp file for you with some plumbing code. Here's the code it generated, no editing has been done on my part:

    // TestLibrary.cpp : Defines the entry point for the DLL application.
    #include "stdafx.h"
    #include "TestLibrary.h"
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved)
    	switch (ul_reason_for_call)
        return TRUE;
    // This is an example of an exported variable
    TESTLIBRARY_API int nTestLibrary=0;
    // This is an example of an exported function.
    TESTLIBRARY_API int fnTestLibrary(void)
    	return 42;
    // This is the constructor of a class that has been exported.
    // see TestLibrary.h for the class definition
    Now, take a good look at function 'fnTestLibrary'. . It's always good to see there are still developers with a good sense of humor around

  • .NET Tool/Control vendors/creators: new directory site:!

    A good friend of mine, Scott Wallace, has created a new .NET tool/control directory site:! If you are a tool / control vendor or a freeware/open source tool/control programmer, feel free to add your tool/control to the directory. The site is free, doesn't sell the controls / tools it lists nor is it affiliated with a tool/control vendor.

  • Now, for the people with an XBox...

    ... have you seen the Gran Turismo 4 trailer already? If not, check it out here. As a PS2 and GT3 owner I already knew what kind of quality the name 'Gran Turismo' stands for, but after seeing this trailer... I'm beyond words... Unbelievable, how realistic it looks and acts. Can't wait!

  • Really complex databinding: ITypedList with weakly typed collections

    I've finally managed to finish an article I wanted to write for a long time: Really complex databinding: ITypedList with weakly typed collections. The article describes in full how one of the most complex interfaces of .NET, ITypedList can be used to provide information to controls like the DataGrid control so complex databinding can be controlled by the developer: which property to hide, which property has to be set as read only because of the state of an object, which inner structure has to be exposed as a property etc. etc.. The example used in this article walks the reader through various topics: Custom attributes, ITypedList implementation for hierarchical data and non-hierarchical data and how to hide a property of a class in a databinding scenario. Source code for this example project is provided in C#. With this article I hope to pass on some information I've gathered during the past year working with ITypedList as the documentation on this important interface is pretty limited and a lot of developers will have to implement ITypedList some day.

    For the article, click here.

  • Really complex databinding: ITypedList with weakly typed collections

    When you, as a developer, have written a class library which has to be bound to complex user controls like a datagrid, and you want control over the databinding process, you are confronted with one of the most complex interfaces to implement: ITypedList. I'm not sure if the reason why complex databinding is called complex is because of the complexity of the interface which makes this all possible, ITypedList, but I wouldn't be surprised.

  • Marketing tools in full effect

    In LLBLGen Pro I currently use the release of the Magic Library for several GUI elements like docking windows. As this release was the final release before the library went commercial, no support was given, but that version was free, came with sourcecode, so no complaints here. As I'm adding new GUI functionalities to our O/R mapper, I required a nice tab control which not only looked nice but was more flexible than the .NET tab control. As Magic contains such a tab control, it was the obvious choice.

  • MVP!

    Microsoft made me a C# MVP! . I don't have to add that I'm very very very happy with this title and I hope I won't disappoint as an MVP in the coming year.

  • Do not read just code, learn algorithms.

    Joseph Cooney wonders which sourcecode should be read by a programmer to learn to become a better programmer. I'd say: none. At least, not the code for which you don't have the design documents or algorithm descriptions. A lot of code is very bad and it's pretty useless to just read code. The reason for that is that code is the end phase of programming software. What's way more important is the algorithm or set of algorithms the code has to represent. Only then you can learn something, because you can then see the start (algorithm) and end (code) of a transition every developer has to make a lot of times. Only with the algorithms in your hand you can check if the code you're reading is good code or not: if it doesn't describe / represent the algorithm(s) it has to represent, the code is buggy, bad and should be rewritten. You don't know that if you read sourcecode without the algorithm descriptions.

  • [OT] Chernobyl, our pompei

    Slashdot posted today a link to a photo journal of Chernobyl, made by a Ukrain girl called Elena who went back to the Chernobyl area, 18 years after the nuclear disaster. This is a good example of the true power of the Internet: real journalism, real facts and available to everybody worldwide.

  • Nasty winforms bug

    I've been fighting this bug all day and it annoyes me more with every minute I spend on it. Here's the deal: I have a ListView control and a Textbox control on a winforms form (.NET 1.1). With the Textbox you can edit a field of the object on the current selected row in the ListView. Easy right? I thought so too .

  • The MS - EU ruling

    For all the people who think the EU ruling in the Microsoft case is about Realplayer vs. Windows Media Player: you don't get it.

    It's not about some crappy player vs. some other crappy player program. It's about the difference between integrating a program into an OS and shipping a program with an OS. In both occasions the user will not see the difference, as in both occasions the program is in the start menu. The difference is in the fact that the real (pun intended) customers of Windows (the OEM's) should be able to decide which package of extra software they ship with the OS. They can in the situation where the programs are not integrated with the OS. They can't when the programs are part of the OS.

  • VS.NET Service packs and why they're not here

    Dan Fernandez blogs about the Whidbey release date slip and VS.NET service packs. An understandable article and I thank him for giving some insights in the why-o-why's. He also talks about service packs and why this is a problem. He gives some reasons why service packs for VS.NET aren't released yet. Let me warn you first: reading the reasons may cause you to fall of your chair so grab your desk or other strong, solid piece of material to avoid you getting hurt. Please acknowledge that Dan is most likely not the origin of these statements so a "Don't kill the messenger" is appropriate.

  • O/R mappers and concurrency control

    Paul Wilson and Alex Thissen both blog about concurrency control related to O/R mappers. Let me start by pointing you to an article about concurrency methods I wrote some time ago: Concurrency Control Methods: is there a silver bullet?. I don't believe in low level concurrency methods, as they give you the false sense of 'it has been taken care of', while they just don't do that: they still cause loss of work.

  • BSD2 license violation solved

    CodeAse has changed the documentation and application they based on my code so it now shows the right copyright clause as stated in the BSD2 license which was shipped with the original LLBLGen 1.x sourcecode they based their product on. The earlier reported license violation (and thus code theft) is hereby solved.

  • Code theft: Codease uses my LLBLGen 1.x sourcecode as if it is theirs!

    This morning I found out that CodeAse, sells a tool, CodeAse 2.0, which is just LLBLGen 1.x but with different screencolors. LLBLGen 1.x is BSD licensed, but that doesn't mean you can simply rebadge it and sell it as if you wrote it! The BSD license clearly states you have to mention the original author of the work you use in your software in the About box and documentation. This didn't happen.

  • Subversion: unbeatable sourcecontrol.

    I'm now almost done reading the docs of Subversion, and I can only say: this is open source done right, and when open source is done right, it's unbeatable by any software vendor. The system breaths quality, well thought out design and passion for software engineering. The documentation is very good, it reads like a novel. The win32 explorer plug-in (TortoiseSVN) is also very good, and offers a rich quality of services. Subversion has two more things to offer: it's free and it runs on a wide range of platforms (Win32, *BSD, Unix, Linux, MacOS X).

  • Private classes and full type name

    This morning I was checking how my Xml serialization code was doing and I stumbled upon a phenomenon I hadn't seen before: the FullName property of Type will return a '+' instead of a '.' when the class is a private class. For testing I had defined some private classes and I set a property to an instance of one of those classes. My Xml serialization code will then add an Xml node with attributes for Assembly name and Type name. When examining the produced Xml, I saw:Type="DALTester.AdapterTester+OrderEntityValidator".

  • VB.NET stupidity

    Consider the following enum definition (which is defined in a C# assembly)

    public enum EntityState:int

  • Microsoft Support, Round 3, the flaw of the Hotfix

    Julien writes:

    PSS is the first line of contact for issues and if you contact them and tell them about your issue we will look into it. If we have a hotfix available for it, even if the SP is not yet released, we will provide you it. If we don't have a hotfix and your issue doesn't have a good workaround, we will make a hotfix for you (that's how they get done usually).

  • Microsoft Support, Round 2!

    Jeff writes as a reply to my previous blog about Microsoft Support:

    I found an actual bug in the framework (one of the RewritePath() overloads) and had a nice exchange started via the online support ticket system, finished by a member of the .NET team. It's one of three times I've had to contact MS directly, and every time my problem was resolved or at the very least explained. At the company level, I think they do a fine job.

  • Jimmy Nilsson on AOP

    Jimmy Nilsson blogs about AOP, or Aspect Oriented Programming.His article combines some different insights on the matter, good links to articles about AOP and is a good starting point for the people who have ignored AOP for a long time and find this the right moment to get started with AOP and what the fuss is all about.

  • A plea for full multiple inheritance support in .NET

    Although I find it absurd to put in a disclaimer, I know for a fact that talking about Multiple Inheritance (MI) is risky, because it is one of those subjects which can cause irrational reactions, resulting in flame-fests. Discussions about MI should be theoretical and thus based on theory, not about one of the many different implementations. I'm discussing the theoretical benefits of MI and am not discussing a real implementation like C++'s MI. I've done some research on this subject prior to writing this article and have read many discussions about MI and .NET and also discussions about MI and languages like Eiffel, so I'm aware of the disadvantages of MI, I also am aware of the reasons (of the ones that are publicly stated) why .NET doesn't have MI at the moment. Still I think .NET contains enough functionality and implementations of classes and interfaces which require MI to be fully utilized. MI is a complex concept, however so is the concept of generics. MI can result in unmaintainable code, but so can Single Inheritance (SI) (any language can be used to write unmaintainable, bad code). You can work around MI in most situations, but you can also work around the lack of polymorphism (in C for example, by using function pointers) or even OO. Still it's seen as an advantage to have OO, polymorphism and (soon) generics.