Attention: We are retiring the ASP.NET Community Blogs. Learn more >

Frans Bouma's blog

The blog of Frans Bouma, creator and lead developer of LLBLGen Pro and ORM Profiler.

  • Something is out of wack with the spirtual side of the branding experience

    Yeah, catchy title, eh? Do I know what it means? No, I don't have the slightest idea what on earth mr. Steve Ball, group program manager for the Windows Audio Video Excellence team (what do these people do?), meant with spirtual side of the branding experience. You can read all about it here: The startup sound in Vista (Scobleizer).

  • Why a cache in an O/R mapper doesn't make it fetch data faster.

    Preface
    One of the biggest myths in O/R mapper land is about 'caching'. It's often believed that using a cache inside an O/R mapper makes queries much faster and thus makes the O/R mapper more efficient. With that conclusion in hand, every O/R mapper which doesn't use a cache is therefore less efficient than the ones who do, right?

    Well... not exactly. In this article I hope to explain that caching in O/R mappers is not there for making queries more efficient, but is there for uniquing. But more on that later on. I hope that at the end of the article, I have convinced the reader that the myth Caching == more efficiency is indeed a myth. Beware, it's perhaps a bit complicated here and there, I'll try to explain it in as much layman's terms as possible.

  • Essay: The Database Model is the Domain Model

    To work with data on a semantic basis, it's often useful to specify general definitions of the elements a given portion of logic will work with. For example, an order system works with, among other elements, Order elements. To be able to define how this logic works, a definition of the concept Order is practical: We will be able to describe the functionality of the system by specifying actions on Order elements and supply with that a definition of that element Order.

  • .NET 2.0's ToolStripMenuItem are hard to disable...

    Say, you have a .NET 2.0 Windows Forms application with one form and on the form one menu strip at the top, you know, very simple. On that menu strip, you have the menu 'Foo' and on that menu you have a menu item 'Bar', which are in .NET 2.0 of type ToolStripMenuItem. You assign a keyboard shortcut to the Bar menu item, say Cntrl+B.

    You disable the menu 'Foo', by setting its Enabled property to false. Now it's impossible for the user to click / select the Bar menu item, right?

  • Anonymous comments are off

    I switched off anonymous comments, after a truckload of comment spam in the last couple of days. Luckily the CS system contains a moderation system so they don't end up on the blog as comments but it's still annoying as the moderation system mails me the comments.

  • LLBLGen Pro v2.0 released!


    Whoa time flies! . After 9 months of hard work, LLBLGen Pro v2.0 has been released!

    LLBLGen Pro V2.0 comes with a new licensing scheme: it's now licensed per seat, instead of per-department. Current customers of v1.0.200x.y can upgrade for EUR 49.- per developer. (Designer using developers need a license, the rest don't). Of course, every new release brings new features and enhancements, and this version isn't an exception to that ! Below is a summary of the long list of big and small enhancements and new features packed into v2.0:

    • Full .NET 2.0 support in generated code and runtime libraries with separate runtime libraries codebase for .NET 2.0, using .NET specific features like generics internally as well for optimal performance.
    • SqlServer 2005 server side paging queries now use a CTE based query instead of a temptable based query for optimal performance.
    • Support for nullable types for value-type based entity and view fields. (.NET 2.0 targeting code only)
    • Support for System.Transactions transactions when applicable (SqlServer 2005, .NET 2.0)
    • Support for wsdl schema interpretation logic to have wsdl.exe generate typed stubs for webservices instead of DataSet based stubs (.NET 2.0 targeting code only)
    • New feature-rich validation framework.
    • Powerful data-projection framework: project any entitycollection or resultset retrieved from a datareader onto any datastructure of any type using generic code.
    • Ability to specify scalar queries in expressions, so a subquery inside a selectlist or inside expressions in filters is now possible.
    • It's now possible to fetch a query as a datareader. This query can be a stored procedure call, or a query created on the fly. This datareader can then be used further, if required, to project the data onto classes like entity classes, datatables or custom classes using the generic data-projection framework. This makes it possible to fetch entities through a stored procedure call with very a few lines of code.
    • EntityView (SelfServicing) and EntityView2 (Adapter) classes added, which are dataview-style objects for entity collections. They support sorting, and filtering in-memory, data projection onto other entity collections, datatables or custom classes. Filtering and sorting is done through strongly-typed, compile-time checked predicate and sortclause objects, which are also used for filters and sorters in database queries.
    • Expressions now support calls to database functions (UDF's or system functions). Database functions can accept entity fields or normal values you pass to the function or other expressions (like for example scalar queries).
    • Full support for 2-way declarative databinding and design time databinding in ASP.NET 2.0, using the LLBLGenProDataSource (selfservicing) and LLBLGenProDataSource2 (adapter) controls. These controls support (design time) databinding of entity collections, typed lists and typed views and support server-side paging, sorting and filtering. They also support data persistence / retrieval delegation to different methods (by tracking changes into a UnitofWork object), and filtering/sorting based on parameter binding with other controls on an ASP.NET 2.0 webform.
    • Full support for design time databinding in .NET 2.0 windows forms.
    • .NET 2.0/VS.NET 2005: A set of Debugger Visualizers has been added for a lot of classes in the framework to ease debugging your code.
    • support for CF.NET 2.0 and SqlServerCE 3.0
    • Oracle support using the Microsoft Oracle provider. This replaces the DataDirect based Oracle support.
    • SqlServer 2005: support for synonyms for tables and views, support for User Defined Types (UDT) based on CLR classes, support for NEWSEQUENTIALID() so sequential uniqueidentifier values can be generated by the DB and read back into entities.
    • PostgreSql support for PostgreSql v7.4 and up
    • Much lower memory footprint of entity collections in memory.
    • Entity fetch speed has been greatly enhanced.
    • LLBLGen Pro designer is now running on .NET 2.0, using the new Janus Windows controls v3 for windowing and grids.
    • Plug-ins can now open their own docked window in the LLBLGen Pro designer
    • It's now possible to specify in the designer additional namespaces and interfaces to generate into the entity classes
    • Completely new code generation configuration system, which makes it very easy to add/remove/edit the tasks scheduled in the run queue for code generation.
    • New template configuration system which makes it very easy to add your own templates to an existing set of templates to enhance or replace existing templates
    • without having to alter any system configuration.
    • Much more small enhancements, changes, tweaks and additions.

  • Applying Domain-Driven Design and Patterns by Jimmy Nilsson

    Several days ago it finally arrived: Applying Domain-Driven Design and Patterns by Jimmy Nilsson! It's Jimmy's latest book and it's great. Well, 'great' is not really the word, it's more a matter of Must Have, it's that good.

    It's perhaps a bit strange, to hear from me that a DDD/TDD book, which this is, is a Must Have, but let me explain: Applying Domain-Driven Design and Patterns, is not a book which is written by someone who writes books for a living. It's a book written by someone who writes software for a living. This makes the book so great, because it applies DDD and TDD in a very practical way, as you would do too, explained to you by a master in this field. This means it also discusses potential problems with some aspects of DDD and TDD, how to avoid them or how to deal with them, like you would have to do as well. Simply put: a must have book for software engineers who have to write code, create beautiful software for a living, for software engineers who have to face todays problems when creating software!

    Jimmy is a great writer and good teacher too. I find that essential in a book: does the author know what s/he's talking about, is s/he a true bore or is the material taught in a comfortable way? I think Jimmy hit the sweet spot with this book: before you know it you've read several chapters and you've at the same time learned a lot. The style is also nice, it's as if Jimmy sits next to you talking to you, discussing the topics of the book while you're listening and learning.

  • Jeroen vd Bos on Why Visual Studio should be part of Windows

    My best friend Jeroen van den Bos has just posted a great article about why Visual Studio should be part of Windows. Jeroen and I share a long history together and as we're both ex-demosceners, I fully understand his reasoning and I wholeheartly agree with his point: make Visual Studio.NET Express part of Windows Vista.