Archive for Opinion Piece

Lots of Little Bits

  1. My last post, Inducing The Great Divide, got quite a reaction. I didn’t really expect the approach to be particularly controversial, but it turns out it was. Lot’s of people asked for more source code and more complex examples and I am happy to oblige. Perhaps it’s a little close to year end to start a series of posts, so we’ll see how that goes.
  2. I really wish Embarcadero would get a Delphi 2010 update out the door already. At first I was really impressed with the product quality, but using it day to day on really big project groups can be really frustrating.
  3. I thought IDE insight would be the number one new feature of Delphi 2010. I use it a lot, but the real winner for me is the new “File groups” feature in the find dialog. I hardly even use the Find in project/group/folder options anymore.
  4. Here is a little oddity I found. Create a new form and place a group box on it. Then, align the group box to a side of the form and restrict its size. For example, align right and set a MaxHeight constraint. In all Delphi versions 2007 and older the effect is similar to setting anchors to the group box. In Delphi 2010 the entire form resizes.

    Funny how seldom-used techniques and undocumented VCL changes can conspire to waste an entire afternoon. And of course that only happens when you are really, really close to a deadline.

  5. I downloaded the new Office 2010 beta and I think I finally figured out Microsoft’s master plan: They are primarily focused on messing with the world’s programmers.


    Developers that use .NET can tell you all about libraries that replace libraries that replaced libraries that do the same thing. And of course there are two versions of MAPI and three different things called Collaboration Data Objects.

    A quick tour of the Ribbon’s history illustrates the point:

    1. They created the Ribbon as part of Office 2007, Knowing full well that the pressure will be on development shops the world over to bring the latest “Office look” into their apps. Do they make a redistributable library available? Nope, you need to implement it yourself or wait for component vendors (thanks, Jeremy) to implement it.
    2. As soon as all that work was done, out came Windows 7 – with a Ribbon common control library! You can’t – as far as I know – get a redistributable for this to deploy your apps to Vista or XP, so it is only theoretically usable. And of course, it looks completely different.
    3. Out came the Office 2010 beta. Low and behold, it looks completely different! The round Office button that everyone just implemented has disappeared and the Quick Access toolbar is different. You now need a File tab to the left of Home – something they specifically chose not to do in Office 2007 and all the glossy gradients have made way for something that really does represent an AJAX control more than anything.
  6. On the topic of Office – does anyone else find it irritating that Word, Excel and PowerPoint have all implemented MDI in completely different ways?

Comments (2)

Debunking the Delphi 7 Myths

In my last post on why you really should upgrade from Delphi 7, I seem to have upset a number of people. Some were very angry, some were moderate. Some were eloquent. Most of them were dead wrong! A few of the comments received I really should react to, but I think the volume justifies a follow-up post. This post done, I’ll take my head out of the hornet’s nest and leave Delphi 7 developers alone. For a while at least.

Update: I really meant to leave this topic alone, but only days after I posted this, the Delphi 2010 hype started in all earnest. I didn’t take part in the beta this time, so I was unaware of some of the new things coming out. Some pertained to this post, so I’ve added some extra comments. Also, I needed to correct/clarify a few thngs. The blue stuff will be my last update to this post.

First thing that I should clarify, is that I don’t work for Embarcadero/CodeGear/Borland and never have. In fact, if you google me, you’re bound to come across a number of instances where I have had a real go at them. Sometimes over documentation, sometimes over Quality Central reports with all the required info that stay open, sometimes about I-don’t-remember-what.

I wrote the post of my own volition, because I thought it needed to be said. Onward then…

The one gripe that some commenters have raised, is that of documentation. Here I have to say, they have a point. For quite a while I actually had the Delphi 7 help files on hand on my development machine and there is an IDE expert that you can download that will allow you to use the Delphi 7 help files directly from the newer IDE. The new help files are also available online though, and I find Google is often better at finding things that any table of contents is.

Speaking of the IDE, I noticed a pattern in the comments. Those who don’t use the new IDE, hates it. It reminds me of a story my father-in-law once told me. His grandfather only ever rode in a car once. And he endured it for about five minutes before he demanded to be let out. The reason? The car was noisy and walking is less bumpy on uneven roads. So long distances he covered with the bicycle and shorter distances he walked.

If you really can’t stand the new IDE, there are three things you need:

  1. The IDE expert for the old help files
  2. DDevExtentions has a lot of cool things in it. The only uncool feature it has is the old-style component palette. If you hate the new one, use that. Update: And Delphi 2010 includes a new, significantly upgraded version of the palette. So when that ships, you finally have a choice of which one to use. That should lay the debate to rest, although I have a feeling the new and very shiny IDE insight feature may overtake both the palette and the toolbox. At least for me.
  3. Undock the IDE windows, so you can have the old chaotic layout that you love.

These seem to be the major things people hate about the new IDE, and they are all perfectly solvable (breakable?). And don’t even try to tell me how slow the new IDE is thanks to .NET – it starts up a helluvalot faster than Delphi 7 ever did if you launch the Delphi personality only.

The next big gripe is that third-party tools can give you a lot of the same functionality. A few slight issues with that.

Here is a smorgasbord of the third-party tools that were mentioned – I don’t think I missed any, but you’re welcome to check that I didn’t cheat:

  1. GExperts is fantastic but has not been updated at all since October 30, 2008. That is almost a year, folks. And those where compatibility and the first new expert for a while. A quick glance at the change log shows that the last significant version (1.3) came out almost four years ago. You’re right, absolutely the kind of thing you should depend on – a tool with very little support or progress in four years. Update: I don’t personally use GExperts anymore, in part because a lot of its best features are included in the newer IDE. But a lot of people still get a lot of value from it and it is of course available for Delphi 2009. The point here was that “I use GExperts” make a lousy excuse for not upgrading. Also, I’m told the support is really quite outstanding.
  2. But it gets worse. Someone actually mentioned Bold. Note that I didn’t link the URL, because BoldSoft doesn’t seem to even have it listed on their site anymore. In fact the latest relevant link I could find was this one, where it is explained that development stopped back in 2002 already! I know it may have been valuable back when you still lived with your mother (or had milk teeth), but your continued dependence on an extinct product is very dangerous indeed.
  3. Code Rush is fabulous, as is almost anything from DevExpress. As with almost anything from DevExpress it is also fabulously expensive. And it only improves the editor. And did I mention the Delphi version is extinct? Yeah. Or perhaps it is a typo on the website, but it is described as a “powerful Visual Studio® .NET add-on that…” blah blah blah.
  4. I have honestly never heard of cnPack before. It has actually been updated in the last couple of months and it may very well be enormously capable – I don’t know. I suspect it may be a tad dated though, given that they still link you through to Surprisingly, that link still works although perhaps someone should notify them Borland no longer has anything to do with Delphi and may in fact now have a preference for Cobol. On second thought, just leave it. Perhaps they’re happy that way.
  5. JCL. OK, first: I don’t like JCL, even though lots of other people do. But you do know it is available for Delphi 2009, don’t you?
  6. ModelMaker Code Explorer. Also available for Delphi 2009.

Third issue is about the new features.

Apparently, “Class Helpers are not fully documented because THEY ARE NOT DESIGNED TO BE USED IN YOUR APPLICATIONS!” And also “The documentation that DOES exist for them specifically states that they are not intended for general purpose use.” Uh-huh? Let’s double-check the documentation, shall we? The initial intent of the language feature was to provide compatibility between Delphi Win32 and Delphi.NET. They did this by providing language support for the Decorator pattern. The notion that class helpers must not be used have died out along with other such relics, like the belief that overloaded functions are too dangerous to be allowed in the language. Update: Yes I am aware that the link I supplied still mentions that it was meant for platform-RTL binding and should not be used in general designs. Three points here: First, it is documented just fine. Second, I never said it is the perfect way to extend classes that you can modify. You simply wouldn’ use it in the place of inheritance or simply adding what you want. It is a technique to extend classes that you cannot modify. I’ll post a more about that once the Delphi 2010 hype machine has quieted down a little. Third, the help entry text dates from at least Delphi 2005 and was superceded by this famous post which shows that even within CodeGear/Embarcadero the opinion has shifted. Delphi 2007’s GlassFrame property is in fact a fantastic example of one common use case for class helpers. And its use had nothing to do with .NET runtime compatibility.

And some complaints about how badly generics work. Funny, I use them whenever they make sense and have had only one real issue with them and that is a compiler bug unrelated to generics. Perhaps someone would like to check if the bug exists in Delphi 7?

Lastly, some people complain about things like strings in case-statements. Which of course you had in Delphi 7. Errr… wait, there is something wrong with that last sentence. Ditto for complaints about Delphi 2009 features that are not as well implemented as in Visual Studio. If Delphi 7 didn’t have them, the argument is flawed.

Lots of positive comments also, the best of which highlighted several big benefits that I didn’t even think of.

Give the newer Delphi versions a try. Not for a day, but for the next real project you tackle. I bet you’ll learn to like it very quickly.

Update: Changed the ending, because one of the posters (quite rightly) took issue with it.

Comments (50)

Why you really should upgrade from Delphi 7

Delphi 7 is probably the most popular version of Delphi that has ever shipped. So much so that several developers staunchly stand by their favourite of many years and refuse to move up.

But Delphi has really grown with some truly fabulous things getting added in the time since the old stalwart shipped. I have compiled a list of five reasons why I believe no Delphi developer should remain on Delphi 7. Unlike most of these “top 5” lists, mine is not a list of five magic bullet features, but rather five areas of importance.

So here is my list – in random order – of the top five reasons to upgrade from Delphi 7:

1. The new IDE. Yes, I know it is different from what you’ve grown used to in Delphi 7 and yes, I know it looks a lot like Visual Studio. But is a whole lot faster than Visual Studio 2008 and much more productive than Delphi 7. Stability is not a problem on Delphi 2007 and Delphi 2009 and several specific improvements make a fantastic difference:

  • The new component toolbox. If you really want to, you can use the legendary Andreas Hausladen’s component palette replacement. But you really shouldn’t. The old, horizontal layout is hugely wasteful and gets more and more inefficient as the number of components grow. The new one is more compact, reads easier, can be filtered, works great with the mouse wheel, works great with the keyboard and requires less mouse movement when exploring.
  • The editor has learnt some interesting new tricks, including code templates. You really want that. And Syncedit. And regions. And XML comments.
  • The CPU window can now show only the disassembly view if that is all you need. How sweet is that?
  • Build events can copy compiled files where they’ll be needed, append location info, run unit tests or do whatever you need them to. And multiple build configurations can be configured or stacked to create almost any system that makes sense to you. That is a huge upgrade right there.

2. New toys! The language has had a lot of new features added. A lot of those were added because they were needed by the .NET CLS. But some of what were added were completely novel. Like class helpers, which is a language construct to implement the Decorator pattern with. This feature is so cool that Microsoft aped it in C# 3.0 with extension methods. Add to that support for generics and anonymous methods and you end up with more expressive constructs that can lead to better – and less – code.

3. A lot of modernisation in the VCL. Unfortunately, the DBGrid still looks like a fugitive from Windows 3.1, but we now have support for a whole lot of modern features, like:

  • Vista glass and task dialogs.
  • Ribbon controls, AKA Office Fluent Interface.
  • Customisable hints that can provide any level of info, right up to the thumbnail previews that you see in Office 2007.
  • Lots of little UI touches, like text hints and balloon tips on edit controls.
  • TStringList can now manage the lifetime of the objects you stored (OwnsObjects property, like TObjectList).
  • Much improved, generics-savvy data structures. Dictionaries, stacks, queues, lists – all type-safe and all with object-aware versions that can manage the lifetime of the objects they store. I love ‘em.
  • Unicode! If you only need to develop for a single language this won’t be such a big benefit, but to thousands of applications this feature is a godsend.

4. It’s a good deal. Back when I used Delphi 7, C++Builder was separate and cost the same. I work at a company with a Software Assurance subscription and we get Delphi, C++Builder and Prism all for one single price. And I’m sure you’ve seen the Buy One Get One offer? I recon RAD Studio+Change Manager looks like an absolute winner.

5. Time marches on. The longer you put it off, the harder it gets to upgrade. If you took every version from Delphi 2005 onward, every upgrade would be small enough to be manageable. Even the Unicode port was relatively painless once our third-party controls became available. But jumping from Delphi 7 to Delphi 2009 is already quite a large amount of work. That is only going to keep growing as you continue to procrastinate.

And how about changes in the underlying operating system? Sure you can keep writing your own libraries to use the new features or keep ignoring them, but neither is a very good idea. And the rules keep changing – you don’t store setting files in Program Files anymore, when the mouse hovers over your application’s task button you should now show a preview and so on. Name and shame time: I love MediaMonkey, but their Delphi 7 app is starting to reek like an old-age home. My PC at home runs Windows 7 and MediaMonkey is a decade behind how my other apps behave.

Lastly, the community moves on too. The Delphi community is one of Delphi’s great strengths and through the years I have picked up probably thousands of code snippets that have made my work better in some way – even improve my way of thinking as a programmer. The longer you stay behind, the greater the percentage of advice, solutions, tips and humour that will be irrelevant to you.

To me, that is probably the scariest thought of all.

Comments (21)