Strict Standards: Non-static method Soojung::addReferer() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/settings.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/lifthrasiir/sites/sapzil.info/soojung/settings.php:79) in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Counter.class.php on line 63

Strict Standards: Non-static method Entry::getEntry() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/entry.php on line 51

Strict Standards: Non-static method Soojung::entryIdToFilename() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Entry.class.php on line 182

Strict Standards: Non-static method Soojung::queryFilenameMatch() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Soojung.class.php on line 55
TokigunStudio3 | 블로그: TinyP2P 얘기 두 번째

내용으로 바로 넘어 가기


TokigunStudio3

228 / 3282   


더 이상 이 블로그는 운영되지 않습니다. 새 블로그로 가 주세요.

TinyP2P 얘기 두 번째

2004/12/24 AM 08:26 | 컴퓨터/WWW | 2 comments | 0 trackbacks | AllBlog: vote, to pocket

일러두기: 자는 동안(즉 24일 새벽)에 LikeJAzz 님께서 무려 이런 글을 써서 올리셨다;; LikeJAzz 님 감사합니다! :)

이 글은 아래 글을 이해하는 데 조금 더 편하라고 써 놓는 글이다. -_-;;;;

TinyP2P가 나온 후 비슷한 류의 다른 프로그램들이 쏟아...져 나온 건 아니지만 아무튼 다른 언어로 같은 기능을 하는 프로그램들이 나왔다. vim과 emacs, C/C++에서 brace 놓는 위치, 심지어 파이썬에도 하드 탭과 소프트 탭 사용자들 사이에서 계속 말들이 많이 나는데, 일명 성전(聖戰)이라 불린다. 다른 말로 하면, 이번 일도 프로그래밍 언어들 사이의 성전이라 할 수 있겠다.

지금 현재 상황은 다음과 같다:

TinyP2P 1.0 (by Edward Felten; Python + XML-RPC 라이브러리): 15줄, 1003바이트
처음에 나온 것. f("blahblah",2,"../something")과 같이 함수를 호출해서 다른 곳에 있는 파일을 가져 올 수 있다는 보안 버그가 있으며, 바이너리 파일을 처리하지 못 한다. (사실은 multi-byte 파일 이름도 못 쓴다;;)
혹시나 XML-RPC가 뭔지 모르실 분을 위해서 간단하게 설명하자면, 원격으로 다른 서버에서 지원하는 method를 호출할 수 있는, HTTP+XML 기반의 프로토콜이다. 파이썬에서는 xmlrpclib으로 간편하게 사용할 수 있다.

TinyP2P 1.1 (by Kang Seonghoon): 9줄, 718바이트
지금 내가 만들어서 /.에 올린 게 이거다. xmlrpclib.Binary로 변환해서 올리게 되어 있기 때문에 바이너리 파일도 제대로 올라 가긴 하지만, 아직 버그는 그대로 남아 있다. (그래도 코드 줄인 게 어디냐)

Molester 0.0.4 (by Matthew Skala; Perl): 6줄, 466바이트
소켓 라이브러리만을 사용하는 버전. 현재 나온 것 중 가장 짧다. (처음엔 9줄이었다) 보안 버그 등이 현재 없는 걸로 알려져 있다.

아직은 이름이 없지만 아무튼 Ruby 버전-_- (by Florian Gross; Ruby + DRb 라이브러리): 6줄, 485바이트
처음에 올라 왔던 건 DRb 라이브러리의 특성 때문에 버그가 있었는데 (내가 영어가 딸려서 정확한 지는 모르지만) 고쳐진 것 같다. DRb 라이브러리는 XML-RPC과 비슷한 기능을 가지는 루비스러운 라이브러리이다. (아마 XML-RPC와 프로토콜은 다를 것 같은데 나도 루비를 잘 모르기 때문에 모르겠다.)

파이썬 버전도 아마 얼마 안 지나서 7줄 정도의 버전이 나올 것으로 보인다. (TinyP2P는 아직 고칠 점이 많다!) 가장 복병은 lambda 같이 "단어 단위"로 나오는 토큰들인데; 아무튼... 그렇다 치고, Molester를 만든 Matthew Skala는 이 성전-_-에 참여하려는 사람들을 위해서 다음과 같은 가이드라인을 제시하고 있다.

- 어떤 언어든 상관 없음.
- 인터프리터를 호출하기 위한 부분(she-bang line 같은 것들)은 길이에 포함하지 않지만, exec() 같은 걸로 호출할 수 있는 외부 유틸리티(쉘 스크립트가 아니라면 ls 같은 유틸리티도 포함)는 쓸 수 없다.
- 물론 보안 버그는 없어야-_-;;;
- 암호 같이 외부인의 사용을 막을 수 있는 어떤 장치가 있어야 한다.
- TCP 수준보다 더 높은 프로토콜 라이브러리는 쓰지 않는다.
- 기본 설정에 포함되어 있지 않은 라이브러리도 쓰지 않는다. (이건 파이썬이 유리하네 -_-;)
- 사용자가 그 파일을 가지고 있는 곳을 알지 않더라도 네트워크에 접속만 하면 파일을 받아 갈 수 있어야 한다. (P2P 프로그램이니깐. -_-)

중요한 것은, 지금 이 조건을 모두 만족하는 프로그램은 Molester 밖에 없다는 것이다. -_-; (TinyP2P와 저기 위에 있는 루비 버전 모두 다 이미 만들어진 -- ready-made -- 서버 라이브러리를 쓰고 있고, 이 라이브러리들은 TCP보다 고수준의 프로토콜을 사용한다. TinyP2P에는 덤으로 보안 버그도 있다.) 하지만 내 생각에는 TCP보다 고수준의 프로토콜을 사용해도 사실 상관은 없다고 생각하고, import p2p;p2p.doit() 이 따위의 라이브러리만 아니라면-_- 충분히 할 만한 가치는 있다고 생각한다.

/.에는 이 성전에 대한 사람들의 의견들이 쏟아지고 있다. 어떤 사람은 "Molester는 수십 줄의 펄 코드를 그냥 한 줄에 이어 붙인 것에 불과하지만, TinyP2P는 (lambda 트릭을 사용했을망정) 문장 수에서는 훨씬 앞선다"고 주장하기도 하고 있고, 다른 사람은 golfing을 하고 있다고 하질 않나... (golfing 맞긴 맞다. 뭔 말인 지는 아래 참고) 아무튼 시끄럽긴 한 모양이다. -_-;;; 역시 성전이라고 하는 것은 힘든 일이다.


덧. 이 쪽 분야에서 golf라고 하는 것은 코드를 최대한 줄이는 것을 의미한다. 골프의 목적은 타수(stroke)를 줄이는 것인데, 이와 마찬가지로 코드를 최대한 줄이는 것 역시 키를 입력하는 횟수(keystroke)를 줄이는 게 목적이기 때문에 유래한 이름이다. 펄은 원래 이런 거 하기 좋은 언어라서-_- 사람들이 하나의 프로그램을 최대한 코드를 줄여서 짜는 대회가 꽤나 많이 열렸는데, 그 중 유명한 걸로 Perl Golf가 있다. 근데 왜 내가 위에서저런 말을 했냐 하면 서로 다른 언어 사이의 golfing은 드문 일이기 때문에... :)

덧2. Molester 홈페이지에 올라 온 Ruby로 만든 6줄짜리 P2P 프로그램 소개 페이지에 nohmad 님 블로그가 소개되었는데, 글쎄 babelfish 번역을 돌렸더만. 자세히 보면 ruby라고 질쏘냐.As ruby quality sso nya.으로 번역된 걸 확인할 수 있다. 이런! -_-;

덧3. 저기 나온 바이트 수는 물론 주석 뺀 바이트 수이다. TinyP2P 1.1 같은 경우 맨 마지막에 ;('_')가 붙어 있는 이건 80칸 채우려고 그냥 집어 넣은 거라서 빠졌다.

TrackBack URL: http://sapzil.info/soojung/trackback.php?blogid=263

Comment: Daybreaker (2004/12/24 PM 07:46)

Babelfish로 휴먼테크에 낼 논문 초록 영역하는 게 가장 좋지 않을까? (퍽! -_-)

Comment: 토끼군 (2004/12/24 PM 10:26)

Daybreaker: 너무 지나친 발상이다. 자제해라;

Copyright (c) 1995-2005, Kang Seonghoon (Tokigun).