Monday, February 23, 2009

Xbase++ vs Harbours: Clarifications on Multi-threading by Steffen F. Pirsig

Sorry to use your blog to comment on the comments of others, as I think this is not the idea of a blog. Anyway please allow me to clarify my statement. I said "clean and easy to use way of multithreading", i didn’t say the Harbours don’t support Multithreading. My statement is still true, even so Harbour and xHarbour have implemented the ability to execute code in multiple threads and have implemented some of the interfaces Xbase++ provides in one way or another. They are still far away from the idea and concepts of Xbase++ in that area. In addition Harbour and xHarbour implemented different semantics of isolation. Which makes porting of complex MT applications for sure a mess. Let me clarify that.

Multithreading as the ability to execute code in different code paths is a feature of modern OS sinces decades. The problem with MT is that it adds another dimension of complexity to the developers task. While with single threaded apps. the developer needs only to think in a more or less sequential way with MT each execution path adds a new dimentions to the equation of programm complexity. Development languages supporting MT such as Delphi, .NET (C#,VB) or Harbour and xHarbour support MT thats correct, but they do not remove the burden of correctness from the programmer. It is in the sole responsibility of the programmer to ensure programm correctness in two different areas; data-consistency and algorithm isolation.

The problem of data consistency occurs as soon as more than one thread is accessing the same data - such as a simple string or an array. Besides nuances in terms of single or multiple readers/writers the consistency of the data must be ensured, so developers are forced to use mutex-semaphores or other higher level concepts such monitors, guards... to ensure data-consistency.

Algorithm isolation is somewhat related to data-consistency, it becomes obvious that a linked-list accessed from multiple threads must be protected otherwise dangling pointer occurs. But what about a table/relation of a database. The problem here is that concurrency inside the process can be resolved - but this type of "isolation" does break the semantics of the isolation principles which are already provided by the underlying dbms (sql-isolation-levels, record or file locks, transactions). Therefore algorithm isolation/correctness is a complete different beast as it is located at a very high semantic level of the task.

Alaska Software has put an enormous amount of research efforts into that area and we have more than a decade of practical experience with that area based on real world customers and real world applications. From that point of view I would like to reiterate my initial statement "As of today there is still no tool available in the market which provides that clean and easy to use way of multithreading".

Lets start with xHarbour, its MT implementation is not well thought, as it provides MT features to the programmer without any model, just the features. xHarbour even allows the usage of a workarea from different threads which is a violation of fundamental dbms isolation principles. In fact xHarbour ist just a system language in the sense of MT and makes life not really easier compared with other system languages. Therefore there is no value in besides being able to do MT. Also keep in mind due to the historical burden of the VM and RT core the MT feature is implemented in a way making it impossible to scale in future multi-core scenarios (see later-note).

Harbour is better here because if follows more the principles of Xbase++, while I am not sure if the Harbour people have decided to adapt the Xbase++ model for compatibility reasons or not I am glad to see that they followed our models point of view. The issues with Harbour however is that it suffers from the shortcoming of its runtime in general, the VM design and of course the way how datatypes - the blood of a language - are handled. It is still in a 1980 architectual style centered around the original concept how Clipper did it. This is also true for xHarbour, so both suffer from the fact that MT was added I think in 2007, while the VM and RT core is from 1999 - without having MT in mind.

This is in fact one of the biggest differences between
Xbase++ and the "Harbours" from a pure architectual point of view, we designed a runtime architecture from the beginning to be MT/MP and Distributed, they designed a runtime based on the DOS Clipper blueprint.

In fact, I could argue on and on, specifically it it comes to dedicated implementations of the Harbour runtime core or the Harbour VM but sharing these type of technical details is of course definitively not what I am paid for -;) Anyway allow me to make it clear in a general terms.

First, any feature/functionality of Xbase++ is reentrant there is not a single exception of this rule. Second, any datatype and storage type is thread-safe regardless of its complexity so there is no way to crash an Xbase++ process using multithreading. Third, the runtime guarantees that there is no possibility of a deadlock in terms of its internal state regardless what you are doing in different threads. There is a clean isolation and inheritance relationship of settings between different threads. In practical terms that means, you can output to the console from different threads without any additional code, you can execute methods or access state of GUI (XbasePARTS) objects from different threads, you can create a codeblock which detaches a local variable and pass it to another thread, you are performing file I/O or executing a remote procedure call and in the meanwhile the async. garbagge collector cleans up your memory - and the list goes on... But in Xbase++ you can do all that without the need to think about MT or ask a question such as "Is the ASort() function thread safe" or can I change the caption of a GUI control from another thread. Thats all a given, no restrictions apply, the runtime does it all automatically for you.

Anyway, I like Harbour more than xHarbour in terms of MT support. However the crux is still there, no real architecture around the product, leading to the fact that MT is supported form a technical point of view but not from a 4GL therefore leading to a potential of unnecessary burden for the average programmers, and of course that was and is still not the idea of Clipper as a tool.

Btw, the same is true for VO or so, they left the idea of the language and moved to something more like a system -language, while I can understand that somewhat I strongly disagree with that type of language design for a simple reasons; its not practical in the long term - we will see that in the following years as more and more multi core system will find their way in the mainstream and developers need to make use of them for performance and scaleability reasons. In 10 - 15 years from now we will have 100 if not thousands cores per die - handling multithreading , synchronisation issues by hand becomes then impossible, the same is true for offloading tasks for performance reasons. So there is a need for a clean model in terms of the language - thats at least into what we believe at Alaska Software. It goes even further, the current attempty by MS in terms of multicore support with VS2010 or NET 4.0 are IMO absolutely wrong, as they force the developer to write code depending on the underlaying execution infrastructure alias cores available. In other words, infrastructure related code/algorithms get mixed with the original algorithm the developers writes and of course the developer gets payed for. Thats a catastrophic path which for sure does not contribute to increased productivity and reliability of software solutions.

Funnily enough, the most critical, and most difficult aspect in that area; getting performance gains from multi core usage is even not touched with my technical arguments right now. However it adds another dimension of complexity to the previous equation as it needs to take into account the memory hierarchy which must be handled by a 4GL runtime totally different as it is with the simple approach of Harbour/xHarbour. Their RT core and VM needs a more or less complete rewrite and redesign to go that path.

In other words, Xbase++ is playing in the Multithreading ballpark since a decade. Harbour is still finding its way into the MT ballpark while xHarbour is in that context at a dead-end.

I would bet that Xbase++ will play in the multicore ballpack while the Harbours are still with their MT stuff.

In a more theoretical sense, it is important to understand that a programming language and its infrastructure shall not adapt any technical feature, requirement or hype. Because then the language and infrastucture are getting more and more complicated up to an point of lost control. Also backward compatibility and therefore protection of existing investments becomes more and more a mess with Q&A costs going through the roof.

Nor is it a good idea to provide software developers any freedom - the point here is, a good MT modell does smoothly guide the developer through the hurdels and most of the time is even not in the awareness of the developer. The contrary is providing the developer all freedom, but this leads to letting him first build the gun-powder, then the gun to finally shoot a bullet -;)

Therefore let me rephrase my initial statement to be more specific;

As of today there is still no tool available in the market which provides that clean and easy to use way of multithreading, however there are other tools which support MT - but they support it just as an technical feature without a modell and thats simple wrong as it leads to additional dimensions in code complexity - finally ending in applications with lesser reliability and overall quality.

Just my point of view on that subject - enough said

Steffen F. Pirsig

Sunday, February 22, 2009

Harbour Does Support Multi-threading - Pritpal Bedi - 2009-02-22

CCH: on 22 February 2008, Pritpal Bedi, Harbour Developer posted an interesting entry in our Guest Book, which amongst other things clearly rebutted Xbase++ CTO, Steffen's assertion on 21 February 2009 that "As of today there is still no tool available in the market which provides that clean and easy to use way of multithreading"

He also documented his journey from CA-Clipper, CA-Visual Objects, Xbase++, xHarbour and finally to the Harbour Project.

Pritpal Bedi, 22nd February 2009

Hello Chee

Nice to see such an informative site to have upto-date information about trends and developments centering around language called "CLIPPER".

Developing mini-erp solutions for trade and indistry in general and for specific verticals, in Clipper, for over a decade, I recently have discontinued support for Clipper compilations for ever. Today all my applications are compiled with Harbour ( also with xHarbour for some specific purposes ) with a unique look and feel simulating Windows GUI.

In late 90s the demand for a visual uplift was more an more coming in,
Visual Object caught my attention and I tried my hands onto that. Alas! I failed miserably. Visual Obects was enforcing a new way of programming concept difficult to be accepted by one who has had invested a great amount of time and money on developing procedural code. More so, the procedural code was delivering what was expected. So I gave up after few months of frusration.

Then came
Xbase++, probably in 1998, and then I was filled with joy that this is exactly I wanted. Straight forward I subscribed to it, and continue to subscibe till date, though do not plan in the future. After few months I could convert my applications running on Xbase++. I was amused by the multi-threading modal and its capabilities to mix GUI and CUI elements on one screen. It paved the way for Clipper code to be migrated to Windows world. I was/is a dire fan of its XbpParts* class modal which implemented a standard way of objecthirarchy and parameters. I also put my applications in production sites but due to many technical difficulties I had to withdraw them and reinstalled Clipper compilations. I agree that those were the days when Xbase++ was evolving. I could hae concentrated on Xbase++ IF I could not came face-to-face with xHarbour...

My first attempts with
xHarbour were so rewarding that I could develop VOUCH32 library which could be used with Xbase++, xHarbour, Clipper ( not Harbour ). It proved to be very useful addon atleast for Clipper applns ( download statistics suggest that ). A journey started to port 16 bit code to 32 bits which was accomplished with little effort. But still everything was under debugging in the labs. An awesome contribution from Peter Rees ( GTWVT ) in Dec 2002 triggered my quest to provide Windows look and feel to my CUI applns. I could develop WVTGUI which gave my applns a new lease of life. I posted new technology to my clients by end 2003 which received a wide acclaim.

The journey continued. Though I could simulate Windows look and feel, but still I heavily missed multi-threading and multiple Windows support of Xbase++. Something I missed all those years.

In 2007 I turned to
Harbour. Ported all what I had contibuted to xHarbour and recompiled my applns. There I floated ideas of Multi-Threading and Multi-Windows which got momentum as I showed to the group its real benefits. Przemyslaw Czerpak, this great programmer, took to this challenge and introduced both concepts in a superb manner. I insisted on Xbase++ modal of Multi-threading minus its glitches which were taken care of in proper perspective. And the result is a robust MT modal which also implements Xbase++ functions and objects.

Recently I posted all my applications in production with Multi-theading and Multi-Windows, with a unique Windows look and feel and functionality, the source base being the same I used to compile with CLIPPER, just with addition ( not changes ) of few lines of code. CLIPPER is ALIVE as ever...

As Harbour and xHarbour are binary compitble projects, every development can be shared by both projects.

Somewhere on this blog I have read Steffens quote ;
"As of today there is still no tool available in the market which provides that clean and easy to use way of multithreading."

This is not true. Harbour is much more robust. But mind it, Xbase++ provided it in 1998 whereas Harbour implemented it in 2008, a generation-gap.

I must admit that at present Harbour ( in its core ) lacks a GUI component, a must for modern day requirements. To achieve this goal I have initiated development of WVG*Parts along the lines of Xbase++ Xbp*Parts, which by now, is shaping up well. It follows the Xbase++ class modal exactly it is documented. By now a simple Xbase++ application can be ported to Harbour with restricted GUI components, AS IS. Harbour may have a decent GUI in near future, who knows...

To sum-up I must say that the language "CLIPPER" we all loved most, we all earned our bread and butter for decaded, we all sweared-by, is
VERY MUCH ALIVE ...

Regards
Pritpal Bedi
a student of software analysis & design


Born 04 June 1956 at a small town Karnal, a part of the then Punjab province
of the Sovereign Republic of India, attracted to software development only in
1989 at the age of 33 years. Authored VOUCH, the software grows with you,
a mini ERP solution based on Indian way of business protocols. Attracted to
xHarbour in 2002 and soon contributed to the Clipper community, Vouch32.lib.

Also he contributed to the open-source project xHarbour whatever small
he could do, major contribution being WVTGUI, a library to give a look and
feel of Windows application to a character based console application. This
he could do on the top of GTWVT, a contribution by Peter Rees.

And now, he presents Vouch32 ActiveX Server raising the barrier of languages
and version control. A Com Object completely written in xHarbour and
compiled with xHarbour.com distribution.

Author is a Master degree holder in Commerce. Has served the banking industry,
has run a medium-scale retail business, and has achieved a little in
software development.

Original Welcome Page for Clipper... Clipper... Clipper


This is the original Welcome Page for Clipper... Clipper... Clipper (3rd June 1996) , which I am republishing for historical and sentimental reasons. The only changes that I have made was to fix all the broken links.

Welcome to Chee Chong Hwa's Malaysian WWW web site which is dedicated to Clipperheads throughout the world.
This site started out as a teeny-weeny section of Who the heck is Chee Chong Hwa ? and has graduated into a full blown web site of more than 140 pages (actually hundreds of A4 size pages) ! This is due to its growing popularity and tremendous encouragements from visiting Clipperheads from 100 countries worldwide, from North America, Central America, Caribbean, South America, Europe, Middle-East, Africa and Asia-Pacific. Thanx Clipperheads, you all made this happen !


What is Clipper ?

You may ask, what is this Clipper stuff ? Could Clipper be something to do with sailing as it is the name of a very fast sailing American ship in the 19th century ?
Well, Clipper or to be precise, CA-Clipper is the premier PC-Software development tool for DOS. It was first developed by Nantucket Corporation initially as a compiler for dBase3+ programs. Since then, CA-Clipper has evolved away from its x-base roots with the introduction of lexical scoping & pre-defined objects like TBrowse. As at today, the most stable version ofClipper is 5.2e while the latest version, 5.3a was introduced on 21 May 1996.
As at 11th November, 1996, an unofficial 5.3a fixes file was made available by Jo French. See the About CA-Clipper 5.3a section for more details. BTW, Jo French uploaded the revised 5.3a fixes file on 20th November, 1996.

Latest News


The latest news is that CA has finally released the long-awaited 5.3b patch on 21 May, 1997.
For 5.3b users, you must a take a look at Jo French's comments on unfixed bugs in 5.3b.
BTW, have you used Click ? If you're a serious Clipperprogrammer and need an excellent code formatter, Click is a natural choice. How to get it ? Simple, access Phil Barnett's site via my Cool Clipper Sites.

32-bits Clipper for Windows ?

Have you tried Xbase ++ ? Well, I have and compared to Delphi (my current Windows programming tool of choice), I'm still sticking to Delphi.
Anyway, you should visit the Alaska Home Page. Give it a chance and then draw your own conclusions !.

The Harbour Project

Is this the future of Xbase ? Take a look at at the Harbour Project

Edited on 13th Nov 2015 to remove broken links :-)

Saturday, February 21, 2009

What is CA-Visual Objects ?

CCH : CA-VO aka CA-Visual Objects was Computer Associates attempt to bring CA-Clipper to the Windows World.

BTW, in my quest to move into the Windows world, I actually bought a copy way back in 1995 and attended a 5-day Training by the renowned Clipper Guru, Rick Spence in Kuala Lumpur, Malaysia. That was before I discovered Delphi.

As I understand it, CA-VO development was taken over by GrafX Software Development and the latest version is 2.8 released on 15th May 2007


From http://www.ca-vo.com

Clipper Compatibility


Visual Objects features a structured superset of the Clipper Language. While the user interface will need to be redesigned to take advantage of the Windows Graphical User Interface (GUI), most of the core "business logic" used in Clipper applications can be recomplied as-is under Visual Objects.

Visual Objects includes support for Clipper based DBF files including those using the NTX, CDX, and MDX indexing methods via Replaceable Database Driver (RDD) technology.


Xbase Superset


Visual Objects features a structured superset of the Xbase language. (Xbase is the industry standard term for those programming languages that inherit from the original dBASE system, including CA-Clipper, CA-dBFast, the dBASE family of products, and FoxPro.)

The Xbase superset contains extensions for Windows and its environment, including the ability to access all Win32 Application Programming Interface (API) functions for low-level, system programming.

Open Database Access

Visual Objects gives you a wide variety of choices in terms of database access. It supports:
  • Both procedural and object-oriented access to Xbase databases

    Visual Objects supports the procedural database commands and functions—such as SKIP and EOF()—that are traditional to Xbase languages.

    It also includes, however, an object-oriented interface to Xbase database management. The object-oriented interface is akin, semantically and syntactically, to the commands and functions traditionally used in procedural access. Instead of commands like APPEND, COMMIT, and ZAP, for example, you will use methods named Append(), Commit(), and Zap() to perform the same operation.

    Note: With these new methods, all the capabilities of the traditional Xbase approach are provided, but have been enhanced to fit the event-driven, multi-tasking nature of GUI applications.

  • Access to both Xbase and SQL databases

    When using an object-oriented approach to database management, both Xbase and SQL databases can be accessed. Furthermore, access to these two different types of databases is accomplished using a single, compatible protocol. This allows an application to manage Xbase and SQL databases with the same code.

  • Several different Xbase/SQL database formats

    When accessing Xbase databases (using either a procedural or object-oriented approach), you can choose from a variety of file formats. This is accomplished through replaceable database driver (RDD) technology. With RDDs, a single application can access different database file formats using a common language interface. This allows you to tailor your applications so that migrating from one database format to another is simple and straightforward.

    Visual Objects supplies several popular RDDs, and through its open architecture allows for development of third-party RDDs. See the Replaceable Database Drivers section in the “Using DBF Files” chapter in the Programmer’s Guide for more information about RDD technology. Refer to the “RDD Specifics” appendix in the same volume for detailed information about specific RDDs.

    Similarly, support for SQL databases is accomplished using Open Database Connectivity (ODBC), a widely used API for SQL access under Windows. This technology also uses replaceable drivers, supplied as dynamic link libraries (DLLs), which standardize the interface to the various database formats. Visual Objects comes bundled with DLLs for many of the popular ODBC formats, and provides language support for a superset of the standard ODBC API, as well as, an object-oriented interface compatible with that used for Xbase database files.

Comments by Steffen F. Pirsig, CTO of Xbase++

CCH: I was pleasantly surprised to read a Guest Book message from Steffen F. Pirsig, CTO of Xbase++ on February 2009. Rather than leaving the interesting comments in the Guest Book, I have chosen to republish it verbatim as follow :-

Nice blog, however I feel you are something out of touch with reality. I mean xBase as a language is vitale since years.

The point is that Xbase++ for example is used by developers to earn their living, or for inhouse development. So there is not much hype around - to give you some numbers.
Xbase++ customers are coming from more than 140 countries, Alaska Software is getting approx 300 new leads per month, according to our last projection there are more than 1. million end users working with Xbase++ solutions.

Have a look at; www.alaska-software.com/company/references.shtm
you will see large corporations working with Xbase++. Projectgroups with sizes of 30+ developers working fulltime with Xbase++.

So I would say Clipper is by far not dead - it is dead as a product but not as a language.

IMO, the idea of Clipper (or dBase aka Vulcan) to provide an programming abstraction centered around the concepts of a database is well thought. Nantucket added the concept of encapsulation plus codeblocks to Clipper 5.x, this was another great move forward - just imagine .NET people got something similar to codeblocks just 1 or 2 years ago - so the nantucket people have really done they job very well. (Of course the codeblocks are from Lisp but who cares

With Xbase++, Alaska Software has strictly followed that idea, not going deeper into the system - but providing an abstraction of emerging technologies such as threads, object persistence and so on. As of today there is still no tool available in the market which provides that clean and easy to use way of multithreading.

So I think even if Clipper as a product has been dead since more than a decade, the idea of the language is still alive - at least from my point of view which is of course driven by the way of thinking here at Alaska Software.

Regarding, Harbour or xHarbour, well I personally think these projects do contribute to the visibility of the language, but both projects miss momentum and are not innovating.

Just a few comments regards your realization that Clipper as a language is not dead *O*


From the Web

Steffen F. Pirsig
holds the position as Chief Technical Officer since having started out with the design and implementation of Xbase++ in Oct. 1994. He also is a co-founder of Alaska Software and President of Alaska Software, Inc.

At present, Steffen is a great deal involved with the D2 Project Group laying out the foundation of new exciting database-technologies for the next major release of the Xbase++ technology-platform. Simultaneously Steffen works with the V2 Team-members on core-technologies
for the forthcoming release of Visual Xbase++ 2.0.

As a frequent speaker at various developer conferences as well as at universities, Steffen manages to combine his passion for database management systems, distributed computing and of course Xbase++, with his love for engaging into shop talks and in-depth discussions while presenting his ideas and visions to an interested audience.

Steffen enjoys good vines, hiking and music of independent labels. He also likes to fly rc-planes, for which he has not found any time in the last 18 months.

Tuesday, February 17, 2009

From Clipper to Harbour - Viktor Szakáts

Date : Mon, 16 Feb 2009 10:40:57 +0100
Subject : Re: Long time no see

VICTOR : Hi Chong Hwa,
Nice to see you reviving Clipper...Clipper...Clipper.
It's been a long time :) I hope you're well.

CCH: Well, it's been more than 10 years :-)

VICTOR : Yep. I'm glad you remember.

VICTOR : If you're interested, I invite you to join Harbour's developer list,
it'd be great to see you there.

CCH: TQ and I am honoured by your invitation.
However, work commitments does not me to do so :-)

VICTOR : I can understand that, you're welcome any time in the future.

CCH: I would love to publish an article from you showing how you switched
from Clipper to Harbour. I am OK with xHarbour but I must admit I am a little lost on how to do it with Harbour.

From Clipper to Harbour - Viktor Szakáts

From a user's POV they are probably the same. Maybe there are some aspects of xhb which I don't know and could make the process different, but normally it's just a recompile and relink, feature-wise Harbour is on par with xhb, and a plus Harbour is cleaner, more robust, more portable and faster, it also has an xhb.lib which aims to provide compatibility with
features we've opted not to include in the core product.

I've just finished a new hbmk (Harbour Make) utility this weekend.

My transition was a long, gradual process, while keeping continuous Clipper releases and focusing on minimizing any risks on the user side, while maturing the Harbour release versions.

Also, the process was two fold:

1) Transition to Harbour for Windows.

2) Transition to be multi platform in general, allowing
easy move to any other platforms in the future.
This mostly comes down to file system / OS environment
differences.

Here are the main stages (and the devils are in the details :):

1) Departing from DOS/Windows concepts like case-insensitive filenames, drive letters and any other possible platform dependencies, like using some specific external tools. This was done by keeping Clipper compatibility, where this was impossible it was added using conditional code.

2) Some libs/tools which didn't have a Harbour/portable version, had to be replaced by new parts and sometimes concepts. One such is Telepath(y), which got replaced by curl, then hbcurl.

3) Adjusting all own .c functions for Harbour Windows version, using conditional code.

4) Added simple make system for Harbour Windows versions.

5) Created first running Harbour version for Windows and started testing locally plus a few clients.

6) After filling all missing bits in Harbour, there was time for the show to begin by creating the first official Harbour builds of the apps. Points below took 3-6 months depending on how we count it.

7) This quickly turned out to be a success since as apps were proved to run very stable, now the main work could begin by now being able to drop all Clipper heritage.

8) Created new local build systems for all parts, this time keeping in mind Linux/Darwin compatibility.

9) Started optimizing speed by refining the compiler choice and Harbour and local app build options.

10) After removing dependency on Clipper, the code could be moved from Clipper compatibility mode to Harbour native mode. This allowed to drop many functions and replace them with Harbour functions, tools and libs. This solved some rare problems with the apps, caused by bugs in local .c code. In fact I've reduced local .c code to an absolute minimum. This stage also resulted in noticeable speed up in certain points of the application.

11) The apps were now ported to Linux/Darwin with minimal effort.

12) Now fun part could be started, really start to exploit the possibilities of the new platforms and Harbour. I'm doing this since months and it's really a breath of fresh air.

Since I'm a main contributor to Harbour, all this was accompanied by parallel Harbour development, fixing incompatibilities, some bugs, finding all missing points and filling the gaps, and creating stable releases.

In the last few years the main areas to fill were TBROWSE, some multi-platform file handling stuff for the most part, and some stuff related to codepages. Currently using the latest SVN, which is practically release quality.

I hope that helps or is useful in any ways.

Brgds,

Viktor Szakáts

Sunday, February 15, 2009

What is xHarbour ?

CCH : So, what is xHarbour ? I first came accross it in 2006 when I was looking to upgrade one of my 16-bit FiveWin processing engines to pure 32-bit Windows. BTW, I succeeded in doing so with the help of Ron Pinkas, Patrick Mast and othere users from the x-Harbour User Groups

From http://xharbour.org/

xHarbour - the Project

xHarbour is an Open Source Project. Developers around the world are working together to achieve a common goal.

xHarbour - the Product

xHarbour is a practically 100% backwards compatible Clipper Language compiler and preprocessor. Find detailed information in the product section.
Visit also the third party product list, the applications section and this list of other xHarbour related useful links.

xHarbour - the History

xHarbour (extended Harbour) was started by Ron Pinkas late 2001 as a fork off of the Harbour Project in which he was one of the leading developers. xHarbour was established to provide a more aggressive alternative to the conservative style of development in the Harbour Project.
The Harbour Project was launched in December 1999 by Antonio Linares. Naturally, the developers of the Harbour Project have contributed large amounts to xHarbour, since xHarbour originated from the Harbour code base. You can find a list of those developers at SourceForge. The Harbour Project is still active, too - and some developers work on both projects.
In its short life, xHarbour already established itself as the favorite tool of the xbased programmer in general, and has attracted many loyal users.

Why two Projects?

Ron started the project with this sentence [source: sourceforge ]:
"As a result of some conflicts regarding current and future development direction, xHarbour will offer an alternative for those interested in a more aggressive & less conservative approach."
One major benefit of Open Source - it encourages the natural evolution process!

Welcome to Clipper... Clipper... Clipper


In 1997, then using Delphi 3, I had already created 32-bits Windows applications for HRIS, ERP and CRM. In 2007, using Ruby on Rails, an AJAX powered CRM site running on Apache & MySQL was created and I am now using Visual Studio .Net 2008 to create web-based projects and Delphi 7 for Win32 applications using SQL2005 & DBFCDX.

So, why then am I reviving the Original Clipper... Clipper... Clipper via a Blog as CA-Clipper is a programming language for the DOS world ? Believe it or not, there are still some clients using my mission-critical CA-Clipper applications for DOS installed in the late 80's and up to the mid 90's. This is testimony to CA-Clipper's robustness as a language :-)

With the widespread introduction of Windows 7 64-bits as the standard O/S for new Windows based PCs & Notebooks, CA-Clipper EXE simply will not work and it has become imperative for Clipper programmers to migrate immediately to Harbour to build 32/64 bits EXEs

Since 28th January 2009, this blog has been read by 134,389 (10/3/11 - 39,277) unique visitors (of which 45,151 (10/3/11 - 13,929) are returning visitors) from 103 countries and 1,574 cities & towns in Europe (37; 764 cities), North America (3; 373 cities) , Central America & Caribeans (6; 13 cities), South America(10; 226 cities), Africa & Middle-East (12; 44 cities) , Asia-Pacific (21; 175 cities). So, obviously Clipper is Alive & Well : -)


TIA & Enjoy ! (10th October 2012, 11:05; 13th November 2015)


Original Welcome Page for Clipper... Clipper... Clipper

This is the original Welcome Page for Clipper... Clipper... Clipper, which I am republishing for historical and sentimental reasons. The only changes that I have made was to fix all the broken links. BTW, the counter from counter.digits.com is still working :-)

Welcome to Chee Chong Hwa's Malaysian WWW web site which is dedicated to Clipperheads throughout the world.

This site started out as a teeny-weeny section of Who the heck is Chee Chong Hwa ? and has graduated into a full blown web site of more than 140 pages (actually hundreds of A4 size pages) ! This is due to its growing popularity and tremendous encouragements from visiting Clipperheads from 100 countries worldwide, from North America, Central America, Caribbean, South America, Europe, Middle-East, Africa and Asia-Pacific. Thanx Clipperheads, you all made this happen !


What is Clipper ?

You may ask, what is this Clipper stuff ? Could Clipper be something to do with sailing as it is the name of a very fast sailing American ship in the 19th century ?

Well, Clipper or to be precise, CA-Clipper is the premier PC-Software development tool for DOS. It was first developed by Nantucket Corporation initially as a compiler for dBase3+ programs. Since then, CA-Clipper has evolved away from its x-base roots with the introduction of lexical scoping & pre-defined objects like TBrowse. As at today, the most stable version ofClipper is 5.2e while the latest version, 5.3a was introduced on 21 May 1996.

As at 11th November, 1996, an unofficial 5.3a fixes file was made available by Jo French. See the About CA-Clipper 5.3a section for more details. BTW, Jo French uploaded the revised 5.3a fixes file on 20th November, 1996.

Latest News

The latest news is that CA has finally released the long-awaited 5.3b patch on 21 May, 1997.

For 5.3b users, you must a take a look at Jo French's comments on unfixed bugs in 5.3b.

BTW, have you used Click ? If you're a serious Clipperprogrammer and need an excellent code formatter, Click is a natural choice. How to get it ? Simple, access Phil Barnett's site via my Cool Clipper Sites.

32-bits Clipper for Windows ?

Have you tried Xbase ++ ? Well, I have and compared to Delphi (my current Windows programming tool of choice), I'm still sticking to Delphi.

Anyway, you should visit the Alaska Home Page. Give it a chance and then draw your own conclusions !.

The Harbour Project

Is this the future of Xbase ? Take a look at at the Harbour Project

You are Visitor # ...

According to counter.digits.com, you are visitor since 3 June 1996.

If you like or dislike what you see on this website, please drop me a line by clicking the email button at the bottom of this page or better still, by filling out the form in my guest book. If you are not sure what to write,click here to take a look at what other Clipperheads have to say.