2009년 12월 29일 화요일

당신 거기 있어줄래요

당신 앞에 여러갈래 길이 펼쳐지는데, 어떤 길을 선택할지 모를때 무턱대고 아무 길이나 택하지 마라.
차분히 앚아라. 그리고 기다려라. 기다리고 또 기다려라.
꼼짝하지 마라. 입을 다물고 가슴의 소리를 들어라.
그리고 가슴이 당신에게 말할때, 그때 일어나 가슴이 이끄는 길로 가라.

-. 수잔나 다마로

2009년 12월 14일 월요일

sse 참고 사이트

http://zupet.tistory.com/317
http://softpixel.com/~cwright/programming/simd/sse2.php
http://blog.paran.com/alotta/13998621
http://www.codeproject.com/KB/recipes/BubbleSortWithSSE2.aspx
http://msdn.microsoft.com/en-us/library/0aws1s9k.aspx
http://inha.inwebcard.kr/sub.php?tname=1243339800

2009년 12월 13일 일요일

가슴 뛰는 삶

머리가 하얗게 센 노인이 눈을 감은 채, 공원의 의자에 앚아 있었다. 하룻밤이 지나서도 그는 그곳에 그렇게 앉아 있었다. 공원 관리인이 노인에게 물었다.
'댁은 뉘시오?'
'어디서 오셨수?'
의자에 앉아 있던 노인은 천천히 고개를 돌리더니 다음과 같이 대답했다.
'만일 내가 누구인지, 어디로부터 왔는지 안다면, 이 결정적인 질문의 답을 찾기 위해 여기 이렇게 앚아 있지 않을 것이오. 내가 알고 있는 것은 오직 '아서 쇼펜하우어'라는 이름뿐이외다.'

당신은 누구인가? 당신은 왜 지금 이 모습인가? 왜 늘 꿈꾸어오던 그 모습이 아니고 지금 이 모습인가? 무엇이 지금의 이 모습으로 만들었는가? 이것은 불가피한, 어쩔 수 없느 ㄴ선택의 결과인가?, 아니면 우연한 귀결인가? 그렇다면 지금 이대로가 좋은가? 그냥 이대로 머물 작정인가? 어디로 가려는가? 원래 어디로 가는 중이었고 어디로 갔어야 했나? 어디로 가면 당신에게 더 잘 어울리는 내일이 시작되겠는가?

<가슴 뛰는 삶>은 이렇게 시작한다.
과연 '당신이 원하는 삶이 이런 것?'이라는 질문에 답을 내놓을 수 있는가?

나는 배웠다

나는 배웠다

오마르 워싱턴

나는 배웠다.
다른 사람이 나를 사랑하게 만들 수는 없다는 것을.
내가 할 수 있는 일은 사랑 받을 만한 사람이 되는 것뿐임을.
사랑을 받는 일은 그 사람의 선택에 달렸으므로.

나는 배웠다. 아무리 마음 깊이 배려해도
어떤 사람은 꿈쩍도 하지 않는다는 것을.
신뢰를 쌓는 데는 여러 해가 걸려도
무너지는 것은 한순간이라는 것을.

인생에선 무엇을 손에 쥐고 있는가보다
누구와 함께 있느냐가 더 중요하다는 것을 나는 배웠다.
우리의 매력은 15분을 넘지 못하고
그 다음은 서로 배워가는 것이 더 중요하다는 것을.

나는 배웠다. 다른 사람의 최대치에 나를 비교하기보다
내 자신의 최대치에 나를 비교해야 한다는 것을.
또 무슨 일이 일어나는가보다
그 일에 어떻게 대처하는가가 중요하다는 것을.

무엇을 아무리 얇게 베어내도 거기엔 늘 양면이 있다는 것을.
어느 순간이 우리의 마지막이 될지 모르기 때문에
사랑하는 사람에게 언제나 사랑의 말을 넘겨놓고 떠나야 함을.
더 못 가겠다고 포기한 뒤에도 훨씬 멀리 갈 수 있다는 것을.

결과에 연연하지 않고 마땅히 해야 할 일을 하는 사람이
진정한 영웅이라는 것을 나는 배웠다.
깊이 사랑하면서도 그것을 드러낼 줄 모르는 이가 있다는 것을.
내게도 분노할 권리는 있으나 남을 잔인하게 대할 권리는 없다는 것을.
멀리 떨어져 있어도 우정이 계속되듯 사랑 또한 그렇다느 것을.

가끔은 절친한 친구도 나를 아프게 한다는 것을.
그래도 그들을 용서해야 한다는 것을 나는 배웠다.
남에게 용서를 받는 것만으로는 충분치 않고
자신을 용서하는 법을 배워야 한다는 것을.

아무리 내 마음이 아프다 해도 이 세상은
내 슬픔 때문에 운행을 중단하지 않다는 것을.
두 사람이 다툰다고 서로 사랑하지 않는 게 아니며
다투지 않는다고 해서 사랑하는 게 아니라는 것도.

또 나는 배웠다. 때론 남보다 내가 먼저 움직여야 한다는 것을.
두 사람이 한 사물을 보다라도 관점은 다르다는 것을.
결과에 상관없이 자신에게 정직한 사람이 결국 앞선다는 것을.
친구가 도와달라고 소리칠 때 없던 힘이 솟는 것처럼
자신의 삶이 순식간에 바뀔 수도 있다는 것을.

글 쓰는 일이 대화하는 것처럼 아픔을 덜어준다는 것을.
가장 아끼는 사람이 너무 빨리 떠나버릴 수도 있다는 것을.
나는 배웠다. 남의 마음을 아프게 하지 않는 것과
내 주장을 분명히 하는 것을 구분하기가 얼마나 어려운가를.

그리고 나는 배웠다.
사랑하는 것과 사랑받는 것의 지정한 의미를.


시 읽는 CEO 중에서...

가난한 사랑 노래

가난한 사랑 노래

신경림

가난하다고 해서 외로움을 모르겠는가
너와 헤어져 돌아오는
눈 쌓인 골목길에 새파랗게 달빛이 쏟아지는데,
가난하다고 해서 두려움이 없겠는가
두 점을 치는 소리
방법대원의 호각소리 메밀묵 사려 소리에
눈을 뜨면 멀리 육중한 기계 굴러가는 소리.
가난하다고 해서 그리움을 버렸겠는가.
어머님 보고 싶소 수없이 뇌어 보지만
집 뒤 감나무 까치밥으로 하나 남았을
새빨간 감 바람소리도 그려 보지만,

가난하다고 해서 사랑을 모르겠는가
내 볼에 와 닿던 네 입술의 뜨거움
사랑한다고 사랑한다고 속삭이던 네 숨결
돌아서는 내 등 뒤에서 터지던 네 울음.
가난하다고 왜 모르겠는가
가난하기 때문에 이것들을
이 모든 것들을 버려야 한다는 것을.

「 언제나 읽어도 콧등이 찡해지는 시 중에 신경림의 <가난한
사랑노래>가 있다. 언젠가 신경림 시인으로부터 이 시를 쓰게
된 사연을 들었다. 그가 길음동 산동네에 살 때였다고 한다.
집 근처에 자주 들르던 술집이 있었고, 거기서 한 가난한 젋은이
를 알게 됐다. 그러나 한편으로는 많이 배우지 못하고 가난한
처지를 못내 부끄러워하는 순박한 젊은이 였다.
어느 날 그 청년이 고민을 털어놨다. 바로 이 단골술집 딸과 사랑
하는 사이인데, 자신이 너무 가난해 결혼 애기를 꺼내기가 힘들
다는 것이었다. 하긴 딸을 가진 부모로서 빈곤한 노동자를 사위
로 맞아들이고 싶지 않았을 것이다. 실제로 그 청년은 그집 딸과
헤어졌다가 다시 만나기를 여러 번 해왔다고 말했다.
그 애기를 든은 신경림 시인은 청년에게 모든 어려움을 극복하고
둘이 결혼을 하면 주례도 해주고 결혼 축시도 써주겠노라고 약속
을 했다. 그 희망에 힘을 얻었는지 둘은 머지않아 결혼식을 올렸
다. 당시 결혼식장에서 시인이 그들을 위해서 읽어 준 축시가
바로 <너희 사랑>이다.


너희 사랑

낡은 교회 담벼락에 쓰여진
자잘한 낙서에서 너희 사랑은 싹텄다

흙바람 맵찬 골목과 불기 없는
자취방을 오가며 너희 사랑은 자랐다

가난이 싫다고 이렇게 살고 싶지는 않다고
반병의 소주와 한 마리 노가리를 놓고
망설이고 헤어지기를 여러 번이었지만

뉘우치고 다짐하기 또 여러 밤이었지만
망설임과 헤매임 속에서 너희 사랑은
굳어졌다

새삶 찾아나서는
다짐 속에서 너희 사라은 깊어 졌다

돌팔매와 최루탄에 찬 마룻바닥과
푸른옷에 비틀대기도 했으나
소주집과 생맥주집을 오가며
다시 너희 사랑은 다져졌다

그리하여 이제 너희 사랑은
낡은 교회 담벼락에 쓰여진
낚서처럼 눈에 익은 너희 사랑은
단비가 되어 산동네를 적시는구나

혼풍이 되어 산동네를 누비는 구나
골목길 오가며 싹튼 너희 사랑은
새삶 찾아나서는 다짐 속에서
깊어지고 다져진 너희 사랑은


이렇게 애틋한 사랑의 결실이었음에도 그들의 결혼식은 어느 비좁고 허름한 지하실에서 이뤄졌다. 청년이 노동 운동으로 지명수배를 받아 쫒기는 신세였기 때문이었다.
그러나 이 은밀한 결혼식에는 순박한 감동이 있었다. 축하객은 다 합쳐봐야 열댓 명 정도였지만 모두 마음 깊은 곳에서 우러나오는 축하를 보냈다.
그날 결혼식이 끝나자마자 곧장 집으로 돌아온 시인은 두 사람이 겪은 마음고생과 인생의 쓰라림을 달래는 마음으로 시 한 편을 더 쓰게 되었다 그때 탄생한 시가 바로 <가난한 사랑 노래>다.

시인의 얘기처럼 가난이란 인생에서 큰 멍에지만, 가난하다고해서 사랑을 왜면하거나 꿈을 접을 수는 없다는 긍정성 또한 영원한 진실이다.
신경림 시인은 이 시에서 '가난하기에 오히려 더욱 더 치열하게 살아야만 한다'고 말하고 싶었다고 한다. 쉽게 좌절하지 않고 노력하는 젊은이들에게는 반드시 좋은 결과가 있다는 것을 잘 알았기 때문이다.
다행히 그 젊은이들은 지금 중년에 접어들어 넉적하지 않지만 행복하게 살고 있다고 한다. 신경림 시인은 21세 때 <갈대>라는 시로 등단 한 이후, 자청해서 남을 위한 헌사를 붙인 시를 쓴 적은 없다고 했다. 이 두 편의 시는 그가 '이웃의 한 젋은이' 와 '누이'에게 주는 각별한 애정의 증표다
그렇다. 때로는 결핍이 충족을 완성한다.」

시 읽는 CEO 중에서...

굽이 돌아가는 길

굽이 돌아가는 길

박 노 해

올돋게 뻗은 나무들보다
휘어 자란 소나무가 더 멋있습니다.
똑바로 흘러가는 물줄기보다는
휘청 굽어진 강줄기가 더 정답습니다.
일직선으로 뚫린 빠른 길 보다는
산 따라 물 따라 가는 길이 더 아릅답습니다.

곧은 길 끊어져 길이 없다고
주저앉지 마십시요
돌아서지 마십시요
삶은 가는 것입니다
그래도 가는 것입니다
우리가 살아 있다는 건
아직도 가야 할 길이 있다는 것

곧은 길만이 길이 아닙니다
빛나는 길만이 길이 아닙니다.
굽이 돌아가는 길이 멀고 쓰라릴지라도
그래서 더 깊어지고 환해져 오는 길
서둘지 말고 가는 것입니다
서로가 길이 되어가는 것입니다
생을 두고 끝까지 가는 것입니다

시 읽는 CEO 중에서...

2009년 9월 18일 금요일

SubclassWindow 주의사항

MFC CWnd 클래스의 SubclassWindow()를 사용함에 있어 주의해야 하는 제약 사항이 있다.

이미 CWnd 오브젝트에 맵핑되어 있는 hWnd를 파라미터로 하여 CWnd::SubclassWindow()를 호출하게 되면 충돌이 발생한다. 이런 경우는 서브클래싱을 통해 추가적인 기능을 제공하는 범용 클래스를 소스 레벨에서 통합시킬 때 발생할 수 있다.

정확히 어떤 경우인지 예를 들어 살펴보자.
class CExWnd : public CWnd
{
...
};

class CSomeTool : public CObject
{
CExWnd m_exWnd;
void ExtendWnd(CWnd* pWnd);
};

void CSomeTool::ExtendWnd(CWnd* pWnd)
{
m_exWnd.SubclassWindow(pWnd->GetSafeHwnd());
}

CSomeTool::ExtendWnd(CWnd* pWnd) 함수는 파라미터로 받은 pWnd의 윈도 핸들을 CExWnd로 서브클래싱을 시도하고 있다. 이때 pWnd가 permanent 오브젝트인 경우 CWnd::SubclassWindow() 함수에서 충돌이 발생한다. Permanent 오브젝트의 여부는 CWnd::FromHandlePermanent(HWND hWnd)를 통해 검사할 수 있다.

충돌의 원인은 MFC가 CWnd 오브젝트와 윈도 핸들을 맵핑시키는 메카니즘에서 기인한다.

MFC는 내부에 윈도 맵이라는 해쉬 테이블을 통해 윈도 핸들과 CWnd 오브젝트를 연관시켜 관리한다. 해쉬의 특성상 하나의 윈도 핸들에는 오직 하나의 CWnd 오브젝트만이 맵핑될 수 있다.

그런데 CWnd 오브젝트에 이미 맵핑되어 있는 윈도 핸들을 또 다른 CWnd 오브젝트인 CExWnd에 서브클래싱을 시도하게 되면 하나의 윈도 핸들에 두 개의 CWnd 오브젝트가 존재하는 상황이 발생하여 MFC의 내부 윈도 맵에 충돌이 발생하는 것이다.

단순히 이것만이 문제라면 SubclassWindow()를 호출하기 전에 CWnd::FromHandlePermanent()를 통해 얻은 permanent CWnd 오브젝트의 Detach() 함수를 먼저 호출하여 MFC 윈도 맵의 충돌을 피할 수 있다.

그러나 이것보다 더 심각한 문제가 있다.

MFC는 모든 CWnd 클래스에 대해 AfxWndProc()이라는 윈도 프로시저를 사용하고 있다. 즉, 서브클래싱 하고자 하는 permanent 윈도 오브젝트도 AfxWndProc()을 사용하고 있고 서브클래싱된 CExWnd 클래스도 AfxWndProc()을 사용하고 있다. CWnd::SubclassWindow()는 파라미터로 전달된 윈도의 윈도 프로시저를 상위 윈도 프로시저(oldWndProc)로 저장하고 자신의 윈도 프로시저(AfxWndProc)를 설정한다. AfxWndProc()에서는 CallWindowProc()을 호출하여 서브클래싱 되기 전의 상위 윈도 프로시저(oldWndProc)를 호출한다. 그런데 서브클래싱된 CExWnd는 상위 윈도 프로시저(oldWndProc)에 AfxWndProc을 담고 있으므로 AfxWndProc이 무한 반복 호출되는 상황이 발생한다.

이것은 MFC의 내부 구조상 어쩔 수 없는 제약사항이다.
해결책은 두 가지가 있을 수 있다.

첫째는 범용 클래스를 소스 레벨에서 통합하지 말고 별도의 DLL로 빌드하여 통합할 것.
DLL로 빌드하면 CExWnd는 DLL 컨텍스트에서 관리되는 MFC 윈도 맵과 AfxWndProc을 사용하게 된다. 파라미터로 넘겨지는 윈도 핸들이 permanent CWnd 오브젝트의 핸들이라 할지라도 Exe 컨텍스트에서 사용되는 CWnd 오브젝트라면 충돌이 일어나지 않는다.

둘째는 직접 WNDPROC 타입의 콜백 함수(fnExWndProc)를 만들어 SetWindowLongPtr(hWnd, GWLP_WNDPROC, fnExWndProc)로 직접 서브클래싱할 것.
당연하다. MFC를 사용하지 않는 서브클래싱이면 아무 문제도 없다.

팔로어

프로필

평범한 모습 평범함을 즐기는 평범하게 사는 사람입니다.