Category Archives: software development

image, Apex and Web 2.0 vendor lock-in

There’s a debate under way about whether the new Apex language from represents a vendor lock-in. Sinclair Schuller says it does; David Berlind says mostly not. Berlind argues that the lock-in is mitigated since you are not forced to use Apex, but can use the same functionality via SOAP web services. I recently wrote a comment on the same topic for IT Week.

I have mixed feelings on the subject because Apex is such a great idea. To write code that runs on a web server today, you have to go through a procedure that starts with learning a language, whether PHP or Java or C# or Ruby or Perl, along with some kind of web framework. Then you have to figure out how to test and deploy your code to a web server, hopefully giving some consideration to security issues along the way.

With Apex, the process is simplified. Instead of writing an app offline and then working out how to deploy it, you can write the code within a web form and deploy it by clicking a button. If has done it right, the security risks are much less than with a conventional web app. By the way, you would normally work on a test copy of your live application so you do not have to inflict your buggy work-in-progress on your users. handles all the difficult choices about which app server to use, and keeping it patched and up-to-date.

It’s possible that Apex and technologies like it may do for web app development what blogging software has done for web content authoring, opening it up to a larger community, and improving productivity for existing skilled professionals.

Although Apex calls the same internal APIs that are exposed through web services, it has the potential for much better performance. Consider the scenario where you want to loop through 100,000 records in code. Doing that with web services will take an age; in fact, that sort of operation is not what web services are designed for. Apex can do it though. The implication is that although you can choose between Apex or Web services, the Web Services choice will not always be viable. Another factor, as I understand it, is that Apex code can be triggered by server-side events, functionality which cannot be replicated through the web services API. The choice which Berlind notes may not be so free after all.

Is Apex lock-in? I think it is. Build your app in Apex, which is a proprietary language, and you will not be able to take it elsewhere without considerable pain and of course porting the code.

That doesn’t make it bad. The industry lives with vendor lock-in. It may still be worth it.

At the same time, this is surely the primary question you have to ask before embarking on a major deployment. Do you trust to keep its subscription charges reasonable, its servers running satisfactorily, its technology competitive, now and for the forseeable future? A competitive advantage could transmute into a significant disadvantage if were to run into problems.


Moving to WordPress without breaking links

Some time back, I decided to migrate this blog to WordPress. Until today, I’ve been using a self-modified version of bBlog. It worked well, but WordPress has more to offer and has huge community support, so I’ve made the change. A few new things you will notice are the recent comments list, the search box, the blogroll, and limited html support in comments.

The change was delayed while I figured out how to handle old links. I didn’t want to break existing links to old blog entries, or to the blog home page; and I wanted to make it seamless for existing subscribers. In the end I did three things:

  • Installed WordPress into the same directory as the old blog
  • Modified index.php to redirect requests that point to old blog entries
  • Modified rss.php (the old feed url) so that it delivers the new WordPress feed

In other words, I’ve kept bBlog running in the same location as before. This trick works because the two systems only have one filename collision, which is index.php. The result is that links to old blog entries still work.

If you subscribe to the blog, you don’t have to change anything. The only annoyance is that you’ll likely get some duplicate posts, but I’m hoping that is better than having to re-subscribe.

I’ve only migrated a few recent posts and comments to the new blog. I might do the others, but it’s more likely that they will remain in the archive blog.


Users plead with Borland to give up .NET

Delphi user and Kylix enthusiast Simon Kissel (Kissel is the author of CrossKylix) has written a sharp critique of Borland’s developer tool strategy.

He says few are buying Borland’s .NET tools. They buy Delphi for its native code compiler, and need new features like Unicode and Win64 support. Borland (or DevCo) by contrast is focusing on .NET, but is failing because it cannot keep pace with Microsoft.

I am about 75% in agreement with Kissel. In addition, the splitting of DevCo from Borland, presuming it eventually completes, changes the dynamics in favour of native code. If you put ALM (Application Lifecycle Management) at the centre of your strategy, that pushes you towards .NET, which is great for Enterprise development. If you split off the pure development tools from the ALM side, that gives more voice to the non-Enterprise developers, where .NET has less appeal.

However, a key issue not covered by Kissel is that Win32 development is in decline. That decline will accelerate once Vista and .NET Framework 3.0 become widely deployed (admittedly that will take a couple of years at least). Another factor is the continuing growth in web applications and rich internet (or “smart client”) applications, for which Win32 is ill-suited. It would be tough for Borland to bet its future on a declining market.

Further, Kissel makes too much of how “The other big market player in native RAD Land, Microsoft, has just left the fields.” That’s true only up to a point. Microsoft has abandoned native code VB, but then again VB was never close to Delphi as a native RAD development tool; it did eventually get a native code compiler but always had big runtime dependencies and difficulty in making full use of the Windows API. In addition, Microsoft still has Visual FoxPro (more RAD than native) and Visual C++ (more native than RAD), so it hasn’t altogether abandoned the field.

What’s clear though is that Borland can’t continue with a .NET strategy based on supporting .NET features a year later than Microsoft. And it has to make more of its native code tools – though it actually took a big step in that direction with Delphi 2006, which is excellent for Win32 work.

I feel a little bad here. I said some years ago that Borland should embrace .NET. Still, I did also say this:

However, and it is a big hesitation, to prosper with .Net Borland needs to do more than simply build a Delphi for .Net at its own rather leisurely pace. To succeed the company needs to capture and pursue a vision of what .Net can do; RAD for the Enterprise, .Net beyond Windows; or whatever.

At the time I was hoping Borland would get 100% behind Mono and come up with elegant cross-platform .NET tools. That has never happened; though perhaps it still could.


Times Reader memory shock

I’m an admirer of Times Reader; in fact I’ve become something of an addict. Then a discussion about .NET performance prompted me to check the memory usage:

At 92MB working set and 50MB private working set, this application uses an alarming amount of memory. I found this interesting as it’s an example of a real-world Windows Presentation Foundation application. WPF is great to work with, but if it catches on, how many concurrent WPF apps will we be able to run before our shiny Vista systems choke?

Caveats: All three of Vista, WPF and Times Reader are in beta, so things could improve; then again all three are close to release, so this is a real concern. More research is needed.

Of course it’s possible that Times Reader is just holding far too much data in RAM, though it is such a great app in other respects that it is hard to believe.

Other points of interest: as you can see from the screenshot I have Paint.Net running as well as another .NET app, Guidance Explorer, both of which consume less than half the amount of memory. In fact, Paint.Net’s usage is not bad in this context, given its sophistication and the fact that image apps tend to be memory-hungry.

I’ll have another look when the full releases are available.


I investigated how much overhead WPF is introducing by comparing two trivial to-do list apps of identical functionality. One is XAML/VB.NET; the other is Windows Forms. Both compiled to release builds in VS 2005. Here are the results:


Working set: 30MB
Private working set: 11MB
Commit size: 44.5 MB

Windows Forms

Working set: 13.5MB
Private working set: 3MB
Commit size: 15MB

So on the face of it, there is a substantial memory jump for WPF.