diff --git a/client/cs_scheduler.C b/client/cs_scheduler.C index 129d1f3342..e5d4c9df2c 100644 --- a/client/cs_scheduler.C +++ b/client/cs_scheduler.C @@ -567,12 +567,22 @@ int CLIENT_STATE::handle_scheduler_reply( if (!f) return ERR_FOPEN; fprintf(f, "\n" - " %s\n" - " %s\n" + ); + + // tag with the project and scheduler URL, + // but only if not already tagged + // + if (!strstr(sr.global_prefs_xml, "")) { + fprintf(f, + " %s\n" + " %s\n", + project->master_url, + scheduler_url + ); + } + fprintf(f, "%s" "\n", - project->master_url, - scheduler_url, sr.global_prefs_xml ); fclose(f); diff --git a/client/main.C b/client/main.C index 81df2b4185..4b097f0a6e 100644 --- a/client/main.C +++ b/client/main.C @@ -90,7 +90,7 @@ void show_message(PROJECT *p, char* msg, int priority) { if (p) { x = p->get_project_name(); } else { - x = "BOINC"; + x = "---"; } switch (priority) { case MSG_ERROR: diff --git a/client/prefs.C b/client/prefs.C index 95e5f8312f..3d51fc4d0c 100644 --- a/client/prefs.C +++ b/client/prefs.C @@ -35,6 +35,7 @@ #include "message.h" #include "file_names.h" +#include "client_state.h" #include "prefs.h" // the following values determine how the client behaves @@ -111,9 +112,9 @@ int GLOBAL_PREFS::parse(FILE* in, char* host_venue) { } if (match_tag(buf, "")) { continue; - } else if (match_tag(buf, "")) { + } else if (parse_str(buf, "", source_project)) { continue; - } else if (match_tag(buf, "")) { + } else if (parse_str(buf, "", source_scheduler)) { continue; } else if (parse_int(buf, "", mod_time)) { continue; @@ -173,11 +174,18 @@ int GLOBAL_PREFS::parse(FILE* in, char* host_venue) { msg_printf(NULL, MSG_INFO, "GLOBAL_PREFS::parse: unrecognized: %s\n", buf); } } + PROJECT* pp = gstate.lookup_project(source_project.c_str()); + if (pp) { + msg_printf(NULL, MSG_INFO, "Using general preferences from %s\n", pp->get_project_name()); + } else { + msg_printf(NULL, MSG_INFO, "Using general preferences from unknown project %s\n", source_project.c_str()); + } + msg_printf(NULL, MSG_INFO, "General preferences last updated %s\n", time_to_string(mod_time)); if (strlen(host_venue)) { if (found_venue) { msg_printf(NULL, MSG_INFO, "Using your general preferences for %s\n", host_venue); } else { - msg_printf(NULL, MSG_INFO, "General preferences for %s not found; using your default preferences\n", host_venue); + msg_printf(NULL, MSG_INFO, "No separate general preferences given for %s; using your default preferences\n", host_venue); } } else { msg_printf(NULL, MSG_INFO, "Using your default general preferences\n"); diff --git a/client/prefs.h b/client/prefs.h index ce6e18d470..84c0dfc69b 100644 --- a/client/prefs.h +++ b/client/prefs.h @@ -59,6 +59,8 @@ struct GLOBAL_PREFS { int max_memory_mbytes; int proc_priority; int cpu_affinity; + string source_project; + string source_scheduler; GLOBAL_PREFS(); void init(); diff --git a/client/win/wingui.cpp b/client/win/wingui.cpp index ffa2d894c3..63be3bc8a6 100755 --- a/client/win/wingui.cpp +++ b/client/win/wingui.cpp @@ -33,7 +33,7 @@ void show_message(PROJECT* p, char* msg, int priority) { if (p) { x = p->get_project_name(); } else { - x = "BOINC"; + x = "---"; } if(g_myWnd) { diff --git a/doc/credit.php b/doc/credit.php index 2033ba2f47..04e5688ebf 100644 --- a/doc/credit.php +++ b/doc/credit.php @@ -6,9 +6,6 @@ echo "

Each project gives you credit for the computations your computers performs for the project. -These credits are used to generate web-site 'leaderboards' showing -individuals, teams, and categories (countries, CPU types, etc.) -ranked by credit.

BOINC's credit system is based on a 'reference computer' that can do @@ -21,6 +18,10 @@ BOINC's credit system is based on a 'reference computer' that can do BOINC's unit of credit, the Cobblestone 1, is 1/300 day of CPU time on the reference computer. +

+Some BOINC projects grant credit only after +results have been validated. +

Each project maintains two types of credit:

    @@ -37,8 +38,7 @@ Both types of credit (total and recent average) are maintained for each user and host.

    Leader boards

    -The PHP pages supplied by BOINC include basic leaderboards: -top users and hosts, by total and average. + BOINC lets projects export the credit-related parts of their database as XML files. These XML files can be used to generate @@ -69,6 +69,10 @@ Each time new credit granted, the following function is used to update the recent average credit of the host, user and team:
    +#define LOG2 M_LN2
    +    // log(2)
    +#define SECONDS_IN_DAY (3600*24)
    +#define AVG_HALF_LIFE  (SECONDS_IN_DAY*7)
     
     // decay an exponential average of credit per day,
     // and possibly add an increment for new credit
    @@ -95,7 +99,7 @@ void update_average(
         avg_time = now;
     }
     
    - +This function is also invoked
    1 Named after Jeff Cobb of SETI@home "; diff --git a/doc/index.html b/doc/index.html index a6f40808a1..6cafdfd51b 100644 --- a/doc/index.html +++ b/doc/index.html @@ -48,16 +48,16 @@ Help debug and enhance BOINC software. Other resources
        - Source code (download) -
    -     - Source code (CVS). + Source code: + download | + CVS.
        bug-tracking database
        Non-English sites about BOINC +    

    Contact us diff --git a/doc/intro.php b/doc/intro.php index 9ea72f1409..0abf915aff 100644 --- a/doc/intro.php +++ b/doc/intro.php @@ -5,6 +5,11 @@ echo"

    BOINC is a software platform for distributed computing using volunteer computer resources. +

    +A paper about BOINC's design goals is here: +HTML | +PDF. +

    The BOINC's features fall into several areas:

    Resource sharing among independent projects

    diff --git a/doc/intro_user.php b/doc/intro_user.php index f46f8a78ab..da3f6c0676 100644 --- a/doc/intro_user.php +++ b/doc/intro_user.php @@ -51,10 +51,13 @@ echo " This cycle is repeated indefinitely. BOINC does this all automatically; you don't have to do anything. + +

    Credit

    The project's server keeps track of how much work your computer has done; this is called credit. - To ensure that credit is granted fairly, BOINC works as follows: + To ensure that credit is granted fairly, + most BOINC projects work as follows:
    • Each work unit may be sent to several computers.
    • When a computer reports a result, diff --git a/lib/util.C b/lib/util.C index 974e51d333..d2e388e35e 100755 --- a/lib/util.C +++ b/lib/util.C @@ -418,18 +418,17 @@ void safe_strncpy(char* dst, const char* src, int len) { dst[len-1]=0; } +char* time_to_string(time_t x) { + static char buf[100]; + struct tm* tm = localtime(&x); + strftime(buf, sizeof(buf)-1, "%Y-%m-%d %H:%M:%S", tm); + return buf; +} + // return current time of day as ASCII string, no CR // char* timestamp() { - // time_t now = time(0); - // char* p = ctime(&now); - // *(strchr(p, '\n')) = 0; - // return p; - static char buf[100]; - time_t now = time(0); - struct tm* tm = localtime(&now); - strftime(buf, sizeof(buf)-1, "%Y-%m-%d %H:%M:%S", tm); - return buf; + return time_to_string(time(0)); } // set by command line diff --git a/lib/util.h b/lib/util.h index e1dc47fab3..04d86e1189 100755 --- a/lib/util.h +++ b/lib/util.h @@ -49,6 +49,7 @@ extern void canonicalize_master_url(char *url); extern void safe_strncpy(char*, const char*, int); #define safe_strcpy(x, y) safe_strncpy(x, y, sizeof(x)) #define safe_strcat(x, y) if (strlen(x)+strlen(y)