- 드디어 시험 끝 14
- 무한 효율 저하 12
Daybreakin Things
일단 Google Analytics를 이용한 통계 결과입니다. 태터1.1부터 추가된 키워드 통계는 일정 기간이 지나면 리퍼러 로그가 삭제되는 관계로 한 해 적용을 할 수 없었습니다. 해석은 각자 알아서... =3
요즘 다른 사람들 블로그를 읽으면서 책읽는 데 시간을 투자해야겠다는 생각을 하던 차였다. 시험도 끝났고, 방학 스케쥴도 나름 여유(?)있고 하니, 이제 본격적으로 책을 읽어볼까 한다. 우선 다음은 지름 예정 목록.
근데, 제발 교보문고 사이트 좀 Firefox에서 잘 보였으면 좋겠다. -_- 결제야 어쩔 수 없다 쳐도 브라우징만이라도 좀 깔끔하게 되면 안 되겠니. 이참에 Thanks to Blogger 서비스까지 하고 있는 알라딘으로 넘어가버릴지도 모르겠다.
이 이야기는 아마 중학교 국어교과서 쯤에 나왔었고, 그래서인지 많은 사람들이 알고 있다. (물론 방망이를 다른 물건으로 바꾼 패러디도 많다) 이야기의 요는 같은 빨래방망이더라도 얼마나 열정과 정성을 다해 만드는 것인지에 따라 차이가 나는지, 요즘 그런 모습을 볼 수 없는 도시 생활이 안타깝다는 정도가 될 것이다. 그런데 정말 그 노인에 비견할 만한 사람을 만나게 되었다.
다음 달에 우리집이 새 집으로 이사가는데—어디 멀리 가는 건 아니고, 근처 동네다—집 구조에 맞춰서 어머니 화장대, 서재용 책상, 책꽂이 등이 필요해졌다. 그래서 부모님이 수소문 끝에 수지1지구 쪽에서 공방을 운영하시는 한 목수 아저씨를 알게 되었는데, 그 아저씨가 정말 별난 사람이더라는 것이다.
그 아저씨는 운이 좋았는지, 부모님을 잘 만난 것인지 알 수 없지만, 이미 가지고 있는 재산이 상당히 많았고(땅도 많고 자기 이름으로 등록된 회사도 하나 가지고 있다고 함) 그래서 자기가 하고 싶은 일을 찾아 이익에 관계없이 열정만으로 투신했는데 그것이 바로 목수 일이었다. 생계를 바라보고 하는 일이 아니라 정말 자기가 좋아서 하는 일이라는 뜻이었다.
어머니를 통해 들은 이야기로는, 어느 동네 아줌마가 책꽂이를 하나 주문해서 가져갔는데, 그 아저씨가 목재는 환경(온도나 습도 등)의 영향을 많이 받기 때문에 상태를 점검하기 위해 얼마 후에 그 집을 다시 방문했단다. 그런데 생각보다 상태가 안 좋자 그 아줌마는 전혀 문제 없다는데도 불구하고 3개월이나 걸려서 다 고쳐서 다시 설치해줬다고 한다. 그동안 그 아줌마는 책들을 방바닥에 쌓아놓고 살았다고.
지난 주말에 그 아저씨 공방에 화장대 등을 의논하러 부모님과 같이 갔었는데, 그 아저씨는 일단 똑같은 물건을 두 개 이상 만드는 걸 싫어하셨다. 이유인즉슨, 하나하나마다 작품을 만드는 생각으로 하기 때문에 똑같이 만들려고 하면 일이 되지 않는다는 거였다. 전에 미리 얘기했던 서재용 원목 책상에 대한 의논도 했는데, 책상이 넓기 때문에 그 판 구조를 기둥과 어떻게 연결시키고 지탱할 것인가에 대해서 자세한 이야기를 나누었다. (아버지가 건축가시기 때문에 그 방면의 지식이 있어 전문적인 대화가 가능하다) 목수 아저씨는 굳이 그렇게 하지 않아도 된다는데도 튼튼하지만 만들기는 가장 어려운 연결 방식을 택하겠다는 것이었다. 뭐 자기한테 배우러 오는 제자가 그 기술을 배우고 싶다고 해서 가르쳐줄 겸 하겠다나.
그렇다고 해서 그 아저씨가 비싼 값을 받는 것도 아니었다. 그만한 품질의 기성 가구와 비교해도 별로 비싸지 않은 편이라고 한다. 만드는 데 다소 시간은 걸리지만 그만큼 정성들여 만드시기 때문에 고객 입장에서는 아저씨를 완전히 신뢰할 수 있다. 그 아저씨의 특징 중 하나는 견적을 잘 못 뽑는다는 것인데, 만들면서 얼마나 재료가 들어갈지 그런 걸 예상하는 게 아니라 '최대한'의 정성과 노력으로 만들기 때문일 것이다.
공방 한 켠에 왠지 마야 문명이나 아즈텍 문명의 문양으로 보이는 원형 목재 조각품이 하나 있길래, 내가 그 아저씨한테 저건 무슨 컨셉으로 만드신 거냐고 물어봤었다. 그러자 아저씨는 자기 아는 사람이 버리려고 하길래 줏어온 거라면서 아즈텍 달력이라고 했다. 뒷면을 보니 스페인어와 영어 등으로 설명이 적혀 있었는데 좀 오래된 것인 듯했다. (그렇다고 유물 수준은 아니고...) 내가 재미있어 하는 걸 보고 그 아저씨는 흔쾌히 선물이니 가져가라고 하셨다. 인심까지 이렇게 넉넉하신 분이다.
정말, 세상에 몇 없는 행복한 분이라는 생각이 들었다. 돈 걱정 없이 자기가 하고 싶은 일을 하면서 사람들에게 인정받는 것만큼 행복한 삶이 또 있겠는가. 그 아저씨의 순수한 열정이 얼굴에도 덕지덕지 묻어났다. 본인 말씀으로는 순수해서 피곤하게 살았다지만, 참으로 행복한 사람임에 틀림없다. 그 아저씨가 어느 손님이 200만원어치의 제품을 주문해놓고 잠적해버리는 바람에 굉장히 슬펐다는 얘기를 했을 때, 그것이 재료구입비 때문이 아니라 자기 작품을 못 보게 되었기 때문임을 느낄 수 있었다.
기말고사 기간에, 학교 게시판인 Ara에 누가 '말려보아요'란 제목으로 EVE-Online 홍보를 한 적이 있었다. 예전부터 꽤 관심을 가지고 있던 게임이었고, 무엇보다 어렸을 적에 스케치북에 그리던 그림의 70% 이상이 우주를 배경으로 한 상상화였을 만큼 우주에 관한 걸 좋아했던 터라 내심 기대하고 있던 게임이었다. 다행히 시험기간에 말리지 않고 무사히(?) 넘긴 후, 시험이 끝난 그제부터 14일 무료 계정을 얻어 해보는 중이다.
우선 이 게임이 뭔지 소개를 간단히 하자면, 미래의 우주공간을 배경으로 하는 실시간 MMORPG다. 요즘 한창 유행하는 웹게임인 O-Game과 상당히 유사한지만(스킬 찍어두면 로그아웃해도 실시간으로 올라간다든가..), 3차원으로 구현되어 있어서 실제 우주 전투를 경험해볼 수 있다는 메리트가 있다. 또 O-Game의 행성 중심적인 방식과 달리 함선 중심적인 방식을 취하고 있다. (자기가 속한 Corp이나 국가의 스테이션에 자기 아이템들을 맘대로 보관해둘 수 있고, 여러 우주선을 번갈아 타고 다닐 수도 있다) 게임을 만드는 회사는 아이슬란드의 CCP라는 곳이고, 런던에 전세계 통합 서버의 형태를 유지하고 있다. (로그인할 때 시간이 좀 걸린다는 것만 빼면 게임하는 데 전혀 지장이 없다. 게임 설명에 보면 56k 모뎀에서도 할 수 있도록 만들었다고 함)
기본적으로 게임은 스테이션에서 시작하며, 하나의 항성계 내에서는 워프를, 다른 항성계들을 오갈 때는 점프게이트를 이용하는 방식이다. 멀리 있는 항성계에 갈 경우 waypoint를 설정해서 자동 항해 모드를 사용할 수 있다. 이때 각 항성계별로 0.0~1.0 사이의 security level이라는 게 있어서, 숫자가 클수록 안전한 지역이고, 0.5 아래가 되면 상당히 위험한 지역이며, 0.0은 무법지대라고 해서 플레이어들끼리 무차별 공격이 허용된다. (security level이 높은 곳에서도 다른 사람을 공격할 수 있으나 이때는 해당 지역의 NPC 가드들이 공격해와 일반적으로 우주선이 폭파되고 스테이션 도킹에 제한을 받게 된다)
EVE-Online의 첫번째 장점은 시스템 요구 사양이 상당히 낮다는 것이다. 스크린샷을 보면 꽤나 고사양일 것 같지만, 실제로 해보면 우주 배경은 2D를 3D처럼 보이게 한 것 뿐이고, 우주선이나 행성 정도밖에 렌더링되는 게 없어 노트북에서도 아주 잘 돌아간다. (물론 3D 가속이 전혀 없는 내장그래픽의 경우는 조금 딸릴지도 모르겠다) 나중에 DX10도 지원하도록 패치가 나온다하고, 개발사에서 부지런히 개발을 지속하고 있으니 고사양 유저들은 나름대로 즐길 수 있을 것이다.
게임 시스템도 상당히 마음에 드는데, 거의 자유경제로 움직이는 아이템 시장과 가격 변동 추적이 매우 상세하게 나온다는 점 덕분에 정말 시장경제의 원리를 체험(?)할 수 있다. 또한 스킬을 찍어두면 일정 시간 후 자동으로 올라가는 방식이라서 내가 RPG류의 게임을 하며 가장 싫어했던 노가다가 거의 필요하지 않다. (물론 돈을 벌기 위해서 채광을 하거나 미션을 수행하는 등의 일은 해줘야 한다) 이런 시스템 덕분에 게임에 접속해 있는 동안 수동적으로 뭔가 해야 된다거나 하는 게 아니라, 내가 하고 싶은 일을 하면 된다. (아무것도 안 하지만 않으면 돈은 어느 정도씩 벌리게 되어 있다)
그러나 이 훌륭한 게임에 가장 치명적인 단점이 있으니(게임성에 비해 우리나라에 보급이 안 된 주원인이기도 하다), 바로 해외 결제가 필요하다는 것. 외국 회사인데다 국내 법인이 없기 때문에 해외 신용카드 결제 말고는 방법이 없다. (1달 가격은 19$ 정도로 국내의 유료 온라인게임에 비해 꽤 싼 편이다. 물론 돈을 안 내도 계정은 유지되므로 게임을 할 수 있을 때만 하면 된다.) 직장에 다니는 사람들이야 보통 국제 사용이 가능한 신용카드를 가지고 있으니 별 상관이 없으나 나같은 학생들에게는 무리가 있다. (뭐 이쪽 사람들한테 물어보면 다양한 방법이 존재하긴 한다. 하나은행 비바카드를 이용하거나, LG카드에서 우체국/우리은행 계좌로 체크카드 방식으로 만드는 방법 등등...) 외국 게임임에도 불구하고 한글 튜토리얼이 제공되고, 한글 채팅도 지원하는 등 그쪽에서도 한국 유저들을 끌어들이기 위한 나름의 노력(?)을 한 것 같지만 역시 결제 시스템의 불리함은 어쩔 수 없는 것 같다.
아무튼 뭔가 새로운 말림거리를 찾는 사람들에게도, 또 노가다가 싫은 RPG 게임을 떠나고 싶으신 분들에게 추천해주고 싶은 게임이다. 아마 나도 앞으로 계속하게 될 듯싶다. (물론 학기 중에는 숙제와 플젝에 치여 gg..?)
시험이 끝났으니 이런 글을 써주는 게 예의(?)겠죠. 그래서 한 번 써봅니다. (바톤은 라디오키즈님 블로그에서 훔쳐왔습니다. =3=3)
오늘 본 영어2, 확률통계 및 응용, 데이터베이스개론을 끝으로 올해의 모든 시험이 끝났다. 학점은 나와봐야 알겠지만... 확률통계가 영 뒷맛이 좋지 않다. -_-
확률통계는, 두 개의 분반을 각각 가르치시는 교수님의 교육 철학이랄까, 그런 게 달랐던 데다 내가 쉽게 가르치시는 교수님 반이라서 시험 난이도도 안 맞고, 또 내가 있는 반의 시간표대로 시험을 보지 않고 다른 반 쪽 시간표로 시험시간을 맞추는 바람에 하루에 시험이 3개나 몰리는 결과를 초래한, 이번 학기 최악의 다크호스였다. (중간고사에서 우리반 평균이 다른반 평균보다 40점 가까이 낮았다는 소문이 있어서 심히 걱정된다. 성적은 다 합쳐서 주기 때문.)
게다가 교수님 수업도 후반부로 갈수록 들을 만하지가 않아서 더욱 그랬다. 열심히 설명은 하시는데 체계적으로 정리가 안 되어 있고, 솔직히 교수님 설명을 30분 듣는 것보다 10분 동안 내가 책을 집중해서 보는 게 나을 정도였으니까. (재수강임에도 불구하고 서동엽 교수님의 선형대수학개론은 수업이 아주 들을 만했는데 말이다. 비록 전공의 압박으로 수업을 좀 빠지긴 했지만.) 나중에는 수업을 들으러 오는 사람이 반 인원의 20% 정도밖에 안 되었고, 나도 수업 때 가서 차라리 숙제를 하거나 혼자 책을 보는 방향을 택했다.
그래도 나름 숙제하면서 열심히 독학한 거랑 시험 전에 내용 정리를 쫙 했던 게 도움이 되었다. 문제는 시험문제 스타일이 내가 공부한 방향과 맞지 않았다는 것. orz 성적이 뜨면 대충 알 수 있겠지. -_-
그 외의 다른 과목들은 무난했다. 선대개의 경우 오히려 중간고사보다 기말고사의 난이도가 낮아서 전체적인 성적과 비교하면 어찌될지 모르겠다. (다 풀긴 했는데 증명에서 빠뜨린 부분들이 있을 것 같아서 걱정이다.) 심리학개론하고 영어2는 뭐 닥치고 다 외우면 만점 받는 시험이었고—물론 내가 만점이란 뜻은 아님—DB개론도 사실상 암기나 다름없었다. PS는 원래 시험 없이 빡센 숙제와 기말 프로젝트로 끝나는 과목이니 패스.
어쨌든 그런고로 올해 시험이 모두 끝났고, 벌써 카이스트 생활의 반이 지나갔다. 겨울학기부터는 수중로봇 개발에 관한 URP 연구를 할 예정이다.
자, 그럼 이제 슬슬 말려볼까.
추가 : 선형대수학개론 기말고사 성적이 떴는데, 어려운 유도/증명 문제는 고득점을 한 반면 앞쪽의 계산노가다에서 역시.... orz 평균 이상은 나왔다. 예상 학점은 B대.
또 추가 : 일단 너무 피곤해서 잠깐 눈을 붙였는데, 꿈 속에서 뭔가 열심히 계산을 한 끝에 1x1 matrix로 1-root(3)이 나오는 꿈을 꾸었다. (..........) 이거 후유증이 심각한데.
...TNF 포럼에 잠시 들렀더니, 이런 글이 올라왔길래, 잠깐 해줘야지....했던 게 화근이었다. -_-; 글타래를 쭉 보면 말림의 역사가 실시간 리플 대화(.....)로 연결되고 있음을 알 수 있을 것이다.
그나저나 이 말림의 결론 : Firebug와 Web Developer 만쉐~! ;;
뭐 대략 이런 상황...
...이봐요. 지금 어딜 말으시려고...-_-+ (이래놓고 말린다...orz)
너무나 넘쳐나는 스팸으로 인하여 시험 끝나고 대책이 마련될 때까지 임시로 막아둡니다. 트랙백을 원하시는 분은 댓글로 남겨주세요.
...뭐 다 그런 법이다.
PS 인공지능 프로젝트를 할 때 멀티스레드를 썼었는데, 요즘 관심을 갖고 있는 게임인 Supreme Commander도 그렇고 하나의 CPU에 물리적으로 두 개의 연산 코어가 내장된 멀티코어 cpu를 지원하는 프로그램들이 점점 늘어나는 추세이다. 그래서, 단순히 스레드를 생성하는 것 외에, 정말로 코어별로 할당하는 API 같은 게 있나 궁금해졌다. -_-;
그래서 찾아낸 것은 SetThreadIdealProcessor 함수다. 아직 Linux에서는 어떻게 하는지 모르겠으나(OpenMP라는 것이 있는 것 같긴 한데.. 사실 서버 관련해서 리눅스 쪽에서 써먹을 일이 더 많을 것 같다), 윈도우 프로그래밍이라면 멀티코어를 지원하는 NT 계열에서는 다 써먹을 수 있으니 꽤 편리할 것 같다.
멀티코어 시스템에서 돌아가는 윈도우즈에서는 작업관리자에서 프로세스를 오른쪽 클릭하면 '선호도 설정'이라는 메뉴가 생긴다. 이것은 해당 프로세스가 어떤 코어에서 돌게 할 것인지 선택하는 것인데, 역시 API로도 존재한다. 자신이 어느 코어에서 돌도록 할당되었는지 알아내거나 설정하는 GetProcessAffinityMask 함수가 있었다. (Set 함수도 있음)
왜 .NET Framework에 포함이 안 되어 있는지는 모르겠으나(적어도 내가 찾아본 바로는 관련 클래스나 메소드/속성 등이 없었다) 앞으로 멀티스레드 프로그램을 짤 때 써먹으면 좋을 것 같다. 언제 한 번 테스트 프로그램이나 만들어봐야지;
...숙제하다가 막히는 게 있어서 구글 검색을 하러 갔더니..
하아아...
.....OTL
하아... 드디어 대장정을 끝냈다. 전산과 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% 점유하는 경우가 종종 있었는데, 내 컴퓨터는 듀얼코어였기 때문에 전혀 먹통이 되지 않았지만 다른 팀원들 컴퓨터는 원격접속 상태에서 룸메한테 전화해 재부팅시켜달라고 여러번 부탁해야 했었다.
숙제들 중에서도 Problem Solving의 HeptaAI와 같이 어렵지만 하면서 재미를 느끼는 것이 있는가 하면, 별로 공부하는 데 별 도움도 안 되면서 매우 귀찮고 시간도 오래 걸리는 것들이 있는데, 바로 이번학기에 듣고 있는 영어II의 "매주 영어단어 100개씩 정리하기"다.
스스로 단어 정리를 하고 공부를 한다는 취지는 좋았으나, 100개라는 개수가 유발하는 귀차니즘은 숙제 효율을 무한히 떨어뜨리는 것 같다. (사람마다 단어를 맘대로 선택할 수 있기 때문에 어떤 사람은 쉬운 단어로 골라서 하기도 한다) 차라리 독해 본문에 나오는 단어들을 쭉 정리해서 시험을 보는 게 숙제 효율도 높아지고 머리에 남는 건 더 많을 것 같다.
그래도 숙제의 취지를 살리고자 나름대로 뜻도 세세하게 정리하고, TOEFL 단어집 같은 거 찾아서 어려운 단어들도 써놓고 있는데 효율이 떨어지는 건 어쩔 수 없다. 그나마 나중에 뭔가 남기려고 정리했던 단어들을 Naver 단어장 기능(내가 Naver에 가입하고 나서 지식인 조금 써보고 유일하게 쓰고 있는 서비스가 이것이다 -_-)을 이용해 쭉 쌓아두고 있는 정도. 하아;
차라리 너무 길지 않은 흥미있는 기사거리를 찾아서 그걸 번역한다거나 하는 숙제를 내줬다면 독해 공부에도 도움이 되고 좀더 즐겁게 할 수 있었을 것이다. (비록 시간은 좀 걸리더라도, 머리를 더 바쁘게 굴려야 하는 건 틀림없으니.)
이상 숙제하다가 자꾸 말려서 하는 푸념 끝. -_-
원래 2주년은 11월 23일이었는데 바로 아래 URP 글을 쓸 때까지도 까먹고 있었으니...-_-; 여튼 이제 daybreaker 등의 키워드에 대해 구글에서 첫번째로 검색될 정도가 됐고, 이것저것 검색하다가 들어왔다는 사람도 많아지는 걸 보면 페이지랭크(...)가 높아지긴 높아진 모양이다.
그나저나 요즘 근황은 이렇다.
처음에 조교님이 짜준 Java 클라이언트 예제는 달랑 프로토콜을 wrapping하는 PSConnector 클래스 및 GameData 클래스 뿐이었다. (VC++로 준 클라이언트 예제는 말 그대로 알고리즘만 채워넣으면 될 정도였는데 Java를 별로 안 쓸 거라고 생각했는지...) 게다가 PSConnector 클래스에 몇가지 심각한 버그가 있어 삽질을 좀 했다.
결국 조교님께 얘기하여 완전한 형태의 클라이언트 예제를 받아냈는데, 내가 그동안 짠 클라이언트와 정확히 똑같은 버그 - 방어팀 쪽에서 패킷을 깨진 채 받는 - 가 발생, 결국 gg를 치고 말았다. 일단 GUI에 대한 추가점수가 있었기 때문에 GUI를 만들기 편하면서도 Java와 매우 유사한 C#으로 가기로 했고 클라이언트를 밑바닥부터 다시(-_-) 만들었다.
이번에는 Java에서 안 됐던 것들은 잘 되는데, 또 다른 데서 문제가 발생하는 것이다. -_-;; 오늘 하루종일 삽질하다가 gg치고 성당 갔다오니 원인이 발견되었다. (역시 프로그래밍하다 막힐 땐 가끔 다른 일도 해주어야..) 매우 사소한 버그였는데, Java 쪽은 내가 짠 것이나 조교님이 짠 것이나 제대로 되어 있는 걸 보니 확실히 Java쪽은 뭔가 이상하다. (룸메 말로는 첫 게임은 밀려서 진행되고 두번째 게임부터 제대로 된다고 함-_-)
어쨌든 무려 multithread까지 써서 GUI 응답성까지 확보한 C# 클라이언트가 (거의) 완성됐다. 이제 나머지 팀원 2명이 짜고있는 Java AI 코드를 C#으로 포팅하여 테스트 및 최종 조율만 하면 될 것 같다.
.....그러나 이거 토너먼트 진행이 이번 금요일 오후 6시부터인데, 전날까지 숙제 2개 + 퀴즈, 그리고 그날 밤 12시까 또 숙제 1개... orz
11월은 동아리 회장, 총학생회 선거 등이 있는 달이다. 역시 내가 속한 SPARCS와 MR에서도 회장 선거가 있었다. MR의 경우는 종강 파티 겸 회장 선거를 하는 바람에 그날 스팍스 종강과 경곽 동문 기모임, 그리고 확률통계 숙제까지 겹치면서 결국 선거에 참여하지 못했다. SPARCS의 경우는 정모를 확대한 정기총회 형식으로 진행했기 때문에 무난히 참석할 수 있었다.
총 4명의 후보가 있었는데, 두 명은 자진 출마, 다른 두 명(나 포함)은 추천을 받아 출마했다. 첫번째 투표에서 과반수 이상을 얻으면 바로 당선되고, 그렇지 않을 경우 득표 순위 2등까지 뽑아 재투표, 한쪽이 과반수를 넘게 표를 얻을 때까지 계속 반복한다. 간단한(...이라고 하지만 무려 1시간이나 걸린) 정견 발표와 질의응답이 이어진 후 투표에서 아쉽게(?) 한 표 차이로 1차 투표에서 떨어졌다. 사실 이미 하려고 계획 중인 일들이 너무 많았기 때문에, '얼마나 시간 투자를 할 수 있는가'하는 질문에서 그 부분을 솔직하게 얘기했고, 내가 투자할 수 있는 시간이 어느 정도까지다라는 걸 밝혔기 때문에 그 정도면 잘 나온 거라고 볼 수 있겠다. 그렇게 해서 남은 2명의 후보를 가지고 무려 3번의 재투표를 거쳐 한 사람의 당선이 확정되었다.
갑자기 추천받는 바람에 미리 생각하지 못했었지만, 동아리 활동의 비중을 얼마만큼 조절할 것인가 하는 문제, 내가 하고 싶은 일들—TNF 활동, URP 연구, 부전공 코스? 등—의 우선순위를 어떻게 놓을 것인가 하는 문제들을 좀더 곰곰이 생각해볼 기회가 되었다. 결국 내가 내린 결론은, 여전히 학업이 1순위이며, 나머지 활동들은 유연하게 +- 하면서 가야겠다는 것이었다.
*
어쨌든 벌써 12월에 접어들었다. 올해는 정말 본격적인 전공과목의 시작으로 빡센 해였고, 운전면허와 유럽여행 등 새로운 경험들을 했던 해였다. 이제 남은 프로젝트·숙제·기말고사를 무사히 끝내고 나면 URP 연구가 시작될 것이고, 곧 Supreme Commander도 출시되겠지. 내년도 즐겁게 살아보자꾸나!;