| 13 |  | Easy: | 
                        | 14 |  | * Create Makefiles and project files to build the sample applications using MinGW and DevC++. | 
                        | 15 |  | Medium: | 
                        | 16 |  | * Write example FORTRAN application and Makefiles/ project files | 
                        | 17 |  | Hard: | 
                        | 18 |  | * Write an example compound application (and suggest API revisions to make this easier). | 
                        | 19 |  | * Investigate the crlibm library for generating identical results across processors (or at least reducing the number of cases for HR). | 
                        | 20 |  | * Java support: core client checks for the existence of JVM, reports version to scheduler. Write Java wrapper (runs JVM, gives it jar files). Note: Sztaki has already done some part of this. | 
                        | 21 |  | * Same, .NET | 
                        | 22 |  | * Distributed Python: Borrow or invent a notation for master/slave execution in Python. Develop a system that implements this on BOINC, i.e., creates WUs and applications, and harvests the results. | 
                      
                        |  | 13 | (Requires advanced knowledge of PHP, HTML, and MySQL) | 
            
                  
                          | 24 |  |  == Core client == | 
                          | 25 |  | Medium: | 
                          | 26 |  |           * Add a preferences for total download and upload in a month (many Australian ISPs have monthly limits), or per X hours of processing time (see email from Kevin Reed). | 
                          | 27 |  |           * Don't enforce RAM limits unless free RAM is low | 
                          | 28 |  |           * GUI RPC to tell apps to checkpoint and quit. | 
                          | 29 |  | Hard: | 
                          | 30 |  |           * Have the core client sense CPU temperature and throttle CPU if it goes too high. Open-source software for this (on Linux) is at http://www.lm-sensors.org/. | 
                          | 31 |  |           * Windows: get proxy config info directly from the OS | 
                          | 32 |  |           * After an applications exits or is killed (for whatever reason) make sure (after a few second delay) that its subprocesses are gone too. Don't restart the job until this happens. Unix: use process groups and killpg(). | 
                          | 33 |  |           * More generally: make a better state machine for shutting down apps: tell them to checkpoint, wait a little, tell them to quit, clean up straggler processes. | 
                          | 34 |  |           * Same, but for suspend: if we tell a client to suspend and it's still using | 
                          | 35 |  |             lots of CPU after a few seconds, abort it (or something). | 
                          | 36 |  |           * Integrate !BitTorrent ([http://www.rasterbar.com/products/libtorrent/ libtorrent]?) with the core client. | 
                          | 37 |  |           * Do potentially slow RPCs and other tasks (such as computing disk usage) in a separate thread. | 
                          | 38 |  |           * Log result start/ends (for use by 3rd-party software like !BoincView). | 
                          | 39 |  |           * Prevent disk space usage from exceeding user preferences, and enforce resource shares, with file deletion according to project policy. | 
                          | 40 |  |           * Make messages of class MSG_USER_ERROR translatable. | 
                          | 41 |  |           * Vista: if get 'about to shut down' msg from OS, stop apps immediately (don't tell them to checkpoint). Investigate.  | 
                          | 42 |  |           * XML stats: add lat/long to user record? | 
                          | 43 |  | ==  BOINC Manager == | 
                          | 44 |  | Easy: | 
                          | 45 |  |           * If using an AMS, put link to AMS (or user page) in sys tray popup, elsewhere | 
                          | 46 |  | Hard: | 
                          | 47 |  |           * Properties pages for projects, jobs | 
                          | 48 |  |           * Turn off alerts (Rom's working on this) | 
                          | 49 |  |           * Have the Manager do RPCs in a separate thread. | 
                          | 50 |  | ==  Server/Back End == | 
                          | 51 |  | Medium: | 
                          | 52 |  |           * When using HR, if the scheduler has sent one result of a WU using a particular app version, it should use the same app version for other results from that WU. | 
                          | 53 |  | Hard: | 
                          | 54 |  |           * Implement a mechanism so that server software detects incompatible database format | 
                          | 55 |  |           * Scheduler: implement mechanisms so that server: | 
                          | 56 |  |                 * Attempts to send results from the same WU to hosts with similar speed, so that a fast host doesn't have to wait weeks to get credit.  | 
                          | 57 |  |           * Implement a 'benchmark result' mechanism: every host runs a benchmark result per app version, and the CPU time determines credit/CPU for future results  | 
                          | 58 |  | ==  Web features == | 
            
                  
                          |  | 34 | == Applications == | 
                          |  | 35 |  | 
                          |  | 36 | Easy: | 
                          |  | 37 | * Create Makefiles and project files to build the sample applications using MinGW and DevC++. | 
                          |  | 38 | Medium: | 
                          |  | 39 | * Write example FORTRAN application and Makefiles/ project files | 
                          |  | 40 | Hard: | 
                          |  | 41 | * Write an example compound application (and suggest API revisions to make this easier). | 
                          |  | 42 | * Investigate the crlibm library for generating identical results across processors (or at least reducing the number of cases for HR). | 
                          |  | 43 | * Java support: core client checks for the existence of JVM, reports version to scheduler. Write Java wrapper (runs JVM, gives it jar files). Note: Sztaki has already done some part of this. | 
                          |  | 44 | * Same, .NET | 
                          |  | 45 | * Distributed Python: Borrow or invent a notation for master/slave execution in Python. Develop a system that implements this on BOINC, i.e., creates WUs and applications, and harvests the results. | 
                          |  | 46 |  | 
                          |  | 47 | == Core client == | 
                          |  | 48 | (Requires advanced C++ system programming experience) | 
                          |  | 49 | Medium: | 
                          |  | 50 | * Add a preferences for total download and upload in a month (many Australian ISPs have monthly limits), or per X hours of processing time (see email from Kevin Reed). | 
                          |  | 51 | * Don't enforce RAM limits unless free RAM is low | 
                          |  | 52 | * GUI RPC to tell apps to checkpoint and quit. | 
                          |  | 53 | Hard: | 
                          |  | 54 | * Have the core client sense CPU temperature and throttle CPU if it goes too high. Open-source software for this (on Linux) is at http://www.lm-sensors.org/. | 
                          |  | 55 | * Windows: get proxy config info directly from the OS | 
                          |  | 56 | * After an applications exits or is killed (for whatever reason) make sure (after a few second delay) that its subprocesses are gone too. Don't restart the job until this happens. Unix: use process groups and killpg(). | 
                          |  | 57 | * More generally: make a better state machine for shutting down apps: tell them to checkpoint, wait a little, tell them to quit, clean up straggler processes. | 
                          |  | 58 | * Same, but for suspend: if we tell a client to suspend and it's still using | 
                          |  | 59 | lots of CPU after a few seconds, abort it (or something). | 
                          |  | 60 | * Integrate !BitTorrent ([http://www.rasterbar.com/products/libtorrent/ libtorrent]?) with the core client (Janus Kristensen is working on this). | 
                          |  | 61 | * Do potentially slow RPCs and other tasks (such as computing disk usage) in a separate thread. | 
                          |  | 62 | * Log result start/ends (for use by 3rd-party software like !BoincView). | 
                          |  | 63 | * Prevent disk space usage from exceeding user preferences, and enforce resource shares, with file deletion according to project policy. | 
                          |  | 64 | * Make messages of class MSG_USER_ERROR translatable. | 
                          |  | 65 | * Vista: if get 'about to shut down' msg from OS, stop apps immediately (don't tell them to checkpoint). Investigate. | 
                          |  | 66 | * XML stats: add lat/long to user record? | 
                          |  | 67 | ==  BOINC Manager == | 
                          |  | 68 | (Requires experience with !WxWidgets GUI toolkit) | 
                          |  | 69 | Easy: | 
                          |  | 70 | * If using an AMS, put link to AMS (or user page) in sys tray popup, elsewhere | 
                          |  | 71 | Hard: | 
                          |  | 72 | * Properties pages for projects, jobs | 
                          |  | 73 | * Turn off alerts (Rom's working on this) | 
                          |  | 74 | * Have the Manager do RPCs in a separate thread. | 
                          |  | 75 | ==  Server/Back End == | 
                          |  | 76 |  | 
                          |  | 77 | (Requires advanced C++/Unix system programming experience) | 
                          |  | 78 |  | 
                          |  | 79 | Medium: | 
                          |  | 80 | * When using HR, if the scheduler has sent one result of a WU using a particular app version, it should use the same app version for other results from that WU. | 
                          |  | 81 | Hard: | 
                          |  | 82 | * Implement a mechanism so that server software detects incompatible database format | 
                          |  | 83 | * Scheduler: implement mechanisms so that server: | 
                          |  | 84 | * Attempts to send results from the same WU to hosts with similar speed, so that a fast host doesn't have to wait weeks to get credit. | 
                          |  | 85 | * Implement a 'benchmark result' mechanism: every host runs a benchmark result per app version, and the CPU time determines credit/CPU for future results | 
                          |  | 86 |  |