wiki:PrefsUnification

Version 10 (modified by davea, 10 years ago) (diff)

--

Unifying Web and GUI Prefs

Currently the Web and GUI prefs interfaces control the same set of prefs (with some exceptions, see below) but describe them differently. For example, web prefs say

Suspend work while computer is in use?

While the GUI says

Computing allowed while the computer is in use

This difference creates confusion among volunteers. It would be good to unify the description of prefs between Web and GUI.

The two approaches could be called "negative" (when not to compute) and "positive" (when to compute) respectively. The negative would read like:

Compute all the time, except when the computer is in use, OR the CPU load is > .25, OR the time is between 9:00 and 17:00.

which in the positive approach would be:

Compute whenever the computer is not in use AND the CPU load is < .25 AND the time is between 17:00 and 9:00.

Which is clearer and more intuitive? It's kind of a toss-up, except that I think that it's more natural to express time-of-day and day-of-week prefs positively. That's how they're stored in the DB, and it would be a pain to invert them in the UI.

Whichever way we choose, we need to say things precisely. The current GUI wording (positive) is imprecise in two ways:

  • It doesn't explicitly say whether computing is allowed when the computer is not in use.
  • Saying that computing is allowed whenever the computer is in use is not necessarily true; other preferences might disallow computing then.

More precise wording would be:

  • Run CPU tasks when all the following hold:
    • [x] the computer is plugged in, not running on batteries (laptops only)
    • [x] the computer is idle
    • the time of day is between X and Y
    • other CPU usage is less than X%
  • Run GPU tasks if the above conditions hold, and
    • [x] the computer is idle [this can be disabled if the CPU idle setting is set]
  • "Idle" means no mouse or keyboard input in last X minutes

or expressed negatively:

  • Run tasks all the time except when
    • [x] the computer is on batteries (laptops only)
    • [x] the computer is in use
    • the time of day is not between X and Y
    • other CPU usage is greater than X%
  • In addition, don't run GPU tasks when
    • [x] the computer is in use (disable if the above "computer in use" is set)
  • "In use" means mouse or keyboard input in last X minutes

Jacob's proposal

Jacob proposed the following (edited a bit by David). It uses the negative approach. It uses a 2-level hierarchy, which could be implemented with tabs in the GUI. It uses checkboxes (rather than "0 means no constraint") to indicate when a pref should be ignored. All numeric fields are floating point unless otherwise specified.

  • Computing
    • Usage limits
      • Use at most X% of the CPUs [default 100%, do not allow 0.]
      • Use at most X% of CPU time [default 100%, do not allow 0.]
    • When to suspend
      • Checkbox: Suspend when computer is on battery
      • Checkbox: Suspend when computer is in use [which unlocks/requires the X minutes setting]
      • Checkbox: Suspend GPU computing when computer is in use [which unlocks/requires the X minutes setting]
      • Consider the computer "in use" if mouse/keyboard input in last X minutes
      • Checkbox: Suspend when non-BOINC CPU usage is X% or higher [the checkbox enables/requires X]
      • Checkbox: Suspend when computer is idle for X minutes [the checkbox enables/requires X]
      • Checkbox: Suspend when the time is not between X and Y [the checkbox enables/requires the 2 text inputs]
      • Specify day-of-week schedule: [the texts for each should be 2 textboxes per day, not 1]
    • Other
      • Maintain at least X days of work [no need to show the maximum text; instead, show it on validation when user clicks OK]
      • Allow an additional X days of work to be cached [no need to show the maximum text again]
      • Switch between tasks about every X minutes [Do not allow 0]
      • Request tasks to checkpoint at most every X seconds [required]
  • Memory
    • Use at most X% when computer is in use [required]
    • Use at most X% when computer is not in use [required]
    • Checkbox: Leave non-GPU applications in memory while suspended
    • Use at most X% of page/swap file [required]
  • Disk
    • Checkbox: Use no more than X GB [the checkbox enables/requires the value]
    • Checkbox: Leave at least X GB free [the checkbox enables/requires the value]
    • Checkbox: Use no more than X% of total disk space [the checkbox enables/requires the value]
  • Network
    • Usage limits
      • Checkbox: Limit download rate to X KB/s [the checkbox enables/requires the value]
      • Checkbox: Limit upload rate to X KB/s [the checkbox enables/requires the value]
      • Checkbox: Limit network usage to X MB every Y days [the checkbox enables/requires the values]
    • When to suspend
      • Checkbox: Suspend network when the time is not between X and Y [the checkbox enables/requires the 2 text inputs]
      • Specify day-of-week schedule: [the texts for each should be 2 textboxes per day, not 1]
    • Other
      • Checkbox: Skip data verification for image files
      • Checkbox: Confirm before connecting to the Internet
      • Checkbox: Disconnect connection when done

Discussion

Terminology: "Computer"

Jacob: Let's get rid of the term "computer". It's a device. When I think "computer", I think PC or Mac. We work on phones and tablets now, and maybe will even work on watches and toasters in the future! Perhaps "computational device" is most clear, not sure.

David: I'd consider this, but am not convinced. "Device" is a very general term, which could refer to can openers or nuclear warheads. "Computer" means something that computes, so it's a more accurate term even if it has associations with desktop PCs.

Terminology: "Idle"

Jacob: You probably should, as David suggests, mention "keyboard/mouse" somewhere in the UI, to further describe "in use". Though, in your example, you mention playing a movie makes it not idle. Is that true? If so, then maybe we need to mention something more than just "keyboard/mouse".

David: "Idle" currently means no recent mouse/keyboard input. It should also mean not watching a movie, but we haven't figured out how to detect that.

Terminology: "Preferences"

Jacob: I mentioned changing "Computing Preferences" to be just "Preferences", and Charlie disagreed with that. Now I'm torn. Perhaps the best description would be "Device Usage Preferences", but that's pretty wordy. I'm okay with "Computing Preferences", but feel it is a little insufficient. And then we have "Options". How about, for the 2 sets, we go with "BOINC Usage Preferences" and "BOINC Manager Options", for clarity?

David: on the web we also have "project preferences", so let's stick with "computing preferences".