Slashdot Mirror


Ask Slashdot: Why Is It So Hard To Make An Accurate Progress Bar?

hyperorbiter writes "How come after 25 years in the tech industry, someone hasn't worked out how to make accurate progress bars? This migration I'm doing has sat on 'less than a minute' for over 30 minutes. I'm not an engineer; is it really that hard?"

736 comments

  1. it's because by Anonymous Coward · · Score: 5, Funny

    Comment loading ...

    1. Re:it's because by dalias · · Score: 2

      If your installer is taking so long that the progress bar would be visible on the screen for more than 5 or 6 refresh cycles, you're doing something wrong and you should just give up.

  2. Predicting the future is hard by Anonymous Coward · · Score: 0

    even on a small scale

    1. Re:Predicting the future is hard by RedHackTea · · Score: 2

      Once you know the past, it gets a little easier. I actually had to do this for a customer. A SQL select statement was taking about 5 minutes (lots of data), so the initial progress bar would be stuck at 1%. Knowing that it took about 5 minutes from testing, I increased the progress bar's total and incremented at a rate of 10 seconds appropriately via variable X -- which was initially stored as 5 minutes for all clients. Every time each client performs the operation, it computes the new time it took and adjusts variable X accordingly for each specific client. It's actually quite accurate now. However, the equation is trivial and only computes an average. An artificial neural network could perhaps make it even more accurate. But, if you don't know the past, then yes, predicting the future is hard.

      --
      The G
  3. Uhmmm. by Fellon · · Score: 5, Insightful

    Yes it is "that hard".

    --
    I did it all for the penguins!
    1. Re:Uhmmm. by mjr167 · · Score: 2

      Wait... you mean to say that you can't predict the future?

    2. Re:Uhmmm. by Big+Hairy+Ian · · Score: 1
      Actually it depends. Some things can be taken into account that generally are not (The size of the cab file bore and after extraction) however 3rd party installs and oops the internet went down largely scupper any attempt at predicting how long something will take based on how long its take to achieve this much.

      Partially its laziness but mostly its out of the Devs hands

      --

      Build a Man a Fire, and He'll Be Warm for a Day. Set a Man on Fire, and He'll Be Warm for the Rest of His Life.

    3. Re:Uhmmm. by MarkGriz · · Score: 1

      Not necessarily.

      Perhaps our perceived progress in making an accurate progress bar is inaccurate.

      --
      Beauty is in the eye of the beerholder.
    4. Re:Uhmmm. by PlusFiveTroll · · Score: 1

      I can predict the future...

      "What Intel givith, Microsoft taketh away."

  4. Yes. by kc9jud · · Score: 5, Funny

    Yes it is. And to be fair, it's a lot more accurate than Nostradamus ever was.

    1. Re:Yes. by Pieroxy · · Score: 2

      Yes it is. And to be fair, it's a lot more accurate than Nostradamus will ever be.

      There, FTFY.

    2. Re:Yes. by tilante · · Score: 1

      Yes it is. And to be fair, it's a lot more accurate than Nostradamus will ever be.

      There, FTFY.

      Both statements are true, so just simplify to:

      Yes it is. And to be fair, it's a lot more accurate than Nostradamus.

    3. Re:Yes. by Anonymous Coward · · Score: 0

      Well, if you took all the integers from 0-100 and randomly flash them on the screen, you're going to come pretty close to Nostradamus. Using pretty much the same method too. All the user has to do is reassemble the numbers in the order they want, and in hindsight, it will be 100% accurate.

  5. because by ILongForDarkness · · Score: 5, Insightful

    Things are asyncronous. You wait for things from disk, ram, user input, over the network etc. How long it will take is non-deterministic. So a task composed of a bunch of these little pieces will be non-deterministic too.

    1. Re:because by eksith · · Score: 4, Insightful

      This. Also, there may be other applications/processes that may start up, suddenly demand resources or jump in priority, which inevitably result in a progress bar going backwards.

      --
      If computers were people, I'd be a misanthrope.
    2. Re:because by geekmux · · Score: 5, Interesting

      Things are asyncronous. You wait for things from disk, ram, user input, over the network etc. How long it will take is non-deterministic. So a task composed of a bunch of these little pieces will be non-deterministic too.

      If this is true (which it is), then logic would dictate that it is pointless to represent a progress bar in measurements of time.

      Perhaps the larger question is how much longer are we going to continue acting stupid about it, rather than trying to make a clock out of it.

    3. Re:because by marnues · · Score: 2

      As long as people want to know how much longer it takes. We operate in time. This is why progress bars are so prevalent even though they aren't accurate.

    4. Re:because by Anonymous Coward · · Score: 0

      So the progress is being unmade ?

      Like its going ahead three steps and then two steps back again ? :P

    5. Re:because by eksith · · Score: 0

      People don't work on logic... especially when we're impatient :/

      Honestly, I would welcome the demise of the progress bar if it were replaced with an activity animation along with Andy Rooney quotes.

      --
      If computers were people, I'd be a misanthrope.
    6. Re:because by NotQuiteReal · · Score: 5, Insightful

      Plus, you are lucky even get a "guesstimate bar". Showing progress with bad estimates is more reassuring than just a "working on it spinner". Either is an order of magnitude better than an unresponsive GUI because the programmer didn't put that stuff in another thread.

      Personally, I like the "list of what I am going to do + check them off as they are done" approach, if the "progressing task" is of varying descriptions.

      That said, for some tasks, you have to consider the "Heisenberg effect" a bit, depending on the work being done - do you want your progress bar pestering the "worker" for progress reports all the time, or just doing its job.

      --
      This issue is a bit more complicated than you think.
    7. Re:because by ILongForDarkness · · Score: 2

      Well we do this in the real world too though say asking the mechanic when you can get your car back. Just asking wastes resources and means the answer is "later than it would have been before you interrupted". But even with a rough estimate is usually pretty good (except when it isn't and then it really isn't like installing apps and seeing 10min go to 2hrs) and can adapt to changing data. I think the problem is expectations: we want exact answers which is understandable if you are waiting for something (I work with radiation simulation software you can be waiting for 20min for a result if you knew exactly when you could leave instead you watch the progress bar) but exact answers are not inherent in either the hardware or the problem space that we are working.

    8. Re:because by Anonymous Coward · · Score: 0

      The way to deal with that is to use Bayesian methods to estimate the distribution of weight times given the system's load average and/or other measures of how likely the process will be forced to wait for something to finish.

        When a download starts, your best estimate is probably best based on the system's long term average download rate. If the current download rate varies from that, you adjust your estimate slowly rather than instantly going to the most recent rate.

    9. Re:because by ILongForDarkness · · Score: 5, Insightful

      The list/status bar solution is nice for another reason: if your program does hang your users know where in the process it happened. You get more useful feedback from the users, sometimes they might be able to troubleshoot it themselves (oh it is dying when connecting to my fileserver, perhaps I"m not connected to the network). Heck it is useful for course grained optimization you see the logical steps that take the most time and can drill down into speeding them up as much as possible.

    10. Re:because by Anonymous Coward · · Score: 1

      Think of it more like you are driving your car with the gps on, and it says you are an hour away from your destination. Suddenly, 5 miles ahead of you a crash occurs. The resulting traffic delays you half an hour, so the original estimate turns out to be wrong.

    11. Re:because by Anonymous Coward · · Score: 1

      This is exactly why you estimate that the task will take 2.5 hours, create the progress bar accordingly and even if the task finishes sooner, continue to progress the bar at a steady pace until the 2.5 hours have elapsed.

    12. Re:because by drkim · · Score: 2

      ...I would welcome the demise of the progress bar if it were replaced with an activity animation along with Andy Rooney quotes.

      Or even some Andy Rooney animation:

      "You ever wonder why they call it a 'computer?' We don't really do any computing with it. Maybe they should call it a 'time-wastey box'..."

    13. Re:because by Anonymous Coward · · Score: 0

      Shouldn't jump back in such scenario. Progress bars display percentage of _work_ done, not of time remaining. There might be some weighting behind the scenes to make the two correspond better (e.g. assign more relative "work" to copying files than to moving files, because moving is generally instantaneous when done within the same filesystem), but my observations are that this is rarely the case (e.g. OSX Software Update divides the progress bar equally between all pending updates, regardless of their size, and each package's part is divided equally between downloading and installing progress). The bar might need to stall for some time, or update the _time_ remaining, but the percentage-of-work-already-done won't change just because suddenly the available resources are lower.

    14. Re:because by miroku000 · · Score: 1

      Things are asyncronous. You wait for things from disk, ram, user input, over the network etc. How long it will take is non-deterministic. So a task composed of a bunch of these little pieces will be non-deterministic too.

      True. But then I suppose if there are a lot of these non-deterministic factors, then according to the Central Limit Theorem, shouldn't the time for the overall process follow a Normal Distribution? http://en.wikipedia.org/wiki/Central_limit_theorem

    15. Re:because by loufoque · · Score: 1

      The progress bar, as the name suggests, tells you how much actions have progressed, not how much time the remaining actions are going to take.
      It is quite useful to know you have 100 things to do and have done 42. This doesn't mean the 58 remaining actions are going to take the same time though.

    16. Re:because by Anonymous Coward · · Score: 0

      The progress bar should never go back. Ever. Only increase the bar if the progress has actually happened. Might be less smooth in average, but a lot more accurate on the current situation.

    17. Re:because by Anonymous Coward · · Score: 0

      That is easy to solve: You've got a bar for total progress and another for current task progress... and they should be able to inform you that they are waiting for something, like changing the xx% to "Waiting for user input..." or "Waiting for network connection..." or "Source host/disk has disappeared!" or "Target busy - waiting for process xy to terminate!".
      Now we have handled several of your quite valid points.

    18. Re:because by Anonymous Coward · · Score: 0

      I'm partial to this approach, too. Break the particular task down into reasonable size chunks, and report on which chunk you're working on. If it's copying a file, use percentages.

      Unless there's a really good reason to use time, choosing to do so is probably a bad design choice, because the benefits of giving someone an accurate time estimate are usually outweighed by the problems if that measurement is wrong.

      Besides, time is subjective, and most people aren't really that time obsessed, beyond general concepts like Soon, Now, and WTF is Taking So Long!?!?

    19. Re:because by Ultracrepidarian · · Score: 1

      This group will hold daily progress meetings until the project is back on schedule.

    20. Re:because by 1u3hr · · Score: 1

      That said, for some tasks, you have to consider the "Heisenberg effect" a bit, depending on the work being done - do you want your progress bar pestering the "worker" for progress reports all the time, or just doing its job.

      With a CPU operating at GHz, an interrupt once a second to update progress should have negligible effect.

      And it's not as if there aren't dozens of other processes running in the background as well.

    21. Re:because by Anonymous Coward · · Score: 0

      Plus, you are lucky even get a "strobe light". Showing progress with random flashes is more reassuring than just a "divide-100%-by-the-number-of-total-steps".

      because its obviously a time-keeping bar, not a progress bar.

    22. Re:because by bickerdyke · · Score: 1

      That's a developers view. It is technically correct, but not the information needed by the user. As someone already said, the user needs to know if he has time to check emails, get a coffee, or call it a day and go home because his harddrive (Database, whatever) will be blocked for the next hours by Defrag (or whatever).

      And it leads to the effect that the progress isn't shonw in a linear fashion. Even if it is technically correct, it is confusing as hell if 95% progress are done in 20seconds and then the bar is stuck there for 3 minutes because cleanup takes that long.

      --
      bickerdyke
    23. Re:because by Sulphur · · Score: 1

      So the progress is being unmade ?

      Like its going ahead three steps and then two steps back again ? :P

      Its the hokey pokey bar then.

    24. Re:because by TopSpin · · Score: 1

      then logic would dictate that [progress bars are] pointless

      It's not about logic. It's about comfort. During a phone call there is a noise most people don't typically notice. It's called sidetone (comfort noise, in some cases) and the effect of it is to convey a feeling that the connection is 'working.' When that noise is absent the operator perceives that the connection is 'dead.' The phone doesn't sound 'live' somehow.

      Logic would dictate that such subtleties are unnecessary. That pesky old Real World thinks otherwise, however, and expends extraordinary effort to perpetuate these irrationalities on nearly all audio systems including land lines, cells networks, radio, voip, etc.

      Progress bars the are visual analog to comfort noise. When there is no progress bar, accurate or otherwise, the system appears dead and people become anxious. The progress bar limits that anxiety to mere impatience.

      So 'logic' 'dictates' nothing here. It's about keeping people from pulling their hair out.

      As to the original question, why is it so hard to make accurate progress bars, the answer is simple; the problem is exactly as hard as creating a time machine. The exact length of any non-trivial operation is unknown until after the operation is complete. When predicting the future becomes easy progress bars will become accurate.

      Even the most basic understanding of mechanics and computing should make the answer obvious. I am genuinely astonished that anyone involved with operating a computer would wonder about it.

      --
      Lurking at the bottom of the gravity well, getting old
    25. Re:because by azalin · · Score: 1

      As to the original question, why is it so hard to make accurate progress bars, the answer is simple; the problem is exactly as hard as creating a time machine. The exact length of any non-trivial operation is unknown until after the operation is complete. When predicting the future becomes easy progress bars will become accurate.

      While it's impossibly hard to do completely right, it gets a lot easier once you lower your expected precision. If someone would really try hard enough, I guess the could come up with a fairly realistic prediction scheme for a given task. You could collect statistics for a lot of machines, evaluate your tasks (cpu usage, io operations, network usage), get details on system load and capability and so on and end up with a realistic and highly probable expectation on how long it will take.
      No one will ever do that, because it's complicated, time consuming and basically not worth it, but at least you won't have to adjust the laws of physics to do it.

    26. Re:because by drinkypoo · · Score: 1

      Either is an order of magnitude better than an unresponsive GUI because the programmer didn't put that stuff in another thread.

      What? We had responsive GUIs before we had ubiquitous multithreading. Unresponsive GUIs are a result of programmers not updating the user before going on to do_stuff();

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    27. Re:because by 91degrees · · Score: 1

      The spinner has come to mean "broken".

      Personally, I think a numerical indication works quite well if the system doesn't know how much there is to do. It indicates progress and provides information the user might have even if the computer doesn't. For example, I know an mp3 will typically be between 3MB and 10MB depending on length of the song.

    28. Re:because by Mockylock · · Score: 1

      If you think of it in a different way; your trip from point (A) to point (B) may be known to be exactly 200 miles, but you never know if you're going to hit traffic or what your speed limit is going to be in the future. The same goes with GPS estimated arrival time. If your processor/disk is at an absolute number, disk transfers would be easier to calculate... and the same goes with bandwidth/latency.

      --
      "Please, shut up. Just when I think you can't say anything more stupid, you speak again." -Archie Bunker.
    29. Re:because by ILongForDarkness · · Score: 1

      A key part of the central limit theorem is that the variables are independent. The time for one disk access and the next clearly isn't for example. Also the central limit theorem doesn't say anything about how big the resulting standard deviation would be. Most performance metrics are hugely right skewed. A disk access takes a millisecond if it is small and in the disk cache already, but if large and not in cache it can take minutes. So you can end up in situations where the whole process is running fine and then one step takes a 1000 times longer than the rest. Developers have no way of knowing how fast your CPU is versus your disk, how fast an internet package you have, how good your CPU is with floating point etc. so even if they tested and picked the mean of the CLT distribution the individual steps of the progress bar might be meaningless because they didn't count on you still using dial up for step 4, having the HDD disk on the far side when setup 2 started etc.

    30. Re:because by slim · · Score: 1

      Shouldn't jump back in such scenario. Progress bars display percentage of _work_ done, not of time remaining.

      It could still go backwards, because you often only have an estimate of work to be done.

      To put it in the real world, let's say I'm a menial office worker, and I've been given the task of filing the contents of 10 shoe boxes full of correspondence. I open the first box, it's got about 20 letters in it. After I've filed 10 letters, I tell my boss I'm 5% done - 10 letters out of an estimated 200.

      The next 8 boxes also contain 20 letters, on average, so at the end of the 9th box, I tell my boss I'm 90% done.

      Then I open the 10th box, and it's got 180 letters in it. So I tell my boss "Yeah, sorry about this, it turns out there were more letters than I thought; actually I'm only 50% done".

      Now, in this scenario, if my boss really wanted accurate progress reports, I should have peeked in all the boxes before starting, to make a better estimate of the work to be done. But that's not always possible.

    31. Re:because by siride · · Score: 1

      The GUI will not be responsive if you are doing a blocking I/O call from the UI task. This is not debatable.

    32. Re:because by ILongForDarkness · · Score: 1

      I kind of liked the old XP installer: 30min remaining. Don't even try to give an accurate time like you say soon, now, and a long time should be good enough. Heck if you reasonably suspect that your process is going to take > 10 minutes change the mouse pointer to a cup of coffee and the status message to "Processing, you're going to be here a while". It's the not knowing when it will speed up and suddenly finish that leaves the user sitting around staring at the screen. Tell them it will take a long time and subtly hint that they find something else to do and they might not even notice.

    33. Re:because by drinkypoo · · Score: 1

      The GUI will not be responsive if you are doing a blocking I/O call from the UI task. This is not debatable.

      The GUI can at least respond before beginning the task, to let you know that it is about to try to do something. This is the #1 place I see neophyte programmers fail in the interface department. They make an amazing program that sings and dances but half the time you don't know if it's doing anything.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    34. Re:because by PlusFiveTroll · · Score: 1

      So the progress is being unmade ?

      Possibly, if an optional component fails do you cancel everything, or just roll back the option and finish the install?

    35. Re:because by PlusFiveTroll · · Score: 1

      Shouldn't jump back in such scenario. Progress bars display percentage of _work_ done, not of time remaining. There might be some weighting behind the scenes to make the two correspond better (e.g. assign more relative "work" to copying files than to moving files, because moving is generally instantaneous when done within the same filesystem), but my observations are that this is rarely the case (e.g. OSX Software Update divides the progress bar equally between all pending updates, regardless of their size, and each package's part is divided equally between downloading and installing progress). The bar might need to stall for some time, or update the _time_ remaining, but the percentage-of-work-already-done won't change just because suddenly the available resources are lower.

      This all depends if dependency resolution occurs before or during the install.

    36. Re:because by Anonymous Coward · · Score: 0

      Honestly, the most common error in progress bars has nothing to do with nondeterministic behavior, but with approximation.

      It's sometimes possible, yet costly, to compute how much total work the task will require, and without knowing that, only approximations are possible. Along the actual task, when the progress bar has actually progressed, you improve your estimate, and it "looks" like the progress bar is running amok. But it's just the effect of progressively more informed estimates.

      It happens a lot with mass file transfers. When you transfer entire trees, you don't really know how many bytes that tree holds until you traversed it all. Some applications decide to do a first pass computing how much it will take (and will result in more precise estimates), and some other applications decide not to waste that time and just start transferring (adjusting the estimate in the process).

      It's design decisions that have happened invisibly before the progress bar has been even coded, and are known only to the developer, not the user. So the user expects one behavior and gets another.

      So... the most common error is not labelling progress bars adequately. But, you know, labelling everything is also a waste of screen estate - useful the first time I see the progress bar, not so much the fortieth.

      It's all tradeoffs in software design...

    37. Re:because by ILongForDarkness · · Score: 1

      Mostly agree other than the labelling being a waste. I'd caveat that with "it depends". Can the user still interact with your program and get useful work done (example syncing an iPod doesn't mean you can't listen to music at the same time) if so then screen real estate is important and you should get out of the way as much as possible. Versus installing upgrading type behaviour (or a program who's sole purpose at the moment is to do what it currently is doing like file transfer) in that case feel free to take over the whole window and give really fine grained info to the user if it will help. Usually the tradeoff here just becomes a matter of avoiding clutter rather than really saving screen real estate. Programs that list every file they copy quickly take over the whole visible window and then you end up scrolling up and down if you care, or it scrolls so fast through the console that it might as well not have been shown at all.

    38. Re:because by Anonymous Coward · · Score: 0

      I hate to be pedantic (hmm, na, I love it), but there is a stark difference between non-deterministic and hard to predict. If your computer is not hooked up to a quantum random number generator (kudos to you if it is, but it would really surprise me), it's deterministic.

      The question is just how much effort the coder is willing to make to predict the time. Certainly not enough to predict pseudorandom numbers, but if it was important some basic profiling could increase the precision of the predictions abound runtime behaviour a lot. Since it isn't, nobody does it, and progress bars suck.

      (The question whether the user is deterministic is quite interesting but not really relevant here)

    39. Re:because by ILongForDarkness · · Score: 1

      There is deterministic and then there is deterministic. At the developer level, which almost always means some high level language, there is very little that is deterministic. You don't have the ability to see what other processes are doing at the exact moment you do anything (fundamental limitation due to relatively electrons can only move so fast a query and response won't ever be syncronous from any two points in space (in all reference frames)). But even say that you could know exactly what is going on right now there is a duration to your activity and at any point between start and finish the system state can change.

      Okay that is enough for hardware (at least at this level). Next up compiler and machine instruction set: just because you right a set of lines in a particular order in a high level language doesn't mean that your instructions will be run in that order either the compiler or the CPU could reorder/combine operations without you knowing. This might be a run time thing too (say the CPU only does predictive branching when the pipeline has additional items in it for example). Mah either way the developer or the user can't be reasonably expected to know what is going on. Multitasking also means things might not be where they were when you got interrupted by another thread meaning you might have to wait on several loads of the same item as your stuff keeps getting knocked out of registers and higher level memory.

    40. Re:because by siride · · Score: 1

      That's all fine and dandy if your GUI is fairly linear, but if you need to be able to interact with it while it is doing those long running tasks, then you will need threads. I've seen plenty of programs that don't use threads (or don't use them properly) and parts of the GUI are unnecessarily frozen while you wait for some task that could just as well be done in the background to finish.

  6. Simplest answer. by Anonymous Coward · · Score: 0

    Because doing so, in most cases, would make the process take a bit more time. The first step would be to assess how much time it should take, and that would generally add to the total time.

    Just take a simple recursive file copy, for instance. In order to make an accurate progress bar, you'd first have to recursively go through all the directories and sum the sizes, which would take a bit of time, and you'd be duplicating work.

    1. Re:Simplest answer. by uncqual · · Score: 1

      you'd first have to recursively go through all the directories and sum the sizes

      And also figure out which are links to other devices including network storage (both WAN and LAN) and benchmark each to see what its capabilities are. Heaven help you if the destination is on a device with a large non-volatile write cache (such as a hybrid drive) that works really hard at looking just like an ordinary disk drive.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
  7. Why? by tian2992 · · Score: 1

    Why is it so hard to prove than NP = P?

    1. Re:Why? by iced_773 · · Score: 0

      Because it's hard to prove an equality between two things that are, in fact, unequal.

    2. Re:Why? by cryptizard · · Score: 1

      You seem quite certain of that. Do you know something the rest of us don't?

    3. Re:Why? by Ramin_HAL9001 · · Score: 1

      @tian2992 you win this thread.

      Determining the number of steps required to complete a computation is similar in many ways to determining whether or not a given computation will loop infinitely -- it absolutely impossible to develop a general algorithm to detect all infinite loops, as we know from the entscheidungsproblem.

      For similar reasons, it impossible to develop a general algorithm that can predict the number of steps for any possible computation, and it is very difficult to predict the number of steps to completion for all but the simplest computations. For more complicated computations, heuristics are required to estimate the completion time.

      Estimating by file size and number of files tends to work pretty well when you have that information available to your program, but it does require some effort to take this data and use it to develop an estimation for time to completion, many programmers are too lazy to even bother.

    4. Re:Why? by loufoque · · Score: 1

      Even if NP = P, you still can't predict how much time a computation is going to take.

    5. Re:Why? by siride · · Score: 1

      Basic theory of computation. It's not even grad level.

    6. Re:Why? by cryptizard · · Score: 1

      Um... what? Determining whether P is or is not equal to NP is probably the largest open problem in complexity theory. I thought everybody knew that. I feel like I'm taking crazy pills here.

      http://en.wikipedia.org/wiki/P_versus_NP_problem

    7. Re:Why? by siride · · Score: 1

      I think I responded to the wrong comment.

  8. Various reasons by GoodNewsJimDotCom · · Score: 5, Insightful

    One reason is the progress bar starts out as just a generic tool to show that your loading hasn't froze. At first it is parsed correctly with the elements to be loaded, but as scope increases and more things load, it can get sketchy later on.

    Another reason is it is difficult to estimate time left. If you look at some old FTP programs, they'd estimate the rest of the download's time based on how fast the previous has taken. Future lag, fragmented files, etc aren't taken into consideration.

    There's a bunch more reasons, but namely the progress bar's main purpose is to show you that the whole system isn't locked up, which they've been doing well for the past 30 years or so.

    1. Re:Various reasons by number11 · · Score: 1

      One reason is the progress bar starts out as just a generic tool to show that your loading hasn't froze

      And a spinning asterisk or swirlie does that fine, without implying anything about "progress" or "time left".

      Another reason is it is difficult to estimate time left.

      We're not talking about a "time left" bar, we're talking about a progress bar (although if things continue at a constant rate, the two should be the same). While there are exceptions, mostly the program should have a decent estimate of the total amount of work to be completed. At half the tasks done, the bar should be at 50%. Yes, things like fragmentation and other tasks running will impact the time to completion, but they won't affect the amount of work that has been already completed by the program.

    2. Re:Various reasons by ILongForDarkness · · Score: 2

      This is why if it is something the user will understand I like to use a status bar instead. Much nicer to see things moving through a workflow than trying to guess how long the db load vs analysis will take and display the progress bar correctly which will change as the data grows, complexity of the problem, computer the user is on etc. Progress not timing, we should just completely remove the complete from the visual just have a numerical counter, if it is increasing things are still working.

    3. Re:Various reasons by PlusFiveTroll · · Score: 1

      >At half the tasks done, the bar should be at 50% > but they won't affect the amount of work that has been already completed

      You assume that the program knows how much it will have to do before it completes. Many programs have to call in 3rd party libraries that install in the background of what you are doing, they don't know how long the other program will take (think .net libraries). Dependency chains suck in these cases.

      Also, installing a large application is not a constant rate event, especially on spinning disk. A fair number of installers work like this. 1. Install large data files, this goes fast because disks have pretty good streaming throughput. 2. check and write ini files OR check and write registry keys. Unless you have an SSD this is slow as crap (maybe 100 IOPS if you're lucky). You could have wrote 1GB of data before then at 100MBps, then because of fragmentation and random seeks suddenly drop below 1MBps.

    4. Re:Various reasons by uncqual · · Score: 5, Insightful

      And a spinning asterisk or swirlie does that fine, without implying anything about "progress" or "time left".

      The spinning asterisk or swirlie just tells you that the thread updating the asterisk or swirlie hasn't frozen -- it often doesn't tell you anything about the underlying activity the user is waiting for.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    5. Re:Various reasons by hazem · · Score: 1

      I've written an in-house reporting system and early on I implemented a progress bar. The key reason was to show people that the system was doing something, since a report could take a minute or two to run.

      I set it up so that while a report runs, it ticks off a counter at certain steps (each row and column, etc). The progress bar is measured against that count. At the end of running, it stores that count to be used the next time the report is run. It's accurate until the report specification is changed.

      However I never try to estimate time remaining. The first part of the report running is collecting the specified data from the database, and the second half is usually drawing shapes on powerpoint slides. These don't usually take equivalent amounts of times. Since it only shows the percent of the tasks done so far compared to the total number of tasks, sometimes it will rush up to about 50% and go slower, or other times it will go slow up to 50% then rush to the end. But for the most part, I tried to put the update events at locations in the code that result in a reasonable balance.

      Anyway, that's the approach I took. Even without predicting a time to completion, it's far better than a spinner or hourglass.

    6. Re:Various reasons by shutdown+-p+now · · Score: 2

      We're not talking about a "time left" bar, we're talking about a progress bar (although if things continue at a constant rate, the two should be the same). While there are exceptions, mostly the program should have a decent estimate of the total amount of work to be completed.

      What is the measurement unit for "amount of work", though?

      Take file copying for a canonical example. The most reasonable unit of measurement in that case would be the number of bytes copied. However, to properly compute relative progress for that, you need to find out the total size of all files before starting the copy. For a large tree, computing that can itself take a fair bit of time (remember the copy dialogs in Vista, which could sit there for a minute before even starting to copy?). It can be even more expensive if part of the tree is not on a local FS, but is accessed over the network - think NFS or Samba mount point.

      But say you do it and start copying. You can still run into interesting corner cases - e.g. what happens if the size of some file changes on the disk after you computed it originally, but before you got a chance to copy it? And even if nothing changes, the speed difference between copying a local file and a remote one can be so great that you end up with that same dreaded situation where your progress bar gets to 50% in a minute, and then takes ten more minutes to finish at 100% - and the user is going to be annoyed regardless.

    7. Re:Various reasons by Anonymous Coward · · Score: 0

      There's a bunch more reasons, but namely the progress bar's main purpose is to show you that the whole system isn't locked up, which they've been doing well for the past 30 years or so.

      Um, no. Isn't that the sole motivation for this post?

    8. Re:Various reasons by muridae · · Score: 1

      Yes, things like fragmentation and other tasks running will impact the time to completion, but they won't affect the amount of work that has been already completed by the program.

      Not quite true. Say you are copying files from a network drive to local, and you get 90% of the file(s) done in an hour. Then, the network usage spikes, so your bandwidth drops to 1% of what it was. A progress bar would show 90%, even though you are going to get that last It should take, if my brain is working right, just over another hour to copy the remaining file(s). So, what do you want the progress bar to show? 90% because only 10% of the bits are left? 50% because that's the time estimate? Maybe 2 of 3 files were copied already and the remaining file is huge, so should the progress bar show 66% to show that 2/3rds are done? Even when you have a perfect estimate of things to complete and what's been completed, you can't always predict the amount of work.

      To further make the progress bar more confusing, let's say it is estimating how many bits need sent over the network. Now it has to gauge header/footer sizes, MTU, and packet loss. In the above example, the right answer could be anywhere between 90% done and 0%.

    9. Re:Various reasons by number11 · · Score: 2

      Say you are copying files from a network drive to local, and you get 90% of the file(s) done in an hour. Then, the network usage spikes, so your bandwidth drops to 1% of what it was. A progress bar would show 90%, even though you are going to get that last It should take, if my brain is working right, just over another hour to copy the remaining file(s). So, what do you want the progress bar to show? 90% because only 10% of the bits are left? 50% because that's the time estimate? Maybe 2 of 3 files were copied already and the remaining file is huge, so should the progress bar show 66% to show that 2/3rds are done?

      You've got 90% done, so you're at 90% progress. I'm arguing that progress bars should not be "time to completion", for that reason, that you can't easily predict those variables.

      OTOH, my bittorrent client uses bytes still needed at the current speed to predict time to completion, that works too, but that technique may not generalize well to other tasks. To me, time to completion should be a number, not a bar. To have a bar, you need to know what the maximum is. Hell, show both % complete and time to completion if you want, but it may not be worth the work, mostly the user just wants to see that progress is being made.

      In your example, I'd want to see a bar showing the percentage of total bytes done. Some posts here are arguing that it may not be practical to know total bits ahead of time. Well, yeah, but that's not true of most situations. If you can't (easily) know the total number of bytes, then use number of files. If you can't easily know that, then number of modules, folders, or whatever larger unit you can easily predict. No progress bar is going to be perfect, and that's ok, "best guess" is ok. The principal purpose is to a) show the user that the program hasn't died, and b) to allow the user to make some sort of estimate, however rough, about time to completion.

    10. Re:Various reasons by qzzpjs · · Score: 1

      Actually, Windows 8 has come up with the perfect solution to your question. The file copy progress bar is a bandwidth graph so you get to see how fast it's going and how much is left.

      They even added a pause/resume capability to it which is very useful. And if you start more file copies to the same destination it shows additional graphs in the same status window.

    11. Re:Various reasons by smellotron · · Score: 1

      Take file copying for a canonical example. The most reasonable unit of measurement in that case would be the number of bytes copied.

      Recursive copy is a good example of a task whose cost is not known up-front. Two things to know: total size of sources, total size copied.

      However, to properly compute relative progress for that, you need to find out the total size of all files before starting the copy.

      No way, d00d. You can calculate the total size in a background thread which just goes through stating everything alongside the actual copies. Sure, it'll compete with the copy commands for disk access, but it won't add latency to the start of the copy.

      You can still run into interesting corner cases - e.g. what happens if the size of some file changes on the disk after you computed it originally, but before you got a chance to copy it?

      Store the pre-calculated size of every file. If a file ends up larger, then use that size instead. Max Bytes grows and Percent Complete migiht shrink. Whoop-de-doo. If this happens, a user will notice and say, "huh, that's weird" and maybe write a snotty blog post about it. But the world will move on, and most people in most situations will see that the progress bar is good, because it is reasonably consistent, it doesn't lie, and it doesn't visibly delay the task at hand.

    12. Re:Various reasons by Anonymous Coward · · Score: 0

      Ah, similar to KDE.

    13. Re:Various reasons by fnj · · Score: 2

      The turning propeller or cylon helmet light going back and forth (or the papers flying if you must) should work like a watchdog. If the worker thread/process gets hung, the displayed element should freeze. If all it tells you is that some propeller updater thread is still running in isolation, then the system is not competently designed.

    14. Re:Various reasons by Guy+Harris · · Score: 1

      We're not talking about a "time left" bar, we're talking about a progress bar

      Actually, the person who submitted the story was talking about a progress bar accompanied by a "time left" message:

      How come after 25 years in the tech industry, someone hasn't worked out how to make accurate progress bars? This migration I'm doing has sat on 'less than a minute' for over 30 minutes.

    15. Re:Various reasons by Waccoon · · Score: 1

      This is why most progress bars these days (from people who know what they are doing) will make the bar fill up quickly at first, but as time goes on the progress fills up slower and slower. That way the progress bar is always moving and letting you know that the program is working, but it will never hit 100% until it is actually done.

    16. Re:Various reasons by martin-boundary · · Score: 1

      There's a bunch more reasons, but namely the progress bar's main purpose is to show you that the whole system isn't locked up, which they've been doing well for the past 30 years or so.

      Well put. When faced with a tool that has been around for 30 years, the question shouldn't be "why is that tool still failing to do X?". The mere fact it's been in use for 30 years shows that it's doing _something_ right. So the question should be "what has it been doing right which can explain why it's still around after 30 years?"

    17. Re:Various reasons by petermgreen · · Score: 2

      Sure it should.

      The thing is a progress bar is pretty hard to fake convincingly, if your bar always progresses at the same rate and then freezes at a fixed point it's going to get noticed pretty quick. A spinner or similar indicator is much easier to fake convincingly and if something is easy to fake convincingly there will always be the suspicion that it is fake..

      Heck windows kinda institutionalised faking such things by including animated icon support in the OS itself and including an icon set where the hourglass was animated.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    18. Re:Various reasons by drinkypoo · · Score: 1

      No way, d00d. You can calculate the total size in a background thread which just goes through stating everything alongside the actual copies. Sure, it'll compete with the copy commands for disk access, but it won't add latency to the start of the copy.

      It's a bad plan if it makes the copy take longer. What is needed is more advanced filesystems that make this kind of query simpler. Or for people to use that functionality, if it exists.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    19. Re:Various reasons by Anonymous Coward · · Score: 0

      Many systems aren't competently designed, though. And from a user's point of view, that means if something seems to be taking a long time and the only feedback is a swirlie, I have no idea whether or not it's still going.

    20. Re:Various reasons by smellotron · · Score: 1

      It's a bad plan if it makes the copy take longer. What is needed is more advanced filesystems that make this kind of query simpler.

      Oh, I'd take the advanced filesystem over the measurement I described any day. But given that they don't seem to exist yet, what I described is a realistic compromise between minimizing the total latency of the operation, and providing a responsive "user experience" to the person who is waiting for completion. You can even tune the rate of the stat-thread to your own liking.

    21. Re:Various reasons by tepples · · Score: 1

      You can calculate the total size in a background thread which just goes through stating everything alongside the actual copies. Sure, it'll compete with the copy commands for disk access, but it won't add latency to the start of the copy.

      It'd be just as bad in practice as the infamous "Calculating the time required to copy the files" step in Windows, especially for protocols like FTP where switching to each folder to do the equivalent of stat has a round-trip latency hit and where servers limit the number of threads that a copy operation can use, often to one thread per user.

    22. Re:Various reasons by unkiereamus · · Score: 1

      What is the measurement unit for "amount of work", though?

      That would be a joule.

      Sorry, I'm not awake yet, the long hanging fruit was too tempting.

      --
      I needed a sig so people would know who I am, but I was too drunk to make something witty, so you get this instead.
    23. Re:Various reasons by scamper_22 · · Score: 1

      As the poster said that he's not an engineer, let's try a life example.

      Suppose we take a morning drive to work.
      How hard is it to make an accurate progress bar showing how close you are to your work?

      Well on first glance at the problem, you might say just the distance to the destination?
      Well does that take into account traffic, accidents, red lights, your driving speed, construction, time of day, different routes...

      The answer is no, and such a calculator would be very inaccurate.

      That is what some basic progress do in the computer world. Let's say they are copying a bunch of files and there are 5 files to copy, it might decide to increment the progress bar by 20% for each file copied. What if one file is really big and another small... this will look very weird.

      Another progress bar measuring the same thing might increment it based on the number of bytes written. This would handle the big file problem.

      In truth, we could design much better and more accurate progress bars. They'd still be approximations, but they'd be much better. We could get the historical and real-time performance of the harddrive to get a measure on how fast it could copy files. We could ping network servers to get a measure on the network performance. We could interact with server to see their load and how long it would take to process requests.

      And in the end, that progress bar will be more complicated than the program you're trying to use :P

    24. Re:Various reasons by shutdown+-p+now · · Score: 1

      That's brilliant. Tricky to implement, since you'd have to compute the power usage of your process, but I'll give it a try next time I need to write a progress bar. ~

    25. Re:Various reasons by BasilBrush · · Score: 1

      Sounded good for a moment. Then I thought about it.

      When the spinner freezes, the user thinks it's stopped working, and kills it and retries. When in reality there was just a particular work unit that took longer than the watchdog timeout.

      I'm pretty sure users would panic faster with a frozen spinner than they would panic with a progress bar that wasn't moving.

    26. Re:Various reasons by Anonymous Coward · · Score: 0

      KDE still uses a bar. Windows 8's graph is much more helpful.

  9. Crappy software by Anonymous Coward · · Score: 0

    Also see http://www.popularmechanics.com/technology/how-to/tips/why-the-progress-bar-is-lying-to-you

    For, eg, HTTP downloads, it's easy to make a progress bar. It sends a Content-Length and every byte received is accounted for. But other problems, like disk IO, are harder, but not intractable.

    I'm willing to bet it's just crappy software.

    1. Re:Crappy software by greg1104 · · Score: 1

      You'd lose that bet. The rate of future I/O operations is extremely difficult to work out at any price, with any quality of engineer. I would bet you a billion dollars it can't be done reliably in the case of HTTP downloads, and not lose a moment of sleep about losing. If you spent all of the money hiring the best developers in the world with that billion, all you'd have when you were done is a better understanding that it's impossible. In fact, I'd make a side-bet that someone tells you it's impossible before they even start!

    2. Re:Crappy software by Jiro · · Score: 5, Informative

      The progress bar on the HTTP download doesn't show the amount of remaining time in the bar. It shows the number of bytes remaining in the bar; the number of bytes remaining can't go into reverse. The time remaining is showed as a numeric value for how long it would take assuming the speed is the same as the speed so far; if the transfer suddenly slows down, this value can go into reverse.

    3. Re:Crappy software by nabsltd · · Score: 5, Insightful

      Give this man some upward moderation.

      The problem is that the question is wrong. It's trivial to make a progress bar...just sum up all the things you have to do, and move the bar each time a "thing" is done, rounding to the nearest pixel. It doesn't matter if the "thing" is a byte to copy, a file to install, or any generic task. As long as you can add one to a counter each time you have done another "thing", you can then display it graphically.

      The actual complaint is about displaying accurate time remaining to complete the task, which really has nothing to do with the display of the progress bar. Instead, it involves guessing about how long each remaining "thing" will take to complete, and then displaying that sum of those times. This is hard because no matter how accurate the data used to make the guess, something outside the control of the program can disrupt the processing.

    4. Re:Crappy software by mark-t · · Score: 0

      I would bet you a billion dollars.../blockquote.That's a fail, right there. No sane person bets more than what they, or the person they are betting against, can actually afford to part with... even if they are right. Doing so is nothing less than irrational arrogance, not founded in the validity of your position.

    5. Re:Crappy software by ctrlshift · · Score: 1

      The actual complaint is about displaying accurate time remaining to complete the task, which really has nothing to do with the display of the progress bar.

      Give THIS man some upward moderation. This is a very significant point; perhaps our frustration with progress bars comes from misinterpreting what they actually represent. Personally I've never found poor time estimates as infuriating as progress bars whose displays don't actually correspond to the amount of stuff completed. Especially those ones where the same bar fills up multiple times, thereby giving you NO indication at all of how complete the process actually is. At that point, the bar is really just a variation on the hourglass or spinning wheel.

    6. Re:Crappy software by smellotron · · Score: 1

      For, eg, HTTP downloads, it's easy to make a progress bar. It sends a Content-Length and every byte received is accounted for. But other problems, like disk IO, are harder, but not intractable.

      Actually, estimating an HTTP download is very similar to estimating a single-file copy. For the HTTP download, you have no information at all while you wait for the round-trip latency of the header. Once you have the header, you know exactly how large the file is, but you still don't know the network bandwidth. That's ok, because you can measure progress by bytes transferred.
      For the file copy, you have no information at all while you wait for the stat call to complete. Once you have that, you know exactly how large the file is, but you still don't know the disk bandwidth. That's ok, because you can measure progress by bytes (or blocks) transferred.

    7. Re:Crappy software by Zadaz · · Score: 4, Insightful

      Except even the number of tasks is often variable over the life of the task.

      Take for example loading a web page. It starts out as 1 task: Get a page from the server. Once you've done that, how many more requests will that first request generate? Impossible to tell. It could be none. It could be hundreds, and some of those can generate their own requests. (etc, etc.)

      The answer is this: Some feedback, no matter how incorrect, is better than no feedback at all.

    8. Re:Crappy software by Anonymous Coward · · Score: 0

      YES! this..

      While it may not give an estimated time, it is called a "Progress" bar, not a "Estimated Time remaining" bar. Except in the case of copying files, which is a complete joke on Windows, Linux, pick your OS. They all suck at this, for reasons previously covered.

    9. Re:Crappy software by Ken+D · · Score: 1

      Yes, not enough of the commenters seem to understand that most of the things that people want progress bars involve not only guessing how long each task will require, but ALSO having no idea what specific set of tasks are required.

      "Primitive" tasks might be easy (e.g. copy File A), but as you build up a sequence of these tasks in becomes impossible. (e.g. Copy Disk A; Copy All Media on PC X; Copy All Media on the LAN)

      Throw in a few tasks that are really slow, but are difficult to predict if they will need to occur or not...

    10. Re:Crappy software by Anonymous Coward · · Score: 0

      For the HTTP download, you have no information at all while you wait for the round-trip latency of the header. Once you have the header, you know exactly how large the file is, but you still don't know the network bandwidth.

      The server doesn't have to send a Content-length-header. For content generated on-the-fly e.g. by a CGI-script or for streaming, you often won't know the length until you're done.

    11. Re:Crappy software by Anonymous Coward · · Score: 0

      Sorry, no. First request fetches a page that reports its content-length to be, say, 123456 bytes. Easy: set the bounds of the progress bar from 0 to 123456 and update the bar while you download the file. At some point, you see that the page needs a CSS file, or .js file, etc. total byte count goes up. Now what? Do you show a progress bar for each file as it downloads? So, you have blinking progress bars as you switch from one to another? What about simultaneous downloads? Multiple progress bars? Use a dev tool in a web browser to see what is really going on and its obvious that the situation is more complex than you think. That level of complexity is too much for most users. Users want to know "can i look at my page, yet?" and then, "okay, (roughly) how much longer do i have to wait?". Sadly, you need one progress bar to rule them all (for user sanity), and it is very difficult to do that in a nice way. Progress bars are, by definition, a black art, and are usually done in a way that makes at least some asshole angry about the behavior at some point.

    12. Re:Crappy software by tibit · · Score: 1

      Sorry, knowing the disk bandwidth is not the whole picture. You also need to know how many hard drive transactions, worst case, do you need for yourself to read the file. Reading the fragmented-as-hell firefox url database can take forever in spite of the file being so small that you'd expect, by hard drive bandwidth alone, to be done with the copy in a 0.1s or so. Unfortunately, most of the "programmers" out there never bother to read up on various APIs exposed by their OS that let them get a list of blocks for a given file -- both Linux and Windows provide that, IIRC. We have "programmers" whose entire idea of what it takes to get data out of a mechanical disk is equivalent to invoking a bunch of C standard library APIs. And they claim that duh well, they never ever needed anything else. Sure, because the idiots don't even know what's out there to begin with -- they don't even know what to look for. This problem could be solved by proper education and, um, evangelism by those who know better. But those who know better often have better things to do than writing articles.

      --
      A successful API design takes a mixture of software design and pedagogy.
    13. Re:Crappy software by wisnoskij · · Score: 1

      Except that it is the same thing is some instances and it is not that trivial. For a progress bar you should not consider both "add two integers together" and "unpack and copy 8 gigs to the hard drive" as two separate and equal completed tasks.

      That is the problem with most progress bars, and the problem in the original question. 99% of the progress bar is filled up with trivial millisecond things and the other 1% takes tens of minutes, if not longer. So the progress bar is either speeding by faster than the human eye can watch it or it is stuck in place for long enough that you fear the program is broken. This is a failed progress bar, it is absolutely not doing what a progress bar is designed to do.

      What you really need is to separate the program execution into ~ equally timed sections so that you can gauge who quickly progress is really being made. If you run it on a slower computer it progresses slower, if the computer starts another resource intensive program progress might slow to half the speed.

      And when this is done, you also have your estimated time to completion, because you know in general terms who long the rest of the execution will take.

      --
      Troll is not a replacement for I disagree.
    14. Re:Crappy software by mangobrain · · Score: 1

      The progress bar on the HTTP download doesn't show the amount of remaining time in the bar. It shows the number of bytes remaining in the bar; the number of bytes remaining can't go into reverse.

      True, it can't go into reverse - it can be unknown, though. The Content-Length header isn't mandatory in an HTTP response. This is presumably a legacy thing pre-dating any serious HTTP standardisation, but still hangs around to account for things like dynamically generated content and streaming media. In such cases, all that is required of the server is closing the connection when the content has been sent.

      Unfortunately - due either to oversight, poor configuration, or poor programming - it's not unheard of for static, known-size content to be delivered without a Content-Length.

    15. Re:Crappy software by mangobrain · · Score: 1

      Correction: once you have the header, you might know how large the file is. The server may neglect to provide that information, or it may be wrong (e.g. sending the uncompressed length of data which is compressed for transport - yes, I have seen this). I worked on HTTP proxies for ~7 years, so I can say with some authority that HTTP is not a pretty standard, even when implemented correctly - which, all too often, it is not.

    16. Re:Crappy software by Anonymous Coward · · Score: 0

      The download dialog in Firefox does not use "the speed so far" to estimate the remaining time. It just plain ignores (some? all?) periods with no traffic at all. The result is that a download that is progressing at say 1Mb/s for 10 seconds, then pauses for 30s is actually going to take 4 times as long as indicated. The estimate is not updated during the time when no data arrives at all.

    17. Re:Crappy software by Anonymous Coward · · Score: 0

      Except in certain cases where the feedback is incorrect enough to be worse than no feedback at all.

  10. sometimes by MrDoh! · · Score: 3, Informative

    Copying files. Sure, get a list of the files to be moved, get the size, as files go across, start the % progress meter. What if the network starts slowing down as you start to copy? New files are added. You used a rough calc to get a vague idea as it was 10x faster, but when you start copying, there's a lot of files bigger than you thought. Network's fast, but the end machine you're copying too is having problems keeping up. You start hitting cache, it was fast (and skewed the result) till then, now it's crawling. Installations. All the fun of copying files, but you're updating existing files too, file system may be fragmented, some of the .ini files as you get to may need extra work. Drivers to install may take longer than expected. Once installed, you have to generate/compile/download extra, that's more rough guesses. As long as the hourglass/cursor/spinner is spinning, and the %'s is going up now and then, probably the best you can ask for. The trend for guesstimating time remaining seems to be diminishing, as surely the main thing most people want is to know 'is this still working or has it hung?' for anything else, logcat/catch stderr'more details' to find out what it's actually doing. It COULD be more accurate perhaps, but you'd spend so long working it all out in advance, for 9/10 things, it'd have been quicker to just do it.

    --
    Waiting for an amusing sig.
    1. Re:sometimes by PlusFiveTroll · · Score: 5, Informative

      The Windows8/Server 2012 dialog is much better in this case.

      http://encosia.com/blog/wp-content/uploads/2012/09/windows-8-file-copy-dialog.png

      It draws a graph showing you the current rate, in which you can see the average over time.

    2. Re:sometimes by thelexx · · Score: 1

      The Midnight Commander progress meter is for me the standard by which all others are judged, and is on my Things of Serious Fucking Beauty list. For years it has put to shame the fluctuating WAG meter in Windows. You know it if the network or something starts suddenly slowing down your move/copy - the throughput readout doesn't lie.

      --
      "Gold still represents the ultimate form of payment in the world." - Alan Greenspan, 1999
    3. Re:sometimes by MrDoh! · · Score: 1

      YES! That's a far, far better way of doing it. You get to see it's doing stuff, if it's struggling, but it's all reported to the user, just as it should be. (then again, I'm not at the end of a tech support line listening to people complain the bar isn't as big this week as it was last week, is there a problem with the internets and does something need rebooting! perhaps this should be able to be turned off by a network admin).

      --
      Waiting for an amusing sig.
    4. Re:sometimes by Waccoon · · Score: 1

      Yeah, but that's complicated and scary. Everyone knows that for consumer products, the best thing to do is hide as much info from the user... excuse me, person... as possible. At least, that's what the focus group said.

      They also said that a frowny face on the BSOD, rather than an actual error number, enhances the user experience.

    5. Re:sometimes by fatphil · · Score: 1

      It's still broken in that in 10 seconds the upper one's estimate of "11 minutes" will magically change to "5 minutes" as the bandwidth available to it increases.

      Sure, it also provides you with a bunch of other information that helps you work things out yourself, but the single thing that people most want - time remaining - remains bogus.

      --
      Also FatPhil on SoylentNews, id 863
    6. Re:sometimes by Anonymous Coward · · Score: 0

      OMG GNU MC FTW!!!111

      Seriously, though. It is awesome when using the FTP VFS to upload files or backup sites. Every metric you need to figure out "what is going on" is there.

      Overall time taking too long? Check the individual task progress to see if THAT is progressing... How many individual things are left to do? How much of the current individual thing is done? It's all there.

      You have enough info to estimate FOR YOURSELF how long things are going to take USING YOUR MUCH MORE ADVANCED noggin.

      The reason progress bars SUCK is that they try to replace a multimeter (which your brain wants) with a single metric, which itself isn't even that accurate (and which is NOT what your brain wants).

      Ultimately, the meters are for YOUR MIND'S SATISFACTION. Your brain HATES your computer for being as "dumb" as it is regarding ephemeral, generalized, and relativistic matters. For example, a post above mentioned how the computer has no idea as to what degree a CDROM spin-up will take an otherwise short read operation into "magnitudes of order longer" territory. It does not have the wealth of ephemera as data points for developing a model from which extrapolation or inference of the outcome can be made. Not only can your mind do this instantly, your computer CAN'T DO IT AT ALL.

      Your mind will instantly pick up on these sorts of environmental and anecdotal cues, summons up correlative data on their relative effects on the progress of the work at hand (based on their effects on similar work), and combines that with other information -- like measures of past performance and that of the current session, anticipated outcomes in similar circumstances (recursive statistical modelling of alternative scenarios) and your mind's historical accuracy in assessing the emergent outcome -- all of it to infer a delay of specific nature and with an estimated duration and possible caveats -- which lets it make another, more happy, inference in that it now believes it has enough time go get that coffee it really, really wants... cuz this computer crap's gonna take a while... probably.

      Your brain is a generalizing computer. Concise, but relevant, information that allows it to reach a probabilistic conclusion is what satisfies your brain. It is PRECISELY THE LACK OF SUCH METRICS that it gets all worked up about, because it can't work out what is PROBABLY GOING ON inside that black box.

      That's exactly why people incessantly bug other people for never-ending progress reports and time estimates.

      Meeting the information requirements for your brain to be able to SATISFY ITSELF is what progress bars, timers, spinners, throbbers, beach balls, and hourglasses are all about. I'm not sure the NEED that these things were trying to address was truly understood at the level of WHY. But then, that information is not strictly necessary to understand the FACT of people needing some feedback on this progress thing.

    7. Re:sometimes by tilante · · Score: 1

      There's a difference between 'bogus' and 'an estimate that's subject to change'. Personally, though, if I were the designer of that dialog, rather than estimating time to completion based on ( amount remaining / current speed ), I'd do it based on ( amount remaining / average speed so far ). As you get farther along, that reduces how much a short slowdown (or speedup) will change the estimate. At the same time, with the graph being shown, the user can see if the speed drops to zero and stays there for a considerable time, so even if that happens at 99% completion, they can set their own criteria for "how long am I going to wait with zero progress before I decide this thing's frozen and kill it".

      To me, that last bit is the big thing that's missing from most progress dialogs right now. I want to be able to tell if progress has stopped, and for how long it's been stopped. If you just show percentage completed and time, I as a user can't tell whether progress has slowed down to a crawl, or whether no progress at all is being made. Further, without the historical information provided by the graph, If I want to tell whether, say, the bar moves at all in the space of five minutes, I often have to resort to tricks like taking a Post-It and putting it on the screen where the bar ends right now, then using that later to tell whether the bar has moved. (A percentage count helps with this, but generally, the percentage count seems to be rounded to the nearest 1%, while the bar has more than 100 divisions and seems to be using them. Thus, a single pixel of movement might be only 0.3% progress, which might not show up in the percentage count, if it's not showing that same degree of accuracy.)

    8. Re:sometimes by PlusFiveTroll · · Score: 1

      >but the single thing that people most want - time remaining - remains bogus

      That's because 'people' don't provide a guaranteed minimum bandwidth, throughput, and IOPS. Give me a real time OS with performance metrics and a predetermined number of operations and I'll tell you how long it's going to take. Bitching at the application when your ISP is changing the bandwidth at order of magnitude levels each sampling isn't the applications fault. It isn't the applications fault that your disk is doing between 1 and 150 IOPS. It isn't the applications fault that your disk is writing at 100MBps and drops to 400KBps seemingly randomly.

    9. Re:sometimes by BasilBrush · · Score: 1

      Horrible. If it's only on servers, then OK. But I hope this abomination isn't on client Windows.

    10. Re:sometimes by BasilBrush · · Score: 0

      Yeah, but that's complicated and scary. Everyone knows that for consumer products, the best thing to do is hide as much info from the user... excuse me, person... as possible. At least, that's what the focus group said.

      No, that is what the usability testing would say. And if you think that usability testing makes a UI worse, then you're a fucking idiot, who should never be allowed anywhere near UIs.

    11. Re:sometimes by CCarrot · · Score: 1

      The Windows8/Server 2012 dialog is much better in this case.

      http://encosia.com/blog/wp-content/uploads/2012/09/windows-8-file-copy-dialog.png

      It draws a graph showing you the current rate, in which you can see the average over time.

      That's true, the new copy dialog is very nice. One thing I do miss, however, is some indication of the total size being copied...how hard would it have been to put "Copying 1 item (4.47GB) from A to B"?

      It's the little things...

      --
      "I love animals! Some are cute, others are tasty, what's not to like?" - Betsy Schroeder, Jeopardy contestant
  11. Yes by Austerity+Empowers · · Score: 3, Insightful

    It's very hard to predict how long something will take, particularly in relation to other things, if what you're writing is going to be on any number of platforms with different processors, storage, memory and network situations.

    You can be reasonably accurate with it, far more than my favorite 99% in 1 second, the last 1% in one hour scenario. There are cleverer and cleverer ways of making it ever more precise, but those methods usually involve spending time on getting it right, and not many people do it.

    1. Re:Yes by greg1104 · · Score: 4, Interesting

      I would have stopped at "yes" without the optimism, and it's not even a platform/processor issue. This is a fundamentally unsolvable thing, since in some cases it reduces to the halting problem. That best you can do is come up with an approximation.

      But the approximations will be wrong too. Simple example: write speed. If you write a block to disk, and it fits into the operating system cache, a write happens almost instantly. If the cache is full, you might have to spend tens of seconds waiting before that write occurs. Here's what happens with installers, copy programs, and a large chunk of other things. You write until the cache fills, and those happen at memory speeds. Then, all of the sudden, you grind to a halt when the cache fills. You won't see any progress, sometimes for minutes--it can take a while to chug through gigabytes of random writes. I show an example of this on my blog on Linux, and this problem gets worse as memory increases, not better.

      What does that look like to the user? They get a progress bar, it zooms along for a while, and then it cranks to a halt. Then it hangs for a bit, starts moving, and the whole thing completely changes scale. Does this sound familiar? That's what people complain about, right? You can't make that go away without building a model of the caching mechanism that's more accurate than the cache itself. After all, if you could predict this was coming, the OS could have done a better job scheduling I/O with that information, too. Think about that for a minute: to write a really good progress bar for write operations, you have to do a better job on I/O scheduling than Linux does.

      If you step back and say "well let's approximate how long disk I/O takes then and base the bar on that", you'll discover that doesn't work either. There's over a 100:1 difference between the fastest and slowest storage on the market. Good luck modeling that accurately enough to predict the future, too.

    2. Re:Yes by Bigby · · Score: 1

      Unless you are on a Real Time System. But then you KNOW how much processor time you will get and you KNOW how many clock cycles your execution requires.

      The problem is simple. People want progress in "time remaining" and you aren't copying "time". So you have to do a translation of non-time to time and that is hardly ever linear.

    3. Re:Yes by Anonymous Coward · · Score: 0

      ... spending time on getting it right ...

      That's the key point. I have written a small handful of things that I added a progress bar too. Very few of them have been accurate. I mostly put it in so that we can see the general progress of something. If I am copying a file, that is one thing.

      But if I have something that pulls a database off of a ftp server, then processes that database, then generates 5 reports from it then that's another story. Do I make a progress bar for each stage? do I approximate how much each stage contributes to the progress and update each part in real-time? do I just jump 20% every step? does the progress bar really matter all that much to my goal?

      I will gladly cut corners for internal apps and put more effort into ones used more publicly. But at the end of the day, I have better features to write.

      I wrote one app that was copying 1-2 Gig files off of usb for whatever reason. I was able to make an accurate progress bar (simple math). But I also added a random short phrase generator. It would say it was calculating indexes, adjusting DRM, processing channels, ... ect. It made it feel much faster than it really was.

    4. Re:Yes by fsterman · · Score: 1

      As an engineer, however, I would argue that we don't have to just give up because the maths proves it to be impossible. Even a reliably incorrect signal would tell us to not trust it and offer up a spinning (or otherwise infinite) processing ball. The reason we have these is to improve perceived performance.

      I mean, what's worse, being stood up on a date or not knowing for sure if s/he was going to tag-along on a group activity that you invite him/her to?

      --
      Is there anything better than clicking through Microsoft ads on Slashdot?
    5. Re:Yes by PlusFiveTroll · · Score: 1

      Sometimes a progress bar isn't the right solution. If the amount of data is indeterminate a counter showing how many bytes have been processed, or how many records/lines/entries have been processed is even better. If the user knows he has 1 million records and the program is at 500k, AND the counter is continuing to go up, that the work may complete before the heat death of the universe.

    6. Re:Yes by Anonymous Coward · · Score: 0

      It's very hard to predict how long something will take, particularly in relation to other things,

      "Prediction is very difficult, especially about the future."

      --Niels Bohr (Likely quoting/paraphrasing others)

    7. Re:Yes by Anonymous Coward · · Score: 0

      If you step back and say "well let's approximate how long disk I/O takes then and base the bar on that", you'll discover that doesn't work either. There's over a 100:1 difference between the fastest and slowest storage on the market. Good luck modeling that accurately enough to predict the future, too.

      It's a difficult problem, to be sure. But would is it really that hard to come up with a more accurate approximation? You lay out some important variables -- why can't a progress bar simply consider those things too?

    8. Re:Yes by muridae · · Score: 1

      It's a difficult problem, to be sure. But would is it really that hard to come up with a more accurate approximation? You lay out some important variables -- why can't a progress bar simply consider those things too?

      Because to consider those and get an accurate guess, it has to know more information than the system it's querying can provide. The OS can tell you, at best, the speed of the drive and it's cache and what else is using it right when you ask. It can not always predict a program will need to write to the drive, causing the eponymous file copy to slow down.

      For a halting problem like look at it, let's consider a computer running 8 program threads. All of these programs are copies of the same thing: they wait until there is little disk access going on, and then copy some data over the network from NFS or torrents or whatever. So, all 8 programs start, and query the OS; nothing is happening. They all start accessing the drive and the network, bogging both down with cache misses, locks, and overloading the bandwidth available. They all see the overload in access and stop and scale their progress bar to make up for the new time they think it will take. Rinse, repeat until the progress bar is just a pretty picture telling you the system hasn't frozen yet.

    9. Re:Yes by Anonymous Coward · · Score: 0

      This all assumes the hopelessly doomed model of progress bars - predicting how much longer things will take.

      Using the sensible model of how much work has been done, you get something that's useful and, while not necessarily evenly distributed or completely accurate, it's close enough and feels accurate to the end-user.

      The problem is always that people don't think about what work needs to be done. For example, a number of Windows installers calculate all the file sizes for the install, and that gets you to 98%. Then they set about registering their components, and because externally this is just a couple of lines in the installer, they assign bugger all 'work' to it, even though it often takes the system a significant amount of time to complete - sometimes almost as much as the copy.

    10. Re:Yes by Eskarel · · Score: 1

      Essentially the problem with progress bars is that what people want from them, they can't do. No one really give a crap what percentage of stuff is done in the purest sense, they care about how much longer it's going to take and more specifically when is it going to be done. The issue is that telling people when it's going to be done is impossible except in the most trivial of instances and even those trivial instances it's not hugely accurate. Progress bars are getting better, XP's copy dialogue only showed you how long it was taking to cache the file you wanted to copy(which is why Vista and 7's copy seemed to take so much longer for network copies), Windows 8 shows throughput. Fundamentally though, all progress bars are a disappointment because they cannot give the answer people actually want.

    11. Re:Yes by gl4ss · · Score: 1

      you could add bogus timer to it.

      then it would be accurate.

      but then one minute operations would take an hour just to be safe that the actual operation is done by the time the timer has ended. on the upside you could show exactly how long the timer is going to take to go through.

      --
      world was created 5 seconds before this post as it is.
    12. Re:Yes by loosescrews · · Score: 1

      Here is one more thing that happens. Hard drives' random access is much slower than sequential access. Therefore, another thing that can cause the transfer rate to quickly change is whether a large file or lots of smaller files are currently being transferred. Installers always seem to cluster all of the small files at the end of the install. Using an SSD solves this problem, at least in my experience.

    13. Re:Yes by Anonymous Coward · · Score: 0

      Proof that the quality of Slashdot is going down - I made it halfway down a page with hundreds of comments before I found someone who understood that this was reducible to the halting problem! Good post!

    14. Re:Yes by Anonymous Coward · · Score: 0

      Rinse, repeat until the progress bar is just a pretty picture telling you the system hasn't frozen yet.

      i always thought that was one of the main purposes of the progress bar.

    15. Re:Yes by Anonymous Coward · · Score: 0

      What I have done in the past is to provide a remaining time estimate that is separate from the progress bar but updates just as frequently. The estimated remaining time is based on a weighted average: 50% of it is based on the current percentage progress divided by the elapsed time, but the other 50% is based on the progress speed of the most recent, say, 10%. That way if the process begins to slow down, the estimated time will increase. But it is resistant to brief fluctuations in speed. And it allows the progress bar to completely stall but still reassure the user that some progress is being made, because the estimate is continually adjusted.

  12. AMD Catalyst by jones_supa · · Score: 1

    The AMD Catalyst installer progress bars are my favorite comedy example. It's jarring that such a high-profile product can have such a hacked solution in place.

    1. Re:AMD Catalyst by Anonymous Coward · · Score: 0

      The ugliest progress bar I've seen was on quick time installer for windows, some ten years ago, where at some point it had reached 103%!

    2. Re:AMD Catalyst by headcase88-2 · · Score: 1

      Another good one is Windows XP Service Pack 3 manual installer. It moves along quite nicely until it gets to the last sliver at which point it's "performing cleanup", but it's actually installing dozens of hotfixes behind the scenes. This can easily take many times longer than the rest of the install, and can only be slightly sped up by keeping an eye on all the Windows Update processes in Task Manager, and giving each one high priority as they come and go.

  13. Some progress bars seem to have gotten better by dakohli · · Score: 1

    I think that I can say it seems like some have gotten better, like large file copy dialogs no longer seem like a suggestion

    But, I have to agree that more complex operations like OS installations seem to be out to lunch, I can remember years ago joking about "Microsoft Minutes" during what seemed like Windows Marathon installations. I think with the array of processors, HD speeds, SSDs, etc, perhaps we should dump the x minutes remaining, and rather look at a percentage completion factor, although this too is not perfect because we all like thinks to install quickly so we can get on with using the software

    1. Re:Some progress bars seem to have gotten better by Anonymous Coward · · Score: 0

      But the stupid user will still asume that things get done at a constant pace.
      So they would simply start complaining about the last 10% taking 90% of the total time instead.
      And *then* they will demand some clever algorithm to predict how long it will actually take again.

    2. Re:Some progress bars seem to have gotten better by Anonymous Coward · · Score: 0

      A few years ago, I encountered Microsoft Millenia. Some very large file copies reported on the order of 200,000 Years to complete, eventually (after 5 minutes or so) dropping to about 10 Minutes which actually was fairly accurate.

  14. This, a thousand times this! by Anonymous Coward · · Score: 0

    It has come to pass that I sincerely prefer the hourglass (or spinning discus or beachball, or whatever) to seeing the various permutations of horror inflicted on the progress bar.

    From serial progress bars that use the same bar, to progress bars that empty again (though the empty-on-uninstall is just brain-twinging, not actually wrong) to progress bars that change function halfway through, I find that I cannot stand the abuses of user interface design that some idiots perpetrate.

    For crying out loud, why cannot a simple progress bar actually display some indication of !@#$ing progress for once?!

    1. Re:This, a thousand times this! by PlusFiveTroll · · Score: 1

      It has come to pass that I sincerely prefer the hourglass (or spinning discus or beachball, or whatever) to seeing the various permutations of horror inflicted on the progress bar.

      From serial progress bars that use the same bar, to progress bars that empty again (though the empty-on-uninstall is just brain-twinging, not actually wrong) to progress bars that change function halfway through, I find that I cannot stand the abuses of user interface design that some idiots perpetrate.

      For crying out loud, why cannot a simple progress bar actually display some indication of !@#$ing progress for once?!

      I've had too many program stick on the spinning hourglass when they were actually deadlocked (you could stick a debugger on it and see that it was in a race condition it would never break out of).

      I prefer the linux bootup method of progress determination. Keep spitting out information and lots of it. If I see that the programs stopped on 'Dittling Bits 103 of 1000' for 5 minutes I'll have a good idea that something is wrong, and what it could possibly be.

    2. Re:This, a thousand times this! by Anonymous Coward · · Score: 0

      I'm not saying the spinning hourglass is desirable, just that it offends me less than progress bars that don't measure or display any semblence of progress. I do seriously view each new progress bar with trepidation that someone, somewhere has found a new way to violate a very basic expectation that the UI element actually measures real progress in some meaningful way.

      That doesn't make the hourglass better, but I at least take comfort that while the programmer didn't expend any effort, they also didn't actively attempt to stab me in the brain.

      I too prefer more to less information, but I completely understand getting overwhelmed by a flood of mind-boggling information as well. Progress bars aren't offensive in concept; just in nearly every implementation I've seen in the past year.

  15. It's probably patented by Punto · · Score: 3, Funny

    There's probably a pantent for a "method or apparatus for an accurate display of progress", nobody wants to mess with that (but seriously most of my innacurate progress bars deal with unpredictable things like I/O, or non-uniform sets like loading textures and meshes and animations all together, so who knows how much time it will actually take to process the same ammount of data?)

    --

    --
    Stay tuned for some shock and awe coming right up after this messages!

    1. Re:It's probably patented by Anonymous Coward · · Score: 0

      That sounds like a cartoon idea for Dilbert - Dogbert puppeteering a couple of marionette figures in front of a Powerpoint presentation of project milestones represented as historic battles.

  16. too many factors by Anonymous Coward · · Score: 0

    too many calls to too many black box parts that you have no control or even no telemetry of.

    i'm just guessing.

  17. If I only had a crystal ball... by dav1dc · · Score: 1

    Unfortunately, one does not know the exact running time "a priori" - it varies widely with different hardware configurations, network congestion, hard drive speeds and is therefore often easier to measure than to predict.

    The progress bar has always been a "best effort" guess as to the amount of time remaining, I think they have gotten a lot more accurate over the years - but perfection is a long way off I suspect.

  18. Too many variables by Anonymous Coward · · Score: 0

    There's just too many factors involved. Are you installing something? Well the read/write speed of your hard drive can impact that. Even if you KNEW what the read/write speed was averaging there's no guarantee that it will maintain that speed; if the drive was severely fragmented the head could be jumping all over the place to get the necessary data and write it out. That's just a small sample, I'm sure you'll get more examples.

  19. It's not hard.. by Anonymous Coward · · Score: 0

    It's not hard to make an accurate progress bar for file transfers in within a filesystem. The problem is that it doesn't really matter in small transfers and creating an accurate estimation of big and many filed transfers would make for a significant delay on its own, as each file had to be scanned.

  20. different builds by Anonymous Coward · · Score: 0

    Because everyone has a different set of variables.

  21. the time cost by Anonymous Coward · · Score: 0

    Making it any more accurate (say by prescanning all files ahead of time) would dramatically increase the amount of time the operation would take.

    1. Re:the time cost by rwa2 · · Score: 1

      Either that, or the progress bar overestimates, and then just makes you wait at the end until it hits its estimate right on the mark!

      Actually, MS should do this. It would make them look like geniuses.

    2. Re:the time cost by GigaplexNZ · · Score: 1

      Making it any more accurate (say by prescanning all files ahead of time) would dramatically increase the amount of time the operation would take.

      You've just described why Vista took so damn long to actually start a copy operation.

    3. Re:the time cost by Belial6 · · Score: 1

      Ok, that is pretty funny. The sad part is that there would be people who were happier with the rwa2 progress bar than with the current ones. We just need a toggle that lets the people who demand an accurate progress bar to get it, while those of us that can accept progress bars that are not exact can get our stuff faster.

  22. Please wait. by Anonymous Coward · · Score: 0

    Comment loading 12%

  23. Dev tasks work just the same! by Anonymous Coward · · Score: 0

    My team lead often wonders why my own "progress bar" seems occasionally to freeze.

  24. It's because things vary a lot. by CityZen · · Score: 1

    You can make an accurate estimation for a given system. However, everyone else's PC and network environment will be significantly differently from that system. Even things that you think might be predictable can take unpredictably long, given the "right" setup.

    Of course, sometimes it's just due to bad programming.

    Also, oblig xkcd: http://xkcd.com/612/

  25. Not hard at all by Zynder · · Score: 1

    The computer is able to measure it's data throughput, read/write times, etc. Whether programmars actually do this measurment I don't know. But if the computer knows how fast it is reading or writing a disk or transferring over the LAN then there is no reason why it shouldn't be able to make those calculations. Even if the environment changes from task swapping or adding overhead or whatever then the measurement, being dynamic, can be recalculated on the fly and the 'finish time' updated accordingly.

    Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

    1. Re:Not hard at all by LiENUS · · Score: 1

      So if you're transferring a file over the network maxing it out and you know it will take 10 minutes but then your wife starts streaming video over the network, how do you predict that at the start of the transfer? It's pretty damn difficult to predict the future man.

      Mandatory Car Analogy: How long will it take you to drive 60 miles if you're going 60 miles/hour now? (what you don't know is that in two minutes someones going to cut you off and you'll end up rear ending them)

    2. Re:Not hard at all by Lisias · · Score: 2

      The programmer does what the boss tell him to do.

      The Progress Bar loses his functionality when Windows 96 start to use it just as something that moves on the screen. No real processing is associated with the Bar or Animation activity!

      On the other hand, there are programs that do it right! Unfortunately, one of the best examples I have is a console Linux program: The Midnight Commander - so, very few people nowadays is exposed to a correctly written Progress Status notifier mechanism...

      --
      Lisias@Earth.SolarSystem.OrionArm.MilkyWay.Local.Virgo.Universe.org
    3. Re:Not hard at all by Anonymous Coward · · Score: 0

      Even if the environment changes from task swapping or adding overhead or whatever then the measurement, being dynamic, can be recalculated on the fly and the 'finish time' updated accordingly.

      And how does that look any different than what happens now?

    4. Re:Not hard at all by fsterman · · Score: 1

      Mod parent up: progress bars make for simple bullet point on a requirements spec, but defining one is takes an entire sentence.

      --
      Is there anything better than clicking through Microsoft ads on Slashdot?
    5. Re:Not hard at all by stanlyb · · Score: 1

      But your car is simply UNABLE to run backward or left, without pause, ain't so? Oh wait, actually it could, if you are hit by meteor :D

    6. Re: Not hard at all by rgbe · · Score: 1

      Midnight Commander is not perfect. I have seen it do strange things with the progress bar.

    7. Re:Not hard at all by fsterman · · Score: 2

      As a happy middle, we could just change the UI widget to detect when a signal is lying to it and offer up a spinning (or otherwise infinite) processing ball.

      I mean, what's worse, being stood up on a date or not knowing for sure if s/he was going to tag-along on a group activity that you invite him/her to?

      --
      Is there anything better than clicking through Microsoft ads on Slashdot?
    8. Re:Not hard at all by Gaygirlie · · Score: 2

      The computer is able to measure it's data throughput, read/write times, etc.

      Network latency, seek times, sudden Windows Update that decides to start installing packages in the middle of the process.. there's a BILLION different things that could be happening, all the kinds of things that drastically alter the speeds and therefore throwing the estimate right off the table. And that's only when you're just doing straight-up file-transfer, but what if you're doing something that requires altering pre-existing files, to boot?

      Basically I am saying that it is certainly possible to make a progress bar that mostly does what it's supposed to, but you're going to be writing lots and lots and lots and lots of code and using quite a bit of CPU-time just to keep updating the estimate at all times, not to mention that the bar must then always be written specific to that single application and task at hand. And to what end? A bar that shows an estimate for how long the process will take, nothing more -- all the time spent coding the bar could be used to do bugfixing, providing new features or honing existing ones and the CPU-time could be used by other programs or to, you know, do something more useful in the meantime.

      Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

      If you were to compare this to computers then you'd have things like sudden goose swarms jumping right in front of the car at unexpected times, all 4 tires losing friction, a bunch of other drivers on a single-lane road and all fighting each other for the privilege of getting to drive as first of the line, your car suddenly starting to perform maintenance and cleaning on itself while you're trying to drive, mandatory pit stops at variable distances and you having to always perform this or that manual task when you reach one, and so on. Does it sound so easy at this point?

    9. Re:Not hard at all by jamesh · · Score: 1

      The computer is able to measure it's data throughput, read/write times, etc. Whether programmars actually do this measurment I don't know. But if the computer knows how fast it is reading or writing a disk or transferring over the LAN then there is no reason why it shouldn't be able to make those calculations. Even if the environment changes from task swapping or adding overhead or whatever then the measurement, being dynamic, can be recalculated on the fly and the 'finish time' updated accordingly.

      Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

      Sometimes the measurement takes a significant chunk of the progress time so its best not to bother.

      Windows tries to do this measurement sometimes ("Preparing to copy..." etc) and still manages to screw it up, and for all the bad things people say about Microsoft at the upper levels of management, the programmers there aren't stupid. If it hasn't been done in 25 years then it should be self evident that the problem is hard to solve.

      Why it's hard to solve is an interesting discussion to have, but stating that it's not hard to solve flies in the face of many years of evidence to the contrary.

      And also, haven't you seen a progress dialog go from "30 seconds remaining" to "2 hours remaining"? Dynamic recalculation sometimes doesn't help and just makes the problem appear worse.

      And if you want a car analogy, a better one is your car telling you how many km you can do until your tank is empty.

    10. Re:Not hard at all by I'm+New+Around+Here · · Score: 1

      Mandatory Car Analogy: How long will it take you to drive 60 miles if you're going 60 miles/hour now? (what you don't know is that in two minutes someones going to cut you off and you'll end up rear ending them)

      You say that as if you think it means I will stop.

      .
      Actually, I'll be late anyway, as I don't go over 55mph. My mileage goes to crap at 60.

      --
      If you think I voted for Trump because of this post, you're wrong. I voted for Dr. Jill Stein of the Green Party. Again.
    11. Re:Not hard at all by Anonymous Coward · · Score: 1

      Why does a progress bar have to be associated with time? I can't think of a real-world analog. It should be associated with whatever units the work being done is measured with.

    12. Re:Not hard at all by Anonymous Coward · · Score: 0

      Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

      ...unless the the road suddenly becomes heavily congested, which happens quite often for the processor or the HD data bus. Also, lots of tasks are formed of different parts that use different resources, so it's just not possible to predict the future based on current speed. To continue the car analogy, you're doing 60mph on a straight highway, but then you need to stop by the side of the road and iron a shirt. The fact that you were going 60mph is completely useless for estimating shirt-ironing duration.

      Then you continue driving down a windy, bumpy dirt road and the 60mph statistic is still fairly useless, and outdated as well. Then you finally come to a toll booth in the middle of a forest and the booth operator (a remote server) says he needs to take a leak and it'll take less than a minute, but 30 minutes later he's still out in the forest.

    13. Re:Not hard at all by Jeremi · · Score: 1

      I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

      ... and then when you come across a traffic jam in half a mile, your prediction turns out to be wrong, and your user is pissed off that you "lied to him". That's the problem under discussion, son!

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    14. Re:Not hard at all by Jeremi · · Score: 1

      If [Microsoft hasn't done it] in 25 years then it should be self evident that the problem is hard to solve.

      I'd like to agree, but then I think about the state of the MS-DOS shell. In 2013, it still sucks almost as bad as it did in 1985.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    15. Re:Not hard at all by war4peace · · Score: 1

      I agree with a task taking 6 minutes although it said it needed 5 to complete. But when it says "1 second remaining" for 10 fucking MINUTES... no amount of excuse would justify that, because there is simply no excuse for it.

      --
      ...gis sdrawkcab (usually not responding to ACs; don't bother posting as AC)
    16. Re:Not hard at all by jones_supa · · Score: 2

      Have you tried PowerShell? It has replaced the "MS-DOS Prompt" if that is what your experience is of. In some ways PS is more advanced than UNIX, for example it allows you to pass data in an object-oriented fashion, avoiding the need to constantly parse data delimited with spaces with various commands (awk, sed, xargs...).

    17. Re:Not hard at all by Culture20 · · Score: 1

      If you were to compare this to computers then you'd have things like sudden goose swarms jumping right in front of the car at unexpected times, all 4 tires losing friction, a bunch of other drivers on a single-lane road and all fighting each other for the privilege of getting to drive as first of the line, your car suddenly starting to perform maintenance and cleaning on itself while you're trying to drive, mandatory pit stops at variable distances and you having to always perform this or that manual task when you reach one, and so on. Does it sound so easy at this point?

      Well that's not a perfect sphere in a vacuum is it?

    18. Re:Not hard at all by foobsr · · Score: 1
      Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile. That's predicting the future son!

      Only if the 18 Wheeler that is approaching you does not miss you.

      CC.

      --
      TaijiQuan (Huang, 5 loosenings)
    19. Re:Not hard at all by smellotron · · Score: 1

      And also, haven't you seen a progress dialog go from "30 seconds remaining" to "2 hours remaining"? Dynamic recalculation sometimes doesn't help and just makes the problem appear worse.

      This is a problem with the developers of the progress bar (and their managers). "2 hours remaining" isn't a progress report. "28% complete" is a progress report. It's more accurate, it never goes backwards, and it splits the workload more effectively: the computer can calculate how much it has done, and the human can do some simple extrapolation to guess how long it will take, in a human time scale. That's not "20 minutes" or "2 hours", that's "quick enough to sit and watch the progress bar", or "enough time to take a leak / make some coffee", or "time to check my email / facebook". "2 hours remaining... no wait, 5 seconds remaining... no wait, it'll never finish!" is bullshit coming out of the program, and we all know it. So just cut the bullshit and let the progress bars indicate progress.

    20. Re:Not hard at all by Jeremi · · Score: 1

      I'll try it when I upgrade to Windows 8... in the meantime, a shell that isn't part of the default OS is of limited usefulness, as I can't rely on its availability. It does look promising, though.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    21. Re:Not hard at all by Anonymous Coward · · Score: 1

      ...no amount of excuse would justify that, because there is simply no excuse for it.

      Wow, when you decide to go for circular logic, you don't hold back do you? I mean, you put it right out there. No sugar coating, no attempt to disguise it, just "there can't be X because there isn't X", BAM.

    22. Re:Not hard at all by Gaygirlie · · Score: 1

      That reply made me laugh much more than it should have!

    23. Re:Not hard at all by Sique · · Score: 1

      Because that's the only thing the user will know: "How long will it take?"

      --
      .sig: Sique *sigh*
    24. Re:Not hard at all by jamesh · · Score: 1

      And also, haven't you seen a progress dialog go from "30 seconds remaining" to "2 hours remaining"? Dynamic recalculation sometimes doesn't help and just makes the problem appear worse.

      This is a problem with the developers of the progress bar (and their managers). "2 hours remaining" isn't a progress report. "28% complete" is a progress report. It's more accurate, it never goes backwards, and it splits the workload more effectively: the computer can calculate how much it has done, and the human can do some simple extrapolation to guess how long it will take, in a human time scale. That's not "20 minutes" or "2 hours", that's "quick enough to sit and watch the progress bar", or "enough time to take a leak / make some coffee", or "time to check my email / facebook". "2 hours remaining... no wait, 5 seconds remaining... no wait, it'll never finish!" is bullshit coming out of the program, and we all know it. So just cut the bullshit and let the progress bars indicate progress.

      But even that's wrong. 28% of what? Total number of files? Total amount of data? If you're copying a large number of files then the effort required to gather this info is significant too. Also, the computer does this so called "simple extrapolation" to determine how much time is remaining and it gets it wildly wrong so why do you think you'd be any better?

      In most cases there already is a progress bar anyway, fwiw. There may be no % figure given, but that matters not so much. And many times i've seen the progress bar get almost all the way to the right and just sit there for ages.

      At some Microsoft conference I attended the presenter just said 'fake it' (wrt progress bars, not "time remaining"). Take a vague stab at the amount of time the task will take, and make the progress bar fill 50% in half that time. Then do it again for the next 25%. And so on. If the task finishes just move the progress bar to 100%.

    25. Re:Not hard at all by pjt33 · · Score: 1

      The way it transfers data between programs is interesting, but it has some frustrating usability issues, some of them inherited from MS-DOS Prompt. It still suffers from the fixed window width. It still uses the rectangular select for copy. Tab-completion will delete the rest of the line.

    26. Re:Not hard at all by fnj · · Score: 1

      Mandatory Car Analogy: I know that if my speedometer indicates 60 miles/hour, that in one minute I will have travelled one mile.

      No, you don't know that at all. You could come up on a traffic jam in 30 seconds and sit there for an hour. A car going the other direction could jump the median, collide with you, and kill you instantly within the next 5 seconds. There could be a detour right after the next rise. Your engine could stall. A cloudburst could begin in seconds, reducing everybody's speed to a crawl. A cop car could come up on your tail and you better damn believe you will slow down. Or he might stop you, in which case you are going to be VERY late getting to that next mile marker.

    27. Re:Not hard at all by Dr+Damage+I · · Score: 1

      What you don't know, is that you will be travelling at 60 mph for the entire minute.

      --
      "Cursed is he who rises early in the morning..." Isiah 5:11
    28. Re:Not hard at all by jones_supa · · Score: 1

      The window width can be configured. Right-click the title bar and select Properties. From the pop-up window, go to the Layout tab.

      According to my quick test, tab completion did not wipe the rest of the line.

      You're correct about the rectangular select. It is a bit awkward.

    29. Re:Not hard at all by crutchy · · Score: 1

      the "female program" (or the w32.female virus) is extremely unpredictable, and any efforts to eradicate such infection will result in your bank accounts also becoming infected.

    30. Re:Not hard at all by crutchy · · Score: 1

      i don't understand the fascination with progress bars anyway

      why not just say something like...

      "i have no idea how long such n such operation will take so please sit back and enjoy this humorous and slightly annoying distraction for as long as it takes (or until you are driven crazy)" ...with an animation of that zebra from madagascar 3 doing the afro polkadot circus dance?

    31. Re: Not hard at all by crutchy · · Score: 1

      strange progress bars are ok as long as the progress bar doesn't slip into the flapping animated folder icon after it gets longer

    32. Re:Not hard at all by Pieroxy · · Score: 1

      Have you tried PowerShell? It has replaced the "MS-DOS Prompt" if that is what your experience is of. In some ways PS is more advanced than UNIX, for example it allows you to pass data in an object-oriented fashion, avoiding the need to constantly parse data delimited with spaces with various commands (awk, sed, xargs...).

      It has some good points, true, but it still lacks the shitload of userspace utilities (mostly GNU) that we enjoy on unix and linux in particular. Also, it doesn't help for a remote control type of operation when most server apps have their configuration in a nice dialog box.

    33. Re:Not hard at all by Chrisq · · Score: 1

      the "female program" (or the w32.female virus) is extremely unpredictable, and any efforts to eradicate such infection will result in your bank accounts also becoming infected.

      I hear that Apple users are rarely affected.

    34. Re:Not hard at all by Anonymous Coward · · Score: 0

      why not just say something like...

      ...with an animation of that zebra from madagascar 3 doing the afro polkadot circus dance?

      Because of copyrights, that's why...

    35. Re:Not hard at all by sourcerror · · Score: 1

      Powershell is part of Windows since Windows 7.

    36. Re:Not hard at all by azalin · · Score: 1

      As for the car analogy: The speedometer doesn't tell you the future, only the present. Seeing a clear road ahead provides you with the info that you will be able to continue to drive at this speed for now. Anyway a better analogy would be distance traveled. You want to drive 100 miles total and have already covered 10 miles or 10%. This does not offer any insight on what happens during the next 90 miles (heavy traffic, 6 lane highway, congested city center, construction site) of your journey.

    37. Re:Not hard at all by azalin · · Score: 1

      If you want to calculate anything there is either (sometimes outrageously) simplified and off, or exact and messy as hell. The closer you approach the real world, the more weird factors appear to crash your party.

    38. Re:Not hard at all by azalin · · Score: 1

      That reminds me of my all time favorite progress bar: The windows 95(?) defragmentation tool. 1% to 99% took less than one hour, 99% to completion took three.

    39. Re:Not hard at all by pjt33 · · Score: 1

      The window width can be configured. Right-click the title bar and select Properties. From the pop-up window, go to the Layout tab.

      I know. Exactly the same as MS-DOS Prompt. And MS-DOS Prompt and PowerShell are the only xterms I've ever encountered with this limitation. I can understand it in the case of a quick hack written at some point in the 80s, but I can't understand why PowerShell didn't take the opportunity to do it as well as other OSes were doing it in the late 90s (or possibly earlier, for all I know).

      According to my quick test, tab completion did not wipe the rest of the line.

      I've just tested too, and it still wipes it for me. I still seem to have 1.0, so maybe you're on version 2 and they've fixed it.

    40. Re:Not hard at all by gnasher719 · · Score: 1

      Network latency, seek times, sudden Windows Update that decides to start installing packages in the middle of the process.. there's a BILLION different things that could be happening, all the kinds of things that drastically alter the speeds and therefore throwing the estimate right off the table.

      So why is it so hard to show a progress bar that is reasonably accurate if none of these things happen? Nobody is complaining that a progress bar is inaccurate if Windows starts installing updates. People complain when its inaccurate no matter what happens.

    41. Re:Not hard at all by smellotron · · Score: 1

      28% of what? Total number of files? Total amount of data?

      Data, of course. Files can vary in size. Bits are bits. Blocks are blocks, at least per filesystem. To take a pathological case, a single 16TB file-copy should not have a single step from 0% to 100%.

      Also, the computer does this so called "simple extrapolation" to determine how much time is remaining and it gets it wildly wrong so why do you think you'd be any better?

      I know external context which my computer does not. Family member turned on Netflix and the connection just slowed down? I can probably guess the reason. In fact, from my computer's perspective, I am practically clairvoyant. I know that my bandwidth will go down, because I am about to walk into another room which is farther away from the router. I also know that disk is going to slow down because I am about to open iTunes. And I know that my ISP does traffic-shaping which bursts the beginning of HTTP responses to optimize WWW browsing patterns.

      I am also a much better pattern-matching engine than my computer. I remember the last few file similar file copies which occurred. I can see when the progress bar speeds up or slows down, and if it happens repeatedly maybe there is a pattern. My ancestors had to extrapolate constantly in order to survive. My computer file-copy dialog? Well, it's very good at measuring past transfer rates and doing fast calculations, but it's comparitively very dumb. Why wouldn't you expect a human to do a better job of extrapolation?

    42. Re:Not hard at all by Anonymous Coward · · Score: 0

      Sorry to be pedantic, but neither is an example of an "xterm" - you must be using the term generically, like "kleenex". They are shells which run in a console or terminal window. They are not "xterms" any more than more than a program running in a window is, well, a "window".

    43. Re:Not hard at all by LiENUS · · Score: 1

      If you don't stop you'll have to speed up as the police will be after you

    44. Re:Not hard at all by Anonymous Coward · · Score: 0

      Way to avoid the point completely.

    45. Re:Not hard at all by gewalker · · Score: 1

      Actually, that's not what just what I understand, It is what I often care about.

      Should I go to dinner or wait for 2 for minutes so I can start installing the next package and then head out.

      At other times what I care about is, "Has the install stalled" -- i.e., is it time to kill it -- so some short term measure of current progress is also very useful. Some stupid spinner animation is useless because it may continue spinning forever why the install has silently died.

      Progress bars should not just be a form of entertainment, but actually useful feedback for the user that is trying to use the software he is attempting to install.

    46. Re:Not hard at all by gnasher719 · · Score: 1

      So if you're transferring a file over the network maxing it out and you know it will take 10 minutes but then your wife starts streaming video over the network, how do you predict that at the start of the transfer? It's pretty damn difficult to predict the future man.

      I'll give you a different scenario: I start downloading a huge file in the browser, say 800MB. After the first 100MB is done, I start downloading a second huge file in the same browser, say 400MB. How well can you predict when each download will finish?

      Another scenario that browsers usually get horribly wrong: I click on a download button, but it takes 10 seconds until the download starts. After 10.01 seconds, the browser calculates average number of bytes per seconds which is ridiculously low and tells me that the download will take 3 weeks. That number goes down rapidly to something reasonable. Why can't that be improved?

      Another one that I saw: A download of a 500 MB file was interrupted after 200 MB. When the download is restarted, the browser figures out after 0.01 seconds that 200 MB are already there, so the whole file will take 0.025 seconds. Why can't that be improved?

    47. Re:Not hard at all by AK+Marc · · Score: 1

      #files processed is not humanly useful. And ovens and regular timers are a progress bar, of a sort.

    48. Re:Not hard at all by AK+Marc · · Score: 1

      In most cases, the computer doing nothing other than the install will still result in a bad result. If there are external factors that affect it, you put in status updates. Ever notice that download bars have speed in addition to time to finish and progress? That's because it's governed by external factors. Even if you are doing an update on a computer with no shared resources, and no other processes running, the progress bar is still invalid. That is a separate issue than "your progress bar is useless because there's a theoretical non-zero chance that a meteor will strike the earth and kill us all before it completes" analogy.

      The car analogy is, http://xkcd.com/612/ That's closer to reality. The wildly inaccurate bar changing between multiple inaccurate values when operating nominally.

    49. Re:Not hard at all by hurfy · · Score: 1

      After dealing with a flaky HD this week i got to see some even flakier progress bars.

      Disk was broke and only running at 1/1000 speed or so for some reason trying to reinstall windows. The progress bar moved from 37 minutes remaining to 35 minutes after at least 30 mins of attempted work. The estimate is fixed i assume as it always starts out about the same.

      The progress bar on the disk diag was the opposite with aggressive recalculating. 6min, 60min, 27min, 1min, 100min, 13min, 50min, 7min, 90min, 27sec (HAHA), 39min....AAARRGGHH

      Not sure which was more annoying, but at least the diag one was more entertaining :(

    50. Re:Not hard at all by crutchy · · Score: 1

      not that i know but i've heard that being gay or living in your mom's basement is apparently a good way to prevent infection by the female program. i assume apple users most likely use these kind of defenses.

    51. Re:Not hard at all by crutchy · · Score: 1

      oh c'mon

      why don't you go back to sitting in the corner you dunce

    52. Re:Not hard at all by Anonymous Coward · · Score: 0

      ...(what you don't know is that in two minutes someones going to cut you off and you'll end up rear ending them)

      You say that as if you think it means I will stop.

      .

      Most people will stop if they hit another car, either voluntarily or involuntarily.

  26. No completely accurate algorithm exists by insecuritiez · · Score: 1

    Progress bars are all about using past history to predict future performance. The problem is that past history doesn't always say anything about what will happen in the future.

    If you only use very recent history then you can usually better predict the very near future but it also makes the progress prediction and remaining time prediction very unstable and jump all over.

    You're a human so use your own intuition to predict progress in part on what the program tells you and in part based on your knowledged of the work involved and the work yet-to-be-done.

  27. Leave it out by jones_supa · · Score: 1

    It is sometimes hard to make a good progress bar for certain procedures. In such case, please don't even try. No one wants to see those bars that sit at 0% for three minutes and then jump to 100%. Leave the progress bar out completely or use one of those "infinite" bars that just have block sliding from left to right, or the Win8 spinning pearls animation.

    1. Re:Leave it out by Anonymous Coward · · Score: 0

      Then the product manager comes by and insists that they need an estimated time to completion, and the engineer says 'less than one minute'.

      Hey my washing machine sits at 1 minute for at least 10 minutes every cycle.

    2. Re:Leave it out by Anonymous Coward · · Score: 0

      Hey my washing machine sits at 1 minute for at least 10 minutes every cycle.

      10 years ago if you told me that washing machines in the future would have progress meters, I would have told you you're crazy. Sure enough, they do now.

      My washing machine's "normal" mode calculates how much water to add by weighing the contents. Oddly, from what I can tell, it does this by spinning the drum and measuring how long it takes to stop spinning. It does this several times at different speeds. It often fails to add enough water. This can be overridden by selecting the "bulky items" mode which will nearly fill the tub regardless of whatever is in it, yet it still goes through the motions of measuring the load anyway.

      With my old machine (R.I.P.), you select the load level with a dial. Much simpler, and there was no guessing about how much water the machine would add or how long the cycle will take. I miss that old machine.

  28. Re:no, it's easy. by dotHectate · · Score: 5, Funny

    You know someone is going to take your suggestion literally as a tutorial on how to implement a progress bar - later they'll come back with some mystical crash always happening at 0%.

    --
    Patience is a virtue, but haste is my life.
  29. It's mathematically impossible. by PseudoThink · · Score: 4, Informative

    See http://scribblethink.org/Work/kcsest.pdf and http://scribblethink.org/Work/Softestim/softestim.html

    (No, I'm not being serious. The topic just reminded me of when I once jokingly justified a poorly estimated ETA on a "simple" development project by referencing the above paper.)

  30. MSIE by Anonymous Coward · · Score: 5, Interesting

    My favorite terrible progress bar was Internet Explorer, back in its early days of essentially being a renamed version of NCSA Mosaic. When attempting to load a site that wasn't available, the progress bar would slowly creep towards complete, despite the server being completely unresponsive. Then after a long while the browser would give up and stop the progress bar. Why on earth would the progress bar move if the server is completely unresponsive? Who programmed this? I would hope that they, like the inventor of Clippy, suffered a terrible death by fire.

    1. Re:MSIE by blueg3 · · Score: 2

      Are you kidding? Lots of processes still use that damn indefinite progress bar. I think a recent version of IE might, even. As time progresses, even if no real progress is made, it fills up some small fraction of the remaining space. The next block of no-progress "time" uses up the same small fraction of the *now-remaining* space, so the progress bar creeps forever toward the end, even though no progress is made.

    2. Re:MSIE by jones_supa · · Score: 1

      Heh, I surely remember that one.

    3. Re:MSIE by Anonymous Coward · · Score: 0

      Two other Windows-typical frustrating toolbars:
      - toolbar reaching 100% and then staying there for a time even bigger than the completion time
      - toolbars re-starting from 0 an unknown number of time
      They are as useless as no toolbars at all.

    4. Re:MSIE by allo · · Score: 1

      its showing you: hey, IE is not hanging.

    5. Re:MSIE by Anonymous Coward · · Score: 0

      My favorite terrible progress bar was Internet Explorer, back in its early days of essentially being a renamed version of NCSA Mosaic. When attempting to load a site that wasn't available, the progress bar would slowly creep towards complete, despite the server being completely unresponsive. Then after a long while the browser would give up and stop the progress bar. Why on earth would the progress bar move if the server is completely unresponsive? Who programmed this? I would hope that they, like the inventor of Clippy, suffered a terrible death by fire.

      Didn't the inventor of clippy go on to create windows 8?

    6. Re:MSIE by Anonymous Coward · · Score: 0

      The progress bar is to make the user feel better; that's its entire purpose. In some cases, it may be possible to give an accurate response. In other cases, the only option is to lie. A non-progressing bar doesn't placate the user in the same way that a lying but progressing bar does.

    7. Re:MSIE by Anonymous Coward · · Score: 0

      My favorite terrible progress bar was Internet Explorer, back in its early days of essentially being a renamed version of NCSA Mosaic. When attempting to load a site that wasn't available, the progress bar would slowly creep towards complete, despite the server being completely unresponsive. Then after a long while the browser would give up and stop the progress bar. Why on earth would the progress bar move if the server is completely unresponsive? Who programmed this? I would hope that they, like the inventor of Clippy, suffered a terrible death by fire.

      because if server responses take 10 seconds om average and you freeze the progress bar until you get a response, the progression is no longer smooth and users complain.. or as the OP said, "It's hard"

    8. Re:MSIE by PlusFiveTroll · · Score: 1

      IE is also a bastard (in previous versions, not sure about current) in how many Kbps you were getting. They showed your download total, how much time was left, and a number you thought was how many Mb/Kb/Bps you were downloading at the time... but the download speed is actually an average too! If you stuck an Iptables drop rule in the middle of your download the download speed counter would

      100KB..99KB..98KB..97KB.. count down slowly over time even though your current download speed was 0 ZERO ZIP NADA. If your download was going fast at one point you could sit there 20 minutes before you realized that number of bytes downloaded wasn't increasing but you still had a download speed!?!

      PROTIP: Have your download rate show what speed you are currently downloading at in the current sampling window. That's what matters now.

    9. Re:MSIE by justthinkit · · Score: 1

      Relates to the retry interval, that doubles with each retry (per the RFC), so the "progress" bar at that point is a retry bar, with retry times doubling for each progress bar update...not good.

      --
      I come here for the love
    10. Re:MSIE by WhiteDragon · · Score: 1

      My favorite terrible progress bar was Internet Explorer, back in its early days of essentially being a renamed version of NCSA Mosaic. When attempting to load a site that wasn't available, the progress bar would slowly creep towards complete, despite the server being completely unresponsive. Then after a long while the browser would give up and stop the progress bar. Why on earth would the progress bar move if the server is completely unresponsive? Who programmed this? I would hope that they, like the inventor of Clippy, suffered a terrible death by fire.

      Early versions of Netscape had an issue where if a download was getting slow, the speed would creep down and down, until it hit a divide by zero error and crashed the browser.

      --
      Did you mount a military-grade, variable-focus MASER on an unlicensed artificial intelligence?
    11. Re:MSIE by Anonymous Coward · · Score: 0

      Believe it or not Skyglass Mosaic (which IE 1.0 was a reskin of) used none of the NCSA Mosaic source code, they simply licensed the name. NCSA Mosaic was the much better product back then, I've never actually met someone who'll admit to using IE 1.0.

  31. Zenity by flyingfsck · · Score: 1

    It is quite trival actually.

    This one is always perfectly accurate:
    zenity --progress --text="Testing..." --title="Test" --auto-close --pulsate &
    PID=$!
    Do whatever...
    kill $PID

    --
    Excuse me, but please get off my Pennisetum Clandestinum, eh!
  32. Can't Go Backwards by naroom · · Score: 5, Insightful

    Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar.

    1. Re:Can't Go Backwards by Jafafa+Hots · · Score: 4, Insightful

      I've seen some progress bars that do exactly that - go backwards.

      --
      This space available.
    2. Re:Can't Go Backwards by citizenr · · Score: 5, Informative

      This is why you put two progress bars. One general and one for sub processes.
      http://www.codeproject.com/KB/progress/SplitProgressBar/SplitProgressBar.gif

      --
      Who logs in to gdm? Not I, said the duck.
    3. Re:Can't Go Backwards by UltraZelda64 · · Score: 2

      Yes and it's those--as well as those that dance left and right for no damn reason--that really piss me off.

    4. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Yes it can. Just try a full-compile using ISE Eiffel :)

    5. Re:Can't Go Backwards by shutdown+-p+now · · Score: 4, Interesting

      I've seen progress bars that go backwards, but it usually indicates reversal of something that is done previously. E.g. in MS Office installer, if you cancel the installation midway through, it will "rewind" the progress bar while cleaning up.

    6. Re:Can't Go Backwards by Z00L00K · · Score: 0

      Or one for each sub-task if you need one.

      But often the progress bar is thrown in and never tested to see if it's reasonable. I would say that what would be useful for the user is to provide more than just a progress bar - also provide information about which task that's executed.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    7. Re:Can't Go Backwards by Agent+ME · · Score: 5, Insightful

      What? Why the fuck would a progress bar go backwards? A progress bar shouldn't be pegged to the fraction of time of the job done. It should be pegged to the actual progress. If progress starts going slower, then the progress bar should start moving slower.

    8. Re:Can't Go Backwards by The+Snowman · · Score: 5, Funny

      Yes and it's those--as well as those that dance left and right for no damn reason--that really piss me off.

      You mean like this one? http://xkcd.com/612/.

      --
      24 beers in a case, 24 hours in a day. Coincidence? I think not!
    9. Re: Can't Go Backwards by LesFerg · · Score: 5, Insightful

      Realistically a large IO bound task is something you hand off to low-end process to get it done as fast as ppssible. Would you over-ride the O/S to transfer that 10gigs in 100 meg blocks and report each bit back to your high level UI so that th progress bar is accurate?

      --
      If I had a DeLorean... I would probably only drive it from time to time.
    10. Re:Can't Go Backwards by Anonymous Coward · · Score: 1

      Awful

    11. Re:Can't Go Backwards by Anonymous Coward · · Score: 1

      Does the "UI Hall of Shame" still exist?

    12. Re:Can't Go Backwards by _Shad0w_ · · Score: 2

      Last time I did that at work I got told to reduce it back to one.

      --

      Yeah, I had a sig once; I got bored of it.

    13. Re: Can't Go Backwards by Anonymous Coward · · Score: 0

      Sure http://msdn.microsoft.com/en-us/library/windows/desktop/aa363852%28v=vs.85%29.aspx CopyFileEx is pretty bad ass and super high resolution

    14. Re:Can't Go Backwards by Jane+Q.+Public · · Score: 1

      "Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar."

      But that's not what this person's app did. Whoever wrote their progress bar did it wrong.

      The problem with many of these progress indicators is that they only calculate the estimated time once. Then if the app gets stuck or slows down at, say, 75%, it might say "about one minute" for 10 minutes. But that should never happen.

      Instead, estimated remaining time -- when it is appropriate, which is a lot less often than it is actually used -- should be updated right along with the % progress. So yeah, as you say, if done properly, it can start out at 5 minutes and creep up to 20 or whatever. But it should not just freeze at some time and stay there a while. If it's going to do that, the app should probably not be trying to estimate remaining time at all.

    15. Re: Can't Go Backwards by Yaur · · Score: 3, Informative

      Yes. You aren't doing the IO on the UI thread and posting a message to update the UI, even once per second, will slow down the transfer by an insignificant amount of time and improve the UX dramatically.

    16. Re: Can't Go Backwards by smellotron · · Score: 2

      Would you over-ride the O/S to transfer that 10gigs in 100 meg blocks and report each bit back to your high level UI so that th progress bar is accurate?

      If the transfer is going to take more than a few hundred milliseconds, yes. The extra latency due to such "interruptbs" is small enough to justify the improvement in responsiveness.

    17. Re:Can't Go Backwards by asliarun · · Score: 5, Insightful

      To put it another way, it is impossible to make an accurate progress bar because it is impossible to predict the future. That's all.

      You can make assumptions, extrapolation, use past performance,etc but you are never going to get it accurate.

      This is like getting pissed at your GPS because it told you you will reach in 22 mins when it actually took you 35.

      It is either a dumbass expectation from the user or a dumbass design decision. You might have as well used an hourglass so the user could spend their time shaking it trying to get the sand to fall faster.

    18. Re:Can't Go Backwards by ibennetch · · Score: 5, Funny

      I think I prefer going backwards to what I once saw on (what I remember as) a Microsoft Office installation, probably 15 years ago. The progress bar ever so slowly crept upwards...98, 99, 100% done...then 101, and so on. It finally locked up somewhere after 140%.

    19. Re: Can't Go Backwards by Impy+the+Impiuos+Imp · · Score: 5, Interesting

      We used an industrial strength version of cp in one product, which used DMA for much faster copy, and would write out status every 20 Mb that it could resume from in power loss, and would also, via shared memory variable, publish progress in bytes, all so you could have an accurate progress indicator.

      Some people do know what they are doing.

      --
      (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
    20. Re:Can't Go Backwards by retchdog · · Score: 1

      many of them should ``go backwards'' all the time, as would any half-way honest estimate without an oracle; the installer found a special case and has to run another code branch to replace something that's already been done; download drivers; etc.

      it's just that the ui element won't update for it. no progress bar shows ``actual progress''; they all show percentage to completion. these are slightly different.

      --
      "They were pure niggers." – Noam Chomsky
    21. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I have seen the Windows CHKDSK percentage indicator suddenly decrease on many occasions.

      I have also seen progress indicators that hit 100% and then start over. No it's not because it was displaying a progress for each file.

    22. Re:Can't Go Backwards by solidraven · · Score: 1

      Tell that to Microsoft... Ever installed the Windows XP service packs?

    23. Re:Can't Go Backwards by Arancaytar · · Score: 4, Insightful

      Yeah, but then users complain because the bar is weirdly scaled, like 95% taking up a second and the remaining 5% an hour. You can try to profile it, but the actual time is determined by the local hardware after all: Processor speed, number of cores (which affects only some operations), network speed, free memory - there's no way to predict how much of the time will be spend on each task.

      (And if the progress bar isn't an indicator of execution time at all, then the arbitrary completion percentages assigned by the developer mean little. In that case, you may as well go back to hourglasses and spinning beachballs...)

    24. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I don't see how that solves anything, what if the described scenario happens to a sub process?

    25. Re:Can't Go Backwards by JonJ · · Score: 4, Funny
      --
      -- Linux user #369862
    26. Re:Can't Go Backwards by Anonymous Coward · · Score: 1

      This assumes that you have anywhere close to an estimate of how much work is required -- not even time, just the number of work items. A common example is copying a directory tree, where the program doesn't know how many files are involved until it has traversed the entire tree. Pre-traversing the tree would make the copy operation take longer, so it uncovers work items as it goes. Problem is, a copy operation that looks simple at four top-level folders suddenly becomes ginormous with a zillion sub-folders beneath it, which isn't revealed until the progress bar has already had to tick a bit.

    27. Re:Can't Go Backwards by Anonymous Coward · · Score: 1

      The original is gone, but here's a mirror:

      http://interfacehallofshame.eu/www.iarchitect.com/shame.htm

    28. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Exactly, progress bars are used to indicate progress and can often be replaced with a % value to reduce GUI space. Those applications that have an accurate time representation of when something is done presents this as "time left".

      If you feel that a progress bar is misrepresenting something then it could be the application that doesn't consider just opening a file as progress.

    29. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar.

      That's insane. If your installer has to download and install sections A, B, C and D to complete installation, then your bar should not be reporting that sections A, B and C are downloaded or installed unless they actually are. Download speed slowdown shouldn't affect it. If your installer removes section C because section D is delayed, you should be dragged out into the street and heckled to death.

      If your program lies to the user, you have only yourself to blame for a lack of trust.

    30. Re: Can't Go Backwards by Anonymous Coward · · Score: 0

      ...Would you over-ride the O/S to transfer that 10gigs in 100 meg blocks and report each bit back to your high level UI so that th progress bar is accurate?

      No, the OS should have a callback / hook / something useful to report I/O progress, etc., back to an app.

      An OSes job, among other things, is to provide a good user experience, which IMHO should include useful timing information of such functions and events.

    31. Re:Can't Go Backwards by fnj · · Score: 5, Insightful

      Suppose a bar can never back up. Then its speed may vary enormously, making the visual how-done-am-I representation valueless.

      It is HARD.

      Define "fraction of job time done" numerically. Suppose you have to download 100 packages and then install them. How many % of the total should the download represent? Does the guy have cable or dialup? And how many % does the install represent? Does he have a slow USB hard drive or a ridiculously fast SSD? What if the first file downloads at 1 MBps and the 17th one at 139 Bps? I've seen that happen (varying server load, per-file mirrors). Which installs faster, a package containing 250 files totaling 10 MB, or a package containing 10 files totaling 100 MB - hint; it depends.

      Generally, might as well show a rotating propeller or a cylon helmet moving dot, neither of which has a beginning or an end. Just an indication that something is going on, and the system doesn't look frozen. Maybe a couple of numbers under it showing # files done out of # total files.

    32. Re:Can't Go Backwards by julesh · · Score: 1

      "Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar."

      But that's not what this person's app did. Whoever wrote their progress bar did it wrong.

      The problem with many of these progress indicators is that they only calculate the estimated time once. Then if the app gets stuck or slows down at, say, 75%, it might say "about one minute" for 10 minutes. But that should never happen.

      Instead, estimated remaining time -- when it is appropriate, which is a lot less often than it is actually used -- should be updated right along with the % progress. So yeah, as you say, if done properly, it can start out at 5 minutes and creep up to 20 or whatever. But it should not just freeze at some time and stay there a while. If it's going to do that, the app should probably not be trying to estimate remaining time at all.

      The problem with this is that the application can only recalculate estimated remaining time when it has new information. It doesn't get new information in the middle of performing an operation, only when operations are complete. Sure, some operations (e.g. copying a file) provide meaningful progress data at very regular intervals, but others don't. So what probably happens in the cases you're talking about it is that some indivisible operation that is supposed to take only a short time actually ends up taking a long time (e.g. opening a file on a CDROM should only take a few 10s of milliseconds, but if the system hits a bad block it will repeatedly spin the disc down, back up, and retry, an operation that can take over a minute), and therefore the progress indicator is suddenly wrong *but the system has no way to know it until the operation completes*.

    33. Re:Can't Go Backwards by KitFox · · Score: 2

      I know that NSIS Installers at the very least base the default progress bar internally* on the line number through the length of the entire set of installation process code. This makes it quite fun when you have long position jumps in the code or repeating loops that have enough code to cover a good chunk of progress. I would expect that several other installers may use the same base internal calculation of the progress bar.

      *The progress bar can also be controlled manually within the code for the coder to be nice or exceptionally evil as they see fit.

      --

      @Whee

    34. Re:Can't Go Backwards by Pascal+Sartoretti · · Score: 1

      You can make assumptions, extrapolation, use past performance,etc

      And even then : do you extrapolate on the past performance since the beginning of the operation, or the current performance ? As soon as performance varies during the process, any extrapolation might be wrong...

    35. Re:Can't Go Backwards by rioki · · Score: 5, Insightful

      What I like is the Step X of Y types of progress indicators. Sure step 5 of 12 might take way longer then the rest but at least it is honest. It also helps to tell the user what it is currently doing. You know that downloading drivers may take a while when the internet is slow (or down).

    36. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      It's not insightful. In fact it is the reason progress bars aren't accurate. In fact he is the reason progress bars aren't accurate. He bases his entire methodology on time. No two machines are the same, that is have the same processes running, etc.

      To properly implement a progress bar it must be based on actual results achieved whether it updating a database, copying files, etc. Time is irrelevant to the equation. And for god's sake please tell the user in a log file what is going on, so when it fails the user can figure out where it failed.

      If you really want it to be useful have it send an sms or email when it is complete or an error is encountered. It's not a failsafe itself but it's one more indicator, especially for large jobs and systems that are not manned.

    37. Re:Can't Go Backwards by Pino+Grigio · · Score: 1

      This is why I wouldn't do anything based on speed. I would have each % of that represent 1 package, then, a sub-label displaying the total downloaded, i.e. 1% (1024/4096).

    38. Re:Can't Go Backwards by gnasher719 · · Score: 2

      To put it another way, it is impossible to make an accurate progress bar because it is impossible to predict the future. That's all.

      A lot is just stupidity. When you copy lots of files on a hard drive, the time is proportional to some constant times total file size, plus some other constant times number of files. Lots of small files take longer than their size indicates. Most progress bars don't take that into account, so you make huge progress through a dozen 20 MB files, and then slow down through a lot of tiny files. Accounting for that alone would be a huge improvement.

    39. Re:Can't Go Backwards by Forty+Two+Tenfold · · Score: 1

      What? Why the fuck would a progress bar go backwards?

      Suppose you want to visualize the how reasonable the citizens of the USA are.

      --
      Upward mobility is a slippery slope - the higher you climb the more you show your ass.
    40. Re:Can't Go Backwards by CAIMLAS · · Score: 2

      Sorry, that's the wrong approach.

      The progress bar should not advance unless something has been completed. If you have it go back or have to rescale, then you should be using a different mechanism for determining completion.

      A more ideal way to do it would be with multiple process bars: a 'step' bar, and an overall progress bar. Step bars would be solely progressively linear. The progress bar would measure the steps. There are some tools which do this. The key point, I think, is that the overall progress bar should not move until both the 20 minute step and the determination telling us we've got to go another 20 minutes is completed - and the progress bar should be initially scaled for the full maximum period of time. If it's got to race to the end, so be it; it's better than being stuck at 99% for half an hour.

      You've got to keep in mind that a progress bar should serve only a couple of purposes:
      * indicate actual progress
      * indicate the process in question has not failed and is continuing

      In the quest to abstract data and provide the user with a 'pretty interface', hiding what's actually going on, #2 is often the only information being conveyed on any process which takes more than one step, takes a long time, or may be impacted by other tasks.

      Overall, I'd say most progress bars suck primarily because the developers are lazy and don't want to take the time to actually quantify how long a given task will take or how much work is involved in said step. These are not tasks programmers seem to be good at; they're better suited to people who actually understand how their systems are working (and sadly, most programmers don't seem to understand that anymore).

      --
      ~/ssh slashdot.org ssh: connect to host slashdot.org port 22: too many beers
    41. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      http://windows.microsoft.com/en-US/windows-8/meet
      http://unity.ubuntu.com/

    42. Re:Can't Go Backwards by alter-memo · · Score: 1

      And that is why the progress bar should represent progress of the task, not remaining time. The correct way is to show progress in the bar (as in percent of the total task), and a text label with the estimated time to completion below. The label can change in any direction. The progress bar (if the progress is measured properly) can only go forward.

    43. Re:Can't Go Backwards by beelsebob · · Score: 3, Insightful

      No, no it isn't. A second progress bar flickering up and down all the time tells the user nothing. Just put the one general progress bar there, and you're done.

    44. Re:Can't Go Backwards by Jane+Q.+Public · · Score: 1

      "So what probably happens in the cases you're talking about it is that some indivisible operation that is supposed to take only a short time actually ends up taking a long time (e.g. opening a file on a CDROM should only take a few 10s of milliseconds, but if the system hits a bad block it will repeatedly spin the disc down, back up, and retry, an operation that can take over a minute), and therefore the progress indicator is suddenly wrong *but the system has no way to know it until the operation completes"

      It would be nice if that were true, but it's not. At least in some cases.

      I have seen many situations in which the application has plenty of opportunity to update progress, but doesn't change the estimated time if things slow down. That's just plain doing it wrong.

    45. Re:Can't Go Backwards by fnj · · Score: 1

      It has much to recommend it.

    46. Re:Can't Go Backwards by jonadab · · Score: 1

      > Generally, might as well show a rotating propeller
      > or a cylon helmet moving dot, neither of which
      > has a beginning or an end.

      The problem with that is, the user can't necessarily tell if the whole thing hangs and altogether stops making any actual progress. Which is the whole point of a progress bar in the first place. This is one reason some progress-bar dialogs have a "show details" button that (if clicked) provides a breakdown of what specific subtask is being performed at any given moment.

      --
      Cut that out, or I will ship you to Norilsk in a box.
    47. Re:Can't Go Backwards by Rhaban · · Score: 1

      If your progress bar shows progress for several different tasks, it might be a good idea to divide it into several progress bars showing the progress for each part.
      Say you must download some data file, then import locally (it could be anything: an update for a game, a feed for an rss reader, etc...). you could have one progress bar, but you have no way of knowing if the time taken by the two subtasks is similar, or if downloading will take 95% of time, or if downloading will be almost instant...

      So you show two bars :
      Downloading data... 100% complete
      Importing Data... 47%

      You will never have bars that never change filling rate, because downloading rate or available processor resources or quantities of other things may vary, but you can limit it by not using only one bar to show completion of entirely different tasks.

    48. Re:Can't Go Backwards by allo · · Score: 2

      they should become longer instead of moving backwards.

    49. Re:Can't Go Backwards by azalin · · Score: 1

      Nice try, but what happens if the packages vary a lot in size and complexity? Let's have 10 packages in an update queue. Packages 1 to 9 are small and simple (like new icons, new hardware data sets, fixing spelling errors, new language files etc) and number 10 is either really big or requires a lot of work to install (large software suite, database conversion, file indexing, compiling etc).
      90% pass like a breeze, while the last 10% takes forever. Not even considering what happens if other unrelated processes slowing things down.

    50. Re:Can't Go Backwards by AK+Marc · · Score: 2

      Then you get the progress bar from Office Space, which was making fun of the progress bars that complete, then restart.

    51. Re:Can't Go Backwards by psmears · · Score: 1

      And that is why the progress bar should represent progress of the task, not remaining time. The correct way is to show progress in the bar (as in percent of the total task), and a text label with the estimated time to completion below. The label can change in any direction. The progress bar (if the progress is measured properly) can only go forward.

      The trouble is that, very often, the amount of work to do is not known up front - for example, when copying a large directory hierarchy, there's no way to know how many files will be in the next subdirectory traversed (without scanning the directories beforehand, which may add substantially to the time taken). As more information is discovered (say, reading a new subdirectory and discovering that there are a lot more files than previously estimated), the best estimate of the percentage of the task that is complete has genuinely gone down. The only options available are to lie about the estimate (displaying it as larger than is now believed to be true), or to make the progress bar go backwards (clearly undesirable for several reasons).

    52. Re:Can't Go Backwards by thegarbz · · Score: 2

      I'd be happy with the bar just to indicate some form of total progress, quite unlike the latest trend in things like the Windows 7 installer. Why give a progress bar at all if it gets to the end and starts again at zero for some mythical next stage of the install progress?

    53. Re:Can't Go Backwards by thegarbz · · Score: 1

      Well they fixed that. On overflow it resets to zero and starts again.

    54. Re:Can't Go Backwards by thegarbz · · Score: 1

      To put it another way, it is impossible to make an accurate progress bar because it is impossible to predict the future. That's all.

      That depends entirely on how you define progress. If you can't predict time, then don't define progress based on time, instead define progress based on total work completed. 1 out of 100 files copied is far more useful than a progress bar that jumps quickly to 99% and then has another 1000 files left to go ala Windows search.

    55. Re:Can't Go Backwards by jabberw0k · · Score: 2

      Except that when you install package 513, you discover that you need 357 additional new support packages for it. The total number of packages changes too.

    56. Re:Can't Go Backwards by iapetus · · Score: 2

      All these constants go out of the window if anything else starts accessing the drive as well, of course, and they're actually variable based on file system and a variety of other things.

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    57. Re:Can't Go Backwards by oodaloop · · Score: 1

      I think that software developer was told to give 110% too many times.

      --
      Tic-Tac-Toe, Global Thermonuclear War, and relationships all have the same winning move.
    58. Re:Can't Go Backwards by telchine · · Score: 5, Funny

      Sure step 5 of 12 might take way longer then the rest but at least it is honest. It also helps to tell the user what it is currently doing.

      Reticulating splines?

    59. Re:Can't Go Backwards by dargaud · · Score: 1

      it is impossible to make an accurate progress bar because it is impossible to predict the future

      This.

      My method for implementing a progress bar is the following: have a function that does a very rough estimate (the more accurate the better, but it's often impossible and in all cases it should be quick). Take this as a starting estimate. Start counting (and showing) the seconds down. When you do a new estimate, if it's lower than the previous one, use the new one. If it's longer, start _increasing_ the seconds to your ETA. This way the only big jumps are optimistic (30s, 29s, 15s, 14s...) and when things get hung you normally see (30s, 31s, 32s...).

      --
      Non-Linux Penguins ?
    60. Re:Can't Go Backwards by hattig · · Score: 4, Interesting

      I hate those, they're totally pointless. "I'm possibly doing something, I don't know how much of it I've done, and I don't know when it will end, and I won't show you when I started".

      To be honest, progress bars shouldn't be used for indeterminate timescales. If you can guess a time remaining, then say that, as this can be changed, and it is visually more useful than a context-less progress bar that can go in reverse.

    61. Re:Can't Go Backwards by The+Mysterious+Dr.+X · · Score: 1

      Even better would be something like a "63 out of 150 MB copied" meter that was 42% filled. I would think total file size might be more accurate than number of files.

      I think that's kind of what the OP was wondering: is there some simple reason (like counting number of files-- a fairly arbitrary number-- instead of number of kilobytes) why are they so inaccurate? How hard would it be to make a list of the procedures to be executed, determine the amount of work to be done, and have the meter reflect how much of that work had been completed? I can understand the "estimated time remaining" varying greatly when downloading over a questionable internet connection, but surely disk write speeds could be estimated relatively accurately, right? And how much could "unexpectedly" happen? When Step 1 of the installation is "Preparing to install," wouldn't the application know already what it planned to do? Or have we actually progressed to the point of our scripts having whims?

    62. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Except that when you install package 513, you discover that you need 357 additional new support packages for it.

      This is why I wouldn't do anything based on count. I would have each % of that represent 1% of time.

    63. Re:Can't Go Backwards by Jarik+C-Bol · · Score: 1

      I agree, the main thing that makes progress bars frustrating, is that most of them *try* to estimate the time. "% complete" or "X of Y tasks done" takes most of the guessing away, and gives the user a better idea how long things might take.

      --
      I've decided to Diversify my Holdings. I've divided my cash between my left and right pockets, instead of all in one.
    64. Re:Can't Go Backwards by Anonymous Coward · · Score: 2, Insightful

      Define "fraction of job time done" numerically. Suppose you have to download 100 packages and then install them. How many % of the total should the download represent? Does the guy have cable or dialup? And how many % does the install represent? Does he have a slow USB hard drive or a ridiculously fast SSD? What if the first file downloads at 1 MBps and the 17th one at 139 Bps? I've seen that happen (varying server load, per-file mirrors). Which installs faster, a package containing 250 files totaling 10 MB, or a package containing 10 files totaling 100 MB - hint; it depends.

      I think two things are being conflated:
      * amount of work done, and left to do
      * time to do that work

      The "percentage done" (and graphical bar) should represent the amount of work, as measured by the number of bits copied (or installed). The estimated time is calculated (in a separate thread?) depending on the rate at which the work is progressing.

      Once bits are copied, installed, or downloaded successfully move the bar forward proportionally to the total amount you're going to move. As each package/file is done, check the start and stop timestamps and do a calculation.

    65. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      oh my - this discussion is typical for so called geeks - each one seeing the perfect solution that can be directly generalized and then forcibly pushed into the throats of us all willing or not so that we can unhappily use the 'best' solution forever. Has this ever occurred to you that other people may have different views of what is and not useful, beautiful, effective etc. ? There are usually some things on which we may or even must agree. They depend hugely on the context i.e. for some people certain solutions are best and for others other because context is different.Not looking further then the end of your nose is typical esp. of US society but generally widespread all over internet communicating societies - why the hell should I have postal service when I only use UPS and my mobile (penis extending) 'phone' ? Why do we need national health service - I am young and healthy so why should I pay? Why do we need coding standards (this usually translates into: why do we need coding standards other than mine)? Only my view is correct, only my needs are important and only my solutions are good enough.

      BTW amount of work that you may need to do changes or is difficult to estimate and thus proportion of job done is changing too over time but not always in one direction. Maybe sometimes we need different bars for different purposes even if one action is executed - maybe we need open end bars that go over to next line together with downloaded bytes. So yes in some situations I can imagine the bar going backwards. I can imagine some people find it useful even if I do not.

    66. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      any extrapolation might be wrong

      Any extrapolation is by definition wrong. The trick is to always make it the least wrong at any point in time.

      The extrapolation must be regularly updated based on the total work to be done, the parts of the work already done, the last part of the work done and the performance of the current part being done.

      Adjust any estimates at least once per second and update the progress indicator(s) accordingly.

      Better than that is just not possible.

    67. Re:Can't Go Backwards by TheCarp · · Score: 1

      No, then you get a list of completed tasks, each at or moving towards 100%.

      It also means that if it stops for 15 hours, and you are crafting your specially worded bitch to the developers,
      that you can more specifically report your problem than "the install is stuck at 20%".

      Maybe 20% has some definition in the code that the developers can easily index and find (lol, as if)
      but you can send them something that shows.... downloading is complete, stages Xand Y completed, and its
      stick somewhere in Z. That may have just saved a few hours of troubleshooting...which may be the difference between getting the problem fixed and that and any other people with that issue using the program or not.

      Or if you are selling proprietary software, maybe it means your support staff spend a few more hours playing WoW and a few less asking your customers repetitve questions.

      A number of things already do this, including text based linux installers, since at least the mid 90s. I have spent
      many hours babysitting kickstarting linux boxes, with the two progress indicators...one for the overall process, one for the current package being installed. Wildly inaccurate of course, but, it never mattered, because you could see what it was doing, and what it was blocking on, and it changed frequently enough to let you know it was succeeding at individual tasks and not just failing and spinning.

      --
      "I opened my eyes, and everything went dark again"
    68. Re:Can't Go Backwards by chill · · Score: 2

      No. You're wrong.

      This is a solved problem that was done, IMHO, good enough back in the mid-1980s on AmigaDOS.

      The AmigaDOS progress bar was actually two. The top one was the entire task - like installing the application. The bottom one was the individual action, like copying a file or updating a config.

      The were separated and there was a line of text over the lower bar telling you exactly what the current specific task was. Over the top bar was a line of text with a fraction showing you the number of total sub-tasks and the number completed.

      When the top bar filled the job was done. None of this start-over crap.

      It was informative, it was non-frustrating, it was good.

      --
      Learning HOW to think is more important than learning WHAT to think.
    69. Re:Can't Go Backwards by robthebloke · · Score: 1

      Technically speaking, it's not the progress that's going backwards, it's just that you're adding more tasks to the right of the bar (thereby making longer, and making the progress appear to have gone backwards).

    70. Re:Can't Go Backwards by msauve · · Score: 1

      That's exactly what happens - you add to the "uncompleted" part of the bar, then scale the whole thing so the overall size is unchanged. Net result: the "completed" part seems to get smaller.

      --
      "National Security is the chief cause of national insecurity." - Celine's First Law
    71. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      What I like is the Step X of Y types of progress indicators. Sure step 5 of 12 might take way longer then the rest but at least it is honest. It also helps to tell the user what it is currently doing. You know that downloading drivers may take a while when the Internet is slow (or down).

      Install an HP printer for the best example of this. Breaks down the install in steps, usually 3-5, and in each step it shows the name of the current file being installed as well as the size of that file.

    72. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Duh. 1% = 1 package downloaded and installed. Thus single download = 0.5% and single installation = 0.5%.

      The bar shows graphically how big a set of tasks are left, not the time.
      The bar can show an ETA based on the elapsed time and current speed.

      That's all there is to it. Anything else is just not going to work.

    73. Re:Can't Go Backwards by gnasher719 · · Score: 0

      All these constants go out of the window if anything else starts accessing the drive as well, of course, and they're actually variable based on file system and a variety of other things.

      What a totally defeatist attitude. Here's how it works currently: There are x MB to copy. So far, y MB have been copied in z seconds. We estimate the number of seconds per MB = z / y, and estimate the time we need as x * (z / y). That's repeated during the copying. Doesn't matter if someone else accesses the drive, doesn't matter how fast or slow the drive is.

      Now here comes the ingenious change: There are n files of x MB to copy. So far, m files with y MB have been copied within z seconds. We assume that copying one file has an overhead equivalent to copying k bytes. Initially we assume k = 0 since we know nothing else, but as progress is made and files of different sizes are copied, we can find which k matches the available data best. Then we go through the original algorithm, but replacing x with x + kn, and y with y + km. Easy peasy if your IQ is just slightly above average. Your's apparently isn't.

    74. Re:Can't Go Backwards by The+MAZZTer · · Score: 1

      If some Windows Installers encounter an error they will "rollback" their progress... and the bar will go backwards when this happens.

    75. Re:Can't Go Backwards by BasilBrush · · Score: 1

      That's ugly and meaningless for the user. All it does is make the developer feel OK that he's progressing some sort of progress bar when he didn't know how big the total task was when he started.

      What is the problem you're trying to solve here? Expressed in user needs?

      1) To reassure them something is happening, and the long running task hasn't frozen.
      2) To give them some idea of how long till the task finishes.

      Your solution solves part 1. But then so does a spinner.
      It does not do any better at part 2 than a single progress bar does.

      A single progress bar is fine when the total size of the task is known in advance, and it's steps are reasonably similar in size, such that the scale of the progress bar is fixed, the bar always advances forwards, and it advances reasonably often.

      If that can't be managed because the size of the task isn't known in advance, and a progress bar would sometimes go backwards, then a better solution is an ETA. People know what an ETA means for a journey, and are aware that the ETA can get bigger if unexpected hold ups are experienced.

      Where estimating time is beyond the developers ability, the best that can be done is an "X steps of Y" display, where the Y can increase.

    76. Re:Can't Go Backwards by BasilBrush · · Score: 1

      You're lucky to have someone at work to let you know when you made a bad UI decision.

    77. Re:Can't Go Backwards by BasilBrush · · Score: 1

      No he isn't wrong. Just because the Amiga did something does not mean it's a good UI.

      When the top bar filled the job was done.

      That's the only part of the UI that is significant for the user. The rest is clutter. As a geek you might be interested in the fact that the system is on the step "discombobulating splines", and has done 34% of that sub task. A real user isn't. (S)he just wan't to know how long till the entire task will be done.

      If a progress bar that only ever moves forward, and does so reasonably often is impossible, because the size of the complete task is not known in advance, then an ETA display is better. Get rid of the progress bar.

    78. Re:Can't Go Backwards by PlusFiveTroll · · Score: 2

      Install an HP printer for the best example of this. Breaks down the install in steps, usually 3-5, and in each step it shows the name of the current file being installed as well as the size of that file.

      Too bad that HPs printer installers suck terribly. They find more reasons to fail, or just to grind and grind forever installing god knows what. I'm not really sure why their base printer drivers are over 100MB for some models. Other manufactures for models that perform similar functions will be 20-30MB.

    79. Re:Can't Go Backwards by Unknown1337 · · Score: 1

      I think you are confusing time measurement with progress measurement. The progress is still 25% complete whether it will take 5 minutes or 5 days to complete the other 75%. For example: when sending an e-mail, there are approx 4 steps. Write content, attach files, address e-mail recipient and send. While these steps will taking varying amounts of time (0 being a possible amount of time) for every e-mail, they still constitute 25% of your 'progress' in sending said e-mail.

    80. Re:Can't Go Backwards by dfm3 · · Score: 1

      You might have as well used an hourglass so the user could spend their time shaking it trying to get the sand to fall faster.

      I tried that once; it didn't work but I must have accidentally made the hourglass flip over, and I had to wait even longer!

    81. Re:Can't Go Backwards by SomePgmr · · Score: 1

      Some of these make sense. If you're downloading a torrent the bar tells you percentage of bytes received from total, so it never regresses. What changes is the "estimated time remaining". And that's fine... conditions change (peer count, transfer speeds, etc).

      The file copy ones used to drive me nuts. If I'm moving files from one source to one destination, you'd think the transfer speeds would be pretty consistent and the time estimates pretty accurate. I can't pretend to know why they used to be so bad, but they do seem better now.

    82. Re:Can't Go Backwards by jsailor · · Score: 1

      You hit on the key with "Maybe a couple of numbers under it showing # files done out of # total files". I understand making a predictable progress bar is very difficult. What most people struggle with is knowing whether it's working or not. Using the file example, when downloading a disproportionately large file may stall the progress bar, but providing some indication that it is still receiving data provides the user with enough information to assume that the process is still working and not locked up.

    83. Re:Can't Go Backwards by chill · · Score: 1

      No. You're assuming all users are idiots and ALWAYS uninterested. Some want to know what is going on, especially if they have to ask someone for help. Others are just curious.

      The simple solution is make the dialog expandable to hide/show the lower bar.

      Due to the variable nature of the end-user system components, ETAs will end up with something like this: http://xkcd.com/612/

      --
      Learning HOW to think is more important than learning WHAT to think.
    84. Re: Can't Go Backwards by Anonymous Coward · · Score: 0

      Correct!

    85. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      That is a Sim City 2k joke kids

    86. Re: Can't Go Backwards by Rob+the+Bold · · Score: 1

      Realistically a large IO bound task is something you hand off to low-end process to get it done as fast as ppssible. Would you over-ride the O/S to transfer that 10gigs in 100 meg blocks and report each bit back to your high level UI so that th progress bar is accurate?

      Yes. If you don't update the user, he's eventually gonna reboot, assuming something locked up. Then you've got to do it all again, assuming that the reboot mess can be cleaned up.

      The goal of a progress bar -- from the programmer's perspective -- is to prevent the user from killing the task and/or rebooting the machine.

      --
      I am not a crackpot.
    87. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      What? Why the fuck would a progress bar go backwards? A progress bar shouldn't be pegged to the fraction of time of the job done. It should be pegged to the actual progress. If progress starts going slower, then the progress bar should start moving slower.

      Exactly, show the progress of the process as a moving bar, underneath it can be a time estimate in text and it can jump up and down depending on current conditions. It would be actually useful.

    88. Re:Can't Go Backwards by Pichu0102 · · Score: 1

      Why not change the color of the bar to yellow when something is taking longer than expected (with perhaps some additional effect for the color blind)?

    89. Re:Can't Go Backwards by BlackSnake112 · · Score: 1

      You mean like the vista progress bar did? Everyone heated that one.

      It will take 10 minute no 5 minutes no 34567 days no 8 hours no 1000 years no 8 minutes to finish.

    90. Re:Can't Go Backwards by PlusFiveTroll · · Score: 1

      >We assume that copying one file has an overhead equivalent to copying k bytes
      Unfortunately your assessment doesn't take mechanical limitations, memory caches, and filesystem layout in consideration.

      You attempt to address that in your previous post, but you seem to miss the point where you think bytes are equivalent.

      On spinning hard disks writing contiguous files is a pretty fast operation. If the disk doesn't have other tasks occurring you commonly see ranges between 20MBps and 150MBps. This all goes to crap when you start writing and changing small files. You then are limited by IOPS of your device. Seek times become the limiting factor, writing 1MB of random data suddenly takes longer then 50MB of streaming data. Your seek time per file can very greatly depending if the file gets fragmented, or each file is written at differing locations on the hard drive. Installers "tend" to copy a bunch of larger data files first then apply configuration changes that follow the above pattern.

      An excellent demonstration of this is to take a fast hard drive that has a write speed of 120MBps and IOPS of about 130. Then take an SSD with write of around 80MBps and IOPS of 10,000. The hard drive will beat the SSD in bulk copy, when the small operations occur the SSD wins hands down.
       

    91. Re:Can't Go Backwards by Zaphod+The+42nd · · Score: 1

      You can try to profile it, but the actual time is determined by the local hardware after all: Processor speed, number of cores (which affects only some operations), network speed, free memory - there's no way to predict how much of the time will be spend on each task.

      But all of the hardware information is available to the OS. They should be able to track generic profiles of different hardware specs and the times it took them to complete, and then they could pick a similar result to your hardware directx config or whatever, and tell you its going to take about that long. Not hard or complicated at all. Hm.

      --
      GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
    92. Re:Can't Go Backwards by PlusFiveTroll · · Score: 1

      >but surely disk write speeds could be estimated relatively accurately, right?

      No.

      Lets say you are writing two files, both 1 GB in size. For the first file you have 1.1GB free of contiguous space, you'll be able to write it at the streaming speed of your hard drive (100MBps or more for a decent drive). Ok, that took just a few seconds, a few seconds more and we'll be done, right? Wrong. Now the OS has to find places to put fragments of the next 1GB file. You've moved problem domains streaming throughput to random IOPS. Now you are getting around 400KBps, over 200 times slower then before! Of course if you had an mostly empty SSD, you'd have seen no difference, but wait, your SSD is filling up, now erase cycles are messing things up. On top all that your A/V could decide to fire up and use 100% of the CPU and or disk in the meantime.

      So the answer is, unless your storage gives you an guaranteed minimum throughput/IOPS attempting to figure out how long something will take is very hard.

    93. Re:Can't Go Backwards by fuzzywig · · Score: 1

      Yup, bonus points to the progress bar during the startup of Spiceworks which contains many nonsensical processes, including reticulating splines.

    94. Re:Can't Go Backwards by quacking+duck · · Score: 2

      Yes and it's those--as well as those that dance left and right for no damn reason--that really piss me off.

      There's one worse: A single progress bar animation that seems like it's working normally, gets to the end.... and then *starts over* (not the entire process, just the progress bar).

      That's worse than useless, it's utterly misleading. Either code a proper progress bar, add a second progress bar to indicate overall progress (assuming the first bar keeps resetting for every sub-task), or use one of those "indeterminate" animations. The "dance left and right" bars are attempts at one, but visually make no sense. The "barber-pole" style animations that Macs started using over two decades ago are a decent implementation.

    95. Re:Can't Go Backwards by fuzzywig · · Score: 1
      But the time difference due to the size of file being copied varies massively according to the type of drive you are copying to (and from).

      An SSD has much less penalty for random reads and writes compared to a mechanical harddrive for example.

    96. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Yeah, but then users complain because the bar is weirdly scaled, like 95% taking up a second and the remaining 5% an hour.

      VMWare is notorious for exactly this.

    97. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      The problem is tying progress to duration. In your example, nothing should change. The task is still 25% complete. If you want to know how long it will take there should be a separate timer that says: Time Remaining (estimated): 2:33

    98. Re:Can't Go Backwards by Zaphod+The+42nd · · Score: 1

      No, its more like your GPS says 5 minutes, then an hour, then 5 minutes, then an hour, when you know both can't be right. Telling me 22 and taking 35 is pretty fair, especially if it revises its time to get closer to 35 as you go.

      There's no reason why it shouldn't attempt to do a quick inventory of all the processes necessary, the size of all files involved, and compare that to the general rate of copy/delete/whatever. Its the same thing your gps does, its averages your speed and calculates time, based on the total distance.

      Many current status bars (windows) just use the current file, and so if that one file is really big, it assumes they're all big, or if that one file is really small, it assumes they're all small, which gives it wildly off values. Other OS (OSX) do a full inventory of all files to be copied / installed first, so that the progress bar is far more accurate and doesn't spastically jump back and forth.

      But you could go even further, do like the GPS does, and keep a database of users and their past progress and times. They could record user install times based on the hardware, MS could just collect your DxDiag file and the time taken to install, and then when you go to install it just finds the nearest hardware profile and guesses that you're going to take about as long. Boom.

      --
      GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
    99. Re:Can't Go Backwards by Phasma+Felis · · Score: 1

      If an operation takes more than 10 times what it's supposed to, that is new information. The ticking of the system clock is new information, really. When a 1-second operation takes 10 seconds, admitting that you're lost and switching the estimate to "unknown" is less inaccurate/deceptive/an outright lie than sticking with "1 second remaining" for the next five minutes.

    100. Re:Can't Go Backwards by Quirkz · · Score: 2

      I saw a Mac OS 8 startup screen do something similar. It wasn't listed in percentages, but the startup screen had the empty box that the bar filled as it went. Then the filling color shot past the end of the bar and made it nearly to the edge of the screen before the whole box crashed.

    101. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      And then people wonder why it takes 2 minutes before an estimate is given because it has to figure all that information out, and even then it could be very wrong.

    102. Re:Can't Go Backwards by PhotoJim · · Score: 1

      And how do you define progress?

      Consider a simple file copy. You have 10,000 files to copy. They vary in size from a few bytes to a few gigabytes.

      Do you scale the progress bar on file count? If the files are randomly distributed that might be reasonably accurate, but if too many big files are toward the end of the copy, your scale will be far too optimistic at the start.

      Do you scale the progress bar to total bytes? If the files are randomly distributed that might be reasonably accurate, but if too many small files are toward the end of the copy, your scale will be far too optimistic at the start.

      Coming up with progress is really easy when you know precisely what you are measuring and can make reasonable inferences as to the performance to expect. But this simple file copy can be complex. Where are the files? Are they in a big compressed file, or sitting individually? Are they on a hard disk, an SSD, on a USB device (and is it 3.0, 2.0 or 1.1?), or a network connection (and how fast is the server, and how good is the network connection)? If you need to decompress, how fast is the CPU at this and how much idle time is there? How many cores does it have? This is a pretty simple installation and measuring progress is very difficult.

    103. Re:Can't Go Backwards by jddj · · Score: 1

      it _IS_ hard, but no reason it can't be done better.

      take "stuff to do" (steps, gigabytes, number of files to copy) and divide "stuff done" into it for "fraction complete".

      Put that "fraction complete" into a proportion with "time taken so far" as the known item and "total time" as the unknown.

      Apply some inertia or hysteresis to the "total time" so you don't have it rapidly jumping all over the place (like file copy dialog estimates seem to).

      This total time estimate relies only on knowing what _HAS_ happened at a given time, not on predicting what _MIGHT_ happen on a user's machine.

      Apply "fraction complete" to the length of the progress bar, and report the expected remaining time as text.

      The bar is for "progress", and mustn't go backward unless "progress" does so as well (maybe when you cancel an install? This is an edge case). The estimated time can vary as needed - but gee, maybe build some logic into the dialog to let the user know to bang on the side if it looks like something's hung.

      You could trend completion speed ("that part went fast, you're slowing down now") as a sparkline or other visual decoration (color map - green for fast, red for slow) to give the user more confidence that the dialog knows what's going on.

      Under NO circumstances should a site or app put up an animated gif in place of progress (because it shows only that the browser's still running, not that any completion is taking place). Think of how often this happens today. Tragic.

    104. Re:Can't Go Backwards by PhotoJim · · Score: 1

      Agreed. To me the real point of progress indication isn't to tell me how long it will take - it's to assure me that it's actually working and hasn't crashed or gotten stuck.

    105. Re:Can't Go Backwards by adisakp · · Score: 1

      I've seen some progress bars that do exactly that - go backwards.

      Almost as bad... multiple progress bars. Each subsection gets a progress bar so you see one bar after another after another... but there is nothing meaningful about overall time.

    106. Re:Can't Go Backwards by nayrbn · · Score: 1

      It's not strictly impossible to predict the future. We do it all the time in science--no one is surprised that we can determine ahead of time what the period of a pendulum is. The question here is why the science for how quickly a task on a computer is complete is so poor.

    107. Re:Can't Go Backwards by iapetus · · Score: 1

      I can tell the difference between a constant and a variable, and I know whether to put an apostrophe in 'yours'. If your IQ really is slightly above average, then the average is pretty woeful these days, and I'm glad mine isn't down there.

      Your 'easy peasy' solution isn't that easy peasy after all if you apply some thought to it, of course. Because you have to know what time period to calculate your k over, and as the overhead changes you're either going to end up with too long a period, in which case you'll still be calculating based on old data, or you're going to end up with too short a period in which case your progress bar will jerk around frantically as the load on the system varies.

      The real answer is the one that you dismissed; it's impossible to create an accurate progress bar representing the time taken by an operation, because things that change that time can (and will) happen during the operation, which will leave you in an inaccurate state for some part of the operation, or lead to counter-intuitive behaviour of the progress bar. Given that, the goal of the developer shouldn't be to create an accurate progress bar; it should be to create one that gives the impression of being accurate enough or change the way progress is represented so that it doesn't give the misleading impression that it's about providing an accurate time to completion.

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    108. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I'd say that a bar being able to go backwards is no different than one that's speed varies. both of them are just different visual representations of the same thing. Sure i won't trust a progress bar whose progress isn't a constant increase, but i also wouldn't trust a bar that can skip back to the beginning at any point. '99% done' doesn't mean jack to me if i know it can jump back to '1% done' at any time. both are equally terrible. i'd rather just see 'loading', at least there are no implied promises on how long it will take. if they don't tell me anything they can't be lying :D

    109. Re:Can't Go Backwards by sabt-pestnu · · Score: 1

      > Just an indication that something is going on whether it is or not, and the system doesn't look frozen.

      FTFY.

    110. Re:Can't Go Backwards by Anonymous Coward · · Score: 1

      If you base the progress bar on time, you are doing it wrong. The progress bar should be based on a definite metric. For example, when transferring a file, the progress bar should tell me about how much of the file it already has transferred. If the progress bar would go backwards that would mean part of the already transferred file has been lost and must be transferred again; I'd be very surprised if that happened.

    111. Re:Can't Go Backwards by ggeens · · Score: 1

      I've seen progress bars that go backwards, but it usually indicates reversal of something that is done previously.

      I've seen that once. The progress bar went up halfway, zipped back to the start and then went up again (this time to the end). There was another guy watching along with me. We both said "What the F--- did just happen?" at the same time.

      We were writing a DVD image. I had to make several other images, but this never happened again.

      --
      WWTTD?
    112. Re:Can't Go Backwards by morgauxo · · Score: 1

      That is only true if the progress is based on time. If it's based on data up/downloaded/processed/etc... then it would never have to go backwards. Of course, it could speed up/slow down which might also annoy the user who is really more interested in time then anything. I think the best answer to that is to also display the current speed which data is being processed. That way the user can see that yes, 5% took less time a minute ago then the current 5% but it's because something slowed down. It isn't in the software's control.

      I think a better solution is to display the progress bar based on % of data processed and have text which indicates that same percentage, current speed, and estimated remaining time. That estimated remaining time would jump up and down but IF the user actually thinks about it they should be able to see the reason why by watching what the speed does.

      It seems to me that is what I remember browsers doing when they indicated download progress years ago. They probably removed this info, dumbed things down because of marketing.

    113. Re:Can't Go Backwards by jemenake · · Score: 1

      To put it another way, it is impossible to make an accurate progress bar because it is impossible to predict the future. That's all.

      This is true even for non-engineering, real-life stuff. For example, when you get up in the morning, start announcing what "percent" done you are toward your goal of leaving the house for work/play/etc. Sometimes, you'll be accurate. Other times, you'll notice that it's trash-day and you need to take the trash out... or that you need to throw the laundry into the washer... or take a phone call from your mom... or take the dog to the vet, and it will cause your "progress bar" to stop, indefinitely.

      Now, with things like copying/moving files, you *could* first go make a to-do list of all of the files and sizes that you need to copy, but, with large copy jobs, even *that* takes time... what do you do during *that*? No easy solution.

    114. Re:Can't Go Backwards by dead_user · · Score: 1

      I remember when the driver was just an nfo file. Sigh...

    115. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      The progress bar shouldn't update progress until progress has been made. Nothing unexpected should happen. That's called testing and error handling.

    116. Re:Can't Go Backwards by Quila · · Score: 1

      I do it exactly that way, but add a "time remaining" number that can go up or down.

    117. Re:Can't Go Backwards by DragonWriter · · Score: 1

      many of them should ``go backwards'' all the time, as would any half-way honest estimate without an oracle; the installer found a special case and has to run another code branch to replace something that's already been done; download drivers; etc.

      A progress bar should always measure a nondecreasing progress metric with a fixed endpoint, so it should never either go backwards or (as some other posts in this subthread suggest) get longer.

      Having to take a longer code path to reach a progress point on the main scenario means that you should have slower progress through that segment. If you need to explain the exceptional condition to the user, you should do that; winding the progress bar backwards or extending it really doesn't address that need. Overloading a UI element that does a good job at clearly communicating one type of information to try to communicate information that it is no good at communicating just produces confusion.

    118. Re:Can't Go Backwards by DragonWriter · · Score: 1

      Technically speaking, it's not the progress that's going backwards

      Technically speaking, that's that's exactly what the progress bar, which is a UI element, is doing, and it shouldn't be.

      it's just that you're adding more tasks to the right of the bar (thereby making longer, and making the progress appear to have gone backwards).

      If the actual UI element is not getting longer, you are not making the bar longer. You are making the numerical value that the UI library maps to the right end of the bar longer, causing, for the same numerical progress value, the progress bar displayed on the UI to actually go backwards (not "appear to have gone backwards".) This is bad design, and completely fails to understand the purpose of a progress bar. If taking an exceptional code path means you have more steps to get from Milestone A to Milestone B, that doesn't either move the current progress backwards or make "done" somewhere else other than where it was before, it means that there are more intermediate subdivisions between Milestone A and Milestone B and, assuming that each of those steps takes the same time as the fewer steps on the normal path between those milestones, progress between the fixed points representing each of those milestones on the progress bar should be slower. The bar still ought to move forward.

    119. Re:Can't Go Backwards by gnasher719 · · Score: 1

      Same defeatist attitude. There are people who would spend hours and hours arguing why something can't be done, instead of just doing it.

      For your comparison between HD and SSD: Yes, on an SSD the time to access a file is much smaller relative to the time for reading bytes, compared to a hard drive. That's why you measure it. You don't need to know the technology, just the numbers. I'll admit that the maths is slightly above kindergarten level, and apparently above slashdot level, but it's not really hard.

      If you managed to read the first file of 1MB after 10 milliseconds, and you read the second file of 0.5 MB after 7 milliseconds, how long will it take to read a third file of 2 MB? There are two stupid estimates that have been mentioned here again and again: 1. Based on the number of bytes - you read 1.5MB in 17ms, so 2MB take 22.67ms. 2. Based on the number of files - you read two files in 17ms, so the third file takes 8.5ms. Here is the mathematical bit: Assume that the overhead per file is the same as reading k bytes. We get the best match for the data if we assume 4ms overhead, and 6ms per MB, or k = 666,666 - we actually get a perfect match for the data so far. So we had 1.5MB data and 1.333MB of overhead in 17ms, we read 2MB data plus 0.667MB of overhead, and the calculation gives 16 ms. What are the bets that 16ms is a better prediction than either 8.5ms or 22.67ms? Especially since the 8.5ms estimate is less than the time for the 1MB file, and 22.67ms is more than twice the time for the 1MB file.

    120. Re:Can't Go Backwards by ArcadeNut · · Score: 3, Insightful

      I hate those, they're totally pointless. "I'm possibly doing something, I don't know how much of it I've done, and I don't know when it will end, and I won't show you when I started".

      To be honest, progress bars shouldn't be used for indeterminate timescales. If you can guess a time remaining, then say that, as this can be changed, and it is visually more useful than a context-less progress bar that can go in reverse.

      Well, they are not pointless. They let the user know "Something is happening, but I have no idea when it's going to be done.". If you don't do something like that, then the user thinks your app has locked up and they kill the application. It's called "User feedback".

      Now on to the original theme of the story....

      Progress bars shouldn't be based on time, they should be based on quantity of work. Typically when they do the marquee style of progress bar (where it just show animations, but no actual progress), it means the quantity is unknown. This happens in a lot of situations where the total number of steps to be processed is unknown due to the data, or the amount of time it would take to calculate the total number of items would take too long.

      Progress bars should also be a different subject then Time Estimates as they are not the same. I have 100 things to process, so my progress is between 1 and 100. How long that takes depends entirely upon what I am processing. If I'm processing Invoices say, then how long it takes depends a lot on what is involved with the invoice (line items, calculations, other look ups).

      Just because it took 10 seconds to process the last one doesn't mean it's going to take 10 seconds to process the next one. In order to determine how much time is left, what most people do is take the quantity left and multiply that by the average time it's taken so far. You could apply smoothing to the average (so it doesn't jump around a lot), but other then that, how else would you estimate the time? If the amount of time it takes to process items is fairly even, your estimate will be very accurate, if they are vastly different between items, then your estimate is going to jump all over the place and be wildly inaccurate.

      --
      Visit the Arcade Restoration Workshop @ http://www.arcaderestoration.com
    121. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      The original Internet Explorer would give a progress bar indicating how much progress had been made downloading all the components of a webpage. Funny thing was, you could have no live internet connection and it would still have made 25% progress in getting the webpage....

    122. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      It tells the user that something is being done. Yesterday I tried installing a compiler IDE and it gave no indication whether it was working or not.

      I waited 10 minutes the first time before giving up, about 20 minutes the second time and the third time I let it run the rest of the day (and went to work on something else) before deciding that something was broken. I looked at it with the Windows taskmgr, but couldn't tell anything from that; it allocated a good chunk of memory that slowly changed in size up and down. A flicker progress bar would at a minimum provide indication that something is being done.

      Also download progress bars "flicker" all of the time wrt the instantaneous (or short filter) download speed.

    123. Re:Can't Go Backwards by DragonWriter · · Score: 1

      The problem with this is that the application can only recalculate estimated remaining time when it has new information. It doesn't get new information in the middle of performing an operation, only when operations are complete.

      Incorrect. Assuming that you aren't writing a single-threaded application where the whole app is blocked on the operation, the application gets new information essentially continuously, as the total elapsed time of the current operation changes as fast as the system clock does. For a time estimate presented alongside a progress bar (which is a different thing than the progress bar itself), this can be useful information.

    124. Re:Can't Go Backwards by DragonWriter · · Score: 1

      To put it another way, it is impossible to make an accurate progress bar because it is impossible to predict the future.

      Time estimates predict the future, and face that problem. Progress bars report the past, and do not.

    125. Re:Can't Go Backwards by JustinOpinion · · Score: 1

      Predicting the future perfectly is impossible, but coming up with reasonable predictions is do-able. We do it all the time (from the mundane "I'll be there in 10 minutes" to the more general "science"). Throughout this thread I've seen all manner of explanations given for why it's hard. But I think the real explanation is not "it's hard" but rather "it's not worth it".

      Consider an analogy. One might say that building a backup application is impossible: files could disappear halfway through a backup, there could be multiple versions of a file, multiple copies of files could exist, network connection could be lost, etc. But none of this makes it impossible, it just means that one has to design solutions that take into account all of these factors (deduplication, versioning, error recovery, etc.). It's a solvable problem, and one that is solved (to varying extents) in existing backup software. We go to the effort because it's important that backup software work properly.

      Similarly for a progress bar. If we really wanted to, we could have an API where the OS monitors the computer's performance, and has ready-to-use metrics for "average disk copy speed" and "average download speed" and so on (even with stats on variation by type of task, time of day, temperature of CPU, etc.). Then when a progress-bar widget pops up, it polls this API, and multiplies a pre-computed task list (# of bytes to download, # files to copy, etc.), and comes up with an estimate. Then it monitors the actual progress, and continues to refine the estimate (averaging over appropriate timescales so as to ignore fluctutions). End result is that the time estimate for a progress bar would be quite accurate most of the time (and when it started getting it wrong, it would be an immediate hint that something went wrong). GPS navigation software is actually a good example of this: it appears to multiply miles travelled*speed limit along the route, add in some padding for usual delays (stop signs), and ends up with an estimate that is remarkably accurate. (Of course it can't account for complete unknowns, but that's fine.)

      But is it worth all that effort?

      My point is: it could be done. The reason it isn't done is because it's usually not worth it. Or at least, programmers don't think it's worth it. I would personally love to have accurate and useful progress bars in all applications. But, crappy progress bars are not the end of the world... and ultimately someone writing an application probably doesn't want to spend a lot of time refining a progress bar that users only see for 10 seconds every couple of weeks. It's not worth their time when there are so many other things that need fixing. And I would rather an application that is robust in terms of saving data but innacurate in estimating save time... rather than an application that knows exactly how long it will take to create a corrupted file on disk.

    126. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I did a progress bar that showed time elapsed and percent checked/copied for a something that restored backup information. I figured if I showed how much has been completed and how long it took then the user can guess how much time is left just as easily as I could.

    127. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      What? Why the fuck would a progress bar go backwards?

      Because we need some representation of what Congress has done for us.

    128. Re:Can't Go Backwards by Tharkkun · · Score: 1

      Suppose a bar can never back up. Then its speed may vary enormously, making the visual how-done-am-I representation valueless.

      It is HARD.

      Define "fraction of job time done" numerically. Suppose you have to download 100 packages and then install them. How many % of the total should the download represent? Does the guy have cable or dialup? And how many % does the install represent? Does he have a slow USB hard drive or a ridiculously fast SSD? What if the first file downloads at 1 MBps and the 17th one at 139 Bps? I've seen that happen (varying server load, per-file mirrors). Which installs faster, a package containing 250 files totaling 10 MB, or a package containing 10 files totaling 100 MB - hint; it depends.

      Generally, might as well show a rotating propeller or a cylon helmet moving dot, neither of which has a beginning or an end. Just an indication that something is going on, and the system doesn't look frozen. Maybe a couple of numbers under it showing # files done out of # total files.

      Wouldn't their time be better spent developing the product and or fixing bugs than writing a extremely dead accurate progress bar? I mean we install the product once, and never see it again.

    129. Re:Can't Go Backwards by Firethorn · · Score: 1

      But an SSD can actually be slower for sequential writes.

      Let's see, let's list the various items that can affect a 'progress bar' in a sort of worst case scenario -

      Optical media drive speed(and position)
      Hard drive speed - reading and writing. Remember, SSDs write slower than they read, often to the point that a high-speed HD can be faster writing than a cheap SSD; Oh, and is the user flogging the drive otherwise? What about antivirus mucking with the works?
      CPU - perhaps it's compiling/generating data programically - depending on the task, speed will vary depending on CPU make/model, frequency, and number of cores.
      Internet access speed - authentication, downloading files and updates. Do you have a T3, or are you on a satellite or even worse, dial-up?
      Options selected during install/load process
      Driver/support package installs - Does the program need the .Net or VB framework?
      Optimizations - I've seen some programs that run a system check to determine optimal display settings.

      The bottlenecks a user who's out in the boonies using a satellite for internet access but has a brand new $5k computer(let's say he got most of his money's worth) is going to be completely different than the guy sitting in a data center trying to load it on his 5 year old computer that was $400 brand new.

      My personal preference, I think, is the 2 stage progress bar - top is 'on task X of Y'. If Y has to increase because an earlier step happened to determine that more needs to be done; oh well, but that should be fairly rare - try to determine everything that needs to be done before you start work.

      Bottom bar is progress on the task. Of course, even that could be complicated if you're multi-threading the install - rather than waiting until you've downloaded 100% of everything before you install(or download-install-download-install), work on the completed downloads even as you download more. I think most users would prefer getting the install done faster than they would knowing how fast it's completing more accurately.

      In such a case you might have 3 bars - overall completion; download progress; individual install progress. If download doesn't move quickly enough to keep up with individual install - change the individual install bar to 'awaiting download' while it's paused.

      --
      I don't read AC A human right
    130. Re:Can't Go Backwards by firewrought · · Score: 1

      To be honest, progress bars shouldn't be used for indeterminate timescales.

      Um... the point, as I took it, of indeterminate progress bars is to show that the program is "busy" and hasn't crashed. In the past ~5 years this has been more or less universally replaced with the "spinning circle of arrows" animation, but the indeterminate progress bar is still useful for dialog boxes that need to express both determinate and indeterminate waits (e.g., because it would be awkward for layout and aesthetics to switch b/t a determinate progress bar and the spinning circle of arrows).

      Now granted: the longer the wait the more your design "owes" the user in terms of communicating progress, time remaining, etc.

      --
      -1, Too Many Layers Of Abstraction
    131. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Back in the early versions of Internet Explorer, my brothers and I often download files that would progress to around 25-50% completed and then went into negative percentages of progress, down to around -3000% completed. Sometimes it would go into negative progress before getting to 1%.

    132. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I had a progress bar on Acrobat Distiller go to 454% before I decided to force quit!

      (By that point the fans on the laptop were deafening and the it was almost too hot to touch. Thankfully it only happened once and the computer seemed to return to normal after this aberation)

    133. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Oh, yes. I hate those multi-file progress bars that are combined into a single bar. 0%, 50%, done, 0%, 10%, 50%, 80%, done, 0%, etc. Or they'll flash by so fast the bar is just a flicker with no actual indication that it will ever be complete.

      It particularly bothers me when it hits 100% and then hangs there, sometimes for longer than the entire preceding progress took.

    134. Re:Can't Go Backwards by _Shad0w_ · · Score: 2

      A lot of the time, buried away inside that 100MB archive, there is just a small little drive file and its attendant meta data. It just they like giving you a thousand pieces of crap on top of it that you don't really need.

      --

      Yeah, I had a sig once; I got bored of it.

    135. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      The Secret World's patcher download bar does the same thing. It even has a counter for the number of files, which just keeps on incrementing past the supposedly maximum number of files. The only way to stop it is to close the patcher and re-open it, but fortunately it retains the files and goes to 100% and begins installing the patch immediately instead of making you download the whole thing again.

    136. Re:Can't Go Backwards by BasilBrush · · Score: 1

      No. You're assuming all users are idiots and ALWAYS uninterested.

      No, I have a very realistic view of what users are like. And it doesn't involve the term "idiots" for those who aren't tech experts or enthusiasts. It's bad UI design to add clutter because some geeks might be interested on what's going on under the hood. That's designing for yourself and other programmers, not for users.

      The simple solution is make the dialog expandable to hide/show the lower bar.

      No, because you are still cluttering the UI unnecessarily. Good design is finding what you can reasonably remove, not hiding things you're too attached to as a programmer. See Vuze preferences for where that approach gets you.

      Due to the variable nature of the end-user system components, ETAs will end up with something like this: http://xkcd.com/612/

      Only if you're a lazy programmer (or not given the time to do it right by management.)

    137. Re:Can't Go Backwards by UnknownSoldier · · Score: 1

      Yeah but this isn't rocket science, just basic UI theory.

      Is the progress bar displaying an relative value (like time) or an absolute (like bytes).

      If you are coping bit it should show BOTH, that way the user knows they have 1000/8192 bytes copied, but an ETA of 9 seconds.

    138. Re:Can't Go Backwards by chill · · Score: 1

      See Vuze preferences for where that approach gets you.

      And see what Gnome has become for where your approach takes you.

      I was never an AmigaDOS programmer, just a user. I only appreciated the details. Not everyone wants just the bare-minimum information, especially if something doesn't go as expected. Whether or not they can do anything, and regardless if they ask anyone for assistance, just seeing a detail of "copying file foo..." can help alleviate their short-term frustration.

      --
      Learning HOW to think is more important than learning WHAT to think.
    139. Re:Can't Go Backwards by UnknownSoldier · · Score: 1

      > It is HARD.
      No it isn't. This isn't rocket science, just basic UI design.

      You are conflating absolute progress with relative time.

      > Maybe a couple of numbers under it showing # files done out of # total files.
      Correct. The total number is constant. The time it takes to install/copy is variable.

      The CORRECT solution is to show BOTH numbers so the user is not confused over which information the progress bar is displaying. Far too many programmers and designers don't seem to have a clue of understanding the difference of WHY you want to show both -- they are presenting different types of answers because they are answering different types of questions:

      * The absolute progress is never wrong but it doesn't convey _enough_ information "How long do I have to wait?"
      * The relative time progress bay can easily be wrong but it will never give a correct value of "What has just completed?" since it was never designed to answer that question - only "How much longer do I need to wait?"

      > Which installs faster, a package containing 250 files totaling 10 MB, or a package containing 10 files totaling 100 MB - hint; it depends.
      In the first case there would be a progress bar #/250, the second #/10. However, since each file could take anywhere from seconds to minutes to install a GOOD UI would show the user that the installer is doing _something_; an ETA is "good enough"

      A common fallacy is assuming that one or the other is all that is needed. That is incomplete.

    140. Re:Can't Go Backwards by UnknownSoldier · · Score: 1

      Someone please mod this AC up -- he understands the fundamental problem.

    141. Re:Can't Go Backwards by BasilBrush · · Score: 1

      And see what Gnome has become for where your approach takes you.

      I wouldn't know. I used to try Linux once per year to find out if it was ready for the prime time yet. Different distros each time. They all made me cringe at the amateur and inconsistent UIs. Eventually I gave up. It wasn't getting significantly better.

      Whether or not they can do anything, and regardless if they ask anyone for assistance, just seeing a detail of "copying file foo..." can help alleviate their short-term frustration.

      If the user initiated a user file copy operation then there's nothing wrong with displaying that message. It's an understandable affirmative message that reassures that the computer is doing what was asked of it.

      If however it's something like an installer, then there is no useful information conveyed by the message "Copying file: discombobulator.spn". It's useless clutter and shouldn't be there. Progress should be indicated only by things which are fully understandable by a typical user. Progress bars, spinners or ETAs for example.

    142. Re:Can't Go Backwards by Hobadee · · Score: 1

      Actually it's a SimCopter joke - Maxis just likes to re-use it's jokes.

      --
      ...Had this been an actual emergency, we would have fled in terror, and you would not have been informed.
    143. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      We'd be fine if our army didn't have to defend eurotrash while you spend all your money on the good life.

    144. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Geeks have discussions like this because they're very limited thinkers. Very little insightfulness. Very much incapable of seeing the world beyond their limited schooling and the assumptions gained from that. There is also this need to prove themselves using their intellect because they fall short in all other areas.

      I think it's because geeks live sheltered lives as children and then do the same as adults. Perhaps they didn't use enough LSD or smoke enough cannabis.

    145. Re: Can't Go Backwards by Anonymous Coward · · Score: 0

      Well, back in the day, DMA made sense. Nowadays a modern chip can bit-bang stuff faster than the typical DMA chip can handle it...

    146. Re:Can't Go Backwards by Pino+Grigio · · Score: 1

      Well this is clearly a problem with the package manager and the way things get installed. If there are no "progress hooks", there's little you can do. These things need to be included from the ground up I think.

    147. Re:Can't Go Backwards by dririan · · Score: 1

      Were the files over 2GB? I believe that was the IE bug wrt large files: downloading files over 2GB or 4GB (depending on the version of IE) would fail spectacularly including negative progress. It's even documented on kernel.org.

    148. Re:Can't Go Backwards by thegarbz · · Score: 1

      But that's an easy problem to solve and has been for a long time by monitoring throughput. All file copy dialogues have done this for years. This is quite different from the problem of Windows 7 search consistently rushing to the 90% point in seconds then taking minutes to actually complete the search, or the Windows 7 install progress indicator getting to the end and then starting again with some new stage of the installation without any indication of how many stages the installation actually has.

      This is not some random IOPS problem. This happens consistently regardless of how fragmented the drive is or how many thousands of files in the search scope. It's simply a broken design of a progress bar.

    149. Re:Can't Go Backwards by dririan · · Score: 1

      There's also a problem when you don't know exactly how much work needs performed. Let's say you're copying two files: foo (1KB) and baz (1GB). A naive implementation may set the progress bar to 50% when foo has been copied, assuming they are close to the same size. Thus, the progress bar would quickly jump to 50% and then slowly go up (assuming the remaining 50% are given accurately based on baz's size). This can be fixed by checking the size of all the files first, but that was merely an example of the "true amount of work unknown" problem.

    150. Re:Can't Go Backwards by ThurstonMoore · · Score: 1

      Exporting a pst is a great example.

    151. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      What? Why the fuck would a progress bar go backwards?

      So that congress can use it

    152. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      "A second progress bar flickering up and down all the time" does tell the user something: that the process is doing something, it hasn't suddenly frozen or dropped a connection or whatever. If that bar stops flickering for more than a few seconds, it's time to consider killing the process and starting over.

      That's valuable information.

    153. Re:Can't Go Backwards by The+Mysterious+Dr.+X · · Score: 1

      Yes! I saw this just yesterday, when an installation progress bar filled completely. I was pleased, but a moment later, it started over again with no indication that anything had happened. This repeated several times, each one reinforcing the hard truth that I had no idea how long the process would take.

    154. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar.

      Only if you assume that the bar is supposed to show time as opposed to indicating overall completeness of the task. That's the real catch- some people watch the bar because they want to estimate how much longer it will be, some people watch it because they want to see that there's... progress.

      Often the issue is that the developers are simply shit at estimating what they're doing, for example basing a progress bar off total number of files copied when 99% of them are tiny and one is fucking massively huge. The meter fills rapidly until it hits the big file, then sits there and does nothing at all, pissing us all off, and then suddenly races to the end. Useless as all fuck.

      I think the real answer is that many devs just consider it "eye candy" and don't put much actual thought into how to make them useful at all.

    155. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      the point, as I took it, of indeterminate progress bars is to show that the program is "busy" and hasn't crashed.

      Back in the days when the animation was updated within the processing "pipeline", that actually worked. Now days, the program can eat shit and die and the animation will happily spin along, making it basically useless. "I'm doing something, maybe, but won't tell you what" is all it says, and it's infuriating.
      If it's indeterminate, there still ought to be some display showing that something is changing or being "done". If you're transferring a file of unknown size, for example, you can make use of some sort of counter showing an ever-increasing value instead of just plastering some eye candy on the screen.

      Crappy progress bars detract from the user's satisfaction of the product, but they are often a minor point in terms of what developers and managers consider important when it comes to making a product better. And it's often more beneficial to simply HIDE the fact you're still doing something than it is to deliver accurate information about what you're doing. A program which seems to complete a file operation faster because it says it's done before it really is, will be perceived as 'better' by most users than an application which is actually faster but has a progress bar which shows the user the actual time taken.

    156. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      What I like is the Step X of Y types of progress indicators. Sure step 5 of 12 might take way longer then the rest but at least it is honest. It also helps to tell the user what it is currently doing. You know that downloading drivers may take a while when the Internet is slow (or down).

      Install an HP printer for the best example of this. Breaks down the install in steps, usually 3-5, and in each step it shows the name of the current file being installed as well as the size of that file.

      No. If it was honest, Step 1. "Installing driver" would flash by faster than you could read, and Step 2. "Installing bloated crapware you don't need and only an idiot would use" would take 15 minutes, followed by Step 3. "Installing DRM licensing rootkit" which would take another 10.

    157. Re:Can't Go Backwards by citizenr · · Score: 1

      No. You're assuming all users are idiots and ALWAYS uninterested.

      Dont be harsh on him, he is just a Gnome developer.

      --
      Who logs in to gdm? Not I, said the duck.
    158. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      There's one worse: A single progress bar animation that seems like it's working normally, gets to the end.... and then *starts over* (not the entire process, just the progress bar).

      Absolutely. This makes me rage. Many software installations in Windowsland are guilty of this (due generally in part to redistributable add-ons - .net, c++, and so forth). At least indicate how many steps are involved, FFS.

    159. Re:Can't Go Backwards by Reziac · · Score: 1

      I've seen some go backwards (can't recall what offhand) and I really like what you mention about the Office installer cleanup. Either way it says that whoops, either something is going to take longer than we first thought, or it's going away. Useful info from nothing more than a progress bar.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    160. Re:Can't Go Backwards by allo · · Score: 1

      the total bar should get longer. sorry, if my posting was unclear to you.

    161. Re:Can't Go Backwards by allo · · Score: 1

      progress measurement can be (and the user wants it to be) a percentage of the total time. and in this sense, an option might be to make the progressbar longer, when the estimated total time grows (because the progress grows at a slower rate than expected).

    162. Re:Can't Go Backwards by fluffynuts · · Score: 1

      Actually, they (and daisy loaders) do have a point, when used correctly: they're an indicator to the user that the process hasn't STALLED, even though the time to completion is unknown.
      I'd rather have one of these than an app that looks like it's hung. So, apparently, would most users: even an indeterminate progress "meter" makes users happier to wait for a process to complete -- even to wait longer!

    163. Re:Can't Go Backwards by Osiris+Ani · · Score: 1

      The file copy ones used to drive me nuts. If I'm moving files from one source to one destination, you'd think the transfer speeds would be pretty consistent and the time estimates pretty accurate. I can't pretend to know why they used to be so bad, but they do seem better now.

      If you're referring to moving files from one disk to another one nearby, then it was probably due to fragmentation. When drives were smaller, it was more likely for a single file to end up scattered across the disk. They were also slower back then, which only served to exacerbate the problem.

      There's also a read penalty that increases when dealing with larger and larger numbers of smaller and smaller files. The original estimate is based upon the raw size of the data, but doesn't immediately factor what it might require to move that amount in small segments.

    164. Re:Can't Go Backwards by Anguirel · · Score: 1

      They were bad because they assumed all files being copied were about the same size. "This file completed in 0.5 seconds? All of the next 10,000 will also! Estimate: 83 minutes... Oh no, this new file is going to take 1 minute. Estimate: 167 hours"

      --
      ~Anguirel (lit. Living Star-Iron)
      QA: The art of telling someone that their baby is ugly without getting punched.
    165. Re:Can't Go Backwards by toddestan · · Score: 1

      You do realize that SimCity 2000 predates SimCopter, right?

    166. Re:Can't Go Backwards by Duggeek · · Score: 2

      What happened with OP was, technically, an exception-handling bug. The exception was that some condition of the next event wasn't satisfied, and did so with time-sensitive language on the screen. That's not a poor progress bar, that's just negligent coding.

      Kudos for pointing out the difference with the Progress Bar and Time Estimation. A good example for both? wget

      A properly crafted Progress Bar is not hard to do: Amalgamate the task at hand into a number of homogeneous units and express those in the graphic bar as [ units.done / units.total ] and you'll be fine. Where most fail at this is in keeping the units consistent and/or appropriate. A classic fallacy is one of file-count vs. byte-count, but the most egregious of those failures is a total-units value that dynamically updates. (vis-a-vis, the "dancing left and right" progress bar)

      OTOH, there's Time Estimation, which is a far more fickle beast, especially when applied to ISP throughput. This requires more of an understanding of statistics and averages, where the algorithm is actively measuring units of time as well as units of data. A classic approach is to simply calculate the mean throughput and apply it to the bytes remaining to get the ETA, but this quickly falls short when the connection hangs or if the algorithm is relying on throughput statistics to ratchet the loop. The best—and most frugal—implementations of Time Estimation have used a timed loop with throughput calculated on a rolling average from a fixed number of samples. Again, the most common errors here are; using incorrect units; using an unreliable source for rate and/or throughput; using too small of a sample base before starting prediction trends, and the icing on the cake; mistaking a partially completed task as an accurate measurement of throughput in the sum prediction. (Back in the days of 56k dialup, I would resume d/c downloads all the time, and the download managers were regularly telling me that the 10MB chunk I already have somehow sped up the process to twice—or even ten times—the highest possible speed of my dialup connection. el. oh. el.)

      Now, all of this goes "out the Windows(tm)" if you happen to be at Microsoft any time in the past fifteen years. Their idea of a "progress bar" seems to be just a mechanism to make the user sit and do nothing for a number of minutes at a time. The progress bars they typically have made are either (A) simple timer animations that masquerade as a progress bar [see: browsing the network] or (B) the obsequious progress bars from Win98, that fill up to 100% and stay there for another two minutes before actually triggering the next process.

      Thankfully, someone in the Win8 file manager team actually got the memo, as you can see here.

      So, there's really no mystery. The "how to" of making an accurate progress bar or time estimation algorithm is really quite well established. The real question is, how to convince software developers to implement one?

      P.S. Units. Units! UNITS!!!

      --
      This post © Copyrite Duggeek, all rights reversed.
    167. Re:Can't Go Backwards by hattig · · Score: 1

      I agree, except the thread updating the animation that things are working is probably totally disconnected from the thread that is doing stuff (and may be hung). So in reality, it's useless. Even the ones that are actually accurate are rendered useless because you don't know that it is a decent implementation! But yes, I'm sure they make people wait longer before failing to terminate the process because they feel it is doing something.

    168. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      I remember having to install (lots of) Lotus Domino servers once. If, after kicking it off, you left the install to itself it would take two hours. If you sat a pleb down at the console to constantly move the mouse around it would complete in a little under fifteen minutes. I shit you not.

    169. Re:Can't Go Backwards by Unknown1337 · · Score: 1

      and when Windows has gotten it wrong by so much that the progress bar is 5 times the width of my monitor, what then? There might as well not be a progress bar if it is possible you won't see the end and it has been stated many times that going backwards is an even less desirable option. Perhaps (as most applications already do this) displaying a progress bar as progress of actions AND a timer to expected completion is ideal as it informs the user of both the action completion state and the time frame associated with the remaining actions. Of course the same question could be asked 'Why is it so hard to make an accurate timer?'.

    170. Re:Can't Go Backwards by fluffynuts · · Score: 1

      Don't confuse UI with task accomplishment.
      I totally hear you about a hanging background thread (which sucks for the user), but, let's imagine that background threads are properly handled (and perhaps even timed-out, as would be for network traffic). So a good example is this: imagine an application which presents you with a list of tasks to accomplish for the day. It starts up blank and asynchronously fetches your tasks for the day from a remote source. Now, the reason you want an indeterminate progress feedback mechanism (eg daisy loader) is because, on the day when you have no tasks, you need to know the difference between the app being busy and actually having completed its work, presenting your empty task list. This kind of thing is easy to accomplish, say, with jQuery where you have an asynchronous call which has two functions given to it: one when the call completes properly, and one which is called when the asynchronous call fails. BOTH should implement some kind of feedback that the operation has "completed" (ie, hide the daisy loader), and, of course, the failure path should inform the user that the operation failed -- and perhaps offer a mechanism for retry.
      But, for this discussion, the only interesting parts are:
      1) show the daisy loader
      2) perform asynchronous call
      3) when the asynchronous call completes or fails, hide the loader.

    171. Re:Can't Go Backwards by Anonymous Coward · · Score: 0

      Solution: Rescale then bar and then place a string of bold text above the bar explaining why it suddenly jumped backwards.
      ex. "Encountered folder containing many small files."

    172. Re:Can't Go Backwards by redlemming · · Score: 1

      To be honest, progress bars shouldn't be used for indeterminate timescales.

      Except for real-time systems, which are designed to support things happening in a fixed amount of time, modern computer systems are fundamentally indeterminate. Scheduling algorithms that allocate processing time between different processes running on a typical operating system make the timing of even seemingly simple tasks difficult.

      The problem of determining program timing gets even more complex when you consider preemption of the operating system by hardware devices, delays due to the need to share resources, the timing effect of any distributed processing that may be required, and the time cost of communication between multiple machines.

      In short, measurement of software progress ultimately is probabilistic, not deterministic.

      Having said all this, it is often the case when writing software that not enough time gets put into thinking about how to write basic user interface components such as progress bars. This is a result of many factors, amongst them the inability of management in many organizations to understand that seemingly simple things can take time to do right.

    173. Re:Can't Go Backwards by BillX · · Score: 1

      Typically when they do the marquee style of progress bar (where it just show animations, but no actual progress), it means the quantity is unknown.

      In my experience, it means the act of updating the spinner is completely decoupled from the act of doing the work, leading to the all-too-common result: The thread updating the animation is happily spinning away, but the one doing the work deadlocked hours ago and you'll never know, muahahaha!

      --
      Caveat Emptor is not a business model.
  33. And yet the boss always can set a deadline ;-) by Anonymous Coward · · Score: 0

    ...that we meet every time.

  34. Work is hard. by Anonymous Coward · · Score: 0

    To meaningfully show progress, you have to do work and plan. This is an anathema in software development these days.

    If you are going to have a progress bar that simultaneously shows steady progress through the amount of time required and actually represent real progress, you need to identify similar-duration chunks of actual progress. Without that effort, you stand the chance of the issue seen by the submitter.

    Even given that work, sometimes the software executes in an environment with different performance characteristics (e.g. SSD instead of the HDD you tested on, 1G of RAM instead of the 8G on the development system). I suggest that it isn't always easy to represent everything with one bar.

    That is still NO EXCUSE for failing to find a better solution. You could have achecklist that checks off TODO items, a series of individual progress bars, or ANYTHING indicating what resources are being used without the end user resorting to opening some diagnostic software.

  35. Cost Benefit by infernalC · · Score: 4, Informative

    Progress bars do not make sequences of actions complete any faster. In fact, they make them slower.

    That being said, take for example an installer that must perform the following steps during an upgrade:

    0. Figure out how many files need to be replaced.
    1. Replace 30 files of varying sizes.
    2. Add 10 files.
    3. Update a half million rows inn a table with a million rows setting a column to a computed value based on some predicates.
    4. Run a third party installation mechanism (MSM?) for a supporting library, etc.

    Modern computers are time-sharing systems. Each process that involves computation is at the mercy of the scheduler in the kernel to give it the cycles it needs to complete. That means that even if you measure the time it takes to complete some process, it's not going to be the same a second time, because the installation process doesn't get undivided attention.

    Steps 0 - 2 - you're at the mercy of the IO buses, hard disk, antivirus software interfering, etc.
    Step 3 - What shape are the database statistics in? How efficiently can you apply the predicates? What does the distribution of the data look like? You can't tell this ahead of time...
    Step 4 - Does this third party installer provide you some sort of metrics as it runs?

    These are the sorts of problems to be overcome to do an accurate progress bar. In short, they aren't worth overcoming.

  36. It's not the progress bat that has the problem by stafil · · Score: 1

    But the data it represents. In your case, I assume, it's estimate time to completion.

    Computing something like this is difficult indeed. It's like planning a car route. You can have an estimate of the time it will take, but the end time will depend if the current traffic condition at each segment if your route when you are travelling.

  37. consider a rocket launch countdown by at10u8 · · Score: 4, Insightful

    For over 50 years rocket launch countdowns have not run in a linear fashion, sometimes even being set backwards.

    1. Re:consider a rocket launch countdown by nurbles · · Score: 1

      They also stop completely for indeterminate periods and get canceled, sometimes due to the rocket and sometimes due to its environment.

      So yes, they're almost EXACTLY like progress bars!

    2. Re:consider a rocket launch countdown by quacking+duck · · Score: 1

      Sports is a great example for those who may never have watched a launch. Many have lots of clock-stopping plays, time-outs, and even soccer's perpetually running clock usually runs past "100%" with extra minutes added at the end.

    3. Re:consider a rocket launch countdown by Anonymous Coward · · Score: 0

      For over 50 years rocket launch countdowns have not run in a linear fashion, sometimes even being set backwards.

      True, but computers don't have to wait for a launch window. Except perhaps for MS products (but that is more of a media hype window).

  38. Development time by Torp · · Score: 1

    For complex operations, doing accurate progress may take a lot of development time you can't afford. Mostly everyone has deadlines...

    --
    I apologize for the lack of a signature.
    1. Re:Development time by Bill+Dog · · Score: 1

      Or for a non-trivial set of combinations of operations. Take an installer that has to be able to upgrade just about any of a number of possible applications in a business's suite of related apps, and applying patches, in order, to support up to three versions back. Where different applications can be at different suite versions (customer pays for upgrades of some apps faster than others). It's just not feasible to make a progress bar account for all of those possibilities to be accurate.

      --
      Attention zealots and haters: 00100 00100
  39. A bit warped but... by Anonymous Coward · · Score: 0

    OS/2 got it right. I once saw an installer fail and the progress bar went backwards as it cleaned up the bad installation.

  40. Better than a progress bar... by 0xffffffff · · Score: 2

    ...would be a PB combined with some way for the app and OS to tell me why things have slowed down, in plain language. This would not be impossible to do.

    --
    -- This sentence is false.
  41. Apple Compressor has the worst progress bar by Y-Crate · · Score: 1

    I'm convinced that it's just a random number generator. Half the time it gets to 50% in an hour, jumps to 75% in ten seconds, then finishes. Other times it grinds away at a job for the full estimated time. Which changes constantly.

    1. Re:Apple Compressor has the worst progress bar by Cyclon · · Score: 1

      Windows file copy dialog is pretty awful, too. Obligatory XKCD

    2. Re:Apple Compressor has the worst progress bar by Anonymous Coward · · Score: 0

      It has been fixed already.

  42. It's actually very easy by Anonymous Coward · · Score: 0

    It's just a matter of rounding up/down to the right scale. I usually use a standard approximation equal to 100% floored: Until the given set of operations is within the range of 0-99.9999999% completed, the progress indicator is rounded down to "It's not done yet!" so the bar stays empty. Once all the operations are finished, the bar fills up completely and displays "Now it's done! Go treat yourself to a cookie!" Sounds pretty damn accurate, don't you think?

  43. Physics! by ignavus · · Score: 5, Funny

    You can work out where you are (% completed) or how fast you are going (rate at which the progress bar is growing), but not both at the same time.

    It's simple quantum mechanics.

    --
    I am anarch of all I survey.
    1. Re:Physics! by Anubis+IV · · Score: 1

      Quite true, but you could probably skip the quantum mechanics and simply point out that present performance is not a certain indicator of future performance. A nearly innumerable number of events could take place that slow down the process, many of which are incapable of being predicted accurately in advance, or else would take an excessive amount of computational power to predict in advance.

      In the meantime, the progress bar's purpose isn't to tell the user when things will finish. It's to assure the user that things are still working. That gets accomplished regardless.

    2. Re:Physics! by ixarux · · Score: 1

      This is I believe is a great answer. Had me pondering over it for a while. So it is impossible to get instantaneous data transfer rates, past rates often are misleading, and predicting future rates takes computing. Better prediction of the future takes more computing, and thus as most of the commentors have put it.. it's just not worth the effort.

    3. Re:Physics! by asylumx · · Score: 1

      You were labeled "Funny" but I think it's quite an insightful comment.

  44. Sort of. by MrEricSir · · Score: 1

    That's all very true in the world of single tasking. Remember the days of DOS? When a file transfer said it would take 10 minutes, it took 10 minutes, dammit!

    But once you enter the world of multitasking, your program has no idea what slice of the CPU pie it's going to get in the future. And surprise, in every modern OS, those file transfer time estimates tend to be significantly off.

    --
    There's no -1 for "I don't get it."
    1. Re:Sort of. by AlphaWolf_HK · · Score: 3, Interesting

      I like the new windows 8 transfer bar that shows instantaneous transfer rates (not average) as it progresses left to right. This gives you a very accurate idea of when the transfer will finish, as it can slow down or speed up based on either network congestion or file size (a bunch of small files transfer slower than few big files.)

      --
      Careful with names containing L slashdot.org/~AiphaWolf_HK slashdot.org/~AlphaWoif_HK slashdot.org/~AiphaWoif_HK
    2. Re:Sort of. by aiht · · Score: 1

      That's all very true in the world of single tasking. Remember the days of DOS? When a file transfer said it would take 10 minutes, it took 10 minutes, dammit!

      But once you enter the world of multitasking, your program has no idea what slice of the CPU pie it's going to get in the future. And surprise, in every modern OS, those file transfer time estimates tend to be significantly off.

      ... even when there is no other activity on the computer / network in question.
      Sooo... why, again?

    3. Re:Sort of. by JaredOfEuropa · · Score: 1

      I like the new windows 8

      I think you lost most of your audience at this point...

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    4. Re:Sort of. by scsirob · · Score: 1

      Most of today's computers are so overpowered for what they are used for, that any of the programs running on it have ample CPU time.
      When I look at my nowadays lowly Core2 Duo CPU, it runs at less than 10% most of the time. Only when I compile a program it will peak a bit, but even streaming full-HD video doesn't stress it at all. Any installer should be able to make a reasonable estimation if CPU would be the gating factor.

      I/O is more problematic during an install or download. Especially harddisks are s-l-o-w by today's standards. Have two programs compete for I/O and it will take a lot longer than with a single program. Add unknowns such as filesystem fragmentation, deep nested file structures and lots of small files, and you have a recipe for disaster.

      --
      To Terminate, or not to Terminate, that's the question - SCSIROB
    5. Re:Sort of. by wisnoskij · · Score: 1

      It has some idea. There is no excuse for how bad the estimated time left for OS file transfers. Where 1 year remaining is commonplace to see seconds before a file finishes, you know they were not even trying. Not only does the OS know everything that is going on, and knows when another concurrent transfers will finish, it is easy enough to find an average slice of the CPU pie that you will likely get in the future.

      And even when nothign else is going on. The only active task is the transfer, it still has absolutely no idea how long. They very least they could do is hard code some average metrics. I know how long copying something will take on average, meanwhile the computer all on its own is spewing out 1 week - 2 days - 7 days - 8 months - 1 hour - 3 days - 3 seconds - done.

      --
      Troll is not a replacement for I disagree.
    6. Re:Sort of. by Shatrat · · Score: 1

      Instantaneous transfer rate is always either the line rate of your network interface or 0. Anything meaningful is going to be some kind of average over some kind of interval.

      --
      09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
  45. This is why by cadeon · · Score: 1
  46. because fortune telling by Anonymous Coward · · Score: 0

    I think the only reasonable response here is two-fold:

    1. Obviously, the problem with perfect progress bars is that one cannot predict the future behavior of nondeterministic systems -- and the ever-increasing abstraction of software is only making this harder. If you're complaining about poor estimates of OS-level (or worse, network-level) operations, there's so much going on that there's simply no hope without a psychic to provide supervised training.

    2. In fact, I write (non-graphical) progress meters all the time that do a damned good job. However, I am usually just estimating the amount of time to completion of a computation that is broken into chunks of similar difficulty on a system whose behavior is pretty consistent (in-memory operations on a virtualized machine). Most often (total number of steps - current step count)/(current step count) * (time passed so far) is completely adequate. Sometimes it makes more sense to use an exponentially weighted moving average version of (time passed)/(current step count), and all it takes is a little forethought (or observation of inadequate estimates) to identify when this extra step is needed. Since I don't expect to predict the future very accurately, what's left ain't rocket science but generally works pretty well.

  47. Not A Progress Bar by StormReaver · · Score: 1

    What you're describing isn't a progress bar. It's a time remaining indicator. Progress bars tell you how far long a process is on its path to completion. It was never meant to tell you how much time remains, and using it as such will predictably lead to end user confusion and frustration.

    Even when a progress bar goes from 0 to 99% in an instant, then takes forever to go from 99% to 100%, it is doing what it is intended to do: tell you how far long the process is. That's all it is supposed to do. It should NEVER be used to tell you how much time remains. You can sometimes infer timing from progress if the progress bar progresses smoothly, but that's a side effect.

    As for the time remaining indicators: those will ALWAYS be inaccurate (usually severely so) because most factors that contribute to how much longer a process must run to completion are unpredictable. It's like trying to predict when someone is going to turn off the hall light tonight based on when they turned it off last night. It might be accurate sometimes, but that's just from pure chance.

    1. Re:Not A Progress Bar by PlusFiveTroll · · Score: 1

      The problem here is that the progress bar/time remaining indicators in most programs are terrible abstractions. Developers make it worse by hiding inside black boxes.

      Example 1, a person says they are 25% done filling up drinks. They are behind a curtain.

      Example 2, you're watching a person fill up 30 cup sized drinks, he's completed 15, you have a pretty good idea how long it's going to take. But you look at the end of the table and there are 30 thimbles that he has to fill without spilling, and you realize this will take a bit longer.

      Example 3, you're installing a program, it's at 25%. 25% of what?

      Example 4, you're installing a program, it's copied 2GB of 4GB of data files and processed 0 of 1000 registry keys.

      1 and 3 are the same type of problem, giving a number is pretty much meaningless as the workloads are going to change.
      2 and 4 give more detail and separate work types that are processed differently.

    2. Re:Not A Progress Bar by mikael_j · · Score: 1

      The problem with those "99% in seconds and then an hour for the last 1%" progress bars is that a lot of times they are simply poorly designed even when factoring in that it's basically impossible to create a perfectly accurate progress bar.

      I've seen this phenomena all too often with various software, installers of various "enterprise" software tend to be especially bad. First it copies files, after performing a few installs of the software you realize that the file copy task is always considered to be 95% of the work by the installer. Then it runs a bunch of heavily CPU-bound scripts that according to the progress bar are 5% of the work every time. Of course, even on a machine with dog-slow disk I/O and a pair of blazing fast multi-core CPUs these last 5% take 30+ minutes while the file copying rarely takes more than 2-3 minutes. At this point we can confidently say that whoever designed the progress bar wasn't just doing a poor job, this person clearly intended for the progress bar to work poorly. At some point during testing (like, the first time they tested the progress bar in usability testing) someone must have said "this thing is horribly inaccurate, at least change it so it's got a 50/50 file copying to install script ratio" and been told shut up.

      --
      Greylisting is to SMTP as NAT is to IPv4
  48. One thing.. by lionchild · · Score: 1

    We live in a world of multi-tasking, or task-swapping hardware. It would seem to me that we've not figured out how to simply stop or buffer other tasks so we could give you something a bit more like an acual progress bar and not just a best guess.

    Well, that, or that's a feature that they're planning to put in next version of the OS.

    --
    Awk! Pieces of eight. Pieces of eight. Pieces of seven... ERROR: General Protection Fault. [Paroty Error.]
  49. Solution: by Anonymous Coward · · Score: 0

    N=1

  50. Play Progress Quest by sidevans · · Score: 2

    They have their progress bars sorted perfectly. Great game too!

    --
    I'm not signing anything
  51. XP progress bar was perfect by michaelmalak · · Score: 1

    Flame mode: ON

    The Windows XP Windows Explorer and IE8 progress bars were perfect. They took recent data transfer rates, did a simple division of bytes remaining / bytes/sec and reported the expected remaining time at the most recent transfer rates. Yes, transfer rates fluxuate over time. That is the nature of things.

    The Windows 7 Windows Explorer file copy progress bar, by contrast, is absolutely worthless. No doubt the engineers screamed under pressure to implement that way, under duress of pressure from the Microsoft marketing dept, who undoubtedly heard undue amounts of whining by people like you who couldn't understand a simple formula involving one division. Now when I go to copy files in Windows 7, it saws 2 hours remaining, and stays stuck at that readout for five minutes, before it finally comes up with a more reasonable estimation like 12 minutes.

    The only way to make the progress bar more informative is for it to provide error bands, based on both short-term transfer rate history and longer-term transfer rate history. That would be pretty slick, actually. But to expect the general public to understand the math used in high school Chem I is just too much.

    1. Re:XP progress bar was perfect by Anonymous Coward · · Score: 0

      In Windows 8 they revamped the file copy dialog. It's pretty good now.

    2. Re:XP progress bar was perfect by PlusFiveTroll · · Score: 1

      > They took recent data transfer rates, did a simple division of bytes remaining / bytes/sec and reported the expected remaining time at the most recent transfer rates. Yes, transfer rates fluxuate over time. That is the nature of things.

      They also did stupid things like made the bytes/sec and average too, so if the connection silently died when the average was 100KBs for an hour it would slowly count down your average over time, even though the amount you are currently getting is 0.

      The Windows 8 (yes, I know that is a curse) file copy is much, much better.

  52. Sorry asshole, by Anonymous Coward · · Score: 0

    but computers can't predict the future.

  53. Kalman Filter by laing · · Score: 1
    Here is your answer: http://en.wikipedia.org/wiki/Kalman_filter

    The problem is that most software engineers are too dense to implement this properly.

    1. Re:Kalman Filter by Anonymous Coward · · Score: 1

      I tried that once.

      People complained so I added a progress bar for the calculation of the first progress bar.

    2. Re:Kalman Filter by damaki · · Score: 1

      Man, you assume that if you implement that, you won't get people bitching about your inaccurate ETA. Keep dreaming. And this gaussian distribution of errors, for estimation bars? That's total bullshit. Why? Cause people will come complaining at you each single time your smartass algorithm just failed as utterly as linear prediction at predicting what will happen... the only deterministic change that this thing brings is that it will increase your product cost, even if only by a fraction and that your manager and team members will remember you created a not working solution.
      People do not remember when a progress bar works properly. They only remembers the times it fails. If an installed fails predicting how much time it would take, it has always failed and people will complain and amplify they complains.I mean I can still remember my explosive laughter when a file copy progress bar just went back in time, in Windows 2000. I almost fell of my chair. It was 6 or 7 years ago.
      Just leave the damn linear progress bar alone and do not put any silver bullet in it. It's simple, it's fine, it mostly works, as it already is.

      --
      Stupidity is the root of all evil.
    3. Re:Kalman Filter by Guy+Harris · · Score: 1

      Here is your answer: http://en.wikipedia.org/wiki/Kalman_filter

      The good news is that, for example, a Google search for

      "piecewise linear" "kalman filter"

      actually finds things.

    4. Re:Kalman Filter by retchdog · · Score: 1

      yeah, and they can't spend massive resources developing estimates for every configuration of hardware in the universe.

      beyond that, the kalman filter's assumptions are really not tenable for this application, even those of the advanced variants. particularly, the process isn't stationary, and the noise terms are not independent. more basic statistics can do just as well; it's really a matter of it not being worth the trouble.

      --
      "They were pure niggers." – Noam Chomsky
  54. Probably take up too much processing by Anonymous Coward · · Score: 0

    It probably will take up too much processing just to calculate a potentially more accurate estimate. Which will still be wrong some of the time at least.

  55. I too am surprised. by bobamu · · Score: 1

    at the lack of progress in this technology. ( Yeah, I know, I even had mod points, I'm sorry ).

  56. Sometimes. by Sipper · · Score: 1

    When it comes to the back-end of the "progress bar", it's essentially a widget that shows a percentage from 0 - 100%.
    So the question actuall is, does the thing the progress bar is showing the "progress" of output a "percentage done" or not.
    Sometimes the "percentage done" can be estimated or calculated, but sometimes it can't. Some programs (like 'dd') don't give any progress output at all.

    What's annoying is when programmers show a "progress bar" that changes but doesn't actually show any progress -- so whatever they show is fake. That's irritating, because when that happens it means the user is essentially being lied to, and defeats the purpose of the progress bar. I'd personally rather see a message of "please wait while (blah)" than see a fake progress bar.

    The latest place I saw a fake progress bar was in the Java setup GUI in Untange (which is based on Debian). Every single area a progress bar is shown in this GUI shows looping "fake" progress. Ugh.

  57. Nostradamus by Anonymous Coward · · Score: 0

    If you want to know "how much longer", ask Nostradamus, but if you want to know more about what is taking place during the 30 minutes while the progress bar is at 1%, tell your programmer to add some more detail.

  58. Are you referring to Windows? by Haydn · · Score: 1

    I don't know why Windows' progress bars have such chaotic behavior, but I've generally had better luck with ones which run on other operating systems or at least aren't written by Microsoft. :-)

    1. Re:Are you referring to Windows? by Anonymous Coward · · Score: 0

      Caching screws up the estimation in the beginning and only after the cache fills up would the data rate reflects the true rates. So in order to get accurate progress bar, the software have to take that into account.

    2. Re:Are you referring to Windows? by PlusFiveTroll · · Score: 1

      Caching screws up the estimation in the beginning and only after the cache fills up would the data rate reflects the true rates. So in order to get accurate progress bar, the software have to take that into account.

      A seemingly large amount of software doesn't take in account that querying 1000 registry keys and changing the values can take a seriously long time on a spinning disk.

      They also don't take in effect that written bytes are not equal. You can stream at 100MBps to a harddisk, but then drop to 400KBps on random IO. Take the same workload on a SSD and the random IO is almost invisible (in which if you were used to sampling quite often after IO operations your sampling thread can dominate the CPU time slowing down the entire operation.)

  59. Re:no, it's easy. by GigaplexNZ · · Score: 2

    i'm a computer programmer. it's easy to make an accurate progress bar. take the total, take the current, divide. done. i don't know why windows progress bars and time estimated are so messed up. they're clearly doing something totally wrong. if not many things. as usual.

    Clearly you're not a very good one.

  60. It should not be hard. by Anonymous Coward · · Score: 0

    I remember in the 80s when Apple had this great idea. It would calculate how much space was needed before doing the copy and prevent you from wasting your time. Before then you'd only find out it was not possible when the system choked. The way around this problem is first recognizing it is a problem as the author has done. The next step is to write the code in such a way there are multiple split second tasks that can be checked off. Then these tasks are timed on various machines. Hopefully crowd sourced. As the machine in question compares how long it is taking to finish each of the task it determines which of the probably curves best fits and chooses to extrapolate from there. If crowd sourcing is not available then it would attempt to use the 20 or so time logs the developers included with the software.

    We need some standards to make this catch on.

  61. Let me try... by stanlyb · · Score: 1

    You have to implement a BAR, showing the progress of M operations, executed in N seconds.
    Your BAR has 100 units. Your time is.....the computer time.
    The computer time is INCORRECT. Believe me, it really is.
    Now, You dont have M, and you dont have N. So, the questions is, how to divide M by N, when you dont know anyone of them!!!
    Short answer, by measuring the calculated Mt, for a fixed amount of period T. Every t seconds.
    So, in the begining you will have pretty funny results, but as the calculations are going, so will your BAR.
    A few problems here, the fixed "t" amount of time is fixed for you, but not for the computer, and there is simply NO way of having always the exact "t" period of time, all the time. Except if you have a real time OS. Even then it is not an easy task.
    Second problems is that the calculations made so far are not keeping the progress of the calcultaions. So, just for example, a better solutions it to keep all the Mt and Tt pairs, and to make one nice, good, pretty complicated math calculation, called interpolation, for the purpose of finding out the exact LAW your bar is progressing on.
    So, easy task, huh? And i have not even started talking math.........Again, trust me, it is not an easy task :)

  62. It's not hard, but it takes time ... by GNUALMAFUERTE · · Score: 1

    A program you could code in 2 days would take a week with actual, proper error checking. Add another week if you want a precise progress bar, since that's a whole different program to write.

    Programmers work on an schedule, and therefore we have to cut corners. Let's say you need to collect some information from a form, then process it, send it to a web service, then report back to the user.

    You could do this:

    -> Pass all fields to the server (set progress to 20%)
    -> Check they aren't blank (set progress to 30%)
    -> Call the webservice, pass the data (set progress to 60%)
    -> Check the return against a case with error cases: 1) Everything ok 2) Service not responding 3) Anything else (set progress to 90%)
    -> Report to the user. (set progress to 100%)

    There, it works. But you are cutting corners.

    You should also check the fields against regular expressions to validate the data, and you should implement the complete API with all return codes, which could be hundreds, and each would require a different response from the program, to that you have to add all possible responses outside the API (TCP errors, etc.). Also, if the problem was data, you should try to find out what particular field caused the problem, and show the user what the particular problem is. If you want accurate progress, you need to make measurements of each atomic process you are doing, and then check for a lot more conditions, and either increment progress or report special circumstances (hey, IO is stuck, we don't know how much we'll have to wait). Doing that also means implementing threads, in order for the IO operations to be non-blocking so you can report back to the user. By this point, we've already transformed the complexity of the program from something a single guy can do in half a days work, to a complex piece of code that will take at least a week to complete, and it'll be more complex to maintain later. And we're still cutting corners here, there's a lot more we could be doing to be more accurate.

    So, you can implement a hundred error-probing statements, or you can just throw it out there, hope for the best, and tell the user "it went ok" or "everything's lost".

    It isn't up to you, it's up to management, up to the customer, and determined by your budget.

    So, no, it's not impossible, and it's certainly not "hard", as in, it's solvable with well known methods. But it's time consuming. So you'll have to deal with it, programmers usually measure with a micrometer, mark with chalk, cut with an axe. Not because they want to, but because it's the only way to deliver ontime, within budget, and most of the time, it's the reasonable thing to do.

    --
    WTF am I doing replying to an AC at 5 A.M on a Friday night?
  63. Progress bars for dummies by Azure+Flash · · Score: 0

    The progress bar knows where it is at all times. It knows this because it knows where it isn't. By subtracting where it is from where it isn't, or from where it isn't from where it is, whichever is greater, it obtains a difference or deviation. The progress subsystem uses deviation to generate corrective commands to drive the progress bar from a position where it is to a position where it isn't, and arriving at a position where it wasn't, it now is. Consequently, the position where it is is now the position that it wasn't, and it follows that the position that it was is now the position that it isn't.

    In the event that the position that it is in is not the position that it wasn't, the system has acquired a variation, the variation being the difference between where the progress bar is and where it wasn't. If variation is considered to be a significant factor, it too may be corrected by the GEA. However, the progress bar must also know where it was. The progress bar computer scenario works as follows: because the variation has modified some of the information the progress bar has obtained, it is not sure just where it is, however it is sure where it isn't, within reason, and it knows where it was. It now subtracts where it should be from where it wasn't, or vice versa. And by differentiating this from the algebraic sum of where it shouldn't be and where it was, it is able to obtain the deviation and its variation, which is called "error".

  64. The future is hard to predict by gweihir · · Score: 1

    Why is it so hard to understand that?

    --
    Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    1. Re:The future is hard to predict by PhxBlue · · Score: 1

      I have it on good authority that the future will be better tomorrow.

      OK, not so sure about the "good" part, now that I think about it.

      --
      !#@%*)anks for hanging up the phone, dear.
  65. Project Managers already solved this by Anonymous Coward · · Score: 1

    It's simple, you load every task up into Microsoft Project. plot out a few hundred gantt charts. And you'll know the precise date when everything will be complete.

  66. Re:no, it's easy. by Anonymous Coward · · Score: 0

    What kind of toy programs are you writing son?

    "take the total" indeed.. what do you think we are progressing towards?

  67. just my 2c worth by v1 · · Score: 1

    I've made quite a few progress bars in my time over the last 24 or so years of programming, and I've tackled this problem in a variety of ways.

    There are two fundamental problems. (1) How much is there to do? and (2) how long does each of those things take to do?

    (1) can't always be known. Sometimes it's impossible to even make an educated guess. That's what those "barberpole" bars are all about. "We really have no clue how long this is going to take."

    (2) you'll usually at least have a guestimate on.

    From there it's just very easy math, figuring out how much time has elapsed and what percentage of work has been done. Figuring out when to change from barberpole to a reasonably useful bar depends on when you figure you've done enough of the work to start getting accurate guesses on (2).

    I think the problem that's causing people the frustration is when (1) isn't anywhere near expected. Maybe there's 15 subfolders in that folder, and you've already got 14 of them copied. The last one shouldn't take too long, right? Unless it's the folder with the raw video in it. And in that case you may be stuck at "about a minute remaining" for the next hour.

    The only way to prevent that is to do a more thorough investigation of the amount of work to do. (if possible... and sometimes it's just plain not possible) When you drag and drop a folder on a mac to start a copy, you'll get a "preparing to copy...". And that's what it's doing. It's building a complete list of Things To Do. Once the copy gets started, it will almost immediately give you an accurate estimate. But the penalty is you had to wait for it to start. Sometimes I don't want to wait for it to count how many 4k files are in that huge node tree and just get started and I will use ditto instead of Finder. It may get done with the copy before Finder has even started.

    Windows seems to take the other approach for file copies, and that's what's earned it that notorious "about a minute remaining" for an hour reputation. But the file copies start immediately, no time is wasted. So in the end, it copies faster.

    So, pick your poison. Do you want it done as fast as possible, or keep you better informed? You can't have all of both. You can have one, the other, or a compromise.

    As for the bars themselves... a script I wrote at work that gets a lot of use is my disk cloner. It does a file copy using ditto, which provides NO estimates, but is very fast. I could simply wait for it to get going, and then simply do the work/time estimate. But I found that wasn't accurate. It takes a lot longer to copy 100mb worth of 40k files than to copy one 100mb file. So what I ended up doing is displaying two progresses. One goes on an estimate of how long it's taken from start to now, divided by amount copied so far. The other considers only the amount done in the last ten seconds. The two numbers tend to bounce around a bit. It's not a bar, both display time to complete (15 minutes left) as well as an estimated time of completion (4:25 pm)

    Sometimes they are pretty close. Sometimes not. When it runs into a folder of tiny files, the windowed estimate gets longer, and when it hits big files, it gets shorter. It bounces around quite a bit. The overall estimate is a lot more stable. It's been my observation that the windowed estimate is more accurate at the start of the copy, and the overall estimate is more accurate in the middle. Near the end, the windowed time is more accurate. So, the person running the script can place their expectations wherever they want to.

    I considered displaying an average of the two estimates instead. It would simplify things for the users. That may be the best way to go. When a customer calls and wants to know when it will be done, we usually say it will be between the low estimate and the high estimate, whichever is which. (either could be the current low estimate)

    The final problem is when there are several discre

    --
    I work for the Department of Redundancy Department.
    1. Re:just my 2c worth by PlusFiveTroll · · Score: 1

      To add on to how hard it is to estimate how long something is going to take modern operating systems and hardware abstract away from the user let me give an example.

      Lets say you have a computer with a lot of RAM, 128GB for example. You have file.foo you created in memory, it is 64GB.
      You tell the operating system to write the file to disk.

      1. For the first $X hundred MB it says it's copying at a few GBs - Its filling up the memory file copy buffers.
      2a. It's still fast for the first few hundred MB, it's filled up your raid card buffer.
      2b. It's still fast for the few few GB, it's filled up your SSD cache or your Hybrid hard drive cache.
      2c. It's fast for around 64MB, it's filled up your hard drive write cache.
      3. For the first 48GB(-cachesize) of the file write speed has been pretty consistent (120MBps if you have a decent disk)
      4. Something goes wrong. Even though you have 70GB free on the disk, only 48 of that was contiguous free space, now the OS has to find free spaces to put the file, seek time becomes the limiting factor. You write the last 16GB of the file between 400KBps and 20MBps depending on exactly where it lands on the disk. Almost all of your time copying is spent here even though it's the last 25% of the file.

      The amount of progress is known, but the amount of time needed can change geometrically dependent on factors that are unknown to the application.

  68. Because it should be a graph. by gargleblast · · Score: 4, Interesting

    It is hard to make an accurate progress bar because it shouldn't be a bar at all - it should be a graph.

    Consider the humble download: bytewise, it might be 97 percent complete, but at the last moment, the bps rate has fallen. With a progress bar indicating a percentage and an estimated time, it might say 97% complete, 3 seconds to go. If the progress indicator was a graph, you could tell that the bps rate has fallen, and that the 3 seconds to go estimate (probably based on a linear extrapolation of progress to date) does not apply.

    I have never seen it done though. Partly, because I have never done it.

    1. Re:Because it should be a graph. by v1 · · Score: 1

      When you see that drop in speed, and sigh and say "oh great now it's hit a slow spot, this is gonna take all morning" and walk away, will be about the time it pops back up to speed again, having just completed the only concentration of slow work.

      trying to use a graph to estimate a folder copy is about as accurate as looking at a stock and trying to figure out when to sell. What you've seen in the past doesn't have to have any bearing on what's about to happen, or what lay ahead in general.

      --
      I work for the Department of Redundancy Department.
    2. Re:Because it should be a graph. by Anonymous Coward · · Score: 3, Informative

      Windows 8 actually has this.

      Screenshot: http://stackoverflow.com/questions/14064017/is-there-an-api-for-the-windows-8-progress-dialog-api

    3. Re:Because it should be a graph. by gargleblast · · Score: 3, Informative

      Holy crap, there it is: http://developers.slashdot.org/comments.pl?sid=3456137&cid=42879657. Thank you, PlusFiveTroll!!! Thank you Windows 8!!!

    4. Re:Because it should be a graph. by Anonymous Coward · · Score: 1

      Ever seen the new windows 8 copy ui?
      Xactly what you described.

    5. Re:Because it should be a graph. by Anonymous Coward · · Score: 1

      The win7 file copy has show details which includes the speed/number of files and size remaining - which helps to know why it's saying x minutes remaining.
      Windows 8 file copy actually has a graph as you describe too.

    6. Re:Because it should be a graph. by Anonymous Coward · · Score: 0

      Two cents: The Windows 8 progress bar does just that. It gives you a graph of the transfer rate so you can see when things are slowing down. It still won't predict things any better, but at least you can tell why it's been saying "1 minute 30 seconds remaining" for the past two minutes.

  69. No, it isn't. by Anonymous Coward · · Score: 0

    It's just often a tedious and time consuming task, that is relegated for some savings, time-to-market or plain laziness.

  70. That's a Windows problem by Anonymous Coward · · Score: 0

    The engineers made it go 5min, 4min 3 min, 2min, 1min, 55 seconds, 50 seconds...

    Less than 2 minutes is shown as a 1 minute, so for nearly a minute it shows 1 min, then goes to 55 seconds.

    It's GUI design incompetence.

    There's coding incompetence here too, if you copy 2 big files to flash, say 1GB+1GB. The click cancel while it's copying, it will continue to fake copy and only stop BETWEEN the two files. So you can be waiting for ages for a simple cancel. Instead of fixing it, the designers changed the message to 'cancelling'!

    It smacks of incompetence inside Microsoft. A simple file copy and it's done with such incompetence.

  71. Now on sale! by jameshofo · · Score: 1

    The best styrofoam cup in the world, you won't want to use it just once! When was the last time you bought something because of the quality of its progress bars?

    --
    Good leaders run toward problems, bad leaders hide from them.
  72. what a progress bar is not by Anonymous Coward · · Score: 0

    As you observe, progress bar does not mean time estimate.

  73. See Apple patent application by Anonymous Coward · · Score: 0

    Apple has applied for a patent for an accurate progress bar when web browsing.

  74. Re:Cost Benefit by PlusFiveTroll · · Score: 1

    We have a winner.

    That said you can do something like this.

    0. Show progress of search (x% of search database completed)
    1. x file completed of y total
    2. x number of files completed of y OR x GB of files copied of y GB
    3. Not easy, though doing some simple queries first you could say 'Updating database, X possible canidates' being if X is large that this might take a while.
    4. Yea, pretty much screwed here, since it's likely you're installing something from Microsoft who is the seemly worst at calculating how long something will take (WTF RU Doing .net? as you watch the hard drive grind, then stop for long periods of time, only to start grinding and stopping again and again)

  75. We will have an accurate progress bar when ... by Phantasmagoria · · Score: 3, Insightful

    ... when we solve the halting problem. I'm not entirely joking. The main problem with progress bars is that, quite often, it is not possible to accurately estimate how much time is needed to complete a problem (i.e. for the program to halt).

    --
    Loban Amaan Rahman ==> Anagram of ==> Aha! An Abnormal Man!
    1. Re:We will have an accurate progress bar when ... by Anonymous Coward · · Score: 0

      I can't believe I had to scroll so far down the page to find this.

    2. Re:We will have an accurate progress bar when ... by tlambert · · Score: 1

      ... when we solve the halting problem. I'm not entirely joking. The main problem with progress bars is that, quite often, it is not possible to accurately estimate how much time is needed to complete a problem (i.e. for the program to halt).

      Disallow looping constructs in your installer programming language so that this isn'y an issue. The "D" language for DTrace managed to be able to do this for event tracing.

      Personally, I would also insist on hard real time, a rate monotonic scheduler where you can dedicate a percentage of available compute resources to the task, and drivers which have been written to run in bounded time, along with hard disks which support I/O scheduling through their caches (sorry, you might have to go back to useful hardware capable of doing that, like SCSI III).

      If you involve the network, don't do the install and the download at the same time; you don't want to anyway, since interpreting partial file contents prior to verifying the entire file is how most Outlook exploits have historically worked: it's just not a goo idea.

      It's all doable, but it's generally not worth doing just to ensure that you get to know to be back from your coffee break in 6 minutes rather than 9 minutes.

  76. Nate Silver by RonVNX · · Score: 1

    You want an accurate progress bar? Hire Nate Silver to design it.

  77. The 99%... by DavidD_CA · · Score: 4, Insightful

    The public opinion of the Progress Bar would be considerably more favorable if programmers would simply treat 100% as if it were 75%.

    In other words, do all the stuff you have to do, measuring progress and whatnot, but when you're actually at 80%, report yourself at 60%. Likewise, when you're at 95%, say you're at 70%.

    Then, only when you really are completely finished, you jump from 75% to 100% in under a second.

    Complaints gone.

    --
    -David
    1. Re:The 99%... by proca · · Score: 1

      this is actually a good idea from a developer point of view. I'm going to use that philosophy for the next progress bar I write

    2. Re:The 99%... by gl4ss · · Score: 1

      I see you've worked for Microsoft(plenty of MS installer progress bars work pretty much exactly like that, just mark the last cleanup/whatever action to take 25%).

      that doesn't change any problems with it though. it just means your user is going to start treating 75% as 99% and complain that it's inaccurate in that portion as well and lies about the time remaining prior to that too.

      --
      world was created 5 seconds before this post as it is.
    3. Re:The 99%... by quacking+duck · · Score: 1

      The public opinion of the Progress Bar would be considerably more favorable if programmers would simply treat 100% as if it were 75%.

      In other words, do all the stuff you have to do, measuring progress and whatnot, but when you're actually at 80%, report yourself at 60%. Likewise, when you're at 95%, say you're at 70%.

      Then, only when you really are completely finished, you jump from 75% to 100% in under a second.

      Complaints gone.

      Or not...

    4. Re:The 99%... by LateArthurDent · · Score: 1

      The public opinion of the Progress Bar would be considerably more favorable if programmers would simply treat 100% as if it were 75%.

      In other words, do all the stuff you have to do, measuring progress and whatnot, but when you're actually at 80%, report yourself at 60%. Likewise, when you're at 95%, say you're at 70%.

      Then, only when you really are completely finished, you jump from 75% to 100% in under a second.

      Complaints gone.

      Hell no.

      The most important thing in a progress bar is to be accurate. It's not to make the user feel good, it's to tell the user how much has been done.

      I threw a goddamn fit when I saw that Microsoft recommended in the msdn documentation to start progress bars at 10% "so the user can feel something has happened right when you start out."

    5. Re:The 99%... by DavidD_CA · · Score: 1

      Normally I'm all about accuracy, but a progress bar that shows 0% for some time is quite disconcerting.

      It makes me think the process has either halted or is waiting for me to do something, especially because it's right at the start.

      I'd much rather see it at 10% right away.

      And if you consider the time it takes the user to download the installer, click through the launcher, etc, then they're probably more than 10% along anyway.

      The user's experience is more important to the user than the accuracy of a progress bar. If they leave the process feeling good about what happened, you've done your job.

      I'm not advocating for a completely random indicator and I believe the time between 10% and 75% (or 90% if you prefer) should be as accurate as possible. But the inside and outside 10% should be gimmies for various reasons.

      --
      -David
    6. Re:The 99%... by LateArthurDent · · Score: 1

      It makes me think the process has either halted or is waiting for me to do something, especially because it's right at the start.

      That's what spinners are for. It's perfectly reasonable to give the user some indication that you're still working. You should also tell them what you're working on, if possible. The difference between a spinner and a progress bar is exactly the information on the progress, and when you start at 10%, you're lying to them. Because the reasonable assumption is that however long it took to get to 10%, I can estimate that 9x that and the whole thing will be done.

      I agree with everyone on this thread that you can't create a perfect progress bar that gives you a perfect picture of how much has been done and therefore how long it will be before it's finished. But it's our job to make it as accurate as possible. That includes profiling actions to determine how long they take relative to each other, so if you're doing action A and action B, and action B takes twice as long as action A, you're not at 50% when you finish action A.

  78. Common mistake by Anonymous Coward · · Score: 0

    A common mistake I have seen is implementing the approximate time remaining is 'work to do'/'current estimate of rate of work' - or even something a bit more fancy involving moving averages etc, without considering that work to do and rate of work are usually not single numbers.

    File transfers often calculate their approximate time remaining in bytes remaining/bytes per second - when in practice the work to be done is bytes remaining, rounded up to the nearest multiple of sector size for each file + per file overhead. And the speed of transfer might be 80MB/sec but the per file overhead is 10ms. (Or it could be even more complicated when you involve network transfers or when there is parallelism involved.)

    If you are doing a large transfer consisting of many files, and early files are large in size and so the MB/sec is the dominant limitation. So based on the bytes/bytes per second the progress bar gets an estimated total time remaining of 5 minutes, until you hit the thousands upon thousands of tiny files and until the progress bar throws away its previous estimate of rate of work based on the large files the estimated time remaining doesn't change much and so the whole thing appears to stall when there was never any chance of it completing in 5 minutes. If instead the progress bar estimates the time remaining originally based on total size remaining / transfer rate + number of files remaining / per file overhead - then the original estimate is much higher and any deviations in reporting are reduced to the environmental factors that were originally quite rightly tried to be handled using moving averages etc.

    Basically a poor system description results in a poor simulation results in a poor prediction - no matter how much fancy averaging and statistics you try to apply over the top.

    1. Re:Common mistake by PlusFiveTroll · · Score: 1

      > If instead the progress bar estimates the time remaining originally based on total size remaining / transfer rate + number of files remaining / per file overhead - then the original estimate is much higher and any deviations in reporting are reduced to the environmental factors that were originally quite rightly tried to be handled using moving averages etc.

      That will give you a better average for sure, but it's still hard to get a 'good' average because 'per file overhead' can change dramatically dependent on where the file lands on the (spinning) hard drive. Add some fragmentation in there (which you may not have had to deal with at the beginning of the install) and things can drag out even longer unexpectedly. If you take the system IO overhead and multiply it by some made up number like 10 (100ms per file) you'd probably get closer to what occurs on the operating system (say if you're logging while writing these small files)

      Very small changes effecting the IOPS when writing small file can lead to huge differences in the time to finish.

      Did i mention I like SSDs with 20,000 IOPS : )

  79. as a programmer by slashmydots · · Score: 1

    The #1 things I focused on in college programming classes were AI helpfulness on input validation and accurate progress bars. I basically mixed a hybrid of retroactive total time vs data processed mixed with anything that would throw that off while benchmarking like stops and gaps in data while looking forward to the total count and removing any initial startup time from the equation as well. It's actually REALLY, REALLY accurate to do it that way and took about 3 minutes and maybe 5 lines of code.

    1. Re:as a programmer by Anonymous Coward · · Score: 0

      How complex and varied were the test programs? How many different machines did you test on?
      While doing something once off for a specific task in college is great doing it consistently in the real world under multiple environments and for complex operations is a tad different.
      Some progress bars I have written (using techniques like yours and other more complex techniques) are usually highly accurate while for other cases they are not, an example of one that is not is fetching huge amounts of data from a database over the internet, there are just too many different scenarios to consider here. For starters on fast networks with slow CPUs it is CPU bound while on fast CPUs with slow networks it is network bound, so in effect that is two totally different sets of logic, but then you have further issues, often it alternates between being CPU and Network bound at various points, then you have the problem that as you proceed queries on the database side may become increasingly slow or increasingly fast, other programs might start to contend for CPU etc. etc.
      I've put a lot of work into this particular bar and still in some situations it is way off e.g. reporting 2 hours when it ends up only taking 1 hour, usually it is off by a reasonable amount reporting it will take 1:10 instead of 1 hour.

      It is important also to consider the impact the calculations themselves have, if it is CPU bound getting overly complex with the progress bar calculations adds overhead, if doing so turns a 1 hour task into a 1:15 task, suddenly being off by 15 minutes sounds like a better idea. And ironically now you need to also factor the time taken to calculate the progress into the progress calculation, so it starts to become recursive...

      Bad APIs are a little to blame for this, but most of it is because this stuff really is hard, and spending weeks coding just a progress bar does not make managment happy.

    2. Re:as a programmer by PlusFiveTroll · · Score: 1

      Just add in a single query that isn't indexed properly on accident.

      In many ways, if programs could tie in to (windows for example) metrics from your local task manager and performance metrics on the database server, you'd have a much better idea whats going on. Oh I'm at 100% cpu usage, oh I'm at 100% local IOPS, oh the database server is at 100% cpu usage, etc.

  80. You know what I'd like to see? by k3vlar · · Score: 5, Insightful

    You know what I'd like to see more than a working progress bar? A "Cancel" button that actually stops the f*%! process! .
    I don't want to finish the sub-process I'm currently doing (which has probably stalled)... just FREAKING STOP.

    If you (programmer) want to close connections, or save the changes to the disk, do it in the background. Making me sit there for another 10 minutes while you're "cancelling..." is not helpful. I will force close your program. Failing that I will hard-reset the computer. Seriously.

    --
    Unlike porn, which yada yada rimshot hey-ooh!
    1. Re:You know what I'd like to see? by Anonymous Coward · · Score: 0

      Go for it, when you BSOD when restarting because of corrupt/incomplete registry changes then you can go right ahead and reinstall windows. Most times the cancel button DOES work, if it took ten minutes to get halfway through the install before you got your panties in a twist and hit cancel it will take just as long (if not longer) to undo what it took ten minutes to do.

    2. Re:You know what I'd like to see? by Anonymous Coward · · Score: 0

      At some point you have to check if the user pressed cancel. When do you do that? How often do you do that? The more often you check the slower the process will actually take. What if you check it once per file being copied. Then if the user presses cancel right at the start of a large transfer you'll have to wait until it's finished.

      It's all a trade off and the developer doesn't know what balance you prefer. We'll do what seems right to be the right balance for us. Though I do agree waiting for programs to respond is annoying. So my programs error on the side of more user responsiveness than performance. YOU CAN'T HAVE BOTH and trying to cancel some operations can very difficult from the developer if the program wasn't initially designed for it. It's difficult to do some many don't try, that's what "just hack it" culture gets you.

    3. Re:You know what I'd like to see? by Anonymous Coward · · Score: 0

      Oh no ! I'm a poor programmer and I do my best and now you're going to close my program ? Force close even ?! How could you ?
      I mean, I really care about that. I really do give two shits.
      Well, okay, no I don't.
      Don't bloody use my program. Ever again.

      Seriously.

    4. Re:You know what I'd like to see? by Twinbee · · Score: 1

      Reminds me of logging out of a website. Some take blinking minutes to refresh to the new page. I just close the tab when the page starts to change - I'm not interested in seeing the new page at all.

      --
      Why OpalCalc is the best Windows calc
    5. Re:You know what I'd like to see? by GuB-42 · · Score: 1

      After a working progress bar the next hardest thing is probably the "Cancel" button.
      Like with the progress bar, it often requires handling deep inside the code. Sometimes even forcing the programmer to rewrite some standard API functions.
      A typical example is copying a file : many APIs provide a way to do it easily but no way to stop it once it is started. As a result many programmers prefer to wait until the operation is complete to effectively cancel the operation rather than rewriting the "copy" function or relying on ugly tricks.

    6. Re:You know what I'd like to see? by drinkypoo · · Score: 1

      Don't bloody use my program. Ever again.

      Seriously.

      Don't worry, I won't. You're incompetent anyway. Our capitalist model says you deserve to starve. I will also tell everyone who might care about your program that it is a piece of shit, so that they don't use it either, and that happens to you sooner.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    7. Re:You know what I'd like to see? by Anonymous Coward · · Score: 0

      ...and please, PLEASE do not follow up with a confusing confirmation dialog:

      Are you sure you want to cancel?

      [Cancel] [OK]

    8. Re:You know what I'd like to see? by Hatta · · Score: 1

      A typical example is copying a file : many APIs provide a way to do it easily but no way to stop it once it is started.

      I can stop a copy immediately with 'kill -9'. Why can't your program do what kill does?

      --
      Give me Classic Slashdot or give me death!
    9. Re:You know what I'd like to see? by Anonymous Coward · · Score: 0

      I could not agree more, nothing is more gratifying than manually killing (with prejudice) a install that's stalled and the cancel button doesn't work.

    10. Re:You know what I'd like to see? by PlusFiveTroll · · Score: 1

      Better to tie the cancel button in to another thread and poll it at a fixed interval. Polling per file copy can blow up your CPU when you app runs on a SSD that gets 100,000 IOPS. I've seen programs install slower from/to a ramdisk because of programming failures of that nature.

    11. Re:You know what I'd like to see? by PlusFiveTroll · · Score: 1

      (I'm pretend posting as the AC above)

      Don't worry, I paid off the U.S. Government, the people in charge of your capitalist model. They are now telling your company that you must use Microsoft Office Shitpoint 2013 or you cannot renew your contracts.

      Thank You
      Steve B.

    12. Re:You know what I'd like to see? by craighansen · · Score: 1

      kill -9 doesn't work when the process is stuck on an I/O operation such as a read/write to an NFS or failed md (RAID) device. Plus when it happens on an md device, you can't fix the md device (such as by doing an mdadm --stop and mdadm --assemble --force) because the device is marked busy. Reboot time.

    13. Re:You know what I'd like to see? by GuB-42 · · Score: 1

      I consider it to be in the "ugly tricks" category. Obviously, you don't want to straight up "kill -9" your program. If you put a "Cancel" button, you may want to do a little bit of cleanup afterwards.
      A little better way to do this is to create another process for the "uninterruptible" operation so that you can kill it and still retain control for the cleanup. You can also use signal handlers. Unfortunately, these solutions are not always portable or efficient, or they may simply conflict with the general API design.

  81. Halting problem by Jmc23 · · Score: 1

    'nuff said.

    --
    Don't complain about syntax, grammar, or spelling. There is no.hell like input on android.
  82. Just as hard as a project plan by Anonymous Coward · · Score: 0

    Too many variables and external influences out of your control. Come back when you have solved that one.

    1. Re:Just as hard as a project plan by jones_supa · · Score: 1

      That could be solved with some kind of real-time OS with very accurate resource balancing and prediction.

      In current desktop OSes it's a wild west and the processes just step over each other's feet all the time.

    2. Re:Just as hard as a project plan by Barryke · · Score: 1

      You don't rule by depending on a rigid foundation. Being flexible is way more stable, not only if the foundation is rigid.

      --
      Hivemind harvest in progress..
    3. Re:Just as hard as a project plan by tibit · · Score: 1

      You seem to think that just because you can live in fantasyland things are going to be A-OK. The problem with current virtual memory based OSes is that they let you code like the storage wasn't there, heck, they in fact don't really let you code to account for the storage. For example, you cannot tell the OS to give your application a certain minimum (or maximum) hard drive bandwidth or hard drive transaction rate. Thus when you're running things, the OS doesn't really know that when you're playing media, that file copy operation as well as the background virus scan and filesystem's built-in defragmentation is really an afterthought and should be kept out of the way. That's just but an example. Once you start getting all this impemented properly, you end up with an operating system that has realtime guarantees of various kinds, because that's what it really is all about.

      --
      A successful API design takes a mixture of software design and pedagogy.
    4. Re:Just as hard as a project plan by tilante · · Score: 1

      Umm... neither storage nor hard drive bandwidth have anything to do with whether an OS uses virtual memory or not. Also, all modern OSes provide priority levels - now, whether people writing software for those OSes actually use the provided priority levels is another thing, but all modern OSes do have a way to inform them that the process playing media is more important than the file copy operation, which is more important than the background virus scan and defrag.

      And, as others have pointed out, so long as there are possibilities of errors and resource competition, you can't provide solid time guarantees. If a hard disk sector is going bad and the disk controller winds up having to read it half a dozen times before it gets a correct read, that's going to slow things down, no matter what your OS does. If your network provider suddenly gets a huge burst of traffic while you're downloading a file, that's going to slow down the download, no matter what your OS does.

    5. Re:Just as hard as a project plan by tibit · · Score: 1

      Process priority got nothing to do with I/O priority, never mind that the concept of I/O priority as a single number, as it is usually implemented, is broken anyway. Eventually, you're accessing data on a spinning platter, and you're either going to get it on time if you have timing requirements, or you don't care much. No general purpose OS I know of is letting anyone specify this at that sort of granularity.

      I don't get that so long as there is resource competition, you can't provide solid time guarantees. Errors are things you can't deal with, so it's a strawman: it becomes outside of OS's control. It's like claiming you can't do it because after all someone can yank the cord out of the socket. I do deal with industrial communication protocols that run on a controlled schedule and in spite of all the resource competition, things that need to happen at certain times do in fact happen that way. This extends all the way to allocation of computational and storage resources at the nodes. The storage resources are in fact scheduled based on queued data requests, so that in spite of bursts of activity, the scheduled transfers happen timely -- meaning that a read may be scheduled ahead of time if by the deadline other things would preclude it from happening. Same goes for scheduling writes, and for cache resources as well. It requires a different mindset when coding applications, but it works wonderfully, and you can keep those hard drives busy.

      --
      A successful API design takes a mixture of software design and pedagogy.
  83. Re:no, it's easy. by Dr+Herbert+West · · Score: 1

    If you're writing progress bars, I feel bad for you son.

    I've got 99... wait, 45... wait... 85 problems and being trolled ain't one.

  84. Like this? by Hamsterdan · · Score: 1
    --
    I've got better things to do tonight than die.
  85. Because, at least in my experience... by _Shad0w_ · · Score: 1

    Because generally speaking the estimated time to completion is based on knowing two things: how much "stuff" you've got to do and how long the average time to do a unit of "stuff" takes.

    When the process starts out you don't have enough data to actually come up with a sensible average, so the time will bounce around; as it progresses it should settle down a bit, assuming that each unit is actually approximately the same in complexity, which is an assumption that isn't always true. If you run in to a unit which takes an inordinate amount of time compared to other units your estimate goes out of the window. Compounding this is you probably don't update your ETA until after each unit has been processed.

    Also the more time you spend worrying about your ETA is more time you spend not actually doing "work", so you potentially increase the amount of time it takes to complete the real task - you might not notice this on small batches, but it can become more noticeable on larger ones.

    --

    Yeah, I had a sig once; I got bored of it.

  86. We will have .... by PPH · · Score: 5, Funny

    ... a functional progress bar in 5 years.

    No, wait. It seems to have stalled.

    --
    Have gnu, will travel.
  87. They can't even manage animated dancing girls! by Lacrocivious+Acropho · · Score: 1

    You think *your* examples are bad??! Well, brace yourselves for *this* horrendously inexcusable progress bar failure!! It has been *FIVE YEARS* since this perfectly reasonable and absolutely vital functional operation was requested: https://trac.transmissionbt.com/ticket/1000 ... and *FIVE YEARS!* later, not a single release candidate has been forthcoming from the slacker devs of the Transmission project! It is an outrage! How much longer must the Entitled End Users of the world suffer at the idle hands of callous and indifferent devs??!! Pardon me, I must go and lie down before I dehydrate myself from the righteous mouth-frothing of the oppressed.

    --
    Twice as crazy as I would be if I was half as crazy as I am.
  88. Re:Cost Benefit by RedHackTea · · Score: 1

    Progress bars do not make sequences of actions complete any faster. In fact, they make them slower.

    Exactly, most people don't get this. This is why I use mv or rsync (without --progress) instead of a file manager at times, else it reads the whole thing in to determine size first. Some commands like tar allow you to see progress but without a total; this way you get pseudo-progress without the initial wasted read. It will output per file or per 1MB written, etc.

    --
    The G
  89. The Developer did not Know the Progress by fatp · · Score: 1

    The answer is simple: the developer responsible for the progress bar did not actually know the progress she program the progress bar.

    During development, getting the work done has a much higher priority than the progress bar. After development, fixing functional bug has a much higher priority. After bug fixing, launching is has a much higher priority. After all, there are priority 2 or 3 bugs, who will care priority 4 bugs?

    BTW, the progress bar I liked most reached 30000% and the job still not complete.

  90. It's a Prediction of the Future by dcollins · · Score: 3, Insightful

    "How come after 25 years in the tech industry, someone hasn't worked out how to make accurate progress bars? This migration I'm doing has sat on 'less than a minute' for over 30 minutes. I'm not an engineer; is it really that hard?"

    Yes, because all progress bars are inherently a prediction of things that will happen in the future. If there is any error condition, unusually large blob of data or weirdly structured hard drive to read from, varying bandwidth bottleneck, fritzy peripheral not responding as expected, etc., etc. times a million, then the unusual event will make the prior prediction incorrect and look silly in retrospect. As long as there is any "if-then" clause or error handling in the branches in the system, then the unexpected can happen and make the prediction (progress bar) invalid.

    It's analogous to weather prediction. It can't be perfect, it's an extrapolation, but people will always complain about it.

    --
    We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
    1. Re:It's a Prediction of the Future by Anonymous Coward · · Score: 0

      Also each progress bar is different. Suggesting that someone can figure out the magic way(tm) to make anaccurate progress bar and that they will all then be accurate is absurd.
      In reality *some* progress bars are already mostly accurate (these are likely simple cases where it was easy to solve) for many other cases they are not accurate, solving this requires a unique and often complex or impossible solution for every single progress bar.

  91. eli5 answer by Anonymous Coward · · Score: 0

    Ever start something you've done a million times (say brushing your teeth) that you know is only going to take 5 minutes, then get interrupted partway through (say your faucet handle breaks off), and suddenly, 5 minutes is an hour?

    This is effectively what happens to the computer. The developer knows that under normal conditions something will only take a set amount of time, but this was on his machine running his programs. Users computers are vastly different in terms of hardware and software, and as such, there are many different things that can go "wrong."

    Say you're installing a game, but it takes too long, so you watch a movie (on your computer). For some reason both your movie player and the installer need to use a file on your computer sporadically. Due to this files importance only one program can use it at a time, so when one program is using it the other has to wait. If the movie player has priority the installer will need to wait for however long the movie player locks the file, and vice versa.

    Due to the seemingly random time spend waiting on the movie player the installers progress bar will appear to behave "badly," when in reality, if you removed all the time the installer waited, the progress bar would be moving along nicely.

    There are many finite resources in a computer that programs might need to wait for while another program is using them. Since a modern computer has a lot of programs running at one time there are many opportunities for this to occur.

  92. Re:Cost Benefit by girlintraining · · Score: 1

    I see logic like this all the time, but people seem to forget that they drive to work everyday just fine -- and that's a linear process. You can't predict what the other drivers will do, there may be an accident, you may be late... But you're going to drive the same distance every day.

    People are getting hungup on measurements of time, and progress bars, like life, is based on distance. Whether it's number of operations, or number of miles, the principle is the same. Progress bars that move backwards is stupid: It means the programmer is attempting to measure the wrong thing.

    --
    #fuckbeta #iamslashdot #dicemustdie
  93. TeraCopy does it for windows by Anonymous Coward · · Score: 0

    Exactly the reason there's a tool called TeraCopy which does this the way it should be done. I'm not sure how things are on linux or macs, but windows progress bar has remained terrible all the while and TeraCopy is what I recommend around.

  94. Re:no, it's easy. by jones_supa · · Score: 1

    You actually have to flip the variables around.

    progress = current / total

  95. Having written a few installers by thediv17 · · Score: 1

    They take a really really really long time to debug. So any extra bells and whistles will be really really expensive to write. I suspect that the same applies for other long running processes.

  96. Re:no, it's easy. by muridae · · Score: 1

    he started with 99 problems and interrupt 0x00 is one.

  97. Mine was accurate by Skapare · · Score: 1

    Back when I made a kit for building bootable ISOs that worked on both x86 and Sparc, the first stage initrd code loaded initramfs from another file. It included a progress bar with 128 steps (64 columns of '=' characters with '-' at the end for one step) that was tied exactly to the true progress, because the same loop was copying data of a known size and outputting the bar. In that case it is easy.

    --
    now we need to go OSS in diesel cars
  98. Re:no, it's easy. by swilde23 · · Score: 1

    You actually have to flip the variables around.

    progress = current / total

    You actually have to flip the variables around.

    progress = current / total

    But this doesn't address the issue of why bars are difficult.

    Saying "take the current" or "take the total" might be easy if you're just talking about moving a fixed number of files around. But even then, do you want it to be the file count (easy) or the total size (not quite as easy to interpolate between unless your OS gives you progress on each file's copy progress). Now introduce any interference to either of the devices (source, destination). Oh, you want to look at a webpage on the same computer while the files are copying... well, the browser is now caching to disk, that's going to take up some of the IO (not to mention how interesting multithreaded processing can be).

    And all that for a simple file copy progress bar.

    Now, let's imagine that it's an installer that has to copy files from both an optical media source, the internet, and to a hard-drive... and then execute some cpu bound tasks.

    I think we should just make them all throbbers/spinners/whatever you want to call them, and ignore the people who complain. /rantoff :D

    --
    There are 10 types of people in the world. Those that understand this sig, and those that beat up people who do.
  99. Web Hamster by Anonymous Coward · · Score: 0

    It's remarkably easy to do so, as evidenced here:

              http://stackoverflow.com/questions/6392516/how-do-i-keep-a-list-of-only-the-last-n-objects/6392609#6392609

  100. You can't look in the future. by Anonymous Coward · · Score: 0

    You can only estimate what's ahead of you. And you can't always predict how long the subtasks will take. This is affected by many items which are out of your control, e.g. network throughput, amount of cache, amount of main memory (swap destroys progress predictions!).

    Of course it can be done better than Microsoft's famous last 1% which took 99% of the time, but even this phenomenon can be explained in many ways: One that I experienced quite often is a disk cache flush at the end of an install process, which can really take ages.

  101. The point of the progress bar by Yaur · · Score: 1

    The point of the progress bar is NOT really to measure progress. It's to tell the user if the software is working (and they should continue exercising waiting) or if it silently failed and they should end task the broken application. Until either users start exercising infinite patience or all developers start writing defect free software this will be required.
    Progress as actual progress (ie. predicting what you are going to do with your internet connection while you are waiting for a download to complete) is not possible, but not required to convert a "crash" into an annoyance. That said, on my current project the first step of creating the progress bar is to estimate how long the process will take but this is mainly because some tasks can take days and users get antsy if the progress bar updates less frequently than every 1-2 minutes.

    1. Re:The point of the progress bar by Anonymous Coward · · Score: 0

      The point of the progress bar is NOT really to measure progress. It's to tell the user if the software is working (and they should continue exercising waiting) or if it silently failed and they should end task the broken application. Until either users start exercising infinite patience or all developers start writing defect free software this will be required.

      In the old days, one could look at the HDD LED or at the CPU load monitor to see if anything was actually happening in the running process.

      Now, modern operating systems go nuts with the "optimization" tasks which execute automatically and without warning. This makes it difficult to get any useful information out of the status indicators. HDD LED is blinking? Is it because the program you are using is busy accessing files from disk, or did the OS decide that now would be a good time to index your "desktop"?

    2. Re:The point of the progress bar by twrake · · Score: 1

      Theme #1, Programmer v. the LUSERS

      All progress bars are doing great compared to the LUSERS.Simple put a progress bar is a piece of UI candy to amuse the LUSERS,

      You are not supposed to cancel installs until the installation is complete. When LUSERS see the computer doing apparently nothing they try the universal reboot the system command. This leaves the system in an inconsistent state. Better give the LUSERS a few cookies now and then.

      Theme #2, Congress must act

      Lets get Congress to pass the âoeReliable Progress Bar Actâ, A Bill to supply the computing public will accurate time estimates on software installation (and for other purposes.)

      Theme #3, Accurate progress bars have been patented and that patent is now owned by Bill Gates.

      Theme #4, Progress Bars are always accurate on Beowulf Clusters

      Theme #5,
              1) Make em watch the bar, 2) Sell Ads 3) Profit!

    3. Re:The point of the progress bar by drcheap · · Score: 1

      In the old days, one could look at the HDD LED or at the CPU load monitor to see if anything was actually happening in the running process.

      I used to just listen to the clatter of all those seeks and know that the system was doing something at least. Now SSDs have even ruined that!

  102. Well as a developer... by proca · · Score: 1

    And I'm sure I'm not the only one to have said this by now, but adding a very accurate progress bar is a lot of f'ing work, with all the multi-threading and actual decisions on where 1% progress actually is when you're running through code. Should we use just the use of the line of code divided by the total lines? What do you do if the progress bar can actually slow down the processing in the first place? Would the user rather wait longer and see a progress bar or just get it over with? Programming is an art form in many ways. There is no formula to this stuff.

  103. Statistics by xenobyte · · Score: 1

    A usable progress bar is based on basic statistics. Given that we know where we are and when we're done, it's just a matter of estimating when we get there. Now, it can be proven that all factors affecting the progress can be considered static after enough samples have been collected, it's just a matter of applying statistics on the last n otherwise identical chunks of progress. It is of course important to do it right, i.e. to throw away samples that are too far from the meridian/norm, but you won't know this until you're some samples further along. But if you do it right, and circumstances don't change, your progress and calculated ETA will be spot on.

    Way back on the old shareware days I created many progress bars from scratch, complete with ETA, and they were rarely off by more than a second or two for long jobs (several hours), and spot on for small jobs.

    --
    "For every complex problem, there is a solution that is simple, neat, and wrong." -- H.L. Mencken (1880-1956) --
    1. Re:Statistics by Anonymous Coward · · Score: 0

      Example, you are fetching batches of queried data from a database in chunks of 50 rows at a time, as the job progresses each query takes slightly longer (for reasons on the database side we won't go into right now)

      How do statistics of previous averages help you now? The average keeps going up and pushing the time back...
      So now you decide to get smarter and have it calculate if queries get progressively slower and try to adjust for it, but halfway through the operation the database speeds up again (for reasons we won't go into again) - Now your prediction is way too high and has to drop back....

      The above behaviour is still horribly simplified and will vary depending on the database server, the machine in question etc. etc.
      Yes, people can probably do a better job of progress bars (if budgets actually allow for it) but pretending it is simple statistics and easy is naive and shows a lack of knowledge of the problems at hand. Furthermore, while users complain about progress bars do you think they would be willing to pay more for a program with accurate progress bars? My guess they would bitch and cry about how expensive the program is and refuse to pay.
      Progress bars are inaccurate because doing them right is difficult, time consuming, expensive and sometimes impossible, and because most users are cheapskates.

  104. The progress bar will be 100% accurate when... by Anonymous Coward · · Score: 0

    The progress bar will be 100% accurate when the call centre *you* call answers your question fully and completely the first time, when they answer the call on the first ring every time (no waiting, no one is having lunch or coffee, ever), and any shipments are all on time, accurate and correct 100% of the time. With precision, what will the weather be where you live for the next 100 days? Oh, and while I'm at it, what will be the hot stocks on the stock market for the next week, and when can I expect the next major earthquake, how strong will it be exactly, and where will it be? After you solve all of that, (everything works like clockwork), then the meter will be exactly perfect. Would you rather have them lie to you and show you that its finished when its not? When 'the other end' stalls (for any of 1,000,000 reasons), you complain about the bar on this end?

  105. Cat got tongue? (again) by Anonymous Coward · · Score: 0

    A progress bar is like a light in your car. A program or mechanism light up it, but the light by itself cannot differentiate why is on or off. It just animate and runs expecting that you understand what happens.

    Why progress bars are bad? Coders use generic widgets, add some values place it on some part of the screen and game over. Or write code expecting that it will never fail (hardware, bandwidth, file errors). And when something happens the small progress bar cannot say a thing since nobody programmed it for that.

    Some old MSDOS, UNIX and LINUX installers went with easy progress bars that were accurate:

    ">Installing 100 files now." ...
    50% Done. Installing. ...
    ">File 86 has an errror. Retry or Abort?"
    or
    "Install complete 100% 100 of 100 files."

    For that you need a program that send info to the progress bar *when things works* and *when things doesn't work*. That means more code, more testing and more time. So why they just put the widget and forget it and will have a punny progress bar always.

    Funny bit: Attempts to use ASCII for simulate a progress bar ends with "Filter: Use less junk characters" So even slashdot consders progress bars as junk! LOL!

  106. Time dilation effects? by fahrbot-bot · · Score: 1

    This migration I'm doing has sat on 'less than a minute' for over 30 minutes.

    Are you or your system in close proximity to a black hole?

    --
    It must have been something you assimilated. . . .
    1. Re:Time dilation effects? by NeverVotedBush · · Score: 1

      I think his computer is running so fast, time slows down for him.

  107. Ooo 'e wants a progress bar! by Greyfox · · Score: 2
    We'll be sure to take a resource off of developing the application we're selling and get him right on that! Oh, no it's quite all right, the schedule's slipped 14 times since we started, but the schedule can just take one for the team, can't it? After all, you have to know how long that thing you're going to do ONE TIME is going to take! It's not like your computer can do TWO THINGS or anything! We wouldn't expect you to do something ACTUALLY PRODUCTIVE rather than watching our progress bar!

    Is why.

    Hmm. I wonder if I wrote an app that was nothing BUT progress bar, if people would go for it.

    Some developers have already come to the conclusion that installation is a prime advertising timeslot. So even if anyone was inclined to write a progress bar, it'll still end up ad-laden and annoying.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    1. Re:Ooo 'e wants a progress bar! by Anonymous Coward · · Score: 0

      Check out ProgressQuest. Nothing but progress bars. Awesome gaming at its best.

    2. Re:Ooo 'e wants a progress bar! by thegarbz · · Score: 1

      We'll be sure to take a resource off of developing the application we're selling and get him right on that! Oh, no it's quite all right, the schedule's slipped 14 times since we started, but the schedule can just take one for the team, can't it? After all, you have to know how long that thing you're going to do ONE TIME is going to take! It's not like your computer can do TWO THINGS or anything! We wouldn't expect you to do something ACTUALLY PRODUCTIVE rather than watching our progress bar!

      Is why.

      And this is why companies actually need to hire interface and human interaction experts. Developers have no clue on what is important for end users, how end users use products, or what it means to make a sleek looking program. They are happy to simply churn our functional but UGLY and barely usable software. But hey it works and deadlines right?

      If one thing is to be learned from iOS it's that users value a good experience more than features and function. If there's one thing we've learnt from Windows 8 is that not all human interaction experts are.

    3. Re:Ooo 'e wants a progress bar! by the+eric+conspiracy · · Score: 1

      Interface and human interaction experts don't have any clue either. Lot's of education, sure but it's too generalized. Most computer software has a specific target audience that has quirks.

      The only way to know for sure is get the product out and collect feedback.

    4. Re:Ooo 'e wants a progress bar! by Anonymous Coward · · Score: 0

      Hmm. I wonder if I wrote an app that was nothing BUT progress bar, if people would go for it.

      Yes. Yes, they would: http://progressquest.com

    5. Re:Ooo 'e wants a progress bar! by Anonymous Coward · · Score: 0

      I wonder if I wrote an app that was nothing BUT progress bar, if people would go for it.

      It's been done in the form of a video game. My favourite MMORPG: Progress Quest.

    6. Re:Ooo 'e wants a progress bar! by mangobrain · · Score: 1

      Hmm. I wonder if I wrote an app that was nothing BUT progress bar, if people would go for it.

      Like this one, you mean? http://progressquest.com/

    7. Re:Ooo 'e wants a progress bar! by studog-slashdot · · Score: 1

      Hmm. I wonder if I wrote an app that was nothing BUT progress bar, if people would go for it.

      Yes, yes they will: http://progressquest.com/

  108. Because... by Zemran · · Score: 1

    ...most programmers seem to be far more interested in more impressive things like making sure whatever you are doing is in the wrong language and you cannot find any way of returning to the English language that you have set on your computer - (not that I get really pissed off with that)

    --
    I love stacking my barbecues in the shed at the end of summer - you can't beat a bit of grill on grill action.
    1. Re:Because... by Rob+the+Bold · · Score: 1

      ...most programmers seem to be far more interested in more impressive things like making sure whatever you are doing is in the wrong language and you cannot find any way of returning to the English language that you have set on your computer - (not that I get really pissed off with that)

      The easiest way to do that is to make sure that the language selection interface always translates/localizes all the language names into whatever the application is working in right now. That way the user is trying to guess what "English" looks like in Tagalog or how "français" is rendered in Urdu. You could make a game out of it!

      --
      I am not a crackpot.
    2. Re:Because... by Zemran · · Score: 1

      I guess that you are either being sarcastic or you do not travel much as most web sites do that. Even big names.

      The ones that really piss me off are people like Google when I am already logged in and they could just look at the preferences I have set rather than go to some search of IP addresses to make a guess at where I am on the planet and then get that wrong. If I log into Yahoo Messenger, messenger will work fine but it will also open 2 other windows with an impressive array of unintelligible gibberish in some foreign script. Laos is a great country for this as older OSs (like XP) cannot render their script and most web sites get completely confused about which language to offer.

      --
      I love stacking my barbecues in the shed at the end of summer - you can't beat a bit of grill on grill action.
  109. the truth by Anonymous Coward · · Score: 0

    they just spent countless hours writing all the logic, why waste countless more hours writing an extremely accurate progress bar just so you could know if you have enough time to grab another mountain dew before your bonzi buddy warez is done installing. but progress bars that go backwards have NO excuse, they're just fuckin with you.

  110. I have tried to solve this.... by Anonymous Coward · · Score: 0

    It's not a simple problem, I've tried to fix these a couple of times with mixed success.

    For simple file copy, the standard total count of files, increment by 1 after each file is copied suffers from the obvious small files update the progress bar quickly, while the progress is slow for large files.
    So I calculated the total bytes instead for the progress bar, and instead of copying 1 file at a time, I copied 100 bytes at a time, and it was very successful to a point.... unfortunately although accurate it was exceptionally slow, unusably slow, so the standard method was good enough to provide feedback that it was working.

    A second attempt actually worked quite well, I wanted an estimate of how long a series of single row updates to an sql database would take.
    The simple count total records and update progress after each impacted the performance too much.

    So the solution I came up with was to total how many records were updated per second for each second over 5 seconds, I then took the average records updated per second and used this to calculate an estimate. Of course no progress was shown for updates that completed in under 5 seconds, and no progress showed until after 5 seconds.
    However after that it was pretty good, the average over 5 seconds allowed for slight changes in performance, and if the updates took longer near the end, the progress had been adjusted slowly over the whole process so it never stops, and was reasonable accurate near the end.

    However the biggest success was, as the main reason I wanted to know how long the update would take was so that at 12pm, I could tell if the update was going to be 10mins or 60mins, if it was going to take 60mins it might as well be lunchtime!!

  111. Count vs. Percentage by Anonymous Coward · · Score: 0

    This is why, when I can, I always display a count along side a progress bar vs. a precentage. For example:

    123/1523

    as opposed to:

    23%

    I think the percentage implies a certain monotonic advancement, whereas a count doesn't easily map onto our units of time.

    Just my $0.02

  112. scheduling failure is such... by mschaffer · · Score: 1

    Scheduling failure is such a deeply rooted problem in software engineering.
    Just read The Mythical Man-Month.

  113. In some cases impossible others not worth it. by detain · · Score: 1

    Its generally impossible to accurately predict write and read speeds on a drive, only average speeds. This is even moreso when the reading or writing is done over a network. Beyond that updating a progress bar too often takes away processing power from what is actually installing or being done on the system. A single progress bar often represents many tasks being done in the background. If your first tasks are say installing files to a hard drive, you can semi accurately guage a progress and a completion time, but if at the end you are also doing some cpu intensive calculations like post install optimizations, its hard to tell how long they will take until they have already been done without slowing down the install by benchmarking the processor before the install begins.

    --
    http://interserver.net/
    1. Re:In some cases impossible others not worth it. by gnasher719 · · Score: 1

      In this century, updating progress won't slow down the actual progress, unless the code is written by a total moron.

  114. Re:Cost Benefit by Common+Joe · · Score: 1

    I think this is not an "accurate progress bar problem" in as much as it is a "communication problem". Programmers (in general) don't know how to communicate with users. A lot of times, we go with a tried-and-true method (like the progress bar) that falls down on its face in a situation like you propose. The progress bar has its place and is very useful (even if it is not progressing at a uniform rate in time). It's the communication to the user that sucks.

  115. Yep by Anonymous Coward · · Score: 0

    Depending on the process, yes, it can be difficult or impossible to implement an accurate progress bar. It requires an accurate estimation of how long a process will take. Often this is a pie-in-the-sky guess, for many reasons, including but not limited to:

    -The sheer complexity of modern software, which is written on top of dizzyingly deep layers of abstraction, means that higher-level code that does things like display progress bars often has no knowledge of underlying processes like memory, disk, and network I/O operations on lower levels like bits, bytes, blocks, and packets. The program will simply tell the OS to "take data from here, and put it there", and then wait for the system to complete the task. Even when a mechanism is in place to have the underlying code report on the progress of the process as it goes, it adds complexity by requiring programmers to handle things like concurrency which may otherwise be non-issues, and doing so often can negatively impact the speed of the process.

    -Many relevant factors are simply entirely unpredictable. Just a few examples include network conditions, other processes consuming fluctuating amounts of system resources, hardware and software buffers and caches as they fill/flush/thrash/etc, systems that throttle performance based on power usage and system temperature, VMs which have all of their guest OS's complexity on top of the host OS's complexity, and known and unknown bugs and peculiarities in the seemingly endless number of libraries, interfaces and drivers involved in accomplishing any given process.

    -If a marginally accurate estimation is possible for a particular step of a whole process, there can often be several steps involved, with very different performance characteristics. If your whole process has three steps, and step 1 takes 5 minutes, doesn't mean that step 3 can't take 5 years, and you may have no way of knowing that until after you begin step 3.

    -The nature of the data you're handling can have a large impact on the speed of the process. For example copying a collection of files will usually go faster when it hits large, contiguous files, but slower when it hits a larger number of smaller-sized or more fragmented files. Or sending data over a compressed network connection, which will go faster when the data is more structured, repetitive, and thus compressible, vs less-compressible like pre-compressed or chaotic data.

    In spite of all of these problems, a better guess could be made in most cases, but the result is almost never worth the required effort and added complexity. Given this very low cost-to-reward ratio, spending a bunch of time tweaking your progress bars usually takes a back seat to fixing critical bugs and implementing exciting features, for reasons like preference, practicality, and profit.

  116. it would make it take longer by locopuyo · · Score: 1

    It would negatively affect performance to be more accurate in many cases.

    In a program I made it took a playlist and copied over all of the files to a specific folder.
    These files were varying sizes and from varying folders and could even be from different hard drives.
    For the progress bar I just used (files copied)/(total files).
    You could have songs that average 5MB but have some sort of megamix mp3 that is 300 MB, and maybe some sound effects that are only a couple KB. The progress bar isn't going to be very steady with inconstant file sizes.
    If I wanted to be more accurate I could have looked at the size of each file, but that would take extra time because the program would have to read the filesize of each file. It would slow the transfer over a lot and it just isn't worth showing a more accurate progress bar for that.

    Even if it did that hard drive seek time varies depending where the file is and files can be fragmented to varying degrees and you can use your hard drive for other things while it is running and a crapload of other variables.

    1. Re:it would make it take longer by Rob+the+Bold · · Score: 1

      It would negatively affect performance to be more accurate in many cases.

      Doesn't having the user kill your application or reboot the machine also negatively impact performance?

      --
      I am not a crackpot.
  117. 100% by Anonymous Coward · · Score: 0

    I love them progress bars that go smoothly up to 100% and then sit there for few minutes before anything happens!

  118. Simple solution by DerPflanz · · Score: 3, Insightful

    Show progress of the work, not the time. You never know what other things the machine is doing, and is better to give no estimate than a bad one.

    And don't suffice with a bar, also provide information on what the process is doing.

    --
    -- The Internet is a too slow way of doing things, you'd never do without it.
    1. Re:Simple solution by Anonymous Coward · · Score: 0

      You can estimate time left based on number of tasks completed over time taken x number of tasks remaining. Problem with downloading websites, was that the download http function didn't generate callbacks over the progress made.

  119. Re:no, it's easy. by MadKeithV · · Score: 1

    I think we should just make them all throbbers/spinners/whatever you want to call them, and ignore the people who complain. /rantoff :D

    My solution is even less work: do nothing, and ignore the people who complain ;-)

  120. Synchronicity strikes: Apple patent by Onkel+Ringelhuth · · Score: 1

    Apple just got a patent on a solution (for a specific case): Progress indicator for loading dynamically-sized contents.

    1. Re:Synchronicity strikes: Apple patent by BasilBrush · · Score: 0

      After hundreds of comments here saying that good progress bars are impossible, it'll be funny if Apple's cracked it, and next week everyone here claims their solution was obvious.

  121. A few years ago... by toolbar · · Score: 1

    we developed trading software for a customer that implemented an extremely simple algorithm to decide between buying/selling stocks. Each calculation took less than a millisecond.

    Of course this wasn't very impressive. Something that calculates so fast can't be worth anything.

    So about half of the project's development time was spent on creating a realistic (that is: unpredictable, jerky) progress bar that created the illusion of a complex analysis taking 30 seconds or so. :-)

  122. How to measure progress? by prefec2 · · Score: 1

    To measure progress you need to be able to identify single steps. However, that is not suffice. If only allows you to find out if there is one more step to do or you are finished. In such situation most programs show a bar bouncing back and forth, show a turning wheel or something similar. If you also know that there are N steps to do you could count steps and calculate how much of the task is actually done and show a percentage.

    To show users how long it actually will take you have to measure time for every step and estimate that the rest of the steps take the same amount of time. However, it is seldom the case that an operation takes exactly that much time as the previous operation. Even if you copy images, which are all merely the same size. In the beginning the cache will speed up transfers, so you might get lower transfer times, then the cache is filled and more time is required. A background process, for example you e-mail program, fetches new mail. Suddenly the transfer capacity shrinks for short time delaying the image transfer.

    Still copying measures are in most cases pretty good. But that is a simple task. In other cases, like installing something or processing something along a data-driven workflow, might not only incorporate equally shaped steps, it might include different tasks, which are comprised of different step which may require different amounts of resources. To make it worse the number of steps in sub-task B might be determined by the result of sub-task A. However, there is now good way to calculate an estimate for B on the number of steps of A.

    As you can see, it is not that easy to calculate the total size or time required for a task. And most software developers do not go into the topic to find out. One approach would be to calculate I/O relationships (which fails when there are databases involved and you do not know how much data there can be in at the beginning), like X input record cause Y output records, complexities, like this operation is O etc. Also you could use past progress pattern to estimate future progress pattern (which would not help for progress bars on installers).

  123. Priorities by metamarmoset · · Score: 1
    To be completely accurate, the software would have to run full benchmark tests on the system to properly estimate disk speed, memory access speeds, processing power (for different classes of operation), and network transfer rates (also being able to predict when lag will occur, or the online server is likely to go down.)

    Once it has this info, then it needs to determine what other processes will be running and what resources they are likely to be using.

    From this, the software can do some complex statistical analysis and determine that it will take 146 seconds, with a standard deviation of 8 seconds and start displaying a fuzzy, yet highly accurate peogress bar, but the user has sadly already terminated the process, wondering why the computer has been unresponsive for the last 10 minutes, whirring and clicking alarmingly...

    Software 2.0 needs to have a progress bar on the progress bar estimation progress.

  124. Solved Ages Ago by ae1294 · · Score: 3, Funny

    This problem was solved a long time ago... I still wonder why people don't know how to code a proper progress bar...

    HOWTO:

    Setup bar, value set to 0%
    Create link-list of all files to transfer with their size in blocks, zeroed time in msecs, & Boleyn value for iftransfered.
     
    Transfer available buffer * 2, update link-list times for each file transferred and mark iftransfered true. Use following file selection method from link-list choices:
     
    Rand(Total files).
    iftransfered = True then +1 until false or (Total Files) reached.
    If (Total Files) reached then -1 until all files transferred = True.
     
    Calc buffered transfer & unbuffered transfer times using link-list data.
    Update untransferred files link-list times based on above using 71% weighting of unbuffered over buffered times.Update display
    Transfer 1x buffer update link-list & evail difference between first and second transfer. Adjust weighting using following:
     
    Pick random # between 1 and 661 + 42^2 * last weighting.
    Divide until less than 100.
    If less than 89 then random # above - sqrt42 * first weighting.
    Again divide until less than 100.
    If less than 41 then transfer 4x buffer. repeat buffered time weight calc. goto pick random 1 and 661 step.
    If above step repeats more than thrice adjust plank constant up by 11.11% & factor new weightings. Store in reg.
    If above above step repeats more than 7 times adjust plank constant down by 11.11% and factor new weightings. Store in reg.
    Update display, if greater than 100% than 100%.
    If number is irrational do 2D4 damage unto number until it becomes rational again. update display.
    Continue transfiguring & updating link-list and weights as above so as below.
    If time remaining goes negative check if users name begins with bob. Display Improper observer, recalc from start with different observer.
    If time goes infinite check on cat. If dead display Improper universal constant detected. Invert plank constant. recalc from start. Store regValue TimeFlow Inverse = True. Check at start to avoid problem. NOTE: program should check that user has not switched universes every x transfers or in background test transfer at idle.
    If above happens thrice then cthulhu re-entering universe probability approaches infinite. Halt transfer. Terminate user. display greetings...

    I've left out the easy stuff but this provides for a 99% correct est. Please note that the computer must be from 1 year in the future for this to exceed 87% correctness without causing time dilation within progress meter by blocks remaining^66 msecs. Check Mfg date at start and adjust time est accordingly.

    The above is copy-written and my not be used....

  125. Because prediction is hard by HuguesT · · Score: 1

    Prediction is very difficult, especially about the future.

    Niels Bohr
    Danish physicist (1885 - 1962)

  126. FTFY by r33per · · Score: 1

    This migration I'm doing has sat on 'less than a minute' for over 30 minutes...

    Ah. Evidently, you are on Microsoft Time. Consider migrating to a different techzone.

  127. Good progress bars are possible by Anonymous Coward · · Score: 0

    They are possible. The problem is that the junior developers that create them generally don't have much of a clue.

  128. Tetris Bar by Gordonjcp · · Score: 1

    Forget progress bars, give the user a game to play while they're waiting. You can implement Tetris in a couple of K, so that shouldn't bloat your installer too badly (and of course the game itself need not be installed).

    Make it get harder as the installer progresses, so that it starts to become too difficult just as the job completes anyway.

    1. Re:Tetris Bar by headcase88-2 · · Score: 1

      Namco has a patent on mini-games that run while a program is loading. Yeah, you can patent that. Is anyone surprised?

    2. Re:Tetris Bar by Gordonjcp · · Score: 1

      You can't patent it, because you can't patent software. Furthermore, this isn't while the program is loading, but while the program is installing.

    3. Re:Tetris Bar by Anonymous Coward · · Score: 0

      You can't patent it
      Yes you can. Whether you should be able to or not is up for debate.

    4. Re:Tetris Bar by Gordonjcp · · Score: 1

      No, you can't. Software is explicitly excluded from EU patent legislation.

  129. It's similar to the Halting Problem by Celarent+Darii · · Score: 1

    Progress means : movement towards an end. A progress bar is basically informing you when a process should stop.

    Yet, it is impossible to have an algorithm that can predict when an arbitrary process will halt [q.v. Turing, 1936]. Granted if we know something about the process, we can know certain bounds to the termination of the process, but this is far from simple.

  130. Progress Misunderstood by bloodlst · · Score: 1

    The original post states that "less than a minute" is being showed however makes no mention of the status of the progress bar. This is the fundamental mistake as the progress bar position and the time remain are almost independent items. Yes they should be linked as closely as possible but as stated in lots of other comments things change overtime and therefore can not be predicted.

    I would suggest that the following implementation of a progress bar is more sensible.

    Firstly, work out your operations and give them a waiting (waiting can be called an atomic operation). With file upload/download this is straight forward but for other operations you may just resort to giving them all a waiting of 1.

    Second you can have 4 types of progress
    1. The number of operations complete out of all the operations you need to perform (represented as a progress bar)
    2. The number of atomic operations complete out of all the atomic operations (represented as a progress bar) NOTE. If you have wait operations which don't have progress in themselves then your progress bar will jump, e.g. if you have give a 50% waiting to one task but can't tell how far that task is through.
    3. The time remaining based on the number of atomic operations remaining over the total number of operations remaining and duration form the start of the process. (This is inaccurate as for a long process which slows at the end you will get the 1 minute remaining scenario)
    4. The time remaining based on the number of atomic operations performed in the last period e.g. 1 minute, extrapolated into the time taken to perform the rest. (This give a more accurate representation of current progress)

    Personally I think showing 1. and 4. gives the most feedback to the user and although the time may go up (as we see with download times) the progress bar is still accurate.

  131. Re:no, it's easy. by bloodlst · · Score: 1

    Ok it's not entirely perfect but worked fine for a database population program. When I say fine I mean I could tell if it was going to complete before I wanted to leave for the day.

  132. Re:Cost Benefit by Anonymous Coward · · Score: 0

    All I read was "blah blah blah I'm a stupid pencil necked programmer who promises but can't deliver". Shape up or ship out, Poindexter.

  133. Use the right one by gmuslera · · Score: 1

    Some bars are more progressive than others

  134. The technical reasons by Anonymous Coward · · Score: 0

    Having worked on several projects where we had to implement graphical representations of time left to run on processes which will take an unknown amount of time I feel qualified to answer this.

    It's because you don't know what you don't know (but you know that).

    Conversely, once you do know what you didn't know, well, then you do know. Of course, what you know is generally different to what you thought you knew when you didn't know, so you have to adjust for the difference between the unknown and the known - and amount which is unknown (until you know it).

    So now you know.

    PS this is why you should never ask a question you don't know the answer to. And when you do know the answer to the question there's no point in asking.

  135. Becasue it's hard by Anonymous Coward · · Score: 0

    What you asking for is a bar that shows you far you've progressed through something. If you were in a race this would be easy, but your computer is not.
    Your computer does not care how far it has progressed through something. it only knows it is at step x of y, and even then it has no idea of how long step x will take on your hardware. Sure it could make an estimate, but that would be asking the software programmer to know everything about every system out here. Even then it will occasionally run into something called blocking functions. When it does it has to wait until the function completes before your program can do anything, thus you end up with a jumpy progress bar.

    To drive this in I'll examine the loading of a game level for an mmorpg. To load a level your computer needs the following:
    In video memory (this loading time can vary greatly depending on your graphics card)
    the level layout polygons, any object polygons that may be seen in the level, the locations for each of those objects, the texture maps for everything that may be seen.
    The computer needs to know (which can depending on dependance can vary greatly in time needed.)
    the current status of your character, the statuses of characters around you, and any user interactions that can be preformed.
    On top of that the computer needs to establish any network connections that are needed. (And due to the nature of the internet, not even the best computer scientist can figure out how long these can take to be established.)

    Now assuming that everything works in a fixed time will allow the programmer to make a fairly reliable progress bar, but this is for the test system he is running. If your processor is slower, network connection is faster, and you have an average video card. Well all those calculations are now screwed up. Heck even if you have an equivalent AMD card and the test PC used a NVIDIA card can screw with those timings.
    This is to say nothing about hard drive caching, weather you are using a solid state hard drive, or even a ram drive, swap file usage, If any other processes are running, and that all software dependencies are properly installed. (e.g. the program may need to add in a few dependencies to ensure it will work.)
    So all the programmer can do is give you his or her best guess, if they are even lucky enough to even know if any progress has been achieved. Even that is a lot of work, if you had any idea how much additional code they had to add just to get your progress bar to work at all, you might not be so crabby about the fact that it isn't all that useful.

  136. Hide progress and animations for faster computing by tuxisthefuture · · Score: 1

    I always try to hide any progress bar/animation/verbosity if possible so that the computer can focus on the actual task at hand rather than using CPU cycles to tell me how it is doing. This works especially well for large file transfers if you move the animated file off screen. I often reboot into a Linux live distro if I need to perform data transfers from a clients computer, they go a hell of a lot faster without the graphical user interface overhead and even using this I often don't enable verbosity so the copy procedure takes even less time. J

  137. It's not hard. by Jartan · · Score: 1

    It's simply not something coders worry about. They should but in general they don't. They create the bar then arbitrarily tie in random points to it.

  138. Use a 0..100% range for each step. by Barryke · · Score: 1

    Consider this: Once you've put progress on a bar, you can't take it off. Suppose you start a process that should take 20 minutes, and do the first 5 minutes, progress is now at 25%. But then, partway through, something unexpected happens and you realize the process is actually going to take 40 minutes. You can't take the progress "back" now, that would disorient the user. So you have to rescale the remainder of the bar.

    This is why you should not put different "steps" in one progress bar, the software would just be lying to users. Use a 0..100% range for each step.
    For each step, always show a useful number allong with a progress bar such as "10/1003" or "(digested 10 of 1003 buckets of lava)".

    ONLY if its perfectly possible to predict remaining time, show that estimate. Factor in at step 1 that it has more work to do at step 2.
    It can not factor in unexpected failures ofcourse, so state the time as a minimum ("at least 90 minutes remaining) or best case pessimistic running estimate. Dont even bother calculating on the second/minute if its over 10 second/minutes.

    --
    Hivemind harvest in progress..
  139. Modern programming languages by sl4shd0rk · · Score: 1

    Back in the 80's and 90's - when DOS was still widely used - software didn't get written the same was as today. Languages like C, Pascal and Assembly didn't have Callbacks[1], as they are known today, and oftentimes the program variables themselves were globally addressable by any part of the program. This way, you could run a Busy Loop[2] doing a function call to, let's say, a disk read which would update a global variable with the number of bytes read. When the function returned, the global wold be updated and you could re-draw the progress bar with the updated variable. If disk reads stalled or slowed for some reason, the function would not return as quickly, and the progress bar would not update as quickly which in turn, would actually show this in the progress bar.

    In modern languages, these Busy loops should be non-existent. (they were incredible resource hogs) You have Callback routines which usually hand off the long-running portions to another Thread of execution. If they don't, you can usually tell because the UI becomes "frozen" and won't update because the Thread running the main part of the program is also responsible for re-drawing the UI and it's off doing some long-running IO or something. The problem with handing execution off to another Thread is that now it becomes very difficult to code an accurate representation of actual progress. Dialog boxes, variables, thread-safe execution, UI updates -- it all suddenly becomes really difficult to do correctly because all of the parts needed to represent an accurate progress bar are strewn across multiple threads and sometimes you have no way of actually knowing when they have finished. At this point, most programmers just say "ahhh, f#ck it, put up a Spinner" and you end up with nothing more than an animated image showing a spinning circle/dots of some sort. It shows an expected pause in execution but you have no way of knowing if the application is still alive because it hasn't been coded in any way to tell you that.

    [1] - http://en.wikipedia.org/wiki/Callback_(computer_programming)

    [2] - http://en.wikipedia.org/wiki/Busy_loop

    --
    Join the Slashcott! Feb 10 thru Feb 17!
  140. 100% accurate: reduce to 2 bars: by Anonymous Coward · · Score: 0

    Started, Done.

    Problem solved

  141. An 100% accurate progress bar by thoriumbr · · Score: 1

    Is very easy to create a perfect, 100% accurate progress bar that works on all situations:
    1 - During the first part of the job, show the words "Estimating time. Please wait."
    2 - Do all the job, maintaining the "estimating" thing...
    3 - After the job is complete, make up some numbers (e.g. "45 seconds left").
    4 - Keep decrementing the time as accurately as possible. The user can't know that the job is already complete and you are wasting his time.
    5 - The user will be pleased to see that your 45 seconds took exactly 45 seconds.

    As Cypher said once, "Ignorance is bliss."

  142. Yes accurate progress bar is really hard by ColdCat · · Score: 1

    Even if you don't try to do time prediction. Compare to classic errand to buy groceries.
    make the list
    watch the weather
    dress accordingly
    find your car keys
    take the car and go to the store
    find all items on your list
    choose the good line
    pay the cashier
    go back to your car
    drive back
    unpack your items
    How to do an accurate progess bar ? what is 30% done? How to not stop a long time on a percentage then go really fast on others ?
    If you count percentages of tasks some are fast some are very slow, if you count time it's may work on your test but it may not on someone else who leave farther from the store or drive faster, or find the store closed etc
    Yes it's pretty difficult to choose good metrics for some complicated tasks.

    1. Re:Yes accurate progress bar is really hard by BasilBrush · · Score: 1

      How to do an accurate progess bar ?

      Reminds me of the old "Time and Motion" studies. Where someone performing a multi-step task is watched by a man with a clipboard and a stopwatch.

      And funnily enough, that gives the answer to your question when applied to computing tasks. Measure the tasks on a typical machine, and use that to form the initial ETA. Then recalculate the ETA all the way depending on whether this machine is going faster or slower than the reference machine.

  143. Hard, and not a high priority by Anonymous Coward · · Score: 0

    There is a lot you can do to improve the accuracy of a loading bar, but at the end of the day life is too short. Your update bar code needs to be using the update process to benchmark the performance of the specific hardware, network etc., and use those data points to feed a model you have of expected timings. The more parameters and the more often you check them the better the accuracy will be. Don't forget to include estimates for the overhead of measuring.

    If you have a lot of users then you could have the code send back to your server a bit of info about your system and a time measurement for install. Then the next person to install would "people with your type of setup took between 10 and 15 minutes to install. So far you are installing at the 95th percentile". Perhaps you have a checkbox next to the progress bar with "Enable insane progress stats". At least it would take your mind off the time it's taking to install....

  144. itd a definiton/frame of reference issue by Anonymous Coward · · Score: 0

    You appear to be confusing progress with time remaining.

    Dimensions at play include:
    Progress:
    Information (Bytes) downloaded
    Current. Rate of Information downloaded (Bps)
    Avg rate of information downloaded
    Time elapsed

    Time remainin:
    Information remaining to be downloaded
    Expected avg download rate
    Confidence/ accuracy of expecattion
    Estimated time to go

  145. The mistake is assuming time is being measured by DThorne · · Score: 1

    Apart from genuinely broken progress paradigms, I think users have the expectation that progress gives them a meaningful representation of 'time remaining'. That is really hard to determine, due to all the variables mentioned in this thread. I am in my xen space if I am 1. Reasonably warned ahead of time that the process might take as much as xx minutes, and 2. The indicator is actually giving me feedback that shit is happening, as opposed to "I'm stuck". Given the range of hardware and possible combinations of installed software, I don't think there's a problem at all if I get those two pieces of information.

    DT

  146. Once everyone is running an RTOS... by Anonymous Coward · · Score: 0

    ...I will make you an accurate progress bar.

  147. My watch measures time in pints. by Anonymous Coward · · Score: 0

    Q: For how long should I microwave this popcorn?
    A: 3 miles.

    Welcome to the idiocy of measuring in the wrong units. We "all" know that just because you've driven 90% of the miles of a trip doesn't necessarily mean that you've driven 90% of the time of the trip. Your gps can usually give a decent time estimate, but it certainly won't predict that flat tire you're about to get. Expecting that from a progress bar is naive.

  148. Since when does "percent complete" imply time? by gatkinso · · Score: 1

    I never mention time remaining in my progress bars.... why do you assume that is what I am displaying?

    --
    I am very small, utmostly microscopic.
    1. Re:Since when does "percent complete" imply time? by Rob+the+Bold · · Score: 1

      I never mention time remaining in my progress bars.... why do you assume that is what I am displaying?

      If it's your progress bar, you tell me why it makes me think it means time. If you're measuring progress in something else, fine, but it's your progress bar, you've got to tell the user what that scale is.

      --
      I am not a crackpot.
    2. Re:Since when does "percent complete" imply time? by BasilBrush · · Score: 1

      Then what is it measuring a percentage of?
      Bytes?
      Files?
      Steps?
      Arbitrary chunks defined by nothing more than where you happened to drop progress bar updates in your code?

      If you don't say what it's measuring, don't be surprised when the user makes a reasonable guess. Then gets pissed off because your unlabelled bar is poor at living up to it.

    3. Re:Since when does "percent complete" imply time? by Anonymous Coward · · Score: 0

      Since the point of a UI is to interface with the user, and in the majority of cases users don't know or care what the underlying steps behind the bar are. Dance around pedantic minutiae all you want, but you, me, and the rest of the world already know what a user expects from a progress bar. If that's your game, here's a challenge you'll probably enjoy: I defy you to define "progress" in a way that is independent of time.

      More to the point, as a progress bar changes as its basic function, time is implicit in it's functionality. The real thing you're advocating is progress bars with an intentionally non-linear (and in many cases unknowable) time/progress relationship.

      If you still don't get it, tell your boss that a project is 80% done a few days after you start it, and then take a couple months to finish it. See how well your "but I didn't say 80% of the TIME" excuse goes over in the real world. (FWIW, I've already tested this one, and it doesn't wash...)

      If you aren't going to show progress in a way that makes sense to users, then don't show it. Use a spinner if you just want to non-specifically communicate that "progress is being made".

      Besides all of the obvious complexity and unpredictability, a good answer to the OP's question might be "because of developers with attitudes like this one".

  149. still working by Anonymous Coward · · Score: 0

    I honestly would be fine with a progress bar that simply displays a sequence of pseudo-random integers until it is finished, at which point it displays 0 (yes, this is stolen from Futurama). The most important aspect of a progress bar is usually just knowing that the process hasn't frozen. Sure, the estimates of how much longer I might be waiting are helpful, but short of the time estimate actually being correct, the time estimate is a secondary concern.

  150. Because it's impossible by dskoll · · Score: 1

    Making a perfectly accurate progress bar that works in any situation is equivalent to solving the halting problem. Can't be done.

    And if your task is interacting with the network, how can it predict things like your DSL connection dying for a couple of minutes?

  151. Duh by Anonymous Coward · · Score: 0

    It's because you haven't invented a crystall ball yet, dumbass.

  152. Redesign the progress indicator by gravis777 · · Score: 1

    Actually, this has been done. The most useful progress indicators do the following:

    1) Show overall progress
    2) Show progress of subprocess
    3) Have some type of message display that actually tells us what is happening (in fact having this may be more usefull than showing progress of the subprocesses).

    Here are some examples of great progress indicators (granted, not all are installers, but they are informative):

    http://stackoverflow.com/questions/14684652/how-do-create-progress-bar-while-clicking-remove-button-in-nsis

    http://doc.zarafa.com/7.0/Migration_Manual/en-US/html/images/MGR_Progress.png

    http://www.codeproject.com/KB/files/Copy_files_with_Progress/copyfiles.jpg

    http://help.comodo.com/uploads/Comodo%20Backup/b11a8045cb003891d886ace8f138a534/5eac818f1e1c4adc19d335055b06586b/d871fb826e82b18c4d9d5f28f76278a5/cbu_restore_final1_022012.png

    http://openchrom.files.wordpress.com/2011/09/openchrom-installer-unpack.jpg?w=640

    The last one I want to show is actually from a game I like, and I was having a ton of issues trying to find a screenshot of the progress indicator, so instead, I found a Youtube video. The installer is about 5 minutes in - when you first launch the game, you have a progress indicator, but, its a little dark in this video, in the upper left hand corner, you can see how many files there are, what file it is on, if its downloading or installing, etc. Probably one of the most helpful progress indicators I have ever seen:

    http://youtu.be/ROOJFT6ae7M?t=5m2s

    1. Re:Redesign the progress indicator by stillnotelf · · Score: 1

      Your fourth link (cbu restore final, comodo.com) has the central problem promeniently displayed: the bar is at 50% but it says "0 seconds remaining".

    2. Re:Redesign the progress indicator by gravis777 · · Score: 1

      LOL, didn't notice that, my point was thtat it is useful in that it displays what is going on. But good catch!

    3. Re:Redesign the progress indicator by BasilBrush · · Score: 1

      I do hope this is a joke, because these look like entries to the UI Hall of Shame. #2 is particularly amusing. As if a set of 3 nested progress bars wasn't bad enough, there are 2 cancel buttons.

  153. Stupid by Anonymous Coward · · Score: 0

    This is one of the dumber ask Slashdot's that I've seen in a while... "I'm not a auto mechanic but why can't my car run on water? Is it really that hard?"

  154. The world isn't made that way by wganz · · Score: 1

    Most things are not straight line linear events.

  155. Bram Cohens thoughts on ETA by Anonymous Coward · · Score: 0

    Bram Cohen, the inventer of the bit-torrent protocol, wrote some interesting articles on the difficulty of calculating accurate ETA's in distributed systems. They seem to of vanished now, but I'll link to the google cache of the two most relevant.

    http://webcache.googleusercontent.com/search?q=cache:http://bramcohen.livejournal.com/24122.html
    http://webcache.googleusercontent.com/search?q=cache:http://www.mccaughan.org.uk/g/remarks/time-left.html

  156. We can't predict the future. by codemaster2b · · Score: 1

    I may be rehashing what most posters here have already pointed out in different ways, but it comes down to the fact that we can't predict the future. PCs in general allow arbitrarily defined operations to happen (copy a folder from A to B, with unpredictable contents, hardware timings, available operating system resources, etc). Added to this problem is one of interpretation: what KIND of progress does the bar measure? Is it time, disk space, ordered task number, or what? All of the above?

    Suppose I make a progress bar that measures the time until nuclear winter? We call that the Doomsday clock (and yes, progress bars CAN go backwards, my fellow slashdotters). Is it accurate? No one knows, and I hope we never find out.

    But lets say that we only want a progress bar that measures time to completion. I actually like the file-copy progress bars in Windows 7. I think they finally got it right. The underlying hardware will vary in its speed, so the progress bar cannot inerrantly give estimated time to completion. But it does give enough information to satisfy me while I wait. I see the current MB/s of data transfer, the approximate time remaining (and data remaining), and a bar that shows how much of the data has been moved so far compared to the total amount of data to move. Not perfect by any means, but I am satisfied to wait. And that's the whole reason you have a progress bar in the first place.

    --
    And over there we have the labyrinth guards. One always lies, one always tells the truth, and one stabs people who ask t
  157. Its not by Murdoch5 · · Score: 1

    Your need to define exactly what progress is being tracked by a bar. For instance if I'm tracking CPU load the bar will react different then if I'm tracking memory Load, hence these two progress bars will react entirely differently but not wrong. If your tracking overall system loading from the view point of the kernel then you'll get one progress bar and if you track user space load you'll get another. So it's not that the progress bar doesn't work, it just isn't being defined well enough to the average or unaverage user.

  158. Because doing it well is not considered important by wisnoskij · · Score: 1

    It is not a simple problem but it could be done.

    If you know exactly what you need to do, Exactly how much data you need to unpack, how much you need to copy to the hard drive in how many files, How many registry entries to make, etc.
    Then if you knew the time these would take on a average computer, And run a few metrics on the computer you are installing onto (and keep doing this throughout), as well possibly looking at the hardware.

    Do all this and you could get a very accurate progress bar. It is simply easier to semi-randomly put progress++; markers throughout your code that are accurate enough that the user does not give up and cancel or reboot the PC is frustration.

    --
    Troll is not a replacement for I disagree.
  159. I have a proposal by conquistadorst · · Score: 1

    Give me a crystal ball and I will give you an accurate progress bar

  160. "I'm not an engineer" by asylumx · · Score: 1

    I'm not an engineer; is it really that hard?

    Wait, what are you doing here then?

  161. It's a hard problem! by tibit · · Score: 1

    The progress bar is estimating an aspect of the behavior of a very complex system. Remember that the underlying system is not only your software, but all the other running software (OS included), RAM, peripherals such as storage devices and network interfaces, contents of the storage, and network traffic. The behavior of such a system can be at best captured in a stochastic model of some sort. A model, I must add, where a lot of the state variables are not subject to direct observation. What your progress bar can show is then, at best, something close to the expected behavior of the system. Capturing the model of the underlying system to produce a model requires hard core domain specific knowledge in stochastic modeling. It's precisely the stuff that "experienced programmers" proclaim loudly they don't need -- that they can somehow do their job while resorting to essentially high school level maths. I'm sorry, but if you don't even know what's out there when it comes to applied math, then you're in no position to boast about getting through all your programming without ever having to resort to any college-level mathematics.

    Almost any decently performing progress bar would need to use some sort of progress monitoring framework. Such a framework would need to constantly capture system performance and estimate the state of the system. When the time comes for your progress-monitored task, your model will be "aware", for example, that there is a disc burn operation that already does 30 hard drive transactions/s, and that a network download into a fragmented filesystem takes another 15 transactions/s. In spite of the hard drive being able to stream 65 megabytes/s, you're IOPS bound and can maybe get 1 megabyte/s for your own use, and won't get more than 10-15 transactions/s. This is just a most basic example of the stuff you'd need to take care of. So, the performance monitoring framework belongs in the kernel, and it's usually there to one extent or another, but you actually have to build a stochastic model that can consume performance data and properly use it. It's nowhere near a trivial problem, and everyone who tries to trivialize it just makes a fool of themselves.

    The good old progress bar is perhaps the clearest example of how you can never be a truly good software developer without knowing your math past high school. Yet everyone does it like they were still 16, and you get what you complain about. Real software engineering is hard, and requires lots of knowledge in applied mathematics -- simply because applied mathematics is the only tool we got that can do the job.

    --
    A successful API design takes a mixture of software design and pedagogy.
  162. Psychology plays an important role by BlackFingolfin · · Score: 1

    There has actually been a lot of research into how to make progress bars "feel" right -- it turns out that certain psychological tricks can help with that, too. Roughly speaking, it tends to be better to be conservative at the start (i.e. give a worst case estimate) and then improve it over time, than the other way around. Hence a simple trick to improve the user experience is to take whatever you think will be an accurate value for the progress, but then apply a scale to it to make it appear slower at the beginning, and faster at the end. This is studied and discussed in depth in the paper "Rethinking the Progress Bar": http://www.chrisharrison.net/projects/progressbars/ProgBarHarrison.pdf

    For example, if x is the progress ranging from 0.0 to 1.0, then instead of using x directly, use f(x) = (x+(1-x)/2)^8 to calculate the progress estimate you are going to display to the user.

    The key observation here is that if I am told something will be finished in 1 minute, but then it turns out to take 2 minutes, I am upset; if instead I am told it will take 2 minutes, but then it finishes already after 1 minute, I'll be happy. Of course this has limits, and one needs to strike a delicate balance: if the original estimate is too far off and bad, the negative reaction to the initial bad estimate and how far it is away from reality will create a strong negative reaction on its own (what would you think if you were regularly told "performing this operation will take ~2 days" when it ends up needing only 1 minute each time...)

    There are other tricks to make the UI feel "faster" when it comes to progress bars, see e.g. http://uxmovement.com/buttons/how-to-make-progress-bars-feel-faster-to-users/

  163. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  164. same reason you can't time travel by Anonymous Coward · · Score: 0

    Because you don't know how long it will take to process the stuff - and sometimes even how much, *stuff* there is to process, until it's all been processed.

  165. useful if you do.. by Anonymous Coward · · Score: 0

    Trying to make a linear progress bar is a useful exercise, and worth what you learn about the problem. Not possible to be perfect, but being able to characterize run-time *should* be a part of the solution.

    Consider the file download problem. You get questions like:
    1) what are the relative sizes of the files?
    2) can I get the server to indicate size before download starts?
    3) how often are bandwidth drops? Can I predict them for the current user based on past trends?
    4) what is the average transfer rate over days, including high load times?

    Progress bars can be *more* linear. They got less so because we're doing more complex tasks now. When we really undestand those tasks, they'll go back to being somewhat linear again.

  166. Re:Cost Benefit by Anonymous Coward · · Score: 0

    The lazy programmers probably assign each of your 5 steps one fifth of the progress bar. The reasonable thing to do would be to keep track of the time taken by each step when they're testing the installer, and hard-coding the average time taken by each step in the progress bar code. This is not hard and I bet it's not being done.

  167. impossible by Anonymous Coward · · Score: 0

    ok. I admit, random acts of nature seriously screw with the halting problem.. Ok, 50% done, 60%, 70%... Zzzrrrrchkipt!... Lightning fries the computer. Problem halted. Progress = 0.

    But seriously, can we agree that random events should be dealt with using feedback. Hey, you lost you network conn... Do you want to proceed?

    In eralwe can do a better job of estimating our task completion. Let's not use random acts of god as an excuse not to better characterize the run time ifof a task.

  168. The real reason.. by Anonymous Coward · · Score: 0

    the real reason progress bars suck is that most developers are too lazy to calculate total bytes in a set of files, and make their progress bars based on bytes handled. Most bars are written in the wrong metric because were either too busy, or because the bar is low priority compared to the task itself. It's the same reason we hate estimating coding tasks.. how long will it take you to solve these 7 tasks? I don't freakn know. Why don't I just do them and ill tell you when I'm done.

  169. We should cross trainer user interface by Anonymous Coward · · Score: 0

    You know the bar chart which indicates resistance & progress.
    http://resources.sport-tiedje.com/bilder/kettler/crosstrainer_ctr1_cp_detail.jpg

    Difficulty could be added

  170. not that hard -- don't show time remaining by Chirs · · Score: 1

    Just be clear about what's going on. When downloading a package, indicate which package you're downloading, how much of it has been downloaded and the total size, as well as how many more packages there are to download.

    If you don't know how much longer something is going to take, then don't give me a "x minutes remaining" estimate. Just show me what is currently going on so I can see that *something* is happening.

  171. Too complicated for most coders.. by firecode · · Score: 1

    In order to have an accurate progress bar, one should be able to predict how long time the overall process will take and this can be very complicated or totally impossible to predict. Additionally, most software is quite badly coded and based on simple boolean control-logic and more sophisticated techniques [complex mathematical algorithms] are not routinely developed or used. How I would do it:

    Run test code to test operation speeds and create and use mathematical model (black box solutions like neural networks could be fine here) to predict correct progress. Create learning dataset [for neural network] running the algorithm in different computers. Similarly, measure real progress and time use in the same machine so that the next time progress bar is needed it is more accurate.

    In other words, creating accurate progress bars just makes very simple problem very complex and difficult and there are typically much more important things to do (most software has bugs - some very serious) than trying to get progress bars work 100% correctly.

    Still, significant improvement could be made if somebody just created generic, self-learning progress bar class that would get more accurate the more often it is being used [the coder would just call new bar("problem-code"), bar.start(), bar.progress(0.75), bar.finish() and the algorithm would self-learn how much real progress 75% typically means for this specific problem with given machine specs (cpuid etc)].

  172. It's not hard by Anonymous Coward · · Score: 0

    Anyone who's put any thought at all into it can solve this problem. On occasion I'll run into a piece of software that does this right. Usually open source. The bottom line is in the grand scheme of a project managers driving the bus are more concerned with functionality and time to market than an accurate progress bar.

  173. I hate the "working on it spinner" by Chirs · · Score: 1

    There have been too many times that the system has hung with the "working on it spinner" still spinning away merrily.

    Show me actual information. Show me how many bytes have been downloaded, or which file has been installed. Show me something that proves that the system is doing something useful rather than busy-looping doing nothing.

    1. Re:I hate the "working on it spinner" by BasilBrush · · Score: 1

      Horses for courses. A spinner is fine for an operation that takes a few seconds. For sure, for longer operations a user needs more assurance that progress is actually being made.

  174. Yo, fuck all this shit! by Anonymous Coward · · Score: 0

    It's just like my fucking gas gauge! I don't want to know what dot it's on, that's meaningless! Just tell me how many fucking gallons are left! Why is that so fucking hard?!?

    Why can't the operation just tell me xxxxxx bytes out of xxxxxxxxx bytes (or KB, MB or GB, etc.) transferred? Or copied, or deleted, or modified in whatever way I ask it? Why does it have to tell me in minutes? We all know these numbers are bullshit.

    Or how about this for a novel idea: PERCENT! Just tell me out of 100 parts, how many are done. How the fuck hard is that?

    Ditto the gas gauge. I would love for it just to tell me I have 5.3 gallons remaining. Especially if it's ACCURATE! I would switch to fucking metric if I had to to get a goddamned gas gauge that told me the fucking truth, and not, "oh, you have about half, jefe!"

    Fuck you, I don't want to know ABOUT! I want to know how much is left! We put a man on the moon, and we have probes on Mars, and they can't make a fuel gauge accurate down to a quart? Is that too much to ask?

    I'm right with you brother! Let's have progress bars that actually tell you something about the progress, and while we're at it, gas gauges that read out in a useable fucking unit, not some weird approximation.

  175. Two reasons by T.E.D. · · Score: 1
    There are two big obstacles to making "accurate" progress bars.
    • First off, often it would require you to predict the future. Often the only way to know for sure exactly how long the operation will take is to perform the operation and see how long it takes. (see the Halting Problem) If I could accurately predict the future, I sure as hell wouldn't be sitting here in a dingy cubicle writing GUI code for you.
    • Secondly, you don't want that. Studies show that the progress bars users like best are ones that speed up as they go along. Steady bars are annoying to wait for, and bars that slow down or stop for long periods are downright frustrating to users.
  176. Re:Cost Benefit by tilante · · Score: 1

    Not necessarily - as someone else pointed out earlier, for some things, it's possible that a long-running process may have portions that are themselves long, but also may encounter problems and need to be rolled back and retried. Then you're stuck between showing zero progress for a long time while running the portion that can be rolled back, showing a reversal of progress should the rollback actually wind up having to happen, or extending the progress bar in some way to show that there's now more to do. Alternatively, there may be operations that rarely need to be done as part of a process - rarely enough that including them in the normal estimate of how much needs to be done doesn't make sense.

    (To take that back to your analogy - if you get partway to work and realize you forgot something you need, then you're not going to drive the same distance that day. A progress meter of your drive would then either have to stop until you return to the point you'd gotten to when you had to turn around, show backwards progress as you go back home, or add additional distance that needs to be driven. For the second alternative, an analogy would be encountering a detour, traffic accident, or other blockage that causes you to take a different, longer route that day.)

    Of course, what you really need there is some explanatory text, so the user knows what the heck is actually happening... which is why I personally like progress bars that have a way to "open them up" to get more information about what's going on.

  177. Many companies don't want to spend the money by Anonymous Coward · · Score: 0

    Hi -

    I worked in software for 20 years. Better (not perfect) progress bars are certainly possible. I would say many companies put little effort into them because they are a non-essential feature of the software.

    TWR

  178. Information useful for support by tepples · · Score: 1

    [The overal progress is] the only part of the UI that is significant for the user. The rest is clutter. As a geek you might be interested

    No software marketed for home use is perfect on its first release, and tidbits interesting to "a geek" are probably useful for support while taking fewer resources than a full debug build. For example, reviews that mention that "the progress bar stops for a while on discombobulating splines" or "the ETA stops decreasing for a while on discombobulating splines" are a signal to the developer that he incorrectly estimated the fraction of time that "discombobulating splines" takes on end users' hardware, and that the next version should make "discombobulating splines" faster or expand the step's time estimate. Or would you prefer to solve this by giving one manufacturer a monopoly in order to limit the variety of end users' hardware?

    1. Re:Information useful for support by BasilBrush · · Score: 1

      What you are describing is stuff to go into log files. Not stuff to go into the UI.

      Or would you prefer to solve this by giving one manufacturer a monopoly in order to limit the variety of end users' hardware?

      The users hardware is irrelevant. Variety makes the job of estimating remaining time harder, but it makes no difference to what constitutes good UI design.

  179. The future is hard to predict by Anonymous Coward · · Score: 0

    Before we can build an accurate progress bar we must first figure out how to accurately predict the future.

  180. Yes by Digital+Vomit · · Score: 1

    "How come after 25 years in the tech industry, someone hasn't worked out how to make accurate progress bars? "

    Because, unlike the computers you see on TV and the movies, computers in real-life cannot be programmed to be psychic.

    "This migration I'm doing has sat on 'less than a minute' for over 30 minutes. I'm not an engineer; is it really that hard?"

    Yes it is.

    I don't know what kind of engineer you are, so for the sake of illustration I will assume you design and build bridges. Let's say I ask you to build a bridge across a river. Can you give me an accurate estimate (to the hour) on when said bridge will be complete without you having done any surveying first and without knowing anything about the availability of the materials and labor required to build said bridge, or what the weather patterns will be like?

    You could make an estimated guess, sure -- and that's exactly what progress bars typically do. Sometimes they are just bad at guessing (i.e. poorly programmed) or things happen that just can't *reasonably* be taken into consideration when the time prediction algorithm is coded.

    --
    Modern copyright is theft of culture from everyone and it retards the progress of the useful arts and sciences.
  181. Re:no, it's easy. by swilde23 · · Score: 1

    I'm not quite that angry yet. Also, knowing that your program isn't just hung is a reasonably good thing.

    --
    There are 10 types of people in the world. Those that understand this sig, and those that beat up people who do.
  182. Lexical Disfunction by Anonymous Coward · · Score: 0

    The actual and psychological underpinnings of the word 'progress' are illusionary and fleeting.

    It would have been better to focus on 'pain' or 'struggle', which are born in actual life and have intuitive meaning.

  183. sync(2) by tepples · · Score: 1

    Then, all of the sudden, you grind to a halt when the cache fills. You won't see any progress, sometimes for minutes

    Even if you can't predict the caching mechanism, you can control it in some cases. Issue a sync() call (or syncfs(fileno(fp)) if available) before the copy begins, before every change in top-level folder (e.g. /opt vs. /usr vs. /etc vs. /home), and after every 10 percent.

  184. Forked Threads by Anonymous Coward · · Score: 0

    Yes I love to watch progress bar's suffer the fact that new threads and new process are not even known to the progress bar,

    setup
    ---- msiexec.exe
    ---- msiexec.exe

    even if you don't have this problem, I think you should get a smoother progress bar using logarithmic math in there. (good god where's my calculator, what is it PI, LOG, SIN, COS -- looks like remedial non-linear simultaneous equations for me tonight - shit... shit SHIT... oh well... maybe I can snatch some EXPRESSIONS from the adobe after effects training videos?? or not, where's that fuckin Malvino book)

  185. Cheat. by DarthVain · · Score: 1

    I recall doing a big project for College. The program in question was a big one, and there were a lot of background processes going on using a large amount of data. To compound that, it was written using VB, and using a GIS addon which wasn't exactly lightning optimized. In any case I can't remember what all the thing did now, something to do with old age homes or something. In any case it had a horrific load time on startup. I recall trying different methods, of selectively loading, etc... but it was almost better to get it out of the way rather than annoy the user continuously. So I wrote a progress bar for the application so that the user (i.e the prof that was grading the work) wouldn't think the thing had simply crashed at startup.

    I also cheated horribly. All I did was time how long it took to load several times. Since it was using the exact same data and the exact same hardware every time, the time elapsed was for all intents identical. I then added a nifty showy flash screen (to simply waste more load time, I assume this is why everyone does it now) attached to a timer, then added a progress bar that incremented to another timer for the balance of the time left over. It had nothing to do with the actual work being completed, nor was it in any way connected to anything other than I knew the process took about 12 seconds or whatever. Once the timer finished it would bring up now loaded program all ready for use. Since I tied it directly to the timer, even if you put it on a faster computer, or used less complex data, it would still load in the exact same time. The only thing they would mess it up, would be if you made the data even more complex, or put it on a slower system, in which likely the progress bar would finish, and the program would load, but be unavailable for a few more seconds while it finished loading.

    So anyway, it was mainly subterfuge to simply hide a cludgy loading process.

  186. outline format by hierophanta · · Score: 3, Insightful

    Progress should be reported to the user in outline format. Give the user the list of tasks that the computer is working on, show progress in each task. This is much more informative, and as a user - i'd feel more intimate with the process and in turn more trusting. also this might allow me to troubleshoot things that are moving slowly. some games are great at this, i've never seen it in an OS though.

    1. Re:outline format by morgauxo · · Score: 1

      Give the user information? It would never get passed marketing. Even Linux desktops are dumbing down these days. Doom!

    2. Re:outline format by Anonymous Coward · · Score: 0

      pedantic cynicism much?

    3. Re: outline format by Anonymous Coward · · Score: 0

      The next self absorbed asshole to use the word "pedantic" on /. needs to go the fuck away.

  187. Perhaps it's time for a speedometer alongside it. by Archis · · Score: 1

    I've seem them once or twice before. There are two reasons to have a progress-bar. One is to know the "rate of progress", and another the, amount of work done so far. When a progressbar freezes, it could also be because some background process just died, or someone forgot to catch an exception in time, or an async call that doesn't handle a timeout or has a long timeout. Most technical users just use -v or --verbose options to see what's happening, rather than how much has happened as an unquantified bar. Maybe the solution is to have a sort of speed-dial like that on cars. Backend processes can ping the log-collector or some other globally accessible entity everytime they "do" something useful. That would allow the speed-dial to show the frequency of operations, giving a good idea of whether or not something is happening or not.

  188. It's all about the false promises of proportion... by Anonymous Coward · · Score: 0

    The progress bar implies the total time is proportional to the length of the bar and the time left is proportional to the unfilled part of the bar. And there is the mistake because each step could be unbound in time (even to copy a bunch of files with a known length could be delayed by unbound events -nonresponding server due to load, for instance-) so, the program must have a crystal ball to do it right. I understand that there is no excuse for some “progress bars” out there, but at least, there is no way to do the progress reporting right automatically. Maybe some programs should deemphasize time as a measure of progress and resort to “steps” instead ;-)

  189. What does the user want? by WhoaNotSoFast · · Score: 1

    As a user, I want two things from a progress bar: (1) Should I wait for it to finish, or go for coffee? (or take a nap, go home for the night, etc.) and (2) If the process is taking a long time, is it just slow, or has it frozen? A progress bar that stops moving is bad as a spinning wheel: it leaves me in the dark about (2). I wonder how many times I've rebooted the machine when I didn't need to?

  190. Holy living fuck by NoSleepDemon · · Score: 1

    I'm going to get rated down for this but fuck it. What the fuck is up with this site? Who thought THIS would be a good question to ask? Isn't it blindingly obvious that progress bars lie because in almost all cases the task at hand cannot be accurately measured? Could the submitter not have googled this? It's stories like this one that make me not want to know what other humans are doing with their lives. Better to just pretend they're not completely fucking brain dead.

    1. Re:Holy living fuck by Anonymous Coward · · Score: 0

      Cat got your tongue? (something important seems to be missing from your comment ... like the body or the subject!)

  191. Why? by Ghostworks · · Score: 1

    There are several problems with progress bars:
    1) there are some tasks for which progress -- and even present state -- are not easily measurable. For example, your Li-ion batteries look to be in pretty much the same state when you have anywhere from 10% - 100% power remaining. It's not enough to be able to program a progress bar: you have to have knowledge of the thing being metered to do it right.

    2) There are some tasks for which the total workload is not readily known. If you have a simple (light on metadata) filesystem with many nested directories and fragmented files, you have no idea what the full scope of the workload is until it's either almost done, or unless you do some pre-processing. Metadata collected in advance (file size info) can help, but it's basically the same thing: you're pre-processing before you know what or what you'll need the data for. And naturally, this pre-processing can be hefty for a few rare cases.

    3) For some operations, progress so far doesn't strictly map to remaining workload: your algorithm could handle the fast, "low-hanging fruit" first.

    4) On complex systems, time spent and progress don't map well to time remaining. As I said before, some portions of the workload could be inherently faster (as with some coding/decoding problems). The system or signal path could impose unusual delays, then relieve them, spoiling the calculation. The bar has to account for this with some knowledge of the system outside the algorithm. In other words, it's not enough to understand the problem, you also have to understand progress bars.

    5) The progress bar only matters when the user is in a hurry. If you were comfortable with a very coarse granularity ("Come back in about an hour") you probably wouldn't care about the ticking of the bar. The edge cases define user's perception of the bar's effectiveness.

    6) The bar actually conveys more information than progress. The bar is actually used more than it should be -- that is, instead of the hourglass/spinning clock/spinner -- because it conveys more information that the user demands: "Yes, I'm really working. No, I haven't locked up. No, I'm not in an infinite loop, trying to free up a non-existent resource, or waiting for input to a hidden prompt. Yes, I promise we will get there at some point if you just sit there patiently and refrain from bothering your nephew 'because he knows computers'." For tasks where the progress bar moves imperceptibly, you usually also have a message to the extent of, "I'm manipulating this data point now. Notice it's different than the data point I was working with 5 minutes ago. See, progress! Not locked."

    In general, you probably need to take a multi-prog attack to user notification: aspinner for pre-processing and simple tasks that will complete in under a second, a progress bar based on pre-processing for longer tasks, and some sort of very nebulous, "come back in an hour; I'm working on it," dialog for really long tasks.

  192. It's easy... by kemosabi · · Score: 1

    ... as long as you only care about 0% and 100% done. If you want the progress bar to reflect finer increments of work, say 10%, then it might be hard for at least two reasons: 1. there may be a large variance in different portions of the task tracked by the progress bar 2. exceptional occurrences (network lag, errors, the user suddenly increasing load on the system) can change how long things take In general though, progress bars are no harder or easier than the estimation task for what they should track. The estimation task is hell, partially because of leaky abstractions, partially just inherently. Progress bars with milestones can help, but there's no easy answer to the basic problem: it's the estimation that's difficult.

  193. Doing a final synch will of course make people sad by Anonymous Coward · · Score: 0

    All those bars that go from 0->99 in no-time are filling up your cache, then they close the output files or call something similar to fsync() and then you have to "pay" the time it actually does take to flush the cached bytes to disk.
    And doing small synchs in between (at 10,20,30% and so on) will of course lower the overall total, but may make your install bar viewers a bit more happy.

  194. xkcd's comment... by SiChemist · · Score: 1

    Obligitory xkcd cartoon.

  195. Because "programmer" != "psychic" by pla · · Score: 1

    I can accurately measure bytes. I cannot predict that you will decide to defragment your HDD halfway through the file copy.

    I can accurately measure discrete steps of a process. I cannot predict that you'll start CPU-mining bitcoins shortly after starting step 3 of that process.

    I can accurately measure network throughput (to date or right now). I cannot predict that, 30 seconds after you start downloading the latest Debian ISOs, you will fire up a game of Minecraft that crushes your network connection.

    I can't predict that your playing Solitaire while waiting for my progress bar will consume the last of your physical RAM and the system will start paging. I can't predict when your neighbor (on the same network segment) will decide to fire up a torrent session or 20. I can't predict that your CPU fan has clogged with cat hair and the system will go into thermal throttle.

    And all that, just for processes with a known end-point. Plenty of scenarios don't have a known number of steps or bytes or CPU cycles - From something as simple as searching for a file containing a given string (might get it on the first try, might need to scan 8TB of porn before we find the right one), to recursively fetching dependencies with apt-get.


    As much as we want everything our computers do to appear deterministic, it might help to consider most progress bars as less of a measurement of "% complete", and as more of an indication that the program hasn't crashed after three hours of doing nothing obvious.

  196. Predicting the remaining time by Anonymous Coward · · Score: 0

    for a indeterministic process is like providing accurate prediction for a creationist where the evolution is going next. That's how difficult the progress bar problem is.

  197. It's absolutely possible... by Anonymous Coward · · Score: 0

    I have a script I wrote to copy photos from my camera that has an excellent progress indicator.

    Before it starts, it finds the size of each file, so it knows how much data it will copy. Then it copies the files manually -- opening the source and destination and moving the data itself -- so that it can track the progress within each file. After it copies each block of data, it multiplies the time that has passed so far by the amount of data remaining, then divides by the amount of data copied so far, then rounds the result to an integer. If this new estimate is the same as the currently displayed estimate, or it is the same as the currently displayed estimate plus one second, then the display is not updated. Otherwise it converts the value to minutes:seconds and displays it to the user.

    Watching it work is a dream come true. You tell it to copy the photos, and it tells you how many minutes and seconds the process will take, and if there's any jitter at all, it only occurs in the first few seconds. After that, the timer always goes down one second each second until it hits zero, at which point it's finished.

    Honestly, this stuff isn't that hard. If you're copying files, you track how many bytes/second you're able to process. If you're processing images, you track how many pixes/second you're able to process. If you're doing both, you do both at the same time, rather than doing all of one then all of the other, so that you know sooner rather than later how long each process will take. (It also goes faster, if one task is I/O-bound and the other CPU-bound, if you do both at the same time.) If you're downloading files, you track the download rate. If you're accessing multiple servers, you download from all of them simultaneously, so that one of them being slower than the others doesn't mess up your calculations because you're still downloading at the full bandwidth of the internet connection anyway. (Also, this just plain saves the user time whether you're displaying a progress indicator or not, when one of the servers is far slower than their internet connection.) Obviously some situations will be difficult, like when the one large file you need happens to come from the slowest server, and it isn't apparent just how slow it is until all of the other files have completed because, until then, for all you knew, it was slow just because all of the bandwidth was consumed, but fuck... There are solutions to that as well. I've seen progress indicators that are full-screen, with a separate bar & estimate for each file. May not tell the user exactly how long the process is going to take, but gives them an excellent view of what is happening, and certainly tells them whether or not now is a good time to go to lunch.

    I can understand if not all progress indicators run as smoothly as my own. What I don't understand is why essentially none of them run so smoothly.

  198. Resources by jklovanc · · Score: 1

    There are four main resources used when installing software; CPU, mass storage, RAM and network. The problem is that these resources can vary greatly in speed. In general the process goes like in the following order; download (network speed+HD speed), unzip (CPU+HD speed + RAM capacity), Install (CPU + HD speed +RAM capacity and maybe some network). The issue comes in the estimate as to how long each stage takes. For example, a slow system hooked up to a fact net connection would zip through stage 1 and then stall on stage 2.

    There is also the issue of multitasking. The install may be part way through stage 2 and then some other disk intensive process may kick in and grind it to a halt. One may be part way through a download and your torrent client may find lots of peers to talk to.

    The problem with progress bars is that they attempt to use recent past performance to predict how much longer something should take. Due to the variability in performance and resource allocation the past performance has little to do with future performance; even seconds later. I have seen a number of install programs that no longer have a progress bar but a scanner that keeps moving to indicate something is happening but they don't know how long it will take. I prefer a scanner or a % complete bar.

  199. Re:Cost Benefit by ZombieBraintrust · · Score: 1

    No, in your drive to work analogy the progress bar going backwards is a detour. Because of the detour the distance has increased. I think the bar going backwords tells the users information. It tells the user that the install is not going as planned.

  200. Re:Cost Benefit by joelwhitehouse · · Score: 1

    Progress bars do not make sequences of actions complete any faster. In fact, they make them slower.

    The progress bar may use CPU cycles, but this will only make the task slower if the task is CPU bound. IO bound tasks won't go faster in the absence of a progress bar.

  201. Time-to-completion estimates by DragonWriter · · Score: 1

    If this is true (which it is), then logic would dictate that it is pointless to represent a progress bar in measurements of time.

    It makes sense to use a time estimate alongside a progress bar (as long as it is clear that it is an estimate, which is usually the case.) If the time estimate gets stuck (except, perhaps, on the last increment on which an update is possible to the progress bar, where it s quite possibly that even a reasonably non-optimistic method would eventually asymptotically approach 0), its a sign that the estimation method being used to produce the time estimate is probably poor.

  202. You're confusing separate issues... by Anonymous Coward · · Score: 0

    You're confusing the issues of indicating progress and estimating the time that remains. Progress bars show you how much progress has occurred, not how much time remains. Ideally, "progress" is defined as how long it takes to do something, so that the progress increases linearly with time, but that doesn't mean that you label one end of the bar as "1 hour remains" and the other end as "0 hours remain" and move the bar back and forth when your estimate changes.

    Imagine you're building a house, and you estimate a week to lay the foundation, a week for framing, a week for interior work, and a week for finishing. (...because, like the average programmer, you totally suck at creating estimates.) Then you spend two weeks laying the foundation. Regardless of whether you assume the remaining work will take three weeks or six weeks, you're still 25% complete. The only way the progress goes backwards is if, after the house is complete, someone points out that you forgot to have the foundation inspected, and the inspector rightly points out that you should go back to writing computer software where there are no engineering standards and your "it looks good to me" attitude is considered acceptable.

    When people get confused over the simple concept of how a progress bar is even supposed to work, it's no wonder that they so often don't.

    Captcha: Pompous

  203. Re:Hide progress and animations for faster computi by Anonymous Coward · · Score: 0

    My $699 progress bar add on works perfectly. I didn't even have
    to reboot.

  204. Progress measures completion of job, not time by Anonymous Coward · · Score: 0

    I don't think the progress bar measure time, but progress of the task being done. If the computer goes off to lunch, then the progress stops.

  205. Guild Wars 2 by Anonymous Coward · · Score: 0

    ...has the most annoying progress bar I've ever seen. It doesn't measure the size of the files but the number of files so you have no idea how long it's going to take. It could be 95% done after 3 minutes and still take hours to finish. Do I have time to run to the bathroom or do I have time to go grocery shopping? (Or in the case of the preliminary download I might have time to significantly remodel my house.) That's all I want to know...

  206. Why is it so hard to ... by Anonymous Coward · · Score: 0

    train your users better? Users have been exposed to uneven progress rates for years, you would think they could just understand that it is an approximate representation of a large amount of work that the computer is working through. I'm not a user; is it really that hard?

  207. Re:Cost Benefit by PlusFiveTroll · · Score: 1

    That's because the ideas to communicate are complicated.

    Writing one large files IS NOT THE SAME AS
    Writing a bunch of small files IS NOT THE SAME AS
    Copying a file from the internet IS NOT THE SAME AS
    Copying a file from the local network IS NOT THE SAME AS
    Querying and updating the database IS NOT THE SAME AS
    Reading files from a cd-rom IS NOT THE SAME AS.......

    all of which a status bar tries to sum up, poorly.

  208. Because Prediction is Difficult... by Anonymous Coward · · Score: 0

    ...especially about the future.

  209. Just not worth it by DeFKnoL · · Score: 1

    It is not impossible, but it is not worth the effort to create or the extra processing time required to do it. It could even potentially add minutes to your wait time if done poorly.

  210. Let me guess... Acronis? by Anonymous Coward · · Score: 0

    Acronis does this every time I use it.

  211. It's not that hard by maestroX · · Score: 1

    of course, .. once the outer bar is allowed to grow.

  212. Perfectly accurate progress bar! by Hobadee · · Score: 1

    There is at least 1 progress bar which is perfectly accurate!

    --
    ...Had this been an actual emergency, we would have fled in terror, and you would not have been informed.
  213. Re:Hide progress and animations for faster computi by BasilBrush · · Score: 1

    CPU usage is not the bottleneck for file transfers. Your sensation of speed up is imaginary.

  214. It's simple by Anonymous Coward · · Score: 0

    Use a moving average of N samples. All you have to do is figure out the correct N....

  215. It's difficult to make predictions ... by stanjo74 · · Score: 1

    especially about the future ....
    - Yogi Berra

  216. If Slow = Give me debug by snadrus · · Score: 1

    My Favorite "progress indicator" is the one on GParted. Some "steps" can be 100-1000x as long as others and often there is no possible way to know (like chkdsk). So, it lists all the steps & their micro-steps (with timers?), shows you their command-line equivalent (educational), and gives you the most sensible progress possible within each micro-step (sometimes none). The aggregate is logical: In step 1 of 4? 25%, within there if you are on micro-step 2 of 5: 35%.

    It helps because you aren't concerned when the progress is halted at an annoyingly long step. It tells you what to fix if you want better progress here. And it becomes easier to guess if something's halted vs if it's simply taking a while: If writing to MBR is the first step & takes minutes, something's wrong.

    This is similar to the kernel boot process & some video compression software. When in doubt, give us more data.

    --
    Science & open-source build trust from peer review. Learn systems you can trust.
  217. That depends. by ResidentSourcerer · · Score: 1

    Getting it right all the time is impossible. Getting it right 80% of the time should be easy. Much of the problem is due to bad assumptions about 'progress' E.g. The classic windows file copying progress bar. I think it works on the basis of the number of files. The estimation doesn't take into account the size of the files, or the depth of the directory tree, or how busy the disk subsystem is.

    What *should* happen:
    * A better estimation algolrithm taking into account the 4-5 leading factors.
    * Smart modification of that estimate based on a weighted average of the progress to date.

    Sure it's not going to take into account the 'getting hit by a bus' scenario mentioned in another response. But it should be able to make better and better estimates for MOST of the circumstances.

    In addtion, if the program is smart, and sees random events interfering with the progress, it could express a range.

    --
    Third Career: Tree Farmer Second Career: Computer Geek First Career: Teacher, Outdoor Instructor, Photographer.
  218. No, you are joking by Anonymous Coward · · Score: 0

    On the one hand, the logical implication is clear: if we can't predict whether a given program will halt, we certainly can't predict when it will halt.

    But, on the other, who on their right mind would tack a progress bar on a problem that is equivalent to the halting problem, like for example searching for proofs of mathematical theorems with no limitation in lenght?

    An essential ingredient for turing-completeness is precisely the ability to express potentially infinite loops, and in all cases of progress bars the loop is obviously bounded, like for example by the amount of data being transferred, or the amount of processing done for some algorithm.

  219. man tail by tepples · · Score: 1

    What you are describing is stuff to go into log files.

    In which case displaying the title of the current step becomes an option to expand or collapse a view of the tail of the log file inside the progress window. I've seen such a "show details"/"hide details" control in Nullsoft installers on Windows and in Update Manager on Ubuntu. Or are you talking about hiding the entire log file from the user's view until the entire process has completed or failed, so that the user has nothing to Google until it's too late?

    1. Re:man tail by BasilBrush · · Score: 1

      Why would the user have to Google anything? I can't remember the last time an installer failed for anything other than out of disk space and the network failing. Either of which just requires a simple error message, not the perusal of log files. Have you got used to an OS where installations fail and users have to debug them?

    2. Re:man tail by tepples · · Score: 1

      I can't remember the last time an installer failed for anything other than out of disk space and the network failing.

      So how should the end user distinguish a step that's doing something that inherently takes a long time, such as a large transfer through the network, from something that's taking far longer than it should, such as a transfer through the network running at an unexpectedly low throughput or unexpectedly high latency? Or a large write vs. a write to a nearly full, overly fragmented file system? Or distinguish an installer that just happens to take a long time on a specific step on a specific machine from a completely frozen installer? There are a lot of things that can interfere with an accurate ETA that the installer won't know about until it gets to that step.

    3. Re:man tail by BasilBrush · · Score: 1

      So how should the end user distinguish a step that's doing something that inherently takes a long time, such as a large transfer through the network, from something that's taking far longer than it should, such as a transfer through the network running at an unexpectedly low throughput or unexpectedly high latency?

      And there we get to the point of the story. By providing a decent progress bar. One that fulfils it's two requirements.
      1) To reassure users that progress is being made.
      2) To give the user some feel for how long until the process will be finished.

      The ideal for an installer is a progress bar that steps forward in reasonably small increments. And an ETA or Time remaining display. The user will be reassured that the install hasn't frozen so long as the continue to get progress and/or ETAs. Even if the ETAs are increasing rather than decreasing because of the slowdowns you mention, they will still be reassured that the process hasn't frozen.

      An ETA doesn't need to be accurate. It's an estimate. It only needs to fulfil the two requirements I mentioned. And if you know it's rarely going to be a good estimate, then it's best to make it a time remaining display.

    4. Re:man tail by beelsebob · · Score: 1

      So how should the end user distinguish a step that's doing something that inherently takes a long time, such as a large transfer through the network, from something that's taking far longer than it should, such as a transfer through the network running at an unexpectedly low throughput or unexpectedly high latency? Or a large write vs. a write to a nearly full, overly fragmented file system? Or distinguish an installer that just happens to take a long time on a specific step on a specific machine from a completely frozen installer? There are a lot of things that can interfere with an accurate ETA that the installer won't know about until it gets to that step.

      They would debug all these things by opening a terminal, and typing tail /var/something.log. There is no reason to indicate any of them in the actual installer/application. The situations you describe a 0.0001% occurances – stuff that matters nearly never. They should not be shown in a day to day UI, they should be accessible, but require some hoop jumping. The reason you put up with the hoop jumping is because the overall gain in cleanliness and layout of the UI dominates the very rare occurance of wanting to see this information.

  220. The problem is computer science by ddt · · Score: 1

    The problem with progress bars is that computer science hasn't stressed measuring the time and resource cost of different kinds of computation. We talk about the Big-O notation and discuss profiling as if it were a curiosity. This is contributing to making operating systems sloppy about what kind of resources they'll allocate to a given process to the point where the idea of a "real-time" operating system is considered novel and different instead of the norm.

    If we learned a holistic time and resource cost to our code and built in self-profiling in from the start, we could have extremely accurate progress bars, assuming they reflected a deterministic process, which the vast majority are.

  221. You're not an engineer for sure.... by Anonymous Coward · · Score: 0

    Hey fuckface, what you're talking about isn't a progress bar, it's a time estimate. Yes, time estimates are often next to useless, but they aren't progress bars. Progress bars are, well, exactly that... Bars to indicate how much of something has been done, not how much longer that something will take to complete. Just because you often have a time estimate along with a progress bar doesn't mean one is the other.

  222. My 2.14 cents by Anonymous Coward · · Score: 0

    The simple fact that a task is non-deterministic in nature should lead the developer to change "2 minutes remaining" to "approximately 2 minutes remaining" or something similar.

  223. I'm not sure which is worse... by Anonymous Coward · · Score: 0

    that the author is so stupid he doesn't understand the problem,
    or that slashdot has sunk to such new lows as to even entertain this question in the first place.

  224. A variety of factors out of program's control by InsectOverlord · · Score: 1

    A progress bar can be accurate for processes that perform one single action, when all relevant factors are under the program's control or at least predictable. Such as copying one single file, or burning an ISO.

    But processes that perform multiple actions depending on a variety of requirements are quite another story.

    For example, adding or updating an application through the Ubuntu Software Manager in simple terms involves downloading the software (which requires bandwidth) and installing and configuring it (which mostly depends on hard drive/CPU speeds). In many cases, especially for software from non-Ubuntu repositories, software must be downloaded from different servers, each with its own bandwidth, etc. The progress bar for that process is rather inaccurate.

    Progress bars for process that build or update data warehouses or produce complex reports from multiple sources are also very tricky for the same reasons.

  225. Yep, it's THAT HARD.... by Anonymous Coward · · Score: 0

    Modern operating systems are non-deterministic in terms of resource allocation. In other words, you don't know if you're going to have 90% of the CPU or 10% and you don't know if you've got an empty hard drive, or one that's got 1% left and is completely fragmented. On top of that, you don't know if you're running on a single processor generation 1 Pentium, or the most modern multicore processor, so 90% "of what" is undefined (in terms of CPU). You _could_ create a lab of like 20 different PCs (like one for every year since the Pentium came out or something) running various flavors of hardware and doing various things (attempting to broadly simulate your audience), and you could get "in the ball park" for estimated time for your multistep task using statistical analysis of these varying machines, but we're talking about a progress bar here.... is it really worth all that money, time, expense, just to make you feel better about an installation that's going to happen once, maybe twice?

    Now, we could be developing on top of real time operating systems, in which case resource allocation is deterministic (or at least very close to deterministic), and your progress bar would behave very predictably. However, you probably wouldn't like the trade off. Your "looky looky, I can do 15 random things at once, and I don't have to know anything to create Powerpoint presentations" computer would suddenly become much more demanding of your brain, and your software selection would be reduced significantly.

  226. Perhaps a bar is the wrong metaphor by Turminder+Xuss · · Score: 1

    For a file transfer process why not use a picture of two tanks separated by a pipe. Water level in the tanks for source and destination. Size of the pipe and a flow rate for bandwidth and read/write speed. You could tell what an estimated completion time was based on and why it was changing.

    --
    You seem to regard science as some kind of dodge... or hustle.
  227. Because it's hard to predict the future by Anonymous Coward · · Score: 0

    Progress bars are accurate when they measure progress (which many do).
    People complain about their accuracy when they fail to predict/indicate how much longer it's going to take to finish the task. News flash: the application has no idea what the future holds! It knows only about the past, and when the future doesn't match the past, any assumptions predicated on past behavior turn out to be inaccurate as the future comes.

    I would like to add: duh.

  228. Re:Hide progress and animations for faster computi by tuxisthefuture · · Score: 1

    Your probably right about it not being CPU related, but for large tasks verbosity definitely slows the procedure down.

  229. Poor architecture = poor progress by mveloso · · Score: 1

    One of the reasons that progress bars are so hard is that people architect their applications incorrectly.

    Progress bars are an overview of the whole process. If you don't design your application for that use case, you'll get small, atomic operations with no real cohesion - ie: what you tend to get when you do OOP design. Data encapsulation makes it so the left and right hands have no idea what's happening. Plus, your UI code is somewhere off in the distance, and you can't really get to it.

  230. Progress Bar accuracy is a compromise. by weazel2006 · · Score: 1

    It can be very difficult to create a single progress bar that communicates the progress of several unlike tasks. I attempted this once for a project I was doing. I had several file system intensive processes and many other types of processes. (About 40 different unlike tasks in all)

    I gave a 'weight' to the different processes based on my observation of how long each took. It worked great "on my computer" when I was done. (Though the progress bar accounted for about 30 percent of my code at that point and added quite a bit of complexity)

    When I ran it on the production machine it was way off. I adjusted my 'weight' values for different processes to make it better and eventually changed it to give a text description of each time consuming step with percentage complete of each major task. My customer said the exact same thing "is it that difficult to make an accurate progress bar?" The answer is yes.

    I agree that little progress bars flickering all the time are not useful other than that they show that it is doing something. The lack of any feedback would cause the user to want to end the process before it is complete. (Worst case scenario if you don't give the user any progress indicators)

    I think that unless extensive testing is done, most developers put a relatively small amount of effort into creating a progress bar and go on in ignorant bliss believing that it is fairly accurate. It is difficult to get project managers to classify progress bar accuracy as a high priority item. (Especially since most of them are so inaccurate and we are all used to it)

    If you really want an elaborate and accurate progress bar you would have to first come up with a benchmarking system to test the system resources on the system you are installing. (this would run before anything happens) You would then need to apply weight to each type of process based on the tests. Run it on hundreds of different configurations with different amounts of available resources. Write something to capture the results and adjust your weighting system accordingly on the fly.

    All of this will add cost and delays to the project and the installer will take more time to account for the benchmarking and constant checking and adjustments to the weighting system. I guess anything is possible given enough time and money.

    In my opinion after adding hundreds or even thousands of lines of code and a self adjusting weighting system you may or may not be happy with the accuracy of the progress bar. It would most certainly have to go forward and backwards to be as accurate as possible if estimates are constantly changing or it would have to freeze at a certain percentage until the new estimate catches up to the old estimate. (either way would not be perfect)

    Programmers love to go down rabbit holes like this but in business you will go broke spending thousands of dollars on progress bars unless the project is really huge and the progress bar is an essential part of it. (I cannot think of a scenerio that meets these criteria but one may exist)

  231. For the same reason... by marciot · · Score: 1

    ...that you can't ask a software developer when the code will ship.

    The honest ones will say "when I done with it." Others will make up a date and then miss the deadline anyway, because unexpected shit happens.

    Seriously, computers can't magically solve problems that humans themselves haven't any hope of solving.

  232. Duh! by Anonymous Coward · · Score: 0

    Read up about Turing's Stopping Problem

  233. My completely unqualified response is... by Modern+Primate · · Score: 1

    While I am possibly the least qualified reader of Slashdot to attempt to answer this question, my guess it that it's the same reason I have trouble telling my boss when I'll have a given task or project done. Namely that different parts of the project take different amounts of time depending on difficulty, some of those processes are dependent on yet other processes that I can't directly measure myself (because others are involved), and because background processes occasionally spring up as a high priority event that interupts what it is you're asking me to measure (occasionally even causing me to never get back to the original process).

  234. Having done a few progress indicators... by fluffynuts · · Score: 1

    I can tell you that it's not always easy to give back a progress indicator which is meaningful to the user. The user wants to know (generally), how *long* is left, time-wise, where most progress-bars indicate how much of the overall activity is left to complete. The OP actually makes this point quite clear.

    And therin lies the proverbial rub: if you're, for example, unpacking a small app, but you send some kind of statistic or registration information over a network at the end, even though that last sub-action is small (in comparison to the overall process), you're at the mercy of network latency, so that could be anything from 5 seconds to whatever network timeout has been set.

    Trying to give a useful ETA on a progress bar / percentage feedback: now that's a challenge. Just for chuckles, check out http://code.google.com/p/fappy -- it's a playlist generator written in python. I wanted some kind of ETA on there, but I'll be the first to admit that it takes a while to settle and the ETA may rise -- because you can only make future predictions based on past experiences so, whilst you may have zipped through the first 1000 of 20000 files really quickly, you could hit a bunch of super-fragmented files, wait longer on disk IO, and have your ETA rise.

    So the short answer is that it's quite easy to provide a progress bar displaying, essentially, a percentage of completed tasks within a procedure. But tying a progress indicator to an ETA or making sure that all percentage points come at the same time cost -- less than trivial.

  235. also by gzuckier · · Score: 1

    We could use the same algorithm to report to the boss "How far along is your project?"

    --
    Star Trek transporters are just 3d printers.
  236. It is impossible by peawormsworth · · Score: 1

    Your progress bar may have been accurate as far as the total task completion, but not as an estimate of the time remaining to complete it.

    It is well known in coputer science that there is no way to determine through programming how long a process will take to complete, or even whether it is guaranteed to complete at all. Combine that with the fact that your program does not get complete control of the CPU and instead shares time with other tasks.

    1. Re:It is impossible by lpq · · Score: 1

      And yet Dilbertian managers everywhere still ask for schedules that they can hold you to.

  237. Random numbers in ETA; log file privacy by tepples · · Score: 1

    Even if the ETAs are increasing rather than decreasing because of the slowdowns you mention, they will still be reassured that the process hasn't frozen.

    If a time remaining display ends up fluctuating between (say) 1 minute and 1 hour depending on what step the process is on, the user gets the impression that the estimation is uselessly inaccurate. In this case, showing the title of the current step assures the user that the time remaining display isn't just wired up to display random numbers to placate the user.

    Ideally, the program would write a log file containing the title and completion timestamp of each step, and it would send that log file to the developer to help improve the estimation in the next version. But I imagine that a lot of users aren't willing to enable that out of phobia against applications that "phone home". Do you check the "Customer Experience Improvement Program" box (or other publishers' counterparts) when you install software? Showing the title of the current step gives the user something to talk about in reviews even if the user chooses not to share the log file, as a form of indirect customer feedback.

    1. Re:Random numbers in ETA; log file privacy by BasilBrush · · Score: 1

      If a time remaining display ends up fluctuating between (say) 1 minute and 1 hour depending on what step the process is on, the user gets the impression that the estimation is uselessly inaccurate.

      So a well written one won't do that.

    2. Re:Random numbers in ETA; log file privacy by tepples · · Score: 1

      If one step goes far faster than the developer anticipated, and a following step goes far slower than the developer anticipated, what should "a well written one" do?

  238. Progressive disclosure control by tepples · · Score: 1

    The reason you put up with the hoop jumping is because the overall gain in cleanliness and layout of the UI dominates the very rare occurance of wanting to see this information.

    Perhaps it's because I'm a geek, but I disagree that it's a "very rare occurrence". Say the progress dialog has a show/hide button to show or hide this tail display, placed next to the random number generator labeled "estimate of remaining time". How exactly does removing this show/hide button produce an overwhelming "overall gain in cleanliness and layout of the UI"? What it does is provide an incentive to keep the "estimated remaining time" honest.

    1. Re:Progressive disclosure control by beelsebob · · Score: 1

      Perhaps it's because I'm a geek, but I disagree that it's a "very rare occurrence".

      That sounds like you spend a lot of time using a lot of broken software. I can't honestly remember the last time I had to look at an installation log, or kill an application because a progress bar appeared to have stopped doing anything. I don't think it has anything to do with being a geek, .

      Say the progress dialog has a show/hide button [microsoft.com] to show or hide this tail display, placed next to the random number generator labeled "estimate of remaining time". How exactly does removing this show/hide button produce an overwhelming "overall gain in cleanliness and layout of the UI"? What it does is provide an incentive to keep the "estimated remaining time" honest.

      It doesn't take much gain in cleanliness to account for the inconvenience of typing tail /var/something.log once every 100,000 installs. For reference, the reason I think the above UI is poor is because users will click it – users who are not geeks and who are not having any installation problems. They will get bored, and push the button, and then a whole bunch of logging will go on. To 99.9% of users (no, not idiots, users who are not geeks) this will simply look like "some linux scrolling by" or "the matrix". Those users will instantly be made fearful of the application, and what it's doing.

      This is why logs should be stuck in /var, where they belong, not displayed to the user at all times.

  239. Progress bars shouldn't predict the future by purefan · · Score: 1

    The problem is that a progress bar has the faulty conception that it has to predict how long is it going to take when in reality a "progress" bar should indicate how much has it done out of a total to be done. Remove the time prediction and put something that really tells the user that something is happening, for example if you are moving a file put a "Bytes moved" counter or something similar, the user will know that the computer is working on the request and your progress bar may then show really how much has been done

  240. An idea for a better progress bar by foomandoonian · · Score: 1

    This gave me an idea for a better progress bar. I even made a rough animated GIF.

    Some details:

    • It's like a helicopter shot of a car (the 'marker') driving down a highway. The position of the marker correlates to the estimated time remaining.
    • The stripes on the road are to convey a sense of speed. The main purpose of this is to show if a process has hung.
    • The coloured road sections indicate different processes. If possible, the final process should be coloured green.

    To my thinking, this solves the problem of having to 'lie' to the user, while still giving them some useful information about remaining time and assurance that something is happening.

    I'd value some feedback on this idea.

  241. Do logs necessarily induce fear? by tepples · · Score: 1

    That sounds like you spend a lot of time using a lot of broken software.

    No software is shipped perfect.

    [logs] will simply look like "some linux scrolling by" or "the matrix". Those users will instantly be made fearful of the application

    You claim that the availability of logs necessarily induces fear. I'd like to see evidence of this.

    1. Re:Do logs necessarily induce fear? by beelsebob · · Score: 1

      No software is shipped perfect.

      No, but software that can't even install without failing is pretty spectacular.

      You claim that the availability of logs necessarily induces fear. I'd like to see evidence of this.

      Not the availability of logs, the display of logs (even in a semi-hidden way) while performing a task that should silently work every time. It suggests that something is going to go wrong, and you're going to need to read them.

  242. Look, it's accurate! by Anonymous Coward · · Score: 0

    InputBox, usrlp,
    Loop %usrlp%
    {
    Progress, R0-%usrlp%, , , Working on task %A_Index% of %usrlp%
    Progress, %A_Index%
    [TASK]
    }

  243. Installation that depends on a peripheral by tepples · · Score: 1

    software that can't even install without failing is pretty spectacular.

    That depends on the difference between "installation" and "initial configuration". Is a device driver "installed" if no device is connected? Is a program "installed" if it hasn't been able to download essential components through the network? Here, I am including any initial configuration step that does not involve user interaction in installation.

    Consider programs that install by downloading components through the network, programs designed to communicate with a network service, and programs that verify the user's license to execute them through the network. If the server is unreachable, the installation will fail. If the network is unexpectedly slow, such as 0.05 Mbps dial-up or EDGE where the developer was expecting 5 Mbps cable, the estimation of remaining time will jump around, and the user will be curious as to why. A user who can't easily view why will suspect that the program is hiding something from him.

    Or consider the installer for a printer driver. If the user hasn't connected the printer, seated the ink cartridges, and inserted paper correctly, initial configuration will fail.

    1. Re:Installation that depends on a peripheral by beelsebob · · Score: 1

      That depends on the difference between "installation" and "initial configuration". Is a device driver "installed" if no device is connected? Is a program "installed" if it hasn't been able to download essential components through the network? Here, I am including any initial configuration step that does not involve user interaction in installation.

      both of these can be solved in far better ways that showing log files to the user.
      1) by moving to a screen saying "now plug your device in to complete installation"
      2) by popping up an alert saying "hey, no internet connection" or "I can't contact our servers just now" as apropriate.

      Consider programs that install by downloading components through the network, programs designed to communicate with a network service, and programs that verify the user's license to execute them through the network. If the server is unreachable, the installation will fail.

      Yes, and an alert explaining why it failed is the correct way to handle it, not displaying a log file or multiple progress bars.

      If the network is unexpectedly slow, such as 0.05 Mbps dial-up or EDGE where the developer was expecting 5 Mbps cable, the estimation of remaining time will jump around, and the user will be curious as to why.

      No they won't –they'll know very well how their network connection tends to behave.

      A user who can't easily view why will suspect that the program is hiding something from him.

      No they won't – they'll simply think that the program is taking a while to install.

      Or consider the installer for a printer driver. If the user hasn't connected the printer, seated the ink cartridges, and inserted paper correctly, initial configuration will fail.

      Yes, and a screen will be presented saying "Your printer could not be detected. Please make sure you've plugged in it's USB and power connections" with a nice diagram showing where they need to be plugged in. No log file will be displayed.

    2. Re:Installation that depends on a peripheral by tepples · · Score: 1

      No they won't –they'll know very well how their network connection tends to behave.

      But until the program has had a chance to discover what the user "knows very well", the ETA is a lie. So how should the program display an accurate ETA before it has completed enough steps to determine all variables? These include the speed of the primary storage in random writes, B. the speed of the primary storage in sequential writes, C. the speed of the operating system's system-wide configuration repository, and D. the speed of the network? Someone installing software before he has to leave to catch a bus or a flight doesn't want to see the ETA suddenly increase from 5 minutes to 5 hours. Or should the ETA be displayed as "30 seconds + 100 MB download + 100 small files + 100 MB disk + 100 registry entries" until the installer knows how many milliseconds each MB of download, each small file, each MB of disk, and each registry write takes? That's exactly the same as displaying multiple progress bars.

      they'll simply think that the program is taking a while to install.

      You claim that the user will have faith that the program has not hung. I disagree with you if the user has had to deal with programs that time out for whatever reason, such as too-late discovery that the network is unavailable, on this platform or on other platforms.

      "Your printer could not be detected. Please make sure you've plugged in it's USB and power connections" with a nice diagram showing where they need to be plugged in.

      Are you recommending to hide from the user the reason that the printer could not be detected despite the user having told the program that the user had already plugged it in?

    3. Re:Installation that depends on a peripheral by beelsebob · · Score: 1

      But until the program has had a chance to discover what the user "knows very well", the ETA is a lie. So how should the program display an accurate ETA before it has completed enough steps to determine all variables? These include the speed of the primary storage in random writes, B. the speed of the primary storage in sequential writes, C. the speed of the operating system's system-wide configuration repository, and D. the speed of the network? Someone installing software before he has to leave to catch a bus or a flight doesn't want to see the ETA suddenly increase from 5 minutes to 5 hours. Or should the ETA be displayed as "30 seconds + 100 MB download + 100 small files + 100 MB disk + 100 registry entries" until the installer knows how many milliseconds each MB of download, each small file, each MB of disk, and each registry write takes? That's exactly the same as displaying multiple progress bars.

      No, the correct solution here is to simply display one progress bar, and one ETA, and let the user continue to stew about how inacurate progress bars are, because it's better than any of the alternatives.

      Are you recommending to hide from the user the reason that the printer could not be detected despite the user having told the program that the user had already plugged it in?

      No, I'm suggesting that at the point at which the printer was not detected, you have no information more than "uhhh, I couldn't see it on the USB bus", and you present the common options for what's gone wrong. Your log file display is going to provide 0 useful information, because it's simply going to say "uhhh, I couldn't see it on the USB bus".

    4. Re:Installation that depends on a peripheral by tepples · · Score: 1

      You claim that showing one known-inaccurate progress bar and one known-inaccurate ETA and requiring the user to plug in or pair a keyboard and open a terminal to see why it's taking so [expletive] long are "better than any of the alternatives." Not everyone agrees with you.

    5. Re:Installation that depends on a peripheral by beelsebob · · Score: 1

      You claim that showing one known-inaccurate progress bar and one known-inaccurate ETA and requiring the user to plug in or pair a keyboard and open a terminal to see why it's taking so [expletive] long are "better than any of the alternatives." Not everyone agrees with you.

      No, I claim that showing a known-inaccurate progress bar and a known-inaccurate ETA is better than showing a known inaccurate progress bar, a known inaccurate ETA, a known inaccurate second progress flickering upwards and downwards, and a load of log file which contains no information that should not be displayed in a better way to the user.

      While things are progressing normally, the user should be informed "something is happening", and your best guess of when it will be done. When things go wrong, they should be told about it in a way that's more friendly than "here's a big log". If they really want to see the big log (extremely unlikely), it's still accessible.

  244. By this point, the user is already distrusting by tepples · · Score: 1

    the user should be informed "something is happening"

    The program has already proven itself distrustworthy by showing the inaccurate progress bar and ETA. It needs some way to assure the user that "something is happening" in a way that the user isn't inclined to immediately distrust.

    1. Re:By this point, the user is already distrusting by beelsebob · · Score: 1

      The program has already proven itself distrustworthy by showing the inaccurate progress bar and ETA. It needs some way to assure the user that "something is happening" in a way that the user isn't inclined to immediately distrust.

      No, it's shown itself to be exactly as trustworthy as every other program on their computer that has shown a progress bar. Users already know well that ETAs are estimations, and that every progress bar they've ever seen has been somewhat inaccurate. Given that users don't see every single program fail all the time on their machine (in fact, most are unlucky if they see 0.01% of them failing) they have no reason to suspect that this one has too.