Friday, December 17, 2010

The Progress of Progress.

It's interesting that progress bars have not progressed terribly in the last three decades. Of course in 1980 progress bars were ASCII and used mostly on technical utilities and software installations, and by 1985 there were a lot of graphical environments such as the Macintosh and DR's GEM that had nice smooth progress bars that advanced one pixel at a time. Today, these workhorses are all over the place, and we mostly spend time staring at web-based ones telling us how far along an upload or download might be. Interestingly, their resolution has turned out to be of no consequence, so many progress bars out there show stepped output just for stylistic reasons.

I have written a lot of software since 1977, most of it gone forever, so I have made my share of progress indicators. It's always fascinated me that for anything that has more than one part it is quite difficult to get accurate expressions of the proportion of a task that is complete. When you have two files, for instance, and one is 20% larger than the other, is the job 40% complete or 50% complete when you have released the first file's handle and not yet opened the second's, if you're doing them sequentially?

Questions ranging from network latency and cross-traffic collision and resend rates all the way through whether different files process differently all would have to be answered quite exactly to have accurate estimations of the number of operations remaining as a percentage of total, or the number of clock ticks. Time to completion estimates on uploads and downloads can and frequently do go bad with just a little interruption in the throughput rate, and we just sort of take it for granted and mostly don't even pay attention. Here is a very silly prediction from Facebook - and I dare say it was dead wrong:

Now, if you take the total size of the remaining portion of the file to upload and divide that by the current transmission rate, which is 0, you should get a divide by zero error, which even mathematically states that there is not enough information to complete the operation.  The answer is not "Infinity", but  "Undefined". Having a simple branch in the program that produces a slightly less unintelligent message, like "There appears to be a problem with your connection. We are not making any progress." would do a lot better than "Infinity hours remaining."

Further, if you look at the fact that 1/10th of a Megabyte has already been uploaded, dividing that 100k by the elapsed time so far should give you an all-inclusive and somewhat more realistic guess as to when the process might finish. In fact, I walked away from this one and when I came back an hour later it was done, and I'm pretty sure that I did not then become transfinite...

No comments:

Post a Comment