Synergex Blog - News Straight from our Team | Synergex
Phone800.366.3472 SupportGet Support DocumentationDocumentation Resource CenterResource Center
search
close
Open Menu

Synergex Blog


I’d Like Some Information with that Information, Please

By Liz Wilson, Posted on October 29, 2020 at 5:16 pm

Liz Wilson

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.  

Context-Independent Components

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.


[1] According to the National Eye Institute, approximately 1 in 12 men are color blind.


Updating Synergy/DE production licenses to REV11 licensing / Jan. 1 requirement

By Cindy Limburg, Posted on October 28, 2020 at 11:44 am

Cindy Limburg

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.3.1 – 10.3.3 on supported Windows and Unix platforms.

What’s the requirement?

After January 1, 2021, when you renew any 9.3.1­­–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.3.1–10.3.3 licenses will be issued with REV11 licensing on these platforms.

This requirement does not apply to licenses lower than 9.3.1, 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.3.1 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?

  1. Make sure you’re set up to manage your licenses in the Resource Center. (See above.)
  2. Check to see if your application is using the SERIAL routine or the Licensing Toolkit and if so, address those accordingly. (See above.)
  3. 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.3.1 or higher.
  4. 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.
  5. Review the information and instructions on the Synergex REV11 website and in the documentation for Windows or Unix.

Thank you for your efforts to update your licenses. Please let me or your account executive know if you would like any assistance in preparing for your updates.


5 Strategies for Creating Educational Content that Customers Will Use

By Heather Sula and Jacklin Garcia, Posted on October 22, 2020 at 3:05 pm

Heather Sula and Jacklin Garcia

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:

YouTube videos/tutorials

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.

Cheat Sheets

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

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.

Accessibility

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.

Cross-referencing

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.

Fun

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. 

Bottom line: get creative and collaborate. 


Announcing Synergy/DE 11.1.1f

By Steve Ives, Posted on September 22, 2020 at 2:11 pm

Steve Ives

We are pleased to announce the release of Synergy/DE 11.1.1f. This is a quality improvement release available immediately on all Synergy-supported platforms. Please refer to the release notes f0r important information on issues addressed by this release.

Amongst other things, this release addresses several issues relating to running xfServer with encryption enabled. This is a configuration that we highly recommend for all xfServer deployments. If you are doing so and are running an earlier version of Synergy 11, we encourage you to upgrade your server and client systems to 11.1.1f.


Improving Our Internal Development Process

By Steve Ives, Posted on September 21, 2020 at 11:21 am

Steve Ives

We’re about to release another version of Synergy, and when we do you may notice that we’re not documenting any new features in the release. This is an intentional change, and I wanted to let you know about it ahead of time.

In addition to working on Synergy/DE, our development teams are also working on re-organizing many of our internal systems, tools, and practices. We’re centralizing almost all of our development around Microsoft Azure DevOps; we’re consolidating all version control on Git (currently, depending on the product area and platform, we also use PVCS and Subversion), we’re making extensive use of CICD principles and tools to build automated build and test pipelines for all aspects of the product, and much more.

The only exceptions to this are our open source products, CodeGen and Harmony Core, which will remain in their current locations on GitHub. This will be an on-going process extending well into 2021 and, when complete, will put us in a great position to be able to return our focus entirely to Synergy/DE within a modern, highly efficient and productive development environment.

And as part of this reorganization of our environment, tools and practices, we have also made some decisions about how we’re going to release changes to the Synergy/DE products. For the core Synergy/DE runtime products, we have decided to revert to our earlier practice of only releasing quality improvements in patch releases; new features will be released less frequently, in numbered product releases. There are some other changes coming down the pipeline, but we’re still fleshing out some of the details, we’ll let you know as soon as things are firmed up.

This decision applies to the runtime products only, not to the development tools; you will still see regular releases for the Visual Studio-based development tools (and maybe more) in the near future. And development and releases of CodeGen and Harmony Core will continue as normal.


xfBBQ and You: “Wait… Who Ordered that cheeseburger Again?” A Browser-Based Solution to an Age-Old Issue

By Johnson Luong, Posted on August 15, 2020 at 5:06 pm

Johnson Luong

Ahh… summer BBQs. Is there anything that defines the summer season better than a good BBQ? Yes, yes, there is: A browser-based application, made with React and Redux, that helps you organize your BBQs. Don’t you agree? How else are you going to keep track of who ordered what and with which toppings? Did Aunt Vi want one or two hot dogs? Did she order them burnt or regular? Did you buy enough turkey burger patties? You forgot that Manny and Bigbah both wanted two veggie burgers each! How could you have accounted for that?

Enter xfBBQ, the solution to all your existential BBQ woes. I built xfBBQ using the latest and greatest in web application technology, React and Redux. It’s the ultimate answer to managing your perfect BBQ. As its back end, xfBBQ uses the excellent Harmony Core framework—your solution to modernizing your Synergy applications with web services!

Is all this hyperbole not enough for you? Do you also need to know how you can get your hands on this wonderous application? Easy peasy: It’s on our GitHub, of course! Just clone it and see for yourself. You can check out the application live, too. xfBBQ is for everyone!

You may be wondering, how did I xfBBQ? What do you mean “how” did I xfBBQ? That’s not even a valid question. I don’t think xfBBQ is a verb. But maybe you meant how did I create xfBBQ? Now that’s an excellent question, which calls for an equally excellent answer! Fortunately, you can find my four-part series about xfBBQ on YouTube.

Part 1 explains how to set up your Harmony Core and React environments from scratch. I talk about what prerequisites you need for the app. I also explain in detail how to edit your regen.bat to get Postman working with Harmony Core. In addition, I talk about the first stages of getting the front end and back end to talk to each other. By the end of this segment, the application can display raw JSON data coming from Harmony Core to the front end.

In Part 2, I clarify how to add a primary key generator in order to POST new data to the back end. I add a user registration form to show off this new feature. Then, Redux comes crashing into the BBQ party, so I need to explain how it all works. Redux is here to stay, so I integrate Redux into our app and show it working in a new login form. Based on the permissions set on who logs in, the application will display different pages for different users, all thanks to Redux.

Part 3 introduces reCAPTCHA into the picture. I show how to use reCAPTCHA to protect both the front and back end from user registration bot attacks. Afterwards, I add batch order processing to the mix. This allows a user to add multiple orders at the same time, all as one POST, leading to less strain on the back end. In addition, I update the UI a little bit to make the data coming from the back end easier to read.

Lastly, Part 4 explains why xfBBQ needs user authentication. Because the back end is public, it needs protection from all sorts of nasties out there in the wild. User authentication helps by forcing a user to sign in from the front end before being able to do anything with the back end. Finally, I go over styling the application using Bootstrap so that it looks all nice and fancy. As a bonus, Bootstrap is responsive, meaning that the web application now works on your phones! As an ultimate step, I discuss how to use create-react-app to build a production version of xfBBQ. I set up Harmony Core to use this production build, too.

So, what are you waiting for? xfBBQ is the perfect example of how you can modernize your applications and bring them to the web. In my webinars, I explain everything in depth, from initial setup to final commit. Plus, with a few more steps, your applications can be mobile friendly! Now, who’s ready to put their hot dogs on the grill? I’ll be waiting… Hold the mustard, please.


Migration to New Downloads Site Completed

By Steve Ives, Posted on August 14, 2020 at 2:40 pm

Steve Ives

Back in June, I announced the launch of a new product downloads site, which at the time provided access to all of the Synergy 11 downloads, and that downloads for earlier versions would be migrated over the coming months. I am pleased to announce that process is now complete and that the downloads for products all the way back to Synergy 7.1 are now available from the new site and have been removed from the old resource center.

The old download pages also included downloads for the Synergy V6 products but, because the way the software was distributed was so different back then, we decided not to migrate those old versions to the new site. For now, the version 6 files can still be downloaded from the old resource center, and we will make those files available via some alternate mechanism before that site is eventually decommissioned.


Announcing Synergy/DE 11.1.1e

By Steve Ives, Posted on July 14, 2020 at 2:04 pm

Steve Ives

Due to the discovery of a potentially serious issue in the 11.1.1d release of Synergy/DE, we have decided to withdraw that release on Windows and UNIX platforms and replace it with 11.1.1e, which is now available.

To understand the issue, it is first necessary to understand that enabling compression on a data file can, in rare cases, result in a small increase in the size of some records! This can only occur if the data in a record is not compressible, yet the compression itself adds a small overhead.

It was found that when reading records from a compressed file, by RFA, any records exhibiting this “negative compression” would have one byte of bad data returned at the end of the record.

11.1.1e includes new versions of Synergy/DE 32-bit and 64-bit for Windows and Unix platforms, and Synergy DBL Integration for Visual Studio (build #2769).

We strongly recommend that anyone who has updated to Synergy/DE 11.1.1d on the affected platforms should immediately upgrade to 11.1.1e.

As we needed to release a new version to address the READ by RFA issue, we decided to also include several other quality improvements that had already been completed.

Synergy/DE Runtime

(Windows) In 11.1.1d, when using SYN_RESIZE_SCALE or having a monitor DPI change, some .NET controls would fail to repaint if the application moved between monitors of different DPI or scaling.

Traditional Synergy Compiler

A global structure with the same name as a subroutine no longer causes a segmentation fault when loading prototype files when there are different prototype files for the global structure and the subroutine.

Synergy Configuration Program

We addressed an issue in rsynd that was causing the SynConfig utility to fail with a “Could not complete services import” error when specifying a user account during service import.

Synergy DBMS

We enhanced the isutl utility when recovering change tracking files with bad change tracking links, and the utility no longer crashes if certain wildcard file operations are attempted.

Visual Studio Build System

We fixed an issue in the incremental build feature in SDI 11.1.1d-2749 through 11.1.1d-2763 that caused full project builds to occur when only partial builds were necessary for projects using common.props and with non-Synergy references.

We fixed an issue that prevented low-level libraries in Synergy .NET Core solutions from automatically rebuilding when an output file was missing.

Visual Studio Property Pages

We fixed an issue that prevented Visual Studio settings imported from a file from working until a Synergy DBL option page (Tools > Options > Text Editor > Synergy DBL > …) was opened.

We fixed an issue with Synergy .NET Core and .NET Standard projects that prevented SDI from resolving known MSBuild properties used for pre-build and post-build events.

For additional information and tracker numbers associated with each of these items, please refer to the release notes.


Announcing SDI 11.1.1d-2763

By Steve Ives, Posted on July 2, 2020 at 1:01 pm

Steve Ives

Shortly after the recent release of SDI build 2755 we discovered an issue that we wanted to address as soon as possible, so today we are announcing the release of build 2763, which we recommend for everyone using Visual Studio for Synergy development.

We are not aware of any customers being affected by the issue, and we have removed the download link for the previous build.

For additional information please refer to the release notes.


No More SDI “Developer” Builds – Just Releases

By Steve Ives, Posted on June 29, 2020 at 3:12 pm

Steve Ives

I wanted to make you aware of a small change that we have recently made to the way that we refer to “interim” releases of the SDI (Synergy DBL Integration for Visual Studio) product.

A few years ago, it became clear that we needed to be able to release our Visual Studio Integration tools on a more frequent cadence than the main Synergy/DE product. So we started doing interim releases that we referred to as “Developer Builds.” Each developer build was identified both by a version number and a build number.

Initially, these builds were often not subject to the same levels of stringent testing that a build for a full release would be, and we made that clear to customers. But now, thanks to considerable improvements in our automated testing processes, these interim builds are now subject to the same levels of inspection and testing as a build for a full release, and it is no longer necessary to discriminate between developer- and full-builds.

For this reason, we have decided to stop referring to these releases as “Developer Builds,” they are now all just “SDI Releases,” which will continue to occur on a much more frequent cadence than Synergy/DE.



xfBBQ: Full-Stack Web Development with Harmony Core

By Steve Ives, Posted on June 15, 2020 at 9:00 am

Steve Ives

On Thursday, June 18th we will launch a new series of webinars called the xfBBQ Webinars, and I’m guessing this may require some explanation. So here goes:

What is xfBBQ?
xfBBQ is a browser-based application, designed and created by Johnson Luong, Synergex Software Developer, (with minor input from Jeff Greene, Harmony Core Technical Lead, and Synergex Principal Engineer) to help us plan for our regular company BBQs. The ones that we are NOT currently enjoying because of the COVID-19 pandemic! Generally though, we host around six BBQs outside our office at lunchtime during the summer season, but most of you won’t care about that because you’re not invited 😉!

Who is Johnson Luong?
Johnson is a valuable member of our development team who, since joining Synergex in 2014, has worked on many different parts of the Synergy/DE toolset. Recently he has played a major role in the creation of our Windows installations using the WiX Toolset, while at the same time having made significant personal contributions to the development of the entire Harmony Core framework.

What does xfBBQ do?
The app allows customers (employees) to register for access, then informs them when BBQs are scheduled, and allows them to select from, and customize, various menu selections for each BBQ. For example, for a given BBQ, I might use the app to express my preference for a “medium rare cheeseburger with hot peppers and a well-done dog.” I could even opt for two burgers, or two dogs, or both … but in doing so I may risk the wrath of Samantha, our wellness coordinator! Johnson assures me she doesn’t have a special “back door” into the data, but I’m not convinced!

Anyhoo, the app collates the orders, presenting the BBQ officials (all who lavish in Synergex VIP status, and rightly so) with the required lists of requirements and ingredients for each BBQ event. Yada, yada, yada.

Why did we do this?
Because having developed an awesome (our words, but we’re confident) web-services framework called Harmony Core, customers were asking for real-world examples of how it might be used. And … we had a real-world problem to solve, namely that we really needed to control the amount of burger patties and sausages that we were purchasing from Costco!

Why xf?
Just for fun! Johnson believes that he has now defined the actual meaning of “xf”, but trust me, he has no clue! Until it’s been ratified by Marketing it means nothing, and that process could take years!

But seriously, this webinar series presents to you an end-to-end view of how a modern browser-based application is developed. You will see how the Harmony Core back-end is built, but you have seen that in previous webinars. What is much more important here is the focus on the development of the front-end application that interacts with the Harmony Core service.

This will be a series of four webinars, as follows:

Thursday June 18 @ 9 am PDT
Creating a Harmony Core solution and hooking it up to a new React app.
Register for part one here.

Thursday June 25 @ 9 am PDT
POSTing data in React, and an introduction to Redux.
Register for part two here.

Wednesday July 1@ 9 am PDT
Captchas, batch processing, and other CRUD.
Register for part three here.

Wednesday July 8@ 9 am PDT
User authentication, styling with Bootstrap, and making a React production build.
Register for part four here.

xfBBQ is a browser-based app. It is a single page application, developed using React and Redux, and using appropriate sprinkles of HTML and JavaScript along the way.

We are completely excited that over the last few months we have built up a marvelous following for our Harmony Core webinars, but I’ll be honest, there won’t be much DBL code to see here! Regardless, I encourage all of you to join us for this webinar series, and to stick with it to the end.

If you’re a DBL dev you may not learn much about your own part of the puzzle that is building a modern distributed application. But I promise you, by the end of the process you will have learned a lot about what it takes to pull together all the other pieces of that puzzle. Building a modern, distributed application requires skills in many different areas, and this webinar series touches on many of them.

It is most important that we get your non-Synergy developers to participate in these webinars. Your web devs will be right at home here, but if you don’t have web devs then invite your Windows devs, your iOS and Android devs, and your MacOS devs.

Web services are accessed via HTTP, and pretty much every development language can do that! The perfect target audience for these webinars is anyone that is involved in developing your next-generation apps. It’s not about any one part of the process, it’s about the entire process, end-to-end, and that will require devs with many different skill sets get together, and to work together to create success!


Unit Testing in Traditional Synergy

By Steve Ives, Posted on June 12, 2020 at 9:00 am

Steve Ives

One of the most significant new features introduced in Synergy/DE 11.1.1d is a unit testing framework for traditional Synergy. The framework is based on the MSTest framework that we have supported in Synergy .NET for some time and is delivered as a component of our Synergy DBL Integration for Visual Studio product.

Introduction

Unit testing is a method of testing software at a low level, usually at the level of individual subroutines, functions, and methods. Unit tests are frequently written by the same software developers that write the code being tested, and sometimes, in the case of test-driven development, even before the actual code being tested.

The idea is to exercise each routine in as many different scenarios as you can think of, passing various combinations of parameters, both correct and incorrect, and perhaps by altering the execution environment. The goal is to prove that the routine responds correctly in all cases when used correctly, and also to prove that it fails appropriately in all cases when it should fail.

Unit tests are generally small and fast to run individually, but numerous. It is not uncommon to have hundreds or even thousands of unit tests, and, ideally, those tests execute quickly enough to make it feasible to run them frequently.

In some environments, unit tests are configured to run each time the developer builds a new version. In other environments, tests might run as part of a “continuous integration / continuous deployment (CI/CD) pipeline that runs each time developers attempt to check code into a central repository, and the failure of a unit test might cause the check-in of the code to fail.

Adding Unit Tests to a Solution

To make adding unit tests easy, we have provided a new Visual Studio project template named “Unit Test (Traditional).” It adds a traditional Synergy ELB project to your solution, and that project contains some sample unit test code.

Adding Test Classes and Test Methods

Unit test projects contain unit test classes, and a unit test class is simply a class that is decorated with a {TestClass} attribute. Here is an example:

Unit Test Class

A unit test project can include any number of unit test classes. Generally, a test class groups together a related set of tests. In the case of the code above, notice the name of the class is CustomerApiTests. Presumably, tests that exercise a Customer API are to be added later.

Each test class contains one or more test methods, which are, once again, decorated with an attribute. In this case the {TestMetod} attribute. Here is an example of a test class containing several test methods:

Unit Test Methods

The code above declares three test methods, each of which tests a particular piece of functionality of the API. But this is just a simple example. In an actual test class, there may be several test methods to test each of the API functions in different ways. The number of test methods per function is typically determined by how complicated the function is, how many parameters it has, how many different things it can do based on those parameters, etc.

Coding Test Methods

Each test method typically contains a small amount of code, sufficient to test a particular scenario. The operating environment must be the same each time a particular test runs; we’ll talk more about that later. Here is an example of a test method that contains some simple code.

Unit Test Code Example

When writing unit tests, many developers follow what is known as the “AAA Pattern,” which stands for “Arrange, Act and Assert.” First, you arrange (or prepare) whatever is needed to execute the test, then you “Act” by executing the test, and finally, you “Assert” the result of the test. The name of this final phase is interesting because, in MSTest, Assert is the name of the actual class used to notify the framework of the results of a test.

In the example above, the arrange phase involves creating a new instance of the CustomerAPI to use for the test. The Act phase then uses that object to make a call to the API function to be tested. And in the Assert phase, the code checks that the expected customer record was returned.

The Assert Class

The Assert class has many different static methods used to signal success or failure based on various scenarios. The method you choose to use depends on the nature of the tests that you need to execute to determine the success or failure of the test. Some examples of Assert methods are:

Assert.AreEqual(expectedObj, actualObj)
Assert.AreNotEqual(notExpectedObj, actualObj)
Assert.AreSame(expectedObj, actualObj)
Assert.AreNotSame(notExpectedObj, actualObj)
Assert.Fail()
Assert.Inconclusive()
Assert.IsTrue(condition)
Assert.IsFalse(condition)
Assert.IsNull(object)
Assert.IsNotNull(object)

Most of these methods also have several overloads with different combinations of parameters. For example, most also have a variant that allows an error message to be recorded in the case of a failing test, and more. In traditional Synergy, the Assert class is located in the Synergex.TestFramework namespace, along with the various attributes mentioned earlier.

By the way, I should mention that if any test method fails with an error, or throws an exception, then the test framework catches those errors and exceptions and reports them as test failures in the Test Explorer window.

Building Tests

When you build a solution that includes a unit test project, that project builds just like any other traditional Synergy ELB. It is likely that the code being tested by your unit tests exists in one or more other projects in your solution, so to give your unit tests access to that code, you simply add references to the other projects. Also, if you are using a Synergy repository project, and your unit tests require repository data definitions, then also add a reference to the repository project in the usual way. And like other Synergy projects in Visual Studio, if your development environment and code rely on the values of environment variables that are defined using the “Common Properties” method, you may need to opt- into those common properties via the project properties dialog in the usual way.

The Test Explorer Window

Visual Studio includes a piece of UI called the Test Explorer. If you don’t see it already displayed, you can display it by using the menu commands Test> Test Explorer.

Empty Test Explorer

When the Test Explorer window it first displayed, it often starts out empty, but notice the instructions that are displayed in the window, which says, “Build your solution to discover available tests.”

Once you build a project that contains unit test classes and methods, the Test Explorer window will discover and display your tests:

Discovered Tests

By default, your tests are displayed in a hierarchy based on your project name, namespace, and class, and then the individual methods are displayed below each class.

Notice the two green buttons to the left side of the Test Explorer toolbar. These are the Run All Tests and Run Test buttons. In my sample scenario, only one of the tests contains any code; the other two test methods are configured to throw an exception that says “Not implemented.” Here’s what happens when the Run All button is clicked:

Test Results

As you can see, Test Explorer is presenting a summary of what happened when it attempted to run each of the three methods. One test passed, and two failed. Notice the color-coded icons, green is good, red is bad, and notice that all of the parent folders are also red. For a parent folder to show a green icon, all tests below must pass.

Also, notice how the Group Summary pane is displaying a summary of the pass/fail information. This is because we have a folder node selected in the tree. If we select an individual test, then the pane displays the details of the result of that specific test:

Individual Test Results

In addition to executing all tests or a single test, you can also select a number of tests, and use the right-click menu to execute just that set of tests:

Selected Tests Run

In the above screenshot, you can see that the third test was not executed, which is indicated by the light color of its icons background.

Debugging Tests and Tested Code

In addition to merely running tests, it is also possible to use the Test Explorer to launch debugging sessions for specific tests. To do so, right-click on the test and select Debug. A debugger session will start, and the debugger will break in the test method. You can debug the test method, and as long as you have the source code available, you can also step through into the underlying code being tested.

Organizing Tests

As the number of tests in your environment grows, it is likely that the sorting and filtering methods provided by the Test Explorer may not be enough to allow you to work efficiently. For this reason, it is also possible for you to apply custom categorizations to your tests in code.

This is done by decorating your test methods with an additional attribute named {TestCategory}. Here is an example:

Categorizing Test Methods

And having done so, there are options in the Test Explorer toolbar to modify the display hierarchy to include “Traits,” which are the custom attributes that you have applied to your test methods. Here is an example of that:

Test Explorer Traits View

Environment Initialization and Cleanup

As you start to really get into writing unit tests, you will quickly realize that a big part of the road to success lies with your ability to always run your tests in a consistent and known state. For example, if your tests are reading and writing data files, those data files need to be in a known good state.

To help with that, the framework provides some special functionality that can be used to establish and reset the environment, if necessary. In MSTest, there are six such mechanisms; in traditional Synergy, we currently support four of them. These are:

  • ClassInitialize – runs once, BEFORE any test in the class runs
  • TestInitialize – runs BEFORE EVERY TEST in the class
  • TestCleanup – runs AFTER EVERY TEST in the class
  • ClassCleanup – runs once, AFTER all tests have completed

You can optionally add methods to your test class to provide each of the functions that you require. To do so, you simply add public void methods, decorated with an appropriate attribute, like this:

Special Test Class Methods

For example, if you are testing an API, and that API is completely stateless, then instead of creating an instance of the API in each method, then using it and discarding it, you could use a ClassInitialize method to create an instance of the API, code all of your test methods to use that same instance, then delete the instance in the ClassCleanup method.

If your API is not stateless and you do require a new instance for each test, you could simplify the code in each test by defining the code to instantiate the API in a TestInitialize method and discard it in a TestCleanup method. The runtime overhead is the same, but you only have to code the APU creation one time instead of potentially hundreds of times.

In MSTest, there is a third level of Initialization and Cleanup that happens at the “Assembly” (ELB in this case) level. This is implemented the exact same way, via the attributes {AssemblyInitialize} and {AssemblyCleanup}. We do plan to add that support; it just didn’t make it into the initial release.

Summing Up

This post is not intended to be a complete guide to the subject of unit testing in Traditional Synergy, and indeed there are other features that have not been discussed here. Instead, the intention was to provide enough information to pique your interest, and hopefully, that goal was achieved.

I encourage you to refer to the Synergy documentation for additional information, and we are looking forward to receiving your feedback on this important new technology for traditional Synergy.


Announcing a New Product Downloads Site

By Steve Ives, Posted on June 9, 2020 at 6:49 pm

Steve Ives

We are introducing a new download experience for all version 11 products. As we continue to migrate functionality from the Original Resource Center to the New Resource Center, product downloads are the latest functionality to move across. To access downloads for version 11 products, first, go to the Products page, and, if not already logged in, then do so.

New Products Page

 

As you can see, the products page now includes a new Downloads option, which, takes you to a new, improved, and simplified download experience. We have tried to make the experience as simple as possible for most people, with all of the most frequently downloaded products being available with a single click.

New Main Downloads Page

The most popular downloads for the latest released version are available via a single-click on one of the prominent blue buttons. But if you need downloads for ancillary products, such as xfNetLink .NET, or different platforms, or older v11 versions of the products, then the text links under “Downloads for all Supported Platforms” take you to pages where everything is available. For example, here’s the downloads page for the IBM AIX platform:

New Platform Downloads Page

The downloads for the latest version of products for the platform are once again directly downloadable via a single click.

Also, notice the “Select Version” drop-down control, which allows you to pick from earlier versions of the product for the selected platform. Currently, we have moved the downloads for all of the version 11 products, so that includes the following versions:

  • 11.1.1
  • 11.1.1a
  • 11.1.1b
  • 11.1.1c
  • 11.1.1d

This represents a significant change from the previous download site. Previously, for any given release, say 11.1, you would only be able to download the latest patch version of any product. When we published a patch for a product, we removed all earlier versions of that release. From now on, when we publish any download for a product, that download remains available for use at any time in the future.

The only exception to this rule is in the improbable scenario that we discover a severe flaw in an installer or in the product, which requires us to replace a download with a subsequent version and remove the previous version to guarantee that nobody else downloads it.

The downloads for all of the previous product versions are still available in the Original Resource Center. We do plan to move those downloads across to the new site, version by version, starting with version 10 and working back from there. We hope to migrate the version 10 downloads across somewhere in the June time-frame, but we have not committed to a specific date yet.

By the way, if you scroll down a little on the platform download pages, you can access various important information and notes, and view a release log showing the timeline of the current and previous releases.

If you attempt to access the new downloads site and find that you can’t see it, the most likely reason is that individual users must be granted downloads access within the resource center. This was also the case in the original resource center, and we believe that we have migrated the permissions to the new site. But if you think you should be able to see downloads and can’t, try contacting your resource center admin (each company has one or more nominated admins), or contact the Synergex Customer Services team for assistance.

We hope that you like the new downloads experience, and we look forward to receiving your feedback.

 


Announcing Synergy/DE 11.1.1d

By Steve Ives, Posted on at 6:49 pm

Steve Ives

More resilient ISAM files, exciting new developer tools, and much more.

A new Synergy/DE patch release is now available to download for all platforms. All customers are encouraged to update to 11.1.1d for access to new features and quality improvements.

Highlighted New Features

The 11.1.1d release introduces many new features across the product set. These are some of the more significant enhancements:

Global I/O hooks

A new “global I/O hooks” mechanism enables you to add I/O hooks to channels within an application without making any changes to existing code. Add an external subroutine named SYN_GLOBALHOOKS_OPEN to your environment, and it gets called during every successful OPEN statement. Add code to the routine to add I/O hooks to the channel as required.

Among many other use cases, this allows you to add data replication to an application with absolutely no changes to the existing code. The feature is available on Windows (in both traditional Synergy and Synergy .NET) and Unix systems. Unfortunately, it was not possible to add support on OpenVMS.

FULLRESILIENT ISAM Files

We have extended the “Resilient ISAM” capabilities introduced in earlier 11.1.1 releases by adding a new ISAM feature called FULLRESILIENT. This new option provides similar capabilities to the existing RESILIENT option, except that for all writes (STORE, WRITE, or DELETE), data is written directly to disk using the OPEN mode FILE_FLAG_WRITE_THROUGH on Windows or O_DSYNC on Unix.

The FULLRESILIENT option can be enabled when using the ISAMC subroutine, the bldism and isutl -p utilities, and when using the ISAM definition language in XDL files.

Support for MYSQL 8

We added support for MySQL 8 in the SQL Connection API on Windows and Linux 64-bit systems. There are some platform restrictions because MySQL 8 requires OpenSSL 1.1.1, which may not be available on some Linux systems. Refer to the release notes for additional information.

Unit Testing for Traditional Synergy

We added a unit testing framework for traditional Synergy, based on the capabilities of the MSTest framework that we already support in Synergy .NET. It is shipped as part of our Synergy DBL Integration for Visual Studio product, although you can also execute tests outside of Visual Studio.

It is easy to get started because we provide a new Visual Studio project template to add a unit tests project to your existing solutions. You can execute tests both from inside Visual Studio, with full Test Explorer UI support, as well as outside of Visual Studio via the VSTest.Console.exe application and .runsettings files.

If you have ever written unit tests for MSTest, this will feel like a familiar environment. You write test classes containing test methods; you decorate those classes and methods with various unit testing attributes. Test classes are decorated with a {TestClass} attribute and test methods with a {TestMethod} attribute. Other attributes facilitate grouping tests by trait, and just like in MSTest, there are a range of options for both preparing a test environment (via {ClassInitialize} and {TestInitialize} methods) as well as cleaning up the environment after tests have run (via {TestCleanup} and {ClassCleanup} methods).

The framework also provides a new Assert class containing a large number of static methods that are used to indicate test method completion status to the test framework.

We know that this does not represent complete MSTest compatibility; in particular, we still need to implement an equivalent of {AssemblyInitialize} and {AssemblyCleanup} methods, which we’ll be working on next.

For now, simply because this new capability has not had much exposure to customers, we are considering this to be a pre-release of the feature, and the release of the 11.1.1d version of Synergy DBL Integration for Visual Studio may trail the main release by a few days. We very much look forward to receiving your feedback on this significant new feature.

Traditional Synergy Debugger Rewritten

We have rewritten the traditional Synergy debugger to improve performance and add many new capabilities, primarily in the area of OO, examining objects, etc. The new implementation yields significant improvements when debugging traditional Synergy code using the Visual Studio IDE’s integrated debugging tools.

As part of the debugger rewrite, we were able to incorporate several new features, all of which improve the debugging experience generally, but in particular, improve the experience when debugging traditional Synergy code in the Visual Studio IDE.

We improved the TRAP ON environment, which now causes a break at the actual line where the error or exception occurred. Previously, the break occurred at the line following any ONERROR or CATCH processing. We also introduced support for evaluating multiple levels of casts, such as “((c2)((c1)a.b).c).d”. And we made it possible to evaluate objects that can vary at runtime (e.g., @* and collection elements) by making it possible to dereference based on their runtime contents. Individually, these improvements are small, but together they result in a marked improvement in the overall experience when debugging in Visual Studio in terms of better hover-over support and improved information in the Locals window.

Other Enhancements

In addition to the highlighted new features mentioned above, this release also includes many more minor enhancements, some of which are listed here:

Add RESILIENT Features to Exiting ISAM Files

We enhanced the isutl utility so that the -p option can now add the RESILIENT option to an existing REV6 or higher file, or to a lower revision file that is being patched to REV6. To enable this option, use the new -qfile=resilient option. Refer to the release notes for additional information.

Enhanced .NET Assembly API Exception Handling

On Windows, we have improved exception handling behavior within the .NET assembly API, used to execute .NET code within a traditional Synergy application. Previously, a .NET exception caught in traditional Synergy exposed the .NET portion of the stack trace in the Message property and the Synergy portion of the stack trace in the StackTrace property. In the new release, the Message property now exposes the exception message, and the StackTrace property reveals the complete stack trace.

UI Toolkit High DPI Improvements

We have made further UI Toolkit enhancements related to improving the overall look and feel on Windows high-DPI displays. Specifically, we improved scaling for buttons and in windows non-client areas (title and menu bar), and we improved the sizing of buttons when the SYN_RESIZE_SCALE option is enabled. In the fonts section of synergy.ini, we added the ability to specify a font specifically for buttons. We also switched to using the Consolas font for the status bar unless a “status” font is specified. We also made some improvements when the monitors’ DPI settings are changed.

REV11 Licensing Upgrade Package Installer Improvements

We made a minor change to the REV11 Licensing Upgrade Package to support installations that are in a non-default location.

Performance Improvements

In addition to new features, we continually search out places that we can enhance performance, in both our tools and your running applications. Here are some of the performance enhancements in the 11.1.1d release:

Mitigation for Intel JCC Erratum Slowdown

We have changed how we build the compilers and runtime by enabling an MSVC compiler option to mitigate the performance impact caused by the Intel “Jump Conditional Code” (JCC) erratum microcode update.

Briefly, Intel released a microcode update for all Intel Gen6 and later processors, correcting an issue that caused “unpredictable behavior” in some circumstances. A side effect of the update is a 2% to 30% performance degradation of affected processors.

Microsoft recently added a new MSVC compiler option, which alters the code to mitigate the JCC Erratum performance degradation. It is essential to be aware of this change because Gen 6 processors have been shipping since 2015 and are likely in a large number of the systems we run today. While 2% of degradation isn’t that important, 30% of degradation could be devastating.

If you are affected by this situation and want a resolution, your solution is to upgrade to Synergy 11.1.1d. For additional information, read Mitigations for JCC Erratum (Intel) and JCC Erratum Mitigation in MSVC (Microsoft).

Select Class Speed Improvement

We have improved the Select class performance when using “sorted” OrderBy (and READ by RFA) over large ISAM files.

Unload to Unsorted File

We have added a new input file option to the fconvert utility on Windows and Unix systems, making it possible to perform file unload operations more quickly.

The new -k  option causes fconvert to use the /nonkey_sequential OPEN option to unload directly from the data file, without the use of any index, resulting in faster unload times but at the cost of the data in the output file being completely unordered.

Also, we have automatically enabled this option if both the input and output files are ISAM files, exclusive access is available, and the key being unloaded does not allow duplicates.

Improved Isutl Performance with Very Large Files

On Windows and Unix, we have improved the isutl utility’s performance when processing extremely large ISAM files (~800 million records or more).

Speed Boost for .NET I/O Code

In .NET, and when targeting the V11 runtime, we have improved the performance of all routines that use I/O statements by reducing object creation for every I/O statement executed to just one object for all I/O statements executed for the routine.

UI Toolkit Window Creation Speed

In Windows UI Toolkit, we have improved window creation performance to help mitigate slowdowns in Microsoft code in later Windows 10 releases.

Highlighted Quality Improvements

Of course, every release also includes quality improvements, many of which are directly related to customer issues. Generally, you would go to the release notes for detailed information about quality improvements, but here we call out a few of the more important ones that we feel customers need to know about:

Fixed “Class Handle Released” Runtime Failure

We fixed an issue that could occur in versions 11.1.1 through 11.1.1c, in which an internal runtime failure “Class handle released” occurred randomly, mostly in .NET interop code.

Corrected FCONVERT Random Freeze

We fixed an issue that occurred from 11.1.1 to 11.1.1c, in which fconvert randomly froze up in some instances where the ISAM file had multiple keys and the system had multiple CPU cores.

Addressed Debugger Hangs

We fixed an issue in the traditional Synergy compiler that could occur in versions 10.1.1 to 11.1.1c, where examining an unused variable in a module compiled -debug (rather than debug=full) caused the debugger to hang.

We also fixed an issue in the traditional Synergy compiler that could occur in versions 10.3.3 to 11.1.1c, where a step into a line accessing the get() routine of a simple one-line property caused the debugger to hang.

Visual Studio Builds Blocked

We corrected a situation that could occur when building solutions in the 11.1.1c SDI builds, where a thread-locking performance problem could cause Visual Studio build operations to be blocked, behind background IntelliSense load operations. As a side benefit, this fix should noticeably improve load performance for large solutions, especially those with Synergy Repository projects and C# projects.

SQL Connection Licensing Error

On Windows, we addressed an issue that could occur in versions 11.1.1 through 11.1.1c when using a network connection to a remote SQL OpenNet Server:  an “Exceeded Maximum User” licensing error could happen in some cases.

Erroneous xfServer Key Not Same Errors

On Windows and Unix, we corrected an error in 11.1.1 through 11.1.1c that occurred when using xfServer to access a file on a remote system: in some cases, a READ by numeric key could incorrectly report a “Key not same” error.

New Downloads Site

We have also introduced a new downloads site, which is currently live for all Synergy/DE 11 products. For more information on this please refer to Announcing our New Product Downloads Site.

 

As always, for a complete list of changes, please refer to the release notes, and Synergy/DE documentation for complete information.


Don't miss a post!

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Recent Posts Categories Tag Cloud Archives