Background
As you may have already realized, a PostgreSQL server or any SQL server in general is a "relatively" complicated story. The reason for that is basically that the server with the planner tries to replace you as a human. In ISAM you have the data model in mind, also the requirements of...
Prolog
Using many small services, known as microservices, is a popular way to build applications. But, working with microservices can be very complicated. However, the complexity arises not from the Xbase++ business logic code - a domain in which an Xbase++ developer is highly proficient - but...
Background
Microservices architectures consist of loosely coupled, reusable, and specialized components that often operate independently. Microservices also use a high degree of cohesion, also known as bounded context. Bounded context refers to the relationship between a component and its data...
The re-implementation of existing legacy software systems often faces significant challenges, and understanding these can illuminate why such projects frequently fail. This little write-up is far from complete but tries to create awareness regarding these important and very often underrated...
It is possible to automate the creation of MS Word documents and also to style the text. For this a Word document is created or opened via the Xbase++ COM/ActiveX layer. The Word instance is represented in Xbase++ by an object of the class AutomationObject(). The document can be manipulated via...
Some technical background
When an application is loaded, the operating system's image loader examines the import directory of the exe file. In this import directory the dll names with their functions (so-called procedure entry points) are listed, which are needed for the application. These...
Problem description
The Xbase++ ISAM emulation uses a native PostgreSQL sequence to calculate the next record number for append operations. Therefore the success of a DbAppend()/APPEND directly depends on the correctness of that PostgreSQL sequence. As a matter of fact the sequence can become...
Background
When a source file ( .prg or .arc) is compiled, then an intermediate file ( .obj or .res ) is created that is finally linked to an executable ( .exe ) or library ( .dll ). The Xbase++ compilers xpp.exe and arc.exe create the intermediates next to their source files. This behavior is...
Background
The PostgreSQL columns of type TEXT and BYTEA allow the storage of large binary data (e.g. PDF documents or images) up to 1GB. If such column types are used in a table their data is accessed like any other data of the record when using the Xbase++ ISAM emulation. With each...
In a std I/O application, output occurs to the current console. The font used for outputting text into the associated window is controlled by the system and can be changed via the console properties.
The following function can be used to determine the size of the font set for the window...
By default the Xbase++ WebHandler does negotiate the content type encoding automatically. The following simple AddressService returns a Object and leaves the content negotiation up to the WebHandler and the request sending party. The great benefit of that approach is that your service interfaces...
Background
The HttpEndpoint can be bound to an SSL certificate but it must be available in the Windows Certificate Store. This howto article describes how to provide a certificate using the win-acme tool and the IIS web server and how to bind the HttpClient to it.
On the Let's Encrypt homepage...
Background
Starting with version 13 of PostgreSQL, the default authentication method was changed from MD5 to SCRAM. This authentication method is incompatible with the pqlib client dll used by the PostgreSQL Database Engine shipping with Xbase++ (status: build 1360). As a consequence, attempting...
Overview
With associative arrays it is possible to address an element in the array not by its ordinal (numeric) but by name (character string). The Xbase++ datatype array does not support this possibility.
However, objects of the class DataObject() semantically offer an identical usage, because...
Very often applications support multiple tenants. A financial accounting solution used by a CPA is a typical example for that. However, there are other scenarios where the ability to switch between several tenants/customers is required. The following note gives an overview about the options with...
Rules:
Avoid the need for comments, write clear, readable and self describing code instead
Comments never describe the code and its syntax
Use comments to compensate for your failure to express yourself in code properly.
Do not write informative comments such as:
// returns normalized value...
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.