VMWare Fusion pre-order

beta4에 이어 rc1을 사용하고 있었는데 8월 6일 정식 발매 된다는 소식을 듣고 그동안 미뤄오던 pre-order($39.99)를 해버렸다. 정식 발매 이후에 구입하게 되면 $79.99를 지불해야 한다.

윈도우를 사용할 수 밖에 없는 현실이 슬프지만 어쩔 수 없는 노릇. 플랫폼에 independent한 인터넷 환경은 얼마나 시간이 지나야 갖춰질까? 당장 이 글을 쓰고 있는 테터툴 마저도 사파리에서 html 모드로 글을 쓸 수 밖에 없으니 안타까움을 금할 길이 없다.

아마도 이번 pre-order가 최초의 정품 소프트웨어 구입이 될 것 같다. $39.99 정도의 가격이면 충분히 감당할 수 있을 정도. 오히려 맥용 정품 소프트웨어가 윈도우용 소프트웨어보다 대체로 저렴한 것 같다.

다음 구입할 맥용 소프트웨어는 차기 맥OS인 레오파드! 10월이 기다려지는구나. 즐거운 컴퓨팅을 기대하며 그 날을 기다린다.

애매함을 용납하지 말자

지금 진행중인 프로젝트는 gcc의 back-end를 사용하기 때문에 빌드할 때 gcc 소스코드와 함께 컴파일 된다.

컴파일 할 때 make를 수행하면 늘 cygwin에서 컴파일하는 동희형과 달리 mac osx에서 하는 나는 늘 한번에 컴파일이 안되고 에러가 발생하곤 했다. 한번 더 수행하면 에러 없이 make가 완료되었다.

난 쉽게 생각했다.

“뭔가 깔끔하진 않아도 한번 더 수행하면 되니까 괜찮겠지”
“플랫폼이 달라서 그렇겠지”

철주형 아들 서호의 돌잔치에 다녀와서 사택에서 낮잠 한시간 푹 잔후 다시 회사에 나와 본격적인 테스트를 하려고 하는데 그 동안 무시했던 이 에러가 나를 괴롭히고 있는 원인이였음을 깨닫게 되고는 또 무릎을 치게 되었다.

오호 통제라!

나는 또 한번 경험에서 교훈을 얻게 되었다. 오직 0과 1로 데이터를 표현하는 정교한 컴퓨터를 다루는 입장에서 애매한 태도를 지양해야 한다는 것을. 남겨둔 애매함이 언젠가 나를 곤란하게 한다는 것을. 개발자에게 경험은 그 무엇보다 소중한 자산인 것 같다. 경험이 농익을 때까지 맨땅에 해딩을 마다하지 말자.

하지만 연애에서의 애매함은 피할 수 없는 숙명인 것 같다. 확실한 것을 좋아하는 어쩔 수 없는 공돌이인 내가 늘 작업에 실패하는 이유는 애매함을 견디지 못하는 나약한 혹은 소심한(?) 심리상태에 있는 것 같다. 남녀사이의 애매함을 즐기는 작업의 대가들이 부러울 따름이다.

기묘한 typedef의 활용

gmp (gnu multiprecision) 라이브러리를 쓸 일이 있어서 메뉴얼과 헤더파일을 보던 중 재밌는 코드를 발견!

typedef struct
{
  int _mp_alloc;        /* Number of *limbs* allocated and pointed
                   to by the _mp_d field.  */
  int _mp_size;         /* abs(_mp_size) is the number of limbs the
                   last field points to.  If _mp_size is
                   negative this is a negative number.  */
  mp_limb_t *_mp_d;     /* Pointer to the limbs.  */
} __mpz_struct;

typedef __mpz_struct mpz_t[1];

이 부분에 대해서 메뉴얼은 다음과 같이 설명하고 있다.

For interest, the GMP types mpz_t etc are implemented as one-element arrays of certain structures. This is why declaring a variable creates an object with the fields GMP needs, but then using it as a parameter passes a pointer to the object. Note that the actual fields in each mpz_t etc are for internal use only and should not be accessed directly by code that expects to be compatible with future GMP releases.

이 정의를 활용하는 코드를 보면 다음과 같다.

     void
     foo (mpz_t result, const mpz_t param, unsigned long n)
     {
       unsigned long  i;
       mpz_mul_ui (result, param, n);
       for (i = 1; i < n; i++)
         mpz_add_ui (result, result, i*7);
     }
    
     int
     main (void)
     {
       mpz_t  r, n;
       mpz_init (r);
       mpz_init_set_str (n, “123456”, 0);
       foo (r, n, 20L);
       gmp_printf (“%Zd\n”, r);
       return 0;
     }

이렇게 선언해 놓고 참조하면 자연스럽게 함수 호출할 때 call-by-reference가 가능하다. c언어의 묘미란 이런게 아닐까?

Virtue Desktop

맥으로의 스위칭으로 인해 갖게 되는 여러가지 장점중에 나에게 가장 유용한 것은 Virtue Desktop을 사용해 다수의 데스크탑 활용하는 것이다.  

13.3인치 맥북에 22인치 와이드 LCD모니터를 함께 사용하고 있다. 물리적으로 2개의 데스크탑을 갖춘 셈이다. 여기에 Virtue Desktop을 활용하면 몇 배수의 데스크 탑을 활용할 수 있다. 갯수는 계속해서 늘릴 수 있지만 화면 전환의 편이성을 고려하여 논리적으로 3개의 데스크 탑을 할당해서 사용하고 있다.

확장 모니터까지 합하면 총 6개의 데스크탑을 사용하는 셈인데 아침에 출근해서 세팅할때 각각의 데스크 탑에 필요한 유틸을 모두 펼쳐놓고 하루를 시작한다. 이후에 데스크탑 내의 어플리케이션의 레이아웃은 건드릴 필요가 없다. 사용하고자 하는 어플리케이션을 Dock에서 클릭하면 자동으로 해당 데스크탑으로 넘어가며 특정 어플리케이션을 특정 데스크탑에 할당해 두었기 때문에 최초에 어플리케이션을 수행할 때도 자동으로 지정된 데스크탑으로 이동한다.

총 3개의 데스크탑은 나름 각각의 테마가 있다.

첫번째 데스크탑 : 일
두번째 데스크탑 : 계획, 기록
세번째 데스크탑 : 놀이

사용자 삽입 이미지
첫번째 데스크탑의 맥북 모니터 - Neo Office
사용자 삽입 이미지
첫번째 데스크탑의 확장 모니터 - Terminal
사용자 삽입 이미지
두번째 데스크탑의 맥북 모니터 - Jourlner
사용자 삽입 이미지
두번째 데스크탑의 확장 모니터 - iCal
사용자 삽입 이미지
세번째 데스크탑의 맥북 모니터 - Firefox
사용자 삽입 이미지
세번째 데스크탑의 확장 모니터 - Itunes, Mail, iChat, MSN Messenger

차기 mac osx인 레오파드에서는 이러한 기능을 기본 탑재(스페이스)하고 있다고 한다. 맥에 발을 들여 놓은지 얼마되지 않았는데도 차기 운영체제를 기다리고 있다니 단단히 빠졌나보다. 이렇게 좋은 것을 왜 진작 몰랐을까?