2013년 11월 21일 목요일

하버드의 컴퓨터학 축제: This is CS50.


올해 초 대학 강의를 무료로 볼 수 있는 애플의 iTunes U 앱에서 볼만한 게 없나 찾다가, 'This is CS50.' 라는 특이한 제목의 수업이 내 눈길을 끌었었다. 제목이 뭔가 위엄도 있고 컴퓨터과학Computer Science 관련된 게 아닐까 해서 열어봤는데, 하버드대학교의 컴퓨터학 개론 수업이었다. 과목 코드가 CS50이고, 수업 제목이 This is CS50. 이다. 재귀적 이름을 가진 GNU가 연상되는 재미있는 센스다.

난 이 강좌를 보면서 감탄도 했지만 한편으론 참 허탈했다. 하버드 정도 되면 이런 퀄리티의 수업을 듣는구나. 괜히 비싼 등록금 받는 게 아니구나.

This is CS50는 대규모의 컴퓨터학 축제이다. 지난학기엔 비전공자들이 훨씬 더 많이 포함된 700명이 넘는 하버드 학생들이 수강했고, 1만명이 넘는사람들이 온라인으로 강의를 들었다. 실생활과 직결된 흥미로운 문제들이 나오고, 2~30여명의 조교들이 매주 실습에서 학생들을 지도한다. 공짜 점심과 파티도 있다. 이 수업은 컴퓨터를 프로그램 할 수 있다는 건 큰 행복이고, 축복할 일이라고 말한다. 그리고.. 실제로도 그렇다.

수업을 하는 David J. Malan 은 지난 학기에 바이너리 서치를 설명하기 위해 전화번호부를 들고 나와 막 찢더니, 이번 학기엔 2진법을 설명하기 위해 탁상용 램프 여러대를 들고 나왔다. 학생들을 강단으로 불러 sorting을 보여주기도 하고, linked list를 설명하기도 한다.



하버드 강의니까 어려울거라 생각하면 오산이다. 오히려 일반 학부 수업보다 훨씬 더 쉽고 친절하다. 강의를 듣다보면 많은 고민을 통해 잘 짜여진 수업이라는 게 느껴진다.

돌이켜보면 학부 1, 2학년시절 내게 가장 부족했던 건 이런 수업이었다. 컴퓨터학이라는 학문의 큰 그림을 그려주는 수업.

iTunes U에서도 볼 수 있고, cs50.net 에서도 볼 수 있다. edx.org 에서는 아예 수업에 등록할 수 있다. 영어 자막이 지원된다. 영어가 그리 친숙하지 않다면 멈추고 반복 재생해 가면서 곱씹어 보면 좋겠다. 숙제도 공개되고, 실습도 모두 영상으로 제공된다. 관심이 있는 사람이라면 꼭 보길 추천한다.

http://cs50.net
http://edx.org

첫 수업 보기
http://cs50.tv/2013/fall/lectures/0/w/


2013년 11월 3일 일요일

Macbook Pro 2011년 말 모델에 부트캠프로 윈도우 설치하기



OSX가 업데이트를 거듭하면서 어느 순간 부트캠프 어시스턴트에서 USB로 윈도 설치 옵션이 사라졌었다. 즉 DVD 로만 윈도를 설치할 수 있게 되었다. 아마도 라이언 쯤이었던 것 같다. 대충 구글링한 결과 DVD 드라이브가 달려 있는 모델에선 USB설치 옵션을 막아 버린 모양이다(이유는 모르겠음. 매버릭스 이전까지는 부트캠프 어시스턴트 내의 info.plist파일을 수정하여 우회하는 방법이 있었는데 이젠 이것도 막힘). 나는 OSX만 쓰는 데 불편함이 별로 없어 그간 그냥 쓰고 있었는데,

학부 연구 보조중인 프로젝트에서 윈도 + OpenGL을 사용할 일이 생겼다. 처음엔 VMware로 깔아서 하려고 했는데 코드가 실행이 안 되어 알아보니 VMware Fusion 의 버추얼머신은 OpenGL 2.1 까지밖에 지원을 못한다고. 결국 부트캠프로 네이티브 윈도를 설치 해야하는데, 여기서 문제가 생겼다.

지금 내 맥북프로는 기존 하드를 SSD로 교체하고 DVD 드라이브가 있던 자리엔 500GB 하드디스크를 박아 놓은지라 DVD 드라이브가 없다. 물론 떼어낸 DVD는 케이스에 넣어 USB 외장 DVD드라이브로 만들었는데, 설치 시도를 해보니 이것도 USB 연결이라고 그런지 윈도 설치 부팅이 안 된다. (Couldn't find BOOTMGR 이라는 에러가 발생하거나 커서만 뜨고 아무것도 안 됨)

그렇게 며칠을 고생하다가, 결국 맥북을 뜯어 500GB HDD를 떼고 그자리에 DVD드라이브를 끼우고 부트캠프에서 DVD로 윈7을 설치하니 된다. 설치 끝나면 다시 DVD를 뜯고 HDD를 끼워야지. 그래도 깔려서 다행이다.. 아오...

저랑 비슷한 삽질 하시던 분이 계시면 이걸 보시고 꼭 해결하시길.

2013년 10월 15일 화요일

Masters of Doom 둠이 어떻게 만들어졌는가


짬이 날 때마다 핸드폰으로 'Masters of Doom' 이라는 책을 읽고 있다. 존 카멕과 존 로메로가 어떻게 자라왔는지, 어떻게 만났는지, id소프트웨어가 어떻게 생겨났는지 등의 이야기를 담고 있는데 너무 재밌다.

두 존의 이야기뿐 아니라 당시 컴퓨터 산업과 컴퓨터 게임 산업이 어떻게 변화했는지를 기록한 역사서 같다. 스티브 잡스의 Atari 입사와 스티브 워즈니악과의 만남, Apple II와 IBM PC, 리차드 개리엇의 울티마, 셰어웨어의 등장 등..

지금 읽고 있는 곳은 커맨더 킨의 탄생과 성공.  커맨더 킨은 당시 그래픽 처리속도가 느렸던 PC에서 처음으로 자연스러운 스크롤링을 보여준 게임이라고 한다. 화면이 움직일 때 변화가 있는 배경만 다시 그리는 방법을 존 카멕이 생각해냈고, 이는 엄청난 센세이션이었다고. 추억돋아서 커맨더 킨의 영상을 찾아봤다. 1,2,3편이 90년도에 한꺼번에 발매되고 4,5,6편이 91년도에 발매되었다고 한다. 엄청난 개발력이 아닐 수 없다. 내가 어릴때 플레이했던 건 5편인듯.



우리나라에는 '둠: 컴퓨터 게임의 성공신화 존 카멕과 존 로메로' 라는 제목으로 변역이 되었다. 어릴 때 흔한 위인전 말고 이런 책을 읽었으면 참 좋았을 텐데.

http://www.yes24.com/24/Goods/1941821?Acode=101

2013년 10월 11일 금요일

일렉트릭 기타의 사망


포브스: 일렉트릭 기타의 사망

전부터 생각하던 것과 일맥상통하는 기사가 나왔다. 주류 음악씬에서 일렉트릭 기타가 사라졌다는 이야기. 내 생각에는 신서사이징 기법이 다양해지면서 신서사이저가 일렉기타의 장점을 많이 흡수한 것 같다. 물론 기타와 기타를 사용한 음악이 사라지진 않겠지만 어느 새 메이저에서 밀려난 것은 사실.

나는 스크릴렉스와 그 이후 덥스텝(브로스텝)이 큰 전환점이 되었다고 본다. 메탈 씬에서는 젠트djent 라고 부르는 사운드(디스토션 걸린 기타의 5,6번 현을 팜뮤트한 채로 스타카토하는 사운드)야말로 일렉기타만의 고유 영역이었는데, 그 강렬하면서도 쫄깃한 느낌이 이제는 신서사이저로 구현이 된다. 속주는? 고음역의 칩튠chiptune이 그 영역을 대신하고 있다.








그리고 요즘 대중이 인공적으로 합성해 낸 음을 자연스럽게 받아들이기 시작한 것 같다. 특히 칩튠의 경우 게임보이와 다마고치, 피처폰으로 기억되는 어린시절을 추억하는 정서와 맞물려 정겹게 들리는 면이 있다. 어쩌면 '전자음을 추억한다'는 역설적인 면 때문에 더 쿨하게 느껴지는 건지도 모르겠다. 바이올린 같은 어쿠스틱 악기들은 대중들에게 오히려 더 멀고, 드디어 인공적인 소리를 추억하는 때가 온 것이다.

물론 이것도 유행이고 다시 어쿠스틱 사운드가 대세가 될 수도 있겠지만(지금 한국의 '버스커 버스커' 처럼), 크게 보면 음악은 돌아오지 못할 큰 변화를 겪었다고 본다.


2013년 10월 9일 수요일

자신감과 여유와 창작 - SM엔터테인먼트와 데브캣


요즘 iTunes Radio 듣는 재미로 사는데, 내일 시험인 오토마타 공부를 하면서 iTunes Spin The Globe라는 라디오를 듣다가 한국말이 나와서 깜짝 놀랐다. 노래가 좋아서 무슨 곡인가 보니 f(x)의 [첫 사랑니 Rum Pum Pum Pum]. 창의적이고, 세련되고, 도발적인 곡이었다. 세계의 인디 노래들을 틀어주는 Indie Radio에서 나왔대도 이상하지 않을 것 같았다.


f(x) - 첫 사랑니 Rum Pum Pum Pum


근 5년간의 K-Pop은 많이 달라졌다. 과감하고 실험적이다. 그런 파격이 SM과 YG라는, 가장 선두에서 이루어진다. 생각해보면 과거엔 이렇지 않았던 것 같다. 좋은 곡들이 가끔 나오긴 했지만 기존의 틀을 깨거나 새로운 시도를 하는 일은 거의 없었다.

추억의 S.E.S

이게 어쩌면 이제 SM이나 YG에게는 여유가 있기 때문인지도 모르겠다. 90년대~2000년대 초에 다소 뻔하지만 대중적인 곡으로 돈을 왕창 벌어놓고, 이제 그 돈으로 살짝살짝 실험도 하고 파격도 해보다가 이게 잘 먹히니까 자신감이 붙는다. 계속 이것저것 과감하게 해 볼 수가 있다.

게임회사 다니는 한 학교 선배는 데브캣이 하고 싶은 걸 하는 게임회사의 좋은 모델같다고 했다. 마비노기로 돈 많이 벌어 놓고, 그 돈으로 영웅전을 개발하면서 하고 싶었던 걸 죄 때려박는다. 새로운 실험도 실컷 하고 결과도 좋다.

로고부터가 자유로운 영혼이 보인다


어쩌면, 하고 싶은 걸 하려면 먼저 좀 덜 하고 싶은 걸 해야되는 지도 모르겠다 (엄청 운이 좋지 않다면). 그래도 하고 싶은 것과의 끈은 놓지 않으면서, 진득하게 때를 기다리는 거다.


2013년 7월 29일 월요일

무엇을 하고 살 것인가



무엇을 하고 살 것인지를 정말 오래 고민해왔지만, 학부 졸업을 앞둔 지금까지도 결론이 안 나고 있다. 그래도 몇 가지 발전은 있었다. 진로를 몇 가지 분야로 압축할 수 있었고, 각 분야에서 일하는 것이 어떤지 좀더 구체적으로 알게 되었다.


학부 입학때부터 지금까지 진로에 영향을 준 일들을 정리해 봤다.

컴퓨터공학과 입학 -> 밴드동아리 가입 -> 군입대 -> 커뮤니케이션학 복수전공과 동시에 광고동아리 가입 -> 한국 퀄컴 인턴 -> 복학 -> 아트&테크놀로지 수업 수강


컴퓨터공학과에 온 것은 게임과 프로그래밍에 대한 막연한 동경 때문이었다.  하지만 컴퓨터공학과 1학년이 학부에서 배우는 것은 지루했다. 커맨드 라인을 사용하여 문자열을 다루는 프로그램을 아무리 짜봐야 우리가 일상에서 사용하는 알집같은 GUI 애플리케이션이 어떻게 만들어지는지 알 수 없었다. 게임은 더욱 더 그랬다. 게임을 만드는 것과 이 학과에서 가르치는 것이 완전히 동떨어진 것처럼 느껴졌다. 그래서 기타를 열심히 치기로 했다.  모든 수업을 아침 9시부터 오후 1시 사이에 밀어넣고, 수업이 끝나면 바로 아현동 지하 레슨실에 가서 기타를 쳤다.

어린 나이에도 주워들은 건 있어서 나름 이런 전략을 세웠다. 전공은 취직할 정도로만 하고, 월급이 적더라도 널널한 직장에 취직한 후에 음악을 병행한다. 음악으로 돈을 벌 수 있게 되면 그때부터 음악을 하는 거고, 아니면 계속 병행하면 된다. 일주일에 한 장씩 사는 로또처럼.

그리고 남들처럼 군대에 갔다. 그때쯤 컴퓨터공학과를 나와서 널널한 직장에 다닌다는 건 참 어렵다는 걸 알게 됐다. 좀 더 재미있는 걸 하고 싶었다. 우리학교에서 배울 수 있는 것 중엔 광고가 재미있어 보였다. 전역 후 커뮤니케이션학 복수전공을 했고, 광고공부를 했다.

광고는 확실히 재미있었다. 내가 만든 것이 가능한 한 가장 강력한 매체를 통해 사람들에게 전파된다! 이것이 광고의 매력이었다. 공모전에도 몇 번 응모를 하고 나름 우리나라에서 제일 크다는 공모전의 1차예선을 통과하기도 했다.

그러는 와중에 컴퓨터공학과에서는 가장 빡세다는 운영체제 수업을 들었다. 3학년 2학기였다. 그간 동아리 활동으로 바쁘다가 마침 이때 전공에 집중할 수 있었다. 한번 하는데까지 해보자 하는 심정으로 과제에 올인했다. 나는 C언어 기초조차도 불안했기 때문에 남들 1학년때 보는 책들을 펴놓고 처음부터 다시 공부했다. 그렇게 첫 과제때문에 추석 연휴를 홀랑 날려먹고, 마지막날 깨달음이 왔다. Linux에서 사용되는 것과 동일한 Doubly Linked List를 이해했다! 새벽 다섯시에 창밖에 대고 소리를 질렀다. 이런 기쁨은 처음이었다.

다음 학기에는 영화제작 수업을 들었다. 과제 중 뮤직비디오 제작이 있었는데, 남의 노래 뮤직비디오 만들어주기에는 존심이 상해서 노래를 만들었다. 뮤직비디오 제작 2주동안 열흘이 넘는 시간을 노래 만드는 데 썼다. 그간 깨작대다 만 습작들은 많았지만 가사까지 붙여서 끝까지 완성한 건 처음이었다. Logic의 기본악기만 사용한 것과 처음인 것을 감안할 때 나쁘지 않았다. 신디사이저 사용에 재미가 붙었다.

마지막 학기를 앞두고 퀄컴 인턴에 지원했고, 덜컥 붙었다. 사실 뭐 하는 곳인지도 제대로 모르고 갔었다. 알고보니 관심있는 분야와는 거리가 다소 있었지만, 그래도 성장하는 계기가 됐다. 돈도 조금 모았다. 인턴이 끝나기 전에 처음으로 GUI프로그래밍에 도전해 봤다. .NET 프레임워크를 사용해서 툴을 하나 만들었다. 재미있었다. 내가 어릴 때 막연하게 동경하던 프로그래밍의 이미지는 이런 것이었다. EXE확장자를 가진 파일이 생겨서, 실행하면 여러가지 일을 하는 버튼과 창들이 나오고, 물음표를 누르면 개발자 정보와 연락처가 나오는, 사실 정말 중요한 프로그램의 core와는 별 상관없는 것이, 내가 동경하던 것이었다. "여러분! 제가 프로그램을 만들었어요!"

그리고 이런 생각이 들었다. 내가 음악을 좋아하고, 신디사이저에 관심이 있고, 프로그래밍을 전공했는데, 가상악기를 만들 순 없을까? Propellerhead사의 Reason처럼 멋진 소프트웨어를 만들 수는 없을까? 갑자기 광고가 마음에서 멀어졌다. 물론 광고도 재미있지만 이정도로 흥분되는 일은 아니었다.

하지만 늦었다. 코딩도 이제 갓 시작한거나 다름없었고, 신호처리 쪽에 대해선 아무것도 몰랐다. 알고보니 음악은 짧은 소리들의 집합이었고, 소리는 순전히 신호였고, 신호를 가지고 노는 건 전자공학에서 가르치는 것이었다. 따분하다고만 생각했던 전자공학이 갑자기 거대하게 다가왔다. 올해 초 복학해 DSP(Digital Signal Processing)을 청강했고... 좌절했다. 

동시에 우리학교에 신설된 아트&테크놀로지 학과의 수업을 몇 개 들었다. 모바일 프로그래밍이란 수업의 마지막 과제는 게임샐러드라는 툴을 사용해 게임을 만드는 것이었다. 힘들었지만 재미있었다. 안드로이드 .apk 파일로 만들어 갤럭시 탭에 넣어가지고 다녔다. "여러분! 제가 게임을 만들었어요!"

바쁘다는 이유로 멀리했던 게임인데 만들어 보니 재미있었다. 작곡을 할 때와 같았다. 조금만 몰입하면 어느새 해가 떠 있었다.



그래서 지금은 오디오와 게임을 두고 고민중이다. 공통점은 창작을 하는 분야에서 일하고 싶다는 것이다.

얼마 전에는 신생 가상악기 개발회사로부터 함께 일하자는 제의를 받았다. 내가 그런 일을 할 수 있을지 사실 두렵기도 하고, 얼떨떨하기도 하다. 학부 동기들의 대부분이 대기업에 입사한 가운데 홀로 다른길을 걷는 것도 불안하지 않다면 거짓이다. 삼성전자에 다니는 친구들이 많다보니 여태 연봉 액수를 들어도 무덤덤했는데, 내가 중소기업에서 시작하면 받게 될 연봉과 비교하니 새삼 놀라웠다. 이래서 다들 삼성 삼성 하는구나 싶었다.

우리나라 게임회사에 취직하는 것도 생각해 봤지만 아무리 생각해도 국내 게임회사들이 만드는 게임은 내가 만들고 싶은 것과는 거리가 있었다. 빅토리아 시크릿 모델같이 생긴 캐릭터들이 갑옷 입고 검 휘두르고 AK-47 쏘고 하는건 아무래도 내 취향이 아니었다. 게임 쪽에서 하고싶은 걸 하려면 창업을 하거나 북미쪽에 취업을 해야 했다.

암튼 뭘 하고 살지 결정이 너무 어려워서, 일단은 결정을 운명에 좀 맡기기로 했다. 대학원 원서도 넣어보고, 입사지원도 하고 하다가 '되는 쪽' 으로 가려고 한다. 이렇게라도 결정하지 않으면 도대체 시작을 못하겠다. 다만 한 가지 원칙은 있다. 하고 싶은 일 중에서 고른다는 것. 돈을 더 받는다고 내가 하고싶지 않은 분야의 일을 하면 내가 못 견딜 것 같다. 그리고.. 열심히 살아야한다. 하고싶은 일 하면서 잘 먹고 살려면 정말 남들 몇배로 열심히 살아야겠더라. 왜 이제야 알았을까.

----



2013년 7월 28일 일요일

파이썬 GUI 툴킷으로 무엇이 좋을까


Tkinter? wxPython? pyQt? pySide? PyGUI? pyGtk?

안그래도 뭘 잘 못 고르는 마당에 (음료수라던지, 토익 문제집이라던지) RA중인 프로젝트를 위한 툴을 만드는 데 사용할 파이썬 GUI 툴킷을 고르자니 머리가 쪼개질 것 같다. 검색해 보니 역시 세상 사람들도 다 같은 고민을 하는 듯. 아예 각 항목별로 중요도를 설정해주면 목적에 맞는 GUI 툴킷을 추천해주는 페이지까지 있다.




그래.. 살다보면 딱 '넌 이거 해야돼!' 라고 정해주는 게 편할 때가 있다. 좀처럼 시작을 못하고 있을 땐 더 그렇고.


오늘의 괴상한 꿈



요즘 머릿속도 복잡하고 해서 그런지 감정적으로 되게 피곤한 꿈을 꿨다.


나는 내가 다니던 고등학교측의 과실로 친구들을 잃은 트라우마를 극복하지 못한 성인 남자었다. 몇년 전 학교에서는 학생들을 그들이 거부한 위험한 곳으로 수학여행을 보냈고 결국 사단이 났던 것이다. 그런데 내가 잃은 베프중엔 어쩐지 리오넬 메시가 있었다. 나는 그친구가 죽지않고 살아있었으면 누릴 영광을 사진처럼 선명하게 떠올리며 괴로워하던 중에 잠에서 깼다.


난 축구도 별로 안좋아하는데 왜 메시였을까..

2013년 7월 26일 금요일

스크랩 : C++에서 const 멤버함수

C++의 멤버함수 선언 맨 뒤에 const가 붙으면 대체 뭐지?

에 대해 지금까지 본 것중 가장 간결하고 알기쉬운 대답.

요약하자면 멤버함수 선언 뒤에 const가 붙으면, 내부적으로 this 포인터가 생성될 때 const Foo * const this; 가 되는 것과 마찬가지라는 것이다. this가 가리키는 곳을 바꿀 수도 없고 (이건 당연한 듯), this가 가리키는 값을 바꿀 수도 없다.

http://www.tipssoft.com/bulletin/board.php?bo_table=old_bbs&wr_id=136

2013년 7월 8일 월요일

3D Basic Lesson 1-2. 간단히 설명하는 레이트레이싱




몇 주 전 Scratchapixel쪽에 강좌를 한글로 번역해도 좋냐는 메일을 보냈고, 대략 다음과 같은 내용의 답변을 받았다.


스크래치는 앞으로 여러 언어로 서비스할 계획에 있지만, 현재로써는 예산의 한계때문에 그러지 못하고 있습니다. 스크래치가 다국어 서비스를 시작하기 전까지는 번역본을 블로그에 게재하셔도 좋습니다.

막상 허락은 받아 놨는데 내가 이걸 번역할 근성이 될 지... 일단은 일주일에 한 챕터씩 하는걸로. 되는데까지는 해보자.

-----


다음은 Scratchapixel 의 글 중 [3D Basic Lessons - Lesson 1 : Writing a Simple Raytracer] 중 '2. Raytracing Algorithm in a Nutshell' 을 번역한 것입니다.

원문 : http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simple-raytracer/raytracing-algorithm-in-a-nutshell/


이전 강좌 : 3D Basic Lesson 1-1. 어떻게 동작하나요?

Lesson 1-2. 간단히 설명하는 레이트레이싱 


우리가 왜 물체를 볼 수 있는지는 Ibn al-Haytham이 설명했습니다. 그의 발견에는 두 가지 흥미로운 점이 있습니다. 첫째로 우리는 빛이 없이는 아무것도 볼 수 없고, 둘재로 주위에 물체가 없으면 우리는 빛을 볼 수 없습니다. 우리가 은하계 사이를 여행한다면 그런 일이 평범하게 일어나곤 하겠지요. 만일 우리 주위에 어떠한 물질도 존재하지 않는다면 우리는 광자들이 그 공간을 돌아다니고 있다 하더라도 암흑 외에는 그 어떤것도 볼 수 없게 됩니다.

정방향 추적Forward Tracing


그림 4: 광원에서 나온 무수히 많은 광자들이 초록색 구를 때리지만, 단 하나만이 눈의 표면에 닿는다.

컴퓨터로 생성한 이미지에서 빛과 물체 사이의 상호작용을 시뮬레이션하고 싶다면 우리가 알아야 할 것이 하나 더 있습니다. 물체에 의해 반사된 광선의 수에 비해,  한정된 몇 개의 광선만이 눈의 표면에 들어온다는 것입니다. 여기 그 예가 있습니다. 한번에 한개의 광자만을 발산하는 광원이 있다고 상상해봅시다. 광원에서 나온 광자는 어떤 물체에 닿을 때까지 직선으로 나아갈 것입니다. 광자의 흡수를 고려하지 않는다면, 물체에 닿은 광자가 어떤 임의의 방향으로 반사될 것이라고 생각할 수 있습니다. 반사된 광자가 우리의 눈 표면에 도달하면 우리는 광자가 반사되었던 바로 그 지점을 "보는" 것입니다.



 독자로부터의 질문: 위에서 "빛이 비춰지는 영역의 각 점이나 물체가 광선을 모든 방향으로 방사 (반사) 한다." 고 하셨는데요, 이건 "어떤 임의의 방향" 이라는 말과는 배치되는 것 아닌가요?
 답변: 왜 빛이 모든 방향으로 반사되는지 설명하는 것은 이번 레슨의 주제와는 조금 맞지 않는 것 같습니다 (완전한 설명을 위해 빛-물체간의 상호작용에 관한 레슨을 보세요). 그래도 짧게 답변드리자면, 맞습니다. 또한 아닙니다. 물론 실제 세계에서 표면에 반사된 광자는 위상기하학과 광자가 입사되는 방향에 따라 정의된 어떤 특정한 방향으로 나아갑니다. 우리 눈에 난반사 물체의 표면은 부드럽게 보이는데, 현미경으로 보면 그 미세 구조는 매우 복잡하고, 전혀 부드럽지 않습니다. 왼쪽의 사진은  다른 배율들로 촬영한 종이의 표면입니다. 광자들은 너무나 작아서 우리 눈에  보이지 않는 이 복잡한 구조에 따라 반사됩니다. 광선의 다발이 이 난반사 물체의 표면을 비추면, 광자들이 복잡한 구조의 서로 다른 부분들에 닿아 여러 방향으로 반사되는 것입니다. 그 방향이 너무나 많기 때문에 우리가 "가능한 모든 방향" 이라고 한 것입니다. 이러한 이유로 광자들과  이러한 미시 구조와의 상호작용을 시뮬레이션하기 위해 광선들을 임의의 방향으로 균등하게 반사시켜도 실제와 크게 다르지 않게 됩니다.
가끔 거시적 크기 (눈에 보이는 정도의 크기) 에서 이러한 구조를 가지고 있는 물체는 빛을 특정한 방향으로 반사하기도 합니다. 이것은 비등방성anisotropic 반사라고 하며 빛-물체간 상호작용을 다룬 레슨에서 자세히 다뤄질 것입니다. 이러한 거시적 구조는 나비의 날개에서 볼 수 있는 무지개 빛을 만드는 원인이 되기도 합니다. 




이러한 현상을 컴퓨터 그래픽스의 관점으로 바라봅시다. 먼저, 눈을 픽셀들로 구성된 이미지 평면으로 대체할 수 있습니다. 이 경우에는 발산된 광자들이 이미지 평면 위의 픽셀들 중 하나에 닿으면서 그 지점의 밝기를 0보다 큰 값으로 증가시킵니다. CG 이미지는 이 과정을 모든 픽셀들의 밝기(또는 색상) 이 조절될 때까지 반복하는 방법으로 생성할 수 있습니다. 이 기술은 전반향 광선 추적forward ray-tracing 이라고 불리는데 그 이유는 광원에서 관측자 방향으로 앞으로 나아가며 광선을 추적하기 때문입니다.

이 방법에 어떤 문제가 있는지 보이시나요?

문제는 다음과 같습니다: 우리는 반사된 광자가 항상 눈으로 들어온다고 가정했습니다. 실제로는 광선들이 가능한 모든 방향으로 반사되기 때문에 그 중 어느 광선이 눈으로 들어올 확률은 매우 적습니다. 눈에 들어오는 하나의 광자를 찾기 위해서는 엄청난 양의 광선을 쏘아야 합니다. 실제 세상에서는 이렇게 셀 수 없이 많은 광자들이 빛의 속도로 모든 방향을 향해 여행하고 있는 것입니다.

이제 이렇게 생각하실지도 모르겠네요. "정말로 광자들을 임의의 방향으로 쏘아야 하는 건가요? 눈의 위치를 알고 있으니까 그 방향으로 광자를 쏘고, 그 중 이미지 평면을 지나는 것이 있다면 그것이 어느 픽셀을 지나는지 보면 되는 거 아닌가요?" 이것은 확실히 가능한 최적화 방법 중 하나이지만, 특정한 재질에만 쓰일 수 있습니다. 나중에 빛-물체간 상호작용에 대한 레슨에서 설명하겠지만 난반사 표면에서 방향성은 중요하지 않습니다. 이것은 난반사 표면에 도달한 광자는 부딪힌 부분의 normal (역주: 구의 중심으로부터 표면의 한 점을 향하는 벡터) 을 축으로 하는 반구의 어느 방향으로나 반사될 수 있기 때문입니다. 그런데 표면이 거울이고 난반사 속성이 없다면, 광선은 하나의 정확한 방향으로만 반사될 것입니다; 거울 반사 방향입니다 (나중에 이를 어떻게 계산하는지 배울 것입니다). 이러한 종류의 표면을 계산하기 위해, 거울 반사가 일어나는 경우에는 광자의 방향을 인위적으로 바꿔서는 안 되는 것입니다. 곧 이 방법이 완전히 만족스러운 건 아니라는 뜻이지요.

독자로부터의 질문: "눈은 점으로 된 광수용기인가요? 아니면 면적이 있는 표면으로 된 광수용기인가요? 광자를 수용하는 표면의 면적이 매우 작다 하더라도 여전히 그 영역이 점보다는 클 텐데, 그렇다면 그 표면은 단 한 개의 광선이 아니라 더 많은 광선을 수용하게 되는 것 아닌가요?"
답변: 정확합니다. 눈은 카메라의 필름이나 전하 결합 소자CCD처럼 점이 아니라 면적이 있는 표면으로 된 광수용기입니다. 이 레슨은 레이트레이싱 알고리즘을 소개하는 레슨이므로 이 주제를 지금 자세히 설명하기는 조금 어렵습니다. 카메라와 사람 눈 모두 들어온 광선들을 그 표면의 뒷부분으로 모아주는 (초점을 맞추는) 렌즈를 가지고 있습니다. 만일 렌즈의 반지름이 매우 작다면 (광수용기가 점에 가깝다면) 기술적으로 물체로부터 반사된 빛이 한 방향에서만 온다고 생각할 수 있습니다. 이것이 바늘구멍 카메라pinhole camera가 동작하는 방식입니다. 나중에 카메라에 대한 레슨에서 이 주제에 대해 더 이야기할 것입니다.

이러한 방법을 사용하여 난반사 물체만 그리기로 결정했다 하더라도 아직 한 가지 문제가 남아 있습니다. 우리는 광원으로부터 화면에 광자를 쏘는 과정을 광선 (혹은 작은 페인트 입자) 들을 물체 표면에 뿌리는 것으로 생각할 수 있는데, 충분히 촘촘하게 뿌려지지 않는다면 어떤 부분은 보이지 않는 채로 남게 될 것입니다.

검은 종이 위에 흰색 펜으로 점을 찍어 주전자를 그리려 한다고 생각해 봅시다 (각각의 점이 광자를 의미합니다). 아래 그림에서 보이듯 주전자와 충돌하는 광자들의 수가 적으면 나타나지 않은 부분이 대부분입니다. 계속 점을 찍어 나가면, 주전자가 광자들로 "거의 완전히" 덮여 물체를 쉽게 알아볼 수 있을 때까지 광자들의 밀도가 증가합니다.



하지만 1000개나 그 몇 배의 광자를 쏘더라도, 우리는 물체의 표면이 완전히 광자들로 덮일 것이라고 확신할 수 없습니다. 이것이 이 방식의 주요한 문제점입니다. 다시 말해서, 물체가 적절히 표현되기 위한 충분한 수의 광자들이 발사되었다고 판단될 때 까지 프로그램을 실행시켜야 한다는 말입니다. 이는 우리가 실행을 멈출 시점을 결정하기 위해 물체가 그려지는 모습을 관찰하고 있어야 한다는 의미입니다. 실제 제작 환경에서는 불가능한 일입니다. 게다가 레이트레이싱에서 가장 연산비용이 많이 드는 작업은 광선과 지형지물의 교차지점을 찾는 것인데, 광원으로부터 많은 수의 광자를 내보내는 것 까지는 크게 상관이 없을지라도, 그것들의 모든 교차지점을 찾는 것은 허용할 수 없을만큼 비용이 클 것입니다.

결론: 원칙적으로 정방향 광선추적forward ray-tracing (또는 광원으로부터 빛을 쏘기 때문에 광 추적light tracing이라고도 합니다) 을 사용하면 자연에서 빛이 운동하는 과정을 시뮬레이션 할 수 있습니다. 하지만, 이 방법은 지금까지 얘기한 것 처럼 효과적이거나 실용적이지 못합니다.


역방향 추적Backward Tracing

그림 5: 역방향 광선추적backward ray-tracing. 눈에서부터 구의 한 지점까지 광선을 추적하고, 다시 그 지점에서 광원까지 광선을 추적한다.

광원으로부터 광수용기 (우리의 눈 같은 것 말입니다) 를 향해 광선을 추적하는 대신에, 수용기로부터 물체를 향해 거꾸로 광선을 추적합니다. 실제로 일어나는 것과 방향이 반대이므로 역방향 광선 추적backward ray-tracing 이라고 불리거나, 눈에서부터 광선을 발사하므로  눈 추적eye tracing 이라고도 불립니다 (그림 5). 이 방법은 전방향 광선 추적forward ray-tracing의 결점에 대해 편리한 해법을 제시합니다. 시뮬레이션이 자연의 것처럼 빠르고 완벽할 수는 없으므로, 우리는 타협하여 눈에서 장면scene을 향하는 방향으로 빛을 추적해야 합니다. 만일 광선이 물체에 닿는다면 또 다른 광선 (빛 광선light ray라고 불리는) 을 발생시켜 그 부분이 얼마나 많은 빛을 받게 되는지를 알아볼 수 있습니다. 때때로 이 "빛 광선light ray"는 장면의 다른 물체로부터 가로막히게 되는데, 이것은 처음 빛이 물체에 닿은 부분이 그림자 안에 있다는 것을 의미합니다 (곧 그 부분은 광원으로부터 어떠한 빛도 받지 않는다는 뜻입니다) . 이러한 이유로 우리는 이 광선들을 빛 광선light ray 가 아니라 그림자 광선shadow ray 이라고 부를 것입니다. 컴퓨터 그래픽 분야에서는 우리가 눈에서부터 장면을 향해 쏜 첫 광선을 일차 광선primary ray, 시계 광선visibility ray, 또는 카메라 광선camera ray 이라고 부릅니다.

이 레슨에서 우리는 광선이 광원에서 발산하는 상황을 전방향 추적forward tracing, 반대로 카메라에서 광선이 발사되는 상황을 역방향 추적backwrad tracing이라고 하였습니다. 하지만 어떤 사람들은 이를 반대로 사용하기도 합니다. 카메라에서 광선을 쏘는 것이 컴퓨터 그래픽스에서 가장 일반적인 경로 추적 기술이기 때문에 이것이 전방향 추적forward tracing이라고 불리기도 합니다. 혼란을 막기 위해 조금 더 명시적인 광 추적light tracing 이나 눈 추적eye tracing 같은 용어를 사용하실 수도 있습니다. 이러한 용어는 양방향 경로 추적에서 더 자주 사용됩니다 (고급 과정을 보세요).

결론

눈에서 시작하던 광원에서 시작하던, 컴퓨터 그래픽스에서는 광선을 발사하는 이미지 생성 방식을 경로 추적path tracing 이라고 부릅니다. 광선 추적ray-tracing이라는 용어도 사용될 수 있지만 어쨌거나 경로 추적path tracing이라는 용어의 개념은 광원으로부터 카메라를 향해 (혹은 그 반대로) 경로를 추적하는 방식을 사용한다는 데 있습니다. 여기에 물리법칙을 현실적으로 적용하면, caustics*나 간접 조명indirect illumination (장면 내의 다른 물체로부터 반사된 빛을 반영하는 효과) 같은 광학 효과를 쉽게 시뮬레이션 할 수 있습니다. 다른 레슨에서 이러한 주제를 다룰 것입니다. 



*(역주) caustics : 그림을 보시면 이해가 빠르실 겁니다.
출처 위키피디아

2013년 7월 5일 금요일

칼빈 해리스 퓨쳐뮤직 인터뷰 -사용하는 신서사이저와 셋업, 그 외의 것들

문득 Calvin Harris는 무슨 신서사이저를 쓰나 궁금해져서 검색했는데 Future Music 인터뷰가 나왔다. 
유익한 내용이 매우 많다. 언제부터 작곡을 시작했고, 처음 가진 장비가 무엇이었고, 보통 어떤 식으로 사운드를 만드는지 등... 왜 이걸 진작 검색해 볼 생각을 못 했을까?


소싱sourcing의 중요성을 다시한번 느낀다.

2013년 6월 23일 일요일

맥 Finder 에서 주소 입력하여 경로 들어가기


OSX의 Finder는 윈도처럼 주소창을 제공하지 않는다. 때문에 숨겨진 파일이나 폴더를 찾을 때 가끔 난감할 때가 있는데, 아래 글에 좋은 팁이 있어 소개.

http://www.alexandre-gomes.com/?p=376

아무 파인더 창에서 CMD+shift+G 를 누르면 주소창이 뜬다. 굳!


2013년 6월 18일 화요일

3D Basic Lesson 1-1. 어떻게 동작하나요?


서강대학교 영상대학원 정문열 교수님의 그래픽스 수업을 듣는데, scratchapixel.com에 나와있는 Ray-tracer를 분석하는 숙제가 나왔다.

비영리 사이트임에도 강의가 참 알찬 것 같아 번역해보기로 했다. 얼마나 할 수 있을지는 모르겠지만..

홈페이지에서 기부도 받는 모양. 적은 금액이라도 넣어줘야겠다.

--------

다음은 Scratchapixel 의 글 중 [3D Basic Lessons - Lesson 1 : Writing a Simple Raytracer] 중 첫번째 챕터 '1. How Does It Work?' 를 번역한 것입니다.

원문 : http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simple-raytracer/how-does-it-work/



Lesson 1-1. 어떻게 동작하나요?

이 강의를 시작하기 앞서, 우리는 어떻게 3차원의 장면을 2차원으로 나타낼 수 있는지를 설명할 것입니다. 여러분이 그 과정과, 그 과정에 연관된 것들을 이해할 수 있다면, 비슷한 방법을 사용해 컴퓨터로 "인공의" 이미지를 만들 수 있습니다. 우리는 현재의 고급 CG 기법들이 이 섹션에서 다루려는 이론 위에 쌓아올려진 것이라고 생각합니다.
 이 강의의 두 번째 섹션에서 우리는 ray-tracing 알고리즘을 소개하고 그것이 어떻게 동작하는지 간략히 설명할 것입니다. 많은 사람들이 왜 우리가 다른 알고리즘들보다 ray-tracing에 집중하는지를 메일로 물어왔는데, 사실은 ray-tracing에 집중한 것이 아닙니다. 왜 우리가 ray-tracing에 초점을 맞췄을까요? 그것은 바로 이 알고리즘이 우리가 물체를 볼 수 있게 만드는 물리적 현상들을 시뮬레이션하는 가장 단순하고 직선적인 방법이기 때문입니다. 이러한 이유에서 우리는 간단한 이미지를 만드는 프로그램을 구현할 때, ray-tracing이 여러 테크닉들 중 최선의 선택이라고 생각합니다.
그럼 시작하겠습니다. 다만 먼저 scanline renderer를 구현하기 위한 모든 지식을 다루고 나서, 바로 ray-tracing으로 넘어가도록 하겠습니다.

이미지는 어떻게 생성될까요?

다음과 같이 시작하는 것이 약간 이상할 수도 있겠지만, 이미지를 생성하기 위해 먼저 필요한 것은 2차원 평면입니다(이 평면은 점이 아닌 어떤 영역이 되어야 합니다). 이를 염두에 두고 우리는 꼭지점이 우리 눈의 중심에 있고 바닥이 우리의 시선(기억하세요. 무엇을 볼 때 우리는 눈으로부터 그것을 향하는 선을 따라 보게 됩니다)을 향하는 하나의 각뿔을 상상해 볼 수 있습니다.  앞으로 이것을 절단면cut 이나 조각slice , 혹은 앞서 말한 것처럼 이미지 평면image plane 이라고 부르겠습니다. 이미지 평면은 컴퓨터 그래픽스 개념 중 하나이며, 우리는 이것을 3차원 씬을 2차원 평면에 투영하기 위해 사용할 것입니다.
당연하게 들리겠지만 방금 우리가 설명한 것은 여러 상황에서 이미지를 생성하기 위한 가장 기본적 개념입니다. 예를 들자면 사진에서 필름이 이에 해당하겠습니다.

Figure 1 (시선, 캔버스, 소실점)


원근 투영Perspective Projection

하얀 캔버스에 정육면체를 하나 그린다고 상상해봅시다. 투영 과정을 설명하는 가장 쉬운 방법은 3차원에 있는 정육면체의 각 꼭지점으로부터 눈을 잇는 선을 그리는 것입니다. 캔버스에 물체의 모양을 그려나가기 위해 각 선들이 이미지 평면과 교차하는 점들을 표시하겠습니다. 예를 들어 한 꼭지점을 c0라고 하고 연결된 세 개의 다른 꼭지점들을 차례로 c1, c2, c3라고 하겠습니다. 이 점들을 캔버스에 투영하고 나면 우리는 c0', c1', c2', c3'를 얻습니다. 만일 c0-c1가 하나의 모서리(간선)을 이룬다면, 우리는 이미지 평면 위의 c0'와 c1'를 잇습니다. 이 과정을 정육면체의 모든 꼭지점에 대해 반복하면 결국 3차원 물체를 캔버스 위에 2차원으로 표현하는 것이 됩니다. 자, 여러분은 금방 원근 투영을 통해 이미지를 만들었습니다.
Figure 2: 캔버스의 앞면에 4개의 꼭지점을 투영


이 과정을 장면 안의 모든 물체들에 대해 반복하면, 우리는 특정 소실점으로부터 나타나는 이미지를 얻게 됩니다. 화가들은 이러한 원근 투영의 법칙을 15세기 초가 되서야 이해하기 시작했습니다.

빛과 색깔

3차원 물체의 윤곽선을 2차원 평면에 그리는 법을 알았으니, 그림을 완성하기 위해 색을 입혀 봅시다.

방금 우리가 배운 것을 정리해봅시다: 우리는 3차원 씬scene 에서 두 단계 과정을 거쳐 이미지를 만들 수 있습니다. 첫째 단계는 3차원 물체의 모양을 이미지 평면에 투영하는 것입니다. 이 단계는 물체의 각 부분과 눈을 잇는 선들을 그리는 것이 전부였습니다. 이러한 투영 선들과 이미지 평면이 만나는 지점들을 이으면 외곽선이 만들어졌습니다. 눈치채셨겠지만, 이것이 바로 기하학적 프로세스geometric process 입니다. 두 번째 단계는 바로 그림의 뼈대에 색을 입히는 것입니다.

물체의 색과 밝기는 대부분 빛과 물질material 이 상호작용한 결과입니다. 빛은 광자(전자기 입자)로 이루어져 있습니다. 다른 말로 하면, 빛은 전기적 성분과 자기적 성분을 가지고 있습니다. 이들은 에너지를 전달하고, 직선으로 나아갈 때 음파처럼 진동합니다. 광자들은 다양한 광원에서 생성됩니다. 태양이 광원의 대표적인 예입니다. 광자들의 무리가 물체에 부딪히면 세 가지 현상이 발생합니다: 흡수absorption 되거나, 반사reflection 되거나, 투과transmission 됩니다(역주 : http://www.physicsclassroom.com/Class/light/u12l2c.cfm 여기 그 이유가 설명되어 있습니다). 반사되거나 흡수되거나 투과되는 광자의 양은 물질에 따라 달라지고, 일반적으로 물체가 어떻게 보이는지를 좌우합니다. 하지만 모든 물질들에겐 공통점이 있는데, 물질에 들어오는 광자의 수와, 반사되거나 흡수되거나 투과되는 광자의 수의 합이 항상 같다는 것입니다. 100개의 광자가 물체 위의 어떤 점을 비추면 60개는 흡수되고 40개는 반사되거나 하는 식입니다. 총합은 항상 100입니다. 70개의 광자가 흡수되고 60개는 반사되거나, 20개는 흡수되고 50개는 반사되거나 하는 일은 절대 일어나지 않습니다. 반사, 흡수, 투과되는 광자의 총합이 100이어야만 하기 때문입니다.

보통 과학에서는 물질을 세 종류로 나눕니다. 금속이나 플라스틱처럼 빛을 반사하고 흡수하는 물질이 있습니다. 또한 유리처럼 빛을 반사하고 투과하는 물질도 있습니다. 다른 한 종류는 반투명한 물질입니다.

모든 물질은 이 세 분류 중 하나에 속합니다(자체발광을 하는 물질self-illuminating material 같은 예외도 조금 있습니다). 그렇지 않은 것은 물체가 세 물질의 혼합이거나, 여러 층으로 되어 있는 경우 뿐입니다. 예를 들어 겉에 니스칠을 한 확산체diffuse object 가 있을 수 있습니다(이는 여러 플라스틱처럼 물질이 빛남과 동시에 분산되는 것처럼 보이게 합니다).




지금은 첫 번째 분류에 속하는 물질만 생각하기로 합시다.  문제를 단순하게 하기 위해서 빛의 흡수 과정이 물체의 색에 좌우된다고 가정하겠습니다. 흰 빛이 "빨간 광자", "파란 광자", "초록 광자"로 이루어져 있다고 칩시다. 이 빛이 빨간 물체를 비추면 흡수 과정이 "초록 광자"와 "파란 광자"를 걸러냅니다(혹은 흡수합니다). 이 물체는 "빨간 광자"를 흡수하지 않기 때문에, 이들이 반사됩니다. 이것이 물체가 빨간색으로 보이는 이유입니다. 우리가 물체를 보는 것은 "빨간 광자"의 일부가 물체에 의해 반사되어 우리 눈으로 들어오기 때문입니다. 빛이 비춰진 영역의 모든 점들은 광선을 모든 방향으로 방사radiate 또는 반사reflect 합니다. 각 지점에서 나온 여러 광선 중 하나가 눈에 직각으로 들어올 때 물체가 보이게 됩니다. 우리의 눈은 광수용기photoreceptors 로 이루어져 있어 빛을 신경 신호neural signal 로 변환합니다. 그러면 우리의 뇌는  이러한 신호들을 음영shade 과 색조hue 를 해석하는 데 사용할 수 있게 됩니다(이 과정이 어떻게 이루어지는지는 정확히 밝혀지지 않았습니다). 이것은 나중에 색에 관한 강의에서 더 자세하게 다뤄질 현상들을 설명하는 매우 단순한 접근입니다.

Figure 3: al-Haytham의 모델

원근 투영처럼, 사람들은 빛을 이해하는 데 시간이 좀 걸렸습니다. 그리스인들은 눈에서 나오는 광선 때문에 물체가 보인다고 생각했습니다. 처음으로 우리가 태양광선 때문에 물체를 본다고 생각한 사람은 아랍인 과학자 Ibn al-Haytham (c. 965-1039)였습니다.  직선으로 운동하는 작은 입자들의 흐름이 물체에서 반사되고, 이미지를 이룬다는 것이 그의 이론이었습니다. 자, 이제 컴퓨터로 어떻게 세상을 시뮬레이션 할 수 있는지 알아봅시다!



다음 강좌 : 3D Basic Lesson 1-2. 간단히 설명하는 레이트레이싱


2013년 5월 16일 목요일

10년간 쓴 기타를 정리하며


내일이 기타 거래하기로 한 날이라 간만에 꺼내서 열심히 닦고 기름치다가 기분이 묘해졌다.
Gibson Gothic Explorer. 마호가니목 바디에 에보니 지판. 더럽게 무겁고, 피치도 잘 나가는 기타다. 넥감은 무난하지만 뛰어나다고도 못하겠다. 작년에 SG를 산 이후로는 거의 쓸 일도 없었다.

나도 이 기타를 중고로 업어왔다. 1999년 내쉬빌에서 생산된 이놈을 샀을 땐 2004년, 즉 고2때였다. 메탈리카 제임스 헷필드의 익스플로러가 멋있어 보여서 중고매물만 기다리다가 마침내 올라온 걸 발견했는데 모은 돈에서 20만원이 부족했다. 남이 채갈까봐 마음은 급하지 당장 돈은 없지 해서 친구 10명에게 2만원씩 꾸어 기말고사 전날 기타를 사러 갔다. 나무로 된 하드케이스와 기타는 도합 8kg이 넘었지만 케이스 겉에 쓰인 "Gibson USA" 를 본 순간 들뜬 나는 비오던 날 한 손엔 우산을 들고 한 손엔 하드케이스에 든 기타를 받아들고 여기저기 돌아다니다 집에 왔다. 당연하다는 듯이 몸살이 났고, 기말고사는 망했다. 그래도 좋았다. 헤드 뒷면에 박힌 깁슨 아저씨의 흑백 초상화나, 12프렛에 딱 하나 있는 인레이, 무광 올 블랙의 간지, 째지는 깁슨 픽업 소리, 초콜렛 같은 냄새, 무엇 하나 맘에 들지 않는 게 없었다. 그땐 그랬다.

요 몇년 쳐다보지도 않다가, 막상 떠나 보내려니 아쉽다. 정성들여 닦고 줄을 새걸로 갈고 나니 이렇게 좋은 기타였던가 싶다. 만남이 있으면 헤어짐이 있는 법. 그래도 제값 받고 보내는 것 같아 다행이다. 영국 갔을 때 사온 미니어처라도 간직해야겠다.




2013년 5월 7일 화요일

Audio Clipping 과 Limiter, Compressor


얼마전부터 씨스타19의 '있다 없으니까'를 덥스텝 버전으로 만들면 어떨까 생각하다가 며칠 전부터 착수하여 이제는 거진 모양이 잡혔다. 제일 큰 문제였던 괴물 트림하는 소리 (growl bass) 와 덥스텝(브로스텝)의 그 찰진 스네어 소리는 유튜브 성님들의 강좌로 어찌어찌 해결.

이전에는 곡을 찍으면서 어떻게든 Audio Clip이 안 뜨게 하려고 신경을 썼었는데, 유튭 강좌에서 어떤 사람이 growl bass에다 그냥 맘편하게 리미터 걸어버리는거 보고 나도 여기저기 리미터 걸고 컴프도 막 걸고 했더니 사운드가 훨씬 좋아졌다(힘있어졌다). 지나친 음압 경쟁을 자제하자는 목소리들이 있다는데 나는 어차피 그 경쟁에도 못 끼는 사람이라 그냥 고민없이 꾹꾹 눌러주기로 했다. 지금 귀로는 소리가 망가지고 하는건 잘 모르겠으니까, 일단 막 눌러주다가 나중에 신경쓰자. 지금은 '그럴싸한' 사운드를 만드는 게 급선무다.


2013년 4월 26일 금요일

13.04.25 최진석 노자 도덕경 강의 뒷부분



요즘 우리학교 철학과 최진석 교수님께서 매주 수,목 <EBS 인문학 특강>에서 노자에 대한 강의를 하시는데 좋은 내용이 많다.

오늘 다룬 도덕경 내용 중 인상깊었던 건


세계는 대립면의 긴장으로 이루어져 있다.
내 키는 손톱에 비하면 크다.
내 키는 최홍만에 비하면 작다.
내 키는 어느 사실에서도 손님에 지나지 않는 것이다.

광신은 좁은 믿음에서 온다.

이 믿음이 진실이 아닐 수 있다고 생각하는 데서 오는 긴장이 오히려 폭발력을 만들어낸다.

말이 많으면 쉽게 궁색해진다. -> 지식이 많으면 많을수록 쉽게 한계에 부딪힌다.

인생은 자기 표현의 과정이다. 표현은 선택이 아니다.
우리가 하는 모든 것은 결국 표현하기 위해서이다.

배우는 것만이 습관이 되면 표현하는 것이 어려울 수 있다.
배울때도 항상 이것이 나의 표현을 위한 하나의 조그만 수단이다 라고 생각해야 한다.

인생은 자기를 표현하는 과정이다.

남의 말 쫓아다니면서 듣다가, 자기를 표현하고 있다고 착각할 수 있다.

배움은 어느 순간 끊어버려야 한다. 자기를 표현해야 한다.

공부를 하면 할수록 눈에서는 야수의 눈빛이 사라진다.
남에게 들은 말이 많아지면 많아질수록, 그것을 진리로 받아들일수록, 야수의 눈빛이 사라진다.
항상 긴장을 가지고 있어야 한다.
공부는 항상 자신을 표현하기 위한 수단이며, 행복하게 살기 위한 수단이라는 것을 잊어선 안된다.

노자 : 자율 (자신을 조율함)
자율적 주체는 무엇을 배울 때 그것을 자기표현의 수단으로 받아들인다.

"내가 태어나 죽을때, 짐승의 눈빛으로 죽으리라"


2013년 4월 24일 수요일

Designated initializer


Designated initializer는 Objective C 를 공부하다가 나오는 개념인데, 처음엔 아예 새로운 문법이나 기능인 줄 알고 조금 헷갈렸다가, 애플 개발자 문서를 찬찬히 읽어 보니 상속이라는 특성 덕에 등장한 개념일 뿐이었다.


그 뜻을 간략히 말하자면, 한 클래스가 여러 개의 initialize method를 가지고 있을 때, 무조건 실행되어야 하는 지정된 initializer 이다. 만일 목적에 따라 initializer가 여러 개 필요하면, 하나의 initializer 메소드가 해당 클래스의 변수를 전부 초기화할 수 있도록 구현한 후, 다른 initializer들은 이 initializer를 사용해서 구현하면 된다. 이 때 해당 클래스의 변수를 완전히 초기화할 수 있는 그 하나의 initializer를 부르는 이름이 바로 designated initializer이다. 뭐 이를 위한 문법이나 코드가 따로 있고 그런 게 아니다.


Designated initializer 에는 중요한 특징이 하나 있는데, 바로 super 클래스의 init을 호출하는 코드가 반드시 포함되어 있어야 한다는 것이다. 그도 그럴 것이, 어느 클래스 B가 클래스 A를 상속하고 있다고 하면, 클래스 B를 초기화하려면 클래스 B 안에서 선언된 변수 뿐 아니라 클래스 A에서 선언된 변수들도 초기화해줘야 하기 때문이다.



-(id)init
    {
         if (self = [super init])
         { // Initialization code here }
         return self;
     }


이런 코드가 반드시 들어있어야 한다는 말이다.












요렇게 차례차례 상위 클래스의 designated initializer를 호출하여 모든 변수를 초기화하게 된다. (출처 : developer.apple.com )



참고 : http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html






2013년 4월 22일 월요일

Louis CK 의 새로운 쇼 - Oh My God


'루이Louie' 의 다음 시즌 소식이 없어 검색을 해 봤는데, 애통하게도 2014년 이후에나 나올 예정이라고 한다. 대신 HBO Special으로 'Oh My God' 이라는 새로운 쇼가 시작한 모양.

형식은 그냥 루이가 쭉 해온 스탠드업 코미디인 것 같다. 근데 프로모션 비디오가 너무 웃겨서 한글 자막을 만들어 봤음.

진짜 너무도 루이스럽다


루이 다음 시즌 나오기 전까진 이거라도 보면서 버텨야겠다.


2013년 4월 19일 금요일

수학, 물리학, 철학

 오늘 학교에서 수업을 듣는데 옆 자리 앉은 경영학과 친구가 이런 말을 했다.

"난 요즘 다른 과 사람들이 부러워. 경영학과는 뭐하나 딱 자기가 할줄 아는 게 없는 것 같아."

 난 또 눈치없이 거기다 대고 맞장구를 쳐 버렸다. "경영학과가 원래 그렇지." 좀 긍정적인 면도 얘기해 주고 그랬으면 좋았을 것을.

 하지만 내가 몸담은 컴퓨터공학도 마찬가지다. 코딩을 좀 배우긴 했지만 이는 결국 하나의 도구에 지나지 않고, 실제로 다른 학과 사람들도 필요에 따라 곧잘 배워서 한다. 컴퓨터공학 학생들은 연장 다루는 법은 배우는 데, 이걸 어디다 써야 하는지 그 알맹이는 배우지 않는 셈이다. 물론 알고리즘의 연구는 코딩하는 기술과는 다른 이야기이고 그간 많은 발전도 이루어졌지만, 크게 보자면(정말 크게 보면) 결국은 튜링 머신을 어떻게 사용할 것인가에 관한 것이고, 수학의 subset중 하나인 것이다.

 그래서 요즘은 물리학이나 수학, 철학이 진짜배기 학문이라는 생각이 든다. 이들은 각기 다른 방법론들을 들고서 세상의 이치를 탐구하고자 한다. 위 학문 중 하나를 학부 전공한 후에 응용 분야로 갔으면 더 좋았을 것 같다. 물론 1, 2학년때 컴퓨터공학도가 대체 수학을 왜 배워야 하냐면서 툴툴대던 내가 할 소린 아니지만.

돌아오다

Blogger 블로그에서 글 카테고리 생성이 안 되길래 버리고 다른 블로그 서비스를 알아보려 했는데, 다음과 네이버는 지저분해서 맘에 안 들고 어떻게 하나 고민하다가 워드프레스를 써야겠다는 생각을 했다.

그러나 이전에 테터툴즈를 설치해 사용하다가

  • 수많은 스팸 봇들과 싸웠지만 이길 수 없었음. 어떤 분은 아예 영어 댓글이 안 써지도록 설정해 놓기도.
  • 호스팅 기간 연장을 안 하는 바람에 자료를 다 날림.
등의 문제가 있었던 게 생각나 그만뒀다. 호스팅 받는 것도 귀찮고.

결국 맘에 드는 서비스가 생길 때까진 그냥 blogger를 사용하는 걸로.
디자인은 깔끔하니 좋다.

the speed-up loop


The Speed-Up Loop
http://thedailywtf.com/Articles/The-Speedup-Loop.aspx

진짜진짜 어쩌다 발견한 글인데 재미있다.

요컨데 글쓴이가 어떤 회사에 취직했는데, 회사 소스코드에


for(i=0;i<1000000;i++) {;}


이런 코드가 여러 개 있었다고.

그 이유는?