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

MAC OSX로의 스위칭

사용자 삽입 이미지
맥북이 도착한 후 맥을 사용한 것이 오늘로 3일째다. 처음 맥북을 받았을 때의 첫 인상은 이쁘다! 그리고 보기보다 무겁다! 오후 1시쯤 맥북을 받아서 하루 종일 일 안하고 세팅한다고 시간을 보냈다. 듣던데로 흐릿흐릿한 한글폰트에 좌절하기도 하였으나 쓰면 쓸 수록 매력이 느껴지는 운영체제의 인터페이스와 어플리케이션에 대만족하고 있다. 대충 구조를 파악한 지금에 와서 판단해 보면 윈도우보다 훨씬 간결하고 쓰기 편하다. (우리나라 웹환경을 빼고)

가장 큰 매력은 유닉스를 기반으로 하기 때문에 터미널이 있다는 것! Xcode를 설치해서 GNU 개발도구를 모두 갖췄고 Fink를 이용해서 기타 필요한 라이브러리나 도구들을 debian package를 사용해 쉽게 설치할 수 있었다.  (현재 gcc 4.1.2가 완벽하게 컴파일 된다!) 회사에서 하는 모든 작업을 이제 맥북에서 하고 있다. 22인치 모니터를 연결해서 흑백 사진을 배경으로 걸어 놓고 배경을 약간 투명하게 한 터미널을 3개 나란히 띄워놓고 작업하고 있다. 15분 마다 배경화면이 변경되게 해놓아 심심하지 않다.

맥은 멀티미디어에 강하다! 윈도우에서 무척이나 버벅이던 iTunes가 winamp처럼 가볍게 돌아간다. 맥북에 들어 있는 리모콘으로 언제든지 iTunes를 제어 가능하다.  iTunes를 Party Shuffle 모드에 두고 코딩을 하다가 음악이 마음에 안들면 iTunes 창을 열 필요 없이 리모컨 버튼을 눌러 다음 곡으로 넘기고 코딩을 이어 나간다. 일하다 쉴때는 의자에 기대어 앉아 프론트로를 실행하여 리모콘으로 음악을 바꿔 듣거나 사진을 감상한다.

맥의 사용자 인터페이스는 이쁘기도 하거니와 편리하다. 벌써 맥의 단축키에 익숙해졌으며 대시보드를 부르는데 인색하지 않다.  그리고 기본 어플리케이션이 훌륭하다. 특히 iLife에 포함된 모든 어플리케이션은 정말 쓸만하다.  개인적으로 설치해서 사용하는 어플 중에 가장 유용한 것은 저널러! 이것 저것 많은 것을 기록하고 있는데 이 처럼 맥에도 쓸만한 어플리케이션이 상당히 많다. 윈도우 어플리케이션에 비해 복잡하지 않고 인터페이스가 직관적이라 배우기도 쉽다.

그러나 치명적인 단점이 있으니 국내환경에서의 웹브라우징이다. 맥의 한글 폰트는 정말 흐릿흐릿해서 웹서핑할 때 눈이 아플정도다. 한글 폰트 뿐만 아니라 전체적으로 동일한 해상도에서 바라보면 윈도우의 프로그램이 훨씬 선명하다는 느낌을 준다.  굴림체의 선명함이 너무나 아쉽다. 게다가 active  x를 사용하는  사이트를 이용할 수 없다는 것도 상당한 단점!

그럼에도 불구하고 맥을 메인으로 쓸 수 있는 것은 vmware fusion이라는 훌륭한 버추어 머신 어플리케이션이 있기 때문이다.  (심지어 원격데스크탑 어플리케이션도 있다!)  1기가 메모리의 맥북에서 무리 없이 동작한다. 파일 공유 기능이 있어서 맥의 특정 디렉토리를 윈도우에서 네트워크  드라이브로 공유해 사용가능하다. 맥 안의 윈도우에 Gample을 띄워 영화를 다운 받고 이 것을 복사 없이 바로 맥에서 VLC로 보고 있다. 더욱 놀라운 것은 unity 기능이다. 윈도우 어플리케이션을 맥 어플리케이션 처럼 창으로 띄울 수 있다.  (말로 설명하긴 힘드니 동영상을 감상하시길)

앞으로 새로운 데스크탑을 구매하더라도 나는 맥을 구입하고 싶을 정도로 맥의 매력에 푹 빠졌다. 국내의 기형적인 웹환경만 아니라면 컴퓨터를 처음 배우는 사람에게 맥을 추천하고 싶지만 우리나라에서는 쉽지 않은 것이 현실.  vmware fusion의 unity기능 덕분에 완전히 맥과 윈도우를 동시에 사용할 수 있는 것이 가능해진 지금 맥으로의 스위칭은 완벽하다. 내일 집으로 가는 길고 긴 5시간의 여정을 맥북 그리고 영화와 함께 해야겠다.

맥북용 파우치(슬리브)를 무엇으로 할까?

맥북은 다음주 도착 예정인데 벌써부터 맥용 프로그램을 다운받고 있다. 맥북이 도착하면 당장 설치해야할 gcc, vim, subversion 등의 링크도 미리 메모해 두었다. 맥용 스타크래프트를 다운받는 것은 기본! 그만큼 맥에 대한 기대로 가득한 요즘이다.

미리 준비해야할 필수 물품 중에 하나가 케이스 혹은 가방인데 노트북 가방의 투박함을 이미 많이 경험해 봤기에  가능하면 케이스를 구하려고 한다. 튼튼한 케이스가 있다면 일반 가방에 넣어다녀도 충분하기 때문이다. 보기와 다르게 미적 감각을 추구하는 편이라 저렴하면서 이쁘고 실용적인 녀석을 찾고 있는데 다음 두가지 제품으로 후보가 압축되었다.
사용자 삽입 이미지첫번째 상품은 ava Sleevz for MacBook으로 네이버 쇼핑 최저가 15,190원이다. 맥북을 타겟으로 만든 슬리브기 때문에 사이즈가 정확히 맞으며 심플하고 깔끔하다는 장점이 있지만 충격 흡수 기능은 거의 없다고 봐도 무방할 듯 하다. 회사에서 사택까지의 거리가 도보로 10분인 것을 감안한다면 한손에 끼고 조심스럽게 돌아다니면 큰 무리는 없을 듯 한데 아무래도 불안함을 지울 수 없을 듯.
사용자 삽입 이미지
두번째 상품은 ELECOM의 제로쇼크(ZSB-IB015)로 네이버 쇼핑 최저가 18,000원이다. (첫번째 제품은 배송료가 붙는데 반해 이 제품은 배송료가 붙지 않아 둘의 가격차이는 미비하다.) 흰색인 맥북과 어울리게 흰색 파우치 제품이 있어서 마음에 드는데 문제는 12~13.3인치용으로 나온 제품이라 맥북이 빡빡하게 딱 들어맞는 다는 사실. 게다가 오래쓰면 보송보송 나온 엠보싱의 물결이 맥북에 남을수도 있다고 한다. (물론 물파스(?)로 지울 수 있다고 한다.) 중고로 팔 생각이 없고 평소에 많이 사용하는 물건의 경우 부담없이 막 사용하는 나에게는 별 큰 문제는 아닌 듯 하지만 2% 아쉬운 단점! 이 제품은 확실히 첫번째 제품보다는 충격 흡수능력이 훌륭할 것이다.

아마도 두번째 상품을 선택할 듯 한데 대체 맥북은 언제오는걸까?