전체 글 118

우울한 주말, 유시민의 후불제 민주주의

노무현 전 대통령의 서거 소식을 접한 후로 계속 가슴 답답한 주말을 보냈다. 지금도 정치에 크게 관심을 쏟는 것도 아니고 이전에는 아예 관심이 없었다고 표현하는 게 더 적절하겠다. 조금이나마 정치에 관심을 갖게 된 계기가 노무현이라는 정치인의 대선 출마였다. 투표권을 받고 처음으로 뽑은 대통령이었다. 그래서 몰상식한 탄핵에서 지켜야 한다고 생각했고, 나같이 충돌을 두려워하고 소심한 사람도 촛불을 들고 집회에 나갈 수 있다는 경험을 갖게 해준 대통령이었다. 자전거 타는 모습, 동네 수퍼에서 담배 피는 모습을 찍은 사진을 통해 흐뭇하게 웃음을 짓게 해준 사람이었다. 전직 대통령이면서도 동네 아저씨와 별 다를 바 없는 생활을 할 수 있다는 너무나 당연한 사실을 새롭게 깨우치게 해준 사람이었다. 마음은 답답한데..

2009.05.25

Google Test의 데이터 기반 테스트

Google Test에서도 MBUnit의 RowTest나 NUnit의 TestCase 같은 데이터 기반 테스트라는 개념을 지원한다. Google Test에서는 이 개념을 Value-Parameterized Tests라고 부른다. 코드는 동일한데 사용하는 데이터 값 몇 개만 바뀌는 테스트 케이스가 있을 때, 코드 중복을 없애주면서도 어떤 테스트 케이스가 실패하고 성공하는지 정확하게 알려주는 유용한 기능이다. 그런데 아무래도 C# 보다는 유연성이 떨어지는(?) C++이라 쓰기가 마냥 쉽지만은 않아서 좀 정리를 해 둘 필요가 있다. 템플릿을 써서 구현한 기능이라 컴파일 에러라도 한 번 나면 좀 골치가 아프긴 하지만, Visual C++ 2008의 템플릿 관련 에러 메시지는 엄청나게 친절하기 때문에 미리 걱정할..

2009.05.23

[Translation] YouCard Re-visited: Implementing Dependency Injection in Silverlight

지난 번에 번역한 YouCard Re-visited : Implementing the ViewModel pattern이라는 글에 이어지는 YouCard Re-visited: Implementing Dependency Injection in Silverlight라는 글을 번역한 것이다. 이번 주에 올린 글에서 나는 YouCard 어플레케이션에서 Model-View-ViewModel 패턴을 구현한 방법에 대해서 썼다. 이번 글에서 나는 Inversion of Control 컨테이너와 Dependency Injection 패턴을 구현하는 방법에 대해 쓰려고 한다. 의존성 주입에 관한 글은 매우 많이 있으므로, 이 글에서는 Silverlight에서 의존성 주입을 사용하는 방법에 대해 집중하려고 한다. 특히, N..

2009.05.21

Mac OS X에서 요일 지정하여 주기적으로 무언가 실행하기

Mac OS X에서는 유닉스/리눅스 계열에서 흔히 쓰는 cron 대신 launchd라는 것으로 주기적으로 실행되는 명령을 콘트롤한다. launchd에 대한 일반적인 사항은 Mac에서 정해진 시간에 자동으로 프로그램 실행하는 법이라는 포스트를 보면 알 수 있다. 소개한 포스트에서 볼 수 있듯이, 직접 plist 파일을 수정하는 것보다는 Lingon이라는 오픈소스 도구를 사용하는 것이 편리하다. 그런데 cron에서는 쉽게 설정할 수 있는 "매주 월, 화, 수요일 오전 7시에 실행"이라는 방식의 스케줄을 launchd와 Lingon을 통해서는 만들어낼 수가 없다. launchd 문서에도 설명이 없어서, 작년에 똑같은 작업을 할 때에는 한참을 찾아 헤매다가 결국 비활성화되어 있는 cron을 활성화시켜서 일정을 ..

2009.05.15

온라인 상의 개인 정보

Exposed-Blog Confidential « 스튜디오 판타지아 2.0 (꽤 긴 글이라 읽으려면 어느 정도 시간을 투자할 마음의 준비가 필요할 듯 싶다) 미투데이를 쓰다보면 스스로에 대해서 뭔가 더 얘기하고 싶은 일도 있고, 온라인을 통해서 사람들의 반응을 듣고 싶을 때가 있다. 기본적으로는 친구들, 오프라인에서 알고 지내는 지인들을 주요 독자로 생각하고 있고, 미투데이를 통해서 자주 만나지 않고도 관계를 좀 더 강화할 수 있기를 기대하기 때문이다. 하지만 이미 너무 많은 정보가 노출되어 있는 것 같다. 온라인에 공개된 정보는 한 번 공개된 이상 개인의 의지로 완벽하게 통제할 수 없음은 이미 너무나 잘 알려져 있다.

2009.05.11

블로그 사이드바와 검색 엔진에 대하여

나는 블로그에 사이드바가 있는 것을 별로 좋아하지 않는다. 정확히는 블로그 포스트 하나만 보여주는 페이지에 글 외에 다른 내용들이 섞이는 걸 그다지 좋게 보지 않는다. 그래서 워드프레스에서 블로그 포스트 페이지만 따로 분리되어 있는 설계를 좋아하고 (워드프레스를 안 쓴지 몇 년이나 되어서 지금은 어떤지 모르겠지만 그 때는 그랬다), 태터툴즈(이제는 텍스트큐브)의 덜렁 HTML 한 장짜리 설계를 별로 좋아하지 않는다. (근데 여러 가지 다른 편의성을 고려하다보니 계속 태터툴즈 계열만 쓰게 되긴 한다) 이것은 다분히 블로그 운영자로서의 입장보다는 검색 엔진 사용자의 입장에 가까운 것이다. 포스트 하나만 보여주는 페이지에 최근 댓글이니 최근 포스트니 태그 구름이니 하는 글 내용과 하등 관계없고 시간이 지남에 ..

2009.05.05

탭 키로 버튼에 포커스 옮기기

MS Windows에서 맥으로 옮기면서 불편했던 것 중에 하나가 UI를 키보드로 사용하기가 상대적으로 어렵다는 점이었다. 왜 그런지 모르겠지만 나는 마우스를 사용하는 작업이 상당히 피곤하게 느껴진다. 마우스 버튼을 클릭할 때 손가락 관절이나 집게 손가락 끝부분에 좀 거북한 느낌을 받는 경우가 많고, 키보드에서 마우스로 손을 옮기는 행동도 귀찮다. Windows에서 키보드로 UI를 사용할 때 가장 많이 쓰는 키들이 메뉴를 띄우는 Alt, 콘트롤들(버튼, 텍스트 상자 등) 사이를 이동하는 Tab, 화살표키, 엔터, 스페이스바다. 대화 상자나 입력 폼 같은 게 뜨면 탭 키로 콘트롤들을 이동해 다니면서 스페이스 바 키나 엔터 키로 버튼을 눌러서 다음 단계로 이동하는 사용 패턴이 가장 흔하다고 생각된다. 그런데 ..

2009.05.02

Google Test의 문자열 비교 Assertion

UnitTest++과 비교했을 때 상대적으로 Google Test가 좋은 점 중에 한 가지는 문자열 비교이다. Google Test는 wide character 문자열도 잘 비교해주기 때문에 다음과 같은 문자열 비교 assertion을 써서 실제 값과 다른 경우에는 아래와 같이 문자열 값을 실패 메시지에 포함시켜서 보여준다. ASSERT_STREQ(_T("-111"), xe->GetProperty(_T("Canvas.Left"))); (노파심에 프로젝트명은 지움) Google Test의 문자열 비교 assertion에는 이런 것들이 있다. Fatal assertion Nonfatal assertion ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expec..

2009.04.28

shared_ptr의 custom deleter 사용법

내가 처음 custom deleter를 봤을 때에는, shared_ptr 생성자에서 한 번 custom deleter를 지정해주면 그 다음부터 reset()을 하더라도 항상 처음에 지정했던 deleter를 불러줄 거라는 기대가 있었다. 그래서 테스트를 해봤더니 그런게 아니네. custom deleter를 유지하고 싶다면 reset()을 할 때 deleter도 같이 넘겨줘야 한다. 아래 테스트 코드는 custom deleter를 지정하지 않고 reset()한 경우에는 custom deleter가 호출되지 않는다는 걸 Google Test를 이용해서 보여주는 코드이다. class TestSharedPtrFixture : public testing::Test { public: std::stringstream ..

2009.04.23