sub problems () { SMEMBERS cp . 'problem' }
sub contests () { SMEMBERS cp . 'contest' }
+sub users () { SMEMBERS cp . 'user' }
sub jobcard () { GET cp . 'job' }
sub job_results (_) { decode_json HGET cp . "job.$_[0]", 'results' }
defhash problem => qw/name level statement/;
defhash contest => qw/start end name owner/;
defhash job => qw/date extension filesize private problem result result_text user/;
-defhash user => qw/name email town university/;
+defhash user => qw/name email town university level/;
sub clean_job (_){
HDEL cp . "job.$_[0]", qw/result result_text results daemon/