2011년 1월 26일 수요일

윈도우 7에서 VirtualBox 설치/제거가 오래 걸릴 경우

VirtualBox 3.3과 4.0을 윈도우즈 7에 설치할 때 다음과 같은 문제점들을 겪었었다. 설치/제거 시간이 열라 오래 걸려서 취소하려고 했으나 취소조차 안되는 상태... 작업관리자(task manager)를 통해서도 프로세스를 강제종료도 안되고.... 결국엔 컴터 전원을 강제로 껏다 켜야만 회복되는 상태... 우어 -_-

좀 조사해본 결과 VirtualBox가 설치/제거시에 네트워크 연결을 가지고 좀 노는 것으로 판명... 뭔짓을 하는지는 정확히 알아내지 못했지만 이렇게 매우 쉽게 해결했다.

  1. 컴퓨터에서 인터넷 선을 뽑아버린다.
  2. VirtualBox를 설치(또는 제거)한다.
  3. 인터넷 선을 다시 꼽아준다.
끝 -_-;

2011년 1월 24일 월요일

PHP의 정수형에 대한 불만

몇년전에 PHP를 상당히 많이 썼었다. 물론 게임 렌더링 엔진의 코어에... 초당 120프레임까지 뽑아내려면 PHP가 최고다..... 는 농담이고.... ^^ 그냥 이런 저런 웹 사이트를 만드는데 많이 사용했었다.

최근에 PHP를 다시 접할 일이 있었다. 32비트 정수 값으로 표현하기엔 너무 큰 랜덤 수를 만들어 이것을 MySQL 데이터베이스에 저장하려고 했는데.. 아뿔사....

MySQL은 64비트 정수형인 BIGINT 변수형을 지원한다... 따라서 별 문제 없음... 진짜 문제는 PHP... PHP의 int는 32비트가 될 수도 있고, 64비트가 될수도 있다... 꺼억... 꼭 C같군 -_-; PHP가 설치된 컴퓨터의 비트수에 따라 달라진단다.. (또 64비트 정수를 사용하려면 64비트 PHP 버전을 따로 설치해야 할거라고 추측만 하고 있음)

이런 어이없는 짓은 C에서는 용납이 가능하다. 그냥 32비트/64비트 용으로 따로 실행파일을 만들어 배포하면 되니까.... 하지만 PHP는 웹기반이라서 이건 정말 개소리다 -_-;;; 이런 상황을 고려해보자.. PHP에서 64비트 정수를 사용하는 웹사이트를 만들어서 64비트 웹 서버에 호스팅했다고 치자.. 근데 이 호스팅 서비스가 맘에 안들어서 다른 웹호스팅 서비스로 옮기기로 맘을 먹었는데 새 호스팅 회사가 32비트 PHP를 쓴다면?..... 한마디로 왕짜증 -_-; 코드 전부다 리팩터하거나... 아예 64비트 정수를 지원하는 클래스를 스스로 짜는게 훨 낫다는 결론..... 써글 -_-?

PHP에서 64비트 정수를 사용하는 것의 또다른 문제 중 하나는 Random() 함수이다. 랜던 시드(seed)의 인자와 Random() 함수의 반환값이 모두 int이다. 따라서 64비트 정수 클래스를 커스텀하게 만든다면 이 함수를 그대로 쓸 수 있는 방법이 없다. 그 대신 이 64비트 클래스의 값을 2개의 32비트 정수값으로 바꿔서 이리저리 짜맞춰야 한다는 게지... -_-

뭐 PHP에서 정수대신에 부동소수점(floating-point) 수를 쓰면 32비트가 넘는 정수의 값을 표현할 수 있다... 하지만 정밀도(precision)의 문제가 또 있다는 게 문제.. 역시 내 입맛엔 별로 맞지 않음... -_-

오해는 하지 마시길... 난 사실 PHP를 매우 선호한다. 웹프로그래밍을 할 때 다른 언어 다 제쳐두고 언제나 찾게되는 언어가 PHP니까.. 하지만 MySQL처럼 PHP도 BIGINT형을 자체적으로 지원해야 한다고 생각한다...

2011년 1월 21일 금요일

ubuntu 10.10 커맨드 라인으로 곧바로 부팅하는 법



주말동안 드디어 유분투 10.10을 깔았다. 태어나서 처음으로 리눅스를 깔게 된 주 이유는 웹프로그래밍 할 때 쓸 테스트 서버가 필요해서... 서버로 쓸 놈이라 GUI가 필요없는지라 서버 에디션을 깔았고, 그 위에 별도로 Ubuntu 데스크탑을 깔았는데.. .제길 -_-;  시작할 때마다 GUI 로그인 화면(GUI)이 떴다. 써글... -_-

GDM을 끄려고 인터넷을 뒤지고 뒤져도... 모두 이전 버전에서만 작동하는 방법이거나 서버를 안깔고 곧바로 데스크탑을 깔아야 작동하는 방법인듯... 결국 리눅스/유닉스 대가인 직장동료 데니엘 박사님의 도움을 받아 이걸 제대로 하는 법을 알아냈다... 모르는 사람들을 위해 공유함...

  1. /etc/init/gdm.conf 파일을 에디트한다. ("sudo vi /etc/init/gdm.conf" 를 쓰면 됨)
  2. 다음처럼 되어있는 라인을 찾아.

    start on ( filesystem

    아래와 같이 바꾼다.

    start on (runlevel [5]
              filesystem
  3. 그리고 다음의 라인을

    stop on runlevel [016]

    이렇게 바꾼다.

    stop on runlevel [01236]

이러면 모든 것이 유닉스와 동일한 실행레벨(run level)이 된단다. 구글 검색으로 찾은 다른 웹사이트에서는 "stop on runlevel [0126]"만 바꿔도 된다고 했으니 부팅할때 컴퓨터가 멈추더라 -_-;

어쨌든 이건 내 컴에서 잘도는 방법.. 다른 사람도 그러리라 생각...

2011년 1월 16일 일요일

이번 주의 바보짓 - Multiply 혼합 "연산"

I absolutely love my darn stupidity. :)

이번 주에 회사에서 multiply 혼합 연산을 사용해야할 일이 생겼다. UI 아티스트가 메쉬별로 글로우(glow) 효과를 입히고 싶어했고, 게임 스크린샷을 찍어다가 그 위에 포토샵 레이어를 입혀서 '이렇게 하자.'라고 보여줬는데...... 불행히도 그 PSD 파일을 이미 지워버렸단다 -_-;

그래서 additive 블렌드 레이어를 썼다는 그 아티스트의 말만 믿고...  똑같은 메쉬를 두 번 그려서 additive 혼합 효과를 내봤는데 (처음 그릴 땐 일반적으로.. 두번째 그릴땐 그냥 단색만 출력하면서 blend op을 additive로 했음) 결과가 다르다.... 그럴수밖에....포토샵에는 additive란 이름의 블렌드 레이어조차 없거든 -_-;;;;; 왜 이걸 까먹었었을까.. 멍청한 나.....

좀더 이미지를 자세히 관찰한 결과 Multiply 블렌드 레이어를 쓴 거 같았다. 그래서 '그럼 간단히 D3D에서 혼합연산을 multiply로 바꿔주면 되겠군.' 이라 생각했는데.. 어라 왠 걸? D3DBLENDOP_MULTIPLY란 놈이 없더군... '이상하다 분명히 예전에 본적이 있는거 같은데.. PC가 아니라 Xbox360하고 PS3였나?' 하고 포기할려는 찰라.... 블렌드옵이 아니라 소스블렌드 알파에 dest color를 사용해주면 그런 효과를 낼 수 있다고 조언해주는 울 팀장님... 쿨럭 -_-; 초보실수... 쿨럭쿨럭 -_-;;;; 이렇게 알고 있던 것도 아주 까맣게 까먹는 나를 보면....... 으음... 역시 멍청한 나...

인생은 그런 거지.. 룰루랄라~ ^^ (절대 배우지 않는 자세... 보너스 + 2만점 -_-)

참고로 아래는 포토샵에서 지원하는 레이어 블렌드 모드:

2011년 1월 10일 월요일

내가 생각하는 조명벡터의 방향

빛의 벡터를 그리는 방법에는 사실 두가지가 있다.
  • 정점를 밑둥으로 하여 빛의 위치를 가리키는 벡터
  • 빛의 위치를 밑둥으로 하여 정점을 가리키는 벡터
난 개인적으로 빛의 위치를 밑둥으로 두는 걸 선호하는데 그게 상식적으로 맞아서 일뿐 특별한 이유는 없다. 정점을 밑둥으로 하면 난반사광(diffuse lighting) 계산을 할 때 부호를 뒤집어 줄 필요가 없으니 속도가 빨라질 수도 있다는 주장도 있는데.. 쉐이더에선 아마 거의 차이가 없을거고.. CPU에서 차이가 있더라도 거의 미미한 수준... 이런 자잘한 최적화 때문에 상식을 깨는걸 별로 안좋아하기에 난 여전히 빛의 위치를 밑둥으로 밀고 나갈 예정..

이걸 그림으로 표현하면(벡터 반사를 보여주긴 하지만) 대충 이런 그림...(출처 위키피디아)




2011년 1월 3일 월요일

갈렉산드리아 도와주실 분들을 찾습니다.

2005년인가에 다른 게임개발자 한 분 하고 갈렉산드리아라는 웹사이트를 시작했었습니다. 개발자에게 필요한 해외문서들을 무료로 번역해서 웹페이지에 올려놓는 게 목표였지요. 그 뒤에 다른 참여자분들의 도움도 많이 받았구요. OpenGL 강좌로 유명했던 NeHe 튜토리얼의 공식 한국어 번역 웹사이트로 허락도 받았고, GameDev.net 의 아티클도 모두 번역할 수 있는 허가를 받았더랬죠.

하지만 다들 많이 바빠지셔서 한동안 좀 시들했었습니다. 그동안 호스팅 지원받던 것도 끊겨서 구글에서 제공하는 무료 서비스로 이동도 했고요. (그 덕에 글 포맷이 다 깨져버렸다는...) 얼마전부터 이 사이트에 신경좀 써보려고 했는데 저도 이런 저런 다른 일에 바빠서 딱히 진척이 없군요. 그래서 뜻을 같이 하시는 분들의 참여를 좀 받고 싶습니다. 최소한 OpenGL강좌로도 끝냈으면 좋겠어요. 제가 생각하는 3가지 분류는 다음과 같습니다.


번역해주실 수 있는 분

  • 영한 초벌번역 담당
  • 영어를 끝내주가 잘 하지 않으셔도 됩니다.
편집해주실 수 있는 분
  • 현재 깨져있는 모든 문서의 포맷(코드블럭, 헤딩 1 2 3 등)을 손봐주실 분
  • 현재 쓰는 구글 서비스가 사실 MS WORD와 거의 비슷해서 그리 어려운 건 없습니다.
감수해주실 수 있는 분
  • 초벌번역이 끝난 문서를 다시 한번 영문과 대조해서 읽어주시면서 잘못된 것은 고쳐주실 수 있는 분
  • 영어실력이 아무래도 좀 좋으셔야겠죠. ^^
  • 이 자리는 딱히 지원자가 없으면 제가 처리합니다 -_-;
기타 글 기고해주실 분
  • 본인이 기존에 써놓으셨던 글이나 블로그에 올렸던 글들을 기고해주실 분도 찾습니다.
  • 새로 쓰시는 글도 상관없습니다. 강좌라던가 팁이라던가 도움이 되는 자료면 일단 다 받겠습니다.

구글계정만 있으시면 참여하실 수 있습니다. 참여하시고자 하시는 분들은 contrib@galexandria.com 로 이메일을 주시거나 갈렉산드리아 토론장에 글을 남겨주세요.