Product
Support
Everything Else

Our Nasty Habit

29 April 2017 — Nineteen years into the history of Helix, a scant decade and a half ago, we slammed on the brakes. We laid down the law, and we set out, carefully and deliberately, on our journey to Helix 7.

Of course, little did we know that to get here, we would have to get through Helix 5 and Helix 6 first. Not to mention a whack-a-mole minefield of partly-buried misery that would regularly reach up and grab us by the ankles. In order to survive this hostile development environment, we had to create and nurture some nasty habits. With the announcement that Helix 7.0.2 is now available, one in particular is very relevant on this day. But more about that later.

Where we sit, as the people behind the curtain, we must often put our own feelings about using Helix aside to focus on keeping users happy. People who use Helix, and particularly those with Client/Server installations that include local, remote, or both types of access, are dedicated and devoted and drive nearly everything we do. Each new release brings a sigh of relief from behind our curtain, but it is generally reserved for having satisfied someone else’s desperate need. This time, it is also about us: about that part of us that set out to restore the joy to the experience of using Helix, the part of us that still smiles in fascination at what a wonderful tool we have at our disposal. For us, Helix 7.0.2 is about three things: better performance, more stability and giving our users a few surprises. Fire up a copy as soon as you’ve finished reading and you’ll see that it delivers on all three.

A relatively brief history of Helix 6 and 7

Many of us are creatures of habit, and while such creatures certainly have the ability to adjust to change, they generally prefer not to have to. Anyone who has dabbled in Helix 6 or 7 already knows that quite a bit of how Helix appears is often different from what it looked like back in the Classic Mac OS. One overriding design principle as we made the move to macOS was to make it easier for a new user to learn how to use Helix, and a key to doing that was to find a way to make every tool you need to work on anything available in a single place: the Inspector. Simply following that rule meant things would certainly look different. That said, not a single one of those changes included implementing a new design feature. As noted above, we had laid down the law, and the law for Helix 6 was “no new features” until we were no longer supporting Classic.

Of course, there have actually been plenty of “new features” added to Helix as we have gone along. Some of those came to us with improvements in macOS. Others resulted from the aforementioned but not-yet-discussed nasty habit. And it’s always important to remember that in some respects, at the very same time, for each new feature macOS “gaveth” it seemed to “taketh away” another. There is ample verbiage on this website to illustrate those trials and tribulations.

Now, we are the first to admit that the process of moving from Classic to macOS was at times a bumpy ride, By the time we shipped Helix 6.2.4, we had a very stable and dare we say beautiful Helix running in the latest version of macOS, but we couldn’t blame users if they were a bit reticent to install the latest release before it had been thoroughly vetted.

And so a habit was formed for many users: they bought Helix 7.0, some even before it shipped, but in many cases they have yet to actually fire up their new version and use it in production. The thing they wanted was here and they’ve placed their bet, so to speak, but the fear of moving forward persisted.

Helix 7.0, which was released the 20th of this past December, was the first version of Helix to contain actual new features in as long as we have been managing its development. While it had gone through lengthy specification, alpha, and beta testing cycles, we knew there would be — as there always are with any major software update — a few rough edges to polish. At the same time, we felt it was solid enough that we shouldn’t deny users the overwhelming benefits it provided any longer. A month later we released version 7.0.1 to address the most pressing issues early adopters were reporting…

…but we have this nasty little habit… (no, not yet!)

Here we are: a little more than three months later, and Helix 7.0.2 is available right now. If you were among those already using Helix 7 who have been waiting for your bug to be fixed, these three months have seemed like an almost interminable delay. But that ends today.

Let’s talk performance first

Or perhaps, we should talk perception. The definitions of the words “performance” and “perception” have very little in common, and yet there is an important relationship between the two.

People describe performance issues using a wide range scales. What takes “forever” for one user might be described as “minutes” by another and might actually be only a minute. The thing is that you know when something is slower or faster than expected.

Perceptions of performance change with familiarity. When Helix began displaying the now-familiar checkerboard pattern while it delivers data, some users felt they were seeing a degradation in performance. In fact, in many cases, the performance was quite a bit better than it had been before, but the perception that it was slower has taken a while to give way to the understanding that the checkerboard is an indicator that data is indeed on its way.

All of this is to underscore how important it is to have reliable benchmarks; how important it is to compare apples to apples to better understand the real differences between products.

On 27 July 2010, we released Helix 6.1.6, and we published benchmarks that put to rest the complaints that Helix was slower in macOS than it was in Classic. The Intel-native Client was finding records nearly twice as fast, and scrolling through lists 40% faster than the Classic Client.

During the three years we spent developing and testing Helix 7, our focus, as always, was foremost on making Helix 7 stable. After all, what good is a fast car if it can’t turn a corner? Helix 7.0 & 7.0.1 were primarily about making the car good; now we make it fast. A comparison chart can be seen by clicking here.

With Helix 7.0.2, we turned our attention to performance, particularly Client/Server. Using the same set of benchmark tests we tested both local and remote access times, and we’re very pleased to report that Helix 7.0.2 performs as well as or better than any prior version we’ve released, aided in particular by a couple of key improvements.

Clouded perception

One performance problem that we could not fix before releasing Helix 7.0.1 was related to sequence timing, and it manifested itself in two ways. First, because of changes to the way wxWidgets (the open source API on which much of Helix’s interface is built) works in a multi-treaded application, sequences were being excessively conservative in waiting for each step to complete. Some sequences were observed to take a break of 10 seconds or more between each step.

This problem was compounded by another change in wxWidgets that had the unexpected side-effect of opening the sequence progress dialog in the background! So not only were sequences taking much longer, but the fact that progress was being made at all was being hidden from the user, giving many to conclude that Helix was hung, when in fact it was just being slow.

The good news is that Helix 7.0.2 eliminates that particular performance issue, and one more that we had been planning on tackling in Helix 7: Conditional Style performance.

Due to the changes that were required for the move to macOS, and then again for the move to Intel processors, Helix’s original implementation of conditional styles — the ability to display data differently depending upon designer-specified conditions — was creating a performance bottleneck, undermining the overall perception of speed in Helix in macOS. We knew that rewriting that code was going to be a big job, so we put it to the side, to be dealt with at a later date.

Helix 7.0.2 introduces all new conditional style code: collections that use conditional styles see lists draw as much as three times faster than Helix 6.2.4 (and eight times faster than Helix 6.1.10!) with absolutely no programming changes required. In fact, in our performance analyses, this is also one area where remote access is particularly improved.

Designers who use conditional styles — and those who had never heard of this powerful feature before, but are now going to start — will also be pleased to find that we’ve made the Design Mode interface much faster too. Not only does a new conditional style come with defaulted styles based on the basic rectangle style, but you can now assign conditional styles to multiple rectangles at once, and copy a style from one rectangle to others with just a couple of clicks. No matter how you look at it, conditional styles are faster, cleaner and better than ever before.

We mentioned there were some surprises

Helix 7.0.2 offers a raft of wonderful new capabilities and refinements.

If you like the ability to tab around rectangles on a template, for instance, you’re going to love the ability to tab through the content of an abacus window.

Selecting records on a list no longer requires a modifier key. Now you simply click the records you want and they are added to the previous selection.

We also “flipped the switch” on the inevitable 100-year date range change. (Remember Y2K?) For those of you who weren’t aware: when a user enters a date with a two-digit year, Helix interprets that as being within a specific 100 year date range. Since its inception, this range has been from 1920 to 2019. Although this range has been editable since 1997, most collection administrators never change default settings.

This can naturally lead to confusion in the case of the two ‘numeric’ date formats: ‘with slashes’ and ‘with dashes’. For these formats, where the date is displayed using the 2-digit format, the user might assume that a different range of years is in effect and enter a date such as ‘2/10/24’ with the expectation that the year would be interpreted as 2024. The fact is that Helix 7.0.1 and earlier would see that as being 2/10/1924.

Helix 7.0.2 makes two important changes to the way dates are interpreted and displayed. First, the date range applied to a 2-digit entry is moved to 1950–2049: entering a date such as ‘10/8/24’ is interpreted to be in 1924 in Helix 7.0.1 and earlier, and as being in 2024 in Helix 7.0.2 and later. As always, if a user types 3 or 4 digits for the year, that is taken to be the year intended, so dates in 1824, 2424, and even 484 can all still be entered.

Second, the date format changes to display all dates using a 4-digit year. Displaying all 4-digits of the year removes all doubt as to the true date being entered and stored. See this technote for more information about this change.

Switching to 4-digit years raises a possible issue: collection designers sometimes create abaci that link separate data objects to create what is known as a concatenated key, which is then indexed for improved performance. If such an abacus contains a date field that was set to a display 2-digit year before it is converted to text, operations that compare the concatenated text will almost certainly not return the expected results. To address this potential problem, we have created an applet that examines a collection to find all indexes that contain an abacus where a date is converted to text. See the section titled The ‘Date As Text’ Problem in the ‘Show Century’ technote for a link to download this application. (Design Mode access is required.)

We’re also creating another applet to help with collection designs that have precisely trimmed rectangles that may not be able to fully display a date with a full 4-digit years on the view. This applet can find all such rectangles and enlarge them, reduce the size of the text within them, or simply produce a report detailing where they are found in the collection. This one isn’t quite ready yet, and if you’d like to help test it, contact our technical support department and let them know.

Apart from these big changes, there are about a dozen smaller new features and enhancements, and numerous bug fixes in 7.0.2. Some are for problems reported since the release of Helix 7.0; the rest are from further back, some from even before we took over development.

Let’s get interactive

Over the years, many of you have submitted bug reports via techdb, and for that we thank you. However, sometimes we need follow-up information from you, such as whether a later version addresses your report. Sometimes all we need are the answers to a few questions.

If you have submitted reports via techdb in the past, you may receive an email from us next week, listing your open reports and the current status of each one. Please take time to review these reports and let us know what the current status is. Are the things you reported fixed in 7.0.2? If not, do you have more information that can help us fix your problem? If we don’t hear back from you, we’ll take that to mean the issue is no longer relevant and we will close the report.

One thing we knew would improve for Helix once we got beyond Classic was our ability to diagnose, isolate and correct errors that can happen to collections. We’ve gotten better at fixing things, but more importantly, we have worked hard to give users the tools to fix these problems themselves. So the Helix of today has fewer problems, and most issues that would once force you to go to a backup or send your collection off to be repaired can now often be fixed without our assistance, or with our assistance in a matter of minutes via remote access. The days of losing work or losing time are pleasantly receding into the past.

Helix 7 Reading Material…

There are way too many things that are new, improved or repaired in 7.0.2 to fully detail in one issue of The Latest Word, so we present herewith a short directly to take you to the things you should read after you finish reading this. Almost everything you need to know can be found on these pages:

So what is this nasty habit?

Well, to be mercifully brief at long last, our nasty habit is that in spite of our best intentions, it often takes us three or four times to get it right. And each time, while we wait for one set of problems to be fixed, we use the downtime to fix others.

Probably the key reason for this is that we just can’t leave well enough alone. When we find something we don’t particularly like, we tear it apart and try to improve it. So back near the top of this page, when we were discussing the fine line between new features and general improvements, the rest of those new features were really the result of finishing work that our forebears had begun but never completed, at least not to our satisfaction.

Recently, when users called to ask what Helix 7.0.2 would be, we often found ourselves answering that it would be the Helix 7 equivalent of 6.2.4. What this weary remark means is that we were hoping 7.0.2 would allow us to move on, as 6.2.4 had done.

So our nasty habit has left us with almost exactly what we had hoped for. Make no mistake about it, you will be much happier with 7.0.2 than anything we have done so far in 7. We apologize profusely to the very few users who were the afflicted with problems in 7.0 & 7.0.1. There remains a tiny handful of problems that will take a little longer to fix, but we promise that a fix is on the way. For the vast majority of you, there’s no reason to avoid Helix 7.0.2. For those unlucky few who do find a reason, let us know so we can make sure that Helix 7.0.3 addresses your needs as well. Then we can get back to what we had intended to do next.

Please take it out for a spin. Remember that you can run any Helix product in Demo mode before purchasing the upgrade so you can get a sense of how it works for you. And then we hope you will join us in moving forward.

Find Previous