웹 프로그래밍은 언제 하지.. orz
재미있겠다 싶으신 분은 http://code.google.com/p/algospot-judge 에 오셔서 관심 좀~
icpc 채널에 오셔서 JM 을 찾아 주셔도 OK~
2008-08-20 13:34:50,747 DEBUG Judge started. Starting logging ..
2008-08-20 13:34:50,749 DEBUG port=20080 judge_threads=2 log_level=1 daemonize=False
2008-08-20 13:34:50,766 DEBUG Judge thread up and ready: Receiving submissions ..
2008-08-20 13:34:50,768 DEBUG Judge thread up and ready: Receiving submissions ..
2008-08-20 13:34:50,769 DEBUG Main thread initiated! Listening on port 20080 ..
2008-08-20 13:35:08,946 DEBUG XMLRPC Request addSubmission
2008-08-20 13:35:08,947 INFO Submission received. Submission #1, Problem #1, Language cpp
2008-08-20 13:35:08,948 DEBUG #include<cstdio>
int main() { printf("Hello World!"); }
2008-08-20 13:35:08,964 DEBUG Processing submission #1 ..
2008-08-20 13:35:08,966 DEBUG Submission #1/Problem #1 Requires Judge Module ignore_whitespace
2008-08-20 13:35:08,969 INFO Submission #1 Result COMPILING
2008-08-20 13:35:08,979 DEBUG Submission #1/Problem #1: Compiling: g++ -O3 tmp/1/source.cpp -o tmp/1/executable -static -fno-threadsafe-statics
2008-08-20 13:35:09,521 INFO Submission #1 Result RUNNING
2008-08-20 13:35:09,545 DEBUG Submission #1/Problem #1: Running Judge data set a: ~/algospot-judge/sandbox/sandbox -T -i data/1/a.in -o tmp/1/output -a 0 -f -m 65536 -t 1 tmp/1/executable
2008-08-20 13:35:10,616 DEBUG Submission #1/Problem #1: Run OK (0.000 seconds, 756 KB)
2008-08-20 13:35:10,617 INFO Submission #1 Result JUDGING
2008-08-20 13:35:10,625 INFO Submission #1 Result ACCEPTED Accepted Time 0.000 ms, Memory 756 KB
2008-08-20 13:35:15,032 DEBUG XMLRPC Request addSubmission
2008-08-20 13:35:15,033 INFO Submission received. Submission #2, Problem #2, Language cpp
2008-08-20 13:35:15,034 DEBUG #include <cstdio>
#include<cmath>
int main()
{
printf("%.10lf\n", 2.0 * acos(0.0));
}
2008-08-20 13:35:15,049 DEBUG Processing submission #2 ..
2008-08-20 13:35:15,051 DEBUG Submission #2/Problem #2 Requires Judge Module relative_float
2008-08-20 13:35:15,054 INFO Submission #2 Result COMPILING
2008-08-20 13:35:15,061 DEBUG Submission #2/Problem #2: Compiling: g++ -O3 tmp/2/source.cpp -o tmp/2/executable -static -fno-threadsafe-statics
2008-08-20 13:35:15,599 INFO Submission #2 Result RUNNING
2008-08-20 13:35:15,658 DEBUG Submission #2/Problem #2: Running Judge data set a: ~/algospot-judge/sandbox/sandbox -T -i data/2/a.in -o tmp/2/output -a 0 -f -m 65536 -t 1 tmp/2/executable
2008-08-20 13:35:16,716 DEBUG Submission #2/Problem #2: Run OK (0.000 seconds, 768 KB)
2008-08-20 13:35:16,717 INFO Submission #2 Result JUDGING
2008-08-20 13:35:16,725 INFO Submission #2 Result ACCEPTED Accepted Time 0.000 ms, Memory 768 KB
1. 기본적으로 궁극적인 목적은 알고스팟 커뮤니티 성장을 위한 떡밥을 만드는 것입니다! [....]
2. 한글화가 가장 중요한 요소라고 생각하구요. 오픈 소스로 열려 있는 온라인 저지들은 웹과 저지 시스템이 통합되어 있는 경우가 많아, 안정성을 위해 웹 호스팅을 이용하고 있는 알고스팟에 적당하지 않은 등 여러 이유가 있어서 자체 제작을 택했던 걸로 기억합니다. 글고 실은 그냥 만들어 보고 싶어서 [...]
3. 일단은 뼈대만 만들고 있는 중이니, 이 위에 다른 시스템들을 많이 올릴 수 있겠죠. =) 일단 말씀하신 것 중에 레이팅 시스템이랑, 많은 언어 지원은 고려하고 있구요 (어디까지나 떡밥을 위해.. -_-;;;) AC 받은 사람들끼리 서로의 소스코드를 볼 수 있는 기능이나, 문제를 해결한 사람들용 디스커션 보드 등등도 고려하고 있네요. ^^ 글고 기본적인 채점 기준은 GCJ 처럼 화이트스페이스 문자 다 제외하고 비교하는 것이구요, TC 처럼 1e-8 실수 채점도 지원합니다. ^^
또다른 피드백 있으면 주저말고 게시판에 해주셔요~ ㅎㅎ
ASP.NET 기반으로 온라인 저지를 만들고 있습니다. 웹 연동이 아니지만 저지 개발 경험으로 참가 하고 싶습니다.
Native API는 C++/CLI로 작성하고 나머지는 C#으로 작성했습니다.
윈도우 기반으로 한 것은 보안과 안정성 쪽으로는 그런대로 괜찮은데...도움이 될 지 모르겠습니다.
.NET 내부는 신뢰성 있게 짜여 있는지는 모르겠습니다만...지금은 .NET으로 OJ를 만들고 있습니다.
Process 클래스는 프로세스 시작과 종료 시간을 가지고 있기 때문에 WaitExit를 제한 시간보다 몇 ms 많이 하고
종료 확인 되면 한번 더 검사합니다. 서버 안정성을 위해서 Windows Resource Manager로 CPU 할당은 최대 90%,
메모리는 MLE 판정보다 조금 많이 설정한 뒤 Process 클래스가 가지고 있는 메모리 Peak 값을 가져와 한번 더
검사하면 그나마 잘 나옵니다. WaitOne의 Sleep 함수가 1ms 단위라서 TSC를 써서 측정하는 건 힘들 듯 했습니다.
아, 그리고 보안 관련해서는 별도의 최소 권한 사용자를 만들어서 시스템 내의 모든 파일에 액세스 거부 시키고
파일 입출의 경우 해당 파일만 열어 두는 걸로 하고..
닷넷 프로세스 클래스에서는 표준입출력을 스트림 형태로 밖에 가져올 수 없어서 stdin, out을 바로 핸들로 매칭
할 수 없더군요. 그래서 이 부분은 P/Invoke 또는 C++/CLI로 API를 직접 호출해서 파일 핸들을 넘겨줍니다.
아예 윈도우 기반이라고 집어 놓고 하다 보니 클래스 자체도 굉장히 폐쇠적인 구조를 띄고 있습니다;;


1. online judge를 만들겠다고 하는 목적이 한글화인지? 아니면 algospot만의 독특한 judge를 만드려는 것인지? 물론 두마리 토끼를 다 잡았으면 합니다.
2. 목적이 한글화라면 open source로 나와있는 online judge를 수정해서 쓰고 문제 번역과 출제, 풀이 등에 집중하는 건 어떨까요?
3. 목적이 독특한 judge라면 아이디어를 수집해서 새로운 규칙을 만들어 보는건 어떨까요?
Topcoder의 challenge system도 재미있고.. rating system도 괜찮구요..
GCJ의 로컬에서 실행시켜서 결과만 수집하는 것도 나름 재미있는것 같고..
SPOJ 처럼 Test case별로 점수가 다른 것(GCJ의 small, large하고 비슷)도 재미있고.. 많은 언어(computer language)를 지원하는 점도 괜찮고..
uva는 space하나만 더 찍어도 wrong answer라고 나오는 건 정말 마음에 안들고...
algospot은 어떤 걸 만드실 계획이신가요?? 일단.. 설계부터... 활발하게 토론이 이루어졌으면 합니다.
저도 시간나는대로 참가하겠습니다. ^^