void dump_record(const as_record* p_rec)
{
	if (! p_rec) {
		info("  null as_record object");
		return;
	}

	if (p_rec->key.valuep) {
		char* key_val_as_str = as_val_tostring(p_rec->key.valuep);

		info("  key: %s", key_val_as_str);

		free(key_val_as_str);
	}

	uint16_t num_bins = as_record_numbins(p_rec);

	info("  generation %u, ttl %u, %u bin%s", p_rec->gen, p_rec->ttl, num_bins,
			num_bins == 0 ? "s" : (num_bins == 1 ? ":" : "s:"));

	as_record_iterator it;
	as_record_iterator_init(&it, p_rec);

	while (as_record_iterator_has_next(&it)) {
		dump_bin(as_record_iterator_next(&it));
	}

	as_record_iterator_destroy(&it);
}
Exemple #2
0
int WINAPI iso_patch_byte(int iso_type, char *iso_file, int need_ecc_edc, int iso_offset, char *patch_buf, int patch_bytes)
{
	int nRet;
	char *pTmpFile = "$$$patch.$$$";
	nRet = dump_bin(pTmpFile, patch_buf, patch_bytes);
	if (nRet < 0) return PATCH_ERR_TEMPFILE;

	nRet = iso_patch_file(iso_type, iso_file, need_ecc_edc, iso_offset, pTmpFile);
	_unlink(pTmpFile);

	return nRet;
}
Exemple #3
0
main(int argc, char**argv) {
	lgopen(argc,argv);
	char *fname_inerr[5];
	int nscores=0;
	int nweights=0;
	double weights[100];
	char *fname_qualify=NULL;
	int nloops=10000;
	int copt=1;
	int i;
	for(i=1;i<argc;i++) {
		int rc=score_argv(argv+i);
		if(rc>0) {
			i+=rc-1;
			continue;
		}
		if(!strcmp(argv[i],"-le"))
			fname_inerr[nscores++]=argv[++i];
		else if(!strcmp(argv[i],"-lew"))
			weights[nweights++]=atof(argv[++i]);
		else if(!strcmp(argv[i],"-se"))
			fname_outerr=argv[++i];
		else if(!strcmp(argv[i],"-sq"))
			fname_qualify=argv[++i];
		else if(!strcmp(argv[i],"-l"))
			nloops=atoi(argv[++i]);
		else if(!strcmp(argv[i],"-c"))
			copt^=1;
		else if(!strcmp(argv[i],"-a"))
			aopt=1;
		else if(!strcmp(argv[i],"-lm"))
			load_model=1;
		else if(!strcmp(argv[i],"-sm"))
			save_model=1;
		else {
			lg("Unrecognized argument %d %s ?\n",i,argv[i]);
			lg("-le <fname> - load precomputed error file.\n");
			lg("-lew <weight> - In case of several -le, use wrights, instead of fit\n");
			lg("-se <fname> - store resulted error file.\n");
			lg("-l <n> - number of training loops to perform\n");
			lg("-a - Perform training also on probe data\n");
			lg("-c - Dont clip scores to be between 0...4\n");
			lg("-sq <fname> - write qualifying submission to file.\n");
			lg("-lm - load precomputed model.\n");
			lg("-sm - save computed model.\n");
			exit(0);
		}
	}
	if(fname_qualify && !aopt)
		lg("WARNING: -sq without -a\n");
	if(fname_qualify && !copt)
		lg("WARNING: -sq with -c\n");
	if(nweights && nscores && nweights!=nscores)
		lg("Number of weights %d (-lew) does not match number of files %d (-le)\n",nweights,nscores);
	
	load_bin(useridx_path,useridx,sizeof(useridx));
	{
		int count[4],u,k;
		ZERO(count);
		for(u=0;u<NUSERS;u++)
			for(k=1;k<4;k++)
				count[k]+=useridx[u][k];
		lg("Train=%d Probe=%d Qualify=%d\n",count[1],count[2],count[3]);
	}	
	load_bin(userent_path,userent,sizeof(userent));
	if(nscores) {
		if(nscores==1)
			load_bin(fname_inerr[0],err,sizeof(err));
		else if(nweights)
			loadmix(fname_inerr,nscores,weights);
		else
			loadmix(fname_inerr,nscores,NULL);
	} else {
		int i;
		for(i=0;i<NENTRIES;i++)
			err[i]=(userent[i]>>USER_LMOVIEMASK)&7;
		globalavg();
	}
	if(copt) cliperr();
	rmse_print(copt);
	
	// if(nloops)
	{
		score_setup();
		if(copt) cliperr();
		rmse_print(copt);
	}
	
	int loop;
	int rc=1;
	for(loop=0;loop<nloops;loop++) {
		lg("Loop %d\n",loop);
		clock_t t0=clock();
		if(!score_train(loop))
			break;
		lg("%f sec\n",(clock()-t0)/((double)CLOCKS_PER_SEC));
		if(copt && !dontclip) cliperr();
		dontclip=0;
		rmse_print(copt);
	}

	if(fname_outerr) dump_bin(fname_outerr,err,sizeof(err));

	if(fname_qualify) {
		FILE *fp=fopen(fname_qualify,"w");
		char *qualify_path="data/qualify.bin";
		unsigned int *qualify=malloc(NQUALIFY_SIZE*4);
		load_bin(qualify_path,qualify,NQUALIFY_SIZE*4);
		unsigned int *q=qualify;
		while (q<(qualify+NQUALIFY_SIZE)) {
			int m=*q++;
			fprintf(fp,"%d:\n",m+1);
			int l=*q++;
			int j;
			for(j=0;j<l;j++) {
				int u=*q++;
				int base2=useridx[u][0]+useridx[u][1]+useridx[u][2];
				int d2=+useridx[u][3];
				int k;
				for(k=0;k<d2;k++) {
					if((userent[base2+k]&USER_MOVIEMASK) == m)
						break;
					//lg("%d\n",userent[base2+k]&USER_MOVIEMASK);
				}
				if(k==d2) error("Bad qualify %d %d\n",m,u);
				fprintf(fp,"%.1f\n",8.-err[base2+k]);
			}
		}
		fclose(fp);
	}
}