= 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 limits should be applied. 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 }}}