Cmake를 이용한 version 관리

cmake는 요즘 오픈소스 프로젝트에서 많이 사용되는 build system이다. autotools를 이용해서 배포하는 경우에는 UNIX에 기본적으로 설치되어있는 도구들을 이용하기 때문에 autotools 자체가 필요하지 않다는 장점이 있지만, 사용하기가 어려워 사람들이 꺼려하는 것 같다. 뿐만아니라 다양한 platform 에서 사용할 수 없다.

python으로 작성된 Scons, waf 등 도 있는데, 사용해보지 않아서 할 말은 없지만 …

more ...

Pack and Unpack Binary Data

Data Structure를 (파일에 저장하고) 네트워크를 통해 전송하는 수 많은 방법들이 있다.

padding없이 만든 struct, POD class 등 을 그대로 memcpy할 수도 있는데, Endian 처리를 잘 해줘야 하며 유지보수할 때 실수를 할 가능성이 많다.

플랫폼뿐만 아니라 프로그래밍 언어 사이에서도 Data를 교환할 수 있도록 한 여러 라이브러리, 프레임워크 등 이 많다. protocol …

more ...

SICP Exercise 1.16

b^2 = b * b
b^4 = b^2 * b^2
b^8 = b^4 * b^4

로 부터 아래와 같은 규칙을 얻는다.

b^n = (b^(n/2))^2 if n is even
b^n = b * b^(n-1) if n is odd

이 것을 Big Theta (log n) growth를 갖는 procedure로 …

more ...

SICP Exercise 1.12

파스칼의 삼각형 문제이다. 문제 자체는 뭘 계산하라는 건지 좀 모호한데, 그냥 주어진 위치의 값을 결과로 내는 procedure를 만들었다. 위치는 (행, 열) 형식이다.

다른 사람들도 이런 식으로 생각한 것같다.

SICP Exercise 1.12

;; Pascal's triangle
;;
;; notation: (row, column)
;;
;;   1            (1, 1)
;;  1 1       (2, 1)  (2, 2)
;; 1 2 1 …
more ...

SICP Exercise 1.11

f(n) = n if n > 3
f(n) = f(n-1) + 2f(n-2) + 3f(n-3) if n >= 3

f(n)을 recursive process와 iterative process로 작성하는 문제이다.

내가 기억하기로는 (책에서), 조엘 스폴스키는 C와 같은 언어를 이용해서 recursive function을 만드는 사람을 채용하지 않는다고 했는데, stack overflow가 발생할 수 있기 때문이다. 일정한 space만 …

more ...

SICP Exercise 1.8

세 제곱근을 구하는 문제다. exercise 1.7의 improve procedure만 바꿔주면 된다.

SICP Exercise 1.8

(define (cuberoot-iter guess prev-guess x)
  (if (good-enough? guess prev-guess)
    guess
    (cuberoot-iter (improve guess x) guess x)))

(define (improve guess x)
  (/ (+ (/ x (square guess))
        (* 2 guess))
     3))

(define (square x)
  (* x x))

(define (cube x)
  (* x …
more ...

SICP Exercise 1.7

원래 책에 소개된 코드는 square를 취한 결과를 x와 비교해서 적당한 값이라고 생각되면 값을 반환하게 되어있다. 1.7 문제는 이 코드를 개선하라는 것인데, 너무 작은 값이나 큰 값에 대해서 정확하게 동작하지 않기 때문이다.

floating-point 타입의 정밀도 한계때문에 아주 작은 값에 대해서 정확한 값을 얻지 못하고, 아주 큰 값에 대해서는 비효율적이거나 값을 …

more ...

SICP Exercise 1.6

SICP (Structure and Interpretation of Computer Programs)를 공부하는 사람이 꽤 많은 듯 하다. 관련 블로그도 많고, 다 볼 수 있을지 모르겠지만, How To Design Programs 살 때 덤으로 산건데 이걸 먼저 보고 있다..

아무튼 Exercise 1.6 은 cond 를 이용해 if 를 대체하는 procedure를 만들어 사용하면 어떻게 되느냐 …

more ...

SICP Exercise 1.3

cond 여러 개를 쭉 늘어 놓았다가, 결국 다음 코드처럼 간결하게..

(define (square x)
  (* x x))

(define (sum-square-2big a b c)
  (cond ((>= a b) (+ (square a) (square (max b c))))
        (else (+ (square b) (square (max a c))))
        ))

;; test
(if (= 0 (sum-square-2big 0 0 0)) #t #f)
(if (= 2 (sum-square-2big -1 -1 …
more ...