- 무한 효율 저하 12
- 드디어 모니터 도착! 10
- 전산과라면 이런 것 18
- 중간고사 끝 5
- 중간고사 시작 19
Daybreakin Things
...숙제하다가 막히는 게 있어서 구글 검색을 하러 갔더니..
하아아...
.....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도 출시되겠지. 내년도 즐겁게 살아보자꾸나!;
얼마 전에 이 글에서 뭔가 로봇에 올인해보고싶다는 얘기를 했었는데, 마침 딱 적당한 기회가 찾아왔다. 바이오시스템학과 바이오컴퓨팅 연구실에서 진행하는 수중로봇개발!;;
연구 내용은 대략 이러하다.
개별연구 학점도 딸 수 있고, 연구비나 개발 장비 등도 모두 지원받을 수 있는 최적의 환경이다. 물론 주제가 주제이니만큼 꽤나 빡셀 것도 같지만, 나름 해보고 싶었던 것이라 기대 중이다.
MR 사람들 중에 관심 있는 사람들을 수소문해 로봇 개발에 관심이 많은 한 후배 녀석과 함께 신청했고, 전체 팀 인원은 우리를 포함하여 6명이다. 실제 URP 연구는 한 팀당 최대 3명까지라서 제어 및 시뮬레이션으로 1팀, 실제 구현 및 제작으로 1팀 이렇게 2팀으로 구성하여 신청했다. (다행히 최대 지원 가능한 연구과제 수보다 실제 신청된 과제 수가 적어서 탈락하는 일은 없을 것 같다) 나는 굳이 말하자면 제어 및 시뮬레이션 쪽을 하게 되지 않을까 생각하고 있다.
어쨌든 간만에 또 빡시면서 뭔가 남는 나날을 보낼 수 있을 것 같다.
지난 주에는 두 개의 모임이 있었다. 하나는 Kaistizen님의 소개로 SK 아이미디어의 김용오 이사님을 만난 것이었고, 다른 하나는 Tatter&Friends MT였다. 간단히 후기를 정리하자면 학교 안에서 보여지는 바깥 세상에 대해 좀더 잘 알게 되었다는 것이다. 숙제 내고, 학점 따고, 졸업 후 진로는 어떻게 하고.. 이런 일상적인 고민들과는 다른, 비즈니스 세계는 어떻게 움직이고, 기업들은 어떤 인재를 원하는지, 우리가 만든 것이 가치를 가지기 위해서는 어떤 조건이 필요할지, 앞으로 IT가 흘러갈 방향은 어떤 것일지 등에 대한 이야기들이었다.
(딱히 모임에 붙여줄 이름이 생각나지 않아서 일단은 이렇게 적는다.) SK 계열로 새로 시작한지 얼마 안 된 게임 개발사인 SK 아이미디어의 이사를 맡고 있는 김용님이 KAIST 전산과 학생 몇명과 함께 저녁 식사를 하며 '인재 구하기'와 함께 회사 소개 등을 했던 자리였다. 이런저런 잡담도 하고, 그 회사가 어떤 인재를 바라고 있는지 알려주기도 했다. "일하고자 하는 사람에겐 즐거운 회사지만, 출근하고자 하는 사람들에게는 가차없이 혹독한 회사가 될 것이다"라는 게 가장 기억에 남았다.
사실 그 이사님보다는, 함께 왔던 소프트웨어 개발경력 15년차이셨던 분(명함은 받았는데 따라오신 두 분 중 어느 분인지 기억이..-_-;;)과 이야기를 더 많이 나누었다. 개발경력 15년이라면 30대 중후반부터 소프트웨어 업계에서 대부분 관리직으로 넘어가는 현실을 생각했을 때 우리나라에서는 매우 드문 경우다. 네트워크, 모바일, 게임 등 다양한 분야의 경험을 가진 분이었다. 최근의 이공계 기피와 관련해서 여러 이야기들을 해주셨는데, 이제 사회는 어떤 직종을 하더라도 편하게 살게 놔두지는 않을 것이며, 다만 기본 baseline의 높낮이 차이가 있을지라도, baseline이 상대적으로 낮은 IT나 공학 관련 업종은 그만큼 사람들의 spectrum이 크기 때문에 KAIST 학생 정도라면 그 spectrum에서 상위에 올라설 능력이 충분히 있을 거라는 얘기였다. 그리고 무엇보다 중요한 건 baseline과 삶의 질은 반드시 일치하는 것은 아니라는 점이었다. 우스갯소리로 "의사는 본인이 행복한 게 아니라 그 가족들이 행복한 거다"라는 이야기도 했다. 현재 철밥통으로 여겨지는 공무원 사회조차 빠르면 10년 내에 지금의 형태로 유지될 수 없을 것임을 보고 있다고 했다. Kaistizen님의 경우도, 병특으로 몇 군데 업체에서 일해보고 느낀 것이, 자신의 능력으로 일정 수준의 회사들을 선택할 수 있는 권리가 있음을 깨달았을 때 미래에 대한 불안감이 사라졌다고 했다. 그전까지는 자신이 없었지만 이젠 자신감이 생겼다는 것이다.
아직 내가 연구를 하게 될지, 취업을 해서 살게 될 지는 모르겠지만, 분명히 이 사회는 본인의 능력으로 '신분'을 바꿀 수 있는 곳이고, 따라서 KAIST라는 베이스를 가지고 있다면 충분히 승산이 있는 곳이라는 얘기였다. 그 예로 그 개발자 분은 삼성전자 임원을 들었는데, 물론 임원이 된 후에도 삶은 계속 피곤하고, 그 자리에 오르기까지, 오른 후에도 계속되는 경쟁이 있겠지만, 그 사람의 능력이 그만큼 인정받았다면 그런 정도는 해야 하지 않겠는가라는 거였다. 넓은 spectrum에서 자신의 위치를 찾아나가는 것. 그것이 중요하다는 뜻이었다.
지난 4월 14일 TNF 포럼이 만들어진 후로 처음 있는 MT였다. TNC/TNF 합쳐서 16명 정도(laziel님 소개로 미니보드 개발하시는 분도 오셨다)가 연세대 정문에 모여(마침 리처드 스톨만의 강연회가 있었기 때문인데, 숙제-_-때문에 못 간 것이 아쉽다.) 경기도 양평의 한 펜션으로 이동했다. 즐거운 잡담과 놀이 분위기도, 또 심각하게 태터툴즈의 미래에 대해 이야기해보기도 했다. 밖에서 바베큐 파티도 하고, 사람들과 함께 적분게임, 베스킨라빈스 등의 놀이도 하고, 또 모닥불을 지피고 둘러앉아 심각한 이야기들을 나누었다. 온라인에서만 서로 보다가 오프라인에서 만나는 재회의 기분도 느껴보고, 태터툴즈 1.1 발표와 관련한 이야기들도 하고...
태터툴즈로 '무언가'를 해보려면 우선 블로고스피어의 전체 참여자의 절대 수치가 늘어야 한다—현재 나타나는 시스템적인 문제들 중 상당수는 시간과 인원수가 해결할 수 있을 것이다, 항상 사용자의 입맛에 맞추려고만 하다보면 정작 우리의 색깔을 잃어버리고 표류할 수도 있다—설령 쓰기가 어려워도 그걸 감수할 만한 가치를 느낄 수 있도록 해야 한다, 명품 자동차를 사는 사람은 그 자동차가 가진 세세한 기능이나 장점들을 다 인식·사용하지 않는다—단지 그렇다는 느낌을 사는 것이다, 우리는 태터툴즈가 (실제로 다 사용하지는 않더라도) 무한한 확장이 가능한 publishing platform으로 인식되도록(실제로도 그렇게) 해야 한다, 사용자 지원 부분을 갈아엎을 필요가 있다, 나는 패러다임이 변하는 이 시기에 내 아들이 '아빠는 그때 뭐했어요?'라고 물었을 때 자신있게 대답할 만한 것을 하고 싶다…….
모닥불에 둘러앉아 각자 돌아가면서 말한 것들이다. 짤막짤막한 이야기들이었지만, 대한민국에서 가장 주목받는 블로깅 툴을 만드는 사람들이, 그렇게 된 이유를 알 수 있었다. 또한 현재와 과거를 바라보지 않고 항상 그 다음을 보는 것. Blog 다음은 무엇이 될까? Blog를 이용한 커뮤니티의 발전? 그 다음은? 나로서는 정말 느끼고 배울 것이 많았던 대화였다.
돌아오는 길에, 노정석님의 차를 타고 이야기를 나누었다. 과거 전설적인 해킹 사건의 주인공이기도 하셨고, 보안업체 Inzen의 설립에 참여하기도 하셨으며, 한때는 자동차 경주에 푹 빠져 레이서 생활까지 한, 매우 특이한 경력을 가진 분이다. 지난 LiveBlog 때 처음 만난 이후로 지금까지 TNF를 통해 계속 연을 맺어왔는데, 이때 좀더 심도있는 이야기를 나눌 수 있었다. 여러 분야에 관심이 많다면 다른 것들을 모두 잊어버리고 한 분야에 1~2년 정도 투신했던 것이, 많은 것들을 잃긴 했지만 반대로 자신을 사람들에게 각인시키는 데에는 큰 도움이 되었다는 얘기부터, '앞으로 자신이 다른 사람들에게 어떤 사람으로 기억되길 바라는가'하는 질문도 남기셨다. 또한 세상은 소위 '공부 잘하는 사람들'에 의해 돌아가는 것이 아님을 깨닫기까지, 가장 어려운 게 사람 공부라는 이야기도 해주셨다. 이른바 비즈니스를 해온 분으로서 자본주의에 기반한 사회 시스템에 대해 상당히 예리한 시각을 가지고 있음을 알 수 있었다. (겉으로는 아닌 척 하시지만 딱 드러나는 것 같다.)
*
가끔은 학업에서 벗어나(....덕분에 이번 PS 숙제는 말렸다! 하하-_-) 이렇게 다양한 사람들을 만나고 보다 넓은 세상에 대해 이야기를 들어보는 것도 좋은 경험이다. 학교 안에서 당장 다음 학기 무슨 과목 듣지 이런 고민을, 숙제 듀 걱정하고... 하지만 궁극적으로 내가 무엇을 위해서 그것들을 하는지 되짚어보고, 내가 세상에 가치있는 사람으로 남기 위해서 어떤 일들을 할 수 있을지 잘 생각해봐야겠다.
오늘 PS 수업 시간은 여느 때와 마찬가지로 진행되었다. 마지막에 시간이 좀 남아서, 전에 숙제로 풀었던 ACM ICPC 예선문제들을 어떻게 풀었는지 설명하는 시간을 만들었는데, 그 중 F번 금고 문제를 푸는 것에 대한 이야기가 오갔다. 가장 typical하게 푸는 해법은 대충 다들 알고 있는 분위기였다. 그러다가 전부터 두각(?)을 나타냈던 한 학생(아마도 한 살 많은 3학년인 것 같음)이 Linear Algebra(-_-)로 문제를 더 확장한 임의의 경우에 대하여 polynomial 시간 안에 푸는 방법을 제시했다.
그 분이 약 20여분 간 설명하면서, 물리학에서는 이런 테크닉을 일반적으로 쓰는데(물리과 복수전공임-_-) 이 문제에 적용하면 어떨까 했더니 order of n^6 안에 이런 류의 문제를 모두 풀 수 있을 것이라는 결론을 얻었고, 문제 특성을 이용한 최적화를 통해 n^2까지 줄였다면서 설명한 주요 골자는 금고 grid를 하나의 vector로 표현하고, 문제에서 금고 손잡이 돌리는 동작을 다시 하나의 vector로 표현해 n^2 x n^2 matrix를 만들어서 문제에서 제시된 현재 상태로부터 초기 상태까지 가는 operation을 어찌어찌 잘 하면 구할 수 있다는 것이었다. 그러면서 이런 방법이 Pattern reconginition 분야에서 많이 쓰이고 있으며, 필기 인식을 4x4 matrix 정도로도 상당한 정확도로 계산할 수 있다는 설명까지 덧붙였다. -_-;
다른 사람들은 그 설명을 보면서 다들 감동 or 관광(...)타는 분위기였고, 교수님도 extra point를 주라며 조교한테 얘기하셨다. (뭐, 이미 지금까지 해온 숙제들을 보면 A+이 아닌 게 이상하겠지만..)
역시 세상은 넓고 머리 좋은 사람은 많다. (우리들 사이에서는 '본좌'라고 부른다.) 검색엔진을 개발하시는 고감자님의 블로그를 보면서 선형대수학과 확률 통계의 중요성을 새삼 느끼고 있던 차였는데, 이런 문제도 선형대수학 테크닉을 활용해서 저렇게 멋지게 풀어낼 수 있는 걸 보니 정말 수학의 중요성을 절감할 수 있었다. 하아.. 그나저나 이번 선대개 재수강은...ㅠ_ㅠ
ps. 역시 polarnara님처럼 선대를 한 네 번은 들어야 하는 것일까. (....)
ps2. 이참에 물리과 복수전공을...?! ;;;
드디어 MR 20주년 총회가 끝났다. 사실 뒷풀이로 술을 더 마실까 했었으나 이미 폭탄주 한 잔 마시고 속이 좀 안 좋았던 터라, 또 노트북 등등 짐도 가져와야 해서 먼저 들어왔다. (그래도 술 마시기 전 뷔페를 잔뜩 먹어놔서 그나마 좀 낫다-_-) 전에 틀만 대강 잡아놓고 본격적인 작업은 어제 오후에서야 시작했던 웹회지는 그야말로 초벼락치기로 얼추 마무리했다;; (무려 시작 1시간 전에 완성, 지욱형 컴퓨터에 있는 초고속 레코더로 구우니 660MB짜리가 약 130초만에 구워져 30여장을 만들어내는 기염을 토했다.)
20주년...이라고 하면 1기 선배가 86학번, 2기 선배가 87학번이다. 내가 87년생이니 그야말로 까마득하다. 선배들이 했던 많은 이야기들 중에 생각나는 건, 자기들도 20년 후에 이런 날이 올 거라고 전혀 생각지 않았는데 막상 이런 날을 맞고 보니 기록(사진 등)을 잘 남겨두는 것이 정말 중요하더라, 엔지니어가 여러분 인생의 전부가 아니다—보다 많은 분야에서 이공계 출신을 원하고 있다, 젊을 때 투자할 수 있는 가장 큰 자산은 바로 시간이다—뭔가 건더기를 남길 만한 것에 투자해라 등. 몇몇 선배분들의 인생 세미나(..)와 자신이 하는 일에 대한 소개(전자공학이나 로봇 등)도 있었다. 그 당시의 사회상과 지금의 사회상, 또 그분들이 인식하셨던 세상과 우리가 인식하는 세상에는 분명 차이가 있었지만, 순수하게 무언가를 좋아해서 자신의 시간과 노력을 쏟아부을 수 있는 열정만은 같음을 확인할 수 있었다. 국내 최초의 미로 로봇 대회 주최, 로봇축구대회 주최 등의 역사와 그에 실제로 참여했던 선배들을 보면서, 또 심지어는 8051칩용 상용 컴파일러가 비싸다는 이유로 직접 컴파일러를 만들었다(....)는 선배도 보면서, 순수한 열정으로 이뤄내는 것에는 그 가능성이 무한하다는 것도 새삼 느꼈다.
*
한편, 내가 담당했던 이번 웹회지는 python의 도움을 크게 받았다. 이번에는 로컬에서 수동으로 일일이 html을 파일을 만들지 않고, 웹서버에서 php를 이용해 반복되는 부분들을 깔끔하게 처리하고, (통째로 다운받았을 때) 디렉토리의 구조화를 위해 .htaccess로 mod_rewrite 설정을 사용했다. 그런 다음 WebCopier라는 프로그램으로 통째로 다운받고, 용량 문제로 1byte짜리 가짜 파일로 처리했던 이미지나 동영상 등을 실제 데이터로 바꿔주었다.
이 과정에서 이름이 모두 제각각이었던 사진 파일들의 이름을 대량으로 변경하는 것과, WebCopier 프로그램의 버그로 인해 일부 css나 링크의 상대 주소가 제대로 처리되지 않는 문제들을 python 스크립트를 이용해 아주 간편하게 해결할 수 있었다. 만약 이걸 몰랐더라면 엄청난 노가다질을 해야 했을 것이다. 예전 같으면 과학전람회 실험데이터 처리용으로 만들었던 macro 프로그램을 썼겠지만 새 컴퓨터에 VB 런타임 까는 게 귀찮아서 python으로 짠 게 결과적으로 더 빨리 결과를 얻을 수 있었다. 파이썬 만세!;
또한 이번엔 mootools를 사용하여 간편하게 javascript 애니메이션을 구현했다. 예전에 prototype을 쓸 때와는 사용방법이 좀 다른 것들이 있어서 삽질을 좀 했지만, 다행히 시간 내에 모두 해결할 수 있었다. 또한 php를 써서 중복 부분을 처리했기에 지난번 회지처럼 노가다를 줄이기 위해 iframe을 사용할 필요가 없어 인쇄용 stylesheet도 매우 깔끔하게 만들 수 있었다. 다만 역시 문제는 Internet Explorer. 그나마 7.0이 나와서 조금 낫긴 하지만 만들다 만 듯한 느낌은 어쩔 수 없었다. 시간 관계 상(하루만에 벼락치기했으므로-_-) IE6 이하 버전에 대한 hack 지원은 포기했다.;;;
*
사실 나도 어떤 한 주제의 로봇을 딱 정해놓고 올인해서 만들어보고 싶은 생각이 있다. 선배들이 그러했던 것처럼 학점이나 다른 자기 시간을 포기하고 그렇게 해볼 수 있을까. 어렸을 때 레고로 도시를 조립하면서 태어나서 처음으로 밤을 새봤던 기억이 난다. 물론 SPARCS에서 진행하고 있는 각종 프로젝트나 Tattertools, MetaBBS와 같은 프로젝트도 마찬가지지만, 역시 직접 손으로 만져볼 수 있는 물건을 만드는 것은 소프트웨어를 만드는 것과는 다른, 뭐랄까, 좀더 인간적인 애착이 강하게 느껴지는 것 같다.
로봇을 만들고 싶었던 어렴풋한 로망을 한 번 불태워보고 싶다. (그러나 숙제와 프로젝트가...ㅠ_ㅠ)
*
어쨌든 20주년 총회는 끝났다. 첫번째 10년은 마이크로마우스, 두번째 10년은 로봇축구였다면, 다음 10년은 무엇이 동아리의 메인 테마가 될까. 사뭇 궁금해진다.