Showing posts with label DevExpress. Show all posts
Showing posts with label DevExpress. Show all posts

Thursday, June 11, 2009

My first unit test

As mentioned before I’m starting the (re)design for our upcoming major release. This is an exciting time because we will be using a couple of new techniques here. One of which is DevExpress’ XPO, eXpress Persistent Objects.

I had done some tests before, but now the real work starts I find that typing the object model rather than drawing is a big down side for XPO. I’m afraid that in this day and age you really need a visual modeller.

That said, I’ve bitten the bullet and started the design. I took that a bit light-hearted and thought I would have done that in a couple of hours. You know, thinking: “what do I need to do different compared to our current object model? It’s all been done and we know exactly what we want”.

Not, I can tell you. I find that rethinking over the object model brings up a couple of flaws that only become apparent if you don’t think of databases anymore. If you think in objects only, you experience another kind of designing entirely. I’ve been object modelling for quite some time, but doing it for real while reverse engineering a larger model is quite different to what I did before.

But, the reason I started this post is I wanted to share my first unit test with you. I was looking in the XPO software for a ‘model checker’. Since XPO is about storing data, and you need to specify the object relations using ‘code’, I suspected I might have mistyped something somewhere and wanted to check of all was well.

That’s quite easily done, using a unit test. It’s ever so simple, but helps you to check the object model while designing. Just make the test project your current project, add a reference to the assembly that holds your XPO model (everyone puts that in a separate assembly, right?) and run the test when you want to check your model.

This is the single line test that has been my friend for today:

[TestMethod]
public void CheckValidityOfDicationary()
{
    new ReflectionDictionary().GetDataStoreSchema(typeof(S7XPO_Base).Assembly);
}

Replace S7XPO_Base with any of your persistent classes and you’re off. If there is an error, an exception is thrown and your test will fail, telling you exactly where the problem is.

Hope this is of use to anyone. It certainly helped me a lot.

Bye,

Bart

Friday, June 05, 2009

Contemplating MVC for our software

I’m currently in the process of redesigning our software for a new implementation in C#/.Net. Our current implementation is great of course (…) but some considerations made us decide to move away from Delphi into C#/.Net. I’ve listed the reasons before, but to summarize here is a part of the introduction of our formal business case for going C#/.Net.

Microsoft will always invest more than Embarcadero will

As much as I like the Delphi world, there will be more development into C#/.Net than there ever will be into Delphi/Win32. It’s just a matter of size: MS is way bigger than Embarcadero and the number of developers for C#/.Net will always exceed the Delphi/Win2 group.

There are more C# developers than Delphi Developers

It’s a fact. I had a hard time to find experience local Delphi developers. There are plenty C# developers. To just mention a fact: the Delphi user group that I attended had between 5 and 8 developers on each meeting (every 3 months) and I was presenting on every meeting I attended. The dotned group I recently joined has meetings every month with between 20 and 50 developers every time. And the dotnet group is just one of many C#/.Net groups out there.

And there are numerous other considerations to make the move that I won’t mention here. All of them are commercial and strategic considerations, not technical ones.

So, there we go, we will redesign and implement our software.

Design decisions

There are a couple of little draw back to redesigning and reimplementing software (it will set you back a hell of an amount of money) but there are a couple of good aspects too. You can reconsider some design decisions you made earlier. You can apply new technology if you want to. Stuff like that.

There are two major decisions I am currently thinking over:

  1. Will I use DevExpress XPO or will I use the Microsoft Entity Framework for my ORM?
  2. Will I implement a ‘simple’ 3-tier model or will I go for a MVC model?

Deciding Object Relational Model

There is a bit of information available regarding the decision between XPO and the Entity Framework. I found Gary’s Blog (by DevExpress) highly informative. It’s been noted here that I am a huge DevExpress fan and am really considering building our software using XPO. But, the fact that Microsoft is behind the Entity Framework does play a role in my considerations. I haven’t gone into great detail investigating either technology (and I think I must to make a sound decision). It will be between those two I guess.

3-tier model or MVC model?

Our current app is more of a 2-tier model. The business logic is implemented next to the user interface and I want to move away from that. I am currently contemplating a MVC model or a ‘traditional’ 3-tier model. Our software will have a WinForms user interface as its main interface and most of the stuff out there is using ASP.Net (which I will use for only part of the editing work in our software).

I found this blog (http://rdn-consulting.com/blog/2008/02/01/selecting-a-mvcmvp-implementation-for-a-winforms-project/comment-page-1/#comment-1663) that kind of sums up my considerations.

I haven’t made any decisions on these issues, so any thoughts that you think are worth sharing are much appreciated.

Bye,

Bart

Saturday, November 01, 2008

DevExpress will have a localizer tool

The TcxLocalizer component helps you localize those of your applications that use our controls, as well as third-party or standard controls. This component provides centralized control over an application’s UI language or locale. Using this component, switching to another locale is as simple as changing a single option.

http://community.devexpress.com/blogs/ctodx/archive/2008/10/31/vcl-subscription-new-localization-tool-coming-in-next-build.aspx

Tuesday, August 26, 2008

Would you buy Delphi 2009?

Now the new version is in the open I found me talking to myself yesterday (...) about when and why I should buy the new version. I am curious enough to want to get my hands on it, but really haven't found an argument for upgrading yet. The new features in the language are not the ones that will solve all my remaining whishes for my software. I am using DevExpress components and not using ribbon toolbars (yet), so there's not a lot of new things in the VCL for me.

I do want unicode though, badly, so that is a good reason. But I'm using the DevExpress components so I need to wait for those to be 2009-ready. So, I have decided to wait for them to come with a unicode compatible release of their components before buying 2009. Since everybody says that implementing unicode with 2009 is so easy, it shouldn't take long, but I'm not really sure about that to be honest. We'll see...

What about you? Can you control yourself and find a decent reason to upgrade? Or are you susceptible for the hype-like messages about 2009 and find you running to the shop already?

Bye,
Bart

Thursday, July 10, 2008

What are those prizes in the race? - Part 1

While the race is one I will write a little report about the prizes that the contenders are programming for. First up will be the DevExpress components. This one is easiest for me, as I am a current user of the VCL subscription package.

I've written about various parts of the DevExpress components before. If you've read those postings it's not a great surprise to you that I am a big fan of the DevExpress components. This posting is basically a song of praise. I've written before that the standard that DevExpress works on, is what we strive for in our company. That sums it up really...

DevExpress website
While technically not a part of any of their packages, the first thing that you experience is the DevExpress website. I thought I'd mentioned this because it can make a huge difference in the first opinion that you have about a company and their products. The DevExpress site is beautifully layed out (although a bit bombastic for my taste) and you can find any information that you like very quickly. Their support sections is up there with the best to be found on the web. All of this gives you great confidence about the products you are about to buy.

VCL subscription
Now, here's a tip that will actually save you money. Go for the VCL subscription package immediately instead of buying that one companent pack that you think you are looking for. I started with the navigation controls first, purchased the grid controls later and ended up buying the VCL subscription. Although you get some discounts of you ask for them, in the end you will pay more money. If you go for the VCL subscription in the first place, you get the lot immediately. And you will get all the beta releases of new components first, so you can immediately dig into those.

Overall quality
The overall quality of the controls is really excellent, with good online help and examples. All the components have plenty of properties to tweak them to your liking. Special attention is given to the look and feel of the controls. There's about nothing that you can't reconfigure with regards to the way the controls appear in your program.

However, a couple of things can be said. There are some components that haven't been updated in a while. I found myself using the navigation controls, the grid controls, the editors of course and the cxLayout components a lot. The other controls I don't use that much.

Look and feel
Recently DevExpress released the ExpressSkins libray which is used to apply skinning to your controls. That means you can give your application a very unique look and feel. There's a skinning editor to create your own skins and of course there are plenty of ready made skins to choose from. It took me about a day to add a user configurable skinning option to our software so each end user can select the look and feel of their choice. Great stuff.

Grid controls
I think DevExpress is best know for their incredibly good grid controls. DevExpress grids are very versatile, very fast, user friendly and offer unrivaled filtering and sorting capabilities. The only 'negative' thing that somebody told me once is that you can configure too much. True, it takes a bit of time to learn all the properties of the grids, but once you've got the concept behind the properties, it's not that difficult to find your way. And of course, a lot of properties also means that the control probably can do what you want.

Layoutcontrols
On different occasions I wrote about one of the frustrations of the last year or so. I started looking at the layoutcontrols once we got the VCL subscriptions. Before, I had read about the layoutcontrols, but to be honest, I didn't believe what DevExpress put up on their website. How could a set of controls relieve me from all the positioning that I was used to do on my dialogs? Not in a milion years a set of controls could do a better job than I did.
That was one of the biggest mistakes I made the last couple of years. I should have had a look before. If I had done, I would have started to use the Layoutcontrols ages ago. They are SO good that I still am amazed every time I use them. Positioning controls on a dialog has been removed from my tasks completely. The DevExpress layout controls take over all the hassle of making sure my dialogs look good.
The Layoutcontrols don't get much exposure but I honestly think those are the best controls that I ever worked with. You're a fool if you still are positioning your controls yourself. Go on, have a look at those and your life as a user interface programmer will change completely.

Schedular controls
Now, I haven't actually used the schedular controls yet from in demos and experiments. But, everytime I use them I am amazed at what I find. You can literally with adding one component implement a calendar feature to your application. There's not much more to it that adding the control and filling it with data. Of course to use the information in your software you would need to program a bit more, but the actual calendar and storing the calendar data is all taken care of. An excellent component that - if you have any use for it - will be much appreciated by your end users.

Navigation controls
The navigation controls (menu bars, navigation panes, ribbon controls) is what started me as a DevExpress user. Needless to say that using them is dream. Using the navigation controls means it's a no hassle, painless way of implementing a professional navigation interface to your software. One excellent thing is: there is a cxImageList control that supports PNG images. If you use PNG images (like http://www.famfamfam.com/lab/icons/silk/) you get excellent results. Much better than that old Win95 icons that you might be looking at in your software right now.

No trial version
I've seen comments on the web complaining that DevExpress doesn't offer trial versions of their software. That is true for the VCL components, although there are demos and there is a 'money back guarantee'. The .Net controls do come with a trial version though. To me, a money back guarantee is good enough but I think it would be better for DevExpress to see if they can implement a trial systems for their controls. Especially if you have large development teams, purchasing the controls means serious money and I think one is 'entitled' to be able to test the controls in real life. But that of course is a business decision DevExpress needs to make.

Summary
I'm not a dxExperience user, although I am using the ASPx packages. To summarize the C#/.NET packages: IMHO they are at least of equal quality to the VCL components, if not better. I think that the comments I have on the VCL package should be applicable to the dx components too. I've use the dx-components in their trial version and I really like what I saw. Very familiar way of working compared to the VCL controls.

All and all I couldn't give more praise to a company than what I did here. I truly believe (and not because they sponsor the race) that DevExpress has a great philosophy, offers unrivaled value for money and actually will save you a lot, a lot of time as a programmer. Their support is great and the VCL components still get their updates and new features. I only whish they had even more programmers working on the VCL components (it's quite obvious that their money is in the C#/.Net controls).

Bye,
Bart

Wednesday, April 16, 2008

Spending a lot of time on your support department pays off,

I am using third party controls wherever I can. If I can buy the stuff that I need, we don't need to develop it myself. Buying software components is always cheaper than developing them yourself.

If you look at two component(s) (sets) that I am using (DevExpress Suite and ProfDHTMLEdit) you can tell which gives good value for money. We spent $3000 on DevExpress software and about $100 on the ProfDHMLEdit component. DevExpress is way cheaper for us and I will always recommend that to others. ProfDHTMLEdit has proven to be very expensive and I won't recommend it to anyone.

I'll explain why. But first, let me emphasize that the two software packages don't compare in functionality. The DevExpress package is much bigger and serves quite different purposes then ProfDHTMLEdit, hence the difference in price. But, that's not the point. The point is: what do I get for my money, support wise. And how does that make you feel as a customer.

Another thing to know is that I realize that DevExpress is a much larger company then the single person that supports ProfDHTMLEdit. But, again, that is not the point. The point is: what does attention, curtosy and friendliness do to you.

The Bad Support Scenario
Once upon a time I started to use ProfDHTMLEdit. I was looking for a WYSIWYG XML editor, couldn't find a suitable one, and ended up with ProfDHTMLEdit. It is a HTML editor with no special features to support XML. However, using some tricks and stylesheets I was able to make into the light weight XML editor that I was looking for. Usage of our software grew and I was beginning to get strange bug reports that were caused by ProfDHTMLEdit. I looked high and low but couldn't find a cause nor a solution. I contacted the author of the component and at first he was very helpfull in trying to locate the problems. But, after some time it became clear it wasn't the usual kind of problem and he sort of gave up. I tried to insist, offering to travel to him in Russia, looking for the cause together. But, he wanted a lot of money for that (starting with a 'setup fee' of $1500) and that made me move away from that option.

I tried other components, but there still wasn't a good alternative available. I continued debugging, tried wild guessed work arounds, all to no avail. To make a very long story short: after two years I found help with Marco Cantu and we were able to solve the problem in the end. It was all caused by a memory corruption in the ProfDHTMLEdit control. We were even able to create a good work around for the problem.

I reported this (including demo program of the problem) to the author again and also found that my work around benifitted other users. I have had no official reaction or software update since. In general, the questions asked on the support forum are answered in one sentence, sometimes a single word. No thank you, sorry, did it help? None of that. You feel like you are a burden to the supplier instead of a customer.

I never did a calcuation of the actual cost of this simple, one component. But it must be in the many tens of thousands of euros. Remember the original purchase price was about 100 euro.

The Good Support Scenario
As said earlier, we spent a lot of money on the DevExpress components. Starting with buying the one component pack, gradually we used more and more DevExpress components and ended up with a VCL subscription (worth $600 / year). All in all a couple of thousand dollars changed hands.

In the years that I have used the DevExpress components I have reported numerous bugs and questions with DevExpress. Let me just describe the typical flow of support messages.

  1. I report my problem on the website. Using a form I can supply the necessary details, search existing questions and knowledge base. If it is a new problem or question I can submit it.
  2. I will be notified when the issue is accepted (or declined) and will be informed when:
    1. The issued has been reviewed
    2. An answer was given
    3. A suggestion for a new feature is accepted
    4. The new feature is planned
    5. The new feature is actually implemented
  3. If the answer to a question cannot be described in text only (in a few lines), a sample project is always supplied.
  4. I can respond again using text, modifying the sample program or whatever I feel is the right way.
I will always get a prompt answer. If a solution or answer is not easy to give, they will tell you they need more time. You can track the issues you have opened. You really feel there's somebody on the other side that is working with you.

If I had to pay the hours that the DevExpress support people spend on me, I probably owned them another couple of thousand. And, having such excellent support, saved me a lot (and I mean a lot) of time.

The point and the benefits

Working in a software company myself I can see where the benefits are with excellent and abundant support:

  1. Your customers think very highly of you.
  2. They will always recommend you to others.
  3. Your customers will give you much more feed back, which is invaluable to you. You will know precisely what they want.
  4. Your customers will probably come back to you without thinking twice.
And probably there are a couple of other reasons to think of.

In any case (and I have writting that down a couple of times before): the support team of DevExpress is that level of support that we strive for. I can only hope we can reach that in our live time.

Bye,
Bart

Ps: right after posting this, I found an artical that touches some of this
Ps2: coincidence or not? Only hours after I posted this, I got a response from the ProfDHTMLEditor with an official solution to the 2-year old problem... Maybe blogging is gooed for something.

Saturday, April 12, 2008

Alternative to TToolbar

Download sample code


If you are a DevExpress user, like me, you will use TdxBarManager instead of any of the standard Delphi controls that are available. I can imagine that CodeGear doesn't invest anything in (any of) the user interface controls with such many excellent alternatives around.

I am a VCL component developer too (for internal use that is). Most of those controls go with an ActionList for it's functions. The end user can access the functions using (amongst other things) a TToolbar. And one thing that I had not done (until today) is to replace the TToolbar component that I was using for toolbars that are part of the controls.

Now, I might be alone on this, but I think that TToolbar is one of the worst components that is in the standard package. It behaves irratically and configuring at runtime (as I do in my controls) is really a pain. Some years ago I created a subclass that kind of worked ok. But I never was happy with it.

This weekend I took it upon me to integrate the TdxBarManager into the current set of UI controls. The solution took me a bit of work, but I think that how I did might benefit others. So, I've created a demo project that demonstrates how you can use the TdxBarManager as a toolbar as part of your own UI VCL controls.

Unzip, compile the package, install it and run the demo program. That should do it.

If you have any questions, just mail me.

These examples are just a proof of concept and you will need to do some work on it to get it going. My actual code is a bit more complex than this. I might have forgotten something or made some typos.