rein’s world

프로그래머, 독서가, 게이머 그리고 블로거

Civilization IV: Beyond the sword  

…질렀다(…)

새하얗게 불태웠어(으득)
아마존에서 알아봤었던 문명 4/문명 4 확장팩이, 확장팩 부분이 북미/APO/FPO 주소만 된다고 나와서 -_-
깔끔하게 포기하고 구매대행을 알아봤음.

아마존 기준 $29.99가 구매대행을 거치면 58,000원이라니 -_- 운송료가 들어가있다지만 폭리다 Orz
(사실 지금 사고싶은 원서가 2권 있어서 그거사는김에 같이 지를까 했는데 GG)

그래서 모 구매대행 사이트(가격이 비싸서 소개해주고 싶진 않다)에서 Civilization IV + Civ. IV exp. “Beyond the sword”를 구입(합계 10.3만)

오는데 한참 걸릴테니(확장팩은 북미에서 한국오고 다시 택배로 배송되야할 듯함) 이것도 괴로운 일인듯;


By rein

July 30th, 2007 at 11:55 am

Posted in Uncategorized

Tags: ,

주말 잡상  

일단 주말 동안 읽은 것, 본 것, 사려고 고민한 것[....]들.

놀이와 예술 그리고 상상력 - 진중권 씨의 미학 산책(…) 정도의 느낌인 책. 사실 주말에 읽었다기보단 목~토 읽은 것. 미학 쪽엔 지식이 눈꼽만큼도 없는 어디의 누구씨가 보기엔 괜찮았음

신곡주계 폴리포니카 1, 2 권 - 서울문화사에서 내놓기 시작한 라이트노벨 중 하나. 뭐랄까 완전히 메이저가 되긴 힘든 정도의 느낌인데 나름대로 볼만했음(애니메이션은 평이 좀 별로였지만 라이트노벨 자체는 나쁘지는 않달까 정도의 느낌)

Pluto 4권 - 우라사와 나오키 씨의 신작. 제 4권. 마지막 부분의 ?????? 사망씬이 참 ㅁ;니ㅏ어;림 했지만[...] 여전히 긴장감 가득한 스토리 라인. 다음권이 보고싶다 ;ㅁ;

코드 기어스 - 막장의반역의 루루슈 24/25화 - 작년 말~올해 초에 봤던 애니메이션 중에 최고라고 생각했던 물건. 총집편을 화수에 포함 안시키는 것은 좋긴했는데, 방영일 수 모자라다고 24/25화를 여름에 합니다라고 하는 센스 -_-; 결국 방영이 되긴 했는데 이제 까지의 의문점을 풀어주지도 않고(아니 2개쯤 해결하긴했나?) k개 증가시켜주는 악랄한 센스.
ps. 루루슈의 사악함은 여전히 마음에 든다[....]

스즈미야 하루히 씨리즈 9권(스즈미야 하루히의 분열) - 사실 다음 권까지 있어야 볼만할 것 같지만(스토리가 반으로 나뉘어서 2권으로 구성된 상태), 여튼 읽기 시작했음. 아직 1/3 정도만 읽어서 최종적인 감상은 나중에;

Civilization IV의 두번째 확장팩 - Beyond the swords - 이 발매되었음(물론 국내에 발매될 일은 없는 것 같지만).

Valve의 Steam에서 원본 + 확장팩(첫번째 확장팩은 제외)이 대략 50달러.

아마존에서는 원본 + 확장팩 팩키지가 없고 따로 따로 구입시 대략 6x달러.

…뭐 그런 관계로 사고 싶긴한데 이미 이번 달 카드 결제액이 만만치 않을 느낌이라는 것 Orz


By rein

July 30th, 2007 at 9:30 am

Posted in Game,

Tags: , ,

log4cxx  

Apache Software Foundation(ASF)log4cxx (cxx는 C++를 영문자만 가지고 표기할 때 많이 사용되는 표현(?)이다) 는 유명한 java 기반 logging library인 log4j 의 C++ 버젼이다. 사실 log4j도 ASF 산하의 프로젝트고, log4net, log4php 등등의 자매 프로젝트들이 널려 있는, MT지원이 잘 되는 로깅 라이브러리들이다.

이걸 써보려고 몇 가지 테스트(?)겸 해서 돌아가던 소스에 붙여 봤다. 일단 장점 몇 가지,

  • 설정이 간편하다 - 쌩노가다로 코드에 구조를 쳐 넣을 수도 있지만, log4j 및 기타 자매 프로젝트들과 동일한 형식을 갖는 설정 파일 혹은 xml 로 표현된 설정파일을 읽어서 로거의 출력 구조를 결정할 수도 있다.
  • 연동되는 툴들이 있다 - chainsaw 라는 java 기반의 GUI 로그 뷰어를 제공한다 (필터링이나 기타 등등 왠간한 로그 뷰어에서 필요한 기능은 대부분 제공한다)
  • 다양한 출력 포맷을 설정 파일 인자 변경만으로 지원한다 - 출력하는 형식( 날짜 -스레드 번호 - 내용으로 한다거나 날짜 - 스레드 번호 - 로거 이름 - 컨텍스트 - 내용 - 스레드 로 한다거나 하는 등등)을 조절하는 일이 설정 파일에서 간단히 이루어진다.
  • 다양한 출력 수단(media)를 제공한다 - 콘솔 출력, 파일 기반 출력(시간 기준 혹은 파일 크기 기준의 log-rotation을 지원)을 지원한다. 그리고 XML 기반의 출력이나, 출력을 소켓을 통해 보내거나 하는 것도 가능하다. Win32 플랫폼을 쓴다면 기반 라이브러리를 몇 개 가져다가 Windows NT event logger에 나오게 할 수도 있다.
  • Threading 기반의 프로그램에서 로깅을 사용하기가 편하다 - 기본적으로 스레딩을 사용하는 프로그램의 로깅을 위해 작성된 라이브러리다.
  • 출력 루틴들이 std::string, std::wstring에 기반으로 해서 돌고(C++스럽다!) 예외 기반의 오류 처리를 한다.

물론 단점도 존재한다.

  • 현재 stable 버젼(0.9.7)으로 나와있는 것은 의미가 없다 - 다음 버젼이 나올 때까지 그냥 svn HEAD를 가져다가 쓰라고 권고하고 있다.
  • Stream-like 출력을 지원하기는 하지만 완전하지 않고, 빠질 가능성도 있다(메일링 아키이브에 이 내용이 -_-)
  • 비동기 출력을 지원하는 부분이 있는데(모든 방식에서 스레딩이 지원되긴 한다), 이 것에서 무한정 블락당하는 경우가 존재한다 - APR(apache portable runtime)을 사용해서 포팅하는 중에 완전히 안된 부분이 있다한다(0.9.8이 정식으로 나올 때가 되어야 완전히 해결될 듯; 내 경우에는 이 출력 방식을 안써서 확인할 수 없었다)
  • 일부 메모리 릭이 생기는 경우가 있다고 한다 - 아직까지 실제로 보지는 못했다.
  • 빌드하기 위해 필요한 것들이 많다 - 직접적으로 dependency가 걸린 apr, apr-util과 빌드하기 위한 각종 툴들(java sdk, ant, cppunit, cpptask, GNU patch/sed 등등)이 있어야한다.
  • 소스 트리가 난감할 정도로 크고, 빌드 툴이 apache ant기반이라 시험적으로 제공되는 msvc 8.0 proj 파일 생성기능을 써야 했다(물론 이것도 ant로 생성한다). 난감하게도 이건 절대 경로 기반의 include path와 DEBUG 버젼의 설정만 만들어진다 - 그래서 현재는 APR, APR-UTIL, log4cxx를 ant 출력 파일을 해석해서 변환하는 스크립트 작업을 시작했다.

계속 읽기: “log4cxx” »


By rein

July 24th, 2007 at 11:23 pm

출근길의 지하철  

N모사의 출근 시간은 공식적으로는 9시입니다[...]

그렇지만 자유로운 분위기의 회사답게 아주 빡빡하게 지키지는 않습니다 - 사실 자기 자신과 팀의 효율이 상승하는 범위 내에서 유연하게 시간을 쓰는 것은 좋은 거라고 믿습니다.

…그러나 이 몸은 국방부 명부에 이름이 올라가 있는 신세인지라, 칼 같이 9시 출근을 해야합니다 Orz
그런 이유로 디락스 밤바
가 아니라;

선릉역 혹은 삼성역 도착 기준으로 8:45~50분 정도를 맞추고 가는데, 이 시간대의 낙성대~삼성(혹은 선릉) 구간은 정말 인구밀도가

o <-<

덥기도 덥거니와 책을 펴 볼 공간도 없어요.

그래서 오늘 도전한 일은 8시 기준 출근하기.
대충 7:20 분에 지하철 역에 도착해서 지하철을 타니 여전히 꽉차긴 하지만 완전히 차지는 않은 정도의 느낌
(9시 도착 기준을 130%로 잡으면 95%랄까 -_- 미묘하게 적습니다)

일단 이번 주는 8시 도전 모드로 출근해보고 한 번쯤 7:30 출근에 도전해 본 다음 쾌적하게 책을 읽거나 할 수 있으면 아예 땡겨 볼려고 합니다.

ps. 삼성 혹은 선릉인 이유는 삼성에서 내리면 +100원, 선릉에서 내리면 +0원이기 때문.


By rein

July 23rd, 2007 at 10:34 pm

Posted in Uncategorized

Tags: ,

오전에 IRC 쓰지 않기  

오늘 Trac - timeline 을 보다가 느낀 점:
오전 시간에 작업한 량이 적다 - 오전 10시 이후(출근은 9시) ~ 오후 1시 사이의 commit이 그 이후 시간대 commit보다 적다
(10시 이전 commit은 아마 전 날 작업 마무리한 것 혹은 svn move를 위한 사전 작업이라고 판단됨)

결심(…)
오전에도 충분한 효율?이 나올 때 까지 오전(혹은 점심 먹고 오기 전)에 IRC 접속하진 말아야지(적어도 앞으로 7월 남은 기간 동안에는)

아무래도 출근 시간 -_- 지하철 (사당-교대 구간은 정말이지 Orz)에 스트레스 받은 것 + 오전이라 좀 졸린 것으로 인해서 생각안하고 잡담을 하게 되는 느낌이니 좀 줄이고 프로그래밍을 하거나 책을 읽거나 코드 리뷰를 하려고 함.


By rein

July 19th, 2007 at 11:31 pm

Posted in Uncategorized

Tags:

빌드는 한 방에 이루어져야 한다  

대부분의 프로젝트는 달랑 한 개의 결과물 - 배포할 프로그램 바이너리일지, 웹 페이지와 디비 등등등일지, 묶여있는 게임 팩키지 일지는 프로젝트마다 다르겠지만 - 만을 내놓는 경우는 없다.

예를 들어서 문자열을 처리하는 라이브러리를 만든다고 하자.

  • blah, blah, blah … 하는 기능을 지원하고(그렇다 치자)
  • utf-8 기반 문자열 버젼과 UCS2기반 문자열 버젼을 제공한다
  • static library (.a / .lib)와 shared library (.so / .dll)를 제공한다
  • Debug 정보를 포함한 버젼과 그렇지 않은 버젼을 제공한다

이제 가능한 조합은 총, 2 × 2 × 2 = 8 가지이다. (예: utf-8 based, static, debug; utf-8 based, shared, release; …. )
이걸 손으로 일일이 만든다는 것은 사실 뻘짓이다. 출시 직전에 이런 일을 해야한다면 실수할 가능성도 생기고 - 많은 프로그래밍 스타일 책에서 지적하는 내용이다 - 귀찮기도 귀찮다. 그리고 이 귀차니즘이 프로그램의 질을 낮추는 원인 중 하나라고 생각한다.

On *nix system - Solaris, BSD-variant, linux, OS X 등등에서는, 간단히 makefile의 매크로(상수 정의?)를 사용하면 된다. 공통된 설정을 하나의 변수로 유지하고 각 설정을 “$(공통설정) $(개별설정)” 하는 식으로 유지하면 된다 - 정보를 여기저기 중복시키는 것은 죄악이다. 실수를 복사하지는 말자 ;)

On Windows system - 딱히 내가 써본(…) Win32 개발 환경이 따로 있는게 아니라 Visual Studio 씨리즈 - VS 6.0, .net 2003, .net 2005 - 뿐인지라 간단히 설명하자면,
VS에서 빌드하는 것은 간단한 명령어로 되며 - devenv SolutionFile.sln /build $(ConfiguraionName) 로 빌드된다 - ,각 설정은 IDE의 configuration manager나 project_name.vcproj 파일을 직접 수정해야 한다는 것이다.
문제는 configuratoin이 각 설정(기본적으로 debug/release가 있으면 추가/수정할 수 있는 구조다) 별로 완전히 별도로 관리돤다라는 점이다. 그래서 각각의 설정이 맞지 않는지 세심히 관찰할 필요가 있다.
(내 경우엔 BuildAll.bat이라는 배치파일을 하나 만들고 거기에서 devenv Solution /build 설정을 모두 한 번씩 실행시키게 했다)
물론 VS에 있는 컴파일러/빌더 등을 직접 불러서 실행시킬 수도 있지만 그런 경우엔 IDE 설정과 스크립트 기반 빌드가 완전히 따로놀게되는 문제가 있다 - 사실 스크립트 기반 빌드 -> IDE설정 반영하기 같은 스크립트를 만들 수 있을것 같긴 하다.

내 짧은 경험으로 생각하기에 간단히(…) 설정할 수 있는 빌드는 이런 툴들을 이용하는 수준이다. 물론 프로그램 바이너리가 만들어졌다고 빌드가 끝나는 것은 아니다. 프로그램을 만들기 전에 필요한 것들을 생성하는 부분도 있어야 할 것이고 완성된 프로그램 바이너리, 각종 리소스 등을 적절히 배치하는 것도 필요하다.

그러나 이런 부분들은 미리 정의한 간단한 리소스 배치 설정 + 해석하는 스크립트(batch건 shell script이건 python script이건간에)면 된다 - 필자는 간단한 xml 문법으로 정의한 리소스 배치 + python을 사용하고 있다 ;)

위의 사항들을 이용해서 바이너리 빌드 + 리소스 배치 스크립트를 만들었으면 한 방에 빌드를 만들어낼 수 있을 것이다 - 사실 처음 설정하기가 귀찮지 그 다음부터는 아주 점진적인 변화만 필요할 것이다.

한 방에 이루어지는 빌드를 지지하는 내용 - 더 읽을거리들

  • 실용주의 프로그래머 (The Programatic Programmer) - 주제 42: 유비쿼터스 자동화
  • C++코딩의 정석 (C++ Coding Standards: 101 Rules, Guidelines, and Best Practices) - 주제 2. 자동화된 빌드 시스템을 이용하라

계속 읽기: “빌드는 한 방에 이루어져야 한다” »


By rein

July 19th, 2007 at 11:19 pm

Posted in Uncategorized

Tags: ,

모종의 순서  

From irc #snucse,

[00:02:50] <x_n_s_z_> 여러분, 작은 설문조사를 하려고 합니다. 좀 쓸데 없는 거지만 (…)
[00:03:01] <x_n_s_z_> `바보 멍청이 해삼’ 다음에는 무엇이 오는 게 자연스럽나요?
[00:03:02] <x_n_s_z_> …
[00:03:14] <ㅇㅋ^ㅎ> 멍게
[00:03:16] <r_i___o_e> 멍게
[00:03:18] <x_n_s_z_> 그 다음은 ?
[00:03:20] <r_i___o_e> 말미잘
[00:03:21] <ㅇㅋ^ㅎ> 말미잘
[00:03:24] <r_i___o_e> 크크크
[00:03:27] <x_n_s_z_> 오, 그 다음은?
[00:03:31] <r_i___o_e> 음;
[00:03:34] <r_i___o_e> 떠오르는게 없음;

저 대화에 나온 세 명이 모두 저 순서를 기억하고 있습니다[...]

대체 출처는 어디인걸까요 -_-;


By rein

July 15th, 2007 at 12:14 am

Posted in Uncategorized

Tags:

최근 저지른 C++ 타입 변환 삽질  

회사생활을 하면서 각 프로그래밍언어들 중 가장 많이 사용하고 있는 것이 대충 C++, python, lua, MS-DOS batch 파일 정도 되는 것 같다. 그러다 보니 이런 삽질도 한다.

// inheritance : C++
class impl : abst // abstrct base class abst.
{
// blah, blah, blah ...
};
 
// blah, blah, blah, ...
abst* x = dynamic_cast< abst* >( &impl_type_var );

사실 이 코드를 보면 위화감을 느껴야 한다.
컴파일해보면 VS2005에서는 “컴파일은 되는거지만 무조건 런타임 에러다!” 라고 warning이 뜬다. GCC 4.1에서는 명시적으로 에러라고 알려준다.

그러나 최근 python을 주로 쓰다보니, 파이썬 상속 코드 처럼 작성했던 것. 파이썬으로 상속하면 다음처럼 짜게된다.

# inheritance : python
class impl (  abst_package.abst ):
# blah, blah, blah, ...

C++ class를 상속받을 때 public, protected, private 중에 고르지 않으면 (자동적으로) private이 선택된다. (struct는 public이긴하지만 -_-; ) 그래서 impl -> abst 타입으로의 형 변환이 허용되지 않는 것.

만약 class impl이 아니라 struct impl이면 abst가 class건 struct건 저 형변환은 안전하게 일어난다.

뭐 그런 것이다 Orz
일하던 중에 저 메시지를 보고는 이게 뭔 소리야 하고 코드를 한참 뒤지다가(…), 상속 한정자를 붙이지 않았다는걸 발견하고 대좌절 o <-<

앞으로 이런 삽질 하지 말아야할텐데 흑흑


By rein

July 13th, 2007 at 8:19 pm

Posted in Uncategorized

Tags: ,