빌드는 한 방에 이루어져야 한다
대부분의 프로젝트는 달랑 한 개의 결과물 – 배포할 프로그램 바이너리일지, 웹 페이지와 디비 등등등일지, 묶여있는 게임 팩키지 일지는 프로젝트마다 다르겠지만 – 만을 내놓는 경우는 없다. 예를 들어서 문자열을 처리하는 라이브러리를 만든다고 하자. blah, blah, blah … 하는 기능을 지원하고(그렇다 치자) utf-8 기반 문자열 버젼과 UCS2기반 문자열 버젼을 제공한다 static library (.a / .lib)와 shared library (.so / .dll)를 제공한다 Debug 정보를 포함한 버젼과 그렇지 않은 버젼을 제공한다 이제 가능한 조합은 총, 2 × 2 × 2 = 8 가지이다.
최근 저지른 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이 뜬다.
Spin buffer explained : Part 2
전번에 들고 나왔었던 스핀 버퍼 (spin buffer) 에 대한 설명. 스핀 버퍼 정의대로 3개의 동일한 버퍼 배열들을 가지고 진행하게 되며, 앞에서 설명한 busy 여부는 Free 상태만 non-busy로 생각하면 된다. 그리고 빗금친 버퍼는 데이터가 들어있는 것이다. 생산자-소비자 모델 (consumer-producer model)에서, 생산자가 1 개의 아이템을 버퍼에 집어 넣은 형태가 다음이라고 하자. (다음 다이어그램부턴 여기에 대한 연속) 생산자가 버퍼 1개를 쓰고 나면 다음 스핀 버퍼(여기선 다음 줄 정도로 생각하면 된다) 가 Free 상태이므로 거기로 옮겨가게 되고, 읽을게 없는 소비자도 2번째 줄로 옮겨오게 된다.
Spin buffer explained…
이번 달 초에 Dr. Dobb’s Journal (DDJ)을 보다가 multi-thread 용으로 구현된 흥미로운 링버퍼(ring buffer; circular buffer)에 관한 글을 발견(http://www.ddj.com/dept/architect/199902669) 간략히 설명하자면 기존의 링버퍼는 1개의 1차원 배열을 사용하고 여기의 양 끝에 각각 접근하는 consumer-producer modle을 사용했습니다. 각각은 이 1차원 배열에 접근해서 데이터를 추가하거나(producer part), 데이터를 꺼내가는(consumer part) 작업을 수행하는데 이 동작에 대해 1차원 배열을 접근하는 것을 동기화해서 (lock을 걸던 mutex를 쓰던), 1차원 배열이나 내부적인 book-keeping을 위한 포인터들이 오염되는 것을 막는다. 이 새로운 자료구조는 다음과 같은 방식을 사용해서 문제를 해결한다.
2008 대선 후보들…
오늘이 사실 상, 후보 이름을 거론하면서 지지하거나 반대할 수 있는 마지막 날인 관계로 (아직 자정은 지나지 않았다 :p) 일단 포스팅. 개인적으로, 이번 대선에 누가 나올진 궁굼하긴하지만 높은 순위의 관심사는 아니다. 그렇지만 바라는게 하나 있다면 제발 박모 독재자의 딸인 모근혜가 후보로 나오게되거나 – 개인적으로 떠올리기 싫을 정도로 혐오스로운 일이지만 – 대통령에 당선되는 불상사가 생긴다거나 하는 일은 제발 일어나지 말았으면 하는 것이다. 이건 내 편견일지 모르겠지만 박근혜를 지지선언한 사람 중엔 내가 제일 싫어하는 부류의 사람들 – 뇌물 수수, 대부분의 손자가 한국국적이 아닌 것을 고의적으로 선택한 등의 일을한 전국방장관 들 – 이 섞여 있기도하고, 인류에게 가장 도움이 안되는사상 중 하나라고 생각하는 – 뭐 필요악일 순 있지만 그렇게 높은 우선순위의 가치는 아니라고 믿는다 – 전체주의의 대두를 보게될것이라고 생각한다 – 박근혜 지지세력의 상당 수가 박모 독재자시절이 좋았지 하는 식의 말을 하는 사람이 많고, 그 때의 집단주의 적인 무언가를 찬양하는 모습을 보게 되기 때문이다.
boost::python
한 3주 쯤 전부터 Python/C++을 같이 쓰려고 삽질 중이었는데, 지난 주 초에 boost::python을 발견하고 이 둘을 쉽게 연결하기 시작 – 이어지는 내용은 UPnL 워크샵(2007/6/16)에서 발표했던 것의 요약입니다. 그 내용을 기반으로 해서몇일 정도 포스팅을 하려고 합니다. 사용하려는 플랫폼에 대해 초보적인 수준의 library사용 경험만 있으면(동적바인딩 라이브러리 빌드/링킹 관련) boost::python을 사용했을때 편한 점들은 일단, Python C interface를 상세히 알지 못하는 상황에서도 C++ 인터페이스를 python module로 내보내기 쉽습니다. Python embedding – C++ 쪽에서 python 코드를 실행시키는 것 – 을 쉽게 구현할 수 있습니다.
Python: Shock and Awe
어제 오후 + 오늘 오전해서 python으로 XML 파싱해서 뭔가를 하는 작업을 했습니다. 사실 lua로 시작했지만 SAX/SAX-like는 자유도가 떨어져서 DOM이 구현되어 있는 python으로 구현하게 되었습니다.(사실 제가 사용한 xml.dom.minidom도 DOM spec. 1까지만 구현되어 있습니다. Spec. 2의 기능을 쓰려면 PyXML을 받아야합니다.) 그래서 작업을 마치고 하나로 합치려고 팩키지 간의 의존성을 확인하는데, 대충 평소에 많이 쓰던 애들과 python 자체의 근간이 되는 것들이 포함되고 – 예를 들어 copy, copy_reg, types.py등, xml관련된 대부분의 팩키지들이 포함됩니다.(여기까지해서 20kb정도) 그리고 마지막 의존성이 Expat이었는데, 이건 expat.
어제 일 + 병특 실사 관련
결국 그냥 저걸 복사해서 내긴 찜찜해서 해당 지점에 가서 다시 입출금내역을 뽑았음 은행갔다 받은 충격과 공포: 은행 9시 반부터 하는구만 …잠깐 그럼 이놈들 9시 반~3시 반근무해보겠다고? 이거야 그렇다치고 사실 이렇게 급하게 처리해야했던건 검찰에서 바로 가져오라는 소릴 해대선데 (정확히는 서울 동부지방검찰청) 이 것들은 지들만 일하는 줄 아냐. 사실 더더욱 엽기적인 것은 그 다음에 있다. LG다니는 A모군의 경우에는 주민등록등본과 학위 증명서도 떼오라고 했다고. A모군의 경우엔 학위 받은 학교가 코 앞이니 그렇다 치고, KAIST나 포스텍 나온 사람한테도
여유의 계절(?)
지난 2월 5일부터 출근하기 시작해서 대략 2달 반이 지났습니다. 회사 다니면서 (회사 이외의 일로) 즐거운걸 따지자면 일단 생활이 규칙적이 된 것 – 대학원 생활은 뭔가 좀 불규칙했음 그리고 회사에서 퇴근하면서 서점에 들르기가 쉬워졌다는 것. 회사가 포스코사거리 근처인지라 퇴근할 때 선택지는 2곳 – 2호선 선릉역, 삼성역 – 인데 삼성역까지가 대략 5분 정도 가까운 관계로 피곤하면 이쪽, 안그러면 선릉을 선택하는데, 삼성역엔 코엑스 몰이 있고 거기엔 반디앤루니스 본점이 있음; 덕분에 퇴근시간에 종종 들리곤하는데 10:30에 문닫는것도 몇 번 봤다곤 말 못함 원서매장도 있고, 섹션 별로 보기가 편해서 – 개인적으론 서가 높이가 눈 높이 이하인게, 특히 낮은 상 위에 표지가 보이게 진열된게 좋음 – 맘에 듭니다.
우리가 서글퍼 해야하는 일
중앙일보 영화 `괴물’관련 보도 영화 ‘괴물’이 NF쏘나타 3869대를 만들어내는 효과와 맞먹는 것으로 나타났다. 지난해 관객 1300만 명을 동원해 역대 흥행 1위를 기록한 ‘괴물’의 총수입은 911억원 역대 흥행 1위를 기록한 ‘괴물’의 총수입은 `겨우’ 911억원 반면에, YWCA 등의 정체가 뭔지 참 궁굼한 곳에서 탄압에 가까운 일을 당하멵서 성장한 국내 N모사의 작년 실적은 4/4 분기에만 902억원. 년간 NF 소나타 15000 대 생산에 이르는구만 그러나 우리나라 정부가 영화 산업에 쏟아붇는 돈은 연간 약 4천억원, 게임 분야에 대해서는 약 110억원.