[작성자:] snowall

  • Melotopia I – revised edition #1

    * 97년에 처음으로 시작한 첫 판타지 소설 Melotopia를 개정하여 다시 연재합니다. 인터넷 어딘가에서 떠돌고 있는 불법복사판을 받아서 읽어보신 분들은 뭐 그냥 유치한 판타지 소설 하나 읽었거니 생각하시길 바랍니다. 물론 개정판 역시 유치함은 그대로 남아있으니 실망하지 마시기 바랍니다. 당시 유행하던 무협소설과 판타지 소설의 영향을 강하게 받았음을 부정하지 않으며 오히려 현대에 이르러서는 신선한 맛이 느껴질 수도 있는 부분이므로 스토리 진행은 그대로 갑니다.

    [세계, 하나의 땅]

    아주 먼 옛날, 이 세상이 만들어 졌다. 45억년 전이라 하자. 아마 대충 그때쯤 욀 것 같다. 태고부터 있었던 혼돈을 바로잡아 신은 땅을 만들었고, 그 땅에 이것저것 신경써서 생명과 물질을 창조하였다. 그리고, 땅 위를 인간계라 불렀고,그곳에는 인간이락 부르는 지적인 존재가 살았다. 세상의 혼돈은 없어졌지만 인간이 가진 마음속의 혼돈은 어떻게 하고싶지 않았다. 하지만 그 속의 악을 그대로 놔두었다간 자신에게 도전할지도 모른다는 생각이 들었다. 그래서 신은 언제 뛰쳐나올지 모르는 악을 가두기 위하여 땅 속에, 인간이 아무리 삽질을 해도 도달할 수 없는 깊은 곳에 악을 가두는 지옥을 만들었다.

    인간은 생각을 할 줄 아는 생물중의 하나였고, 인간들은 세상의 모든 것을 지배하고 있다고 생각하고 있었다. 착각에 불과한 생각이지만 그것을 알지 못한 채 사람들은 차츰 오만해지게 되었다. 결국 이러한 오만함에 인간들은 자신들이 신의 능력조차도 지배할 수 있을 것이라고 생각하게 되는 지경에 이르렀다. 이것을 모를리 없는 신은 모든 인간들을 지옥으로 몰아넣고 인간계에 새로운 지적 생명체를 만들려고 했었다. 하지만 인간들에게는 다양성이라는 것이 있어서, 많은 인간들이 오만함에 물들어 있었지만 그렇지 않고 신을 경배하며 살아가는 인간들 또한 존재하였다. 그들이 서로 도우며 진화해 나가는 모습을 보려고 남겨두었는데,너무 착한 나머지 욕망이 없어서 문명을 발전시키지를 않을 것이 예상되는 것이다. 여러가지로 고민한 끝에, 인간을 모두 세 부류로 분류하여 일부는 지옥으로 내리고, 일부는 천계로 올렸다. 이러한 광경은 인간들 사이에서 전설로 전해지고 있다. 그래서 새로 만들어진 세상이 천계. 이제 이야기가 시작된다.

    마계의 인간들을 악마라 칭하며 모든 악의 근원이 되리라!

    인간계의 인간들을 인간이라 칭하며 모든 문명의 근원이 되리라!

    천계의 인간들을 천사라 칭하며 모든 선의 근원이 되리라!

  • 자동 눈금자 알고리즘

    그래프 그리는 프로그램을 보면 눈금자가 적당히 그려진다.

    가령, 그래프가 출력되는 범위가 13부터 30까지라면, 눈금자가 15, 20, 25, 30의 위치에 그려져 있는 뭐 그런거. 격자(grid)를 그린다고도 한다.

    이런건 어떻게 구현 할 수 있을까?

    Gnuplot같은 오픈소스 프로그램을 보면 알 수 있겠지만, 난 다른 사람이 만든 프로그램을 뜯어볼 정도로 고수도 아니고 의지도 없으므로 직접 만들어 보기로 했다.

    아래의 소스는 구간의 길이를 적당히 판단해서, 1단위, 2단위, 5단위로 눈금의 위치를 출력하는 알고리즘이다.

    비주얼 베이직으로 소스를 만들어 보았다. 물론 이 소스는 아마 제대로 작동하지 않을 것이며 (보안상 그렇다. 난 당연히 작동하는 소스를 이용하고 있다.) 공부한 후 직접 작동하도록 고쳐서 쓰는 것은 숙제이다.

    Function determineTics(min, max) As Double()

    d = max – min 일단 양쪽 끝 값의 차이를 알아서, 얼마나 긴 구간을 그려야 하는지 조사한다.

    tics(0) = 0 첫 값은 그냥 0이라고 해 두자. 아무 의미 없다.

    If d < 0 Then
    Return tics 만약 구간 길이가 음수라면, 최대값이 최소값보다 작은 경우이므로 아무 의미 없는 값을 돌려준다.

    End If

    digit = CInt(System.Math.Floor(System.Math.Log10(d))) 자리수가 몇자리인지 세야 한다. 자리수는 상용로그에서 지표값이 된다. 따라서 상용로그를 계산한 후 올린다. 가령, 10은 상용로그값이 1인데 2자리수이며, 0.1은 상용로그값이 -1인데 이런건 0자리수라고 치자.

    이제, 가수를 계산하자.

    added = System.Math.Log10(d) – CDbl(digit) 이건 가수를 뜻한다. 가수는 상용로그 값의 소수부분을 말한다. 잘 모르겠으면 고등학교 수학 교과서에서 로그함수 부분을 찾아보도록 하자. 어떤 수의 소수부분은 당연히 그 수에서 정수부분을 빼면 된다.

    If added >= 0 And added < System.Math.Log10(2) Then 만약 가수가 0보다 크고 2의 상용로그값보다 크면 눈금의 크기는 2눈금이 된다.
    s = System.Math.Log10(2)

    ElseIf added > System.Math.Log10(2) And added < System.Math.Log10(5) Then 마찬가지로 2의 상용로그값보다 크고 5의 상용로그값보다 작으면 5눈금이 된다.
    s = System.Math.Log10(5)

    Else

    s = 1 나머지는 1눈금으로 가자.

    End If

    diff = System.Math.Pow(10, s + CDbl(digit – 1)) 이것은 눈금자 사이의 간격을 말한다.

    beginning = System.Math.Floor(min / System.Math.Pow(10, digit)) * System.Math.Pow(10, digit) 이것은 최초 시작하는 값이다. 전체 구간의 시작부분보다는 큰 값이면서 눈금에 해당하는 곳을 찾아낸다.

    If beginning < min Then
    beginning += diff 만약을 위해, 혹시 눈금의 시작값이 구간의 시작부분보다 작다면 한칸 더해준다. 아마 한칸만 더하면 될 것이다. 두칸이나 틀릴수는 없다고 생각한다.

    End If

    tics(0) = beginning 이제 되돌려줄 배열의 최초값을 설정한다.

    Dim i As Integer = 1 원래는 for문을 쓰고 싶었지만 구간이 도대체 얼마나 될지 알수가 없으니까 무한반복문을 쓰고 중간에 빠져나오도록 했다.

    Do

    ReDim Preserve tics(i) 한칸 늘려주고

    tics(i) = tics(i – 1) + diff 그 다음칸의 값은 앞에 있던 칸에다가 눈금의 간격만큼을 더한 값이다

    If tics(i) + diff >= max Then 만약 그 다음값이 구간의 끝값을 넘어갈 것 같으면

    Exit Do 끝낸다

    End If

    i += 1 아니면 한단계 더 올리고 다시 반복하자.

    Loop

    Return tics 이제 배열을 되돌려 주면 된다.

    End Function

    문제 : 그럼, 로그 눈금으로 그리고 싶으면 어떻게 하면 될까?

    답 :

    newtic = determineTics(System.Math.Floor(System.Math.Log10(min)), System.Math.Ceiling(System.Math.Log10(max)))

  • 광화문광장, 다시

    오래간만에 고향 집에 왔다.

    광화문 광장에서 새벽에 버스를 타는데, 가로수 밑에서 아래에서 위로 빛을 뿜어내는 조명이 너무 눈이 부셨다. 이 조명 위에서는 책도 읽을 수 없고 버스를 기다리기도 힘들다. 너무 눈이 부셨다. 새벽 1시가 되니까 꺼지더라.

    보기에 이쁘긴 하지만, 오히려 불편해서 공공디자인으로서는 빵점이라고 생각한다. 좀 더 편리한 디자인은 못하는 걸까? 설마 이정도가 우리나라 디자이너들의 역량의 한계인가?

  • 대한민국


    http://news.donga.com/fbin/output?f=b_s&n=200909030474&top20=1

    “게임하듯 직장다니면 성공” 이라는 기사가 나왔다. 게임을 하듯이 미친듯이, 하루종일 일하고 멀티태스킹에 자원관리를 효율적으로 한다면 성공할 수밖에 없다는 내용이다.

    하지만 한국에서 일하는 대부분의 직장인은 이미 그렇게 하고 있다는게 문제. -_-;

    모두가 만렙이면 의미가 없잖어…

  • 이론 vs 전산 vs 실험

    이건 그냥 내 개인적인 의견이다. 실제와는 다를 수 있음을 미리 밝혀두며, 진로 선택에 참고해서 좋은 결과가 나오든 나쁜 결과가 나오든 나랑은 관련이 없다. 내가 모든것을 다 아는것이 아니기에 틀린 내용이나 현실과 다른 내용이 있을 수 있다. 그리고 내가 선호하는 바에 따른 편견이 충분히 반영되어 있음도 고려하고, 어떤 특정 분야를 비하하거나 찬양하기 위한 글도 아님을 알아두면서 읽어야 한다. 그냥 재미를 위한 글이다.

    이론물리

    연구 방법론 : 실험결과와 수치 계산 결과와 수학적 계산 결과를 잘 일치하도록 모형을 만들고, 가설을 바꿔가면서 앞으로 어떤 실험 결과가 나올지 제시한다. 그리고 가설을 검증하기 위하여 어떤 실험이 필요한지 제시한다.

    특징 : 일반 사무직에 가까운 업무 특성을 갖고 있다.

    특히 요구되는 능력 : 수학, 논리적 사고, 상상력, 폭넓은 독서, 정보검색

    전산물리

    연구 방법론 : 이론적 모형으로부터 실험결과를 설명할 수 있는 컴퓨터 계산 결과를 만들어 내고, 모형과 매개변수들을 바꿔가면서 앞으로 어떤 이론이 실험과 일치할 것인지 제시한다. 그리고 모형과 매개변수가 어떤 값이 맞는지 검증하기 위하여 어떤 실험이 필요한지 제시한다.

    특징 : IT계열 전산직에 가까운 업무 특성을 갖고 있다.

    특히 요구되는 능력 : 수학, 체력, 정보검색

    실험물리

    연구 방법론 : 이론에서 유도된 결론을 검증하고 전산물리의 결과를 검증하기 위해 실험을 수행하여 실제로 그런 일들이 일어나는지 검증한다.

    특징 : 영업직과 공장 근로자에 가까운 업무 특성을 갖고 있다.

    특히 요구되는 능력 : 체력, 상상력, 정보검색, 정치력, 돈

  • 끝을 바라보며…

    3주간의 Extreme Experiments가 끝났다. 피곤한 일이다.

    앞으로 844일 남았구나. 이제 36개월중 8개월 채웠구나. 이제 22%가 지나갔구나.

    사는건 갈수록 힘들어 질 거라고 예상하고 있었지만, 인간은 사실 습관적으로 “이보다 더 힘든 일은 앞으로 오지 않을 거야”라고 생각하곤 한다. 그런 생각은 틀린다. 앞으로 더 힘든 일이 오지 않을 거라는 생각은 지금 하는 일이 가장 힘들기 때문에 하는 생각이다. 나보고 다시 고3으로 되돌아가서 입시 공부를 하라면 정말 여유롭게 잘 할 수 있을 것 같다. (물론 나이도 19살로 되돌려줘야…)

    전에도 얘기했지만, 사는건 언제나 지금이 가장 힘들다. 그걸 하루하루 간신히 버텨내면서 사는 것 같다. 어떤 희망을 갖고, 어떤 미래를 바라보며, 어떤 꿈을 꾸고 있는지 모르지만, 희망과 미래와 꿈 같은건 아무래도 좋다. 살아있는건 현재일 뿐이니까. 미래는 경험한적도 없고, 과거는 다시 경험할 수 없다.

    어쨌든, 앞으로 몸이 피곤하지 않을 것 같은 날은 없을 것 같다. 쭉…

    상쾌한 기분을 느껴본지가 꽤 오래된 것 같다. 최소한 5년은 넘었다.

  • 묘한 연관성

    12시에 잤는데 새벽 4시에 깨버렸다.

    잠이 안와서 TV를 켰다.

    채널을 돌리다 보니…

    기독교 방송, 천주교 방송, 불교방송 사이에 낚시TV가 끼어 있었다.

    오늘의 교훈 : 위장의 용량 실험은 잠들기 전에 하지 말자.

  • 위장의 용량 실험

    공복 상태에서 체중을 재고, 배부르게 물을 마신 후에 체중을 쟀다.

    400g차이가 난다.

    따라서 내 위장의 용량은 400ml이다.

  • 양자 컴퓨터

    양자 컴퓨터에 관한 개론서를 한권 빌려서 읽었다. 물리와 수학과 전산을 전공한 나이지만…

    Pritincples of Quantum Computation and Information, Volume I : Basic Concepts

    (by Giuliano Benenty, Giulio Casati, Giuliano Strini)

    도저히 이해가 되지 않는다. -_-;

    일단 양자상태를 어떻게든 얽히도록 만들어서, 적당한 게이트에 통과시킨 후, 원래 구하려고 한 x를 측정하면 나머지 한 상태는 f(x)가 된다는 것이 확실하니까, 이제 나머지 한 상태를 측정하면 된다.

    이게 기본적인 알고리즘(?)인데…(패러다임이랄까.)

    대충 내용을 보니까 모든 양자 게이트는 기본적인 2개의 게이트(Hadamard, phase-shift)를 잘 조합해서 만들 수 있다.

    특징적인 것은, 모든 계산을 한번에 할 수 있다는 점. (모든 계산을 한번에 하는건 좋지만, 모든 답을 한번에 얻을 수는 없다. 당연하겠지만, 뒤섞인 양자 상태에서 측정을 하면 그 상태로 확률밀도함수가 붕괴되어 버리기 때문에 다른 답은 더이상 알아내지 못하게 된다. 그래도 한번에 계산을 하는게 좀 멋지지 않은가.

    나중에 방통대에서 정보통계학과도 전공해볼 생각인데, 수학, 전산, 통계를 복수전공으로 깔고 물리 전공중에 입자물리학 이론과 레이저-플라즈마 실험을 공부하고나서 도대체 뭐가 이 모든 것과 연관이 있을까 생각하다가 양자 컴퓨터에 관심을 갖게 되었다. 근데, 분명 이건 가장 기초적인 개론서 같은데 이해가 안된다. 다른 책을 찾아봐야겠다.

    이건 (전산, 물리)가 아니라 (물리x전산)이라고 해야 하나.

  • 일중독?

    내가 하루에 16시간씩 일하고 주말에도 계속해서 12시간 넘게 일하는걸 보고 누군가는 내가 일중독(워커홀릭, Workerholic)이 아니냐고 생각할 수도 있다. 하지만 난 절대 일중독이 아니다. 난 정말 쉬고 싶은데 일을 시키니까 하는 것 뿐이다. 일밖에 할게 없고, 쉬는 날도 일하는게 휴식이라면 중독된거겠지만, 내게 이건 어디까지나 누가 시켜서 하는 일이고 정말 하고싶은 일은 아니다.

    물론 연구소에서 연구하고 있는 분야는 대단히 흥미로운 분야이고 어떻게 결과가 나올지 궁금하기도 하면서, 내가 고생한 것들이 좋은 결과가 나오기를 기대하고 있다. 그건 당연한 일이다. 젊어서 고생은 사서도 한다지만, 별로 하고 싶지 않다. 그건 해본 사람들의 말이겠지.

    행정직은 야근하고 휴일근무하면 수당 나오고 대체휴일 쓸 수 있다는데, 연구직은 왜 안될까. 한주일에 100시간 일하는게 쉬워보이나? 제한된 시간 내에 좋은 성과를 내기 위해서 야근도 하고 밤샘도 하고 휴일에도 나와서 일할 수는 있다. 하지만 그걸 노력으로 인정받지 못하고, 1주일에 40시간 근무해서 할 수 있는 일을 게으르거나 멍청해서 100시간씩이나 한 것으로 취급받는 느낌이 든다. 그럴리가 있겠나. 그건 원래 100시간 걸리는 일이고, 원래는 2주 넘게 걸리는 일이다. 그렇다고 내가 그걸 뜯어 고치기 위해서 입법부에 투신할 수도 없는 노릇이고. 그걸 뜯어 고치려고 전태일 열사처럼 분신할 수도 없는 노릇이다.

    어제는 박사님이 연구소에서 박사학위 해볼 생각은 없냐고 물어보셨다. 그말은, 내가 이 연구소에서 대략 8년을 있게 된다는 뜻이다. 지금 8개월도 끔찍한데 8년은 너무 길다. 사람이 싫은것도 아니고 연구소가 싫은것도 아니고 연구분야가 나쁜것도 아니지만 내가 원하는게 정확히 뭔지 결정하지 못한 상태에서 그냥 흘러가듯이 하던걸 계속 하는건 맘에 들지 않는다. 물론 내가 여기서 학위를 하게 되면 전문성은 높아질 것이다. 하지만 과연 그래도 좋은가.

    어차피 고생을 할 거라면, 내가 하고싶은 분야에서 하고 싶다. 난 그 무엇에도 중독되지 않고 싶다.

    추가 : 결국 오늘(일요일)도 출근한다. 이것으로 3주간 휴일없이 출근하는 기록이 세워졌다…