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]"만 바꿔도 된다고 했으니 부팅할때 컴퓨터가 멈추더라 -_-;

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