감성적인 국민들

기타 2009/05/28 00:16 posted by gwangyi

며칠 전, 제 16대 대통령이셨던 노무현 전 대통령께서 자살로 서거하셨다.
자살이니 아니니, 의혹이 떠오르고 있지만 공식적으로 아직까지는 자살로 밝혀졌으니 일단 자살로 해 두자.

이전에는 그냥, 탈 권위적, 비교적 서민들을 위할 줄 알았던 괜찮은 대통령이었다고만 알고 있었다.
그런데 이번에 여기저기서 특집을 다루어대어 대통령이 되기 전의 살아온 모습들을 일부 볼 수 있었다.

그리고 그 모습을 본 느낌은,

정말,

이루 말 할 수 없었다.

대한민국 역사상, 이렇게까지 완고하고 원칙에 충실했던 정치인이 있었나?
앞길 창창한 세무 변호사 자리를 박차고 인권 변호사의 길로 접어든 일,
민주화 운동에 힘을 실어주다가 3자개입 혐의로 잡혀간 일,
질 게 뻔한 부산에서 민주당 당적으로 출마했던 일 등...

내가 지향하던 삶의 모습이었다.

비록 내 삶은 누추하고 보잘것 없어도, 나의 원칙과 정의, 양심에 한점 부끄럼 없는 삶을 사는 것.

대통령이 되어서도 그 원칙과 소신은 그다지 접히지 않았다.
그나마도, 시대의 흐름이라 어쩔 수 없다던 FTA정도?

청문회때 명찰을 집어던지고, 김영삼의 민정당행에 받아들일 수 없다며 소리치던 것 들을 보면,

정말로 이 사람은 그런 사람이었구나,

하고 다시 한번 생각하게 만들었다.

나는 처음, “그 노무현이 자살했다고?” 하며 어이없어했었다. 정말, 자살 따위 하지 않을 사람이라고 생각했다.
당당하게 자신의 무죄를 주장하던가, 아니면 잘못했다고 고개를 숙이던가, 당당하게 살아갈 거라고 생각했다.

하지만, 저런 삶의 궤적을 보았을때, 물론 자살은 어떤 의미에서든 합리화될 수는 없지만, 충분히 자살할 만한 상황으로 “이 나라가” 몰고 갔구나 하며 자살을 받아들일 수 있었다.

자, 그리고 보자.

전 대통령이 서거하셨다.

그리고 국민들은 그를 애도한다.

옳은 현상이다. 근데, 석연찮은 부분이 많다.

내가 인터넷을, 특히 인터넷 기사 댓글과 웹툰 댓글들을 주로 보기 때문일 수도 있다. 대부분의 댓글이, 너무, 무게감이 없다.
내가 무게를 잘 잡는다는걸 자랑하려는 것이 아니다. 그 이전에, 과연 이렇게 추모 댓글을, 추모 웹툰을 올리는 사람들은 “얼마나 긴 시간, 얼마나 깊게” 고인에 대해 생각해 보았는가, 라는 문제를 제기하려는 것이다.
전직 대통령이, 전범도 아니었고 독재자도 아니었던 어찌 보면 평범한 한 국가의 최고지도자였던 사람이 “자살”로 죽었다. 본인이 직접 해먹은 돈은 “단 1원도” 밝혀지지 않았고, 그나마 가족들이 다른 이전의 대통령들과 비교했을 때 얼마 안되는 돈을 받아먹은 정도였다. 이런 사람이 왜, “자살”이란 비극적인 방법으로 세상에게 자신을 드러냈어야 했는가.

이런 것에 대한 고찰이 없다.
그저, 한 사람 죽어서 슬프다, 그 이상 나아가질 않는다.

나에게 어떤 사람이었다, 이 나라와 민족에게 어떤 사람이었다, 이러한 것도 없다.

그저 유행처럼, 명복을 빈다.

너무 가볍다. 가볍게 느껴진다.

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License

G부익부 빈익빈 진행상황

프로그래밍/GTK 2009/04/28 14:41 posted by gwangyi

지난번에 포스팅했던 부익부 빈익빈 프로젝트(이하 부빈)이 조금 더 진행되었다.

채팅기능이 추가되었고 딜링 서버에 접속하면 카드를 딜링받아서 서로의 패를 볼 수 있는데까지 진행되었다.

카드가 그려지는 등의 실제 게임과 관련한 부분은 BubinCardarea 위젯으로 분리시키고 채팅기능은 BubinChatwidget으로 분리시켰다. 이 둘을 GtkVBox를 통해서 메인 윈도에 붙여넣어 게임 클라이언트가 만들어진다.

아직은 게임 클라이언트나 서버나 백엔드 수준-_-이라 커맨드라인 명령을 주어야한다. 나중에 대략 완성되면 그걸 다시 싸는 프론트엔드를 만들 필요가 있다.

지금 겪고 있는 문제-_-는, 이상하게 접속이 한번 이루어지면 리슨 소켓이 제대로 안닫힌다. 즉, 재 바인딩이 안된다. 문제가 뭘까...

로직만 붙이면 “일단은” 플레이 가능한 서버, 클라이언트가 나온다. 조금만 힘내자.

라기 전에... 나 학기중인데... 숙제는... 수업은...-_-

사용중인 추가 라이브러리는 gtk, gthread, gdk, glib, pango 등 gtk 일체이다. 그 외에는 아직 안썼음...

사용중인 언어는 순수 C-_-

저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍 > GTK' 카테고리의 다른 글

G부익부 빈익빈 진행상황  (3) 2009/04/28
G부익부 빈익빈 제작중  (0) 2009/04/20

G부익부 빈익빈 제작중

프로그래밍/GTK 2009/04/20 23:23 posted by gwangyi

부익부 빈익빈이라는 카드게임이 있다. 줄여서 부빈이라고도 하는데, 플레잉카드로 하는 카드게임이다.

비슷한 게임은 계급투쟁(계투), 달무티 등이 있는데, 룰은 상당히 단순하다.

  1. 손에 들고 있는 카드를 모두 버리는 순서대로 순위가 결정된다.
  2. 카드를 버릴때는 같은 숫자끼리 모아서 버릴 수 있다.
  3. 맨 처음에는 마음대로 카드를 버릴 수 있다.
  4. 전 차례에 버려진 카드보다 숫자가 같거나 큰 카드만 버릴 수 있다.
  5. 전 차례에 버려진 카드의 장수보다 같거나 더 많이 버려야 한다.
  6. 만약 이번턴에 버릴 카드가 없거나 버리기 싫으면 버리기를 포기할 수 있다. 포기한 경우 한 주기가 끝날 때까지 카드를 버릴 수 없다.
  7. 한 명을 제외한 모든 사람이 카드 버리기를 포기한 경우 한 주기가 끝난다. 주기가 끝나면 마지막에 카드를 버린 사람이 선이 되어 카드버리기를 처음부터 시작한다.
  8. 만약 마지막 한 명이 카드를 버리면서 난 경우(손에 든 카드를 모두 버린 경우) 그 사람의 바로 옆에 있는 사람이 선이 된다 - 반시계방향으로 보통 진행하므로 오른편 사람이 운 좋게 선을 먹을 수 있다.
  9. 게임이 끝나면, 전 판에서 1등을 한 사람이 선이 되어 새 게임을 시작하는데 시작하기 전에 조공을 바친다.
    꼴등은 1등에게, 꼴등에서 두 번째는 2등에게, ... 이런 식으로 조공이 바쳐지는데, 6인이 할 때는 1등과 2등이, 9인이 할 때는 1, 2, 3등이 조공을 받는다. 조공을 바치는 쪽은 카드가 보이게 최고패를 바치고 받은 쪽은 받은 장 수 만큼 패에서 카드를 골라 준 사람에게 돌려준다. 이 때는 보이지 않게 준다.
아마 이게 룰의 전부이지 싶다. 달무티를 안다면 금방 깨칠 수 있다. 계급투쟁은 본인이 모르기 때문에 언급하지 않겠다 -_-... 아마도 계급투쟁과의 가장 큰 차이점은 “전 차례에 낸 카드 수보다 같거나 많이” 낼 수 있는 점이고 이게 빈부격차를 심화시킨다.
그래서, 개발중인 그림은 다음이다.

사용중인 것은

GTK+ 2.x, gcc 4.x 다.

일단 리눅스에서 개발한담에 윈도로 포팅할 예정이다.

저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍 > GTK' 카테고리의 다른 글

G부익부 빈익빈 진행상황  (3) 2009/04/28
G부익부 빈익빈 제작중  (0) 2009/04/20

리눅스를 Synergy server로 쓰기

리눅스 팁 2009/04/17 02:30 posted by gwangyi

나는 데스크탑을 젠투-_-로 쓰고 노트북에 XP를 깔아 쓰는 유저이다.

최근 심심하기도 하고 KDE 써보고도 싶어서 wubi를 이용해 Kubuntu를 깔긴 했지만, 버추얼박스의 한계에 부닥칠때를 대비해 항상 윈도를 깔아놓고 쓰고 있다.

그러던 와중에, synergy란걸 발견해서 “어 이거 괜찮네!”하는 생각에 쓰기로 마음먹었다.

근데 치명적인 문제가 있었던 것이... 한영키가 잘 안먹히는 거였다. 인터넷에 돌아다니는 온갖 한글 패치를 다 깔아보았으나 역부족... 아무래도 synergy server로 리눅스가 돌아가고 클라이언트로 윈도를 쓰는 경우는 상당히 특이-_-한 경우였던 것 같다.

패킷을 잡아다 보니, 서버측에서는 한글키가 입력이 돼서 가는데-개인적으로 한글패치를 했다-클라이언트쪽에서는 받아도 해석을 못하는 듯 했다.

그래서 결국 택한 것이... synergy는 소스를 받아오면 configure파일과 VC6.0용 워크스페이스를 같이 제공하기에 서버와 동일한 소스를 VC6.0으로 컴파일하기로 했다.

그렇게 컴파일을 해보니 별 무리없이 돌아갔다. 그래서 지금 잘 쓰고 있다.

첨부파일은 적용시킨 한글키 패치와 i386으로 컴파일된 synergy 실행파일들(아마 필요없을거 같지만...) 윈도용으로 컴파일한 시너지의 설치파일을 첨부한다. synergy 실행파일들은 먼저 synergy를 각 배포판에 맞게 깔아준 다음 덮어쓰는 것을 추천한다.

참고로, 서버의 테스트는 x86_64 gentoo에서 CFLAGS="-O3 -march=nocona -pipe"로 컴파일되었고 패치된 패키지는 gentoo-kr 오버레이의 것이 아닌 공식 포티지 트리에서 받아오는 파일을 패치했다. 클라이언트는 버추얼박스 2.2.0버전 안에서 돌아가는 XP Professional SP3에서 Visual C++ 6.0으로 컴파일했다.



저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

포터블 우분투 넓게 쓰기

리눅스 팁 2009/04/06 19:19 posted by gwangyi

좀 더 간단한 방법이 있군요 -_-;;

공식홈페이지에 들어가셔서 Documentation의 How to change the file system size 를 참조하시는편이 더 쉬울 거 같습니다 -_-;;

하지만 주계정 바꾸기 정도는 유용할듯하여 남겨둡니다.


그래도 삽질로 해보고싶다!

  1. 덤: 로그인 계정 바꾸기
    pubuntu라는 계정명은 왠지 라이브시디 쓰는거 같아 별로 마음에 들지 않는다. 어디 한번 바꿔보자.
    먼저 새 계정을 만든다.
    # adduser 어쩌고
    그 뒤에 /etc/event.d/tty1을 편집한다. 아마도 맨 마지막 행일텐데, 다음 행을 다음과 같이 바꾼다.
    exec /sbin/mingetty --autologin pubuntu tty1

    exec /sbin/mingetty --autologin 어쩌고 tty1
    그 다음, 새로 만든 계정 디렉토리로 가서 .profile 파일을 편집해준다.
    맨 마지막 행 뒤에 다음 글들을 추가시킨다.
    export DISPLAY=10.0.2.2:0.0

    if [ `ps -u 어쩌고 | grep gnome-panel | wc -l` = 0]; then
      dbus-launch panel.sh
    fi
    이제 “리눅스만” 리붓해주면 새 계정으로 로그인이 될 것이다. 아, 몇가지 에러가 나는데 그냥 애플릿은 제거한다고 하면 해결된다.
개인적으로, 내가 GUI 인터페이스를 선택할 때 다른것보다 터미널에 가장 큰 가치를 부여-_-한다는 것을 얼마전에 깨닳았기 때문에, 무지하게 편한 gnome-terminal을 윈도 환경에서 쓸 수 있다는게 최고인것 같다. 사실 native linux를 깔아 쓰는게 최고겠지만, 현재 내 노트북-_-의 디바이스 드라이버들은 리눅스에서 제대로 지원이 안되고 있고, 무엇보다 CD가 달려있지 않아 상당히 -_- 불편해서 이정도로 참고 쓰려고 한다.

뭐 어쨌든, Cooperative Linux와 포터블 우분투는 꽤나 흥미로운 어플임에는 틀림없다. 언젠가 여유가 난다면 Cooperative Linux와 Native 둘 다 지원하는 라이브USB를 만들어보고 싶은 생각이 든다.



저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

Gentoo 쓸 때 유용한 어플들

리눅스 팁 2009/04/04 16:23 posted by gwangyi
  1. app-portage/eix
    portage tree를 캐싱하여 빠른 검색이 가능하게 해준다. 현재 설치된 버전과 설치 가능한 버전, 마스킹된 버전 등을 한눈에 볼 수 있게 해 주기 때문에 꽤 유용한 것 같다.
    설치 후에 update-eix를 한번 실행시켜주면 알아서 캐싱해준다.
    어떤 패키지를 찾아보고 싶을땐 다음과 같이 입력하면 된다. (정규표현식은 적용이 안되는듯)
    $ eix package_name
    패키지 이름을 풀네임으로 칠 필요는 없고 일부만 치면 알아서 검색해준다.
  2. app-portage/genlop
    emerge.log를 분석해주는 분석기라고 한다.
    emerge 작업을 통해 남는 로그를 분석해주는데, 어떤 패키지를 언제 얼마나 시간을 투자해서 컴파일했는가가 모두 남아 있기 때문에 이걸 통해 분석해볼 수 있다.
    특히 유용한 점은, emerge 작업이 얼마나 걸릴지 예상할 수 있다는 점이다. emerge 작업을 했을 때 전체 얼마나 시간이 걸릴까를 예상해보려면 다음과 같이 해 주면 된다.
    $ emerge package_name -p | genlop -p
    emerge -p옵션을 통해 나오는 패키지 정보를 genlop 에게 pipe로 전달하면 총 예상 시간을 예측해준다.
    현재 진행중인 컴파일이 얼마나 걸릴까 알아보려면 다른 창에서 다음과 같이 실행해주면 된다.
    $ genlop -c
    시작한지 시간이 얼마나 지났나, 그리고 예측된 시간이랑 비교하면 얼마나 남았나, 지금 어떤 패키지를 컴파일중인가가 친절하게 나온다.
  3. app-portage/layman
    아마 젠투 좀 쓴다는 사람은 다 알거다. 슈퍼유저 권한으로 layman -L을 실행시켜서 사용가능한 오버레이를 한눈에 볼 수 있고 layman -a로 오버레이를 추가할 수 있으며 layman -S로 오버레이를 업데이트할 수 있다.
  4. sys-kernel/module-rebuild
    커널이 업데이트되면 반드시 커널 모듈을 다시 컴파일해줄 필요가 있다. 하나하나 찾아서 하기 굉장히 귀찮은데, module-rebuild를 설치하게 되면 일괄적으로 다시 emerge를 시켜준다. 매우 유용하다.
    # module-rebuild rebuild
    위와 같은 명령 한번이면 알아서 리빌드해주니 정말 편하다.

저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

PulseAudio + Gnome 쓰기

리눅스 팁 2009/03/09 23:15 posted by gwangyi
피진을 쓰는 중에, 누가 말을 걸어도 효과음이 안나서 그러려니- 하고 살았는데, 최근에 실은 소리가 안나는게 정상이 아니고 사운드 설정 쪽이 맛이 갔다는것을 깨닳았다.

그래서 이리저리 구글 등을 찾는 뻘짓을 하면서 해결법을 모았다.

  1. (gentoo 같이 Gnome을 직접 컴파일해서 설치한 경우에 해당)
    esd 지원이 포함되었는지 확인한다. 없으면 포함시킨다.
  2. pulseaudio 설정파일(/etc/pulse/system.pa)을 열어 다음 네 행을 추가한다. (비슷한 것이 보이는 곳 근처에 추가하는 것이 좋을 것이라고 생각한다.)
    (만약 pulseaudio가 개인 계정 권한으로 돌아가고 있다면 default.pa가 될 것이다.)
     .ifexists module-esound-protocol-tcp.so
    load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1
    .endif
    load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
  3. 그놈 소리 설정 프로그램을 통해서 사운드 출력을 ESD나 PulseAudio 중 하나로 설정한다.
  4. 이제 ESD 쓰는 어플들도 소리 잘 난다.
참조: http://www.pulseaudio.org/wiki/PerfectSetup, http://kldp.org/node/91425
저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

ssh 서버를 socks5 proxy로 쓰기

기타 2009/03/03 19:55 posted by gwangyi
요즘 보면 나름대로 보안을 챙기겠답시고 포트를 하나둘씩 차단하는 네트워크 관리자가 많다.

포트만 차단하면 그나마 양반인데, 가끔은 모든 포트를 막아버린 뒤에 특정 보안 프로그램을 설치해야만 인터넷이 되게 해준다던가 하는 경우도 있다. 분통 터진다 -_-...

이런 경우, 개인적인 호불호로 설치하지 않는 경우도 있을 수 있지만 OS 특성으로 인해 설치하지 못하는 경우도 생긴다. (ex. 64bit OS에 설치할 경우 정상동작하지 못하는 프로그램 등)

그러면, 저렇게 해당 프로그램을 설치하지 못할 경우 100% 보안이 위험한가? 꼭 그런것도 아니라는걸 금방 알 수 있을거다. V3 안깔리면 카스퍼스키 쓰면 되고, 카스퍼스키 안써지면 맥아피 사다 써도 되고, 정말 자신있다면 백신 만들어 쓸 수도 있을텐데 꼭 피xxx인지 뭔지 하는 삼류 백신을 설치해야만 하는건가 하는 생각도 든다.

이럴 때, 우회하는 방법을 알아보자.

아, 무엇보다 먼저 “방화벽 밖에 있으면서 SSH 접속 및 터널링이 가능한 서버”가 필요하다. 웬만한 리눅스 서버라면 ssh를 여는 것만으로 해결되고 윈도 서버라 해도 Cygwin을 통해서 OpenSSH를 설치하면 해결될 것이다. 방화벽 밖에 있는 서버가 없다면... 아쉽지만 단념하는게 좋을 거 같다. 아니면 지인에게 부탁해서 한대쯤 얻어두는 방법이 있다. 주변에 홈페이지 서버를 직접 관리하는 사람이 있다면 부탁해보자.

서버측은 OpenSSH를 사용한다고 가정하고, 클라이언트에서는 PuTTY를 사용한다고 가정하겠다.
한글 PuTTY는 http://www.kldp.net/projects/iputty 에서 다운로드받을 수 있다.

  1. 일단, 열린 포트가 있는지 확인해본다.
    보안 목적으로 막은 경우, 즉 별도의 프로그램을 설치할 필요가 없이 인터넷은 가능하지만 일부 서비스가 불가능한 경우에는 아무리 빡빡하게 막아도 인터넷 서핑용 포트인 80번 포트는 열려 있다. 인터넷을 시도했을 때 웹페이지는 뜬다면 80번 포트는 열려있다고 보면 된다.
    DNS 서비스용 포트인 53번도 보통 열려있는 포트이며, 8080도 잘 열려 있는 포트 중 하나인 것 같다.
    SSH 서버에서 해당 포트 번호를 열어보고 접속이 되는지 확인해 보는 것이 좋을 것 같다.
    OpenSSH의 경우 포트를 추가해서 여는 방법은 설정파일(보통은 /etc/ssh/sshd_config)에 다음과 같은 명령을 추가해주면 된다.(관리를 위해 Port 명령이 나오는 근처에 써 주는게 좋을 것 같다.)
    추가해주고 나면 ssh 서버를 재시작해주는것을 잊지 말자.(/etc/init.d/sshd restart 로 재시작이 가능하다. 우분투일 경우 앞에 sudo를 붙여주자.)
    Port 8080 # 8080포트를 열 때
  2. PuTTY가 C:\Program Files\HangulPuTTY 에 설치된 경우, 명령 프롬프트를 연 다음에 다음과 같이 입력한다.(명령 프롬프트는 시작->실행을 선택해서 cmd를 치면 나온다.)
    주의할 점은, -P 뒤에 나오는 숫자는 위에서 찾은 열린 포트 번호를 넣고 server.com 대신에 위에서 설정한 서버 주소가 들어가야한다.
    C:\>cd "C:\Program Files\HangulPuTTY"
    C:\Program Files\HangulPuTTY>PUTTY -D 8080 -P 8080 -ssh server.com
  3. 잠시 기다리면 login as: 라는 프롬프트가 뜨면서 입력을 기다린다. 여기서 자신의 해당 서버 계정 아이디와 비밀번호를 입력해주면 로그인이 된다. 비밀번호는 원래 뭘 치더라도 보이지 않기 때문에 당황하지 말고 침착하게 비밀번호를 입력하자.
  4. 로그인에 성공하면 포트가 열리고 proxy 서버가 준비된다. 궁금하면 명령 프롬프트에서 netstat -a 를 통해 열린 포트를 확인해보면 된다.
  5. 이제 사용할 어플리케이션에서 Socks5 프록시 서버를 설정해줄 차례다. 웬만한 어플리케이션은 이걸 설정할 수 있게 되어 있지만 설정할 수 있는 메뉴가 없는 경우 FreeCap이나 SockCap 같은 어플리케이션의 힘을 빌릴 수 밖에 없다. 여기서 예를 들 어플은 Internet Explorer를 예로 들겠다.
  6. 도구->인터넷 옵션을 선택하여 인터넷 옵션 창을 띄운 후 연결 탭을 누른다.
  7. LAN 설정 버튼을 누른 뒤 프록시 서버 란의 체크박스를 눌러 프록시서버를 켠다.
  8. 고급을 눌러서 프록시 설정을 켠 다음, “모든 프로토콜에 같은 프록시 서버 사용”의 체크를 해제하고 모든 칸을 비운 다음 Socks 옆에 localhost를 입력한다. 그 옆에 비어있는 포트 란에는 위에서 PUTTY를 실행할 때 -D 옆에 적어준 숫자를 적어주면 된다.
  9. 확인을 눌러서 설정을 적용한 뒤 인터넷을 해 본다. 잘 될 것이다.
  10. 네이트온에도 비슷하게 찾아가면 Socks5 혹은 Socks 프록시 서버 설정이 있다. 설정해주면 방화벽이 어쩌고 투정부리던 네이트온도 인터넷이 가능해진다.
이렇게 우회하게되면 덤으로 패킷 암호화가 이루어져 다른 사람이 훔쳐볼 수 없게 되는 장점도 있다.

저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
rubyscript2exe는 ruby 스크립트를 패킹해서 하나의 실행파일로 만들어주는 아주 유용한 툴이다. ruby는 스크립트 언어기 때문에 인터프리터가 필수고, 따라서 배포할 때에 루비 인터프리터와 함께 배포되어야 하는데다가 추가적인 gem을 사용했을 경우 전부를 한번에 패킹하기는 미친듯이 귀찮아진다. 게다가 대상이 윈도이기라도 하면 정말 여러가지로 골치가 아프지 않을 수 없다. 이러한 문제들을 해결할 수 있는 것이 rubyscript2exe라는 툴이다.

현재 ruby 1.8.6 patchlevel 287 이상에서 rubyscript2exe 0.5.3은 정상적으로 동작하지 않고 있다 -_-... $0이 freeze되어 있는데 수정하려 하는 문제인 것 같다. 하지만 ruby 홈페이지에서 원클릭 인스톨러로 받을 수 있는 윈도용 ruby 1.8.6 patchlevel 111에서는 문제가 없기 때문에 윈도 환경에서의 사용에는 큰 문제가 없을 것 같다.

이 것은 gem이기 때문에 gem 명령어를 통해서 간단하게 설치할 수 있다.
# gem install rubyscript2exe
그리고 대상 스크립트를 실행파일로 변환하고 싶을 때는 간단하게
$ rubyscript2exe target.rb
라고 치면 시간이 조금 걸리면서 완료된다.

그런데 다 좋은데... ruby-gnome2를 사용한 경우 글자 렌더링 엔진을 빼먹어서 글자가 하나도 찍히지 않는 불상사가 발생하는 문제점이 있다.

이 문제는 왜 발생하냐면, rubyscript2exe는 해당 루비 스크립트를 같이 패킹된 ruby 인터프리터를 사용하여 실행시키는데 여기에 포함된 GTK 라이브러리가 동작 할 때 필요한 파일이 같이 패킹이 되지 않았기 때문에 파일을 찾을 수 없어 발생하는 문제점이다.

이를 해결하기 위해서는 원리적으론, GTK 라이브러리에서 참조하는 파일들을 같이 패킹하여 실행시 언패킹되도록 하면 된다.

ruby가 설치된 곳이 C:\ruby 라고 한다면, ruby-gnome2를 설치하면 C:\ruby\lib\GTK 에 GTK가 설치된다. 이 곳에 있는 etc, share, lib 파일이 동시 패킹 대상이 된다.

rubyscript2exe는 인자로 루비스크립트가 아닌 디렉토리를 지정하게 되면 해당 디렉토리 안에 있는 모든 파일을 자동적으로 함께 패킹함과 동시에 그 안의 init.rb를 실행시키도록 구성되어 있다. 또한, RUBYSCRIPT2EXE 모듈 내의 method를 통해 여러 정보를 얻을 수 있는데, appdir은 패킹했던 파일들이 풀려 있는 디렉토리를 지칭한다. 이 것을 통해, 같이 패킹한 자료들에 접근할 수 있게 된다. 또 is_compiled? 라는 메소드가 있어, 이 스크립트가 rubyscript2exe를 통해 실행되고 있는지 아니면 일반적인 실행인지 체크할 수 있어 이 둘을 이용해 필요한 파일들을 준비시킬 수 있다.

rubyscript2exe는 패킹된 실행파일을 실행시킬 때, 대략 다음과 같은 트리구조를 갖도록 풀린다.
(홈 디렉토리)\eee\eee.application.nnn (nnn은 숫자)
└ app: 패킹했던 파일들을 풀어둔다.
└ bin: ruby 인터프리터와 필요한 dll들을 담아둔다.
└ lib: 사용한 gem이나 같이 패킹되지 않았지만 require를 통해 로드된 다른 ruby 스크립트들이 위치한다.
필요한  파일들인 etc 디렉토리와 lib, share 디렉토리들을 적당히 같이 패킹한 다음 프로그램 도입부에서 appdir을 통해 적당히 풀어주면 필요한 설정 파일들을 접근할 수 있게 되어 정상동작으로 한 걸음을 내딛을 수 있을 것이다.

그런데, 이렇게 해 주면 테마는 적용이 되어 이쁘게 나오는데 아직 한글이 정상적으로 나오지 않는다. 개발중인 머신에서는 잘 나오지만 말이다. 여기서 속으면 안된다.

이번엔 왜 안되느냐, 바로 pango의 글자 렌더링 엔진의 설정이 틀려버렸기 때문이다. etc 안에 설정파일이 존재하는데 열어보면 왜 문제가 되는지 바로 알 수 있을 것이다. 아마 ruby-gnome2가 설치된 경로로 절대경로가 되어 렌더링 엔진 dll파일들이 적혀 있는 것을 볼 수 있을 것인데, 이 것을 업데이트할 때는 pango-querymodules라는 유틸리티를 쓰는 것이 편하다. 이건 GTK 설치된 디렉토리의 bin에서 찾을 수 있다.

이제 이런 것들을 반영하여 언패킹때의 코드를 넣어주면 해결! 인데, 말로만 설명하면 와닿지 않기 때문에 gmemrb 에서 사용한 init.rb를 첨부하였다. 여기는 필요한 파일을 패킹/언패킹하기 위해 tar 파일을 썼으며(압축은 어차피 rubyscript2exe에서 한번 해 주기 때문에 생략했다) tar 파일을 핸들링하기 위해 archive-tar-minitar를 사용하였다. 하지만 전반적으로 이해하는덴 어렵지 않을 것이다.

require 'rubyscript2exe'
require 'archive/tar/minitar'
require 'fileutils'
if RUBYSCRIPT2EXE.is_compiled?
  Archive::Tar::Minitar.unpack(RUBYSCRIPT2EXE.appdir + "/env.tar", RUBYSCRIPT2EXE.appdir + "/..")
  Archive::Tar::Minitar.unpack(RUBYSCRIPT2EXE.appdir + "/locale.tar", RUBYSCRIPT2EXE.exedir)
  cmd = "\"#{RUBYSCRIPT2EXE.appdir}/../bin/pango-querymodules\" > \"#{RUBYSCRIPT2EXE.appdir}/../etc/pango/pango.modules\""
  cmd = cmd.gsub(/\//, "\\") if RUBY_PLATFORM =~ /win/
  system(cmd)
end

require 'gmemrb.rb'

GMemRB::GMemRB.new.show_all
Gtk.main

if RUBYSCRIPT2EXE.is_compiled?
  FileUtils.rm_rf RUBYSCRIPT2EXE.exedir + "/locale"
end
중요한 부분은 RUBYSCRIPT2EXE.is_compiled?로 묶여진 if 블록이다.

gmemrb의 경우 gettext를 쓰기 때문에 locale이 필요해서 실행파일이 위치한 곳에는 locale을 풀고 언패킹된 곳에는 gtk를 풀도록 되어 있다. 또한 pango-querymodules를 system 명령을 통해 실행시켜 그 결과를 바로 etc/pango/pango.modules 에 쓰도록 해서 위치를 업데이트하도록 되어 있다.

아마 저걸 참고로 해서 직접 작성해보면 가장 적절하게 느껴지는 형태로 쓸 수 있지 않을까 싶다.

rubyscript2exe 공식 홈페이지
저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍 > Ruby' 카테고리의 다른 글

rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기  (2) 2009/02/02
GMemRB 공개  (0) 2009/02/01
Ruby-GD2 in WIN32  (0) 2008/12/23
Ruby-GNOME2  (0) 2008/12/09
Ruby on Rails  (0) 2008/05/28

GMemRB 공개

프로그래밍/Ruby 2009/02/01 05:02 posted by gwangyi
단어 연습 프로그램 GMemRB 1.0을 공개합니다.

특징으로는, multi-platform을 지원하는 ruby-gnome2로 작업하였기 때문에 OS를 크게 안따진다는 것이 있습니다.

그리고 단어장 정보를 text파일로 출력하기 때문에 급할 때 수정하기가 편하고, Microsoft Excel 등의 스프레드시트 프로그램에서 읽을 수 있도록 탭으로 구분된 표로 저장하고 있습니다.

윈도용의 경우, rubyscript2exe를 사용하여 독립 실행형으로 만들었습니다. 복잡하게 ruby 설치하고 ruby-gnome2 설치하고 gem 설치하고 할 필요 없이, 실행파일만 실행하면 실행되도록 했습니다.

ruby-gnome2의 경우 rubyscript2exe와 상성이 안 좋아서 만드는데 조금 고생도 했던거 같습니다 -_-

내일이나 조만간에 ruby-gnome2를 사용한 경우 rubyscript2exe를 이용하여 독립실행형 어플리케이션을 만드는 방법에 대해 포스팅 하도록 하지요. ruby-gnome2 홈페이지에 있는 내용은 “틀렸습니다”-_-...

홈페이지는 http://gmemrb.esperanza.kr/ 또는 http://plus17.postech.ac.kr/gmemrb 입니다. 도움말 페이지인데, 여기서 다운받을 수 있습니다.
저작자 표시 비영리 동일 조건 변경 허락
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍 > Ruby' 카테고리의 다른 글

rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기  (2) 2009/02/02
GMemRB 공개  (0) 2009/02/01
Ruby-GD2 in WIN32  (0) 2008/12/23
Ruby-GNOME2  (0) 2008/12/09
Ruby on Rails  (0) 2008/05/28