- 태터툴즈 3주년 4
- 컴퓨터 예상 견적 14
Daybreakin Things
예전에 포스팅했던, 장시간 컴퓨터를 켰을 때 화면 깨짐이 발생했다는 글과 관련된 것이다. 그때 VGA 제조사에 찾아가 A/S로 신품 교환도 받아왔었지만 해결이 계속 안 되어 아예 다른 기종으로 바꿀까까지 고려를 하고 있었다. 그런데, 얼마전 수프림커맨더 관련 자료를 찾다가 XP SP2용 듀얼코어 패치에 관한 게시물을 보게 되었고, 그것을 그대로 따라한 이후로 현재 50시간 가까이 컴퓨터를 켜놨지만 전혀 문제가 발생하고 있지 않다. -_-; 그러니까 문제는 VGA 자체에 있었던 것도 아니고, 드라이버에 있던 것도 아니고, XP 자체의 문제였던 것이다.
수프림 커맨더 때문에라도 VGA를 업그레이드할까 해서 8800GTS 320MB짜리를 눈여겨보고 있었지만 아무래도 좀더 미룰 수 있을 것 같다. 가격대가 20만원대로 떨어지면 사든지, 아니면 2분기쯤 나온다는 R600이나 G90 시리즈 등을 기다리는 것이 좋을 것이다. (G90을 기다리는 이유는 65nm 공정을 통해 전력 소모와 발열이 더 적어질 것이라 예상하고 있기 때문이다)
그나저나, 이와 함께 또다른 문제를 발견했다. 바로 2GB의 RAM을 쓰는 시스템에서는 XP의 최대절전모드가 제대로 동작하지 않는다는 것. 아주 드물게 되는 경우가 있었는데 십중팔구 '리소스가 부족하여 API를 완료하지 못했습니다'라는 에러가 뜨는 것이다. 처음에는 메인보드와 뭔가 호환이 안 되나 했는데 XP 자체의 결함으로 보이며, Vista에서도 같은 증상이 발생하는 경우가 있다고 한다. -_-;
뭐 나는 어차피 데스크탑이라서 최대절전모드보다는 그냥 대기모드를 쓰는 경우가 많고, 특히 화면 깨짐 현상이 해결되었기 때문에 별로 상관 없을 것 같다.
어쨌든 은근히 신경쓰이던 문제가 예기치 않게 해결되어서 기쁘다.
2004년 3월 1일 JH님의 발표를 통해 태터툴즈가 세상에 처음 알려지게 되었습니다. 내일이 그 3주년이 되는 날로, TNC에서는 축하 메시지 및 "나의 첫번째 포스트"의 트랙백 등을 통한 소정의 이벤트를 준비하고 있다고 합니다.
TNC가 참여하는 태터툴즈 1.0 개발은 2005년 겨울에 시작되었고, TNF가 참여하기 시작한 것은 2006년 4월경입니다. 그 동안 정말 많이 변해왔고, 태터툴즈 자체도 엄청나게 큰 프로그램이 되었죠. 하지만 그 무엇보다도 국내의 설치형 블로그 시장을 확대하는 데 중요한 역할을 했다는 것을 잊지 말아야겠습니다.
흐흐, TNF의 일원으로써 태터툴즈 탄생 3주년을 축하합니다!
드디어 몇 년을 기다려온 게임, Supreme Commander의 한정판 패키지가 택배로 도착했다. 게임에 대한 구구절절한 설명은 위키백과(내가 쓴 글이다 -_-)로 대신하고, 한정판 내용물 사진으로 포스팅을 대신한다. :)
한정판 패키지 및 기숙사의 24인치 모니터 (Intro 재생 중)
어쨌든 ESCamp를 통해 최고의 두뇌들이 모였다는 세 학교(서울대, 포항공대, 카이스트) 컴공/전산과 사람들이 모여서 친목 도모도 하고 인공지능 대회를 하는 것은 참 좋은 일이다. 같은 분야를 공부하고 있는 다른 학교 사람들은 어떤 사람들인지 알 수 있는 기회도 되고, 아무래도 혼자 컴퓨터 앞에 앉아있는 시간이 많은 사람들이 바깥에서 사람들과 부대끼며 뭔가 할 수 있기 때문이다. (게다가 넥슨의 후원으로 돈 걱정 없이 마음껏 먹을 수 있는 술과 안주 또한... =3=3)
앞으로도 ESCamp가 계속되었으면 좋겠고, 이번 행사도 즐거웠지만 몇 가지 바라는 점을 적어보겠다. 다음 번은 이번 여름에 서울대에서 개최한다고 하는데 담당한다는 학생분과도 잠깐 얘기했던 것이다.
물론 이런 사항들이 하루아침에 다 반영될 수는 없겠지만, 나는 위의 내용들을 ESCamp에 제안하고 싶다. 뭔가 더 할 말이 있었던 것 같은데 너무 졸린 관계로(이틀 동안 6시간 정도밖에 못잤다) 생각나면 나중에 추가하도록 하겠다.
서울대, 포항공대, KAIST 컴공/전산과 학생들이 모여 게임대회 및 인공지능대회를 하는 ESCamp에 참가하러 포항공대에 내려와있다. 지금은 청암학술정보관 4층에서 원격 데스크탑 접속 중.; inureyes님 말마따나 학교가 언덕길과 계단이 많아서 자전거 타기는 힘들게 생겼지만 여기저기 둘러보니 숲속에 있는 것 같은 조용한 느낌이 좋다. (방학이라 더 그렇겠지만 단점이라면 너무 사람이 없는 것 같달까.) 무엇보다도 도서관은 너무 부럽다. ㅠㅠ 울학교 과학도서관의 그 덜컹덜컹 비상버튼에 손이 가게 만드는 엘레베이터와 이곳의 투명 유리 엘레베이터는 너무나 대조적이다.;;
청암학술정보관 내부
기숙사에 도착해서 inureyes님한테 연락했더니 마침 학교에 계셔사 잠시 학교를 한 바퀴 돌며 토끼군과 함께 산책했다. 뭐 이런저런 잡담도 하고 사진도 찍고;; 노트북은 있으나 카드리더기가 없는 관계로 사진은 이틀 후에나 올릴 수 있을 것 같다. 기숙사 방은 신발을 신고 생활하게 되어 있는 게 특징이고, 각 층이 상층/하층으로 반층씩 나누어져 있어 처음에 방을 찾을 때 헷갈렸다. 휴게실은 (inureyes님의 설명에 따르면) 포스코 이사장인가 하는 사람이 와서 보고는 너무 후졌다며 20억을 던져주고 가서 싹 리모델링한 거라는데 무려 벽걸이 TV가 달려있고 일부는 학생들이 구입한 XBOX 등의 게임기도 있다고 한다. -_-; (그러나 그외 기숙사 나머지 부분은 우리학교가 더 나은 것 같다)
오늘 저녁 때 진행할 게임대회 종목은 바로 빅샷. 작년 여름이었나, 그 전이었나.. 갑자기 말려서 꽤나 재밌게 했던 게임이다. (아, 후원사가 넥슨이라서 넥슨 게임으로 대회를 한다) 보아하니 요즘은 인기가 별로 없는 것 같은데, 그 덕분(?)에 이 게임을 해본 사람이 별로 없어서 상대적으로 내가 유리할 듯하다. (그러나 워낙에 감각이 없어서...orz)
빅샷 게임대회 장면. (나중에 추가)
내일은 하루종일 인공지능 대회를 한다. Problem Solving 기말프로젝트로 했던 것과 거의 같은 방식으로, 위의 게임대회와 인공지능대회 모두 서울대, 포스텍, 카이스트 학생들을 섞어서 조를 짜놓았다. (아까 조원 찾아봤더니 한 명은 카오스하러 가고 한 명은 어딨는지 안 보여서 포기. -_-) 아직 어떤 형태의 게임을 놓고 하게 될 것인지는 알려주지 않아서 꽤 기대된다.
어쨌든 사람들도 사귀고 재미있는 행사가 될 것 같다. :)
글 수정 : 2월 9일에 쓴 글을 2월 11일에 고침. (이미지 추가)
둘째날은 인공지능 대회가 있는 날이었다. 이번에 했던 게임은 비주얼드를 변형하여 커서와 방해블록 개념이 추가된 형태였다. 또한 기존 비주얼드 게임[footnote]Bejeweled. PopGames 참조.[/footnote]은 두 블록을 맞바꿨을 때 없어지는 블록 조합이 있어야 바꿀 수 있지만 이 게임은 그런 제한이 없었다. (따라서 의도적으로 연쇄 제거를 만들기 위해 미리 판의 상태를 바꾸도록 할 수 있다)
뭐, 대략적인 게임 화면은 아래와 같다. 작년인가 ESCamp 및 카포전 인공지능 대회에 참여했던 상위 랭킹 학생들이 만든 서버-클라이언트 프레임웍을 이용해 개발된 것이다.
UPNL팀이 만든 AI 동작 화면
팀 구성은 서울대, 포항공대, KAIST 사람들을 한 명씩 섞어서 3명씩 조를 만드는 방식이었다. 나는 포항공대 04학번 송종혁 형(한살 위)과 서울대 06학번 김은솔 양(동갑)과 함께 팀이 되었는데, 은솔은 알고리즘을 짜는 아이디어는 있었지만 구현을 못한다고 해서 종혁이 형과 내가 다 짜게 되었다. 우선 기본으로 주어진 simple AI와 같이 당장 없앨 수 있는 조합을 찾아서 처리하는 것을 만들고, 한 수를 놓았을 때의 판 상황을 시뮬레이션하는 것과 이를 바탕으로 game tree[footnote]게임 AI 프로그래밍을 할 때, 내가 어떤 수를 놓았을 때 상대방이 어떤 수를 놓을지, 또 그에 대해 어떻게 대응하는 수를 놓을지, 또 그에 대한 상대방의 반응 등을 적절한 평가함수를 통해 예측하여 각 게임 진행과정을 모두 시뮬레이션해보고 가장 좋은 점수를 얻은 경로를 따라 게임을 진행하는 방식이다. 트리의 depth가 깊어질수록 더 멀리까지 내다보게 되지만 연산량이 급격히 증가하는 경우가 많아 최적화를 하지 않는다면 3~4 depth까지 하는 것이 보통이다. 이번 게임의 경우는 번갈아 가며 수를 놓는 방식이 아니라 같은 판으로 시작하여 동시에 실시간 진행을 하는 방식이라서 의미가 조금 다르기는 하다.[/footnote]를 구성하여 평가함수를 통해 최적의 수를 찾아내는 방식으로 만들기로 했다. 그러나 3년째 ESCamp에 참가한다는 형의 조언에 따라 우선 형은 없앨 수 있는 조합을 찾아내는 것을 먼저 완성하기로 했고, 나는 그것과 동시에 같은 기능을 짜고 시간이 허락하면 게임트리를 짜기로 하였다. (사실 하다보니 그렇게 되었다 -_-) 즉, 단시간 내에 구현해야 하므로 너무 완벽하게 짜려고 한다면 아주 실력이 좋지 않은 이상 돌려보지도 못할 가능성이 높다는 것이었다. (실제로 작년 ESCamp에서 우승했던 민종이형의 경우 multithreading을 시도하다가 꼬이는 바람에 기권하고 말았다. -_-)
오전 11시쯤 게임 규칙 설멍을 듣고 코딩을 시작했고, deadline은 오후 8시였다. 문제는, 일단 나와 형 모두 C++에 익숙하지 않았다는 것과, MYTRACE라는 매크로를 이용하여 별도의 디버거 프로그램으로 디버깅 메시지를 출력하는 방법을 제대로 몰라 한참 동안 간단한 버그로 삽질했다는 것, 그리고 내가 평소에 행렬 기반의 알고리즘을 짤 때 사용하는 좌표계(배열의 1차원 index가 x좌표이고 2차원 index가 y좌표인...)와 프레임웍에서 사용된 좌표계가 반대라서 헷갈렸던 것, 그리고 일정 시간 간격으로 호출되는 Action 메소드를 통해 코딩해야 하면서도 모든 오브젝트가 매 호출시마다 새로 생성되기 때문에 별도의 static value들이 보관되지 않는다는 프레임웍 특성을 몰라 삽질했던 것 등으로 초반에 시간을 너무 많이 보냈다는 것이다. Simple AI와 비슷한 수준을 구현하고 나니 오후 5시가 넘었다. 그러나 종혁이 형은 boundary 검사를 잘못해서 발생한 불규칙적인 메모리 오류로 또 한참 삽질하고, 나는 게임트리로 변환하기 위해 코드를 리팩토링하다가 꼬여서 바꾼 블록을 다시 제자리로 되바꾸는 무한 루프에 빠져서 결국 헤어나오지 못했다. (다른 팀에서도 그런 무한 루프가 많이 있었는데 일부는 어찌저찌해서 랜덤하게 탈출하도록 만들기도 했다)
그래도 대진운(?)이 있었는지 부전승, 종혁이 형의 AI 1승으로 8강까지 갔으나 결승진출팀을 만나 5초만에 방해블록이 꽉 차 개관광 당하는 것으로 끝났다. -_-; (이 게임에서 하나의 조합을 없애고 나서 생기는 판의 변경 후 없어질 수 있는 조합이 있을 경우 연쇄가 일어나는데, 이 연쇄 횟수에 따라 점수는 제곱으로 증가하고 상대방 판에 놓아지는 방해블록 개수는 점수에 비례해 증가한다. 따라서 연쇄를 얼마나 빨리 만들어내는지가 관건인데, 우리팀이 1연쇄 정도 만들 동안 그 팀은 6연쇄 만들어서 터뜨림으로써 한 방에.....orz)
결승전 장면. 두 팀의 실력은 비슷하지만 한 번 저렇게 당하고 나면 속수무책이다. -_-
어쨌든 AI 대회는 그렇게 끝났다. 몇 가지 아쉬웠던 점이라면, 코딩스킬이 높은 사람들(특히 ACM ICPC 쪽에서 두각을 보인 분들)와 다른 사람들의 격차가 너무 커서 대부분의 팀이 1사람이 코딩하고 나머지는 구경하거나 전략 보조 정도만 하게 된다는 것, 그리고 잘못된 http 요청을 받으면 out of memory를 뱉고 뻗어버리는 프레임웍의 패킷 검사 버그로 인한 대회 진행 차질이다. (그나마 토끼군이 netstat을 해보라고 해서 겨우 찾아내었다) 프레임웍 코드 자체가 그다지 깔끔하지 않았던 데다가 다른 사람들이 짠 코드를 조금씩 고쳐서 쓴 거라 그런 버그 발생 소지가 더 높았다. (차라리 프레임웍을 새로 만들고 싶었지만 그 또한 삽질이라... -_-)
이 대회를 통해 다른 학교 사람들도 좀 사귀고, 색다른 프로그래밍 경험도 쌓을 수 있어서 좋았다. 역시 경시대회 준비할 때처럼 단시간 내에 주어진 문제를 푸는 훈련이 어느 정도 되어야 이런 인공지능 대회에서 성과를 거둘 수 있는 것 같다. (PS 기말 프로젝트는 시간이 충분히 주어졌기 때문에 토너먼트 2등을 기록할 수 있었다)
내가 컴퓨터를 산 작년 10월 말의 VGA 메인스트림은 GeForce 7600급이었다. 나는 우선 Windows Vista와 Supreme Commander 등이 어떻게 보급되는지 등을 보고 VGA 카드를 결정할 생각이었기 때문에 그보다 더 좋은 성능의 VGA를 살 수 있었음에도 우선 저걸로 1년 정도 버텨보자라는 생각에 고른 것이었다.
당시에는 몰랐는데, 내가 산 게 알고보니 '변종'이라서, 레퍼런스 제품에 비해 살짝 오버클럭이 되어 있는 거였다. 처음엔 몰랐으나 원격데스크탑 등 오랫동안 컴퓨터를 켜두는 일이 많아지자 2D 화면에서 깨짐이 발생하기 시작했다. 오히려 3D 게임 등에서는 별 문제가 없었는데 컴퓨터를 켠지 약 40시간이 넘어가면 저런 증세가 나타났던 것이다.
마침 2주 전에 룸메가 서울 갈 일이 있다고 해서 용산에 있는 VGA 제조사 A/S 센터에 들러 새 것으로 교환을 받았지만, 이전보다 약간 더 증세가 늦게 시작될 뿐 같은 현상이 계속 나타나고 있다.
원래 '버티기' 용으로 산 VGA라서 좀 어중간한 성능—내가 모니터를 24인치를 쓰기 때문에 풀해상도 쓰기에 좀 무리가 있다—으로 산 것이고, 게다가 GeForce 8600/8300 등 DirectX10을 지원하는 차기 메인스트림급 VGA가 3월 정도에 나온다고 발표까지 된 상황이라 바꾸기도 좀 애매하다. (아마도 초기제품보다는 좀더 상황을 보고 올 여름이나 가을쯤 VGA만 업그레이드를 하게 되지 않을까 싶다)
하아, BIOS 업데이트나 VGA 드라이버 업데이트 등이 모두 소용 없었고, 다나와의 상품평을 보면 이 제품에서 특히 불량에 관한 댓글들이 많은 걸 보니 아무래도 계속 문제가 나타날 것 같다. 돈 들여서라도 확 바꿔버릴까...-_-
간만에 뽀샵질;
태터툴즈의 새로운 버전이 공개되었다. 아직 태터툴즈 공식 홈페이지에는 올라오지 않았지만 TNF 포럼에는 먼저 공개되었다. 이번에는 최적화를 거치지 않은 원본 소스 코드와 TNF 검증을 거친 인기 플러그인들이 포함된 Expansion 판도 함께 배포된다. 얼마 전 있었던 rel-tag 사건의 결과로 추가된 rel-tag 지원, 시간 정보가 없는 RSS 피드를 읽지 못하던 문제 수정 등 내가 기여한 부분도 들어가 있고, 예전에 만들었던 '새 창으로 열기' 링크 추가 플러그인은 Expansion pack에 새로 포함되었다.
사실 1.0.6에서 1.1로 넘어올 때는 관리자 화면이 다 뒤집어지는 대변화에도 불구하고 무려 XHTML Specification 담당이라고 적혀있는 내가 거의 한 일이 없어서 해당 작업을 담당하신 graphittie님께 다소 죄송한 마음이 있었는데, 그래도 이번에는 코어 개선에 참여하고 스스로 태터툴즈의 소스코드를 어느 정도 따라갈 수 있게 된 것이 기쁘다.
벌써 TNF가 설립된 것도 1년이 다 되어간다. 수 차례의 오픈하우스 및 내부 오프모임을 통해 이 강력한 참여자들로 이루어진 개발 그룹이 발전하는 과정을 지켜봤고, 나 스스로도 참여자가 되었다는 것이 뿌듯하다. 웹의 생태계를 유지하고 사용자에게 개방형 플랫폼을 제공하자는 목적을 잊지 않고 앞으로도 더 발전해나갈 수 있었으면 좋겠다.
...뭐 다 그런 법이다.
PS 인공지능 프로젝트를 할 때 멀티스레드를 썼었는데, 요즘 관심을 갖고 있는 게임인 Supreme Commander도 그렇고 하나의 CPU에 물리적으로 두 개의 연산 코어가 내장된 멀티코어 cpu를 지원하는 프로그램들이 점점 늘어나는 추세이다. 그래서, 단순히 스레드를 생성하는 것 외에, 정말로 코어별로 할당하는 API 같은 게 있나 궁금해졌다. -_-;
그래서 찾아낸 것은 SetThreadIdealProcessor 함수다. 아직 Linux에서는 어떻게 하는지 모르겠으나(OpenMP라는 것이 있는 것 같긴 한데.. 사실 서버 관련해서 리눅스 쪽에서 써먹을 일이 더 많을 것 같다), 윈도우 프로그래밍이라면 멀티코어를 지원하는 NT 계열에서는 다 써먹을 수 있으니 꽤 편리할 것 같다.
멀티코어 시스템에서 돌아가는 윈도우즈에서는 작업관리자에서 프로세스를 오른쪽 클릭하면 '선호도 설정'이라는 메뉴가 생긴다. 이것은 해당 프로세스가 어떤 코어에서 돌게 할 것인지 선택하는 것인데, 역시 API로도 존재한다. 자신이 어느 코어에서 돌도록 할당되었는지 알아내거나 설정하는 GetProcessAffinityMask 함수가 있었다. (Set 함수도 있음)
왜 .NET Framework에 포함이 안 되어 있는지는 모르겠으나(적어도 내가 찾아본 바로는 관련 클래스나 메소드/속성 등이 없었다) 앞으로 멀티스레드 프로그램을 짤 때 써먹으면 좋을 것 같다. 언제 한 번 테스트 프로그램이나 만들어봐야지;
하아... 드디어 대장정을 끝냈다. 전산과 2학년 전공 중에 SP(System Programming)와 함께 양대산맥을 이루는 가장 어려운 과목인 Problem Solving의 인공지능 토너먼트가 오늘 있었다. (게임 규칙은 이곳 참고) 준수, 상돈, 나로 구성된 우리팀은 이번 카포전에서 인공지능 대회 우승을 이끌었던 멤버들로 구성된 본좌팀(...)을 결승전에서 만나 아쉽게 1점 차이로 져서 2등을 기록했다.
지난 주 주말부터 조교님이 잘못(-_-) 짜신 Java Client 디버깅하느라 이틀 삽질하다 포기하고—조교님이 잘못 짜신 걸 고쳤음에도 결국 Java 소켓의 문제인 것 같다고 결론이 났지만—결국 C#으로 처음부터 아키텍처 다시 잡아서 시작, 지난 주 내내 알고리즘 설계하고 이번 주말 내내 알고리즘 구현 및 뒤집어엎기(;;)를 반복했다. 처음에는 현재 게임판의 상태만 보고 적당히 내가 다음 수를 확보할 수 있는 장소를 찾는 알고리즘을 쓰다가, 그걸 좀더 발전시켜서 내가 수를 확보하고 상대방 수를 막는 장소를, 그러다가 내가 어떤 수를 놓았을 때 상대방이 어떤 수를 놓을지 예측하고 내가 그 다음에 놓을 수가 어떻게 되며 그때의 score는 얼마가 되는지 계산하고 그 중 max값을 주는 수를 선택하는 것 등을 순차적으로 구현했다.
특히 마지막 방법은 Game Tree를 구성하는 것으로, 현재 게임판 상태로부터 내가 놓는 수에 따라 어떻게 게임이 진행될지를 미리 시뮬레이션해보는 것이라고 볼 수 있는데, recursive하게 돌리다보니 생각보다 처리 시간이 매우 오래 걸렸다. (게임 규칙으로 한 수를 놓는 데 10초 이내여야 한다는 제한이 있었음) 멀티쓰레드로 구성하여 인공지능 처리 시간이 9.5초를 넘을 경우 강제로 종료시키고 그때까지 구해진 최선의 수를 선택하도록 제한한 후 알고리즘에서 정확도는 높여주지만 시간을 많이 잡아먹는 부분을 조금 잘라냄으로써 그럭저럭 빠른 실행 속도를 구현할 수 있었다.
일단 예선 리그전에서 seed 배정 받을 때 그 본좌팀하고 맞붙지 않게 되었던 것이 운이 좋았고, 우리가 상대했던 팀들을 생각보다 쉽게(알고리즘이 중간부터 계속 꼬여서 많은 부분을 포기했기 때문에 솔직히 1승이나 하자고 했었으니까..) 이겼던 것이 도움이 되었다.
우리팀 클라이언트 화면 (Manual AI)
사실, 알고리즘에 그다지 자신이 없었기 때문에, "멋진 UI 점수" (프로젝트 홈페이지 참조)로 가산점을 받으려고 했으나, 그 본좌팀(...)에서 단 하루만에 DirectX를 이용한 3D 화면을 구현해버리는 바람에(.....) 그것도 2등으로 밀린 게 아쉬웠다. 하지만 UI 자체의 완성도나 편리함은 우리팀이 가장 좋았다고 말할 수 있겠다. 특히 AI 종류를 선택할 수 있도록 설계하여, Manual AI를 선택할 경우 블록 선택창이나 방해블록 배치, 다음 수 선택하는 것을 직관적으로 구현(마우스로 위치 잡고 클릭 가능하게 구성)했기 때문에 알고리즘 개발 과정에서 테스트할 때 큰 도움이 되었다. (다른 팀에게 이 Manual AI 부분만 사용할 수 있도록 한 버전을 공유하기도 했다) 또한 멀티쓰레드로 만들었기 때문에 GUI가 돌아가는 Main Thread, 그리고 서버 접속과 게임 진행을 관리하는 Game Thread, 거기서 파생되어 인공지능이 작동하는 AI Thread로 나누어 프로그램 안정성과 GUI 응답성을 높일 수 있었다.
어쨌든 그동안 쌓았던 각종 코딩 스킬을 총동원해본 프로젝트였고(특히 위의 그림에 나오는 것과 같은 마우스 선택 화면은 중학교 때 한창 맵에디터 만들어본답시고 삽질을 꽤 해봤던 것인지라..), 아쉽게 명예의 전당까지는 못 올라갔지만 그래도 노력한만큼 좋은 성적을 거둔 결과를 얻었다. 상당히 빡센 과목이었지만 그만큼 남는 것도 많고 알고리즘 생각하는 방법을 많이 배울 수 있었다. (그나마 ACM에서 삽질하고 숙제에서 삽질했던 것들을 기말 프로젝트로 메꿀 수 있게 되어서 다행이다 -_-)
덧. 기쁜 소식 하나 더. 영어2 Writing class에서 기말 에세이 시험 본 게 (완전 개발로 썼음에도 불구하고) 만점(..)이 나왔다. 그나저나 Reading class는 완전 본문 암기 시험일텐데...
덧2. 역시 콘로 CPU를 쓴 새 데탑이 위력을 발휘했다. 클라이언트 제작 과정에서 쓰레드 처리를 잘못하여 무한루프에 걸린 AI가 CPU를 100% 점유하는 경우가 종종 있었는데, 내 컴퓨터는 듀얼코어였기 때문에 전혀 먹통이 되지 않았지만 다른 팀원들 컴퓨터는 원격접속 상태에서 룸메한테 전화해 재부팅시켜달라고 여러번 부탁해야 했었다.
danawa에서 작성한 예상 견적
ACM ICPC에 대하여
주변 사람들은 내가 게임을 거의 하지 않는다고 알고 있지만, 실은 수 년째 이런 대작을 기다리는 중이다. 바로 Supreme Commander(이하 "SC")다. Total Annihilation(이하 "TA")의 후속작으로, 제작사인 Cavedog이 망한 이후 메인 개발자였던 Chris Taylor가 Gas-powered Games라는 회사를 따로 만들어 새로이 개발에 착수하였고, 2007년 그 모습을 드러낼 예정이다.
작년에도 preview 성격의 스크린샷들이 올라왔었는데, 이젠 실제로 "playable"한 상태인 것 같다. 동영상으로 데모만 되는 건가 했더니, 그게 실제 게임 화면이었고, 특히 Chris Taylor가 실제로 시연하는 영상을 보니 거의 눈물이 다 나올 지경이다.
화질은 다소 떨어지지만 게임의 특징은 모두 볼 수 있을 것이다. Big Bertha와 같은 성격의 초장거리포도 보이고, Krogoth와 거의 동급으로 보이는 거미 형태의 수퍼유닛도 등장한다. 전작의 단점이었던 1개의 유닛만 수송 가능했던 수송선도 여러 유닛들을 실을 수 있게 바뀌었고, shield라는 개념이 추가되었다. 이미 전작 TA에서도 nuke rain이라 불리는 전술이 있었지만 SC의 핵미사일은 실제 스케일의 핵미사일과 같은 수준이다. 화질이 좋지 않아서 잘 안 보이지만, 그래픽도 정말 뛰어나다. 바다를 확대하면 물이 찰랑거리는 것이 보일 정도고, 유닛들의 디테일도 TA하고는 비교조차 되지 않을 만큼 상세하다.
겉으로만 보이는 걸 제쳐놓고도, 정말 유닛 컨트롤에 전념할 수 있는 시원한 인터페이스(물론 데모용이라서 일부러 감추었을 수도 있다)와 무려 듀얼 모니터까지 지원하고, 미니맵이 필요 없을 정도의 빠른 zoom-in, zoom-out은 경탄을 자아내게 한다. (내 생각엔 미니맵 대신 듀얼모니터를 쓰라는 것일지도..?)
TA Korea Fansite에서 봤던 글처럼, 기존의 전략시뮬레이션이 자원과 물량 싸움, 그리고 상당히 정형화된 전술 패턴으로 이루어졌다면, SC는 전장 자체를 엄청나게 확장해버림으로써 패턴화가 어렵게 되었다. 초반 압박 같은 것이 사실상 불가능해졌고, 다양한 유닛들을 활용하여 어떤 경로로 보내고 배치하는가가 더욱 중요해지는 것이다. 자원은 얼핏 보기에 metal과 energy라는 형태가 유지될 것 같아 보인다. Chris Taylor 본인조차 정신적 계승을 받은 기존 TA와는 확실한 차별화를 선언했던 만큼 실제 전략적 요소가 얼마나 강조될 지 기대된다. (동영상에서 해전 부분을 설명하는 말을 들어보면, 경로를 지정할 때 무조건 유닛 속도에 따라 도착하는 게 아니라 다른 그룹과 동시에 도착하도록 한다든가 하는 세세한 설정도 가능한 것 같다)
어째 사양의 압박이 좀 있어보이긴 하지만, 내가 유일하게 좋아하는 게임이라 할 수 있는 TA의 후속작이니만큼 그렇게 투자할 만한 가치가 있으리라 본다.