Tuesday, August 30, 2005

Dell is packing my computer

Finally. They got all the pieces, put them together and are now packing the computer :) Soooo cool! I'm really excited!! Hopefully I get it soon.

By the way: Next week I'm on vacation. This is the last time for this summer and the first time where an ocean is involved. I'm flying with a friend (the brother of my girlfriend) to Turkey... for one week. I'll be back on the 11th of September.

Sunday, August 28, 2005

[Opf3] Opf3 Wizard BETA1

Hi everybody, the Opf3 Wizard has reached the Beta 1 milestone. It’s not fully implemented yet, but does already include everything to create persistent objects.

What is included?

  • Create storages (stored for further usage) that’s schemas are automatically retrieved.

  • Detects automatically all persistent objects that can be created from the storage’s schema.

  • Detects automatically all persistent object’s properties that can be created from the storage’s schema.

  • Detects automatically all relations between persistent objects (that can be detected from the storage’s schema).

  • Add, remove and edit persistent objects.

  • Add, remove and edit properties of the persistent objects.

  • Add, remove and edit relations between persistent objects.

  • Includes One-To-One, One-To-Many and Many-To-Many relations.

  • Includes an algorithm that takes the table name and tries to create a smart name for the persistent objects.

  • Implement all interfaces that are supported by Opf3 in your persistent objects.

  • Set custom header information for all persistent objects (stored for further usage).

  • Choose your favourite output directory (stored for further usage).

  • Allows customizing everything of the persistent objects!

What is missing?

  • Creating an interface for every persistent object.

  • Creating test cases for every persistent object.

Screen shots?
The following screenshots are available right now:
001 - Welcome Page
004 - Persistent object list
008 - Relations list

How to get Opf3 Wizard?
Everybody who already bought Opf3 gets a single developer license of the wizard for free! If you buy a version of Opf3 right now you get a single developer license of the Opf3 Wizard for free!

Thursday, August 25, 2005

Ordered new PC

I ordered the a new PC yesterday. My current one has so much problems. A few days ago he started also to smell like something that is burning... It's time to get a new one!

The new one will be a monster machine! Contains a GeForce 6800 Go with 256 MB DDR2 RAM, 2 Gigabyte of DDR2 RAM, a display with 1900 x 1200 pixels resolution, a harddisk with 7200 rpm, and a lot other cool things... I'm really looking forward to it. I have still to wait a few days until it is shipped. It is worse then Christmas!!!

Saturday, August 20, 2005

Living in italy + buying a PC at dell.de = not possible!

Why!!! I wanted to buy a new DELL XPS 2-something laptop at dell.de. The resion is the the german keyboard and the XPS 2 model (dell.it does not have the new XPS). But it seems to be impossible, at least from the web. You have to give them a german address, but I have none. I tried to create an account at dell.it and use that one for the german site - brrrrrreeeep! Error! Not possible: "Please use a german account for the german page". Cool.

Easy as Dell :'(

Laptop switching off every few hours

My computer has a/more problems. The thing is always switching off after a few hours of work. Simply wents black and (sometimes) you have to wait for a few minutes until you can restart. I was thinking it may have to do with the heat. Now the graphic card runs with half power and the cpu runs also with 1200 mhz instead of 1500 but the problem did not disappear.

Today for example the system went black after 20 minutes of work. Yesterday after 4 hours....

I guess it is time for a new computer. This one is already 3,5 years old.

Friday, August 19, 2005

[Opf3] Opf3 Wizard Alpha 1

It is ready! We are sending the Alpha 1 to customer interested in getting in contact with the early bits.

I don’t know if you have heard something about the Opf3 Wizard. It’s a new tool to automatically generate persistent objects for Opf3. We have finished the first alpha right now.

What does the Wizard do?
The final version of the wizard is going to create the persistent objects (in C#) for Opf3. In a first step the tool is going to analyze a database (you provide the connection string – you can store the connection strings for your convenience) and create a first mapping (name of the persistent objects, properties, relations etc.). You can then customize every property and relation that is created (the Alpha does not include that feature – comes with the first Beta). Furthermore you have the possibility to implement automatically the interfaces for the persistent objects provided by Opf3.

As a second feature the final version will also create test objects for the persistent objects (the test objects are created for the test suite coming with VS 2005).

The wizard is plug-in based. You may extend the program: create new plug-ins or add other languages for the persistent objects … It is up to you to extend it. There will be also a version that ships with the full source code to allow you to extend/enhance everything.

Thank you for the support

Hi, I want to thank everybody for the cool support you are giving me. It is really cool to see that people like what I'm doing.

If you have further questions, ideas, problems, or anything else don't hesitate to drop me (us) a line. The e-mail is found on opf3.com.

Thursday, August 18, 2005

[Opf3] Back and coding :)

I'm back from my vacation. It was a great time! We had a lot fun (although it rained a few days, but I didn't care much).

An interesting fact is that the post about my vacation was the one with the most comments... You don't loose me: I'm back!

If you are back in saddle, could you give more light on next opf3 version, please. We are evalating o/r mappers, and since we are moving to .net 2.0, opf3 is high on the list. Knowing more exactly what new feautures are planed for the next release can help...

We are currently doing two things with/in Opf3:
1) Trying to find bugs (heavy testing)
2) Creating a wizard for the framework

The follwoing list is what we implemented since the last release:
- Implemented a new mapping eninge that allows to override properties without resetting the FieldAttribute. The FieldAttribute is searched trough the whole inheritance chain. Opf3 is no also faster because of some smarter caching algorithm.
- Class fields can be now mapped to fields in the storage too.
- ObjectSet implements now the IListSource interface.
- Added FirebirdStorage.
- Fixed a bug in OracleCommandBuilder.
- Added Invalidate method to the ObjectHolderBase to invalidate the loaded related object(s) and force a reload on the next call of InnnerObject.
- Added check to OjectContext.MarkForDeletion. Only persistent objects can be marked for deletion.
- Added ICustomDataTypesStorage (:IStorage). This interface allows the storage to convert data types that are not supported by the storage to types that are supported (during save). It allows also to convert the type from the storage to the target type of the persistent object (during load).
- Added PersistentRights enumeration and Rights property in the FieldAttribute. Allows to specify the rights of a persistent object. Some persistent objects, for example, may only be loaded and have only that right.
- ObjectSet implements now IEnumerable.
- Fixed minor issues with the framework.

Very high in my list is creating an interface that allows connecting to caching frameworks and to implement a simple caching framework (that uses the interface). Another topic I'm evaluation is an algorithm to load related objects with the parent object (in one step). I had a few discussions with the guys from Sarix GmbH (my summer job) on that topic.

The most important thing I'm working on right now, is the Opf3 Wizard. It allows you to create persistent objects by selecting a database. By default the wizard creates the mapping by its own (for all tables), but you can customize everything (remove tables, columns, rename persistent object and properties, customize the relations, ...). The whole thing is plugin based, which allows you also to write your own plugins for it. I'm currently writing the plugin to generate persistent objects for C# and test objects for Visual Studio 2005. You will see more soon.

We are going to send the alpha and beta versions to customer that are interested to test it.

A few screenshots of the Wizard:

Sunday, August 07, 2005

Relaxing: Week off!

Next week I'll be a week off. I'll check my e-mails once a day and try to answer as soon as possible.

I'm going to visit my girlfriend. She lives in Salzburg (city in Austria). Just relaxing...

Thursday, August 04, 2005

[Opf3] Object(Set|List)Holder and inheritance

To implement relations in Opf3 persistent objects you need the ObjectSetHolder, the ObjectHolder or the ObjectListHolder. An example for a relation is the following:

public sealed class Foo
    private int _id;
    private int _name;

    [Relation("ID = FooID")]
    private ObjectSetHolder<Bar> _bars = new ObjectSetHolder<Bar>();

    public ObjectSet<Bar> Bars
        get { return _bars.InnerObject; }

    [Field("ID", Identifier = true, AllowDBNull = false, AutoNumber = true)]
    public int ID
        get { return _id; }
        set { _id = value; }

    [Field("NAME", AllowDBNull = false)]
    private string Name
        get { return _name; }
        set { _name = value; }

public sealed class Bar
    private int _id;
    private int _fooID;

    [Field("ID", Identifier = true, AllowDBNull = false, AutoNumber = true)]
    public int ID
        get { return _id; }
        set { _id = value; }

    [Field("FOO_ID", AllowDBNull = false)]
    private int FooID
        get { return _fooID; }
        set { _fooID = value; }

This pattern breaks with inheritance and the current implementation of the mapping engine. If you inherit from Foo, for example you create Foo1, the private ObjectSetHolder and the RelationAttribute on that instance isn't detected anymore. Without the RelationAttribute it is impossible for Opf3 to retrieve the related persistent objects. The only solution for now is to set the ObjectSetHolder to protected. As mentioned in this blog entry it is only required when you inherit from Foo. If you don't inherit you do not need to set the ObjectSetHolder protected. In that case "private" is fine.

    [Relation("ID = FooID")]
    protected ObjectSetHolder<Bar> _bars = new ObjectSetHolder<Bar>();