It’s a brand new year and we are working at full steam to get QTX out the door! We had hoped we would be ready in december, but the back-end has taken more time than we hoped.
The delay is largely due to how single-sign-on needed to work through several layers. We wanted to avoid having two sign-on steps, where you first had to login to our website (wordpress) and then a second login for the customer portal. That took a lot of digging through OAuth and OIDC, creating our codebase for this (in QTX ofcourse) and moving the website to our own servers.
We also implemented a full MariaDB / MySQL driver for node.js, which is now a part of our RTL (more DB engines will follow). And we dug into node.js clustering and have made strides in the node.js application model(s) that you can also use.
Status
The IDE is more or less finished (99.99%). The final step for the IDE is that it needs to be linked with our back-end service for license management – which we are implementing right now. We had basic CRUD done before xmas, and right now we are implementing the server REST API that talks to the database and exposes methods to the clients. This is the same API that the IDE will call with regards to license management – and also with regards to commercial packages (those that users sell through our system, which is optional ofcourse).
The pretty face on all of these services and tech is our desktop. When you login to our website as a customer, you will be greeted by the Quartex Desktop, and will be able to access everything you need from there. Your customer info, your licenses, the forum, bug reporting — it will all be available as separate desktop applications. Making it a lot easier for the customer to navigate, and also simplifying further development for us.
We probably could have solved this faster by using pre-fabricated tech — but we feel it would undermine our product if we used something coded in C# or C/C++. The entire point of QTX is to make rapid application development a reality, and that means eating the food we serve. Using our own tools to implement our solutions.
On our ticket list now there are only a handful of items left (literally below 10), tickets that were reported after the previous backer build. Minor things like refreshing the property inspector when switching tabs. Most of these were fixed before xmas, and while one of us works on the server API, the other will soon start on the desktop interface that unifies everything.
This desktop interface is not just for our customers, but also for ourselves. In short there will be 3 layers of functionality:
- Customer
- Retailers around the world
- Admin access (for us)
I am glad we took the time to implement the different application models, even though most of it is not immediately visible. It saves us a lot of time now! Each desktop application (e.g forum, customer info, retail statistics and sales reports etc) will be implemented as separate projects. Using forms, toolbars and all the widgets we have spent so much time creating. All that non-visual code with features that are not immediately available in stock HTML/JS now comes into play at full force. The full might of object pascal hits hard!
Features and fixes
Since it’s been a while since we posted any official news outside the closed development channels, the list of features and fixes is quite long. We have squashed bugs that have been reported, and also gone over the components in the RTL quite extensively. Adding custom delegates where needed, or classes and methods where we felt it was needed.
The Ragnarok protocol designer has seen a lot of love since that is central to our back-end development. All protocol objects now derive from TQTXPersistent, which now serializes to JSON. This change also means that every class in the RTL that derives from TQTXPersistent likewise have JSON serialization support. Including TQTXComponent and, further up, TQTXWidget and TQTXForm.
The quality of the generated code has likewise seen a lot of work. Since everything serializes neatly to JSON (including binary fields), shipping data between client and server – or between services or web workers, is redused significantly. In many cases Ragnarok will save you weeks of boilerplate coding.
Can widgets be serialized?
Yes ofcourse. But to avoid the overhead of loading in files at runtime (which is a terrible idea when building mobile apps), we opted to not store design data in form-files (*.dfm files in Delphi or C/C++Builder). Design data is converted into code during compilation and becomes a part of the constructor instead. Just to underline that we have no immediate plans for runtime loading of design files.
But since TQTXPersistent now exposes ReadObject(), WriteObject(), Assign() and various JSON serialization methods – we might return to loading DFM files in the future if we see a use for it. Web is not the same as native code, and adding resource management and async startup criteria (e.g waiting until X number of files is loaded before starting the application) is something we wanted to avoid (and have avoided successfully). But it’s nice to know that it’s there and could be used in future versions.
Misc bits and pieces
Other noteworthy changes is the new color, border and align controls for the inspector, which is visually better than just vanilla combo boxes.
We have also done a complete re-coding of the Align: TAlign layout code, both for the RTL and the IDE, so that behavior is identical. The problems with margin, padding and align priority that some experienced previously – is long gone. And the results are really good!
And last but not least, we now have DWScript running (executing) for both Windows, Linux and MacOS. Both x86 and ARM. Which means that custom property inspectors will be a thing going forward. That means that widget developers can code property inspectors for tighter integration with the IDE. It also means that our own property inspectors will be coded in QTX itself! Meaning that they will be closely knit with the widgets. For example, a nice toolbar designer for TQTXToolbar – so that you can visually add buttons and separators at design time.
We apologize for the wait, but we want to get this done right. Releasing a slapdash product is often worse than waiting a bit longer. I am sure you will agree that it was worth it once we ship it!
Stay tuned!