김준기

IT 업계에서 일하고 계시는 보다 다양한 분들을 만나고, 친구들로부터 워낙 대안언어축제가 괜찮다(?)는 얘기를 들어서 참석하게 되었습니다.

(사실 그 친구가 esoteric programming languages에 관심이 많은 녀석이라...)

현재 텍스트큐브 개발에 참여하고 있고, KAIST 전산과(학사)에 재학 중입니다.

저에 대한 더 자세한 정보는 제 개인 웹사이트 http://daybreaker.info를 참고하세요. :)

Ice Breaking : 6x6 Game

    • 게임 규칙

      • 한 테이블에 6명씩 앉는다.

      • 프로젝터로 6x6 보드판을 띄워놓는데 각 칸에는 각종 미션이 적혀있다.

        • 옆 테이블 사람과 자리 바꾸기, 자신이 참여한 가장 성공적인/실패한 프로젝트, 첫사랑 이야기, 자기에 대한 가장 큰 오해, 취미, 가장 듣고 싶은 칭찬, PT 체조(-_-) 등등

      • 돌아가면서 주사위를 두 번 던져 행렬로 칸을 선택하고 해당 미션을 수행한다.

      • 자리 바꾸기가 나오면 옆 테이블에서 현재 미션을 진행 중인 사람과 자리를 바꾼다. (그 사람이 뭔가 하고 있더라도 중간에 끊어서 데려온다)

    • Ice breaking 용으로는 상당히 괜찮은 아이디어인 듯.

    • 문제점 : 한 테이블로 오는 자리바꾸기와 가는 자리바꾸기가 동시에 일어났을 때 concurrency 문제가 있어서 삼각 교환(?)이 이루어지는 경우가 꽤 있었다.

Project Hours - 자유 프로젝트 (보드게임 만들기)

    • Silent Hill: 환승 게임 제작 참여

    • 실제 play를 진행하면서 점진적으로 개선하는 것이 짧은 시간에 원하는 결과를 만들어내는 데엔 큰 도움이 되는 것 같다.

      • 일종의 애자일 방법론 체험이라고 생각된다.

    • 대신, 좀더 고도의 설계·사고를 요하는 아이디어는 playable해지기까지 어느 정도 시간이 걸리므로 이런 방식으로 만들기는 힘들 것 같다

      • 실제 프로그래밍 세계에서 이런 케이스로 어떤 것이 있을까?

    • 가장 인상깊었던(?) 게임은 수학여행에서 살아남기였다.

      • 게임 자체는 단순하지만 벌칙과 상벌에 대한 아이디어로도 충분히 재미를 줄 수 있음을 깨달음. 즉, 게임의 구성요소에서 승리와 패배, 혹은 종료 조건이 꼭 필요한 것은 아니란 것.

언어튜토리얼 1, 2 - Haskell

    • 사실 학교 수업에서 functional language로 Scheme/LISP, Ocaml을 다뤄본 경험이 있어 까먹은 내용 다시 복습하는 기분이었지만, 워낙 평소에 잘 안(?) 쓰는 내용이다보니 생각보다 많이 까먹었던(...) 것을 알 수 있었다.

      • 그러나 함수형 언어 자체를 처음 접하시는 분들은 좀 어려워하셨다. 함수형 언어에서는 기존의 생각을 지우고 백지에서 다시 처음부터 체계를 수학적으로 쌓아올라간다고 생각하면 쉬운데, 자꾸 C/Java 같은 언어와 비교해가며 배우려고 해서 그런 것 같다. 이게 보통 일반적인 프로그래밍 언어를 배우는 데엔 도움이 되나 패러다임이 완전히 다른 경우엔 오히려 독이 되기도.

    • Type inference 과정 추적해보기, 함수형 언어에서 말하는 class, polymorphism, overloading등의 개념을 다시 정리할 수 있어서 좋았다.

    • Haskell로 구현한 미니 Quake가 인상적이었다.

언어튜토리얼 3 - Smalltalk

    • 말로만 듣던 Smalltalk이 뭔지 알 수 있었다.

    • 일종의 기본 가상 월드가 담긴 이미지 파일 하나를 두고 계속 변경 이력을 쌓아가는 방식으로 하나의 프로그램이 만들어진다는 과정이 특이했다. 소스코드라고 하면 보통 텍스트파일 형태로 된 것을 생각하는데 GUI 구성이 결합된 작업 공간 자체가 소스코드의 역할을 한다는 점에 많은 사람들이 혼란스러웠던 것 같다.

    • Smalltalk UI 사용하는 것이 조금 복잡(?)했지만 일단 익숙해지니 무엇이든 해킹해 밑바닥까지 내려갈 수 있겠다는 생각이 든다.

위의 두 언어튜토리얼을 들으면서 느꼈던 점은, 이미 어느 정도 고정된 세계관(?)을 제공하는 "대중" 언어(C, C++, Java, ...)들과 달리 이런 언어들은 프로그래머가 자신만의 사고 체계를 그 언어 자체로 스스로 구축하게 만든다는 특징이 있다는 점이다. 이것은 DSEL로 그대로 적용되기도 하고, 이런 점이 이들을 또다른 쓰임새 있는 특별한 존재로 만들어주는 것 같다.

Project Hour - Media Art (II)

    • 내가 스웨덴 교환학생할 때 KTH(Kungliga Teknisk Högskolan)에서 들은 Music Technology & Musical Communication 수업에서 사용했던 비디오 처리 프로그램인 EyesWeb과, 이곳을 통해 배운 Scratch, 그리고 이 둘을 연결해주기 위한 Python 데몬을 하나 만들었다.

    • 아이디어는 웹캠으로 실시간 캡처한 영상에서 사람의 팔, 다리, 손, 머리 좌표값을 읽어 Scratch로 보내 사람과 똑같이 움직이는 졸라맨을 만들어보려고 했던 것.

    • 결과는 삽질만 하다가 미완성.

      • EyesWeb이 윈도 전용인데다 Parallels에서는 iSight를 인식하지 못하는 문제가 있어 다른 분의 윈도 노트북을 이용했는데, 웹캠이 동작하다 안 하다 해서 테스트가 힘들었다.

      • 내 맥북프로에서 Python 데몬을 돌렸는데 이때 Open Sound Control 프로토콜을 해석해주는 라이브러리(SimpleOSC 0.2.5)를 하나 가져다 썼다. 그런데 아무리 해도 아무런 패킷 수신이 발생하지 않아서 패킷스니퍼까지 동원한 끝에 결국 그 라이브러리 자체의 문제임을 알아냈다. orz 직접 소켓 열어서 받으니 잘 받아졌으나 이미 시간 종료.

LETS (지역화폐를 통한 소통 시간)

    • 특정한 지역에서만 지역적으로 사용 가능한 신뢰 기반의 가상 화폐 개념을 통해, 사람들 사이에서 자유롭게 서비스의 유통이 일어나고 서로 학습하는 공유를 실현하는 시간이었다.

    • "세 사람이 길을 가면 그 중 반드시 스승이 있다"라는 말과 잘 어울리는 듯?

    • 배운 것

      • 인터넷 중고서점 정보 (from 이명은)

      • PHPUnit 기초 사용법 (from 홍민희)

      • RoR 맛보기 (일부, from 아샬) - 이상하게 아샬님은 땀 이체가 안 되더군요..;;

    • 가르쳐준 것

      • 오픈소스 프로젝트 참여 방법

      • Subversion + Trac 설정하는 방법