2009. 3. 26.

우리가 특별하지 않다면?

예전에 읽은 책에서 인류의 자존심에 상처를 준 3가지 학문적 결과물에 대한 내용이 있었다.

  1. 코페르니쿠스의 지동설 - 지구는 우주의 중심이 아니다.
  2. 다윈의 진화론 - 인간은 처음부터 존재한 것이 아니라, 오랜 진화의 산물이다.
  3. 프로이트의 정신분석학 - 인간은 비합리적이고 결정적인 존재이다.
바로 인간이 특별한 존재라는 것을 부정하는 내용들이다.

이번에 초끈이론에 대한 몇가지 글을 읽으면서 느낀 것은 우리 우주 역시 특별한 것이 아니라는 점이다. 빅뱅은 그나마 우리 우주를 아주 특별한 존재라고 생각할 수 있는 건덕지라도 조금 남겼지만 말이다.

아 직 이론상의 이야기이지만, 우리 우주는 아주 오래전부터 존재해왔으며, 어느날 갑자기 팽창해버린 결과물이다. 그리고 언젠가 다시 수축하게될 수 있고, 또 언젠가 다시 팽창해서 우주가 될 수 있을 것이다. 이런 우주역시 무한히 많이 존재할 가능성이 있으며, 각기 다른 물리법칙이 적용되고 있을 수도 있다고 한다.

길잃은 입자 또는 막의 충돌로 인해서 그냥 생겨버린 우주에서 백몇십억년 동안 진화된 결과물로 태양계와 지구가 생겨났고, 그리고 인류가 진화되서 나온.. 어떻게 보면 아주 흔하디 흔한 확률상의 결과물로 생겨난 것이 우리라면 과연 어떤 느낌이 들까?

고대로부터 내려온 수많은 신화는 지구와 인간이 아주 특별하게 생겨난 것처럼 이야기하면서, 나름 권위를 내세우지만, 어느 시간 갑자기 툭 만들어져버린 우주에서 충분한 시간만 들이면 생겨날 수 있는 확률상의 존재정도로 충분한 존재였다면 이 세상의 모든 종교는 그 의미를 잃어버릴지도 모르겠다. 그래서 몇몇 종교인들이 그토록 과학에 대해서 질색을 하는지도 모를 일이다. 이들은 자신이 특별하다고 믿었던 믿음이 어느 순간 산산히 부서질 때 느낄 그 공허감을 도저히 견딜 수 없을거다.

과학이 발전하면서 세상의 모습을 하나 둘 발견해가면, 끝에는 우리는 절대 특별하지 않은 존재이며, 존재할 확률이 있음으로해서 존재한 것뿐이라는 단순한 명제만을 남길거라 생각한다. (아니, 이미 다 나와버린건가?)

(갈곳이 없네.. 전혀 과학적인 글은 아니지만 걍 과학밸리로~~)

AliceSoft 社 게임을 Wine에서 해보기

Wine 설치이후로 이러저러한 게임을 해보다가 AliceSoft 의 게임을 얻게됐다.

사용하는 데탑이 리눅스였던 관계로 VirtualBox 에 설치해둔 XP로 게임을 하곤했는데 혹시나 Wine에서 바로 돌릴 방법이 없나 찾아보다가 한 시간정도 삽질해서 알아냈다.

일 부의 게임은 자체적인 스크립트 프로그램을 통해서 게임을 실행하는데 현재 4.5 버전까지 나왔고, 이전 3.5버전은 아마  스크립트 엔진 소스가 공개되었던 것으로 기억한다. 여기서 가능한 것은 이 스크립트 엔진을 통한 어드벤쳐형 게임들이다.

필요한 준비물은 다음과 같다.

  1. 설치할 게임디스크
  2. 윈도에 설치해두었던 레지스트리 파일
  3. 텍스트 에디터
1번은 두말할 나위도 없고.. 일단 해당하는 시디안에 GAMEDATA 디렉토리 내용을 통째로 들어서 디스크로 복사한다.

다음에 wine으로 regedit 프로그램을 열어서 2번의 파일을 레지스트리 내부로 가져온다.
AliceSoft 의 게임은 System.ini에 레지스트리 위치를 기록해두는데 HKEY_CURRENT_USER\Software\AliceSoft 에 대부분 위치한다. 원본 레지스트리 파일에서 이 부분을 통째로 내보내기를 통해 저장해두면 된다.

이제 텍스트 에디터에서 System.ini안에 일본어로 정해진 레지스트리 경로명, ain 파일 이름을 적절히 변경해준다.

마지막으로 Wine 에서 레지스트리를 열어 주어진 값을 살펴보면, 각종 파일의 이름을 기록해둔 것을 볼 수 있다.
이 파일을 적당히 영어로 변경하고, 마지막으로 복사해둔 파일 내용역시 해당하는 이름으로 맞춰서 변경한다.

레지스트리내 파일 이름과 실제 파일 이름이 매치만 되면 게임 실행에는 큰 어려움이 없다.

wine 에서는 게임 설치시에 일본어로 되어있는 파일 복사에 번번히 실패하게되는데 인스톨 디렉토리에 있는 setup.ini랑 gamedata 디렉토리에 있는 파일들을 적절하게 이름만 바꿔주면 아마 이런 과정없이 설치가 될 것으로 보지만.. 내 경우에는 이미 설치가 되어 있어서 약간 삽질을 해보았다.

2009. 3. 14.

오래된 기록 매체...

집에서 몇몇 잡동사니를 정리하다가 5.25인치와 3.5인치 디스켓 몇장이 굴러 나왔다. 예전에 MSX랑 386컴을 쓰던 시절의 게임이 나왔다. 내용물을 확인할 방법이 없어 빛바랜 라벨을 확인해보니  디스켓 게임(이스, D대시, 울티마 6등)과 유틸리티(코렐 드로우, PCTools등)였다. 아마도 어딘가에는 이 때 쓰던 각종 데이터가 들어있을 디스켓이 있을 것이다. 지금으로서는 확인이 불가능하지만...



386컴을 처음 샀을때가 92년이었다. 대학교 입학 선물로 엄청 큰 돈 들여 집에서 구매해주셨고, 덕분에 4년 내내 각종리포트랑 게임을 하면서 - 물론 바로 곧이어 등장한 486에 힘없이 떠밀리지만 - 컴퓨터쪽으로 밥을 먹게 되는 단초가 되었으니,추억이라면 훌륭한 추억이 될지도 모르겠다.

처음에 컴퓨터를 본 것이 국민학교-초등학교라는 말은 아직도 어색하다-5학년때, 친구집에서 본 삼성 SPC-1000 이었다. 이 기종에는 테이프 리더가 붙어 있어서, 각종 프로그램을 테이프에저장하고, 로드할 수 있었다. 지금보면 웃음밖에 안나오지만 당시에는 짧으면 5분에서 길분 한시간 넘게 기다려서 게임을 로딩하고,실행되는 것을 보면서 정말 엄청나게 즐거워했다. (물론 한시간 넘게 로딩해서 에러가 나면 다시 도루묵이 되버리는 바람에뒤집어지는 상황은 불유쾌하지만 말이다.)

당 시에 사용하던 테이프랑 롬팩(가장 처음 사용해봤던 컴퓨터는 대우CPC-800이던가로 기억한다. MSX 기종이었다)은 아직도 집 한켠에 자리 잡고 있지만, 이 데이터는 이제는 돌려볼 수가없다. 미디어가 맛이 가는 것은 둘째치고, 테이프나 롬팩을 읽을 수 있는 장비가 내게는 존재하지 않는 것이다.

불과 20여년 만에 특정 기록매체를 확인할 방법이 거의 사라져 버린 것이다.
만약 집에 테이프, 롬팩, 5.25인치 디스켓, 3.25인치 디스켓을 가지고 있다 하더라도, 이 매체 안의 데이터를 확인해보려면 꽤나 불편한 과정을 거쳐야한다거나 어쩌면 아예 볼 수 있는 기기가 사라져버릴 수도 있다.

플 로피 디스켓이 나오면서 테이프 저장매체는 자리를 잃었고, 이번에는 CD가, 곧이어 DVD가 계속 나오게 되었고, 마침내 현재에는USB같은 매체가 주류를 이루게 되었다. - 하드 디스크는 아직 그 자리를 굳건히 지키고 있지만 SSD같은 매체가 위협을 하고 있다.

지금 가지고 있는 매체안의 데이터를 얼마나 오래 사용할 수 있을까?
데이터가 파괴될지 모른다는 위험은 둘째치더라도, 당장 지금 저장한 데이터를 읽을 기기가 언젠가 사라질지도 모른다는, 정말 상상할 수 없는 상황이 언제든지 벌어질 수 있다. 예전에 각종 데이터를 저장해뒀던 플로피 데이터를 현재 사용할 수 없는 것처럼 - 매체의 데이터 보존성은 차치하더라도 - 지금 우리가 사용하는 USB데이터는 수십년, 아니 수년안에 읽을 수 없을 미래의 모습은 충분히 가능할 것이다.

얼 마나 많은 데이터를 모으고 축적할 것인가에 대해서는 잘 알면서도, 우리가 현재 사용하는 데이터를 어떻게 남겨야 시간이 지난 후에도 이 데이터를 사용할 수 있을 것인가에 대한 논의는 너무나 미약한 것 같다. 과연 우리 자손이 우리가 소소하게 남기는 각종 데이터를 그 때에도 충분히 참고할 수 있을까?

어떤 사람들은 인터넷을 통해 충분히 수많은 데이터를 보존할 수 있다고 말할지도 모른다. 하지만 서비스하는 회사가 사라지는 순간, 수많은 데이터는 너무나 어이없이 사라지는 모습을, 너무나 흔하게 보고 있다. 추억이 어린 사진, 치기 어리지만 순순했던 시기의 글들, 당시에는 너무나 치열하게 고민했던 생각들... 이런 기록을 10년, 20년이 지나 누군가가 볼 수 있을지는 여전히 불확실하다. 네띠앙이나, 하이텔같은 서비스가 접히면서 얼마나 많은 기록들이 접근하기 불가능하게 되었는지는 상상도 할 수 없을 정도니까..

우리가 가진 기록매체를 얼마나 신뢰할 수 있을까? 현재 나오고 있는 출판물이라고 해도, 그 보존기간은 수십년을 넘기가 어렵다. 수천년전에 진흙에 쐐기로 새기고, 구워서 남긴 고대의 기록이나, 조상들이 남긴 서책들앞에, 한순간에 불면 날아갈 것 같은 우리의 기록은 왠지 초라한듯한 생각이 든다.

2009. 1. 18.

Windows 7 to Ship in Multiple Versions?

Tom's hardware의 뉴스에서 읽었다.

The five versions of Windows 7 are as follows: Starter, Home Basic, Home Premium, Business and Ultimate.

이렇다는 얘기다. 현재 나와있는 베타 버전은 Ultimate 버전에 준한다고 하는데.. 다른 여타의 버전에서는 여러 가지 기능이나 차단막이 쳐질 것 같은 분위기인데...

2000, XP, 2003, Vista같은 경우에 여러가지 버전이 있었는데 개발하면서 더 까탈스럽기만 했던 것 같다. Program Files에 대한 접근 문제가 불거졌던 XP 의 경험같은 것이 아직도 생생한데 , 다섯가지 버전 설치에 맞는 가이드라인을 잡으려면 꽤나 고생할 듯한 기분이 든다.

누구를 위한 버전 분리인지는 두고 봐야할 듯 싶다..

2009. 1. 4.

LISP 웹 플밍을 위한 기초설정

기본적으로 CGI모듈로 동작하는 LISP 스크립트를 웹에서 사용하려면 몇가지 작업을 해야한다.

1. 웹서버/CGI Charset 세팅

먼저 아파치 웹서버에서 디폴트 캐릭터셋을 설정한다. 이 파일은 /etc/apache2/conf.d/charset 에 있다.

#AddDefaultCharset UTF-8

이라고 되어 있는 내역을 주석을 지우고(# 문자를 없애면 된다) 원하는 Charset으로 설정한다.

다음에는 CGI Charset을 수정해야한다.
LISP 스크립트 맨 첫째줄에 있는

#!/usr/bin/clisp


을

#!/usr/bin/clisp -E utf-8


로 수정해 준다.

2. 파일 로딩시 Charset 세팅

LISP파일을 로딩할 때 캐릭터 셋을 설정해준다.

(load "test.lsp" :external-format charset:utf-8)

이것을 해주지 않는다면 로딩시 중간이 잘리거나, 에러가 날 수 있다.

2008. 12. 30.

SDL 다중 Surface 예제

뭉기적 뭉기적 거리다가 생각난김에 코딩해서 작성해봄..

SDL 에서는 CREATE-SURFACE 로 surface를 생성한 다음 BLIT-SURFACE 로 *default-surface* 에 복사하면 출력이 가능하다.

먼저 surface 를 저장할 리스트를 선언한다.
(defparameter *test-surface* nil)

다음에 지정한 색상으로  리스트 안의 모든 surface 를 칠할 함수

<br />(defun fill_surfaces (list_sf color)<br />  (cond ((null list_sf) nil)<br />		(t <br />		 (sdl:fill-surface color :surface (car list_sf))<br />		 (fill_surfaces (cdr list_sf) color))))<br />



이제 리스트 안의 모든 surface 를 Bit-Blit 으로 디폴트 surface 에 복사하는 함수


<br />(defun blit_surfaces (list_sf)<br />  (cond ((null list_sf) nil)<br />		(t<br />		 (sdl:blit-surface (car list_sf))<br />		 (blit_surfaces (cdr list_sf)))))<br />



완성된 테스트 코드..


<br />(defun surface-test ()<br />  (sdl:with-init ()<br />	(sdl:window 320 240 :title-caption "SDL-TTF Font Example")<br />	(push (sdl:create-surface 50 60) *test-surface*)<br />	(push (sdl:create-surface 50 60 :x 100 :y 120) *test-surface*)<br />	(fill_surfaces *test-surface* sdl:*white*)<br />    (blit_surfaces *test-surface*)<br />	(sdl:with-events ()<br />		(:quit-event () <br />		    (setf *test-surface* nil)<br />		    t)<br />		(:video-expose-event () (sdl:update-display))<br />		(:idle () (sdl:update-display)))))<br />


다음번에는 Timer관련해서 애니메이션을 시켜보도록 하겠다..

2008. 12. 10.

CLISP 에서 한글 출력(UTF-8, euc-kr)

현재 리눅스(데비안 Lenny)에서 Emacs로 LISP 스크립트를 구성하고 있다.
그러다보니 한글 출력에 몇가지 애로 사항이 생긴다. FORMAT 함수등에서 일어나는 문제이다.

(format t "한글을 씁니다")


라고 입력하는 경우 이를 명령어 행에서 실행시켜보면 다음과 같은 에러가 나온다.

siabard@devel02:~/project/lisp$ clisp hantest.lisp
*** - invalid byte sequence #xC7 #xD1 in CHARSET:UTF-8 conversion

즉 UTF-8에서 가능한 캐릭터 코딩이 아니라는 말이다.

이제 Emacs에서 캐릭터 셋을 utf-8로 바꾼다. (C-x C-m f 를 순서대로 누르고 utf-8을 입력)

siabard@devel02:~/project/lisp$ clisp hantest.lisp
한글을 씁니다

정상적으로 출력되는 것을 볼 수 있다. 그렇다면 euc-kr 로 출력을 원한다면 어떻게 해야할까?

이 경우는 Emacs에서 먼저 캐릭터 셋을 korean-iso-8bit-unix 로 저장을 한다. 그리고 clisp 실행시 -E 옵션을 주어 출력을 한다.

siabard@devel02:~/project/lisp$ clisp -E euc-kr hantest.lisp
�ѱ��� ���ϴ

글자가 깨진 이유는 현재 필자가 사용하는 터미널의 문자셋이 en_US.UTF-8이기 때문이다. 유니코드면 다 되기때문에 굳이 ko_KR.EUC_KR 같은 다른 셋은 사용하지 않는다.