get_info($job); $path = $info->path; echo "

Find the Ellipse!

Click on the center of the ellipse. If you don't see one, click here:

id>
"; } function job_issued($job, $inst, $user) { $insts = $job->get_instances(); if (count($insts) > 1) { $job->set_priority(0); } } function job_finished($job, $inst) { $response = null; if (get_str('submit', true)) { $response->have_ellipse = 0; } else { $response->have_ellipse = 1; $response->cx = get_int('pic_x'); $response->cy = get_int('pic_y'); } $inst->update_info($response); // see if job is done // $insts = $job->get_finished_instances(); $n = count($insts); $results = null; foreach ($insts as $inst) { $results[] = $inst->get_info(); } for ($i=0; $i<$n-1; $i++) { $r1 = $results[$i]; for ($j=$i+1; $j<$n; $j++) { $r2 = $results[$j]; if (compatible($r1, $r2)) { $job->update_state(BOSSA_JOB_DONE); return; } } } if ($n >= 10) { $job->update_state(BOSSA_JOB_INCONCLUSIVE); return; } } // two results are compatible if neither found an ellipse, // or they both did and centers are within 20 pixels // function compatible($r1, $r2) { if ($r1->have_ellipse) { if ($r2->have_ellipse) { $dx = ($r1->cx - $r2->cx); $dy = ($r1->cy - $r2->cy); $dsq = $dx*$dx + $dy*$dy; return ($dsq < 400); } else return false; } else { return !$r2->have_ellipse; } } function job_timed_out($job, $inst, $user) { $job->set_priority(1); } function show_job_summary($job) { $info = $job->get_info(); return "path>View image"; } function show_instance_summary($inst) { $info = $inst->get_info(); if ($info->have_ellipse) { return "ellipse ($info->cx, $info->cy)"; } else { return "no ellipse"; } } function show_user_summary($user) { }