2012년 5월 26일 토요일

OpenCL에서 OUT_OF_RESOURCE 또는 CL_MEM_OBJECT_ALLOCATION_FAILURE 에러가 날 때

현재 개발중인 애플리케이션에서 OpenCL을 써서 속도를 높이고 있는데...

clEnqueueNDRangeKernel() 함수를 호출할때 갑자기 CL_MEM_OBJECT_ALLOCATION_FAILURE 에러가 나지 않나 나중엔 OUT_OF_RESOURCE 에러도 나고... 그래서 니가 삽질/해결한 방법을 잠시 노트로 남김.

1. 우선 실제 allocation을 하는 메모리가 얼마나 되는지 확인
실제 사용하고 있는 cl_mem 버퍼는 다 더해봐야 3MB 이하. OpenCL 최소 global 메모리 지원이 128MB 이니. 아무 문제가 없음.

2. Notification 함수
이리저리 뒤지다보니 에러가 날 때 notification 하는 함수를 안붙여놨음. 이 함수를 구현해서 컨텍스트를 생성할때 함수포인터를 전달. 그러니 clEnqueueWriteBuffer() 를 호출할때도 CL_MEM_OBJECT_ALLOCATION_FAILURE 발생하는걸 확인. 그래도 여전히 문제 해결엔 도움이 안됨.

3. CPU OpenCL 디바이스로 실행
인텔 CPU에서 아무 문제없이 실행됨... NVidia GPU에서 돌릴때만 문제가 생김... 순간 드라이버 문제가 아닌가 싶어 최신 드라이버 설치.. 아무 문제 없음

4. 메모리 stomp 확인
코드를 잘 살펴보니 allocation한 local memory의 범위를 넘어서 쓰기/읽기를 하고 있었음... 이걸 제거하니 아무 문제 없이 실행.. 드디어 고쳤다.. 만세..!




오늘의 교훈: OpenCL에서 CL_MEM_OBJECT_ALLOCATION_FAILURE 따위의 에러가 나온다면 메모리 stomp를 확인해보세요.

2012년 5월 23일 수요일

북미취업 가이드 책이 나왔습니다.

몇년전에 블로그를 통해 연재했던 북미취업 가이드가 드디어 전자책으로 책이 나왔습니다. 몇 년이 지난 만큼 블로그에 있던 내용을 조금 다듬고 내용도 조금 업데이트했습니다. 편집 및 출판은 연두미디어에서 맡아 주었습니다. 현재 애플 아이북스용으로 올라왔고 기타 국내 온라인 출판사 홈피에도 곧 올라온다 합니다. 전자책 구매 방법은 연두미디어의 홈페이지를 참조하시기 바랍니다.


P4SandBox를 3주간 사용해본 소감

몇주전에 말씀드린 것처럼 P4SandBox를 한 3주 사용했습니다. 매우 만족스럽네요. private repo가 꽤 좋아요. 새로운 스트림(브랜치라고 생각하세요)를 만들고 여러 스트림 사이에서 switch하는것도 빠르구요. (뭐 내부적으로 당연히 Perforce의 shelve 기능을 이용하죠). 스트림을 그냥 브랜치 + 자동 shelving이라고 생각하시면 될 거 같아요.

내가 찾은 버그 하나:
  • 스트림안에서 손수(manually) shelving을 해주면 이걸 다시 unshelve 할수가 없네요 -_-; 따라서 현재 저는 스트림 안에서 아예 manual shelving을 안합니다. 작업중이던걸 shelving하고 다른 작업을 해야 한다면 그냥 간단히 새로운 스트림을 추가하고 말죠. 참고로 이 버그는 P4SandBox에서만 발생하는 버그입니다. 퍼포스의 전통적인 방법은 중앙관리방식을 쓰면 이런 문제는 없어요.
한가지 짜증나는 점:
  • copy 또는 merge(Git 에서 push/pull의 개념입니다)를 할 때 change 히스토리를 자동으로 넣어주지 않네요. Perforce측 말로는 다음 버전에 이 기능을 구현한답니다.



2012년 5월 22일 화요일

민근님이 진행하시는 게임개발자 팟캐스트

톡톡한 입담으로 저에게 듬뿍 사랑을 받고 계시는(네.. 여친이 없으세요 -_-) 민근님이 새로 게임개발자 팟캐스트를 시작하셨습니다. 1편(상)을 들어봤는데 역시 재밌네요... 한번 꼭 들어보세요.. 저도 앞으로 종종 듣게 될 거 같습니다... ^^



2012년 5월 21일 월요일

DX9/11 에서 COM 스마트 포인터 쓰기?


원래 쓰려고 했던 글...
최근에 만들고 있는 real-time 소프트웨어가 있는데(게임은 아님), 여기에 사용할 매우 얇은(thin) DX9 렌더링 엔진을 만들었었습니다. 근데 이게 OpenCL과 같이 사용하기가 만만치 않아서 이걸 다시 DX11로 포팅을 했죠. 이 소프트웨어는 윈도우 PC용으로 제작중인데, 좀 편하더군요. 지난 6+ 년동안 다뤘던 하드웨어인 현세대 콘솔 게임기(엑박 360, 플스3 등) 보다훨씬 파워풀한 하드웨어에서 도니까요.

이번에 코딩을 하다가 깨달은게... Direct3D는 COM인데 게임 렌더링 엔진에서 COM 스마트 포인터를 쓰는걸 본적이 없더라구요. 제작에 참여한 게임 수만해도 15개가 넘고, 다뤄본 게임엔진만도 7개가 넘는데 말이죠. 아마도 성능이 딸릴 걸 걱정해서 그러는거 같은데 이젠 그냥 기우가 아닌가 하고 생각을 하게 되었습니다. 아무래도 5년전 하고만 비교해도 컴퓨터 성능이 엄청나게 떳으니까요. 그리고 최근 몇 년 동안의 동향이 게임코드에서 스마트 포인터를 많이 사용하는 거였거든요. (물론 렌더링 엔진은 아직도 예외인듯..) 그리고 게임코드에서 사용하는 스마트 포인터때문에 성능저하가 일어나는 걸 본 것도 몇 번 안되구요. (뭐 생기더라도 고치는 것도 어렵지 않았음). 그래서 'D3D 오브젝트에서 COM 스마트 포인터를 써도 상관 없을 것 같은데...?' 라는 생각이 듭니다. 혹시 상용게임에서 이거 써보신 분 계신가요? 그렇다면 어땠는지 좀 알려주시죠 ^_^?

그래도 뭔가 유용한 정보를 써야....
이렇게 글을 끝내기엔 뭔가 남에게 도움이 되지 않은 거 같지 않아 죄책감이 듭니다...(이렇게 허접한 글을 쓰시는 분들도 있지만... 전 양심에 걸림... -_-). 그래서 DX9하고 DX11 에서 COM 스마트 포인터를 쓰는 법을 소개하기로.... 쿨럭쿨럭... -_-

스마트 포인터를 안쓴다면?
D3D를 비롯한 COM 개체의 라이프사이클은 참조카운터(reference counter)에 따라 좌우됩니다. 예를 들어 CreateTexture() 함수를 통해 생성한 텍스처는 참조카운터가 1입니다. 이제 D3D가 내부적으로 이 텍스처를 사용할 떄마다 참조카운터를 1씩 증가시켰다가 사용을 끝마치면 1씩 감소시키죠. 프로그래머가 일일이 참조카운터를 증가/감소시킬 수도 있습니다. AddRef()함수와 Release()함수를 통해서요. 나중에 이 텍스처가 더이상 필요없어서 지우고 싶을 때도 그냥 Release() 함수를 호출합니다. D3D 가 내부적으로 아직 이 텍스처를 이용하고 있을지도 모르니 delete를 호출해서 곧바로 지워버리면 안되지요. 참조카운터가 0으로 떨어지면 D3D가 알아서 지워줍니다.

따라서 렌더링 엔진의 destructor()를 보면 Release()를 호출해주는 코드가 꽤 많죠. 뭔가 귀찮아 보이죠? 네 -_-... 그래서 이걸 자동적으로 되게 하려는 시도가 COM 스마트 포인터입니다. (더 자세한건 구글형님께 물어보세요. -_-) 그럼 다음은 각 DX 버전별로 스마트 포인터를 쓰는 법을...

DX9:
DX9에서 스마트포인터 형을 선언하려면 d3d9.h를 인클루드 하기전에 comdef.h를 인클루드 하시면 됩니다.

#incldue <comdef.h> 
#include <d3d9.h>

이러면 모든 ID3D형에 대해 ~Ptr 접미사를 붙인 스마트 포인터가 선언됩니다. 이제 D3D 디바이스의 스마트 포인터를 선언하려면 이렇게 하면 되죠.

IDirect3DDevice9Ptr mDevice;

이제 이 스마트 포인터를 사용하는 건 그다지 어렵지 않습니다. 다른 스마트 포인터랑 비슷해요. 특별한 함정도 없죠. (DX11엔 함정이 있음 -_-)

DX11:
d3d11.h은 D3D 인터페이스마다 COM 스마트 포인터형을 선언하는 preprocessor 매크로가 없어요. 따라서 전 atlbase의 COM 스마트 포인터를 써야했답니다.

일단 atlbase.h를 인클루드 하시구요.

#include <atlbase.h>

이제 다음과 같이 일일이 스마트 포인터를 선언해주시면 됩니다.

CComPtr<ID3D11Device> mDevice;

사용법은 DX9의 COM 스마트 포인터와 비슷한데요.. 한가지 함정이 있죠. CComPtr<>의 속이 비어있지 않은데 주소를 구해오려면 assert가 발생합니다. 그리고 디렉트X를 사용해 보신 분이라면 얼마나 자주 포인터의 포인터(**)를 매개변수로 전달해줘야 하는지 아시죠? (렌더타겟 텍스처를 만들 때라던가가 아주 좋은 예죠.) 따라서 이런 상황이라면 & 연산자를 쓰기전에 우선 스마트 포인터의 속을 비워줘야 합니다. 간단히 nullptr를 대입해주면 되네요.

mRenderTarget = nullptr;

여기서 한가지 함정.... 사실 전 CComPtr<>의 detach() 함수가 nullptr를 대입해 주는 것과 똑같은 일을 하는 줄 알았거든요. 근데 아니더군요..... detach()를 호출하면 내부적으로 Release()를 호출하지 않은 채 그냥 포인터를 내던져요... 그래서 메모리 누수가 생기게 되죠 GPU상에.... 켕 -_-; detach() 쓰지 마시고 nullptr대입하세요.


자, 이정도면 그나마 쓸만한 정보를 제공해드린 듯 하니.. 전 이만 뱌뱌....


p.s. 오랜만에 글 쓴 포프였습니다. 물론 여전히 꽃미남 입니다 -_-;


2012년 5월 19일 토요일

[방명록 답변] 게임기획자가 UDK로 게임을 만드려면?

전에 써놨던 블로그글 "게임개발자 지망생님들, 질문에 답해드리겠습니다"에 장문의 질문이 달렸는데 거기에 답글을 달자니 너무 길어지는거 같아 아예 새 글로 올립니다.

제가 답변은 달지만 아무래도 기획쪽 질문이라 저보단 다른 현직 기획자분들이 좀 더 멋진 댓글을 달아주셨으면 합니다...

(불행히도 이번엔 저 잘난척 할 내용은 없군요.. 쳇 -_-)


질문:  UDK로 게임을 만들려고 하는 게임기획 지망생인데요...

안녕하세요 우선 포프님에게 감사의 말씀부터 드리겠습니다.
제가 옛날부터 가지고 있던 북미에 관한 많은 궁금증에 대해 개인의 경험과 함께 상세하게 써내려 풀어주신 것 정말 진심으로 감사 드립니다.

다만 제가 기획자를 꿈꾸는지라 프로그래밍이 중심인 글들에서는 제가 얻고 싶었던 정보를 얻기가 쉽지 않았습니다. 게다가 한국과 거리가 먼 곳이고 게임유형이 다르기 때문에 PC나 콘솔게임산업에 대해서도 기본적으로 원하는 능력이 각국마다 틀릴 것 같아 개인적으로 많은 궁금증을 가지고 질문을 하겠습니다.

제 소개가 늦었습니다만 우선 저는 한국의 직업전문학교를 다니는 학생이며 과는 게임기획과입니다.

최종적인 저의목표는 북미에서 전세계 사람들에게 시대가 변해도 불변하지 않는 사람의 의지나 감정을 담아내는 게임을 만들고 게임이 가지고 있는 기술들이 앞으로 어떻게 발전하고 다른 산업에 앞으로 어떻게 도움을 줄지 또 타 유형의 문화 콘텐트와 접목해가며 지향해 나가야 할 바를 알고 들으며 보고 논의해 가고 싶습니다.

온라인게임은 한국의 큰 특징인 시시각각 변모하는 유행을 축으로 하여 발 빠르게 소비자의 욕구를 지속적으로 충족시키는 장점을 조합한 성격을 지닌 유형으로 기존에 있던 유형들의 게임들과 크게 대비되며 잘은 모르지만 여러 해에 걸쳐 많은 성과를 일궈낸 걸로 압니다. 그러나 한국이라는 지역적 특성에도 불구하고 저는 온라인게임을 좋아하지도 잘하지도 않습니다. 어릴 적부터 팩을 꽂아 하는 비디오게임에 친숙해진 이유도 있겠지만 RPG이외의 장르는 시나리오의 존재가 눈에 띄게 부족하고 캐릭터의 존재의의가 희박했습니다. (단적으로 밖에는 모르지만 제 생각에는 다수의 인원이 모여서 하는 게임에서는 혼자 하는 게임 시나리오나 캐릭터의 비중에 비해 많이 희석되는 것 같습니다. 세계관을 토대로 시나리오나 캐릭터 존재의의를 궁금해하는 것이 게임 내나 공동의 목표가 아닌 타 진영을 이기는 것에 초점을 두고 이 효율성을 강조하기 때문으로 압니다.) 따라서 온라인은 게임으로서의 재미는 주어지지만 개인적으로 감명이나 감흥을 받기에는 힘들었습니다.

하지만 저희 학과는 철저히 온라인게임 중심의 수업입니다. 학생들이 팀을 이뤄 대략적인
온라인 게임 기획서를 만들고 특정 이용자 층을 공략하고 사람을 어떻게 모으고 유료화 콘텐트를 만들어 많은 이익을 창출해낼 것인가를 주 프로젝트로 삼고 있으니까요. 프로젝트마감이 최고조에 이르는 동안에는 학교에서 잠을 자서 완성하기도 합니다.

이런 연유로 PC게임이나 콘솔게임을 만들려는 저의 꿈이 너무나 멀게만 느껴져서 뭘 해야 될지 모르겠습니다.

그러던 와중 포프님께서 계속 언급하시던 중요한 항목인 게임을 만들어보라는 말을 듣고 게임을 만들려고 하는데요. UDK를 이용해 보려고 합니다.

여기서 질문이 있습니다.

첫 번째 질문으로
제가 개념이 부족해서 그러는데 엔진이 정확히 어디에 쓰이는지 잘 모르겠습니다. 게임개발에 핵심적인 것이라고 밖에는 인식을 못하는데요. 게임엔진이 가볍다거나, 무겁다는 의미를 모를 정도입니다. 엔진 시연 동영상을 보면 질감이라든지 물체의 양각을 두드러지게 하거나, 물리작용을 적용하거나, 광원을 조절하는 것으로 아는데 정확한 설명과 기획자들은 주로 엔진을 어디에 쓰는지 가르쳐주시면 감사하겠습니다.

두 번째 질문으로
저는 고등학교를 다닐 때 수리영역은 최하 점에 영어도 못합니다. 그림도 못 그리고 C언어를 배운 적도 없습니다. 따라서 코드, 스크립트, 함수 값의 개념도 모르는데요. 기껏 해본 건 콜 오브 듀티 개발자 콘솔을 아주 조금 이용해 본 것 밖에 없습니다.

show fps로 fps수치를 본다거나
sensitivity로 마우스 민감도를 조정하거나
cg_fov로 field of view값을 변환시킨다 정도로 말이죠

이런 제가 UDK를 만지기 전에 기본적으로 알고 배워야 할게 뭐가 있는지 어디에 쓰이는지 알고 싶습니다. 또 기획자가 가져야 될 지식도 될 수 있으면 알고 싶습니다.

끝으로 이렇게 긴 글 읽어 주셔서 감사합니다.
이 글을 쓰기까지 일주일이 넘게 생각과 시간이 걸렸네요. 개인적으로 많은 고민과 한숨을 섞어서 쓰게 됐습니다. 또한 쓰면서 많은 수정과 저 자신을 되돌아보는 계기가 됐습니다만 한편으론 주위에 온라인게임 개발에만 중점을 둬서 PC와 콘솔게임에 대한 정보를 얻기 힘들다는 게 슬프네요. 모쪼록 유익한 답변 부탁 드립니다.



답변:


일단 고통 잘 이해합니다. 본인이 하고 싶은게 있는데 정작 비싼 돈내고 다니는 학교에서 그걸 얻지 못하는 기분.... 기대가 클수록 실망도 크지요. 전 사실 게임개발 자체가 학교에서 배울수 있는거라 생각하는 놈이 아닌지라.. (전 독학팝니다.. -_-)   그래서 UDK로 뭔가를 만들어보겠다고 결정하신거 아주 잘하신거라 생각합니다. 정말 단순한 게임부터라도 만들면서 즐거움을 다시 찾으시길 바랍니다. (직접 손으로 주무르보면 재미를 느껴야 더 열심히 할 마음이 생기죠.)


그럼 마지막에 달아주신 질문에 대해 답을 제멋대로 답을 달아드리겠습니다. (위에도 밝혀놨듯이 전 기획자가 아니라 제 답에 모자른 부분이 많을겁니다. 다른 현직 기획자분들이 댓글로 좀 달아주시길 바래봅니다.)

1) 게임엔진의 역할
"게임엔진의 역할이 뭐냐?"라는 질문을 받으니 갑자기 머리속이 하애지는걸요? -_-; 사실 저도 이 놈의 정확한 정의가 뭔지는 잘 모릅니다. 원래의 개념은 자동차 엔진처럼 게임을 실행하는데 필요한 기술들을 모아놓은 거였던거 같은데(즉, 아티스트가 만든 모델들을 화면에 보여주거나, 사운드를 출력하거나.. 게임 이벤트를 관리하거나 등등...) 요즘은 그 외에 게임에 들어갈 리소스들을 만드는데 필요한 툴/에디터까지 총괄하는 개념이 되어가는거 같아요.

UDK나 Unity가 인기를 끄는 이유도 사실 엔진자체의 성능보다는 에디터가 좋아서거든요. 제가 언리얼 엔진 3을 제대로 써본지 한 7년되어놔서 이젠 잘 모르지만...  게임이벤트등을 노드로 연결하며 만들 수 있는 툴이 있는 걸로 알고 있고요. 스크립팅도 손수 하실 수 있을거에요. UDK보단 Unity쪽이 더 사용하긴 쉽습니다. UDK가 좀더 고성능이란 장점이 있죠. 그만큼 엔진이 무겁긴 하지만요...(하드웨어 사양이 높아야 한다는 뜻인듯...)

뭐, 다시 말씀드리면 저도 게임엔진의 정확한 정의를 아직 모릅니다. 그러면서도 제가 엔진 프로그래머인데.... 그냥 게임을 제작 및 실행하는데 필요한걸 무조건 만들어서 추가할 뿐이죠 -_-; 게임을 제작/실행하는데 필요한 기술들을 구현하는거죠 뭐. 뭐든간에 저 개인적으로는 어떤 걸 이해부터 하려고 노력한다면서 시간낭비하기 보다는, 직접 몸으로 체험하가면서 대충 감을 잡은 뒤 나중에 한발 물러서서 전반적인 걸 이해하는걸 선호합니다.

당장 조그만 게임부터 하나 만들려고 해보시면, 만들면서 "아 이건 어떻게 하지?" 하는 질문들이 수백만개 생길것이고 그것에 대한 해답을 찾아가면서 (구글 검색이면 왠만하면 다 나옵니다. 아님 UDK 웹사이트를 참조) 익히게 됩니다.

2) UDK를 만지기 전에 알아야 할 것
이 질문은 그냥 무시하겠습니다. '준비한 뒤에 뭘 만진다.' 라는 자세보다는 '일단 만지면서 뭐가 필요한지를 찾아낸다.'란 자세를 가지도록 하세요. 혼자 게임을 만드시려면 그냥 기획서만 작성하시기 보다는 맥스나 마야같은 아트 패키지도 약간 만지셔야 할거고 스크립팅도 약간 하셔야 할 겁니다. 반드시 그래야 한다는 것보다는 그래야 본인이 편합니다.

아무리 백날 '이런 이런 게임을 만들거니까 이 문서를 읽고 이렇게 만들어주세요.'라고 해봐야 그거 제대로 이해할 수 있는 사람 없습니다. 그게 바로 상용게임들도 실제 게임이 출시되고 게이머들이 플레이해본 뒤에야 제대로 평가를 할 수 있는 이유기도 하고요. '이렇게 이렇게 해주세요.'라고 말만하고 프로그래머가 (혹은 다른 개발자가) 그걸 만들어주기만 기다리는건 효율적이지도 않습니다 중간에 miscommunication 생길 가능성도 더 많죠. 남에게 의존하지 않고 본인 스스로 할 수 있는 일이 많아질수록 그만큼 본인의 정신건강에도 좋고 본인이 만들고자 하는데로 게임을 만들 수도 있습니다.

가끔 '다른 거 안하고 자기분야만 열심히 해도 된다' 라고 생각하시는 분들을 좀 봤는데.. 정말 아주 뛰어난 실력자 아닌 이상 별로 환영받지 못하는 분위깁니다. 회사 규모가 클수록 그렇죠. 다른 분야를 잘 이해하는 게 자기 분야에 대한 실력을 높이는 방법이기도 합니다. 크 ㄴ회사일 수록 다양한 사람들이 같이 일하니 서로의 업무에 대해 잘 이해해야만 팀 다이나믹이 좋아지죠. (저 스스로만 해도 프로그래밍 뿐만 아니라 온갖 프로그램 다 만질줄 압니다. 포토샵, 맥스, 마야 등은 기본이구요.. 기획자분들이 다루는 툴들도 필요하면 만지고 배웁니다.)


이 정도면 제가 달 수 있는만큼 답은 단듯 합니다. 다른 기획자분들의 멋진 댓글을 기다려보죠. 이제.


2012년 5월 6일 일요일

내가 수학점수를 60점 -> 100점으로 올린 방법

또 방명록에 답글 달다가 이런 방법은 좀 같이 공유하면 좋겠단 생각이 들어 블로그 글로 씁니다. 수학공부 방법론에 대한 건데요...

출처: "내가 이래서 수학을 싫어해!!!" http://kr.fun.yahoo.com/NBBS/nbbs_view.html?bi=1201&bt=2&mi=648632&page=9870


수학점수 하나로 대학간 포프
아시는 분들은 아시겠지만 저 연세대 법학과 96학번입니다. 저 때는 본고사 시절이었지요. 본고사가 뭐냐하면... 수능끝나고 지원한 대학에 가서 시험을 봐야하는 제도였습니다. 본고사 문제의 난이도는 수능보다 한 백만배 어렵죠 -_-. 현재는 보통 논술만 대학에서 보는거 같지만 저희때는 꽤 많은 과목을 시험을 봤습니다. 제가 연대갈 때는 논술/영어/수학을 본고사로 봤었죠. 물론 본고사 점수 하나만으로 대학입학이 좌우되는건 아니었습니다. 학교내신과 수능점수 그리고 본고사 점수를 비율적으로 반영했었죠. 제 기억으론 연세대 비율이

학교 내신 : 수능 : 본고사 = 40: 30: 30

이었던걸로 기억합니다. (40:20:40 또는 40:40:20 이었는지도... 기억이 안나요! 16년 전이야! -_-)

물론 본고사를 보기 싫으면 특차로 들어가는 법도 있었습니다. 원래 제가 수능 모의고사 점수가 매우 좋았었기에(전국 0.08% 미만이었던 걸로 기억... 0.8%인가? 이것도 격이 잘... ) 그냥 특차로 연대를 들어갈 생각이었고 안정빵이었는데.... 실제 수능을 개판쳐서.. (200점 만점 시대에 20점 이상 하락.. -_-) 본고사까지 쳐서 갔어야 했죠.

그 당시 연대 본고사 점수가 이랬어요.

  • 논술: 100점
  • 영어: 50점
  • 수학: 50점
본고사 결과를 연대에서 발표하진 않았지만 시험을 보고 나와서 애들하고 대충 맞춰보니 제점수가 다음과 같더라구요.
  • 논술: 객관식이 아니라 판단하기 어려움. 그냥 다충 남들 쓰는만큼 쓴 듯
  • 영어: 친구들 평균 35점 맞을 때 혼자 19점 맞았음. (제가 영어를 참 못했거든요 -_-)
  • 수학: 친구들 평균 15점 맞을 때 혼자 47점 맞았음.

그리고 합격했죠.. 한마디로.... 영어에서 남들보다 16점 까먹었지면 수학에서 32점 추가해서 최종 +16로 합격했단 거죠 -_-;

그럼 사람들은 '넌 원래부터 수학을 잘했구나~' 라고 생각할 수 있지만.... 전 사실 수학 잘하게 된건 고2/고3이 전부였다죠 -_-;

한 눈에 보는 제 수학점수 역사
일단 학년에 따라 제 수학점수가 어땠는지부터... (참고로 8학군 점수이니... 결코 쉬운 문제는 아니었다고 생각합니다)

  • 중2: ??점. 기억 안남. 중3때 보단 높았음. 스케이트보드 타다가 머리가 깨져서 격이 안나는 걸수도 있음 -_-;
  • 중3: 60점대. 삼각법에서 개판치면서 엄청 떨어졌음.
  • 고1: 60~70점대로 기억. 일반수학은 여전히 삼각법이 큰 비중을 차지해서...
  • 고2: 96점 아니면 100점. (실수로 한문제 틀리냐 마냐 차이).  수1시절임
  • 고3 1학기: 96~100점. 학교에서 수1을 반복했던 걸로 기억. 이 때부터 학교에서 수학 1인자로 이름을 날렸죠. 전교 1~2등 하는 애들도 수학은 저에게 물어봤어요. (전체 성적에 비해 수학만 잘했거든요. 고3때 내신이 전교에서 상위 10프로.. -_-)
  • 고3 2학기: 96~100점. 학교에서 일반수학을 반복했던 걸로 기억. 이 때가 고1때 개판치던 일반수학을 드디어 마스터 한 때죠. 

저희는 본고사 시절이었던 지라 수능모의고사외에도 종로학원에서 주최하는 본고사 전국 모의고사도 있었어요. 전교생이 아니라 상위 몇프로 학생들만 봤을 거에요. 어차피 중상위권 대학에서만 본고사를 봤었거든요. 고3 1학기때 2번, 2학기때 2번해서 총 4번 본 걸로 기억하는데... 이것도 점수가 대충 다음과 같았죠. (난이도는 거의 딴나라임... 대학 본고사라 -_-)

  • 고3 1회: 7점인가...? (100점 만점임 -_- ㅋㅋㅋ)
  • 고3 2회: 70점 이상?  (점수는 낮아 보이지만 이정도 점수면 상위 1프로였던 걸로 기억)
  • 고3 3~4회: 80점 이상?

고3 담임이 제 고2 담임이기도 했는데 이미 제가 수학을 엄청 잘하는걸 아니 종로학원 본고사 모의시험에 대한 기대가 크셨거든요. 근데 1회에 7점 받아 왕실망시켜주고 2회에는 상위 1프로 받자 제가 반항한다고 생각하셨다죠 -_-;;; 근데 사실 문제는 모의고사 1회차는 전부 일반수학에 관한 거였기에 제가 잘할수가 없었어요. (고1때 점수를 보세요 ㅎㅎㅎ). 다행히 2회는 수1 위주였기에 잘봤고, 3~4회는 수1학고 일반수학 전부다 포함이었지만 그때는 이미 일반수학도 마스터 했기에 점수는 여전히 높았죠.

나에게 맞는 수학공부법을 찾는 것이 젤 힘들었다
뭐, 제가 하고 싶은 말은 전 수학을 2년만에(고2, 고3) 마스터 했다는거죠. 물론 그전에도 수학점수를 높히기 위해 나름 공부는 했어요. 근데 고2때까지는 아무리 별짓을 해도 안올랐죠. 제가 맞는 공부법을 찾지 못해서 였다고 생각해요.

난 암기력이 딸리거등~
사실 전 중학교 졸업할 때까지 전혀 사교육을 받은 적이 없습니다. (물론 초등학교 4학년때 친구들이 구몬수학 하는게 너무 부러워서 졸라서 잠시 했었지만 역시 금방 실증 느껴서 결국엔 관둔... ㅎㅎ 별 도움도 안되었었어요. .ㅎㅎ)

생각해보니 대학갈떄까지 독서실 같은데 다닌적도 없죠. 그냥 제 방에 틀어박혀서 라디오 틀어두고 공부하는게 전부였습니다. 야자도 안했어요. -_- 

보통 학교공부에만 의존했는데 갑자기 중3때 점수가 많이 떨어진 이유가 삼각법 때문이었죠. 코사인이나 사인이니..... 너무나 공식암기 위주로 학교에서 가르쳐서 제 머리가 따라갈 방법이 없었죠. 나중에 깨달은 거지만 전 암기위주의 과목은 점수가 언제나 비교적으로 낮더라구요? 특히 역사는 쥐약 -_-;

중3을 졸업하면서 배치고사라는 놈을 보면 대략 고등학교 입학까지 몇개월 남는 시간이 있습니다. 그 동안에 난생 처음 사교육 다운(?) 사교육을 받아봤죠. 하지만 원래 돈 많이 쓰는걸 좋아하는 인간이 아니라 단과학원이란 놈을 다닙니다. 고등학교 국영수를 미리 좀 배워두는게 좋다는 친척들의 말을 들은 거지요. 단과학원이란 한 4~10명 모아놓고 가르치는 소수정예 학원이 아닙니다. 강의실에 애들 수백명 채워넣고 강사가 칠판에 써가며 강의하는 수준이죠. 사실 생각해보면 학교보다도 별로인 환경인 거 같은데.... 가격이 매우 쌌었습니다. 몇만원 수준 -_-.... 하지만 이 때 쉬는 시간마다 책을 봐가면서 C/C++을 땠으니.. 별 불만은........ -_-;

결과는? 조금 나아졌습니다. 아주 조오금.... 전교 30프로로 올라갔습니다. 근데  수학점수는 오르지 않았습니다. 버럭 -_-; 여전히 문제는 자잘한 공식들을 암기하려고 노력해서 였던 것 같습니다. 제가 암기력이 정말 안좋아서 그 모든 공식들을 절대 암기 못하거든요.

하지만 난 추론 능력이 좋다
고2 첫 면담때, 담임선생님이 이러시더군요.

"응? 어디가겠다고? 연세대..? 허허허... 농담이지?... 뭐 아니라고?  그...그래... -_-;;; 넌 현재 내신이 상위 30프로정도가 되니 여기에 수학/영어 점수를 끌어올리면 가능하겠다. 허...허...허.. -_-;;;"

그래서 수학을 올릴 생각으로 단과학원 보다 조금 비싼 학원을 처음 다녀봤습니다. 한 십몇만원 했던거 같아요. 근데 웃긴게 사실 이 선생님에게 배운 게 딱히 있는게 아니고... 이 학원다니면서 저 나름대로의 공부방법론을 찾은게 컸죠. 그리고 그 방법론이 정립된 이후론 이 선생이 앞에 서서 칠판에 뭔 설명을 하던 말던 전 신경안쓰고 그냥 제 방법으로 혼자 문제를 풀고 있었습니다. 그래서 결국 이 학원을 그만 뒀죠.

그래서 내 공부법은?
그래서 제 공부법은 어땠냐고요? 암기력이 약하다 보니 그보다는 추론능력을 최대한 살릴 수 있는 방법을 택했습니다. 즉,

"아주 간단한 기초공식만 외우고 나머지는 필요할때 다 추론해낸다."

라는 개념이었죠. 그리고  그 기초공식이 몸에 베고, 언제라도 그로부터 다른 공식들을 추론해낼 수 있다는 확신이 들때까지 혹독한(?) 트레이닝을 했죠. 이러면 뭔가 졸라 어려운 거 같은데 사실 정석만 팠습니다. -_-;;;; 수1과 일반수학 정석에 있는 모든 문제를 하나도 안틀리고 풀수 있을 정도로 팠습니다.

추억이 새록새록?... 출처: http://blog.naver.com/PostView.nhn?blogId=jangbaeksan&logNo=50101281482&viewDate=&currentPage=1&listtype=0


막연하게 "정석만 파라!"라고 하면 정석을 처음부터 끝까지 반복해서 풀거나 아니면 틀릴때마다 해답을 보고 이해한 뒤 1분만에 문제 다시 풀수 있다고 만족하고 관두시는 분들이 많더라구요. 첫번째 방법은 시간 낭비고, 두번째 방법은 방금전에 본 해답 또는 공식을 단기적으로만 암기한 거라서... 나중에 시간이 지나면 다 까먹을수 있단 단점이 있죠.


난 한놈만 팬다
그래서 제가 택한 방법은 기본적으로 첫번째 방법을 기초로 정석을 챕터별로 반복해서 풀되, 내가 못푸는 문제들만 집중적으로 반복해서 푸는 거였죠.

이 아저씨가 '난 한놈만 팬다'라고 했던듯 한데.... 기억이....

이 방법을 좀 더 자세히 설명하면 다음과 같습니다. 참고로 전 연필(또는 샤프)만 썼습니다. 제 방법은 지우개로 지울 일이 많거든요.

1. 해당 챕터에 있는 문제들을 처음부터 끝까지 다 푼다.
여기서 주의할 점은 본문에 있는 공식이니 설명을 읽지 않는 겁니다. 본문 중간에 들어가 있는 문제들과 챕터 젤 뒤에 있는 문제들을 다 이렇게 풉니다.

2. 답을 맞추며 맞춘 문제는 지워버린다. 틀린 문제 옆에는 체크마크를 넣는다.
여기서 주의할 점은 해답에 나온 설명을 아직 보지 마시라는 겁니다. 그리고 대충 때려서 맞춘 문제들도 틀린 문제로 간주해야 합니다.

여기서 맞춘 문제들은 따로 공부하지 않아도 언제라도 맞출수 있는 문제들이니 그냥 문제 자체에 크게 X자를 그어버려도 됩니다.

여기서 틀린 문제들은 문제 번호 옆에 체크 마크를 하나 추가하고, 전에 풀면서 낙서해놓은 것들을 모두 지우개로 지웁니다. (나중에 다시 풀 때, '아. 이게 전에 틀린 답이없으니 다른 답을 골라야겠군?' 이란 생각이 들지 않게 하기 위해서입니다. 처음부터 정석 책위에 낙서를 안하는것도 좋은 방법입니다만.. 전 게을러서 그냥 낙서하고 지웠고.. 낙서때문에 종이에 자국이 남으면 모든 답에 동그라미를 쳐버려서 전에 선택한 답이 뭔지 추측할 수 없게 만들었습니다 -_-)

이 단계의 목적은 이미 잘 풀수 있는 문제들을 찾아내는 겁니다. 이 과정을 거치면 딱히 따로 공부하지 않아도 이미 풀수 있는 문제들을 모두 추려냈습니다. 이 문제들은 몇년이 지난 뒤에도 이미 알고있는 공식을 사용해서 또는 그 공식에서 따른 공식을 추론해내서라도 풀수 있는 것들이니 절대 신경 안쓰셔도 됩니다.

3. 이제 본문에 있는 설명들을 읽는다
드디어 공부다운(?) 공부를 할 때입니다. 본문에 있는 설명들을 읽으며 "이해"를 하려고 하세요. 공식 나오는대로 대충 암기해봐야 몇 달 지나면 다 까먹습니다. 새로운 공식/이론이 나올 때마다 이미 알고 있는 다른 공식/이론에서 추론해낼수 있는지 고민해 보세요. 추론이 가능하다면 이 따위 공식 따로 안외워도 되지요.

단 추론이 불가능한 거라면 가장 외우기 쉬운 방법으로 외우셔야합니다. 일례로 전 삼각법이 언제나 쥐약이었는데 결국엔 그냥 코사인 그래프가 어떻게 생겼는지 기억하는 걸로 해결했습니다. 사인과 코사인은 사실 그래프 모양은 똑같거든요. 차이라면 각도=0에서 결과가 1 이냐 0이냐 차이... 그거따라 좌우로 옮겨주면 끝... 그리고 왠만한 공식들은 그래프로부터 추론이 가능해요..... -_-

이렇게 해버릇하면 정작 암기가 필요한 공식이 꽤 줄어듭니다. 머리가 행복해지죠. -_-;;;

4. 다시 해당 챕터에 있는 문제들을 푼다.
단, 체크마크 해놨던 문제들만 풉니다.

5. 답을 보고 틀린 문제들에 체크마크를 하나 더 추가한다. 맞춘 문제들 옆에 체크마크는 지우지 않는다.
여기서 맞춘 문제들은 본문을 읽으며 이해한 내용들을 잘 적용해서 맞춘 문제입니다. 하지만 단기 기억력에 의존하고 있을 가능성도 있지요. 따라서 체크마크를 지우진 않습니다. 그냥 맞췄다는데에 뿌듯해하세요.

하지만 틀린 문제들은 본문에서 배운 내용을 아직도 제대로 적용하지 못했단 증거니 체크나크를 하나 더 추가합니다. 그리고 이제 해답에 나온 설명을 읽으며 이해를 합니다. 그게 이해되었다면 다시 한 번 문제를 풀어보면서 해답에 나온 것과 동일한 답을 계산해낼수 있는지 해보세요. 몇번 반복해서 될때까지 합니다. 하지만 체크마크를 지우지는 마세요.

6. 이제 며칠 쉽니다.
쉬는 이유는 단기적으로 암기한 내용들이 저절로 사라질 기회를 주는 겁니다. 단기기억력에 의존해서 당장 풀었다고 신나하고 까먹는 것보다는 차라리 1주뒤에도 풀수 있다고 확인하고 지워버리는 게 좋죠.

전 암기력이 보통 48시간을 넘지 않는 놈이라 2일정도 쉬었는데 원래부터 쓸모없이(?) 암기력이 좋으시다면 더 쉬셔도 될 거 같습니다. 그 쉬는 기간이 길어진다면 그동안 다음 챕터를 시작하세요.

7. 체크마크 되어있는 문제들을 다시 풉니다.
체크해놓은 문제들을 한 번씩 풀면서 답을 맞춘 놈은 체크마크를 하나씩 지워나갑니다. 틀리면 체크를 하나씩 추가합니다. 해답지에 나온 설명을 보면서 다시 이해하려고 노력도 하세요.

체크마크가 남아있는 문제가 없을 때까지 이 과정을 2일(또는 본인에게 맞는 주기)마다 한 번씩 반복하세요. 더이상 체크마크가 달린 문제가 남아있지 않다면 그 챕터를 마스터 했다고 생각하셔도 됩니다. 하지만 최종점검도 해야겠죠?

8. 챕터 젤 뒤에 있는 문제들을 다시 한 번씩 다 풀어본다.
이제 챕터 젤 뒤에 있는 문제(본문에 있는 건 무시하셔도 됩니다)들을 전부다 풀어봅니다. 단, 처음에 X로 지워버렸던 문제들은 푸시지 마세요. 여기서 다 맞추시면 진짜 마스터 한거고. .틀린거 있으면 7번 과정을 다시 반복해주시면 됩니다.


글 다 쓰고 보니
글 다 쓰고보니 사실 이런 방법을 통해서 얻은 게 문제에 적용해야하는 이론/공식을 재빨리 찾아낼 수 있는 자세가 몸에 벤거 같네요? 암기가 아니라 몸에 벤... 전 이걸 그냥 장기기억력 + 추론능력이라 생각하고 있습니다.

이게 저에게 맞는 방법이란걸 확신하게 또다른 계기가 BCIT다닐 때였는데. 95년 이후에는 미분을 한번도 써볼일이 없었거든요? 근데 2005년도에 BCIT 다니면서 다시 한번 쓸일이 생겼죠. 미분 문제를 다시 처음보니 푸는데 몇 분 걸렸지만(오랫동안 안쓴 놈이니 생각해는데 시간이 걸리더군요) 첫문제만 그랬지 두번째 문제부터는 거의 즉각적으로 풀리더라구요.

뭐 이정도면 꽤나 황당했던 제 수학공부법 소개가 끝난 것 같습니다. 사실 꽤 오래전에 했던 방법이라 자세한 디테일은 조금씩 틀릴 수도 있지만 기본적인 방법은 여전히 저에게 맞는 방법이라고 확신합니다. 그덕에 BCIT에서 대학수학 들을때도 거의 100점으로 졸업했습니다

(앗.. 또 자랑질 해버렸다...... 또 '자뻑'으로 태그 달아야지.... -_-;;;;)

따른건 자뻑이지만 꽃미남만은 진실인 게임개발자 포프였습니다.



2012년 5월 2일 수요일

내가 선택한 버전컨트롤 시스템(2012년 판)


작년에 영문 블로그에 제 개인적으로 사용하는 버전컨트롤 시스템은  Subversion이란 글을 올
렸었습니다. 근데 그 뒤에 Perforce에 두가지 변화가 생겨서 다시 한 번 생각을 하게되었지요. Perforce에 생긴 두가지 변화는 다음과 같습니다.
  • P4SandBox란 이름의 새 기능
  • 공짜버전의 한도가 20명 사용자, workspace 20개로 널럴해졌음

P4SandBox란 무엇인가?
이 새로운 기능이 Perforce 2012.1 에서 소개되었는데요. 이건 Git처럼 각 개인컴퓨터에서 local private 버전 컨트롤을 가능하게 해주는 기능입니다. 하지만 Git처럼 완전히 분산시스템은 아니고요. 중앙서버에 있는 depot을 개인 컴터 HDD에 mirror 복사를 해놓은 뒤 오프라인상태로 작업을 할 수 있게 해주는거지요. 그리고 나중에 중앙서버에 파일들을 checkin할 준비가 되면 그때까지 local 서버에 제출했었던 모든 파일들을 전부다 중앙서버에 올리는 겁니다. 또한 P4SandBox는 Stream이라는 게 있는데요. Git의 막강한 브랜치 시스템과 거의 비슷하게 작동하네요.

이 기능들에 대한 더 자세한 내용은 이 비디오를 참고하세요. 저보다 더 자세히 설명해 줍니다. ^_^

Background
게임업계에 대략 10년간 몸담았고 여러가지 오프소스 프로젝트를 주무르다보니 정말 다양한 버전컨트롤 시스템(VCS)를 만져봤답니다. 그냥 파일들을 손수 복사해주는 것부터 매우 값비싼 상용 프로그램 Perforce에 이르기 까지요.

제가 여태까지 집에서 써오던 버전 컨트롤 시스템은 Subversion이었습니다. 물론 더 나은 프로그램이 있다고 입에 침튀기시는 분들도 많았지만 그 분들이 맞다/틀리다곤 하지 않겠습니다. 제가 Subversion을 써왔던 이유는 (예전 블로그 글에도 밝혔듯이) 가장 간편하게 사용할수 있으면서도 제가 원하는 기능을 적당히 잘 지원하던 놈이었기 때문입니다. 하지만 내일부로 다시 Perforce로 돌아갈 계획입니다. 왜냐면 이제 Perforce가 더 제 필요를 잘 충족시켜 줄거거든요. 다음은 제가 개인프로젝트용으로 사용하는 VCS로부터 원하는 것과 시중에서 널리 사용되는 VCS들이 얼마나 그런 일을 잘 하는지를 목록으로 정리해논 것입니다.

윈도우즈 지원
전 MS빠입니다. 언제나 윈도우즈를 사용하지요. 게임 프로그래인 저로써는 사실 Linux를 사용할 필요를 못느낍니다. 운영체제를 하나만 사용할 수 있다면 그게 확실히 덜 골치거리겠지요?
  • Git(-2): 사실 전 Git을 꽤나 선호합니다. 특히 브랜칭을 처리하는 거 보면 아주 침을 질질 흘리죠. 문제는 .... Git을 윈도우즈에서 돌리려면 좀 피곤하죠. 제가 아는 한은 Cygwin이나 msysgit을 설치하는 건데 Cygwin은 사실 Linux를 에뮬레이션 하는 것과 다르지 않고, Cygwin을 윈도우즈 PC에 설치하는게 그닥 달갑지 않습니다. msysgit은 그보단 윈도우즈에 설치하기 쉽지만 SSH도 따로 설정해줘야 하고..... 한마디로 그냥 마우스 클릭 한번만으로 윈도우즈에 Git을 설치할 방법이 없단 거지요. 따라서 MS빠인 저에게는 좀... no-no입니다.
  • Perforce(+1): Perforce는 윈도우즈를 매우 잘 지원하죠. 윈도우즈용 서버/서비스 프로그램도 인스톨러를 통해 한번에 설치 가능합니다.
  • Subversion(+2): 사실 이건 매우 큰 surprise였는데요. 그리고 그게 바로 제가 Subversion을 지금까지 이용해온 이유기도 하구요. VisualSVN Server이란 프로그램이 있는데 마우스 한번 클릭으로 윈도우즈에 Subversion을 깔아줍니다. 알아서 https 액세스도 잡아주고 사용자 관리 및 뭐니 모두 매우 간단한 GUI 툴에서 잡아줄수가 있습니다. Perforce를 설치하는 것보다도 쉬워요 -_-;
(가끔 있는 일이지만) 다중의 사용자 지원
개인 VCS는 사실 제 스스로의 코드의 히스토리를 저장하고 백업을 보관하는 용도이지만 가끔 제 친구들도 제 코드를 받아보게 할 일이 있지요. 절 도와준다거나 할때요. 따라서 여러명의 사용자를 지원할 수 있어야 편합니다.

  • Git(+1): Git에서 여러 사용자 지원하는건 전혀 어렵지 않죠. 하지만 윈도우즈에서 각 사용자별로 액세스 컨트롤을 해주는 게 왕 짜증입니다.. 새로운 윈도우즈 사용자를 추가한 뒤, 각 사용자의 public키를 받아서 디렉토링 ㅔ넣어줘야 하죠.. 
  • Perforce(+1): 작년까지인가 Perforce는 공짜에 한도가 있었죠. 다음 중에 한 조건에서만공짜였습니다. i) 2명의 사용자와 5 개의 클라이언트 워크스페이스 또는 ii) 사용자 제한 없이 1000개 파일까지만. 하지만 이제는 20명의 사용자와 20개의 클라이언트 워크스페이스까지가 공짜입니다. 파일 수의 제한은 없구요. 하지만 새로운 P4SandBox기능을 쓰려면 각 사용자별로 2개의 워크스페이스가 필요합니다. (하나는 중앙서버용 하나는 local 미러용). 그리고 각 컴퓨터별로 이렇게 해줘야 하니 보통 사용자가 2대의 컴퓨터를 쓴다고 가정하면 한사람이 4개의 워크스페이스를 잡아먹죠. 따라서 결국에 5명의 사용자만 제대로 지원할 수 있다는 건데... 제 개인 프로젝트용으로는 이정도면 매우 충분한거 같습니다. 따라서 예전에 줬던 -1점을 +1 점으로 바꿨습니다.
  • Subversion(+2): 윈도우즈 지원 섹션에서 말씀드렸듯이 VisualSVN Server에서 GUI 툴을 통해 간단히 액세스 컨트롤을 할 수 있습니다. 너무너무 쉬워요~ 사용자 수 제한도 없고~  강추입니다.

비용
아무래도 공짜가 좋죠.. 공짜가 최고 -_-d

  • Git(+1): 공짜
  • Perforce(0): 특정 조건하에 공짜. 하지만 최근들에 그 제한이 완화되었음. 따라서 점수를 -1에서 0점으로 바꿨습니다.
  • Subversion(+1): 역시 공짜

GUI 클라이언트
Perforce만큼 멋진 GUI 클라이언트가 없습니다. 사실 P4V 보단 P4Win이 좋았지만 P4Win은 더이상 안나오니.. 중얼중얼...P4V도 충분히 좋아요~  물론 GUI 클라이언트로 할 수 없는 일은 컴맨드 라인을 쓰지만 거의 대부분 GUI 클라이언트를 사용하는 것이 훨씬 빠르고 훨씬 쉽더라구요.
  • Git(-1): 아직 공짜이면서도 쓸만한 GUI 클라이언트를 못찾았습니다. 몇개 개발중인건 봤는데 아직 맘놓고 쓸만큼 자리잡은 놈들이 없어요. 그나마 TortoiseGit이 좀 쓸만하지만 P4V처럼 진정한 GUI클라이언트가 아니지요.
  • Perforce(+2): P4Win은 죽여주고, P4V도 매우 좋습니다. ㄱㄱㅑ~
  • Subversion(+1): SmartSVN이란 프로그램을 한동안 써왔습니다. 프로 버전을 사지 않으면 좀 기능에 제한이 있지만 사실 공짜버전만으로도 충분히 쓸수있습니다. 공짜 버전에서 제공하지 않는 기능이 있다면 그냥 TortoiseSVN으로 해주면 되고, 그것도 안되면 컴맨드라인을 쓰면 되죠. 하지만 거의 SmartSVN만 쓰시고 사실 겁니다... ㅎㅎ
브랜칭
브랜칭... 꽤 멋진 놈이죠... 전 이거 사랑합니다. 코드가지고 장난칠 때(실험적인걸 할 때 라고 읽어주십쇼 -_-) 기존 코드에 깽판치고 싶지 않다면 이만한 놈이 없죠.
  • Git(+2): Gt의 막강한 브랜칭 지원 매우 사랑스럽습니다. 다른 디렉토리로 파일을 복사할 필요가 없죠. 따라서 코드에서 파일 경로를 참조하는걸 바꿔줄 필요조차 없습니다. 예를들어 Awesome이란 이름의 라이브러리가 있는데 이 라이브러리를 브랜칭을 하고 싶다고 해보죠. Git에서는 그냥 다른 브랜치로 switch한 뒤 코드만 빌드하면 됩니다. 하지만 다른 소스컨트롤 시스템에서는 이 라이브러리를 다른 디렉토리로 복사해야하니 코드에서 라이브러리의 경로까지 다시 고쳐줘야 하죠...
  • Perforce(+2): 바로 위 Git에서 말씀드렸듯이 다른 폴더로 브랜칭을 해야하는 거 참 귀찮습니다. 그리고 Perforce는 중앙관리시스템이다 보니 그 수많은 파일들을 브랜칭 하는것도 되게 느리죠. 네트워크 스피드가 아무래도 HDD속도보단 느리니까요. 하.지.만. 이제 세상이 바뀌었습니다. P4SandBox를 이용하면 브랜칭이 Git의 브랜칭과 거의 같아집니다. 샌드박스안에서 모든게 이뤄지거든요. 중앙서버에 접속할 필요조차 없이... 따라서 점수를 -2에서 +2로 바꿨습니다.
  • Subversion(-1): 속도는 빠릅니다. 하지만 다른 디렉토리로 브랜칭 해야하는거... 흠냐.. 여전히 맘에 안듭니다.

최종 점수
점수를 다 더해보니 이렇게 나옵니다.
다시 한번 말씀드리는데 이건 제 개인적인 용도에 맞게 산출해낸 점수입니다. 대형 게임회사용이 아니에요. 따라서 여기다 "하지만 Perforce가 사용자 200명도 쉽게 지원하니 최고야!" 따위의 답글을 남기신다면 잠드시기 전에 이 비디오를 2시간동안 보게 만들겠습니다. -_-;



2012년 5월 1일 화요일

시그래프 2012 발표자로 뽑혔습니다

시그래프...... 애니메이션 영화, 게임을 망라하고 전세계 최고의 컴퓨터 그래픽 축제인데 올해 발표자로 뽑혔습니다. 사실 발표자로 뽑힌 이야기 자체가 더 웃기다죠...

시그래프 발표신청 마감 바로 전일날 친한 회사동료인 Daniel 박사님과 Vladmir하고 술을 마시고 있었죠. Daniel이

"내일 오후 10시가 마감이니 니 Decal 기법을 발표신청 해보는게 어때?"

라고 해서... 생각해보니 나쁜 생각이 아닌거 같아서... 그러겠다고 했습니다. 뭐 오후 10시 마감이니 회사에서 쓸 시간이 충분할 듯 해서....과음을 했죠 -_-;; 부어라 마셔라~

그리고 담날 오전 11시쯤 출근을 했는데.. 아뿔사... 마감이 오후 2시더군요.. -_-; (아마 오후 10시는 영국시간이었던듯....) 그래서... 점심도 다른 동료보고 좀 사다가 배달해달라고 하고... 그때부터 졸 3시간 한장짜리 abstract(논문에 보면 한장짜리 요약문?)써서 제출을 마쳤습니다.. 마감 시간 30초전에 업로드 완료.. ㅎㅎ

근데 발표자로 선택이 되었네요 -_-;; (물론 잘난척입니다. 그럼요 그걸 빼면 제가 시체죠.. 3시간만에 써도 선정되는 천재....)



근데 지금 렐릭에서 퇴사한 상태라... 발표해도 된다는 허락을 다시 또 받아야 했어요.. 뭐 이젠 그것도 마물 되었으니 가서 발표합니다.. 8월달에 LA에서 한다는군요.... (전에 북미취업 보시던 분 중 한분이 LA오면 이쁜 누님"들"을 소개시켜준다 하셨는데....... 중얼중얼...)

사실 발표신청을 하지도 않았던 이유중 하나가... 저희 회사에서 일하던 팀장중 하나가 시그래프의 검토위원인데... 작년에 이 기법을 가지고 나가겠다고 하니 이 정도 기법은 시그래프에서 발표하기엔 수준이 딸린다고 했었거든요. 검토위원이 그정도 말을 하니 그렇겠거니 하고 믿었었는데.... 2011년에 다른 회사에서 발표한 자료를 보니 제 발표자료가 더 나은거 같아서 그냥 추진 -_-

뭐든간에 마지막으로 하고 싶은 말...