Category Archives: 소프트웨어

Qt 4.2.0/VS2005 SP1 문제 해결

윈도 비스타에서는 어쩔 수 없이 VS2005 SP1을 사용해야 한다. 그런데 윈도 비스타에서 VS2005 SP1을 사용하여 아마 QMap/QHash가 들어간 프로그램을 컴파일하는데 오류가 생겼다. 다행히토 트롤텍은 둘러가기 패치를 제공하고 있었지만, 이마저도 듣지 않았다. 그래서 이 문제 가지고 MSDN과 각종 Qt 포럼이 아직도 들썩대고 있다.
그런데 그 둘러가기 패치의 코드와 내가 가지고 있는 Qt의 문제성 헤더의 줄 번호가 약간씩 차이가 났다. 그리고 둘러가기 패치는 그 주변 코드를 알 수가 없어서 뭐가 문젠지 알아내는 데 시간이 좀 걸렸다. 실제로 내가 적용시킨 것은 다음과 같다.

<QHash.h>
일단 390줄 부근에서 찾기 바란다.
private:
       // ### Qt 5: remove
       inline operator bool() const { return false; }
   };
   friend class const_iterator;
typedef typename QHash<Key, T>::iterator DummyHashIterator;
   // STL style
   inline iterator begin() { detach(); return iterator(d->firstNode()); }
   inline const_iterator begin() const { return const_iterator(d->firstNode()); }

그리고 한 890줄 부근에 있다.
public:
   QMultiHash() {}
   QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {}

   inline typename QHash<Key, T>::iterator replace(const Key &key, const T &value);
   inline typename QHash<Key, T>::iterator insert(const Key &key, const T &value);
    
       inline typename DummyHashIterator replace(const Key &key, const T &value);
       inline typename DummyHashIterator insert(const Key &key, const T &value);

   inline QMultiHash &operator+=(const QMultiHash &other)
   { unite(other); return *this; }

파란색 부분을 찾은 다음 지우고 빨간색으로 바꾸면 된다.

<QMap.h>
310줄 부근에서 찾기 바란다.
private:
       // ### Qt 5: remove
       inline operator bool() const { return false; }
   };
   friend class const_iterator;

       typedef typename QMap<Key, T>::iterator DummyMapIterator;
   // STL style
   inline iterator begin() { detach(); return iterator(e->forward[0]); }
   inline const_iterator begin() const { return const_iterator(e->forward[0]); }

그리고 한 890줄 부근에 있다.
public:
   QMultiMap() {}
   QMultiMap(const QMap<Key, T> &other) : QMap<Key, T>(other) {}

          inline typename QMap<Key, T>::iterator replace(const Key &key, const T &value);
    inline typename QMap<Key, T>::iterator insert(const Key &key, const T &value);

           inline typename DummyMapIterator replace(const Key &key, const T &value);
           inline typename DummyMapIterator insert(const Key &key, const T &value);

   inline QMultiMap &operator+=(const QMultiMap &other)
   { unite(other); return *this; }

파란색 부분을 지우고 빨간색 부분으로 바꾸기 바란다. 그 결과 해결되는 척 하였다.

아아아아아아아아아아아아안돼애애애애애애애애애애애!

사용자 삽입 이미지트롤텍에서 하는 Qt 세미나란 것이 있어서 너무 끌려서 서울행 KTX 예약할 생각하고 #tokigun에서 이거 가지고 이야기하고 있었다. 기분좋게 International Registration 눌러 보니까, Registration is free, but seating is
limited, so reserve your spot today!
이 말에 조낸 흥분해서 예약하려고 했다. 그런데 그런데, 국내의 한 사이트에 가 보니, 아예 죽여라 죽여. 트롤텍 홈페이지가 구라를 치는 건지 너희가 구라를 치는 건지. 나는 접수 한다고 해도 트롤텍 홈페이지에다가 할 꺼니까, 그냥 차라리 안가고 만다.
혹시 이거 가실 수 있는 분이 있다면, 누군가가 저 경험담 좀 전해 주시기 바랍니다. 저도 꼭 가고 싶다고요!

이뭐병 비타스

내 컴에 무리해서 윈도 비타스를 깔긴 깔았다. 윈도 비타스의 특징 중 하나는 액티브싱크란 녀석이 윈도 운영체제 안으로 들어왔다는 것이다. 문제는 액티브싱크를 삼킨 윈도가 옛날만큼 잘 동작하지 않는다는 것이다. 실제로 내가 쓰고 있는 윈도 비타스 RTM 버전에서는 이런 일이 일어났다. 일단 내 LG-LC8000을 꼽으니까 이런 화면이 떴다.
사용자 삽입 이미지
여기서 일단 안심은 했다. 정확하게 Windows Mobile Device라고 잡긴 잡아 줬는데, 문제는 이게 전부라는 것이다. 내가 미쳤다고 디지털 미디어 파일들을 내 휴대폰에 심지도 않을 것이며, 사진 가져와 봤자 저 해상도 낮은 사진을 가지고 ㅁㄴㅇㄹ스러운 짓을 하기는 싫다. 나는 당장 휴대폰의 전화번호부와 일정을 동기화시키려고 아웃룩 2007을 켤려고 했으나… 휴대폰 쪽에서 안드로메다 같은 반응이다. 동기화 진행 프로그레스 바만 떠 있고 움직이지 않는다.
알고 보니까 윈도 비타스에는 기본적인 윈도 모바일 연결 드라이버만 들어 있고, 기존의 액티브싱크가 담당했던 그러한 기능은 별도의 드라이버를 아직 개발하고 있다는 것이다. 다횅히도 그것은 다운로드 가능했으며, 윈도 비타스의 드라이버를 까니까…
사용자 삽입 이미지요놈 간지. 당연히 Set up my device를 해야 겠지?
사용자 삽입 이미지자 그러니까… peremen’s PDA라는 문구가 떠 주고 친절하게 동기화를 해 주고 있었다. 어차피 저 구린 휴대폰은 윈도 모바일 2003밖에 돌리지 못해서 USB 2.0은 안드로메다지만, 동기화하는 화면이 예뻐져서 용서해 준다.
사용자 삽입 이미지게다가 윈도 비타스의 동기화 센터에서는 이제 반응하다니… 거참 ㅁㄴㅇㄹㅁㄴㅇㄹ스러운 윈도 비타스다. 결론은 낚이지 말고 윈도 모바일과 비타스를 동기화시키려면 http://www.microsoft.com/windowsmobile/devicecenter.mspx 페이지에 가서 추가 드라이버를 꼭 받지 않으면 낚이는 수가 있다.

우분투 서버의 개념없는 변신

정식 명칭과 블로그 세계에서는 이 서버가 peremen.name으로 알려져 있겠지만, 내 애칭은 우분투 서버이고 한 때 썼던 도메인이기 때문에 그렇게 부르기로 했다. 오늘 학교에서 인터넷 없는 날이다 뭐라 해서 지랄을 떨고 있는데, 문제는 나같이 인터넷 없이 살 수 없는 사람들도 있다는 것이다. 그래서 내가 꺼낸 초강수 카드는 X 클라이언트들+X11 포위딩 via SSH이다. 사실 학교도 뻘짓을 했던 것이 교내 네트워크는 멀쩡하게 살려 두었고, 더더욱이나 랜선을 이용한 인터넷은 더더욱 멀쩡하다는 것이다. 그래서 내가 지금 블로그에 글도 쓸 수 있는 것이다.
X11 포워딩이라고 해서 대단한 것은 아니다. 이것을 이해하기 위해서는 X 프로토콜의 구조를 알아야 한다. X의 디자인은 클라이언트와 서버가 분리되어 있는 형태로, 서버는 지역 디스플레이를 이야기하며 클라이언트 프로그램은 바로 X 서버에 접속해서 서버의 자원으로 자신을 렌더링하는 것이다. 이 독특한 구조 때문에 애시당초 리눅스에는 원격 데스크탑 개념을 만든다고 삽질을 할 필요가 없었다.
많은 리눅스 배포본의 경우 X 서버가 딸려 나오기 때문에 지역 프로그램들(클라이언트)에서 바로 지역 서버에 접속해서 프로그램을 그릴 수 있지만, 반드시 그렇게 할 필요는 없다. 서버에는 X 클라이언트(파폭이나 시냅틱 같은)만 깔아 두고 지역 컴퓨터에 X 서버만 설치해 주면, 게임은 끝난다. 서버에서 X 터미널 에뮬레이터(xterm 같은)를 띄워서 지역 디스플레이로 끌어 오면 그 때부터는 그 터미널에서 실행되는 모든 것은 X 클라이언트가 있는 곳, 즉 원격 서버에서 실행된다.
리눅스의 경우 기본적으로 X 서버가 존재하며, 윈도의 경우 추천하고 싶은 것은 xming 정도이다. 씨그윈의 X 서버만 분리한 작은 프로그램으로 이해하면 되겠으며, 무거운 씨그윈을 깔지 않아도 된다는 장점이 있다. 지금의 설정은 xfce4-terminal로 터미널을 하나 띄워 두었고, 파피어폭스와 나비를 사용해서 한글 입력을 하고 있다.
뭐가 어쨌든 남들이 인터넷 못할 때 혼자서 인터넷 하는 재미는 쏠쏠하다니깐…