Marco has announced a Delphi-specific search engine.
Technorati Tags: Delphi, thedelphisearch
Marco has announced a Delphi-specific search engine.
Technorati Tags: Delphi, thedelphisearch
CodeGear – Formerly Borland’s Developer Tools Group – Expected to Become a Separate Wholly Owned Subsidiary by Early 2007
CUPERTINO, Calif.,— November 14, 2006 — Borland Software Corporation (NASDAQ: BORL, www.borland.com), today announced its decision to separate the Developer Tools Group into a wholly-owned subsidiary focused on maximizing developer productivity. The newly formed operation, CodeGear, will be responsible for advancing the four primary product lines formerly associated with Borland’s Integrated Development Environment (IDE) business. These include Developer Studio (Delphi®, C++Builder® and C#Builder®), JBuilder® (including the upcoming Eclipse-based “Peloton” offering), Turbo® and Interbase.
The full announcement can be found here:
http://bdn.borland.com:80/article/33819
On the 22nd September 2006, Gnostice released version 2.41 of the PDFToolkit and eDocEngine for the [Delphi] VCL. As regular readers of this blog will know, I’m a great fan of Gnostice products – their PDF creation tools and components are a real boon to developers. Of course, this continued support for the Delphi VCL for Win32 and .net despite the divestment of the Borland IDEs, is confirmation that Gnostice passionately believe in the Delphi product name and the VCL.
Indeed, one need only look at the PDFToolkit VCL “road-map” here to realise that Gnostice are intent on producing an astonishingly feature complete PDF component set…writing for the VCL using the VCL – V3.0 looks to be awesome. Not surprisingly, there’s a similar roadmap for eDocEngine VCL – plans all the way up to V3.0 are well documented over here.
In an earlier post, I touched on the fact that Borland IDE divestment and the direction in which many component vendors seemed to be taking their products (towards .net and C#). Whilst this seems to still be the case, it’s worth noting that Gnostice are firmly focusing on three market spaces: the traditional Delphi VCL, .NET and Java. Their PDFOne .NET product provides support for PDF creation inside Borland Developer Studio 2005 and 2006 – with demonstrations being provided using the C# language, whereas their eDocEngine and PDFToolkit are fairly and squarely targeted at the VCL.
Of course now that the Turbo range of products are available, we see a renewed interest in the Delphi language and its direction. Knowing that Microsoft’s Express Editions are free, I can’t see the Turbo products being direct competition, therefore their existence presumably serves to further the Delphi language and provide heritage continuance (outside of the more expensive Borland Developer Studio-style all-encompassing product set). Given the career path of Delphi’s original architect, Anders Heilsberg (from Borland to Microsoft), this renewed interest might be what it takes to let Delphi and the Turbo products catch up with Microsoft. After all, here we are seeing much talk of .NET 3.0, yet Borland Developer Studio 2006 still only targets .NET 1.1. That said, Bob Swart makes mention of the next version of Delphi that will support .net 2.0, codenamed Highlander, over here.
I would like to see the Turbo products enjoy a shorter release cycle, providing them with an opportunity to target .net 2.0 and 3.0. With the next version of Visual Studio (Orcas) just around the corner, there’s not much time left to achieve this, but it should be a goal nonetheless.
Despite my earlier concerns about the future of Delphi and its language, it seems that there is a rekindled enthusiasm for the Delphi product set, fuelled more so by the reappearance of the Turbo mark that made Borland who they are today. Indeed it was the original Turbo range that provided the inspiration for the VCL and their [Borland] re-introduction of this famous branding will take the VCL to new heights – a point not missed by Gnostice who have plans in place for native VCL product releases/upgrades right into 2007.
eDocEngine VCL – comprehensive, generic, 100% VCL electronic document creation component suite for Borland® Delphi™ and Borland® C++Builder™.
PDFtoolkit VCL – powerful component set for Borland® Delphi™ and Borland® C++Builder™ to manage, manipulate, view, print, enhance PDF documents and process PDF eForms.
PDFOne .NET – 100% .NET component library to implement PDF based software solutions.
PDFOne Java – 100% Java library to implement PDF based software solutions.
Links
http://www.gnostice.com
Gnostice Plans for 2006
PDF Toolkit VCL – Road-map
eDocEngine VCL – Road-map
Turbo Downloads
TurboExplorer
Technorati Tags: Gnostice, PDF, VCL, eDocEngine, PDFToolkit
Via Alistair’s cakeBlog, I found this to be a good read.
Now, I am a huge fan of XML, and have gone through [my] three phases of XML usage:
1. 1999-2000: XML everywhere. Used it for everything, list boxes, drop-down menus, you name it – all populated from SQL Server tables. It was way cool. But, half way through the project’s duration (not feature set), realisation set in, hey, it take a lot of time to work with XML if it’s everywhere. Why don’t we just use it where it’ll provide some benefits?
2. 2000-2002: Refactoring from XML everywhere to XML here and there. Anywhere data had to cross boundaries, XML has its place – combined with web services, XML was starting to take shape.
3. 2002-today: Use it wisely…for syndication/content aggregation and connected systems. Extending the crossing of boundaries to between disparate systems.
I’m still in the third phase, although I have an idea about how XML will play a part in the next [fourth] phase, I can’t reveal it here just yet. It’s just not firmed up enough to write much about it.
Naturally, whenever I hear folks ranting on about XML and how bloated it is, I’m right in there kicking off a debate! However, Allen’s Just Say No to XML article is one that I will happily agree with. XML provides us with a super means of connecting systems together. However, by virtue of the XML DOM, it provides us with a parser and a syntax checker. Couple and XML document with an XML Schema, and suddenly we can control the order of the XML elements in the XML document and control data types…we’ve kind of got ourselves a language parser. And it seems that folks have latched on to this concept and are using XML documents to convey more than data and meaning, but to carry out specific programming instructions, i.e. XML, as a mark-up language, is being used as a programming language. Except it won’t be any programming language that you or I are familiar with. It’s likely to be a hybrid of the original author’s favourite “instructions”. There will be no language constructs, such as partial classes, heck there won’t even be classes as we know them. And, in the absence of XSLT, it’s likely to be procedural in nature.
If you’re thinking of using an XML document to add some form of programmatic instructions to your application, please, don’t. Learn how to use some of the many [free] language parsers that are out there, integrate them into your application and you’ll have a much more maintainable and robust application. And it’ll probably save you a lot of time – you won’t be writing what amounts to an interpreter were you to use XML elements as instructions.
Technorati Tags: XML, bloat, languages, interpreters, Pascal, parsers, yacc, lexx, web services, XSLT
Today saw me run my Test-Driven Development and Code Coverage session for the third time in as many months. Whilst the audience was fewer in number than usual, the interactivity made it a good session for me (and for the attendees from what I can gather). One thing that came out of this delivery was the need to examine user interface testing in more detail – something for 2007 I think.
The source code, crib notes and slide deck are available here.
About TeamCity
Team City is integrated team environment that enables running and monitoring of build processes, and facilitates integration of changes for developers working on both Java and .Net platforms.
Key features include:
For more info on the features, visit http://www.jetbrains.com/teamcity/
Like other JetBrains products, TeamCity is created by and for professional developers. It is already being used by JetBrain’s own teams every day to run IntelliJ IDEA, ReSharper, and even its own builds.
I am pleased to see yet another company embracing the blogging phenomena – it [blogging] really does allow developers to reach out to their audience and communicate in a collaborative environment where things actually happen.
JetBrains have started a .NET tools blog, using none other than WordPress.
All the usual JetBrains folks are blogging:
Oleg Stepanov | Sergey Dmitriev | Alex Tkachman | Dmitry Jemerov | Kir Maximov | Sasha Maximova | Mike Aizatsky
It’s probable that you have heard of JetBrains, especially if you are using such products as ReSharper, dotTrace, IntelliJ IDEA or you may well be using their RSS reader OMEA.
They’ve also opened up access to the dotTrace 2.0 Early Access Programme (EAP). More can be found here.
At some point in your career as a developer, you will need to optimise your code to make it run faster or more economically. If you have not been asked by a user to “make that report or feature run/finish faster”, hang on in there, your time will not be far off.
There are many ways of optimising your code such that it offers the user a more responsive experience (i.e. it runs or feels faster). You may well have implemented an algorithm in the knowledge that it is slow, but gets the job done (e.g. a bubble sort). You have then gone on to optimise the algorithm by replacing it with something that you know to be much faster (e.g. the quicksort). Alternatively, your application may have grown over a long period of time, some calculations are now relying on so much data that it is time to re-think how they work. Or, as is the case here, two factors have resulted in part of my application taking a performance hit:
How did the need for optimisation raise its head? Well, in this case, simply adding 20-30 records to my application then viewing the on-screen reports was sufficient enough to make me augment the code behind the reports with an hourglass (waitcursor). Whilst the reports worked, the lack of user feedback after the hourglass appeared was of concern to me. For this particular application, 20-30 records is a little more than the average that I would expect it to have to cope with.
Elementary Execution Timing
Luckily, the Win32 API provides a couple of useful methods that we can use to “time” our function calls. Here’s a class that surfaces those methods for use in C#:
[code lang=”C#”]
using System.Runtime.InteropServices;
namespace uSimpleExecutionTimer
{
public class SimpleExecutionTimer
{
[DllImport(“kernel32.dll”)]
extern static short QueryPerformanceCounter(ref long x);
[DllImport(“kernel32.dll”)]
extern static short QueryPerformanceFrequency(ref long x);
private long counter1 = 0;
private long counter2 = 0;
private long freq = 0;
public long TickCount
{
get { return counter2 – counter1; }
}
public long TickFrequency
{
get { return freq; }
}
public long StartTick
{
get { return counter1; }
}
public long EndTick
{
get { return counter2; }
}
public double TickCountSeconds
{
get { return (counter2 – counter1) * 1.0 / freq; }
}
public bool Start()
{
return QueryPerformanceCounter(ref counter1) != 0;
}
public void Stop()
{
QueryPerformanceCounter(ref counter2);
QueryPerformanceFrequency(ref freq);
}
}
}
[/code]
In use, it looks like this:
[code lang=”‘C#”]
SimpleExecutionTimer set = new SimpleExecutionTimer();
set.Start();
PopulateSummaryGrid();
PopulateDetailGrid();
set.Stop();
MessageBox.Show(set.TickCount.ToString());
[/code]
Granted, you might want to do something a little more scientific than a simple MessageBox.Show, however this is enough to give us our first clue relating to the execution time of the two Populate…() methods.
Before optimisation
When I measured the execution time of the two Populate…() methods in my un-optimised application, the TickCount was 14,870,258. With a QueryPerformanceFrequency of 3579545, that made for a delay of over 4 seconds. Given that there were only 20 records being processed, 4 seconds is unacceptable, even if the results are correct. With a few other things thrown into the equation, we were at nearly 30 seconds as noted earlier.
The problem with augmentation
Of course, whilst the use of QueryPerformanceCounter/SimpleExecutionTimer is the need to add extra lines of code to your application. Removing the lines of code often means “commenting out” ot physically deleting the lines – both of which involve you touching your code thus introducing the possibility of accidental error. Perhaps more obviously, adding extra lines of code to your application necessitates at least a partial re-compile.
The problem: well, without going into detail, I’ll save that for another posting/review, it was compounded calculations.
Basically, I had a series of about 15 calculations like so:
a = CalcA(); // Iterates over a recordset performing up to 15 calculations per record
b = CalcB(); // Iterates over the same recordset performing a different calculation, again 15 times per record
c = (a + b) + 5% of (a+b);
d = c + 10% of c
…
My application required access to a and b on their own, but also required access to c. Simplicity and neatness meant that my calculations, whilst elegant, were repetitive and rather slow. Fortunately I had identified this up front, and wanted to move the application to “feature complete” before spending time optimising it. Thus when my application requested the value of c it actually went and recalculated a and b. Twice. And then we have the calculation for d…you can see the repetition taking its toll, however the calculations are reasonably elegant and obvious.
The solution: I created a new class that performed the calculations once and once only. With the problem identified and a solution in place, how long did the two Populate…() methods take? Well, the results were somewhat good: the TickCount was only 75,000…fractions of a second. So fast, the populating of the two grids appeared instantaneous. So much so, I could have disabled the code that turned the hourglass on and off! (But I didn’t!)
Code augmentation (adding extra lines of code) is not too bad if you are looking to perform a series of benchmarking exercises. For example, a few years ago I did some work that benchmarked the XML Document Object Model (DOM) versus the Simple API for XML (SAX). I wrote a small application that used QueryPerformanceCounter to monitor the results of loading small and large XML documents whilst taking into account the effects of caching. In this scenario, code augmentation prove to be rather useful, the code itself was never going to reach “Production” and was merely used for the benchmarking exercise.
Anyway, I hope that you’ll find QueryPerformanceCounter of some use in your applications.
[Warning: thought gathering rambling follows, coherence might be sacrificed.]
Following Tod Nielsen’s letter announcing that Borland would be divesting their IDE product lines, driving an even tighter focus on the Application Lifecycle Management (ALM) market, what future lies ahead for those of us who have been using Delphi for most of the last eleven years?
I know that I am not alone in having an opinion about this divestment, and it’s one that may result in a further blog posting. Even some Microsoft employees have a very heavy interest in Borland’s divestment plans, some who were/are very close to the Delphi scene.
However, the purpose of this posting to two-fold:
Gnostice have produced a product for use in the .net environment. Without splitting hairs, that means products like: Borland Developer Studio 2005/6 (Delphi 2005/6), Visual Studio 2003/5, Visual C#/VB Express Editions. Given that Delphi 200x targets .net 1.1, Gnostice were wise to produce assemblies for both .net 1.1 and .net 2.0. The demonstration application that is supplied with PDFOne is written using C#…which means that it will work with Delphi 200x (via its “C#Builder” or C# personality) and it will work in the Microsoft IDEs too.
Of the other vendors who are moving their components (demonstrations and documentation too) from the VCL to .net, what if a number of them started ignoring true Delphi and provided C# examples? I guess most of us would just muck in and convert the code on an as-needed basis, after all, it’s not very difficult converting C# examples into true Delphi code (and vice versa). Certainly it would make me think about whether I should be writing any new applications using true Delphi code.
The importance of the “Delphi Language” is gradually being eaten away by the almost omnipresent C#. There are folks out there who believe C# is the best thing since sliced bread. However, us folks in the Delphi world have enjoyed virtually everything that C# has to offer today. Granted language progression slowed down somewhat when Anders Heilsberg joined Microsoft (see his TechTalk here). C#, and parts of the .NET framework (especially 1.1) are not as well abstracted as people might think, especially those of us with a Delphi background, a point that I made during my recent lament about Borland and .NET:
…is .NET 2.0 up-to-date with regard to the needs of today’s developer? I’m not so sure: Delphi was the first product to simplify Windows-based development with its glorious abstractions around WndProc and the Windows messaging sub-system. No longer did we have to write code to create treeviews, add nodes, or draw them in special ways, etc. Win32 development with Delphi was almost reduced mouse clicks. Visual Studio for .NET 1.1 brought a similar IDE metaphor to the .NET world, however it lacked a number of Win32-style events that we in the Delphi world take for granted, such as the simple ability to have owner draw controls (have you never wanted to make root nodes in a treeview bold?) In .NET 1.1, it’s back to basics, you have to implement everything yourself (as described in these hoops and by the example here.)
So Delphi 200x IDEs may be relegated to being competition for Microsoft’s IDEs. Is that such a bad thing? Can the market withstand such competition? Well, Borland obviously have a view on the competitive aspects of their IDE – they’re selling it off. By selling it off, they are telling me two things:
Delphi itself, as a product, has always enjoyed a lot of kudos because of its legacy support, i.e. applications written using previous versions would re-compile with newer versions. The only problem in this legacy support scenario is third party components. [Borland, please note, this is not a criticism] For years Borland have charged circa £1000 for an upgrade to the next major version or nearly £2000 for a new purchase. Now, I am a Delphi fanatic and have been for 10 years. That’s a lot of upgrade cash. I’ve lost track of the number of Delphi developers who recite the same story to me, especially at user group meetings and developer events.
It’s one thing migrating a vanilla Delphi application from one version to the next major version, it’s another thing to migrate an application that is “third party component heavy”. It’s another thing because we have to shell out for the third party components that match the version of Delphi we’re upgrading to. If you’re doing well, the third party component vendor(s) have kept up and their products are available when you need them…not months after the release of Delphi itself.
On the other hand, and keeping things equal, I like the Microsoft IDEs too. Whilst both Borland and Microsoft IDEs require huge amounts of desktop real estate (screen resolution), each of the respective IDEs have a number of features that make them a delight to work with. Granted, in terms of developer productivity, they are behind the likes of IntelliJ, although it’s authors are making great efforts to correct that as Rob Lally confirms in his write up here (expect a Resharper review to appear here and over at Scottish Developers real soon now!)
I wonder if the recent emphasis on C# signifies the demise of what we know as the “Delphi Language”? Two things will provide the answer: time and the new DevCo who take over the Borland IDE market space. Will there be developer consultation? Will there be a customer satisfaction survey that lets us suggest what language features to important to us? I certainly hope so.
—
Further Reading
Borland rides Segue on trip out of IDE biz
Borland gambles without developers
Marco Cantu’s Support Delphi blog posting.
DavidI’s posting is here.
http://www.regdeveloper.co.uk/2006/03/07/borland_ditches_delphi/
Hopefully this posting is merely an April Fool’s joke?
Product Roadmap
Borland wants to be a Red Hat for developers
I’ve been looking at Visual C# Express Edition, which according to this blog posting is now free forever. Specifically, I’ve been looking at the functionality differences between the Express Editions and the fully-fledged Visual Studio Professional et al.
However, before I start to blog about the differences, I thought it prudent to let you know the benefits of registering these free editions. When I registered my copy of Visual C# Express Edition, I was offered access to a portal that gave me the chance to download this little lot of goodies:
IconBuffet Studio Edition Icon Suite
A collection of over 100 professional, royalty-free stock icons from IconBuffet.com. The IconBuffet Studio Suite collection contains core icons from several of IconBuffet’s most popular hand-crafted stock icon collections. As part of this promotion, you are free to use these icons in your desktop and web application development.
Microsoft Visual C# 2005 Express Edition – Build a Program Now! Document Microsoft® Visual C#™ 2005 Express Edition: Build a Program Now!
This fun and highly visual guide walks you through a complete programming project—a desktop weather-reporting application—from start to finish. You’ll learn how to put the lightweight, easy-to-use tools in Visual C# Express to work right away—creating, compiling, testing, and delivering your first ready-to-use program. You’ll get expert tips, coaching, and visual examples at each step of the way, along with pointers to additional learning resources.
Graphics Server .NET – Utility – Graphics Server .NET
Experience Interactive Chart Design with Graphics Server .NET. Learn how fast and easy it is to design a chart and integrate it with your Visual Studio 2005 application with our new Interactive Designer. Professional looking results, fast development and reasonable prices for both Win and Web Forms.
/n software IPWorks! ADO.NET Data Provider – Utility /n software IP*Works! ADO.NET Data Provider
Free single machine license of IP*Works! ADO.NET Data Provider. With IP*Works! you can use SQL queries and data objects built on the .NET Framework to easily access data for Internet development. Implements a standard Microsoft .NET Data Provider for accessing Email (POP, IMAP, SMTP), News (NNTP), and RSS.
WebPlanner 2005 – Utility – ComponentScience WebPlanner 2005
The scheduling component for ASP.NET 2.0. WebPlanner 2005 for ASP.NET 2.0 is a fully functional scheduling component for day, week, month and timeline rendering. WebPlanner provides drag and drop features and is compatible with Internet Explorer, FireFox, Mozilla and Opera. It also includes a MonthPlanner control as an extra bonus.
Corbis Images – Utility
An assortment of 250 royalty-free images from Corbis for inclusion in your web sites and applications.
There’s a good chance that more goodies will be made available, so it’s worth registering and worth periodically checking to see if any new stuff as been made available!