manywaypark's Blog
개발, 검색, 함수

일단 잡담부터...
서버쪽에서는 하드웨어 문제나 안정성 때문에 웬만하면 그냥 Dapper LTS를 쓰려고했는데, sbcl이 0.9.8에서 더이상 버전이 안올라 가는 듯보였다. 내가 필요한 thread 및 timer기능이 온전하게 돌아가는 버전이 아니었다.

그래서 손쉬운 방법으로 서버 한대를 Edgy로 업그레이드를 해버렸다. 그런데, 이놈이 자주 죽는거 같더니 마지막으로는 부트파티션이 깨졌다. Orz.
아무래도 SATA RAID랑 궁합이 잘 안맞는다는 추측만 했다. 결론은 역시 LTS 버전이 안정적이라는 것.

이제 여기부터 backport이야기...
그래서 SBCL을 backport해보기로 했다.
날로 먹어버리겠다는 일념으로(좀 얍삽한가?) IDC에 있는 서버중에 동일 아키텍쳐(AMD64)에 Feisty가 깔려있는 곳에서 sbcl의 버전을 확인했더니 1.0이다. 충분하다! 그래서 그 머신에서 "apt-get source"로 소스를 받은 다음 통째로 Dapper LTS가 깔린 곳에 옮겨서 debian package를 만들었다.

"dpkg -i"".deb"파일을 설치하면 끝
이라고 생각했는데, 그게 아니였다. common-lisp-controller의 버전이 너무 낮다고 불평을 했다.
살짝 좌절했다. '이거 common-lisp-controller 하나만 더 가지고 온다고 될까? 그 놈을 설치하려면 또 다른 놈(들)에게 의존성이 걸려있는거 아닐까? 결국에는 시스템 전체 업그레이드?' 불안이 밀려왔다. 그래도 해보는데까지는 해보기로 했다. 어차피 내 잘못으로 빚어진 일이니 내 손으로 끝장을 봐야했다(데스크탑(edgy)에서 열심히 개발하고 서버(dapper)에 올리니 안돌아갔다. Orz).

비장한 각오로 common-lisp-controller를 위의 과정과 똑같이 backport했더니 그냥 해결됐다.
잠시 비장했던 마음가짐이 아까웠다.

잡설끝.

설치에 관한 간략한 설명:
  1. 먼저 dapper 박스에 sbcl이 안깔려 있다면 일단 깐다.
    ~$ sudo apt-get install sbcl
  2. 첨부파일을 다운로드 후에 적당한 곳에 압축을 풀고 패키지 두 개를 설치한다 (md5sum 체크도 한번 해주면 좋다).
    ~$ tar xvzf sbcl_1.0.0.0-1~dapper1_amd64.tgz
    ~$ sudo dpkg -i common-lisp-controller_6.1~dapper1_all.deb
    ~$ sudo dpkg -i sbcl_1.0.0.0-1~dapper1_amd64.deb
  3. 실행해보고 버전 확인한다.
    ~$ sbcl --version
    SBCL 1.0

대충 package cache 디렉토리 뒤져서 눈짐작으로 버전과 아키텍쳐사이에 ~dapper1을 넣는 것이 backport한 패키지의 명명법이란 것을 추측했는데 정확한 건지는 잘 모르겠다.
하고 나서 보니 backport라기보다는 build가 아닐까 하는 생각도 좀 든다. ^^;

happy hackin'

"apt-get install devscripts build-essential fakeroot" 으로 대충 build에 필요한 기본 패키지들을 깔고,
만약 less를 빌드한다면 다음과 같이 해서 소스 받고 build에 필요한(의존성이 있는) 패키지들을 깔고

~$ apt-get source less
~$ apt-get build-dep less
빌드한다.
~$ cd less-###/
~$ fakeroot ./debian/rules binary

"../less_###_XXX.deb"가 생성된다.

"dpkg -i less_###_XXX.deb" 로 시스템에 설치할 수 있다.

"dpkg-deb -c less_###_XXX.deb" 로 .deb 파일의 내용을 확인할 수도 있다 (다른 사람이 만들어 놓은 .deb 파일을 구했을 때는 한번 해보는 것이 좋을 듯).

참고: http://www.debian-administration.org/articles/20 (약간 오래된 글이라 ./debian/rules를 사용하지 않는 듯하다.)

happy hackin'
apache2에 mod_lisp2 를 설치하는 방법을 간단히 설명한다.
  1. mod_lisp2.c 다운로드 (http://www.fractalconcept.com/asp/html/mod_lisp.html)

  2. 컴파일 및 설치 (gcc, apxs2 필요):
    sudo apxs2 -i -c mod_lisp2.c
    /usr/lib/apache2/modulesmod_lisp2.so가 설치 되었는지 확인.

  3. apache2 설정:
    /etc/apache2/mods-available/ 에 다음 내용의 파일을 적당한 이름(lisp.load)으로 저장.
    LoadModule lisp_module /usr/lib/apache2/modules/mod_lisp2.so
    모듈 활성화:
    sudo ln -s /etc/apache2/mods-available/lisp.load /etc/apache2/mods-enabled/lisp.load
     
  4. apache2 재시작:
    sudo /etc/init.d/apache2 restart
    /var/log/apache2/error.log 파일에 다음과 같은 로그가 찍히는지 확인.
    [Mon Oct 08 22:00:38 2007] [notice] caught SIGTERM, shutting down
    [Mon Oct 08 22:00:39 2007] [notice] Apache/2.0.55 (Ubuntu) mod_lisp2/1.3.1 configured -- resuming normal operations

happy hackin'


방금 KLDP에 Debian Binary Package Building HOWTO 한글 번역을 올렸다.

happy hackin'

TAG debian, Linux, unix

Linux에서 java 한글 글꼴 설정

java 2007.10.01 16:30 by manywaypark
먼저 Windows의 윤곽선 글꼴을 쓰기 위해,
Windows의 %windir%\Fonts 디렉토리의 batang.ttc, gulim.ttc를 리눅스의 ~/.fonts 디렉토리로 복사한다.
http://bebop.emstone.com/research/linux/ubuntu_java15_hangul/view에서 다운로드 받은 fontconfig.properties 파일을 /usr/lib/jvm/java-1.5.0-sun/jre/lib에 복사한다.
fontconfig.properties 내의 /home/lethean/을  $HOME으로 변경한다.

java application에서 멋지게 나오는 한글을 감상한다.

happy hackin'




이젠 Lisp Hacker가 되고싶다.

잡담 2007.08.21 20:05 by manywaypark
아주 어렸을 적에 나는 프로그래머가 되고 싶었다.
92년 겨울, ARS로 지원한 대학의 전산과 합격을 확인하고부터 나는 프로그래머의 길에 들어서게되었다.
(사실, 중2때 아버지의 발주(?)로 베이직을 이용해 작은 프로그램을 만들어 드리고 당시 중학생으로서는 거금인 5만원을 받았을 때 이미 professional programmer였다고 가끔 주장하기도 한다.)

근래에 lisp을 현업에 적용하고 있다.
물론, 특유의 learning curve 때문에 좀 고생한 면이 있지만 현재로선 아주 만족스럽다.

이젠 Lisp Hacker가 되고싶다.
내 마지막 도구가 되어줄지도 모른다는 막연한 기대와 함께......

happy hackin'
TAG Lisp

산 자여 따르라.

잡담 2007.08.15 03:32 by manywaypark
새벽에 영화를 봤다.
마지막에 약간은 편곡된 그 곡이 흘렀다.

산 자여 따르라...
여기서 산자는 생물학적으로 산 사람이 아니다.
의식이 깨어 있는 사람이다.

사랑도, 명예도, 이름도 남김 없이...
약간은 억지스러운 스토리도 권력욕으로 학살을 자행한 놈들보다 억지스럽지는 않았다.

동지는 간데 없고 깃발만 나부껴...
동지들은 싸늘하게 식었거나, 이탈했다.
깃발은 우리가 다시 드높이 들어야한다.

그리고,
전 재산이 이씹팔만원인 전전통께서는 두발 뻗고 잘 주무시는지 참 궁금하다.
그 이씹팔만원 모을라고 그 많은 피를 봤던가?

현재 진행중인 프로젝트에 cl-ftp를 사용해 자동화 하는 모듈을 작성 중이다. 그런데 cl-ftp의 기능들 중 내가 원하는 기능은 대부분 잘 작동했다. 제일 중요한 파일 다운로드만 빼고... T.T
약간의 공부와, 약간의 삽질 끝에 cl-ftp를 조금 손보았더니 제대로 동작했다.
내경우에는 다음과 같은 에러를 내면서 파일 다운로드가 실패했다.
error message:
The value -117 is not of type (UNSIGNED-BYTE 8).
  [Condition of type TYPE-ERROR]
msb가  1인 바이트가 음수로 읽혀지는 듯했다 (나중에 확인해본 결과 실제로 그랬다).
ftp.lisp의 소스를 좀 뒤졌더니 소켓을 생성할 때 cl-acl-compat 패키지의 acl-socket.lisp 내의 make-socket()을 이용해 소켓을 생성하고 있었다. 다음은 make-socket()의 일부다.
(defun make-socket (&key
......
(let ((element-type (ecase format
(:text 'base-char)
(:binary 'signed-byte)
(:bivalent 'unsigned-byte)))
......
ftp.lisp에서는 make-socket()을 부를 때 :binary 또는 :text를 사용할 수 있으며, :binary의 경우 (unsigned-byte 8) stream에, :text의 경우 character stream에 저장하게 되어있었다. 양쪽에서 :binary를 처리하는 방식이 다르니 에러가 날수 밖에 없어 보였다.
데이터 전송 소켓 생성 부분인 ftp.lispestablish-data-transfer()에서,
;;; ftp.lisp
;;; change underlined :binary to :bivalent.
(defmethod establish-data-transfer
......
(let ((data-socket
(make-socket :remote-host dtp-hostname
:remote-port dtp-port
:format (ecase type
((:binary :image) :binary)
(:ascii :text)))))
......
(let ((server-socket (setup-port conn
:format (ecase type
((:binary :image)
:binary)
(:ascii :text)))))
......
밑줄친 :binary를 전부 :bivalent로 바꾼후 테스트를 해보니 정상적으로 동작했다.

편의를 위해 패치를 첨부한다.
patch file:
--- ftp.lisp.ORIG       2007-08-04 16:44:18.000000000 +0900
+++ ftp.lisp 2007-08-04 18:09:20.000000000 +0900
@@ -307,7 +307,7 @@
(make-socket :remote-host dtp-hostname
:remote-port dtp-port
:format (ecase type
- ((:binary :image) :binary)
+ ((:binary :image) :bivalent)
(:ascii :text)))))
(when (and rest (integerp rest))
(send-raw-line conn (format nil "REST ~A" rest)))
@@ -317,7 +317,7 @@
(let ((server-socket (setup-port conn
:format (ecase type
((:binary :image)
- :binary)
+ :bivalent)
(:ascii :text)))))
(unwind-protect
(progn

테스트환경은 cl-ftp 1.3.3-1, sbcl, ubuntu edgy box이고 기본적인 시스템 정보는 다음과 같다.
$ sbcl --version
SBCL 0.9.14
$ uname -a
Linux hyper-server 2.6.17-12-386 #2 Mon Jul 16 19:35:45 UTC 2007 i686 GNU/Linux

패치를 데비안 패키지 관리자에게 보내긴 했는데 적용될지는 잘 모르겠다.

happy hackin'



TAG cl-ftp, ftp, Lisp
얼마전에 emacs를 21에서 22으로 버전업을 했는데, 미니 버퍼에서의 자동 완성 기능이 동작하지 않았다.
M-x 후에 몇 글자 입력하고 tab을 눌렀을 때 분명히 자동완성이 존재하는 문자열임에도 불구하고 "No completions of blabla~~"라고 표시되며 동작하지 않았다.
검색을 해도 쉽게 나오진 않았는데, 해결법은 의외로 간단했다. 참고
.emacs 파일에서 다음과 같은 라인을 찾아서
;; find a line like this in .emacs
(define-key minibuffer-local-map [tab] 'comint-dynamic-complete)
다음과 같이 바꾼다.
;; replace the line with this line
(define-key minibuffer-local-map "\t" 'comint-dynamic-complete)

emacs 새 버전의 reader의 구현이나 설정이 "[tab]" 같은 형태의 입력을 못 받아들이는 듯하다.

happy hackin'

종교의 자유에 대한 소고

잡담 2007.06.30 02:36 by manywaypark
약간 늦은 저녁식사를 위해 근처의 음식점을 찾았다.
예약을 안하고 저녁 식사를 하러간 탓에 좀 기다려서야 자리에 앉을 수 있었는데, 우리가 앉은 옆테이블에는 대여섯명쯤 되는 남녀들이 앉아서 식사를 하고 있었다.
처음에 대충 곁눈질로 봤지만, 청년부터 중장년까지 연령대도 다양해 보였고 어디서나 볼수 있는 모습들이었기에 별로 신경을 쓰지는 않았다.
우리 일행은 일상적인 담소를 나누며, 식사를 하고있었는데 옆테이블의 분위기가 처음과는 사뭇 달라졌다.
처음에는 신변잡기적인 일상적 대화가 오가는 듯했었으나, 잠시후부터 목소리 톤이 높아지며 무슨 종교집회처럼 큰소리로 말끝마다 하느님, 예수님이 붙고 이스라엘에서 만나가 하늘에서 내리는것을 목격했다는 등의 나로서는 이해하기 힘든 말들을 꼭 음식점 전체에 방송이라도 하듯 외치고있었던것이다.

대한민국 헌법 20조에는 "모든 국민은 종교의 자유를 가진다."라고 명시되어있다.
이 조항의 의미가 과연 종교를 강요해도 된다는 뜻일까?
이교도(그들의 표현)의 식사시간을 불쾌하게 해도 된다는 것일까?

지나친 전도주의에 경도되어 공공장소에서 다른 종교를 가진 사람이나 종교가 없는 사람이면 충분히 불쾌하게 여길만한 언사를 불특정 다수에게 외치고 다니는 사람들을 쉽게 볼 수 있다. 그 사람 입장에서는 모종의 사명감을 띠고 그런 행동을 하는 것일 수도 있겠으나, 그런 행동이 과연 신자를 늘리는데 도움이 되었는지는 정말 의문이 든다. 시쳇말로 지능형 안티일 것이다라고 진지하게 생각해 본 적도 있다. 즉, 타종교(연합)에서 그런 사람들을 풀어놓아 음해공작을 펴는 것일 수도 있다고 말이다.

목소리가 커야, 판에 박은 듯한 빠른 말투로 말해야, 노출증에 다름없는 공공장소에서의 간증을 해야 믿음이 생기거나 커지는 것은 아닐텐데 왜들 그런 방법을 너도나도 쓰려고 하는지 이해하기 힘들다. 전체적인 이미지의 실추를 생각한다면 조용히 내면을 성찰하고있는 대다수의 다른 신자들에게도 어느 정도 폐를 끼치는 행동일것이다.

한때 나는 "저는 불자입니다"라는 한마디 말(물론 거짓말)을 섞기 싫어서 불자의 증표를 손목에 하고 다니면서 길거리 전도를 시도하는 사람들에게 손목을 살짝 보여주고 무시하며 지나치던 시절도 있었다.
오늘처럼 소음공해에 시달릴 것에 대비할라치면 이젠 목탁을 준비해야하나? 불경을 외워야하나?
역시 말을 섞지 않으려면 목탁을 준비하는 편이 나을듯하다.

happy hackin'
TAG 종교
1 ··· 24 25 26 27 28 29 30 
분류 전체보기 (295)
잡담 (20)
함수형 언어 (62)
emacs (16)
java (18)
tips & tricks (147)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)