지난 1월 1일날 이모댁에 놀러갔다가 사촌여동생에게 이 책을 빌렸다.
한비아라는 분에 대해서는 예전 부터 오지 여행가라고 들어왔지만 별 다른 관심은 없었다. 그러다가 손석희의 시선집중에서 동남아시아 해일 지역을 긴급구조하기 위해 그 지역을 방문하고 있는 한비아씨와의 인터뷰를 듣고 관심을 갖게 되었다. 오지 여행가라는 분이 왜 갑자기 월드비전이라는 구호단체에서 일을 하고 있는지 궁금했다. 그런더차에 이 책을 발견해서 기분이 좋았다.
제목 처럼 중국에 1년동안 어학연수를 하면서 느낌점과 월드비전 활동 내용이 소개되어있다. 직접 경험한 내용을 재밌게 풀어 쓰다보니 술술 책장이 넘어갔다.
엄청난 넓이의 국토와 다양한 인종 그리고 10억이 넘는 인구로 이루어진 중국에 대한 이야기 그리고 그속에서 살아가는 한국 유학생들 그리고 일본 , 중국 친구에 관한 이야기. 특히 일본 친구와 우정은 참 부러울 정도였다. 늘 느끼는 것이지만 한 나라안에 틀혀 박혀 있는 것이 아쉬울 때가 많다. 가볍게 털고 멀리 날아가고 싶지만 그것이 어디 쉬운 일일까? 아마도 많은 사람들이 그분의 책을 읽으면서 그런 욕구를 참아내고 있는지도 모른다.
사실 오지까지는 원하지는 않지만 그래도 여러나라의 문화와 언어를 경험하고 그 사람들과 친분을 맺어가면 참 좋겠다는 희망을 가져본다. 다행히도 나에게도 비슷한 경험은 갖고 있다. 비록 직접 외국에 가서 사람을 사귄 것은 아니지만 회사에서 외국인 개발자와 1년동안 일하면서 친하게 지낸적이 있다. 인도 출신의 시바라주라는 친구다. 참 착하고 성실한 친구였다. 마음이 여려서 가끔 상사에게 혼이라도 나면 눈물을 글썽이기도 했다. 떠날 때, 내가 가장 좋은 동료였다고 말해줘서 기뻤고 헤어지기가 아쉬웠다. 오래만에 그 친구에게 이메일이라도 보내봐야겠다.
2005년 1월 17일 월요일
2005년 1월 9일 일요일
2005년 KLDP 대문 그림
2005년을 맞이해서 새로운 대문 그림을 올려봅니다..
KLDP 구성원들이 함께 희망차게 웃는 모습을 표현해 보았습니다.
모두가 늘 웃는 그런 한해가됐으면 좋겠네요.
2005년 1월 5일 수요일
디버깅 이야기: malloc, free, new[], delete[]
http://bbs.kldp.org/viewtopic.php?t=1244&highlight=delete+pointer
c에서 cpp 클래스 멤버 함수 호출에 관하여
http://bbs.kldp.org/viewtopic.php?t=24593&highlight=delete+pointer
get_ptr 이 마치 생성자의 역할을 해야하는데, 그렇지 않은 코드이군요.
C++ member 함수를 호출할 때는, C++ 에서 (C아닌) wrapper 함수를 제공해주어야 정상적으로 호출할 수 있습니다.
심지어 위의 코드에서 X::ftn1, X::ftn2 함수는 static 이므로 this pointer가 넘어가지 않는 함수이군요.
어셈블 코드를 설명하는 방식이 아니어서 죄송합니다만. 위에 제시하신 class X를 C 코드에서 사용하려면, 다음과 같은 interface를 작성해주시는 것이 좋습니다. ftn1과 ftn2 를 static 으로 하지 않는 코드로 설명드리면..
t2.cc
코드:
class X {
public:
int x;
int y;
void ftn1(void);
int ftn2(int,int);
};
type void XX;
extern "C" XX * X_init()
{
return (XX *) new X;
}
extern "C" void X_ftn1( XX * pthis )
{
((X*)pthis)->ftn1();
}
extern "C" int X_ftn2( XX * pthis, int a, int b )
{
return ((X*)pthis)->ftn2(a,b);
}
extern "C" void X_destroy( XX * pthis )
{
delete pthis;
}
t1.c
코드:
int main(int argc, char* argv[])
{
XX * p = X_init();
X_ftn1(p);
X_ftn2(p,10,11);
X_destroy( p );
}
... 컴파일 안하고 올리는거라 오류가 있다면 답글 주세요. 메모리 할당 오류 등은 생략하였습니다.
_________________
가는 선, 정교한 생명시계.
오늘도 하루를 오차없는 프로그램처럼 살아 있다.
get_ptr 이 마치 생성자의 역할을 해야하는데, 그렇지 않은 코드이군요.
C++ member 함수를 호출할 때는, C++ 에서 (C아닌) wrapper 함수를 제공해주어야 정상적으로 호출할 수 있습니다.
심지어 위의 코드에서 X::ftn1, X::ftn2 함수는 static 이므로 this pointer가 넘어가지 않는 함수이군요.
어셈블 코드를 설명하는 방식이 아니어서 죄송합니다만. 위에 제시하신 class X를 C 코드에서 사용하려면, 다음과 같은 interface를 작성해주시는 것이 좋습니다. ftn1과 ftn2 를 static 으로 하지 않는 코드로 설명드리면..
t2.cc
코드:
class X {
public:
int x;
int y;
void ftn1(void);
int ftn2(int,int);
};
type void XX;
extern "C" XX * X_init()
{
return (XX *) new X;
}
extern "C" void X_ftn1( XX * pthis )
{
((X*)pthis)->ftn1();
}
extern "C" int X_ftn2( XX * pthis, int a, int b )
{
return ((X*)pthis)->ftn2(a,b);
}
extern "C" void X_destroy( XX * pthis )
{
delete pthis;
}
t1.c
코드:
int main(int argc, char* argv[])
{
XX * p = X_init();
X_ftn1(p);
X_ftn2(p,10,11);
X_destroy( p );
}
... 컴파일 안하고 올리는거라 오류가 있다면 답글 주세요. 메모리 할당 오류 등은 생략하였습니다.
_________________
가는 선, 정교한 생명시계.
오늘도 하루를 오차없는 프로그램처럼 살아 있다.
피드 구독하기:
글 (Atom)