wiki:PrefsUnification

Version 7 (modified by JacobKlein, 9 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 different 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.

Negative:

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.

Positive:

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 time-of-week prefs positively. That's how it's stored in the DB, and it would be a pain to invert it in the UI. So I lean slightly toward positive.

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.

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

Negative prefs would look like:

  • 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

To be most precise, Jacob has suggested using a negative approach, with checkboxes to indicate when to apply a limit that the user may wish to ignore entirely.

His approach, including regroupings and subtle (but important/precise) verbiage changes, is as follows:

Note: Let's get rid of the term "computer". It's a device.

Tools -> Preferences (not "Computing Preferences")

============================================
Tab 1: Computing

Group 1: 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.]

Group 2: When to suspend
Checkbox: Suspend when device is on battery
Checkbox: Suspend when device is being used [which unlocks/requires the X minutes setting] 
Checkbox: Suspend GPU computing when device is being used [which unlocks/requires the X minutes setting] 
Consider the device in use, unless idle for X minutes
Checkbox: Suspend when non-BOINC CPU usage is X percent or higher [the checkbox enables/requires the percentage; integer]
Checkbox: Suspend when device is idle for X minutes [the checkbox enables/requires the percentage]
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]

Group 3: Other options
Switch between applications around every X minutes [Do not allow 0, save/store as integer]
============================================

Tab 2: Memory and Disk

Group 1: Memory usage limits
Use at most X% when device is being used [required, integer]
Use at most X% when device is idle [required, integer]
Checkbox: Leave non-GPU applications in memory while suspended
Use at most X% of page/swap file [required, integer]

Group 2: Disk usage limits
Checkbox: Limit to use no more than X GB [the checkbox enables/requires the value]
Checkbox: Limit to leave at least X GB free [the checkbox enables/requires the value]
Checkbox: Limit to use no more than X% of total disk space [the checkbox enables/requires the value; integer]

Group 3: Other options
Request tasks to checkpoint at most every X seconds [required; integer]
============================================

Tab 3: Networking

Group 1: Work cache
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]

Group 2: 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 data usage to X MB every Y days [the checkbox enables/requires the values]

Group 3: 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]

Group 4: Other options
Checkbox: Skip data verification for image files
Checkbox: Confirm before connecting to the internet
Checkbox: Disconnect connection when done

After brief discussion with David and Charlie, Jacob's amendments to his proposal have been:

- 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.
- 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".
- I intentionally did not mention the web prefs, as "making that look/feel/work the same as the UI" is the job of
  whoever will develop this. Though, I would recommend using the same "tab groupings" and the same "group groupings"
  in both, and even the same tooltips/descriptions, for complete consistency.
- 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?