Yes, uniGUI Voyager is here. Actually, it has been here for a while!
Voyager is the nickname for uniGUI version 1.50. It contains exciting new features which were announced in uniGUI roadmap back in 2017. One of those features is uniGUI HyperServer which primarily targets to radically improve availability, stability, and scalability of uniGUI applications. It also introduces other important features such as allowing to update applications remotely without a need to stop the application server. Another exciting improvement is porting to uniGUI to the latest Ext JS version 6.x.
uniGUI HyperServer is a new server archirecture designed to highly improve uniGUI applications' availability, stability and specifically scalability. This goal is achieved by applying industry's known and widely used techniques such as load balancing and process recycling.
A traditional uniGUI application server consists of one single process and multiple threads. The single process can be a uniGUI executable or an ISAPI or Apache worker process. In all cases all sessions reside inside a single process and several threads in same process are used to handle incoming requests.
uniGUI HyperServer changes above model and turns into a multi-process multi-threaded model. In this new model several worker processes are spawned to serve same web application. Sessions will be divided among worker processes and based on the configuration you may have multiple worker processes for same uniGUI application. Worker processes are managed and orchestrated by another process which is actually the HyperServer itself. The HyperServer will be the main entry point for all incoming requests. HyperServer will take all requests and distribute them among worker processes. HyperServer has also the responsibility to spawn new worker processes when needed and recycle them as soon as they are purged. Since uniGUI sessions are stateful, another important duty of HyperServer is to direct incoming session requests to the correct worker process which has created that particular session. In HyperServer terminology each worker process is called a Node.
uniGUI Voyager integrates the latest version of Ext JS 6.x. It was another revolutionary change for uniGUI. The previous version of Ext JS used in uniGUI was Ext JS 4.4.2 which was quite outdated. With upgrading Ext JS to 6.x now uniGUI can take benefit from all new enhancements and features of Ext JS 6. Here you can read a blog published in Sencha's web site which explains our journey of upgrading Ext JS in uniGUI Voyager.
It was almost seven years ago since my first blog posted in this site. Yes, uniGUI has been in beta stage for seven years. It may look like a long time. Indeed, it is a long time for a beta period. We can mention several reasons for this.
The most important reason is that uniGUI initially started as a product for both VCL and web platforms. Many of you may still remember this feature. It allowed developers to create both VCL and web applications using a single source base. However, after a while, we realized that it is too hard to keep the same level of quality and richness for VCL. The Ext JS framework was growing steadily, adding new features with each new edition, and many of those features were difficult to implement for VCL. In time, the VCL part of the framework turned into an outdated and incomplete version of the web interface. This fact was unacceptable, and we decided to drop support for VCL and continue with a web-only framework. Our decision was supported by the majority of our community, and after that, we left the VCL mode behind and accelerated web only development. This was the first major architectural change in uniGUI framework.
Another major architectural change happened because we were not happy with the component hierarchy built in the initial versions of uniGUI. It was complicated and difficult to maintain. In the new architecture, the design-time code and the run-time code are fully separated. Also, the run-time code was divided into two libraries named Core and Components. The component hierarchy was also recreated and reorganized. This architecture of uniGUI is still used today. Obviously, we were not in a rush to release version 1.00. uniGUI was developed in the form of a community project, with quality and stability as the highest priority. Of course, uniGUI could not be free because from the first day it was intended to become a commercial product. The included Ext JS library is also a commercial product which can not be deployed without an OEM license. In the year 2014, we started selling uniGUI Beta licenses. The main reason for this was that uniGUI could not continue distributing fully functional beta builds without including an OEM Ext JS license, so it became inevitable to make an OEM agreement with Sencha Inc. After that date, all uniGUI beta builds could only be obtained by purchasing a beta license from us.
According to our community our beta builds were stable enough to be used in production. Indeed many developers are using uniGUI in production for many years. Again, we decided to continue in beta mode until we are fully confident that uniGUI can be labeled as version 1.00. Fortunately we are happy to announce that uniGUI has finally came out of beta mode. Yes, eventually we have removed the phrase beta and build 1404 is our first official non-beta build. From our point of view build 1404 is just yet another build in or long chain of builds. We are aware of all imperfections and lackings. Documentation is still not complete and component reference manual must be finished. Our highest priority is documents for now and with each new build we will continue improving uniGUI documents.
By ending the beta phase, we can say that a new era started for uniGUI. There is still much to do. Among the high priority tasks, we can count porting uniGUI to Ext JS 6.5, implementing our load balancing server and adding support for the Linux operating system. We will be busy with these tasks and continue improving uniGUI. At this point, let me express my sincere gratitude to all developers who have supported us during the beta stage by buying beta licenses. uniGUI could not thrive without your support.
We are glad to announce that version 0.99.95 is available for all uniGUI editions. Trial edition can be downloaded from download section.
This version includes many fixes and new features. Most probably it is the last version right before version 1.00RC which will be announced soon. Thanks to all developers around the world by supporting us especially those who have ordered a license.
Starting from this edition we have renamed project group file names to avoid confusion. In previous versions project groups were named with a number representing Delphi version. For example, uniGUI2011Group was name of project group for Delphi XE. In this new version we have renamed it to uniGUI_XE_StdGroup, so respected project group can be easily spotted.
ChangeLog for this version:
0.99.95+----------------------------------------------------------------------------------------[UNG-1783] - UniComboBox: Wrong text is diplayed when deleting item at current index[UNG-1782] - UniDBLookupCombo: Execption raised when clearing filter edit[UNG-1781] - Project groups renamed to match actual Delphi edition names[UNG-1779] - UniDBLookupCombo: Execption raised while debugging[UNG-1780] - UniDBLookupCombo: Issue when list is created at runtime and KeyValue is set to Null[UNG-1778] - UniPropertyGrid broken functionality[UNG-1777] - CoInitialize is not called properly.[UNG-1765] - JS error when uniDBGrid LoadMask is not enabled.[UNG-1762] - TUniImageListAdapter memory issue when attached to an Action[UNG-1761] - TUniImageListAdapter scalability issue[UNG-1756] - Action Lists implementation[UNG-1757] - Action List support for Menus (MainMenu, PopupMenu, MenuItem)[UNG-1758] - ToolBar with Action List and button with Action[UNG-1760] - Broken LoadMask property of uniDBGrid- 0002325: In Combo controls EmptyText is not published.- 0002324: Bug when UniDataTimePicker is editor in DBGrid.- 0002323: UniDBGrid: Filter doesn't work correctly after clear button.- 0002322: UniDBLookupCombo: Component is not reset when filter is cleared.- 0002321: UniImageList/UniNativeImageList: New UseGlobalCache property.- 0002320: UniImageList/UniNativeImageList: Draw method implemented. - 0002319: Issue when CoInitialize is called after ServerModule is inited. - 0002078: Use global cache for ImageLists and other objects where possible.- 0002313: Bug in uniNativeImage list GetPng and GetBitmap methods.- 0002312: Recent issue in uniDBGrid which prevents mobile grids from working properly.- 0002311: Delphi 10.1 Berlin support.- 0002310: ShowMessage issue when active form is a LoginForm.- 0002307: DateTimePicker: Can't set time @runtime when Kind = tUniTime.- 0002302: OnColumnFilter event must return KeyValue when Filter is a DBLookupCombo.- 0002301: Columns[n].Filtering.VarValue must return KeyValue when filter is a DBLookupCombo.- 0002300: UniDBLookupCombo: Style property is published.- 0002298: UniComboBox: New AnyMatch property.- 0002295: Grid column Filter doesn't resize with the column. - 0002294: Bug when UniContainerPanel is Mask target.- 0002293: Issue when UniDBLookupCombo is a grid editor and field is a Lookup field. New Demo: DBLookupComboBoxNew Demo: ImageListsNew Demo: ActionList
Finally our new site is online! It adopts a modern responsive design which makes it compatible will all desktop and mobile browsers. We will continue improving the layout and adding more content to uniGUI website.
As we discussed earlier versions 0.85 and 0.86 will be new milestones for uniGUI library. They will introduce new framework core which brings lots of architectural changes and improvements.
Here is a brief list of these changes:
We are happy to announce that a new of uniGUI version is available. Version 0.98 brings lots of new features and bug fixes. Please see changelog.txt file after installation for details.
As we have announced in a previous blog there are two versions of uniGUI. A feature limited trial edition for evaluation purpose only and a full commercial edition.
In order to get the trail edition if you have not already joined please join our forums first, then visit downloads section to get the latest available trial edition.
Those who want to get the unlimited full version of the framework should order a subscription. Please join our forums and then visit here for details.
After a long intermission; almost more than two years here is a new blog about uniGUI. Those of you who were following our forums are already aware of current state of the project. Beta development continues and we are about to publish version 0.98. Interesting that our last blog was about version 0.89.
As you may estimate framework has become mature enough to be used in production. Many members of our community are using uniGUI in production. So what happened with versions between 0.90 through 0.97?
Here is another beta build for uniGUI available for public download.
0.89 is another step towards stability and a major step towards scalability.
In past we have had reports regarding server crashes when there was an overrun condition in system resources. A close examine showed us that some of the sensitive and limited OS resources such as GDI objects could overrun when there are hunderds of sessions. To resolve this issue some of the imaging components such as TImageList and TUniImage was redesigned to avoid excessive Memory and GDI resource consumption.
We also added a new and detailed server monitor which gives more detailed information regarding resource consumption and other sensitive information.
Warning: There is a breaking change in this new version: Delphi's standard TImageList is no longer supported. You must replace all instances of TImageList with TUniImageList.
This update fixes some issues and adds some new features. It can be downloaded from downloads section.
See related blog post for details.