Martyn's blog for the Revelation Software community, sharing ideas, news, views and more. NOTE – Views and opinions expressed in this blog are personal and do not necessarily represent those of Revelation Software.
So, this is more of a note to myself, more than anything but some of you might find this useful.
For the longest time, I have been battling with enabling and disabling Cut, Copy and Paste buttons in my applications. They were all handled on a per control basis with cumbersome code trying to work out how to set the buttons. I was never professional and never very good.
Enter OpenInsight 10 and the new EditStateChanged property, Carl’s OI10 blog posting on the subject and a lesson from Andrew about promoted events.
A couple of hours later (mostly learning and debugging, so most of you would do this in 5 minutes), I now have a system where the Cut, Copy and Paste buttons are correctly enabling and disabling based on the state of the system. For example, you select some text and the Copy and Cut buttons enable. You clear the Windows Clipboard and the Paste button disables.
OpenInisght 10 really is making building Windows desktop and web applications easier and easier.
I must apologise for the delay in getting my new demo application (video preview linked above) to RevUS and in turn to our WORKS subscribers. A few of you have been asking when and how you can get hold of the system and I thought it best to provide everyone with an update.
The reason for the delay is that I was proud of what I had managed to achieve using OpenInsight 10 and I thought that I ought to run it passed Andrew before releasing it to the world. And, therein rests lesson number one – You are rarely as clever as you think you are when it comes to things that you don’t really understand and boy, did I come down to earth with a bump.
I jest of course. I do these little projects for personal development and to better understand the tools that I am selling here at Revelation. I therefore know that what I do is very basic and there are always better and more efficient ways of doing things. This project has been one huge example of that fact.
So, I gave Andrew access to the system and he reviewed the programs. Pretty much every program needs some enhancement of varying degrees. Much of it is repetitive and one or two of the programs have been completely rewritten by Andrew for me. I’ve just needed to copy in the draft code and debug for some programs and I have had to fully understand and apply that new found knowledge to others – learning lots and lots and lots along the way. The code will no doubt not be 100% efficient and right, but it’ll be a whole lot closer following this work.
Now, his post has sounded a little negative thus far and that is all tongue in cheek. But, I did get my own back last week by being a massive thorn in Andrew’s side. Some questions were painfully stupid, leaving me hanging my head in shame and sometimes I was just too slow to grasp the concept, but Andrew has been super patient with me and I am now nearing completion of the code changes. There is just one large hurdle to overcome and yes, I will be asking Andrew for his help with that one.
So for his time and patience and understanding, I’d like to thank Andrew for helping me to make this new examples application so, so, so, so much better.
So what have been some of the changes. I will not go into all of them but some noteworthy changes are:
The use of arrays in place of stacked Set_Property statements. In some places, I had stacked half a dozen or more Set_Property calls, not knowing that each was an overhead in its own right. These have now been changed for arrays and only a single call which is much more efficient.
I had a few places where I was existing out of programs mid-way through the code. Andrew taught me to use a different technique to let the code run to the end properly.
I had been using <-1> in places when working with some arrays and he has shown me how to change that for better and more efficient code.
I had a MOUSEMOVE event which was being checked hundreds (possibly) or times as I moved the mouse over buttons. A quick change to my code now only does this once as I enter the button and not as I move across it.
The list goes on, but it has been a fascinating and sometimes frustrating few days. The end result is a head that is about to explode but better code for those of you that will be diving into it to see how things have been done.
Again, a massive personal thank you to Andrew for the education and his time.
With the release of the 10.0.8 beta program, I decided to give the desktop development side of the software a good test and I looked around at a system that I could write from the ground up. This is nothing new because, now that things are so much easier in version 10 and because they enable me as a junior developer to build functional systems, I have taken this approach to test most of the version 10 releases. It is also much nicer to build something with some perceived value, you don’t feel like you are wasting your time.
Anyway, here is where I let the cat out of the bag and expose my awful guitar skills. For the last year of so, I have been trying to learn how to play the guitar and (under a pseudonym) I have been documenting my journey online. Progress has been woefully slow and I had been trying to keep motivated using some free online practice logging tools but, as usual, none included all of the things that I wanted to cover.
Enter OpenInsight 10 and another hair brained idea to build my own system.
Version 10.0.8 is definitely the best OpenInsight release yet and I have been amazed at what I can now build using the software. So much so, I have invested a lot of time learning how to build this system better than my previous script driven systems. I have removed a lot of my code and used the system code (via simply setting the properties) and I have also taken the leap into the world of commuter modules. With the ability to have both data entry form AND your code open at the same time, makes working in OpenInsight 10 a dream.
Anyway, with some tuition along the way, including some help from Revelation Software developers to create a wickedly awesome on screen report with animated charts, and a bucket load of time, mixed with the odd tear or two (sometimes I find writing code so frustrating), I am now very close to completing the system.
So why this article?
Well, I am hoping to make it available to all of our valued WORKS subscribers, as a brand new example application. Some (most) of the code that I have written is not optimised and it is not an example of best practice (I am still a junior, learning fast) but I hope that the system will provide a nice example of how Windows based systems can easily be put together using OpenInsight 10. And, if I can produce this as a junior developer, just imagine what you guys can produce as professionals.
I will be making this system available to my YouTube subscribers, via my personal guitar YouTube channel (My Sic String Journey). That system will be empty of data and supplied via a single setup.exe file. Revelation Software will also make the system available to WORKS subscribers.
OpenInsight 10.0.8 and above now optionally installs an open-source version of the Java Runtime Environment (JRE). During the installation process, you can choose to either install this open-source version, or – if you have a different version of Java already on your system, or you wish to manually install a version of Java – you can opt to NOT install the open-source version. Note that the open-source version installed via the installation process does not update your system paths; rather, it puts the JRE directly inside the OpenInsight folder. Both the commands (batch files) to install the EngineServer service, and to run the Engine Server in “debug” mode, are aware of the location of the JRE and thus do not require modifications to the workstation’s/server’s environment settings.
OpenInsight’s RLIST functionality and performance, improved with the 10.0.7 release, has now been changed to use this new version of RLIST (RLISTX) by default. If you wish to configure your system to use legacy RLIST behavior, you must create or update a configuration record in SYSENV. Using the Record Editor, or the Configuration Record option from the OI Console, you must create a CFG_RTI_RLIST record in SYSENV, with RLIST9 in field 1. If this record doesn’t exist, or has anything other than RLIST9 in field 1, then enhanced RLIST behavior (“RLIST X”) and functionality will remain. (Note that the CFG_RTI_RLIST information is cached by your system; after changing this value, you should exit and re-enter OpenInsight).
Other notable changes in the OpenInsight 10.0.8 release include an improved startup process, better OLE and custom property support in the Form Designer, and newly customizable login dialogs.
The 10.0.8 Release includes enhancements to:
Click HERE to view or download the OpenInsight 10.0.8 ChangeLog.
<Originally published in Revelation Software’s September 2020 newsletter>
Hi Everyone, I hope that you are all well, staying safe during these Covid-19 days and that the various government measures around the world are not impacting on you, your families and your businesses too much.
Looking back at the blog, I cannot believe how long it has been since I posted anything here. That is not a sign of how busy, or not busy, I have been and I have been keeping very busy over the nine months or so.
Personally, I have been working from home throughout the lockdown period in the UK and nothing much really changed, other than my daughter taking over my office and regular workplace. Thankfully, I can work pretty much anywhere. I hope that you have been as fortunate in your workplace, although I know that some of you have struggled to settle into working from home and you are glad to be getting back t osome level of normality.
On the work side, I was really busy at the beginning of lockdown. This was mostly helping people with setting up remote workers as countless numbers of end users were moved from office to home working. I am pleased to say that pretty much everyone relocated their OpenInsight end users to remote working, regardless of whether this involved an eay O4W move or a slightly more involved OI desktop move.
The process also had one interesting benefit. It flagged up a number of systems that were not necessarily configured for optimal performance and stability and my support colleagues worked with those clients to help them to get the best from their remote access solutions.
Following this floury of suport activity, which also resulted in a number of new licenses, my client side activity settled back to normal levels for the duration of the lockdown and July and August are seasonally slow.
For me, this was the perfect time for RevUS to begin putting the finishing touches to the next OpenInsight release. I was given access to the 10.0.8 alpha and then beta releases and I set to building myself a brand new application. This would be written for the desktop and entirely in version 10.0.8. The development has gone well and, once completed, I hope to make it availble to all of our WORKS subscribers.
“… this is THE release when I think that OpenInsight and other Multivalue developers should begin to explore OpenInsight and how it can be used to modernise and benefit their application development.“
This project has enabed me to get more and more into application development with OpenInsight 10.0.8 and to learn more and more along the way. I will write more about the application itself nearer to when it is released, but it features commuter modules heavily (whereas the EXAMPLES application in OpenInsight is largely script based), some nice pretty) screens and I hope that it will feature a complex report with charts and more. The is an area that I am working on with my support colleagues at the moment.
I have been amazed at what a junior developer can build using OI10 and this is never moreso that now with the new version. The process of application development using the new version is becoming quicker and more enjoyable with each release. In addition, in my opinion, this is THE release when I think that OpenInsight and other Multivalue developers should begin to explore OpenInsight and how it can be used to modernise and benefit their application development.
Personally, I would have liked for this to be version 10.1, yes I really do think that it is good enough. But, I fully respect Revelation’s decision to hold this as another point release and especially as more and more Revelation developers are currently making the move to version 10 and more developers are reporting on their experiences of running their older applications through the conversion.
Will the next release be that ground breaking 10.1, we will have to wait and see, but I certainly hope that it will.
So, if you are an OpenInsight WORKS subscriber, you can now download both the 10.0.8 upgrade and full install files from the private WORKS area. If you are not yet on WORKS, or your subscription has since expired, you can still get your hands on the usual 30 day evaluation which has just been updated to 10.0.8.
For those of you that sinply want an update on the main changes, I have copied those below for your reading pleasure.
So, I’ll leave this long posting for now and I’ll be back very soon (I hope) with details of my new OI 10.0.8 written demo app.
OpenIsight 10.0.8 Release Notes
Major Changes in the OpenInsight 10.0.8 Release
OpenInsight now provides an option to change the precision of mathematical operations. This can be set by calling the setEPMode stored procedure, passing in 1 to enable and 0 to disable the functionality. By default, the extended precision math will maintain 32 digits of precision, but this can be modified by calling the setEPModePrecision stored procedure, passing in the number of digits of precision desired. Both the enabling of extended precision, and the default number of digits, can also be defined in the application properties. The following operators/functions are affected: +, +=, -, -=, *, /, ==, =, !=, <>, >, <, >=,<=, mod(), int(), abs(), atan(), cos(), exp(), ln(), pwr(), sin(), sqrt(), tan()
OpenInsight’s RLIST functionality and performance have also been improved starting with the 10.0.7 release. A new version of RLIST (RLISTX), which optionally replaces and extends RLIST, is available to enable these enhancements. RLISTX merges the features of RLIST, SELECT_INTO, OLIST/RUN_REPORT, and RTI_XBAND. One obvious change is the ability to pass in multiple select statements to RLIST in a single call, @FM delimited. Using the Record Editor, or the Configuration Record option from the OI Console, you must create a CFG_RTI_RLIST record in SYSENV, with RLISTX in field 1. If this record doesn’t exist, or has anything other than RLISTX in field 1, then normal RLIST behavior (“RLIST 9”) and functionality will remain. (Note that the CFG_RTI_RLIST information is cached by your system; after changing this value, you should exit and re-enter OpenInsight).
The MultiValue BFS (MVBFS) connections for QM, D3 and U2 have been enhanced to submit multiple select lists to the “back end” host for bulk processing whenever possible. This enhancement can result in significant performance improvements when using an MVBFS connection. Note that these changes work in conjunction with the RLISTX changes discussed above; you must enable RLISTX and install a “plugin” stored procedure on the host system to access these changes. There is now a button on the MVBFS connection designer which will install this plugin (a program named RTI_MVBFS_SERVER_PLUGIN_U2, RTI_MVBFS_SERVER_PLUGIN_D3, or RTI_MVBFS_SERVER_PLUGIN_QM).
Starting with OpenInsight 10.0.4, “child” processes launched from OpenInsight can be configured so that they do not consume additional license seats. In particular, CTO, AREV64, BRW, and O4W calls (using the engine server’s built-in web server) made from a copy of OpenInsight will not count against the licensed count of users.
For example, a single user copy of OpenInsight can now run the IDE, a CTO session, and generate a BRW report at the same time.
Note that this enhancement requires both OpenInsight 10.0.4 (or above), and the Universal Driver 5.2 (or above). OpenInsight 10.0.8 will work with the Universal Driver 5.1, but it will not exhibit these license enhancements until it is “paired” with a UD 5.2.
To take advantage of this license enhancement for O4W and engine server tasks, users/developers must update their eserver.cfg file (either directly or through the Settings dialogs). In particular, any passwords that are currently explicitly embedded in the eserver.cfg can be replaced with an asterisk (“*”); this indicates that the specific connection should use the enhanced licensing. This also has the additional advantage of no longer requiring manual updates to the eserver.cfg file when passwords are changed for the applications or users defined in the connection string. (As an additional enhancement, the username can also be replaced with “*” if you wish to use the ‘default user’ created for an application).
For example, if your eserver.cfg previously contained the following lines:
Oracle (the owner of Java) announced that, starting April 2019, the popular Java version 8 would no longer receive any updates; and that Java version 11 (and later) would only be available for commercial “subscribers” (with a required annual fee). Since Oracle’s version of Java has been the one most prominently available for download, it is extremely likely that the version of Java installed on your/your users/your clients systems is Oracle’s edition. Oracle’s changes may require you to change, or license, the version of Java you have installed.
Java was developed in 1991 at Sun Microsystems with the programming principles of “Simple, Robust, Portable, Platform-independent, Secured, High Performance, Multithreaded, Architecture Neutral, Object-Oriented, Interpreted and Dynamic”. Its primary objective was to be a portable, simple, and secure programming language. Since its introduction, Java has become one of the most widely adopted programming languages, used by over 9 million developers and running on 7 billion devices worldwide. Part of its popularity can be traced to the fact that it has been open source software since 2006; however, in 2018 Oracle announced a series of licensing changes that has implications for all users of Java. Revelation Software uses Java as the programming language for its Engine Server and Telnet Server functionality, and so these changes may impact you and your clients/companies as well.
In order to potentially simplify the management of Java for our users, OpenInsight version 10.0.8 and later will include the OpenJDK JRE for Java (currently version 11); users can choose to allow the OpenInsight 10 installer set up this version of Java on their server system, or the installer can leave the JRE unconfigured if the user wishes to use a different solution for Java as described below.
To explain further, your options now include:
– Contracting with Oracle for a commercial annual license: This will include support and updates. For larger corporations, this may be a suitable solution;
– Switch to one of the remaining open source providers of Java (with or without paid support), known as OpenJDK: This is the recommended solution for customers who do not wish to contract directly with Oracle, and can be automatically installed via the OpenInsight 10 installation process;
– Remain on the (no-longer-supported) Java version 8: Since this has reached the end of Long Term Support, this option may potentially leave you/your users/your clients vulnerable to security issues that may arise in the future. This is not usually recommended.
For additional explanations of the licensing changes, and the various options (including URLs for downloads), please read this:
OpenJDK providers include Linux distros, AdoptOpenJDK, Amazon, Azul, BellSoft, IBM, jClarity, Red Hat, SAP, and others; versions of OpenJDK Java can be downloaded from any of these sources. For example:
I am sorry to advise everyone that the email systems for Revelation Software Limited (in the UK and looking after the EMEA region) and also Sprezzatura (globally) are down at the moment.
Our email carrier seems to be having some trouble following a take over and move to new servers and the email system has been temporarily down several times over the last week or so.
However, this latest outage seems to be more troublesome and I have just found out that it is highly unlikely that any of our emails that we sent yesterday (Wednesday 20th November) will have been delivered and we did not receive any emails from around 13:00 yesterday afternoon.
Although the issue is beyond our control, we apologise for any inconvenience caused. We understand that the email carrier is working on the issue and we hope to have our email back very soon.
In the meantime, you can reach our office using the usual telephone numbers and the special temporary email address, all of which are noted below.
Again, sorry for any inconvenience caused to your and your clients, Martyn and the team at RevUK and Sprezzatura.
I was recently asked by someone looking at using OpenInsight for the first time, “How quickly can I really build a small system in OpenInsight 10?”. Naturally, being a salesperson, the answer was “Very quickly and you’ll be surprised just how quickly.”
This evening I had the opportunity to put this to the test.
As many of my readers will know, I am some months into building a large system that I hope to take to market very soon. This system uses authorisation keys to set (and update) the user count and the expiry date in the system. It is nice feature in the application, but it is not overly clever. However, I find myself having to manually create the authorisation keys from time to time and this was becoming tedious.
I therefore decided to build myself a small application in OpenInsight 10 to help me to generate the authorisation keys and then to keep a history of who has had keys, when, with how many users, etc.
Whilst I did not time this mini- project, all of the following has been achieved by a junior application developer (me) in one evening. That includes defining the application, building the three data tables, the four forms and all of the popups, messages, etc. It also involved writing two commuter modules to support the Customers and Key Generation forms.
As is usual for my systems, the application operates from a main MDI Frame window, as shown below. Granted, I need to tidy a few things up (like the menus), but remember this is an example of what can be achieved in a few short hours and by a junior.
The MDI Frame is used to display all of the application’s windows and these are launched from the three buttons on the toolbar. The fourth button being the Exit button, which closes down everything. All of these buttons are operated by CLICK quick-events. i.e. I did not have to write any code to get anything working in this form. In fact, it does not even have a commuter module defined for the window.
You could say that the MDI Frame window is a NO CODE form, but that is a private joke which anyone that follows the Google Pick discussion forum will understand ;).
The next form is the Customers form, which enables me to capture some basic contact information for my customers. At the bottom of the screen is a table which uses some symbolic fields, a relational data table and a relational index to display all of the authorisation key records that are linked to the Customer. This enables me to see when keys have been generated, the user count and the expiry date for that entry. It will build into a history of the license over time.
Again, I needed to write very little code to operate this form. The code is pretty much limited to a Changed and a Clear event to set the toolbar buttons from disabled to enabled (and vice versa), Click events for the Cut, Copy and Paste buttons and a Click event for the Email Address label. So very little code and what code there is in the commuter module is very basic code. To be honest, most of the code was pulled in from my commuter module template, which already had the code for the Cut, Copy and Paste buttons and to enable and disable the Save, Clear and Delete buttons accordingly.
The Customer ID label will, when clicked, display a standard record lookup window and when the Email Address label is clicked the user’s email client will launch and the system drops in the email address automatically. Otherwise the buttons all drive the system and the combo boxes are all populated from the System Codes data table.
The System Codes window is pretty straight forward with (not including the toolbar) only two key controls which use just three dictionary items (fields) in the database.
“Again, this is a no code form where I do not even have a commuter module defined.”
The combo box is populated using the Auto-fill feature in OpenInsight, which means that the pick list will always be up to date as new code categories are added.
The user then simply adds a new code category (COUNTIES in the example) and then in the table, they enter a MultiValued list of code and descriptions. As soon as the record is saved, those new descriptions are available to the users in the Customer’s data entry form.
The last and most complex window is the Authorisation Key Generator window.
The form itself is not at all complicated and it was very easy to build, but the commuter module behind the form took some time for me to build.
The form uses my usual quick event to launch the Popup (record lookup window) and this in turn reads (displays) the record in the form. A similar popup is used to select the Licensee’s record ID and to write that to the appropriate edit line. When the Licensee’s ID is chosen the Licensee’s name is displayed. This is a calculated field (a symbolic) which brings together the customer’s First Name and Last Name from the Customer’s data table.
The system has been designed to cater for 1 to 9,999 users. A message will display if the user tries to enter 10,000 or more users. Again, the message (as shown) is created without any code and it is called using only a few very short lines of code. The code simply checks for the number of users and then it makes a call to display the saved message if the user count is over 9,999.
The calendar button launches a standard OpenInsight 10 calendar, from which a date can be selected and this is written to the Expiry Date edit line. The buttons on the toolbar are all Quick Events.
Once the User Count and Expiry Date fields have been completed, the Key button on the toolbar can be clicked and this will format the authorisation key using certain random characters and formatted with hyphens. The authorisation key is truly random, with a unique key being generated every time the key button is pressed, even when the user count and expiry date does not change.
Anyway, it is now getting late and I’ll leave the following items for tomorrow evening:
I need to configure all of the menus. The system is run by the buttons at the moment.
I need to make sure that an expiry date is a date in the future.
It will then be completed and ready for use. Not too much left to do then, a nice little authorisation key generation application done and a good evenings work.
All thanks to OpenInsight 10 and how easy the tool set makes it
to build systems like this 🙂
As many of you will know, I have been internally testing OpenInsight 10.0.7 for the last week or so and I have been really pleased with the new version.
With more and more people now actively working with OI 10, this release includes a lot of customer requested fixes and enhancements.
It goes without saying that OpenInsight 10 has been a massive undertaking with the ‘whole’ product having been reviewed, modernised and made so (Ohh sooo) much easier to use. The benefits of using OI10 over OI9 and 8 are way too many to even consider touching on here but I believe that the product is now at a point when all OpenInsight developers should be considering running their applications through the conversion tool.
If you are a current OpenInsight WORKS subscriber, you can get access to both the 10.0.7 upgrade and full install from the private WORKS area on www.revelation.com.
For now, I’m off to try a brand new module in O4W which Bryan worked on for a project that I have been working on for a few months. My development learning curve continues at a pace 🙂