2007년 1월 20일 토요일

gst + python 팁

여러가지 방법으로 GStreamer를 사용할 수 있긴 하지만 GObject를 기반으로 한 동적인 특징은 파이썬과 상당히 어울린다.

GStreamer에서 흔히 하는 일 중의 하나가 n개의 element를 만들고 그 element를 pipeline에 추가한 다음에 줄줄이 연결하는 일인데, 사용하는  컴퓨터의 pygst가 구버전인지 add_many()는 구현되어 있지만 link_many()가 구현되어 있지 않다...  그래서 map/zip으로 해결.  (하는 김에 add_many()도 map으로)

import gst

player = gst.Pipeline('player')

elements = [gst.element_factory_make('filesrc'),
            gst.element_factory_make('mad'),
            gst.element_factory_make('gconfaudiosink')]
elements[0].set_property('location', 'fighter.mp3')

map(player.add, elements)
map(lambda (x,y): x.link(y), zip(elements[:-1], elements[1:]))

player.set_state(gst.STATE_PLAYING)


2007년 1월 16일 화요일

데비안 4.0 etch - 데스크탑은 그놈

우분투의 "playing advocacy" 전략이 제대로 먹혔었기 때문일까?  이제 데비안 4.0 etch에서는 Desktop environment 태스크를 설치하면 GNOME만 설치한다.  물론 tasksel로 나중에 설치한 뒤에 kde-desktop을 설치하면 되긴 하지만 설치할 때는 지원하지 않는다.

데비안 입장에서 (advocacy 전략을 통해 얻는 사용자 편의보다도) 더 큰 이유는 첫 번째 CD 안에 두 데스크탑 환경을 넣기가 불가능하다는 점이다.  그렇다고 둘 다 포기할 수는 없는 노릇.

tasks="standard, kde-desktop" 파라미터를 넘기면 KDE task를 설치하기는 하지만 첫번째 CD에 없는 관계로 CD에서 설치할 때는 곤란하다.  (DVD라면 OK)

2007년 1월 14일 일요일

어색한 메세지 번역을 피하는 팁 몇가지

문장 부호를 똑같이 붙이려고 하지 말아라.
- 우리말에서는 문장에 세미콜론을 쓰지 않는다.
- 원문에 쉼표가 있다고 번역문에 쉼표를 넣을 필요는 없다.  우리말로는 쉼표를 쓰지 않아도 문장이 명확한 경우가 많다.
- 영어에서는 흔히 문장 끝에 괄호를 열고 괄호를 닫은 다음 마침표를 찍는다.  하지만 우리말에서는 그렇게 쓰지 않는다.

영어 문장의 처음에 쓰인 대소문자를 그대로 따라할 필요는 없다.
- 영어에서는 첫 단어가 소문자로 쓰는 단어일 경우에도 (프로그램 이름 따위) 대문자로 만들어서 쓴다.  그대로 쓰지 않도록 신경 쓴다.

관계사가 줄줄이 붙은 문장을 한문장으로 번역하려고 순서를 여기저기 뒤집지 않는다.
- 어느정도 같은 말을 반복하더라도 여러 문장으로 쓰는 편이 낫다.  한 문장으로 쓰려고 하다가는 오히려 말 순서가 바뀌어서 핵심단어가 뒤에 가는 등 의미가 불명확해질 수가 있다.

2007년 1월 13일 토요일

The porn industry says HD DVD

CES 2007: HD DVD versus Blu-ray - The porn industry says HD DVD

http://www.tgdaily.com/2007/01/11/ces2007_hddvd_blu_ray/

HD-DVD가 블루레이에 승리하는 건가?  포르노는 언제나 비디오 매체의 첨단을 주도한 업계인지라...

Nexuiz - 일인칭 슈팅 게임

DDTP 번역 작업을 하는 중 우연히 Nexuiz라는 게임의 패키지 설명을 번역하게 되었다.  FPS 게임도 재미있게 했었고, 또 데비안에 들어 있는 GPL로 배포되는 게임을 안 깔아볼 이유가 없다!  (그런데 데이터 패키지 파일 하나가 무려 130메가)

딱 플레이해보면 하나부터 열까지 연상되는 게임이 "언리얼 토너먼트"였다.  분위기부터가 으슥하면서 여기저기 점프대와 워프할 수 있는 문이 보인다.  형형색색의 갑옷을 입은 미래전사들이 화면을 가르는 뿅뿅 소리를 내면서 광선으로 상대방을 가루로 만들고 다닌다.  각종 아이템으로 무기와 탄환을 먹고 체력을 회복하고 파워업을 하며 전우좌후로 여기저기 재빠르게 움직이며 상대가 보이자 마자 인정사정 보지 않고 달려들며 총부터 쏜다.

http://www.alientrap.org/nexuiz/public/2.jpg

오히려 최근 FPS의 추세는 이러한 퀘이크나 언리얼 토너먼트와 같은 게임과는 달리 사실적인 사격과 사실적인 움직임을 구현한 게임들이 주도하고 있다.  총을 한 두방만 맞아도 죽고, 총구가 흔들리고, 캐릭터나 무기에 따라 적중 확률이 달라지고, 연사보다 점사의 정확도가 높고, 총을 쏘는 자세에 따라 집탄도가 다르다.  사실적인 게 꼭 좋다기 보다는, 매니아들을 위한 게임보다는 좀 더 대중화될 수 있는 게임을 만드는 게 이익이니까. 

어쨌든 충분히 FPS를 즐길 수 있는 상당히 높은 완성도로 구현되어 있다.  멀티플레이를 위한 게임이라서 더 그럴 수도 있지만 특별히 다듬어야 할 부분이 보이지 않는다.  (하지만 괜히 싱글플레이해보려다가 꽤 높은 수준의 봇때문에 당황했다.  언리얼류에 비해서는 꽤 어렵다...) 

그나저나 이제 FPS를 할 때는 아닌가보다.  멀티플레이 해 보려고 접속하자 마자 이렇게 총도 얼마 못 쏴보고 계속 학살당하다니..  (자동 조준 기능이라도 집어 넣은 클라이언트를 쓰는 건가;;)

2007년 1월 8일 월요일

freedoom 센스

며칠 전에 FreeDoom을 플레이해 보게 되었다..  (둠의 엔진은 이미 오래전에 GPL로 공개되었지만 데이터인 WAD 파일은 여전히 non-free였기에 자유롭게 배포할 수 있는 데이터를 만드는 프로젝트가 FreeDoom이다.)  어차피 FreeDoom의 몬스터 동작 방식은 엔진에 코딩되어 있기 때문에 사실 맵과 그래픽만 다르고 몬스터의 동작이나 게임 방식은 똑같다.  아직 FreeDoom의 데이터는 미완성인 상태로, 아직 완성되지 않아서 치트코드를 쓰지 않고는 클리어가 불가능한 스테이지도 있고 난이도 조절이 안 된 부분도 많이 보인다.  (대체 엄폐물도 없는 좁은 통로에 Mancubus 여러마리를 놔 두면 어떻게 하라는 건지..)

Doom II를 플레이해 봤다면 마지막 보스, Icon of Sin을 기억할 것이다.  무시무시한 짐승의 모습을 하고 벽에 붙어 있으면서 마구 재생성되는 강력한 몬스터들.  유일한 클리어 방법은 로켓을 exposed brain에 정확히 꽃아 넣는 것이었다.  처음엔 타이밍을 맞추기 상당히 어려웠지만 나중에 가서는 재미를 위해 일부러 몬스터가 몇마리 생성될 때까지 기다리곤 했다.  :D  (재빠르게 두 번 꽃아 넣으면 끝나기 때문에 난이도를 높여봤자 의미가 없었다.)  재미있는 점은 둠의 IDCLIP 치트코드를 이용해 벽을 뚫고 Icon of Sin의 내부를 들여다 보면, 괴상한 얼굴이 꼬챙이에 꽃혀 있는 걸 보게 된다.  그 얼굴의 주인공은 John Romero로..  John Carmack과 함께 ID 소프트웨어를 만들었던 둠의 개발자 중의 하나이다.  (Icon of Sin이 처음 등장할 때 중얼거리는 이상한 소리는 "To win the game, you must kill me, John Romero!"라는 말을 거꾸로 한 것이다.)

FreeDoom도 몬스터 체계는 Doom과 똑같기 때문에..  30레벨에 가서 Icon of Sin을 만날 수 있었다.  Doom II와는 달리 Icon of Sin을 만나는 과정이 상당히 험난했다..  하지만 IDDQD / IDKFA 치트키를 이용해서...

사용자 삽입 이미지

그러면 과연 저 안에는 누가 있을까?  John Romero를 그려 넣지는 못했을 텐데...

사용자 삽입 이미지

이런 엉뚱한 놈들..  -_- 

(어쩌면 Icon of Sin 얼굴이 gnu같기도?)

2007년 1월 5일 금요일

표준과 현실 모두 만족하기

(1)

RFC822에서 이메일 주소의 형식을 보면 다음과 같다.
addr-spec   =  local-part "@" domain        ; global address
local-part = word *("." word) ; uninterpreted
; case-preserved
local-part는 대소문자를 구별한다.  하지만 예전에 하이텔이 PC통신 회원들을 상대로 이메일 서비스를 개시할 때..  대소문자만 달라서 중복된 아이디는 구별되게 바꾸도록 조치했다.  학교 동기 중의 하나가 그 대상이었는데..  하이텔의 변명은 "메일 주소의 인터넷 표준을 따르기 위해"였다.  당연히 하이텔이 틀렸고, 복잡한 싸움 끝에 담당자가 "표준때문은 아니다"라고 인정하긴 했지만 아이디를 바꿀 수밖에 없었다.  :D  

진짜 이유는 이메일 서버들이 관행적으로 대소문자를 구별하지 않았기 때문이다.  지금도 아마 모든 어떤 메일 서버에서도 이메일 주소의 대소문자를 바꿔써서 보냈을 때 아마 같은 사람에게 도착할 것이다.  (이메일 주소마다 1개의 아이디만 만들 수 있는 웹사이트중에 어떤 경우는 이 점을 이용하면 아이디를 여러 개 만들 수도 있다.)

(2)

Evolution이 보낸 메일 제목이 MS Outlook/Outlook Express에서 깨져 나왔다.  (최근 버전의 Outlook에서는 올바르게 처리한다.)  그 이유는 Evolution이 메일 제목을 무조건 UTF-8로 RFC2047 인코딩해 버리기 때문이었는데, Outlook이 본문이 EUC-KR 인코딩되고 제목이 UTF-8 인코딩된 경우를 제대로 처리하지 못했다. 

결국 버그는 거부당했는데, Outlook의 버그일 뿐인데 왜 신경 써야 되냐는 얘기였다.  (사실 구조상 호환성을 깨지 않고는 고치기도 매우 어려웠기 때문에 좋은 핑계가 되었다.)

(3)

mediawiki에서 옛한글을 입력하면 유니코드에서는 자모로 "ㅈㅕㅇ" 세 개 자모를 입력해야 하는데 (ㅇ이 꼭지이응이라고 가정하면), mediawiki는 글을 입력하는 순간 이걸 "져ㅇ"과 같이 normalize해 버린다.  normalize해서 "음절+종성자모"로 만드는 게 잘못된 건 아니고 분명히 올바른 코드이지만, 문제는 옛한글을 지원하는 트루타입 글꼴이라면 보통 "ㅈㅕㅇ"을 제대로 음절로 표시하는 반면 "져ㅇ"은 제대로 표시하지 못한다.

mediawiki의 잘못일까?  유니코드 표준을 충분히 구현하지 않은 세상의 한글 글꼴들 잘못일까?


표준은 중요하지만, 표준보다 더 많은 것을 고려해야 할 때도 있고, 표준을 어기는 소프트웨어들을 욕만 할 수는 없고 맞춰야 할 때도 있다..  표준을 어기지 않으면서 맞추는 방법을 찾아야 겠지만?

2007년 1월 1일 월요일

iceweasel 번역

iceweasel을 실행하는 중에,

사용자 삽입 이미지
fork때문에 의도하지 않은 상황이 발생.  과연 버그일까.

Debian/Ubuntu 사용자는 popular-contest를 써 주세요

프로그래밍을 모르는, 혹은 프로그래밍하기 귀찮은 (...) 사용자가 프리소프트웨어 프로젝트에 기여할 만한 일은 여러가지가 있습니다..  하지만 그 여러가지도 (버그리포트, 번역, 문서, 커뮤니티, ...) 생소한 대부분의 사람들에게는 귀찮기 짝이 없죠.  그래서 이 글을 끝까지 다 보기 전에 끝낼 수 있는, 별로 귀찮지 않은 한 가지 간단한 방법을 떠올렸습니다.  개인정보를 팔 통계 작업에 참여해 주시면 상당한 도움이 됩니다.

데비안/우분투 사용자라면 popularity-contest를 설치하시고, 혹시 이미 설치되어 있다면dpkg-reconfigure 명령으로 이 기능을 사용하도록 설정하십시오.  개인정보를 파는 건 농담이고, popular-contest가 보내는 하드웨어 정보는 무슨 아키텍쳐를 사용하느냐 정도뿐이고 (사실 lspci -v 결과같은 것 좀 수집해 봤으면 좋겠는데), 시스템에 무슨 꾸러미(패키지)가 깔려 있나의 정보만 보냅니다. 

popularity-contest 설정

명시적으로 설정해야만 정보를 보내기 때문에 (당연히 사용자의 명백한 동의가 있어야 되겠죠) 전체 사용자 규모에 비하면 현재 2만명 정도의 통계는 별로 충분한 숫자가 아닙니다.  위에 스크린샷에 쓰여있는 것처럼 CD 만들 때 우선순위를 결정하는 용도에도 쓰이고, 부족한 점을 개선하는 데에도 중요한 자료가 됩니다.  예를 들어 http://popcon.debian.org/unknown/by_vote 여기를 보면 데비안에 없는 아마도 non-free인 꾸러미를 뭘 깔았냐를 볼 수 있고 데비안에 무엇을 개선해야 하는지 참고 자료가 됩니다.  (멀티미디어 툴들, JDK, skype, opera, ...)

데비안의 경우에는 http://popcon.debian.org, 우분투의 경우에는 http://popcon.ubuntu.com 사이트에서 정보를 볼 수 있습니다.

BSD 사용자라면 BSDstats 프로젝트에 참여할 수 있습니다.  (http://openlook.org/blog/1116)