I hope you had a chance to attend some of the recent Synergy DevPartner Conference virtual sessions. There were many opportunities to learn about the latest Synergex technologies and how customers are taking advantage of them. One of the conference themes was the importance of creating RESTful web services with your legacy applications, and the sessions included some examples of customers doing this with our Harmony Core open-source product. We also just published a new customer success story, which describes how our customer RCC used Harmony Core to create a RESTful web service and provide its customer Legacy Vacation Resorts (LVR) with a new web portal.
Used by vacation property owners, the RCC Resort Management Solution offers features such as a central reservations system, contract management, and sales analysis. LVR offers travel experiences across Florida, Colorado, New Jersey, and Nevada. When COVID hit, LVR wanted to make their resorts safer and more comfortable for their guests. They decided to move their check-in process to the web so guests could minimize the time required to interact with LVR’s front desk agents.
RCC and LVR already had a web access solution, but it used Synergex’s proprietary xfServerPlus product, and they both wanted a more standards-based solution. This was a great opportunity for RCC to modernize their solution and provide a foundation for meeting future demands for access.
RCC started with the data/logic access routines they already had for xfServerPlus, expanded them to meet the needs of the new web service and web UI, and then added new OData controllers and a Harmony Core feature called “adapters” to expose the data and logic as OData resources. Code for the adapters and controllers was generated using Synergex’s CodeGen tool and RCC’s Synergy repository.
RCC and LVR were able to meet the project goals, and both are excited to move forward with their new web services solution. See the full success story for details (and some beautiful resort photos).
Mike Amundsen, the Synergy DevPartner Conference’s keynote speaker, said that when you’re getting started with web services and trying to figure out scope and boundaries, you should look for the smallest problem you have, fix that and learn from it, and then move on to the next smallest problem. In the “Leveraging Web Services for UI” conference session, customer Forward Computers had a similar message: start with a well-defined function. (They also advised making sure it’s not too simple, as you’ll want to evaluate performance.) The new customer success story describes how RCC and LVR got started with LVR’s self-check-in function. What function will you start with?
By Steve Ives, Posted on March 29, 2021 at 10:44 am
Synergex is pleased to announce the immediate availability of a new release of the Synergy DBL Integration for Visual Studio, Version 11.1.1g-3045.
As always, this latest release contains improvements across the board, but in particular, the focus was placed on these specific areas:
Improving the development experience in both the editing and debugging of .NET Core code.
Improvements in working with Repository projects in various scenarios.
Some of the improvements in this release were actually in the Synergy .NET Compiler, so in addition to updating the SDI installation, developers working on .NET Core projects (including any Harmony Core projects) should upgrade the version of the Synergex.SynergyDE.Build NuGet package used in the projects to version 11.1.1070.3045 also.
We encourage everyone undertaking any type of Synergy development in Visual Studio to upgrade to this new release as soon as possible. And remember, if you are not ready to upgrade the runtime versions on your production systems yet, you can use runtime version targeting to give you access to the latest-and-greatest development tools while continuing to support older runtime installations.
We’ll soon be making decisions about Synergy/DE product direction in a number of areas, as well as about potential new products, and we’re very interested in your input. Please complete this brief survey to help us determine our priorities and future development direction.
By Steve Ives, Posted on March 11, 2021 at 8:10 pm
We are pleased to announce another release of CodeGen, once again including some significant advances in the technology. We recommend that all developers using CodeGen, and especially developers working with Harmony Core, should upgrade to this latest version as soon as possible. This new version includes these changes and enhancements:
We corrected an issue in the recently introduced <PARAMETER_ATTRIBUTE> token which was generating incorrect output for some types of fields.
We corrected an issue in the <PARAMETER_DEFINITION> token which was generating incorrect output for some types of fields.
We corrected an issue with the <SEGMENT_SPEC> token that was previously producing incorrect results for boolean fields.
We added experimental support for generating TypeScript code by adding the field loop tokens <FIELD_TSDEFAULT> and <FIELD_TSTYPE>. More work is required before these new capabilities will be fully effective.
We undertook some performance analysis work in the area of code generation from Synergy Method Catalogs, and as a result, reworked some code to improve performance in this area. There is still more to be done, but generating code from method catalogs is now noticeably faster in most cases.
This version of CodeGen was built with Synergy/DE 11.1.1g and requires a minimum of version 10.1.1 to operate.
By Steve Ives, Posted on February 26, 2021 at 3:33 pm
Synergex is pleased to announce the immediate availability of Synergy/DE 11.1.1g, a quality release that includes a wide range of improvements across the entire Synergy product line. We strongly encourage all Synergy developers to review the release notes for detailed information about everything that changed.
Besides a significant focus on quality, we have also made several feature enhancements in our Visual Studio integration tools, enhancing the developers’ experience and improving their productivity.
First off, we have introduced collapsible-region support for many DBL statements and other language constructs. For example, some of the now collapsible statements include BEGIN-END blocks, USING-ENDUSING, CASE-ENDCASE, IF-THEN-ELSE statements, and more. This feature was specifically requested and voted on by developers in the Synergy Ideas Forum.
We also added support for activating the go-to-definition feature via mouse clicks, in addition to using the existing keyboard shortcut-based mechanism. The default behavior is activated via Ctrl + Left-Click but is customizable in the Tools/Options dialog under Text Editor settings.
Another area that we focused on is improving the accuracy of those “red squiggles” that show up in your code when something is wrong and occasionally when something is not wrong! Inaccurate red squigglies should occur less frequently now, although we do know that have some additional work still to do in this area.
To give developers more options when they need to get in quickly and look at something specific, especially in solutions with large numbers of projects, we also implemented support for Visual Studio 2019’s “Filtered Solution” feature that allows you to check a “Do not load projects” option in the Project Open dialog. Visual Studio opens the solution very quickly when you do this, but all projects are in an unloaded state. The developer can then select the projects they wish to work on in Solution Explorer and use the “Reload Project” context menu to load them. The context menu then includes options to allow you to load either direct dependencies or all dependencies of the projects you loaded, meaning that you can quickly get to a buildable scenario without having all projects loaded. Solution Explorer also has options to show or hide unloaded projects.
Having filtered your solution the way you want it, you can then use the “Save as Solution Filter” context menu to save the state of your solution for the next time you need it that way. The file is saved as a .slnf file and can be reopened the same way you open the solution.
We have overhauled our project build system, reduced memory usage, and improved performance for Visual Studio and command-line builds. And at the same time, we have improved and standardized the way they interact with MSBuild, allowing us to adopt new features more quickly.
And armed with our new MSBuild capabilities, we added support for a new feature known as /graphBuild, making pre-build analysis of inter-project dependencies work much more effectively. In turn, MSBuild can now more effectively perform parallel builds of multiple projects simultaneously, in some situations resulting in improvements in overall build time.
We are confident that most developers should experience improvements in overall build times across the board, particularly for traditional Synergy projects. And in some cases, with the right combination of projects and resources, those improvements could be significant.
For example, suppose you have a small number of base libraries used by a large number of higher-level projects. In that case, once those base libraries have been built, there is a good chance that higher-level projects can build in parallel, with the overall process completing more quickly. The more CPU and memory resources that are available, the faster things can proceed. In some environments, such as on dedicated build servers running CICD pipelines, we have seen improvements of up to 30 – 40% in overall build time as compared to the previously released version. But improvements of that order do require access to considerable resources; most improvements will be more modest.
If you’re already using Visual Studio to develop your Synergy code, we encourage you to upgrade to this new version as soon as possible; remember, you can always use runtime version targeting if you’re not ready to upgrade your production systems. And don’t let the fact that you only develop traditional Synergy code or deploy to Unix, Linux, or OpenVMS deter you; Visual Studio can make a great development environment for those scenarios too! Talk to your Synergex account representative for more information.
Over many years of being immersed in Microsoft Windows, I’ve come across a few tidbits I think are worthy of sharing. Some of these you may know about, but I hope you find something new here.
1. Opening a command prompt in File Explorer
So, you’re in File Explorer and you want to open a command prompt in the current location. The easiest way is to simply type “cmd” (without the quotes) in the address bar, and there you go: a command window opens to that location. You can also run other commands the same way. Go ahead: type “notepad” into the address bar of File Explorer for yourself. Conversely, you can use a command prompt to open File Explorer in the current location. To do so, issue either of the following commands in the command prompt: “start.” or “explorer .”.
2. Auto inserting the date and time in Notepad
I use Notepad all the time for taking quick notes. Try pressing F5 when you’re in Notepad. This will enter the time and date, which is useful for marking when an entry was made.
3. Changing configuration settings with MSConfig
Many already know about this utility, but it’s worth mentioning for those who don’t. MSConfig.exe is a built-in Windows tool for controlling such things as the manner the next startup boot will occur (normal, diagnostic, or selective), which services will run, and a list of other built-in tools. It’s very powerful, so use it with care. You can find more information here.
4. Understanding system errors
A quick way (yes, quicker than Googling) to look up a Windows system error is to use the command “net helpmsg errornumber”. For example, if you want to know what system error 5 means, enter this at a command prompt:
C:\>net helpmsg 5
Access is denied.
5. Activating speech recognition
Tired of typing? No problem: Windows has a built-in solution that allows you to talk to your computer and give your hands a break. To enable this tool, start by pressing the Windows key +H. This will prompt you with a link to Settings to enable speech recognition. Toggle it on, and the next time a text field is in focus, you can turn listening mode on with Windows key + H. When you start talking, your computer will start typing for you. You’ll find handy documentation on how to use this feature at Windows Speech Recognition commands.
6. Organizing windows
Say you want to re-arrange the windows on your screen. Pressing the Windows key and the right or left arrow will snap a window to either the right or left side of the screen. But what if you have four windows and you want one in each corner of the screen? Well, that’s easy: just grab a window, drag it to the corner of the screen until you see the outline of the window, and then release it. Repeat this for each corner.
7. Accessing control settings with Windows Master Control Panel
There is something called Windows Master Control Panel, aka the God Mode folder. (Don’t blame me; I didn’t name it.) It’s a folder with shortcuts to many different Windows administrative/management settings and Control Panel tools in a single location. To create it, one must be logged in as Administrator (of course), and then simply create a new folder and give it the name
8. Deleting files
It is well known that when a file is deleted it is not truly deleted, but the space the file consumed is now marked as available. However, if you want to make sure a deleted file is actually deleted and not recoverable (by freely available tools), then the space the file consumed needs to be overwritten. There are plenty of third-party tools that will do this, but why bother getting one when Windows has a built-in tool? To overwrite free space in a particular directory or even a drive so the deleted files are not recoverable, use the cipher command. For example, to overwrite free space in the folder C:\Temp, issue the command
To overwrite all the free space on the D: drive, issue the command
And of course, a tool named “cipher” can also encrypt files or directories.
9. Checking battery status
Want to know the state of your laptop’s battery? No problem. Use the powercfg command to learn everything about your battery’s current state. Note: Powercfg must be run in an Administrator command window. While powercfg has many options, the two I find most informative are /batteryreport and /energy. When powercfg is run with /batteryreport, it will create an HTML file named battery-report.html with pretty much all there is to know about your battery’s usage and history statistics. When run with /energy, powercfg will create an HTML file named energy-report.html with a “Power Efficiency Diagnostics Report” that contains all kinds of information on the battery’s current status. For more information about powercfg, visit Powercfg command-line options.
This is only a drop in the (bit) bucket of Windows tips and tricks, so please share the ones you’ve discovered.
By Liz Wilson, Posted on February 12, 2021 at 11:30 am
That said, while innovation has the potential to take us further from the traditional experience of clicking a link and waiting for a new page to load, there are a few characteristics of those webpages from the early 2000s that the front-end folks would be amiss to innovate away from. Here are just a few!
1. Specific, Descriptive Title Elements
The HTML title element, demarcated by the <title> tag, is meant to provide a succinct description of the document that the browser has just rendered. If you are one of those people who has anywhere from 5 to 50 browser tabs open at any given moment, you probably rely heavily on page titles, as they appear in the tab next to the site’s custom icon.
A specific and descriptive page title is not just beneficial for compulsive tab openers like me, however. Unique titles with more, rather than less, information can improve the search engine optimization of your site. Additionally, page titles are often the first component that screen reader users will refer to in establishing where they are in a site. So adding a company name next to “Home” or “About Us” is a helpful enhancement, as is including information about changes to the page’s state.
The title element lives with other metadata in the “head” of the document, so it’s not displayed on the page and is therefore relatively easy to neglect. And when you’re working with tools like Angular and React to create single-page applications, you’ll find yourself with one HTML file in your project folder, which means just one <head> section where a title element would obviously be placed. Fortunately, most of these frameworks and libraries have developed tools for generating dynamic page titles.
To ensure that your page titles are being updated dynamically, use the ViewData attribute either in the page’s model (as demonstrated in the documentation) or its .cshtml file. In either case, make sure that if you use Layout, the title element is reading from the ViewData dictionary. If you follow the standard instructions for creating a Razor Pages web application, this is the code you will see in the _Layout.cshtml file:
For a similar effect in your React app, install the React Helmet node package. Once that’s done, it’s a simple matter of importing Helmet and adding the document head information within <Helmet> tags within components as needed.
Similar to React, Angular projects contain a single index.html file, and that’s it for documents with the traditional head/body structure. Angular’s data binding can’t access anything outside of the body tag, so in order to display different titles as the user navigates around the app, you need to use the Title service, which is a very simple class consisting of two methods: getTitle() and setTitle(). The Angular documentation provides clear examples of how to incorporate this class into your application.
2. Semantic/Logical Headings
With that in mind, while current design trends indicate that the amount of text on each page remains in decline, it’s still a good idea to create a logical hierarchy of information and use different heading elements accordingly. This will not only benefit assistive technology users, but also the large swaths of us who have been conditioned to look for a big ol’ heading in a prominent position on the page. So even if the page is not technically a page, make sure the main heading is contained in a heading tag (probably an <h1> or <h2>) and the information that is less important is organized under the subordinate heading levels (<h2>, <h3>, <h4>…).
3. Logical Focus Order
In the same way that you may need to apply more thought with new web architectures, it’s very likely that you will have to expend some amount of effort to manage keyboard focus to replicate the way that focus operates in regular old HTML documents. In a traditional website (barring questionable use of CSS), a keyboard user can tab through each page in such a way that mimics the visual flow of information: left to right, top to bottom. In a single-page application where new HTML documents are not actually being loaded in the browser, there is nothing that would necessarily prompt keyboard focus to jump to an element at the top of a new page, because there is no new page. The Angular website (built, naturally, with Angular) provides us with an example of this. If you tab to the footer section from Home and select About, rather than hopping up to something intuitive, like the links at the top of that “page,” your next tab will take you to the next item in the list of footer links.
There are other potential issues relating to mutable content, including focus effectively disappearing, or users getting shot back up to the top of a section if a button is replaced by some other UI component.
Again, today’s popular libraries and frameworks propose techniques for providing a good experience for keyboard users:
To conclude, there is no reason for the not-pages that make up your single-page application to look like they were built in 2006. However, a case can be made for ensuring that certain aspects of the early web experience are not thrown away with the bathwater.1
1The bathwater consists of jQuery, Flash, and frames.
By Steve Ives, Posted on February 5, 2021 at 3:05 pm
A quick post to announce the availability of CodeGen 5.6.6. This is a quality release that addresses an issue that could occur when generating code from templates containing certain complex expressions. In particular, several Harmony Core templates contain such complex expressions, so we recommend that all Harmony Core developers upgrade to this new version of CodeGen at their earliest convenience. As always, documentation for this new release can be found at https://codegen.synergex.com.
Have you noticed some new names popping up on email signatures from Synergex Support or perhaps a new voice picking up our phones? Have you seen some number patterns appearing in email subject lines related to your cases? Over the last year we’ve made a lot of changes to our Developer Support department to address succession planning and feedback from customer surveys and to improve response times on your cases. We’d love to share a bit of what’s new with you, so you know what to expect the next time you send a case to Support.
Putting names (and faces) with the voices
As many of you know, our longtime Support Manager, Beth Ives, retired at the end of last year. That left some big shoes to fill, and I’m grateful to the whole Synergex team for helping me transition into the role of manager for both our Developer Support and Education teams over the last year. The rest of the Developer Support team members that you’ve grown to know and love are still here and are as reliable and knowledgeable as ever. The more tenured members of the team have been great mentors to our two newest developer support engineers, Matthew Nix and Mike Carleson. Mike and Matthew started with the team back in October of 2020 and are initially focusing on licensing, installation, and traditional Synergy cases. They are especially eager to answer any questions you may have about REV11 licensing as you upgrade your production subscription licenses this year. I’m very excited to have combined the Education team with the powerhouse of Synergy knowledge that is the Synergex Developer Support team. Expect to see some exciting new joint initiatives over the next few years.
Beth Ives’ final team meeting. She is already missed.
Improvements to support case flows
As a team, we’ve identified a few of our policies and procedures that we’d like to update to give you the best experience possible. Many of these changes will take place behind the scenes internally, but you may have already noticed one change. Previously, emailed cases were logged manually by a developer support engineer in our support service desk (we use Salesforce Service Cloud). We knew we could automate this process to ideally result in faster case assignment and initial response from a developer support engineer. We did a soft launch of a feature called Email-to-Case, which uses a reference code in an email to determine which case that email belongs to and logs the interaction accordingly. The strange characters you may have recently seen appended to email subjects are the reference codes. We plan to do a wider launch of this feature next month. You should start to receive notifications that a case was created right after you email a question to Synergex Developer Support. These notification emails will contain your case number and unique reference code. If you need to start a new email thread for an existing case, we ask that you add the reference code to the subject to help us keep the system tidy and keep your case moving forward as smoothly as possible.
Tell us what you think!
When a developer support engineer closes a case, you should receive an automated email from our service desk. These emails often include links to surveys asking for your feedback on the case. We really want to hear from you! These surveys are quick, and your feedback is what will drive internal training and additional process improvements for the Support department. Please take a few moments to fill out the case closure survey the next time one makes it into your inbox. To sweeten the deal, we will enter all survey respondents into a drawing each quarter for a $50 gift card!
What does Support do?
In case you’re not a power user of Synergex Support services yet, I’ll fill you in. First, we strive to make it as easy as possible for you to get in touch with us. You can reach Synergex Developer Support by email (firstname.lastname@example.org) from 6am – 5pm Pacific. We are available for phone support (800.366.3472 toll-free US and Canada or +1.916.635.7300 all others) from 7am – 5pm Pacific. You can also submit cases through the Resource Center (log-in required). Our department can answer questions that range from “Will version 11 of Synergy work on my operating system?” to “How do I declare this in .NET?” The team can help you with questions regarding migrations to new versions of Synergy, moving your development environment to Visual Studio, configuring REV11 licensing, and more. We’re also always happy to point you to additional educational materials (e.g., documentation, training videos, code samples, etc.).
An unlimited number of Support contacts are included in your DevPartner subscription, and ad hoc support is available for those not on a subscription yet. To hear about our premier support offerings, contact your account executive. We look forward to working your next case with Synergex Developer Support!
We modified the non-Synergy data types returned by field loop expansion tokens such as <FIELD_CSTYTPE>, <FIELD_OCTYPE>, <FIELD_SNTYPE>, <FIELD_SQLTYPE> and <FIELD_VBTYPE> for decimal fields with an overall size of over 18 characters. For example, previously <FIELD_CSTYPE> would return long and now returns decimal. And because any field larger than a D28 will overflow even decimal fields in .NET, we now throw an error if any such field is encountered in a structure.
We added a new type of key loop called a <PARTIAL_KEY_LOOP> that can be used to process subsets of the segments of multi-segment keys.
We renamed some field loop expression tokens that were introduced in the previous release, changing <IF UNFLATTENED_GROUP> to <IF GROUP>, <IF UNFLATTENED_EXPLICIT_GROUP> to <IF EXPLICIT_GROUP> and <IF UNFLATTENED_IMPLICIT_GROUP> to <IF IMPLICIT_GROUP>. We apologize if this breaks existing code, but if so, that code was written in the last few days, and we figured it would not be a big deal!
We changed the behavior of the field loop expansion tokens <FIELD_SELECTIONS> and <FIELD_SELECTIONS1>. Previously these tokens would insert “” for fields with no selection list values. Now nothing is inserted for fields with no selection list values.
We added a new command-line option -pa, which causes array fields not to be expanded into individual fields.
WARNING: This is an experimental feature and may currently cause unexpected side effects with some expression tokens. Please let us know if you encounter anomalies.
We enabled code generation for structure fields, enum fields, and binary fields. Code generation for these types of fields was previously artificially blocked.
WARNING: This is an experimental feature. While the <FIELD_SPEC>and other basic field loop tokens will behave as intended, some tokens may not behave as expected with these types of fields. Please let us know if you encounter anomalies.
We removed the field loop expression tokens <IF COERCEBOOLEAN> and <IF NOCOERCEBOOLEAN>. There is a slight chance that this could break existing templates, in which case you can use <IF COERCE_BOOLEAN> and <IF NOT COERCE_BOOLEAN> as direct replacements.
We fixed an issue that was causing a failure during the processing of very complex expressions.
We fixed an issue that could cause counter tokens to be incorrectly processed as expressions.
We addressed a bug that was present in all versions of the Repository API whereby the RpsField.PaintCharacterSpecified property actually indicated whether the field was a paint field, not that a custom paint character was specified. This has now been corrected, and we have added a new property RpsField.PaintField (boolean).
We moved the implementation of several early Harmony Core specific expansion and expression tokens into the Harmony Core Extensions library.
We started an ongoing process to reformat and improve this documentation, hopefully making it easier to use and easier to maintain. The most significant change is that expansion tokens were previously documented on individual pages within an overall category, but in the future will be documented on a single page for each category (for example, all field loop expansion tokens). We also started to use manually entered and meaningful topic IDs, which will be a positive change when using the on-line documentation at https://codegen.synergex.com because URL’s will now be based on meaningful names rather than generic topic numbers.
This version of CodeGen was built with Synergy/DE 11.1.1f and requires a minimum of version 10.1.1 to operate.
By Phil Bratt, Posted on January 21, 2021 at 2:12 pm
Visual Studio is consistently one of the highest trending IDEs on the market. It has powerful features to increase code productivity. Because of this, Synergex brought traditional Synergy coding into Visual Studio. But how do you use it? I would like to focus on some of the hotkeys and organizational features available inside Visual Studio that will help developers navigate their code.
Easy commenting: While testing code, there are times when you want to disable large sections of code so that you can run alternative code to see the differences. In Visual Studio, you can highlight the code you want to comment out and press CTRL K + C to comment out the lines. You can press this key combination multiple times to add a ‘;’ to the front of each line or CTRL K + U to remove a comment character from each line. The toolbar also contains buttons to comment and uncomment lines:
Multiple line edits: One of my favorite features in Visual Studio that I’m surprised hasn’t made its way into other Microsoft products is the ability to edit multiple lines at once. If you press ALT + SHIFT and (while still holding them) push the UP or DOWN arrow keys, you can expand the cursor to multiple lines. This means that when you press a key, it will edit all of those lines with that key stroke. For example, let’s say you have multiple WRITES statements in your code:
Simple duplication: Speaking of copy and paste, how annoying is it to click, then hold SHIFT, then END, then CRTL C, then click, and then CTRL V? That’s tedious. It was tedious to write it out. If you want to copy the line you are on, you can duplicate the line of code with CTRL D.
Collapsing and expanding code
You may have noticed that when you create a main routine, subroutine, or function, a “-“ appears to the left of the editor. This allows you to collapse that code section to make it easier to edit large pieces of code.
Collapsible labels: You will also notice that internal subroutines/labels are not naturally collapsible. But what if you wanted to make a label collapsible because you have so many of them? You would surround the code with .REGION/.ENDREGION along with a title for the region. (I usually stick with the name of the label.) For example:
With .REGION/.ENDREGION in place, you will now get the “-“ around that section that you can collapse.
Hotkeys: A number of hotkeys can be used to collapse and expand these sections:
Toggle outlining expansion – CTRL M + M
Toggle all outlining – CRTL M + L
Stop outlining – CRTL M + P
Stop hiding current – CRTL M + U
Collapse to definitions – CTRL M + O
There are also a few features that can be used to navigate your code that I find extremely helpful:
If you are on a BEGIN or END in code and want to go to the matching END or BEGIN, while the cursor is on the BEGIN or END, press CRTL ] to move the cursor to its pairing statement.
If you are on a variable or subroutine and want to jump to where it is defined in the code, you can either press F12 or right-click and select “Go to definition.”
With this jumping around, you can also push CTRL – to go back to where you were or CTRL + to go forward.
To round off this list, there are a number of function keys that are useful during a debugging session in Visual Studio:
To step into the line of code you are on, so you can see the code run through a subroutine, class, etc., use F11. To step over and go to the next line of the currently executing source code, press F10.
While coding or debugging, pressing F9 will toggle adding or removing a breakpoint on the current line.
Those are my 10 tips for navigating through Visual Studio and making use of its code editing and hotkey features. You can also find our video about Visual Studio hotkeys here. Keep in mind that most of these keys can be changed or customized inside Visual Studio by selecting Options from the Tools drop-down menu. Hope you found some of these helpful.
If you haven’t moved your Synergy development environment to Visual Studio yet, what are you waiting for? Check out our solution for modernizing your development environment and accessing a superior debugging and build experience. You can also reach out to your account executive to discuss how we can help you move to Visual Studio or train your developers to get the most out of their new environment.
By Steve Ives, Posted on December 4, 2020 at 3:21 pm
For several years now, Synergex has maintained an open-source example that provides an example of how to implement the replication of a Synergy applications data to a Microsoft SQL Server database, in near-to-real-time. The example environment makes considerable use of CodeGen to generate the bulk of the code needed to implement the interaction with the SQL Server database, and much of the remaining required code can be used out-of-the-box, requiring very little, if any change to the original Synergy application to enable the data replication to take place. The example environment has been used as a template by many customers, and our Professional Services team has assisted many others by delivering either proof of concept examples, or full-scale implementations.
As technologies and product capabilities evolve, we periodically revisit the code to ensure that it is taking advantage of the latest features and adhering to best practices. Good performance is also of critical importance in products like this, so we frequently revisit the code looking for opportunities to make improvements in throughput.
We have just completed the latest review of the code, and on this occasion, we did make some changes, which are briefly described below.
We now generate an additional function that returns the key number of the first unique key for each ISAM structure. This allows us to avoid the need for code that previously detected the first unique key number at runtime; that code required that the replicator had an open channel to each data file being replicated.
We also generate an additional function that, when passed a record containing data, returns the key value of the first unique key. Previously, the code used the Synergy routine %KEYVAL for this purpose, but it also requires that the replicator has an open channel to every data file replicated.
Because of the previous two changes, we were able to remove the replicator’s requirement to open the underlying data files that are being replicated. The only files that the replicator now opens are the instruction queue file and log file.
We added code to make the replicator more resilient to interruptions to network connections when using xfServer to access the instruction queue file on a remote system. If a network problem is detected, the replicator now closes the instruction queue file and then attempts to re-open it on a new channel. If this operation fails, it will retry several times with a delay between attempts. The number of retries and the delay between retries are both configurable via command-line options or environment variables.
If you already have a SQL Replication environment based on our sample environment, then you might consider checking out the latest version and applying the changes to your own codebase, and if you’d like some help with that, then our Professional Services team will be happy to assist. And if you haven’t yet implemented a SQL Replication environment but are interested in doing so, get in touch with your Synergex account rep and ask them to set up a demo.
By Liz Wilson, Posted on October 29, 2020 at 5:16 pm
I started using Microsoft Teams daily when I was hired by Synergex back in May. While there were some features of the user interface (UI) that took a bit longer to master, I was able to discern most of what Teams was telling me about the status of my coworkers immediately. I looked at the green dot and intuited its meaning as “Available,” and by a similar process, came to the correct conclusion that red communicates the opposite state.
My general comfort level with user statuses in Teams is due to the design pattern that this UI component follows: the placement of a status icon next to, or partially on top of, the user icon. I’m a millennial, so I was exposed to this pattern early on via AOL Instant Messenger and saw it again in a more sophisticated form when Skype started its ascent to mass popularity during the early aughts.
Design patterns are powerful because they provide users with context. The widgets and components of an application that follows design patterns are immediately imbued with meaning by the user, while a layout that shuns convention risks a discouraging and confusing user experience. For example, the “infinite scroll” design trend, while still used in social media feeds, has fallen out of favor in the context of website landing pages, partially because visitors expect to arrive at a footer and don’t enjoy finding themselves lost in an unorganized (and data-intensive) sea of content.
There is, however, a limit to what users can understand about your application using background information gleaned from previous experience. To create a comprehensible and easy-to-navigate UI, components should provide enough information about themselves to make sense regardless of the varying expectations and abilities users bring to the table (i.e., the context from which someone is accessing your application). In regard to my earlier anecdote, I made the correct assumption about the green, yellow, and red dots in Teams right away. On the other hand, there was one status icon that meant nothing to me at first, as it resembled a sideways magenta jellyfish. Thankfully, in anticipation of this type of ambiguity, as well as the very real possibility that some Teams users may be color blind1, Microsoft included a description of each status in the tooltip, so by simply hovering over the magenta jellyfish, I learned that a) it was not, in fact, a jellyfish and b) it was the “out of office” symbol. Mystery solved.
It doesn’t take a visual impairment (or cluelessness, in my case) for accessibility issues to arise, just a lack of information about information. Take abbreviations, for example. New employees may not be familiar with the acronyms that populate the tabs and menus of your application. By providing a mechanism for identifying the full meaning of abbreviations and acronyms in the user interface, you’re lowering barriers to accessibility. This strategy is discussed in the Web Content Accessibility Guidelines and applies to mobile, web-based, and desktop applications, as well as traditional websites. Form validation is another area where a “more is more” approach to information is appropriate. I can’t count the number of times I’ve submitted a form and the only indication I’ve received that something isn’t right is a grayed-out submit button. Often it takes several trial-and-error attempts before I realize that the form wants me to format my date differently or add punctuation to a new password. In this situation, technically speaking, I’m receiving just enough information to have a sense of what’s going on, but not nearly enough to make an informed decision about what the application wants me to do next. Designers and UI developers can inject extra information into each field to guide people towards correct formatting and data types, the result being that users can successfully submit a form regardless of the context they’re working in (vision impairment, device dimensions, etc.). On a related note, individuals who use a mouse to navigate and fill out forms can see where the pointer has landed and enter data accordingly, so to provide a comparable experience to keyboard users, you can highlight form fields with a border as they receive focus. Once again, the WCAG website outlines this technique in greater detail.
There are hundreds of additional scenarios where context-independent components would enhance user experience, so rather than attempting to list them all here, I’ll recommend checking out Microsoft’s Accessibility Insights, an application and browser extension created to help developers make their applications as accessible as possible. The tool is open source, free, and available on Windows, MacOS, and Linux.
 According to the National Eye Institute, approximately 1 in 12 men are color blind.
Last month we announced via email that starting January 1, all new and renewing production subscription licenses will need to use REV11 licensing. (The announcement is also on our website and in our Oct. 1 Synergy-e-News.) We’ve gotten a few questions about this, so I wanted to provide some additional information. This info is also in the FAQ on our website, and we’ll continue to add to that site as new questions come in. This information applies to customers with Synergy/DE 9.5.3b – 10.3.3 on supported Windows and Unix platforms. [Note that the minimum version was updated from 9.3.1 to 9.5.3b on 1/27/2021.]
What’s the requirement?
After January 1, 2021, when you renew any 9.5.3b–10.3.3 subscription licenses on currently-supported Windows or Unix systems, those licenses must be on REV11 licensing. You will need to update them to REV11 licensing before their renewal dates. Also, new 9.5.3b–10.3.3 licenses will be issued with REV11 licensing on these platforms.
This requirement does not apply to licenses lower than 9.5.3b, to licenses on OpenVMS or retired Windows/Unix systems, or to traditional (non-subscription) licenses. See our platforms page for information about supported platforms. If your platform is on the Retired Platforms list (meaning current Synergy/DE versions are not supported on it), REV11 licensing is not available on it. If you’re not sure if a license is subscription, you can run the lmu utility to see if the license has an expiration date. (After each product, it specifies the date the product was licensed and if subscription, the date the subscription expires.) Although REV11 licensing will not be required for traditional (non-subscription) licenses, we do recommend it for those licenses. One benefit there is that when you add users, your keys will be automatically updated.
Why is Synergex requiring this?
REV11 licensing has been out since October 2019. It has been required for DevPartner (development) licenses, and many customers have also updated their production licenses to it. It’s important that we get the rest of the production licenses updated this coming year as it will make managing licenses much easier for you and for Synergex.
What else should I know?
REV11 licensing does not change how your application accesses licenses on your license server; it mainly provides a new mechanism for getting and installing product keys. Once your application is set up with REV11 licensing and the keys are downloaded and installed, the licensing on your system works pretty much the same as it did previously. What’s new is that your license server will now communicate with the Synergy License Web Server periodically (once/week initially) to poll for new license data. (If there is ever a problem connecting to the Web Server, that will be logged, and you and Synergex will be notified.)
You will be able to check the connectivity between your license server and the Synergy License Web Service before you install REV11 licensing (with our lmcheck utility).
When you update to REV11 licensing, you’re not updating to Synergy/DE version 11. We realize that the name “REV11 licensing” makes this a little confusing, but REV11 licensing is just the current revision of Synergy/DE licensing, and it’s for Synergy/DE 9.5.3b and higher versions.
If your application has code that processes the Synergy/DE license registration string, you will probably need to update that code because the size of the registration string increased from 12 alpha characters to 31. We’re aware of a very small number of customers who came across this as their applications use the SERIAL routine, which returns the registration string. We’re recommending that all customers search their code for calls to the SERIAL routine. For example, do a case-insensitive search for just SERIAL and look for instances of “xcall SERIAL” (in case there are tabs/spaces/returns between the words). See this topic in the FAQ for more info.
If you use the Synergy/DE Licensing Toolkit, be sure to get the latest License Key Generator from Customer Service. And if your code processes the registration string, you’ll probably have to update it to handle the larger string size. See more details for this topic in the FAQ.
Should I be using the Licenses site in the Synergex Resource Center to manage my licenses?
Yes! Make sure you are fully utilizing the features on this site. There you can take care of many of your license tasks, including generating keys and generating REV11 install codes. Doing these tasks yourself instead of contacting Synergex Customer Service is better for you since the site is available whenever you need it, and it’ll free up our Customer Service team to assist customers with tasks that they can’t do themselves.
If you don’t yet have a Resource Center account, go to the Resource Center and click Create Account in the top right corner. Your company should have at least one Site Admin who can access your licenses and also control access to your Resource Center privileges. If you need to add any Site Admins, contact Customer Service.
How should I prepare for the 2021 REV11 licensing requirement?
Make sure you’re set up to manage your licenses in the Resource Center. (See above.)
Check to see if your application is using the SERIAL routine or the Licensing Toolkit and if so, address those accordingly. (See above.)
Determine which of your licenses will require REV11 licensing and when they renew. You can view your licenses in the Resource Center, show only Subscription licenses, and sort by End Date. It shows which licenses are already using REV11 licensing. You can click on a license to see if it’s a major version (e.g., 9 or 10). For v9 licenses, you can run LMU on your version 9 systems to determine if they are 9.5.3b or higher.
Make plans to update your licenses to REV11 licensing before the month they renew so the keys will be automatically updated when Synergex processes your renewal.
The scenario: You and your team of fellow genius software developers have created a great application. It’s been out in the wild with customers using it and loving it, but they have questions and aren’t quite getting what they need from your documentation and release notes, and your support team is always bogged down with the same questions. So how can you educate your customers to help them get the most out of your product?
Talk to Support
As a developer, you have strong ideas about how people should be using your product. However, people are people, and they’re going to take what’s in front of them and do all kinds of things you never expected. That’s where your support team comes in. (Note: If you’re with a small company and you ARE the support team, find a way to keep track of this stuff, if you’re not already.) Support is on the front lines—they’re an infinite well of knowledge when it comes to the ways people are actually using your products and their problem areas. If your support reps are using some sort of case management system (we use Salesforce Service Cloud), they can easily pull reports of bugs reported or questions asked by product or release version to get you the information you need quickly. Plus, if you can convince support that these educational resources mean people will be able to do “self-serve” support and free up more of their time, they’ll be more than happy to get you whatever you need. You can find out how helpful the Synergex support team is here.
Get ideas straight from the source
Another avenue for figuring out your customers’ pain points is hearing directly from them, and there are a number of ways to do this. The most direct, of course, is the good old-fashioned direct conversation. Are you or your sales team reaching out to customers with any sort of frequency to see how they’re doing? You’d be surprised what a 15-minute conversation or direct email exchange can uncover. You can also create places for people to provide this information directly. Two ways to do this are surveys (some people loooove to give feedback) or a forum where customers can post their thoughts, ideas, and issues with your product. At Synergex, the latter is our Resource Center, and customers use it to air their thoughts and curate their wish list for new product features.
Work with Marketing
Now that you know the “What”—what questions you need to answer and what topics your customers are interested in—you need the “How.” That’s where marketing comes in. If your company has a marketing team, you may see them as the people who sometimes send out emails or edit your website, but marketing can be a valuable resource from the very beginning of this process through the end. They can help you create surveys, advertise your forum, or help create other ways for you to reach out to customers. They may bring a different perspective to help you identify useful areas of focus. They can put their creative powers to use, helping you create and brand your content. And, more importantly, they can help you get your educational product out there (more about that later). Feel free to pick our brains if you have questions.
Make it digestible, accessible, and fun
Sure, you have the dry (though they don’t need to be), dependable resources that come standard with software development: release notes, documentation, etc. But you’re a creature of the internet—you know how short attention spans are, even for detail-oriented, technical people like yourself. Plus, people learn in different ways, AND they need to hear the info multiple times before it sinks in, so providing information about your products in various formats can help accommodate those different learning styles. What you need is content that’s simple and quick to digest.
Here are a few things we’ve had success with at Synergex:
Videos can be an extremely useful tool when wielded well. They’re a constant resource that your customers can revisit again and again, and they can save you and support from having to answer the same questions over and over and over again by simply linking to a video.
At our company, we provide “cheat sheets” to our customers upon request—visually pleasing, easily readable single- or two-sided documents that contain commonly used statements or shortcuts our customers can use when building their product with our code. Materials like cheat sheets let customers feel like they’re in on a secret (which they are!) and like they’re getting more bang for their buck.
Webinars are a great way to promote an idea or product you’d like your customers to know about, while also being a great educational resource for some of the more niche topics your customer may be curious about.
Have all of this information easily findable on your website. It would suck to spend all this time creating content only for people never to find it. We’ve made an effort to move most of our helpful content out into the open, like our Answers and Ideas forums, so you can see it without having to log into the Resource Center. Our KnowledgeBase will be the next component that we move from behind the curtain. Watch for an announcement about this soon. Bonus: If you have more information readily available, it lowers the adoption barrier for potential new customers. People are more likely to pull the trigger on a purchase if they see that you’re engaged and customer oriented with useful, easily accessible information about your product.
Remember how we said you need to repeat information multiple times before people retain it? One way to do that is to employ cross-referencing. You can link to your resources from other resources to reinforce your messages. For example, our quarterly Synergy-e-News newsletter links to blog posts and technical articles that we may have only promoted once but want to emphasize. And those tech articles and blog posts often link to our documentation, videos, tutorials, etc. Give your customers every opportunity to find your content by putting it in front of them more than once.
This stuff does NOT have to be as dry as your documentation (though we’ve been known to sneak in a few surprises there too). Have some fun with your educational materials, be informal, show you’re human. Your customers will have more fun too and potentially retain more.
Let people know about it
This is, again, where you may need to collaborate with your marketing team. They have all kinds of ideas and resources for getting information out to your customers (and potential customers), from emails, to ad campaigns, to social media, to website optimization, to standardized email signatures with links to resources, and more. AND they can make it aesthetically pleasing—never underestimate the appeal of content that looks, well, appealing. Find creative ways to let your customers know about all the great stuff you have for them, and they’ll be happier for it.
What strategies do you use to educate your customers?
Education: It’s not just for customers
While this post focuses on external resources for customers, internal training and educational materials for employees are important too! Not sure how to start creating internal training materials for your developers or support representatives? Contact your Synergex account manager to learn about setting up a system assessment with our consulting department as a first step – our system assessments provide a documented architectural overview of your application, touching on relevant aspects of your overall business, which you can then turn around and use for your internal onboarding.