Category Archives: delphi

CodeGear puts 64-bit on the roadmap

CodeGear has updated its Delphi Roadmap. Newly added is Delphi codename “Commodore”, set for Winter 2008, which is to include native 64-bit development. After that the company is promising to focus on multi-core/multi-threaded development.

What else is coming? Delphi “Highlander”, due later this year, is a belated update to Delphi .NET, will support .NET 2.0, and has a new .NET database called SQL Datastore (likely some sort of port of JDataStore). No word on WPF or LINQ though – CodeGear is still playing catch-up here.

Delphi “Tiburón”, due next year, will bring another long-requested feature: full Unicode compatibility in the Win32 Delphi language and VCL (Visual Component Library), along with parameterized types. C++Builder “Barracuda” will follow, bringing the same features to C++.

The really interesting stuff comes at the end. CodeGear is “researching” a number of areas includes development for mobile devices, Rich Internet Applications, and cross-compilation to other operating systems. All this is at the “sometime, never” end of the time scale, so don’t get too excited.

All the above will be welcomed by Delphi developers, though I fear most of the potential .NET market has already been ceded to Visual Studio.

It’s not a bad roadmap though. That said, to my mind the most critical issue for CodeGear is quality control. Poor quality is what spoilt the launch of Delphi for PHP earlier this year. I discussed this issue with the new CEO Jim Douglas and EMEA product Director Jason Vokes when I was researching a recent article for The Register, and got the sense that the familiar pressure of having to release product (ready or not) to hit particular financial quarters is still a problem. Still, Delphi 2007 was a smoother launch than Delphi 2006, and that was miles better than Delphi 2005, so leaving aside Delphi for PHP things are improving.

AppForge: a product activation nightmare

Nobody likes product activation, but it is used increasingly by software vendors in search of more effective anti-piracy measures. Microsoft is the most prominent example, but many smaller vendors do the same. Codegear, for instance, use activation for Delphi. Even if you have a valid registration key, you cannot use the product until it has checked in with Codegear’s license server.

Last month Appforge went bust. The company made a development tool called CrossFire, which lets you code in Visual Basic or C# but cross-compile for numerous platforms including Palm, Nokia’s Series 60 and Series 80, Blackberry and Windows Mobile. A useful tool, but AppForge has an activation system that applies both to the development tool and in many cases to the client runtimes.

The AppForge license server is now offline. Result: developers with CrossFire applications and fully paid-up licenses can no longer deploy their products.

AppForge has been acquired by Oracle, but apparently Oracle has no interest in continuing the CrossFire product. Here’s what Oracle says:

Please note that Oracle’s acquisition of AppForge’s intellectual property did not include the purchase of the company as a whole, or the purchase of other AppForge assets including its customer contracts. Accordingly, Oracle does not plan to sell or provide support for former AppForge products going forward.

Former customers are fighting back. There is talk of a competition to crack AppForge activation: money for the prize is being put on the table.

What about Oracle? Is it really so difficult to resurrect the AppForge license server? Ending all support and development for a product is bad enough; robbing existing users of the right to use it seems extreme.

There may yet be a happy ending. But for now, this really is the nightmare scenario that opponents of the product activation concept feared. No, I don’t think something similar could happen to Windows and Office; but clearly there are real risks when using products from smaller vendors.

A solution is to use some form of escrow where unlocked versions of the software are guaranteed to be made available in the event that the original company can no longer offer activation services. The AppForge saga suggests that customers should insist on this or some alternative protection before committing to activation-protected software.


Why the change of CEO at CodeGear?

CodeGear has a new CEO. But why? There’s the usual bland stuff in the press release:

Today we made a change to the leadership team at CodeGear.  Jim Douglas is joining as CEO of CodeGear.  Jim will be responsible for driving CodeGear to the next level, building on the solid foundation and momentum achieved by the CodeGear team under Ben Smith’s leadership.

Departing CEO Ben Smith has a blog entry that is no more revealing.

Judging by comments on the Borland newgroups, developers are fearing the worst. The problem: a change of CEO is a sign of instability, when CodeGear customers need reassurance that their preferred tools are in good hands. I didn’t see any previous suggestion that Smith’s appointment was intended to be short-term.

To make matters worse, there are signs that both Delphi for PHP (see here) and Delphi 2007 (see here) were released too quickly – especially Delphi for PHP. Strategically unwise.

There’s still nothing to touch Delphi for native Windows (if you don’t need 64-bit). And tackling PHP tools is a great idea. But in a difficult market the company cannot afford many slip-ups.


SQLite: what a difference transactions make

I received an email from something trying my simple Delphi wrapper for Sqlite. He wanted to add a million rows to a table of 10 columns of doubles, but was disappointed with the speed.

I tried with your SQL commands from the wrapper and just for 10000 elements it took me for ages…

I had a hunch that wrapping the inserts in a transaction might solve this one, and so it proved. The difference is staggering.

10,000 rows in 2 seconds, 1 million in under a minute.

Without the transaction it takes, well, forever, as the email says.

Worth noting if you use Sqlite; and in fact, many database engines behave like this. The reason I guess is that if you do not explicitly place a sequence of SQL statements within a transaction, then each statement is in effect its own transaction. That means the database engine has a lot of housekeeping to do in order to ensure that the changes were really written to disk, and in opening, writing and closing the journal file.


Technorati tags: , , ,

Delphi 2007 is done

CodeGear says it has completed Delphi 2007, its RAD development tool for Windows. What’s notable about Delphi 2007? First, it’s Win32 only. Borland CodeGear hasn’t yet won over many .NET developers, so it took the decision to concentrate on native code in this release, although CodeGear is not abandoning .NET completely.

Second, it builds apps that work right on Windows Vista.

Third, there’s a new database API (CodeGear calls it an “architecture”) called DBX4; I’ve not investigated this yet. 

Fourth, it’s mostly binary-compatible with Delphi 2006 so that existing add-ins should work.

Fifth, it uses MSBuild (same as Visual Studio 2005), which is good news for anyone with a non-trivial build process.

Delphi 2006 was a huge improvement over the two previous versions (Delphi 8 and Delphi 2005). Version 8 was for .NET only, bypassed by most Delphi developers. 2005 brought .NET and Win32 together, but the IDE was barely usable. 2006 is pretty good; it looks as if 2007 may be better still. Although the feature set is not particularly exciting, the product is said to be faster and more reliable, which is what Delphi developers care about most. I will be reviewing the release shortly and will post links when available.


Technorati tags: , , ,

Google can’t count

CodeGear’s Anders Ohlsson is excited because Google shows over half a million hits for “Delphi for PHP”. Even with the quotes.

I get the same results. More, in fact. Google says 654,000 hits.

Now try reading them. I get to page 35, then the hits come to a halt. There are 10 hits per page so that makes, hmmm, 350 hits. A bit less exciting. Let’s be honest, a lot less exciting. The real figure is probably a little higher, but not by half a million.

I do get this line (we’ve all seen it before):

In order to show you the most relevant results, we have omitted some entries very similar to the 341 already displayed. If you like, you can repeat the search with the omitted results included.

Trying the “complete” search does get more results, but they are just as repetitive as Google warns. Google appears to limit results to 1000 hits, so there is no obvious way to find out where the other alleged 653,000 hits can be found.

Microsoft’s Live Search says 24,473 results, but the trail runs out on page 80. That’s 800. So Microsoft Live Search can’t count either.

Yahoo says 322,000, but like Google can only show 1000 of them. I remain sceptical about the missing 321,000.

I’ve noticed this before. Certain phrases trigger huge numbers of alleged hits, but they vanish if you try to view them. Others seem to work fine. Perhaps someone more knowledgeable about the inner workings of search engines can explain why. It appears to be an unreliable measure.


Technorati tags: , ,

CodeGear (Borland) to support PHP tools

New is drifting out concerning CodeGear’s plans to evolve its development tools. Here’s a snippet from Michael Swindell, CodeGear’s VP of products, writing in the Delphi non-technical newsgroup:

Dynamic languages such as PHP and Ruby new areas where we will be going. Some products will be more in the RAD camp, aligned with Delphi and VCL, and others will be more in the Open Source/Eclipse/Enterprise world. As a developer focused company we cannot be just the Object Pascal, C++, Java development company… there is way too much happening in the world of programming and languages and frameworks for us to stand still.

All a bit vague, but I do get the impression of renewed energy at CodeGear now that it is somewhat independent of its parent company, Borland. There are also mutters about Ruby and about another take on Kylix, Delphi for Linux.

Is PHP a good bet? Possibly, insofar as PHP is hugely popular but not particularly well supported by development tools. Personally I’d rather work in ASP.NET or Java; yet I have huge admiration for WordPress, to mention just one PHP-based application. As ever, CodeGear will be up against strong free tools, not least the existing Eclipse PHP Development Tool.

Cast your mind back 12 years, if you have been around that long. Borland’s Delphi 1.0, released in 1995, was worth paying for, in fact a fantastic bargain, because it cracked the problem of combining visual RAD productivity and fast native compiled code. What could have a similar impact today, when Microsoft has Windows development wrapped up, and Java has a surfeit of high quality free tools? I don’t find it easy to see.

Technorati tags: , , , , ,

Delphi and Windows Installer: small problem, fiddly solution

A Windows technology I love to hate is the Windows Installer, the setup engine built into Windows that is hard to avoid if you want to comply with Microsoft logo requirements and system management tools.

I have a little application which uses this, which uses a custom action written in Delphi. Originally this was an executable with some command-line arguments, which worked fine except that occasionally the custom action needs to show a dialog. Sometimes (not always) this would show up behind the main setup window, causing users to think that setup had hung.

Incidentally, I saw this exact problem when installing Delphi itself on Windows Vista.

It is all to do with a long-standing and complex Windows issue concerning whether applications can force a window to be on top of other windows. In a nutshell, a well-behaved application should not normally do this, though it can make itself flash in the taskbar. Not a great user experience. However, you can ensure that a window is on top within a specific application (in this case the setup), provided you know the handle of that application’s main window. Unfortunately there is no obvious way to get this value, other than via an API called FindWindow which might occasionally find the wrong window, for example if the user managed to open two instances of the setup.

The correct solution for this is not to use an EXE as a custom actions, but rather to use a DLL. This runs in-process with the setup, which enables it to call MSI (Microsoft Installer) functions like MsiProcessMessage, enabling it to show dialogs safely. You can also do useful things like writing entries to the installer log. (Thanks to Mike on the newsgroup for this tip).

Therefore I converted the custom action to a DLL. Not too difficult; but I discovered that the Windows Installer is not especially flexible about calling custom actions in DLLs. The only argument it can (and must) give is a handle to itself. That’s unlikely to be enough. So how do you pass data to your custom action?

If you use an MSI editor such as that in Visual Studio, you will see a property called CustomActionData which you can set when calling a custom action. All this does is to set a property within the installer. Your custom action can then call MsiGetProperty to retrieve the value. It is a single string; if you want to pass several values, you need to use some sort of delimiter and parse it within your custom action code.

Although many Windows API functions have Delphi wrappers built into Delphi’s runtime library, the Installer functions are not among them. I hate reinventing the wheel, so I searched for a Delphi wrapper for msi.dll. It’s not easy to find, suggesting that few developers have gone down this route, though it is part of some versions of the Project JEDI JCL (JEDI component library). In the end it was easier to find the header files in the SDK and do my own wrapper for the few functions I needed.

Delphi is a great tool, but at times like this you realise that there is a price to pay for not falling in with the crowd and using Visual C++. All the low-level Windows API documentation assumes that you are at least using C++.

The good news: it all works fine. Dialogs appear reliably above the setup window, and access to the MSI API may prove useful for other things as well.

That said, it all goes to demonstrate why developers sometimes take ages to fix seemingly simple problems.


Technorati tags: , , ,

Amazon S3 sample update

When I added background threading to my Delphi S3 sample, I inadvertently broke the ability to connect with SSL. I’ve fixed the problem, and included the necessary openssl DLLs in the download, so you can run this even if you don’t have Delphi. I use it to backup my own files.

Amazon S3 is a web service for storing files on the internet. It works well and is good value compared to most online storage services.

The distinctive features of this sample are first, that it is Delphi, and second, that it is native Win32. Most of the samples out there are for Java, .NET or scripting languages.

Technorati tags: , ,