모교 교수님께서 지난해에 1월쯤에 1, 2학년 대상으로 소프트웨어 캠프를 할 예정이라고 하셔서 도움을 줄 수 있느냐고 물어보셨을 때 가능하면 하겠다고 말씀 드렸었다.

그때 넌지시 지난 2013년 Algospot에서 진행했던 coder's high 의 행사중 하나였던 AI대회가 생각나서 (마치 그때 runner를 제작했던게 회사 분이기도 하셨고) AI대회를 제안했고 진행을 하게 되었다.


학부생때도 그랬고 졸업하고나서도 모교에 무언가 도움을 주고 싶었는데 지리적인 여건도 그렇고, 개인이 혼자 할 수 있는거엔 한개가 있기 때문에 아무것도 못하고 그저 메일로 질문이 오는 후배들에게 나름 최선을 다해서 (대부분 질문보단 답변의 길이거 더 길었음) 답변을 하는 것 정도 밖에 없었으나, 작년 프로그래밍 경시대회 진행건부터 시작해서 올해 소프트웨어 캠프까지 무언가 실질적으로 도움이 되는 행사를 진행했다는거에 뿌듯한 느낌이 든다.


AI대회를 실제 참가했던 기억에 의하면 3시간의 코딩시간동은 1시간 가량은 룰을 이해하고, runner를 실행시키는 방법을 찾고, 그래서 내가 해야할것이 무엇인지 감을 익히는데 시간을 써야했다. 그래서 그 시간을 줄이고자 문제의 난이도를 좀 쉽게 한다고 "시야"라는 개념을 없애서 한번에 모든 맵을 다 볼 수 있도록 runner을 수정했다. 다행히 프로그램이 잘 만들어져 있어서 원하는 수정을 반영하는데는 오래 걸리지 않았음.


그래도 3시간이라는 시간은 턱없이 부족할 것 같아서 좀더 시간을 확보해야 했는데, 2일간 진행하는 캠프중 마침 나에게 할당된 시간이 1일차 저녁 세션 (저녁 7시부터 저녁 10시까지) 이여서 저녁세션에 중간경합을, 그다음날 오전에 최종경합을 하는 형태로 진행을 하기로 했다. 의도적으로 밤세서 코딩을 하라고 한건데, 다행히 교수님께서 그래도 된다고 (.....) 2일차 세션은 광성이 형이 진행하는 손뇌눈 시간이였는데 다 졸게되어도 어쩔 수 없는 (-_-;;)


coder's High 처럼 AI를 토너먼트로 진행하려고 생각을 했는데 중간경합과 최종경합을 그렇게 진행하기에는 시간이 촉박하기도 하고 토너먼트의 긴장감을 중간경합때는 느끼지 못할 것 같아서, 참가하는 10팀이 모두 다른 9팀과 1:1 매칭을 하고, 그 결과를 볼 수 있는 시스템을 만들기로 했다. 그래서 web으로 code를 제출할 수있는 UI와, 제출된 코드를 컴파일해볼 수 있게 하고, 컴파일 성공한 각 팀의 최종 소스끼리 1:1 경쟁을 모두 할 수 있는 시스템을 만들었다. 각 경기 결과가 어떻게 이기고 졌는지 복기도 해볼 수 있어야 할것같아서(그래야 밤세 코딩하며 여러 전략을 준비할 것 같아서) 각 turn에 대한 결과를 모두 저장해서 web에서 볼 수 있는 시스템까지 만듬. 덕분에 목요일 퇴근하고 금요일 내가 진행할 세션까지 한숨도 못자고 코딩했다 -_-;;; Spring boot + thymeleaf (단순히 boot 템플릿에서 선택한 엔진이여서 써봄) + hibernate + bootstrap 으로 만들었.. 으나 많이 버벅 거림. 이런게 한 회사의 팀장을 하고있다니.. 만들면서 runner 를 서버에 ui 떼고 올려서 실행시킬 수 있게 만들까 아니면 runner의 게임 부분 코드만 옮겨와서 db insert를 추가할까 고민하다가 후자로 진행했다. 클래스도 잘 나뉘어져 있어서 들고 오기 쉬웠음 (욱신 짱)


실제 AI 세션에서는 몇가지 문제와 내가 더 준비해야 했던 몇가지를 깨닫게 되었는데, 고친 runner를 Java 8.0에서 빌드를 했더니 대회에서 사용했던 노트북에서는 돌아가지 않았다 (자바 1.6, 1.7등) -_ㅠ.. JDK를 다시 다 설치하느라 시간을 보냄 ㅠㅠ. 다시 빌드를 하려고했는데 내 Mac에는 1.7이하가 없었고, 학생들 pc에 받아서 빌드를 하려고했더니 git client도 없고 maven도 없고 대회장 network상태도 좋지 못하고 노트북 성능도 그닥이라서 받는데도 한세월이고 크을으르르들들ㄷ르.. 교수님이 1.8을 usb에 담아 모든 laptop에 설치하는것으로 이 사건은 마무으리..


학생들이 bat파일이나 command line 명령어 사용법에 익숙하지 않아 runner를 실행시키지 못하거나, 자신이 만든 프로그램을 runner에 연결하는 방법을 모르고 있었다. VS 나 Eclipse셈플 프로젝트로 버튼 클릭으로 쉽게 실행할 수 있는 환경을 만들었어야 했는데 놓쳤다 -_ㅠ.. 이건 회사 신입사원 실기시험을 볼 때도 몇번 겪었던 문제들인데, 대학을 졸업하고 회사 신입으로 지원한 분들도 이걸 제대로 못해서 sample project를 제공하는데 1, 2학년 대상으로 이쪽 부분은 너무 신경을 쓰지 않아 미안했음. 덕분에 모든팀들이 1시간동안은 해메느라 제대로 시작을 못한듯 하다....


당초 7시 30분 부터 코딩시작 10시 30분 종료, 9시 30분에 깜짝 맥주 투하(...)를 하려고 했으나 (생각지도 못한 맥주가 준비되어 있다는 말에 음주 코딩을 제안했는데 교수님이 마음대로 하라고 하심 >_<bbb) 너무 진도가 안나가는거 같아 맥주 공급시간을 10시로 늦추었다.


10시 30분이 되어도 제출한 팀이 몇팀 되지 않아 제출시간을 조금씩 조금씩 늘려 결국 10시 45분까지 늘어났다. 그래도 전체 10팀중에 7팀만 제출을 함 (-_-); 안타까운데로 7팀을 대상으로 1:1 매치를 실시했다.


밤세 제작을 한 것이여서 버그가 있으면 어쩌나 걱정을 했는데 다행히 문제없이 돌아감. 그리고 1:1 전체 매칭 시스템을 만들 때 너무 순차적으로 하면 안될꺼같아서 1:1 매칭하는 짝을 만들고 랜덤으로 순서를 섞어서 대결 순서를 랜덤하게 붙도록 만들었는데 이것도 좀 유효했던거 같다. 초반에 하위권에 있던 팀이 마지막에 중위 -> 상위 -> 우승까지 해서 역전하는 묘미가 살아 있었음.


대회를 진행하면서 몇몇이 이런 질문을 했었다. "맵은 변하지 않나요?" "시작 위치는 변하지 않나요?", 중간 경합은 셈플로 제공된 맵에서 좌/우 대칭이 약간 다른걸 고친 정도여서 맵은 변하지 않는다고 대답을 했었고, 시작위치는 모든 맵마다 고정이기 때문에 변하지 않는다고 대답을 했는데, 중간경합에서 이긴 팀의 플레이를 리플레이해보니... 맵의 핵심 위치를 미리 알아두고 그곳을 순회하는 AI(-_-???) 였다. orz.. 진행자가 미숙했습니다아아..


학생들에게 밤세 코딩을 해서 내일 아침 9시에 좋은 결과를 보여달라는 당부를 했음. 행사 지원온 졸업생들과 교수님과 술을 마시며 시스템에 있는 버그 몇개를 고치다보니 어느덧 새벽 3시. 시스템에 들어가보니 새로 제출한건 2팀밖에 없었다. 이놈들 ㅠㅠ 누구는 하루 밤세고 지금껏 버그고치고 있는데 ㅠㅠ..


다음날 아침에 일어나도 여전히 별 다른게 없어서 안타까웠으나 밥먹고 결승을 시작하기 전엔 10팀 모두가 제출을 했다 =ㅂ=)bb 하지만 절반 정도는 그 전달 그대로로 진행을 했음. 아침이 되자 새벽내내 AI가 말을 듣지 않아서 괴로웠는지 시스템에 버그가 있다는 제보가 여럿 있었다. "시야" 라는 개념을 없애서 생긴 사이드 이펙트인데, "시야"가 있을 때는 매 turn마다 자기를 중심으로 맵의상태, 그리고 점수 정보가 들어왔으나 "시야"가 사라져서 항상 전체맵의 상태와 전체 점수가 들어오는데, 이렇게 되면 맵의 모든 정보를 알게되어서 쉬워지는 것은 있으나 잘못된 동작 (우측으로 갔는데 우측에 벽이 있는경우)에 대해서는 좌표값을 스스로 보정해야 하는 이슈가 생긴다. AI 셈플 코드에서는 그 부분이 고려안된 상태로 만들어져 배포 되어있었는데 많은 팀의 학생들이 그걸 고려하지 않고 그대로 써서 이슈가 생긴것. AI셈플을 만들어 줄 때 좀더 생각을 했어야 했는데 이점도 아쉽다 ㅠㅠ..


결승전은 Coder's High 때 진행했던 것 처럼 토너먼트 방식으로 진행을 했는데........ 내 진행 스타일의 이슈도 있지만 박진감 넘치는 경기가 몇경기 없었음 (orz.....) 5판 3선승제로 진행한 결승전은 무려 3:2 라는 재미있는 스코어로 우승가자 가려졌지만 매 경기마다 한 팀이 쉽게 이기는 바람에 재미가 없었음 (...) 


결승전이 끝나고 나니 중간경합처럼 모든 맵에서 1:1 매치를 모두 진행하는 방식으로 하는게 더 박진감 넘쳤을 것 같다... 는 생각을 했다. 6개의 맵을 준비했었으니 각 라운드마다 하나의 맵으로 1:1 전체 매치를 진행하고, 매 매치마다 상위 등수위 팀의 경기를 리플레이 해보는 방향으로 (혹은 점수를 기록해두어서 가장 팽팽한 경기를 리플레이 해보는 방향으로)진행하는게 더 재미있었을 것 같다는 생각을 했다. 다음에 또 기회가 온다면 이렇게 진행해 보아야지 ㅠㅠ..











저작자 표시 비영리 변경 금지
신고

WRITTEN BY
Mastojun
For Future....

받은 트랙백이 없고 , 댓글  8개가 달렸습니다.

트랙백을 보내세요

트랙백 주소 :: http://blog.mastojun.net/trackback/318 관련글 쓰기
  1. 비밀댓글입니다
  2. 멋있어요! ㅋㅋㅋㅋㅋㅋ 행사 진행에 아무런 도움이 되지 못하여 죄송합니다...ㅠㅠ
  3. 후후 준비하느라 고생하셨습니다!
  4. 비밀댓글입니다
  5. 영준아 잘사니?ㅋㅋ
secret