Passion, Work, Good, Focus, Push, Serve, Ideas, Persist

열정, 노력, 잘하는 것을 만들어라, 집중, 의지, 다른이가 필요한 것을 줘라, 아이디어, 인내


http://www.ted.com/talks/lang/ko/richard_st_john_s_8_secrets_of_success.html


아래 대사가 귀에 들어오네요 ㅋㅋ

"It's not always easy to push yourself, and that's why they invented mothers."

'etc' 카테고리의 다른 글

프로그래밍 입문 교육 자료 - http://www.programmingbasics.org/en/  (0) 2012.08.20
New Rally X - BGM  (2) 2012.04.30
TED - 8가지 성공의 비결  (0) 2012.04.24
Use the Magic Trackpad with your Windows PC  (0) 2012.03.06
Tron 게임  (0) 2012.02.17
퍼포먼스를 위한 발악  (2) 2012.02.11

Posted by 류종택

Step 1: Download this patch (available for Windows 32-bit and 64-bit) from the Apple website but don’t run it yet. It’s an executable file but it won’t run on your Windows Desktop since it is intended only for users who are running Windows inside a Mac desktop using Boot Camp.

Step 2. Download a copy of 7-zip and extract the contents of the exe file that you’ve downloaded in the previous step.

Step 3. This will create a new file called “BootCampUpdate32.msp” – extract the contents of this file as well using 7-zip again.

Step 4. You’ll now have several sub-folders that are named like BootCamp3135*. One of these folders will have a file called “Binary.AppleWirelessTrackpad_Bin” – just add a .exe extension to this file and then double-click to run it.

 
보다 자세한 원문: http://www.labnol.org/software/apple-magic-trackpad-with-windows/14158/ 

트랙패드 설정 바꾸기:  http://www.thewindowsclub.com/apple-magic-trackpad-control-panel-windows-7

'etc' 카테고리의 다른 글

New Rally X - BGM  (2) 2012.04.30
TED - 8가지 성공의 비결  (0) 2012.04.24
Use the Magic Trackpad with your Windows PC  (0) 2012.03.06
Tron 게임  (0) 2012.02.17
퍼포먼스를 위한 발악  (2) 2012.02.11
LED Display  (2) 2012.01.18

Posted by 류종택

Tron 게임

etc 2012.02.17 07:26


초등학교 때였던가?  이게 영화가 있는 것도 모르고, 게임에 빠져들었던 적이 있었는데, PC에서 실행할 수 있는 프로그램이 있어서 올려봅니다.


기억이 참 새롭네요 ^^*

'etc' 카테고리의 다른 글

TED - 8가지 성공의 비결  (0) 2012.04.24
Use the Magic Trackpad with your Windows PC  (0) 2012.03.06
Tron 게임  (0) 2012.02.17
퍼포먼스를 위한 발악  (2) 2012.02.11
LED Display  (2) 2012.01.18
아들 넘의 첫 번 째 게임 - 홀짝 맞추기  (0) 2012.01.17

Posted by 류종택
오래 전부터 습관이 된 탓에 and 조건을 분별할 때에는 항상 확률이 낮은 것부터 나열하도록 신경을 쓰고 있었습니다.  그러다가, 요즘 PC에서 그런 것이 과연 얼마나 퍼포먼스 향상에 도움이 될 까 궁굼해 졌습니다.  바로 테스트에 들어 갔습니다.

[소스 1]
procedure TForm1.Button1Click(Sender: TObject);
var
  Tick : Cardinal;
  Loop, a, b : integer;
begin
  Tick := GetTickCount;

  for Loop := 1 to 100000000 do begin
      a := Random(2);
      b := Random(100);
//      if (a = 1) and (b = 1) then Tag := Tag + 1;
      if (b = 1) and (a = 1) then Tag := Tag + 1;
  end;

  Caption := IntToStr(GetTickCount - Tick);
end;
11: 라인과 12: 라인이 오늘의 주인공입니다.  결과적으로 똑같은 두 문장의 속도 차이는 아래와 같습니다.
  • 11: 라인 평균 1200 ms 정도
  • 12: 라인 평균 730 ms 정도
and 문장에서는 앞에서 false가 판별되었을 경우 다음 조건을 검사하지 않기 때문에 확률이 낮은 것을 먼저 분별하면 성능에 도움이 됩니다.  or 에서는 반대로 확률이 높은 것부터 나열하는 것이 조금이나마 이득이 됩니다.

근래에는 PC의 성능이 워낙에 좋아졌기 때문에 일반적인 경우 퍼포먼스에 대한 고민을 많이 할 필요가 없었졌습니다.  하지만, 스마트폰, 게임 및 증권 시스템 트레이딩과 같이 반복 계산이 많은 프로젝트 등에서는 이런 작은 차이들이 엄청난 결과를 만들어 내기도 합니다.

그렇긴 해도 반복 횟수를 감안하면 상당한 뻘짓이네요 ^^; 

'etc' 카테고리의 다른 글

Use the Magic Trackpad with your Windows PC  (0) 2012.03.06
Tron 게임  (0) 2012.02.17
퍼포먼스를 위한 발악  (2) 2012.02.11
LED Display  (2) 2012.01.18
아들 넘의 첫 번 째 게임 - 홀짝 맞추기  (0) 2012.01.17
유치원생을 위한 프로그래밍 세 번 째 날  (0) 2011.12.26

Posted by 류종택

LED Display

etc 2012.01.18 21:49
http://codingdojang.com/scode/314 에 제시된 문제를 풀어 본 것 입니다.

[소스 1]
program Sample;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  TextCanvas in 'TextCanvas.pas',
  DigitFont in 'DigitFont.pas';

var
  DigitFont : TDigitFont;

begin
  DigitFont := TDigitFont.Create;
  try
    DigitFont.FontSize := 1;
    DigitFont.WriteDigit('01234');
    WriteLn;

    DigitFont.FontSize := 2;
    DigitFont.WriteDigit('56789');
  finally
    DigitFont.Free;
  end;

  Write('Press any key...');
  ReadLn;
end.
문제대로 파일을 읽고 등등은 생략 ^^;
문제의 핵심을 폰트 크기와 숫자를 LED 디스플레이로 표시하는 것으로 압축하고, 거기에 해당하는 인터페이스를 가진 클래스 제작하였습니다.  그리고, 실행 결과는 [그림 1]과 같습니다.

[그림 1] 실행 결과 

[소스 2] TDigitFont 클래스의 중요 부분
procedure TDigitFont.WriteDigit(Digit:string);
const
  _FontWidth  = 3;
  _FontHeight = 5;
var
  sFontData : string;
  Loop: Integer;
begin
  FCanvas.Width  := Length(Digit) * (FontSize + 1) * _FontWidth;
  FCanvas.Height := FontSize * _FontHeight;
  FCanvas.Clear;

  for Loop := 0 to Length(Digit)-1 do begin
    // 현재 폰트를 찍을 위치로
    FCanvas.MoveTo(Loop * (FontSize + 1) * _FontWidth, 0);

    // 현재 폰트의 벡터 정보 가져오기
    sFontData := _DigitFontData[Ord(Digit[Loop+1]) - Ord('0')];
    draw_Digit(sFontData);
  end;

  FCanvas.Draw;
end;

procedure TDigitFont.draw_Digit(FontData: string);
var
  Loop : Integer;
begin
  for Loop := 1 to Length(FontData) do begin
    case FontData[Loop] of
      'l': FCanvas.MoveLeft;
      'r': FCanvas.MoveRight;
      'd': FCanvas.MoveDown;
      'u': FCanvas.MoveUp;

      '<': FCanvas.MoveLeft(FontSize);
      '>': FCanvas.MoveRight(FontSize);
      '.': FCanvas.MoveDown(FontSize);
      '^': FCanvas.MoveUp(FontSize);

      'L': FCanvas.LineLeft(FontSize);
      'R': FCanvas.LineRight(FontSize);
      'D': FCanvas.LineDown(FontSize);
      'U': FCanvas.LineUp(FontSize);
    end;
  end;
end;

[소스 3] 벡터 정보
type
const
  _DigitFontData : array [0..9] of string = (
    'dDdDrRuUuUlL',      // 0
    'rrdDdD',            // 1
    'rRdDlLdDrR',        // 2
    'rRdDdDlL^urR',      // 3
    'dDrR^DdD',          // 4
    'rR<ldDrRdDlL',      // 5
    'rLdDrRdDlLuU',      // 6
    'rRdDdD',            // 7
    'rRdDlLdDrRuUl<uU',  // 8
    'd.rLuUrRdDdDlL'     // 9
  );

lrdu : 한 칸 이동 (각각 Left, Right, Down, Up)

<>,^ : 폰트 크기 만큼 이동 (각각 Left, Right, Down, Up)

LRDU : 폰트 크기 만큼 직선 그리기 (각각 Left, Right, Down, Up)


[소스 4]  위에서 사용되는 TTextCanvas 클래스의 인터페이스 (FCanvas) 
type
  TTextCanvas = class
  private
  public
    procedure Clear;

    procedure MoveTo(X,Y:integer);

    procedure MoveLeft(Count:integer = 1);
    procedure MoveRight(Count:integer = 1);
    procedure MoveDown(Count:integer = 1);
    procedure MoveUp(Count:integer = 1);

    procedure LineLeft(Count:integer = 1);
    procedure LineRight(Count:integer = 1);
    procedure LineDown(Count:integer = 1);
    procedure LineUp(Count:integer = 1);

    procedure Draw;

    property X : integer;
    property Y : integer;
    property Width : integer;
    property Height : integer;
  end;

그리고 아래는 전체 소스

디지털 숫자 출력.zip


'etc' 카테고리의 다른 글

Tron 게임  (0) 2012.02.17
퍼포먼스를 위한 발악  (2) 2012.02.11
LED Display  (2) 2012.01.18
아들 넘의 첫 번 째 게임 - 홀짝 맞추기  (0) 2012.01.17
유치원생을 위한 프로그래밍 세 번 째 날  (0) 2011.12.26
유치원생 아들에게 프로그래밍 가르치기  (4) 2011.12.24

Posted by 류종택


   1 : program Step_10;

   2 :

   3 : {$APPTYPE CONSOLE}

   4 :

   5 : {$R *.res}

   6 :

   7 : uses

   8 :   System.SysUtils,

   9 :   BaseTools in '..\..\Lib\BaseTools.pas';

  10 :

  11 : var

  12 :   c : integer;

  13 :   u : integer;

  14 :

  15 : begin

  16 :   Randomize;

  17 :

  18 :   repeat

  19 :     c := Random(2);

  20 :

  21 :     write('0 또는 1 맞추세요: ');

  22 :     readln(u);

  23 :

  24 :     if c = u then writeln('맞았습니다.');

  25 :     if c <> u then writeln('틀렸습니다.');

  26 :

  27 :     writeln('컴퓨터: ', c, 사람: ', u);

  28 :     writeln;

  29 :   until false;

  30 : end.

 

유치원생에게 프로그래밍을 가르치기 위해서 꽤 고민을 해서 교재를 만들고 있습니다.

BaseTools는 입문 교육에 기본적으로 필요한 라이브러리를 몰아 넣으려고 일단 만들어 둔 것 입니다.


"최소한의 지식으로 최대한의 결과를 만들어 낸다"라는 원칙으로 이 간단한 게임을 만들기 위해서,

얼마나 힘이 겨웠는지 ㅠ.ㅠ

(if then else도 안가르치고, if문 만으로 해결 중)


이제 어느 정도 감을 잡은거 같고, 초기보다 더욱 흥미를 가진 거 같아서,

당분간은 쉽게 갈 듯.


줄 맞추기는 수업 끝나고 제가 해준 겁니다.




Posted by 류종택
도영군이 오전에 일어나자 마자 프로그래밍 공부 하자고 졸라서 세 번 째 수업을 마쳤습니다.  오늘은 반복문입니다. 

일단 이미 배웠던 '별표를 그대로 출력해라!" 써라 대신 출력이라는 말로 바꿔서 연습시키고 있습니다.

program Step_03;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  BaseTools in '..\..\Lib\BaseTools.pas';

begin
  write('*');
end.

이미 배운 것이라서 쉽게 따라하더군요.  "이제 반복문을 알려주기 위해서 별표를 반복해서 출력하려면 어떻게 해야 할 까?"라고 물으니  도영군이 바로 아래와 같이 하더군요.

program Step_03;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  BaseTools in '..\..\Lib\BaseTools.pas';

begin
  write('**************************************************************');
end.

켁!  아빠가 졌다.  그래도 일단 진도는 나가기로 했습니다.  "백 만 개를 그려 볼래?"   도영군이 웃더군요.  그제서야 반복문을 소개 할 여유가 생겼습니다.

"영어로 반복이 모지?"
"음..?"
"엄마한테 물어보고 와!"

그렇게 해서 repeat가 반복이고 until은 언제까지 반복해야 하는 지 알려준다고 말해줬습니다.  이 부분이 참으로 마음에 들지 않습니다.  초보를 위해서 그냥 무작정 반복 할 수 있는 예약어를 추가하고 싶더군요.  조건이니 boolean이니 하는 것은 초보에게 너무 버겁기 때문입니다.  어쩔 수 없이 그냥 "until false"를 통째로 끝없이 반복하는 것이라 알려줬습니다.

program Step_03;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  BaseTools in '..\..\Lib\BaseTools.pas';

begin
  repeat
    write('*');
  until false;
end.

그리고, 흥미를 유발하기 위해서 파도 타기 예제를 마무리로 수업을 마쳤습니다.  한 줄 씩 뛰어서 출력하기 위해서는 Line의 약자 Ln을 뒤에 붙인다고 이미 설명을 마쳤었기 때문에, Write 대신 WriteLn을 사용하도록 하였습니다.  줄 맞추기는 나중에 제가 손을 봐줬습니다.

program Step_04;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  BaseTools in '..\..\Lib\BaseTools.pas';

begin
  repeat
    writeln('*');
    writeln('**');
    writeln('***');
    writeln('****');
    writeln('*****');
    writeln('****');
    writeln('***');
    writeln('**');
    writeln('*');
  until false;
end.

파도가 너무 정신없이 흐르기 때문에 느리게 할 필요가 생겼습니다.  

"한 줄 씩 출력하면서 컴퓨터를 자게 만들자!  잠자다가 영어로 모지?"
"Sleep이요"  (대답을 유도하는데 한 참 걸렸음)
"한 줄 출력 하고 난 뒤에 50 셀 때까지 자라고 하자!"

컴퓨터는 숫자를 빨리 센다고 설명해줘야 했고, 밀리세컨드와 같은 불필요한 요소들은 설명을 생략하였습니다.  최소한의 정보로 최대한의 결과를 만들어야 초보자에게 접근하기 쉽기 때문입니다.

마지막 코딩은 제가 도와 줬습니다.   도영군이 이미 독수리 타자를 하는데 지쳐버렸기 때문입니다.

program Step_04;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  BaseTools in '..\..\Lib\BaseTools.pas';

begin
  repeat
    writeln('*');
    sleep(50);

    writeln('**');
    sleep(50);

    writeln('***');
    sleep(50);

    writeln('****');
    sleep(50);

    writeln('*****');
    sleep(50);

    writeln('****');
    sleep(50);

    writeln('***');
    sleep(50);

    writeln('**');
    sleep(50);

    writeln('*');
    sleep(50);
  until false;
end.



 

Posted by 류종택
겨울 방학 동안 아들 넘 프로그래밍을 가르치기로 해서 오늘이 두 번 째 날이었습니다.  보통 프로그래밍 입문하면 피할 수 없는 프로그램이 있습니다.  바로 "Hello, World!" 라고 할 수 있는데, 사실 저는 이는 잘못된 접근 방식이라고 생각합니다.  문자열을 설명하는 것 자체가 상당히 곤혹스러운 일이기 때문입니다.  그냥 "처음에는 일단 외우고 시작하자!" 라는 방식도 어느 정도 효과를 걷을 수 있긴 하지만, 개인적으로는 선호하지 않습니다.

일단 프로젝트 생성 및 저장 등 기본적인 준비는 제가 해주고, begin end. 사이에만 집중하도록 하고 있습니다.

저의 첫 번째 예제는 Write(1 + 2) 입니다.  Write가 실제 의미하는 것과 출력을 살펴보면서 아이가 직관적으로 Write가 하는 일을 알 수 있게 되기 때문입니다.  괄호가 필요한 이유는 설명하지 않았습니다.  모든 것을 다 설명하려다 보면, Write 자체에 집중하기 어려워지기 때문입니다.  이후 자신이 계산하고 싶은 것들을 입력하게 하거나, 가족의 나이를 전부 더하는 것을 미션으로 주었습니다.

두 번 째 날에는 문자열에 대한 설명을 시작하였습니다.  우선 첫 번째 수업의 복습으로 123456789 + 123456789 를 계산하도록 하였습니다.  결과에서 이상한 점을 찾아보라고 하니, 찾아내더군요 ^^*

문자열에 대해서는 우선 Write(1 + 2)를 출력하게 하고, Write('1 + 2')를 이어서 출력하도록 했습니다.  아이가 혼란스러워하더군요.  그래서, 설명을 해주었습니다.  따옴표로 감싸주면 "네가 입력한 그대로 써라(Write)"  그리고, 따옴표가 없으면 "계산한 결과를 써라" 라고 몇 번 반복시키고 차이점을 계속 느낄 수 있도록 하였습니다.  문자열이라는 명칭을 알려주기는 했으나 외울 필요없으니 그런게 있구나 하고 넘어가도록 했습니다.  "입력한 그대로" 만을 잊지 않도록 반복시켰습니다.

다음은 반복문을 통해서 호기심을 유발할 수 있는 예제가 있는데, 이것이 델파이에서는 문제가 되는 군요.  델파이와 같은 일반적인 언어에서 반복문의 수준이 너무 높기 때문입니다.  루비의 경우에는 5.times 와 같이 직관적인 방법이 제공되는데 참으로 아쉽습니다.  최대한 쉬운 반복문을 표현하기 위한 것이 미리 함수를 만들어 두는 것이었고, 사용방법은 아래와 같습니다.
repeat
  WriteLn('*');
until RepeatCount(3);

// 미리 만들어 둔 RepeatCount 함수
var
  _RepeatCount : integer = 0;

function RepeatCount(Count:integer):boolean;
begin
  if _RepeatCount = 0 then _RepeatCount := Count;
  Dec(_RepeatCount);
  Result := _RepeatCount <= 0;
end;

이런 저런 언어를 두고 고심을 많이 했지만, 모든 경우가 제가 원하는 수업 방식에 맞지 않았습니다.  그래서 직접 교육용 언어를 만들고 있었는데, 아들에게 그 언어를 통해서 가르칠 만큼 준비가 되지 않아서 일단 델파이로 가벼운 시작을 하고 있습니다.  내년에는 개인 사업을 시작하기 때문에 교육용 언어 개발은 더욱 지연이 될 거 같네요 ㅠ.ㅠ

여하튼 초보자들을 가르치다보면 가장 힘든 것은 그 수준에 맞춰서 진도를 유지하는 것과, 초보자가 숙련자에게 너무 당연한 것에 대해 의문을 가질 때 그것을 설명해줘야 하는 경우 입니다.



Posted by 류종택


절대 쉽게 생각해서는 안되는 브랜칭 비용.
일반인 고객이 그렇게 생각하는 것은 어느 정도 이해가 되나,
개발자가 그 가치를 이해하지 못한다면 전문가로서 자격이 없다.
 
소스 관리에  대한 비용을 효과적으로 조절하지 못할 경우,
시간이 흐를 수록 엄청난 재앙으로 다가오기 때문이다.
 
바쁜 실무에서 소스 관리가 완벽하리라는 생각은 어리석다.

Posted by 류종택

Is Delphi dying?

etc 2011.11.14 09:38
아래는 델마당에 올린 글 입니다.  꼭, 델파이에 한정된 이야기는 아니라고 생각합니다.
C++ 말고 자바나 다른 언어로 갈아타는 것을 언급하지 않은 이유는 분야 자체가 다르다고 생각했기 때문입니다.
자바 등에 대한 고민은 C++로 옮겨 가는 것보다 더 먼 미래를 위해서 해야 한다고 생각합니다.

-----------------------------------------------------------------------------

델파이를 다루는 사람들에게 요즘 주요 관심사는 새로운 기술이 아니고, 
바로 델파이 자체의 미래인 듯 합니다.

개인적으로는 델파이의 수명이 다하가는 것에 동의 합니다 ㅠ.ㅠ
또 역시 개인적으로는 아직 급할 거 까지는 없다고 생각합니다.

일단 델파이 문제는 델파이 자체의 문제도 있겠지만, 사실 외부의 문제라고 봐야 합니다.
아래의 트랜드를 보시면 Delphi, C++ 문제는 안드로이드 하나만 보더라도 도토리 키재기 입니다.
예전부터 진행된 웹 강세와 근래에 폭풍이 되고 있는 모바일의 강세 때문에 생겨난 결과이기도 합니다.


델파이를 버리고 VC++로 갈아타는 자체도 그다지 좋은 선택처럼 보이지 않습니다.
프리랜서로 일하면서 다양한 업체와 접촉해 보지만, 비주얼 스튜디오 쪽 시장도 그다지 좋은 상태는 아닙니다.

더구나 위의 트랜드는 VC++이 아닌, C++ 전체에 대한 결과입니다.
구글 트랜드를 통해서 모든 것을 장담할 수는 없지만, 
적어도 감각만으로 판단하는 것은 위험하다고 생각합니다.
따라서, 자신의 경험에 의한 판단보다는 검증할 수 있는 자료를 토대로 고민해야 한다고 믿습니다.

“추측할 수 밖에 없는 상황에서 정확성을 고집하지 않는 태도는 자식인의 표시다.”

- 아리스토 텔레스


새로운 언어나 기술을 배우는 것 자체는 권장할만 합니다.
먼 미래를 위해서 차근히 준비해 나가는 것은 개발자로서 당연한 일이라고 생각합니다.
저는 특정 언어에 신의를 지켜야 할 이유를 모르겠습니다.
그래서, 누군가 더 이상 델파이는 안되겠다고 생각했을 때, 
그래도! 델파이를 버리면 안된다고 하고 싶지는 않습니다.

다만, 그것이 당장 눈 앞의 현실을 위해서라면 어리석은 행동이라고 생각합니다.
이미 VC++에 익숙한 상태가 아니라면 이리 저리 세파에 장단만 맞추면서 제 자리 걸음하게 될 것 입니다.

다시 본론으로 들어와서, 델파이가 죽어가는 것보다 더 중요한 문제가 있습니다.
그것은 바로 우리가 "무엇을 하고자 하는 사람이며, 무엇을 하고 있는 가?" 입니다.
근원적인 문제를 해결하지 못한 경우라면, 언어의 선택의 문제가 도움이 되지 않습니다.
근원적인 문제를 고쳐나가는 중이라면, 언어 따위가 걸림돌이 되지 않습니다.

정말 중요한 질문은 바로, "Am I dying?" 입니다.

개인적으로는 예전부터 준비해왔던 솔루션에 집중하고 있습니다.  물론 델파이로 전부 만들고 있습니다.
일부는 VC++, 일부는 GCC로 되어 있긴 하지만, 그저 양념을 친 정도 수준입니다.
하지만, 프리랜서로 들어오는 일의 비중에 C++ 또는 안드로이드 관련 의뢰가 조금씩 생겨나고 있습니다.
델파이만 전문으로 하는 저에게 그런 의뢰를 맡기는 이유는,
언어는 생소하고 경험이 부족하지만, 핵심 기술을 잘 안다고 믿어주기 때문입니다.

가끔 당신은 어떤 프로그래머 입니까? 라고 물었을 때, 
"xx 언어(툴) 개발자 입니다."라는 말을 자주 듣게 되는데..
이는 마치 식당에서 "무엇을 드시겠습니까?" 라고 물었더니 "아침이요!" 라고 대답하는 것 같습니다.

전문가에 길에 들어서느냐?
인터넷에 수없이 떠도는 자조적인 표현으로 "IT 노가다"가 되느냐?
그것은 바로 이런 근원적인 문제에 답을 할 수 있느냐로 가름이 나게 됩니다.
델파이냐? VC++냐? 라는 질문의 답은 도움이 되지 않습니다.

그래서 자칫 "Is Delphi dying?" 가 정말 중요한 문제처럼 보일 지라도,
그에 비해서 "Am I dying?"에 대한 이야기가 더 많았졌으면 합니다.

우주는 영원한가, 아닌가?

우주는 유한(有限)한가? 무한(無限)한가?

영혼과 육체는 동일한 것인가, 별개의 것인가?

여래는 죽은 후에도 존속하는가? 아닌가?

 

이 네가지 질문에 대한 해답을 주지 않는것에 불만을 품은,

'마우룬쿠야 붓다' 라는 제자는,

어느날 석존에게 다가가,

만일 이번에도 해답을 주지 않을 경우에는,

수행을 그만두고 환속하겠다고 말했습니다.

그러나 석존은 다음과 같은 비유를 들어 대답했습니다.

 

"마우루쿤쿠야 붓다여,

여기에 독화살을 맞은 남자가 있다.

친척과 친구들이 의사의 치료를 받도록 아무리 권유를 해도

그는 독화살에 대해 모든 것을 알기전에는

화살을 뽑지 않겠다고 고집부리고 있다.

그 화살을 쏜자는 누구이며,

어떤 신분이며,

피부색은 어떻고,

어디사는 사람인가.

독화살은 어떤 화살이며,

무엇으로 만들어 졌는가.

등에 대해서 만족한 대답을 듣기전에는

치료를 받지 않겠다고 우기고 있다.

그러면 그는 대답을 듣기전에 죽어버리지 않겠는가?"

 

Posted by 류종택


티스토리 툴바