- 태터툴즈 3주년 4
- 봄학기 개강입니다. 10
- 숨겨진 실력자들 13
Daybreakin Things
2004년 3월 1일 JH님의 발표를 통해 태터툴즈가 세상에 처음 알려지게 되었습니다. 내일이 그 3주년이 되는 날로, TNC에서는 축하 메시지 및 "나의 첫번째 포스트"의 트랙백 등을 통한 소정의 이벤트를 준비하고 있다고 합니다.
TNC가 참여하는 태터툴즈 1.0 개발은 2005년 겨울에 시작되었고, TNF가 참여하기 시작한 것은 2006년 4월경입니다. 그 동안 정말 많이 변해왔고, 태터툴즈 자체도 엄청나게 큰 프로그램이 되었죠. 하지만 그 무엇보다도 국내의 설치형 블로그 시장을 확대하는 데 중요한 역할을 했다는 것을 잊지 말아야겠습니다.
흐흐, TNF의 일원으로써 태터툴즈 탄생 3주년을 축하합니다!
교양 수강신청에 실패한 관계로, 또 서남표 총장님의 개혁안으로 인해 듣고 싶은 상당수의 과목이 화/목요일에 몰리면서, 전공으로만 채운 암울한 학기가 시작되었다. -_-;
월수금 수업 만들고 강의시간 1시간으로 줄이고.. 뭐 다 좋은데, 종전과 같이 1시간 반 수업을 하는 화목 수업에 교수님들이 강의를 몰아 개설하면서 어떤 사람들은 오전 9시 반부터 오후 6시 반까지 수업이 꽉 차서 점심도 먹을 수 없게 되는 일이 발생하기도 했다. 사실 나도 교양을 억지로 골랐다면 그랬겠지만 차마 그럴 수는 없고, 교양은 아직 들을 기회가 남아 있기 때문에 그렇게 하지 않았다.
확실히 개강하니까 사람들이 많아졌다. 학교 내 임의의 장소를 바라봤을 때 사람을 볼 확률이 5배 높아지고 그 사람 수는 5배 많아졌다고나 할까. -_- 동아리 정모에도 사람이 많아지고, 07학번(무려 07학번! orz)들로 보이는 사람들도 상당수 돌아다니고 있다. 엔드리스 로드 또한 사람들로 활기(?)가 가득하다.
방학 때도 계속 학교에 있었더니 뭔가 개강이 개강 같지가 않지만, 어쨌든 알고리즘은 첫 시간부터 진도를 나갔다. 이제 방학 때의 폐인 생활에서 벗어나야지.
ps. 그나저나 URP는 중간보고서 내고 나서 모델로 삼을 로봇이 바뀌는 바람에 일부 리셋되었다. -_-;
드디어 몇 년을 기다려온 게임, Supreme Commander의 한정판 패키지가 택배로 도착했다. 게임에 대한 구구절절한 설명은 위키백과(내가 쓴 글이다 -_-)로 대신하고, 한정판 내용물 사진으로 포스팅을 대신한다. :)
한정판 패키지 및 기숙사의 24인치 모니터 (Intro 재생 중)
룸메 말마따나, 우리학교에는 온갖 분야의 본좌들이 다 모여 있는 것 같다. -_-;
아까 저녁때 아는 형이 수프림 커맨더 정식판 영문버전을 입수했다고 하셔서 그거 구경하러 갔다가 갑자기 내리기 시작한 비에 갇혀서 학부 지역에서 계속 맴돌고 있었다. (하필 스팍스 동방에 아무도 없었다) 마침 피아노책도 가져갔던 터라 매점 2층 다용도실에 갔다.
들어가니 한 사람이 쇼팽의 왈츠곡들을 피아노로 치고 있었고, 또다른 한 사람이 바이올린을 만지작(?)거리고 있었다. 누군지는 몰랐지만 쇼팽 왈츠를 제법 들을 만하게 연주하길래 혼자 손으로 따라해보며 기다리는데, 바이올린을 만지던 사람이 나에게 말을 걸어왔다. 얘길 들어보니 07학번이라고 하는데, 바이올린을 잠깐 켜는 걸 보니 보통 실력은 아닌 것 같았다.
그러는 사이 피아노를 치던 사람은 나갔고, 나는 들고온 모차르트 곡들을 죽 쳤다. (대충 내가 요즘 치는 곡들은 다 쳐봤으니까 꽤 오래 쳤던 것 같다.) 바이올린을 들고 있던 그 학생은 뒤에서 따로 연습하고 있었고.. 그러다가 내가 너무 오래 쳤는지, 조율이 풀렸다며 다시 음을 맞춰야 하기에 멈추어 줄 수 있냐고 물어왔다. 그 사이 같은 07학번 친구들로 보이는 사람들이 몇몇 와서 이야기를 하고 있었는데, 나는 아까 들은 소리가 예사롭지는 않은 것 같아 피아노책들을 정리하고 같이 앉아서(;;) 연주를 들었다.
정확히 무슨 곡인지는 모르겠으나 3악장의 소나타 곡으로 꽤 많이 들어봤던 멜로디였다. (책 겉표지가 Bach였던가.. 얼핏 봐서 잘 기억이...) 그 연주는, 바로 지난 졸업식 때 졸업하신 송원태 선배를 생각나게 했다.; 그 선배보다 소리의 완숙미나 안정감은 조금 덜했지만, 디테일한 부분까지 무리없이 소화해내고 있었고 테크닉 면에서도 상당한 수준인 것 같았다. 1악장, 2악장, 3악장, 코다, 주제의 반복... 다용도실의 텅 빈 공간에 울려퍼지는 풍부한 바이올린 선율로 간만에 귀가 즐거운 시간을 보낼 수 있었다.
연주가 끝나고 나서 (친구들에게) 물어보니 부산과학고 출신이란다. 나는 실내악 앙상블 수업과 학교에서 악기를 연습할 만한 장소 등을 얘기해주고 내 소개를 했더니, 그 친구 중 한 명이 '혹시 daybreaker님 아니세요'라고 물었다. -ㅁ-; 알고보니 그 친구는 무려 토끼군-_-까지도 알고 있었다; (세상은 좁다...-_-) 어쨌든 바이올린을 켰던 그 학생은 이름이 소형준이라고 했다. (아마 내 블로그에 오시는 분들 중 아는 사람이 있을지도..) 앞으로 마주치면 인사라도 나누자라고 마무리를 하고 빠져나왔다.
정말이지 내가 로또 당첨되었을 때 학고 싶은 일에 1등으로 적은 게 괜히 다용도실 리모델링이 아니다. 우리학교에는 정말 A로 성적표를 휩쓰는 ls***님-_-과 같은 분도 있지만, 다방면에 끼를 가진 사람들이 정말 많다. 이런 사람들이 숨겨진 재능을 마음껏 발휘할 수 있는 학교 환경이 갖추어졌으면 좋겠다. (아마도 그 형준도, 소위 말하는 엄친아가 아닐까 지레짐작 중이다 =3=3=3)
어제 ESCamp 끝나고 늦게 기숙사에 도착해서 블로그 글을 포스팅하고 있는데 전화가 한 통 왔다. MR 동기인 태경이 형의 전화였는데, 오늘 ICU에서 발명 동아리 연합회를 만드는 행사가 있으니 같이 가줄 사람이 필요하다는 거였다. 그다지 바쁜 건 없었기 때문에 한 번 가보자고 했고, MR 임원진 3명과 내가 오늘 그 행사에 갔다왔다.
ICU의 신생 동아리인 IIC(ICU Invention Club)의 주도로, 포항공대의 창작로봇 동아리인 Power On과 KAIST의 로봇 동아리인 MR의 연합을 만들고, 전발련(전국대학발명동아리연합회)의 가입을 추진하여 각 동아리가 가진 로봇 기술과 발명 아이디어를 연결해본다는 내용이었다. 시작은 IIC에서 먼저 제안했지만 공동주권을 가지고 운영한다고 했다. 매 학기 두 차례 모임을 갖고, 각 모임은 학교별로 돌아가면서 하기로 하였다. 전발련 가입과는 별도의 성격을 가지는 세 동아리의 연합회 이름은 ARI('아리')라고 짓게 되었다.
사실 Power On 측도, MR 측도 발명과 거리감이 있어 처음에는 전발련 가입에 살짝 부정적인 입장이기도 했던 것 갈다. (또 뭔가 연합회에 가입하면 이것저것 해야 하는 일도 생기니 그런 게 동아리 활동에 부담이 되지 않을까 하는 것도 있었던 것 같고.) 하지만 발명에 관심있는 사람들이 대부분 잘 모르는 로봇 제작 기술을 발명과 접목시키면 보다 재미있는 작품을 많이 만들 수 있을 것이라는 것과, 또 특허나 지적재산권에 관련된 부분을 잘 모르는 로봇 동아리들이 그 방면으로 도움을 받을 수 있을 것이라는 이야기로 모두 수긍하였다.
사실 나는 다른 것보다도 포항공대 로봇동아리 Power On이 상당히 인상깊었다. MR의 경우 역사도 오래되고 많이 알려진 동아리기 때문에 외부 지원이 많아 비교적 비싼(-_-) 로봇들을 조작하거나 개발할 기회가 많은 편이지만, Power On의 경우는 한때 로봇축구를 좀 하다가 몇년 간의 공백기 후 정체성을 바꾼 쪽이었고 상대적으로 가난한(?) 재정을 운영하고 있는 모양이었다. 그러나 현 회장 박철우군(동갑)의 개혁(?)으로 '만들고 싶은 로봇을 만들자'는 방향으로 동아리 활동 방향을 바꿨고, 갖은 삽질을 통해 다작(多作)하여 재미있는 것들을 골라내는 쪽으로 해왔다고 한다. 동아리 소개 시간에 보여준 로봇 작품들이 상당히 인상깊었는데, 기술적으로 어려워보이는 건 없었지만 큐브 풀이 로봇이라든가, 자석을 이용해 자유롭게 돌아가는 공을 만들고 그 안에 기계 장치를 넣어 레이저를 발사하게 했다든가, 간단한 시한폭탄 장치 등 참신한 것들이 많았다.
MR도 사실 2000년대 초반까지 있던 로봇축구 주축 인력이 빠져나간 후로, 이렇다 할 작품들은 잘 나오지 않고 있다. MRG(미스터 거북이), 사나이(이족보행 로봇)라는 큰 프로젝트가 있기는 하지만 정작 일부 동아리원들만의 참여로 이루어지고 있고, Power On과 같은 재미있고 실험적인 시도들이 별로 없었기 때문이다. (있었다 하더라도 많은 사람들의 흥미·참여를 유발시키거나 지속적인 개발을 한 경우는 많지 않았다) 이런 면에서, Power On과의 만남은 MR에게는 분위기 쇄신을 할 수 있는 새로운 동기 부여가 될 것이라는 생각이 든다.
아무튼 이 연합회를 통해 세 동아리 모두 새로운 발전 방향을 모색할 수 있는 계기가 되었으면 좋겠다. Power On은 다양한 창작 로봇들을 출품할 수 있는 기회를 얻고, IIC는 상대적으로 부족한 로봇 제작 기술들을 공유하고, MR는 분위기 쇄신과 실험적인 시도를 할 수 있는 동기를 얻는 방향으로 잘 성장할 수 있기를 바란다.
어쨌든 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등을 기록할 수 있었다)
푸르지오 아파트 로고가 걸려있던 부엌 벽의 퓨즈함 그림을 대체하기 위해 그린 그림이다. A4 용지에 원래 그림 크기를 맞춰서 잘라 그렸고 아트펜을 사용하였다. 푸르지오 로고로부터 영감을 얻었다. (화원 같지만 그렇다고 현실 속에 존재하지는 않는 그런 것이랄까.)
부엌에 건 그림 작품.
ps. 원하시는 분은 가져가서 바탕화면 등으로 사용하셔도 좋습니다. (좀 어지러우려나요-_-) 사이즈가 1024x768에 맞춰져 있지 않지만 살짝 편집해주시면 될 겁니다.
ps2. 불펌은 금지합니다. 퍼가실 땐 이 글에 대한 링크를 명시해주셔야 하며, 그림을 재처리하거나 다른 작품에 사용하게 될 때에는 댓글로 해당 작품을 볼 수 있는 링크를 걸어주시면 고맙겠습니다.