2010. 3. 29.

Shape 출력이 그렇게 만만한게 아니었다.

새로운 언어를 개발하다보면 수도 없는 삽질을 하게 되지만, 언어 문제가 아니라 관련된 툴킷의 문제가 있을줄은 사실 상상도 못했었다.
덕택에 어지간히 삽질을 거듭했고, 겨우 문제를 해결했다.

현재 테스트 중인 프로그램은 Clojure에서 Double Buffering 을 통해 그래픽을 출력하는 부분이다. 솔직히 이게 뭐가 어려울까 내심 방심했다가 한 건했다.
자바에서 Shape을 출력할 때, 방향을 돌려서 출력하는 루틴이 있길래, 이것을 테스트하려고했다.

(defn drawShip [g d]
  (let [shape (Polygon. (int-array [-6 -3 0 3 6 0])
                        (int-array [6 7 7 7 6  -1])
                        6)
        trans_identity (AffineTransform. ) ]
    (doto g
      (.setTransform trans_identity)
      (.translate 20 20)
      (.rotate (Math/toRadians d))
      (.setColor Color/ORANGE)
      (.fill shape))))

Clojure 소스코드에서 Polygon을 만든다음, 적당히 각도를 돌려서 출력하는 부분이다.
setTransform을 해서, translate, rotate를 걸었는데 이 부분이 문제가 될줄은 전혀 상상도 못했던 것..

(defn clear [g]
  (let [trans_identity (AffineTransform. ) ]
    (doto g
      (.setTransform trans_identity)
      (.translate 0 0)
      (.rotate (Math/toRadians 0))
      (.setColor Color/BLACK)
      (.fillRect 0 0 639 479))))

더블 버퍼링을 하려고 메모리 공간을 지우는 부분.. 꽤 양이 많지? 솔직히 clearRect만 호출하면 될줄 알았더만.. 그게 아니었다.
이전에도 말했던 것처럼 Shape을 출력하면서 각도를 돌려가며 출력했더니 clear 루틴에까지 그게 그대로 영향을 주었던 것..
결국 이전에 했던 세팅을 싹 지우고 돌려서야 겨우겨우 성공했다.

해결하고 나니.. 아 이랬구나 하는 생각을 했지.. 실제로 AffineTransform에 관련된 내용을 어디 주의깊게 읽기나할까.. 디자이너가 없어서 그냥 벡터 그래픽으로 그리다보니 우째 이런것도 겪게된다. 나름대로 액땜한걸까?

2010. 3. 24.

프로그래밍 언어의 우열을 논하지 말자

개발자 사이트에서 가장 흔히 벌어지는 엄한 짓이 프로그래밍 언어 벤치마크 놀음이다.
피보나치 벤치마크가 한동안 꽤나 유행했었는데, 이걸두고 난 뻘짓이라고 말한다.

한두문장이 꽤 멋드러지게 써진다고 그 나라말이 훌륭한 것이 아니다. 뜻하는 바를 잘 풀어내고, 원하는 바를 전달하는 것이 언어의 핵심이다. 마찬가지로 프로그래밍 언어는 컴퓨터가 해줬으면 하는 바를 얼마나 잘 표현해내고, 이를 주변의 사람들과 소통하는데 얼마나 잘 쓸 수 있는지가 중요하다.

언어의 구현요소만 가지고 맨날 아웅다웅하기보다는 좀 건설적인 내용을 가지고 얘기를 했으면 하는 바램이다.