On 3 Nov 2005 at 7:07, dhbailey wrote:

> Or what if they released a version without the 
> "manipulate-temp-files-in-memory-rather-than-on-disk" supposed
> improvements.

Bugs don't work that way.

First off, there's nothing fundamentally unreliable about in-memory 
temp data. Indeed, that's really the norm (though very often in 
combination with on-disk temp files, either as scratch files or to 
allow backup recovery).

The problem is that MakeMusic made some major mistake(s) in 
implementing their changes to temp file handling. The implementation 
mistake(s) are the problem, not the feature being implemented.

Secondly, you can't just back out a change like this and replace it 
with the "old" way of doing things, because that process is likely to 
introduce *more* bugs than it will fix.

Third, the speed of autosave (and manual saves) is probably due to 
this new approach to temp files, so you'd be losing something truly 
useful at the same time that you're getting rid of the horrid bug.

This kind of thing is probably very difficult to diagnose and fix. 
That's why it got through the beta process without being found, 
because it's a tough one to begin with.

For perspective, let me describe the worst bug that Microsoft Access 
ever had. In an Access form, there's a method for navigating between 
records that uses what are called "bookmarks," which are pointers to 
cursor locations in a recordset. Forms have two sets of bookmarks, 
one in the recordset loaded in the form, and one in an exact 
duplicate of that recordset, called the RecordsetClone. The 
RecordsetClone allows you to find out things about the real recordset 
without having an effect on the real recordset.

The method for navigation via recordset is that you do a FindFirst in 
the recordsetclone. If there's a match, it sets the bookmark to the 
new record position. Since the form's real recordset is identical, 
you can set it equal to the RecordsetClone's bookmark, which then 
moves the form's cursor location to the same place as it was in the 
RecordsetClone.

So far so good. This feature had been implemented sometime around 
Access version 1.x and 2.0, if I'm remembering correctly (i.e., in 
1993 or so), and had been relied on by all Access programmers (as 
well as by some of the wizards built into Access that write code for 
you to accomplish tasks, like finding a record).

But in August of 1998, it was announced that a bug had been found 
with bookmark navigation that could cause data to be written to the 
wrong record. The bug manifested itself in these circumstances:

1. in a form having a recordset with more than 262 records

2. that has had a record deleted from it

3. that then has an edit to a record that is after record 262 and 
after the deleted record

And the result was that changes to any of the remaining undeleted 
records *after* the deleted record got written to the record *after* 
what the form displayed.

The problem was that the recordsetclone and the form's actual 
recordset were out of synch with each other because of the deleted 
record.

The workaround was actually very simple -- after deleting a record, 
requery the form (if you don't requery you keep the same number of 
records with the deleted record display #deleted in all fields).

But the problem existed back to all versions of Access since 1993. 
For more than five years people had been using the product and nobody 
had identified this extremely serious bug.

By the time I heard about it, it had already been diagnosed and the 
workaround discovered. Microsoft issued a service release about a 
month later that fixed the problem permanently.

As it turns out, one of my applications probably was bitten by this 
bug in early 1998 (users reported remembering entering data into 
particular records, then coming back to the same record and not 
seeing it there; we never could identify the cause, though it may 
have been the bookmark bug; reports of the bookmark bug also caused 
me to discover that bookmark navigation had problems when activated 
on unsaved records because under some circumstances the data would 
*not* be saved and no error would be raised). But because the 
symptoms were so incredibly hard to diagnose (who is going to 
recognize that the data in a record actually belongs to a different 
record?), and because the scenario required for it to happen was so 
specific (though not at all uncommon).

Microsoft is a much, much larger company than MakeMusic, and Access 
has orders of magnitude more users than Finale, but it took FIVE 
YEARS for the bug to actually be discovered, even though it had the 
potential to badly corrupt the data of any application that was 
exposed to the bug (i.e., using bookmark navigation and allowing 
deletes without requery in a form with more than 262 records).

It may take MakeMusic quite a while to fix this bug. I'm not at all 
surprised that a fix did not make it into release 2006a, since that 
was surely already "gold" by the time this bug popped up a few weeks 
ago.

Indeed, it wouldn't at all surprise me if this bug were actually at 
an extremely low level, in the interaction between Finale and the 
underlying database engine. It also wouldn't surprise me if this is a 
bug in the database engine, and that the old temp file code already 
including bug fixes that worked around the problem, and when the old 
temp file code was replaced with the new, the bug fixes were also 
discarded. This is one of the reasons Netscape failed when it 
discarded their codebase and started over, because however bad and 
disorganized that codebase was, it included many years worth of fixes 
and workarounds for bugs and special sitations, and when it was 
discarded, all of that had to be recreated.

The only question for me would be exactly why it didn't pop up during 
beta testing. But, again, beta testing only works flawlessly when all 
scenarios are testing and, for whatever reason, the scenario that 
produces this bug was simply not part of the beta testing process. 
It's incredibly hard to beta test systematically, since you simply 
can't anticipate every scenario that could be a problem.

I'd say we should hold off on the criticism until was see the fix and 
get some information about how the bug happened. It may be that it 
should have been found before release. It could also be that it's 
related to some outside software, and indeed, it could be something 
released *after* Finale's beta testing ended is to blame (such as 
some minor upgrade or add-in for OS X).

Any programmer can tell you that these things are *very* difficult.

And I'd bet that nobody feels any worse than the Finale development 
team, not even those of you who've lost months of work to the bug.

-- 
David W. Fenton                        http://www.bway.net/~dfenton
David Fenton Associates                http://www.bway.net/~dfassoc

_______________________________________________
Finale mailing list
Finale@shsu.edu
http://lists.shsu.edu/mailman/listinfo/finale

Reply via email to