This Blog


Favorite Posts


March 2010 - Posts

  • Time for some Delphi and VCL news

    All this chatter since MIX10 about Silverlight and Windows Phone 7 and Visual Studio 2010 and this .NET thingy or that .NET wotsit is all very well, but let’s go native for a moment for a breath of fresh air.

    The VCL team are implementing suggestions and requests for Build 50 (it’s the ‘half-century’ as they say in cricket). They’ve got a little way to go before release yet, but for a couple of beers they were willing to let me in on some of the stuff they’ve been working on (the support center ids are given so that you can click through to the actual support tickets):

    1. A1543 - Make unified packages for Delphi/C++Builder personalities in BDS 2006, RAD Studio 2007, 2009, and 2010.

    From Build 50 onwards, you can specify if you want to install packages to be shared with both personalities (Delphi and C++Builder). There’s a new option at the top right of the selection screen:

    Setup selection screen, no shared packages

    Select it and the selection pane changes:

    Setup selection screen, with shared packages

    If a particular product is not supported for one of the personalities (normally, that means C++Builder Smile), a warning icon is displayed next to the check box.

    Setup selection screen, not supported icon

    Shared packages are stored to a separate folder in the <DX Installation Folder>\Library folder and their names include RS (short for RAD Studio).

    Using shared packages won’t be a problem if you have existing Delphi projects, but customers with existing C++Builder projects will have to update their project files with the new package names. We’re working on a Project Conversion tool (still being written) that will help our C++Builder customers accomplish this tedious task.

    2. S90946 - Provide *.SKINRES files for built-in Skins.

    Starting with Build 50, we'll be shipping the ExpressSkins Library with binary skin files (*.SKINRES files) containing our built-in skins. Each file will contain one skin. So, if you're dynamically loading skins in your applications, updating your look and feel with up-to-date versions of built-in skins will be as easy as ABC. *.SKINRES files are installed to the <DX Installation Folder>\ExpressSkins Library\Binary Skin Files folder.

    3. S34045 - RAD Studio 2010 - Publish touch-based GUI related events and properties.

    Break out your Tablet PC: the Touch property and the OnGesture event have been published in the TcxControl class. These members will now be available at design time in all TcxControl descendants. Touch FTW!

    4. B131747 - cxGroupBox - Add the capability to specify the color of a caption when the PanelStyle.Active = True, or the Alignment = alCenterCenter.

    To specify the caption color from Build 50 onwards, use the TextColor property of the Common.GroupPanelNoBorder skin element.

    5. Q250737 - Grid - Add the capability to specify a group row's background, separator, and text colors if the OptionsView.GroupRowStyle property is set to grsOffice11

    To specify these colors, use the additional Office11ContentColor, Office11SeparatorColor, and Office11TextColor properties of the Grid.GroupRow skin element:


    6. S34521 - LayoutControl - Make a separate skin element for a layout group's expand button

    We’ve introduced the Common.GroupExpandButton skin element to skin this particular button in Build 50. Previously, the button was skinned using the Grid.PlusMinus skin element.

    I want to emphasize that these are just some of the items they’ve been working on during the three weeks or so since Build 49. There will be many more once Build 50 comes out, so this is just a taster. Plus, we’ve all just got away from all that .NET stuff for a little while...

  • DevExpress Newsletter 24: Message from the CTO

    Now that we’re doing my Message from the CTO in the DevExpress newsletter as a video, I’ve had a couple of requests to make sure that I publish the text as a blog post. Here’s the Message from Newsletter 24 (the video is here):

    Opportunity Costs

    Last time I talked about sunk costs and the requirement to ignore them when making decisions between two different strategies.

    This time, I want to talk about opportunity costs. In one sense it's fairly simple: if you have a decision to make about two mutally distinct outcomes, the opportunity cost of selecting the best choice is the next-best choice.

    Suppose you have the choice of spending $15 on going to the movies or buying a DVD. If you select to go to the movies, your opportunity cost is the DVD. If you buy the DVD, the opportunity cost is the trip to the movies. In software development, opportunity costs come up all the time: we often have to make a decision about which project to take on, given a choice, and the opportunity cost of choosing a particular one is the best idea we didn't choose. Note that opportunity costs are not necessarily monetary, but can be related to anything else of value to the person deciding.

    Closely related to opportunity cost is the notion of "There ain't no such thing as a free lunch", or TANSTAAFL ("tan stah full") as I tried to pronounce it when I first came across it. The free lunch term came about in the days when saloons in the States used to offer a free lunch to patrons who ordered a drink. In reality, the lunch wasn't "free" (that's free as in beer to quote Richard Stallman) but was paid for because the drinks were priced higher and patrons would usually have two or more drinks. In other words, tan stah full says: to get something we desire generally means giving up the opportunity to get something else. It "costs" us in some sense to make the choice; it is not free. This is opportunity cost.

    At Developer Express we use the term sometimes to explain why we don't add a particular feature or control. We recognize that a given idea is valuable, but, since we have limited resources, we can only do it by not doing something else. The opportunity cost of doing a possible new feature over here is not doing another feature over there, and that second feature may in fact be more valuable in terms of revenue. However if enough people vote for or pester us about the first feature, it may be more valuable in terms of goodwill, for example. Opportunity costs may not be monetary, remember.

    So, when thinking about what course of action to take, you should not only discount your sunk costs, but also consider your opportunity costs. Harder to evaluate perhaps, but definitely worth thinking about.

  • .NET 4 Client Profile: the good news and the bad news

    Block by block Way back in October last year, I discussed the .NET 4 Client Profile, the cut-down .NET Framework that will be the default framework target for new solutions in Visual Studio 2010. Since VS2010 is less than a month away from release (at least for MSDN subscribers), I thought it best to bring you up to date with our progress on this front.

    As is traditional in these affairs, I’ll introduce it through sections labeled Good news and Bad news.

    The Good news

    We shall fully support the .NET 4 Client Profile with DXperience v2010 vol 1. That is, if you create a default app in VS2010 with v2010.1 installed, all of our WinForms and WPF controls will be visible and enabled in the toolbar. They will all work with the .NET 4 Client Profile. Hooray!

    The Bad news

    XtraCharts, because it targets both ASP.NET and WinForms applications, uses System.Web in its common assemblies in version 2009.3 and earlier. System.Web is not part of the Client Profile. So, we had a choice: shrug our shoulders and say, “creating charts in your app? Use the full framework.” or modify XtraCharts to remove the dependency. We opted for the latter. Many reasons I suppose, among them being XtraCharts also broke XtraReports, and new customers evaluating our charting and/or reporting products would probably get weird errors and/or non-working apps by default. For the latter: ouch, ouch, ouch. Like everyone in business, we depend on getting new customers for our growth and survival and the smoother we make the evaluation path, the better.

    I hasten to add that this decision was hard to make and there were good arguments for both sides. It’s a measure of how difficult it was that it was only finalized just recently, within the last week. Indeed, it seems that XtraScheduler was also on the ‘bad news’ list until the end of the week, but the team thinks they’ve resolved their issues without any further problem.

    What this means for our current customers though is that XtraCharts will have breaking changes, whether you use VS2010 or not. We’re investigating altering our Project Converter to modify your aspx files, since it’s these that will break most easily.

    I’ll have more news as and when these changes have been made and fully tested and once our parser guys have investigated the Project Converter and ASPX files.

  • Still problems with ISupportInitialize and VS2010 RC

    As part of the check-in process for Code Freeze for the next major release, the WinForms team did some more testing with Visual Studio 2010. And, lo and behold, there were still problems with the code that the designer in VS2010 RC produces. (I talked about a similar problem back in the PDC ’09 timeframe.)

    Here’s a simple scenario, using our not-quite-in-beta v2010.1 controls:

    1. Create a new WinForms 4.0 project using the Client Profile (to repro with v2009.9, you’ll have to use the full profile)
    2. Drop an XtraGrid control on the form
    3. Change view type from GridView to LayoutView

    If you now check the designer.cs file, you’ll only see one call to BeginInit() for the grid instead of the expected three. Before you say, well, duh, it’s a problem in the grid code, it’s reproduceable with the standard datagrid. Just assign a new datasource, for example, and you’ll have a similar code serialization issue.

    In practice what this means is if you open an existing form with a grid, change the view type, and save, you’ll get a form that will cause all kinds of errors when you next open it. It will be hosed, to put it mildly.

    Now, all is not lost despite the RTM date for VS2010 only being 4 weeks away. It seems that a later non-public RC release has solved this issue. We are continuing to test our controls with these slip-streamed releases as and when we get them.

    So, if you are using VS2010 RC for your production code, please make sure you maintain a strict software check-in policy, so that you can revert to an earlier version in case of problems.

  • 4 years on, my 400th blog post

    Yesterday, on the Ides of March, a date of which you should beware if you happen to be Caesar, an anniversary came and went. Four years ago, fresh-faced and wet behind the ears, I became CTO of Developer Express. Today, I’m older and wiser, grizzled you might say, despite only being 35 (cough, cough).

    Over the past 4 years, there have been many changes at DevExpress, in the market we compete, and with the technologies we use. I won’t go through them in a retrospective here, mainly because there have been so many, but also it’s a little boring.

    Boring? Yes, because yesterday more than ever I feel we’re on the cusp of some extremely exciting developments. In fact, I can’t think of such major developments in the past 4 years that approach what we’re learning at MIX10 this week, starting yesterday. Certainly, we’ve known about some of them for a little while, and some of them are still only hinted at despite the atmosphere of openness at MIX, but in aggregate they’re game-changing.

    • Windows Phone 7 apps will be Silverlight apps. Drop kick Windows Mobile into the trashcan, stuff native apps, it’s Silverlight all the way. Oh and you can get the full VS2010 IDE plus phone emulator to create WP7 app for free (note though that the apps will have to be approved before they can be sold, à la Apple Store). No phones yet.
    • Silverlight grows up with Silverlight 4. VS2010 has a usable designer, Blend with the v4 beta is better than ever. Better trusted client apps, myriad new multimedia features, much better developer support.
    • Visual Studio 2010 and .NET 4 and ASP.NET 4 and ASP.NET MVC 2. This little lot is like drinking from the firehose. Too much to detail here; there’s way more information on the Microsoft sites than I could hope to summarize. But watch out come mid-April when it’s all released.

    All of these things affect what we do at DevExpress. Once MIX10 is over and our gang of developers who are there return to the DevExpress HQ, we’ll have to have some discussions about what we’ll be changing for v2010.1, if anything, and v2010.2.

    So, stay tuned to the blogs here for more news as it happens.

    By the way, this is my 400th post on this blog. Another celebration!

  • DevExpress Newsletter 23: Message from the CTO

    Now that we’re doing my Message from the CTO in the DevExpress newsletter as a video, I’ve had a couple of requests to make sure that I publish the text as a blog post. Here’s the Message from Newsletter 23 (the video is here):

    Sunk costs

    There's a concept in economic theory that's of great importance in software development because it comes up all the time: sunk costs. In fact it's fascinating in its own right because it says more about human reactions and motivations than about economic theory.

    Imagine the following situation: you've been running a software development project for 6 months and, for whatever reasons -- could be a competitor has come out with something similar, could be that the implementation is running into difficulties -- you're wondering whether to continue the project given the amount of effort and resources -- that is, money -- you've already put into it. Presumably, another opportunity has presented itself and you're trying to decide between continuing or doing something else.

    If you're like most people, you are very hesitant to drop the project. The argument goes something like this: the project has already cost X thousand dollars and it could still be completed in a reasonable timeframe for a certain amount of money and still be worthwhile, that is, make a profit. Ignore the new opportunity.

    Economic theory says otherwise. The costs you've already incurred are spent. The money has gone. They are what's known as sunk costs. To make a decision right now between two opportunities, you should only consider the future costs and future benefits of those opportunities.

    So, you'd put aside what you'd already spent and look at how much each opportunity (that is, finishing the current project or pursuing the new one) would cost from this moment forth and would possibly make as profit when sold. If it's the new opportunity, economic theory says go for it. Forget your sunk costs.

    In software development, oftentimes the new opportunity is "starting from scratch" because for example you've learned a lot about the problem space in the meantime. Indeed, with agile development there are many scenarios that involve "throwing away" what you have and starting afresh. Examples are spikes, where you explore some technology with code you then discard, and prototypes, where you mock up something for presentations but never use it in production. Both of these are great examples of sunk costs and can be difficult to justify to customers. How many times have you heard anecdotal tales of customers who think that the prototype is the finished application and just needs hooking up to their data? And you're thowing away the "finished" application because?

    Sunk costs are sunk. They're at the bottom of the sea and you won't get them back. No matter how hard it may be, ignore them, and look forward.

  • DevExpress Newsletter 22: Message from the CTO

    Now that we’re doing my message from the CTO in the DevExpress newsletter as a video, I’ve had a couple of requests to make sure that I publish the text as a blog post. Here’s the Message from Newsletter 22 (the video is here):

    Mend some broken windows

    Back in 1982, The Atlantic published an article by Wilson and Kelling called Broken Windows, in which the authors promoted the idea that small problems, unless fixed promptly, would lead to more problems, and the problems themselves growing larger into full criminal acts.

    The archetypal example is that of a building with a couple of broken windows. If they are not repaired, the tendency is for vandals to break a few more, and eventually to break into and perhaps squatters to occupy the building itself. Whereas, if the windows are repaired promptly, showing that there is someone who cares about how the building is perceived, the tendency is reversed and vandals would leave the building alone. Crime would be reduced as a whole by fixing the small things.

    Later, Dave Hunt and Andy Thomas, in their book The Pragmatic Programmer, extended this concept to software. No software is perfectly written: it has bugs, it is possibly an expression of some bad design, it contains sub-optimal poorly-written code. Their viewpoint is that this is the equivalent of broken windows. If these aren't repaired promptly, it'll promote the view that no one cares about the software, and developers won't be as careful in testing and checking in new code as they should.

    So, when you next check out some source code file to fix a bug and you notice some other issue with the code unrelated to your bug report, fix the other issue as well at the same time. Repair the broken windows as you discover them.

    Note that this isn't an exhortation to go on a broken window hunt, try and find them all, and repair every one of them all at once. Or, worse, maybe break a couple yourself so that you can repair them and look good. No, this is the exact opposite. Fixing stuff as you notice it. A continual polishing process rather than a refurbishment.

    Jeff, our videographer, wanted some examples of broken code to put into the video, so I mocked up these examples. The third came from a Daily WTF  post, but the first two I’ve certainly been guilty of at one stage or another in the past. Of course, I wouldn’t do them now, no sirree…

    // free linked list
    while (node != null) {
      node = node->next;
    // remove dead items
    for (int i = 0; i < list.Count; i++) {
      if (list[i].IsDead) 
    // get opposite bool
    private bool OppositeBool(bool inputBool) {
      if (inputBool == true)
        return false;
      return true;
  • VCL Subscription Build 49 released

    Just in case you’ve been reading the RSS and Twitter feeds you subscribe to instead of your email, you might have missed the post announcing that Build 49 of the VCL Subscription has just been released. So if you’re a subscriber, nip over to the Client Center and start downloading.

    The big feature of Build 49 is the release of ExpressSpellChecker 2 with HunSpell support and with some quite remarkable improvements in both performance and memory use.

    The attributes we now support with ExpressSpellChecker include

    • Compound words and options for compounding. (Compound words being words formed from joining two other words.)
    • Twofold suffix stripping. (A good one this: in order to spell check words you can either add every single words, with every different possible tense or plural or other derivation present, which would be huge, or you mark words as being able to take certain suffixes. ExpressSpellChecker could cope with one suffix before, now it can cope with two. Think care, careless, carelessness, as an example of twofold suffixes.)
    • Extended affix classes. (Affixes are morphemes that can be tacked onto a word to form another. Think of them as prefixes, suffixes, and circumfixes. For HunSpell, affixes are in a separate file (the affix file) from the dictionary file.)
    • Homonyms. (A homonym is a word that is spelled or that sounds like another, but has a different meaning. This could be something as simple as post the verb, versus post the noun.)
    • Prefix-suffix dependencies. (Tough one this: as soon as you allow prefixes and suffixes to a word, you have to allow for the possibility that certain combinations for certain root words are not valid. So, you could have member, dismember, dismemberment, but you can’t have memberment.)
    • Circumfixes. (Applying a prefix and a suffix at the same time: the circumfix wraps the word. Wikipedia suggests the German past participle where ge--t is wrapped around regular verbs to form the past participle.)

    The great thing is you don’t have to worry about all this: the spell checking engine takes care of it all to make correction suggestions. The suggestions it makes will now be of a higher quality than before.

    You can find more information about ExpressSpellChecker 2 here, and more about other changes in the overall VCL subscription here.


Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383


DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, Delphi, HTML5 or iOS & Android development. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2018 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners