기본 콘텐츠로 건너뛰기

8월, 2008의 게시물 표시

Windows에서 F1이 도움말로 작동하지 않도록 하기

죽음과 개신교

엠파스 뉴스 한순간에 담임 목사와 부목사 2명 등 목회자 가족 5명을 잃은 서울 봉천동 ‘꿈꾸는 교회’는 큰 충격에 휩싸였다. 담임목사 가족 3명을 잃은 경남 진해 ‘꿈꾸는 교회’도 믿을 수 없는 소식에 망연자실했다. 교회는 소식을 듣고 몰려온 신도들의 울음 소리로 가득찼다. 덧글은 예상대로 개신교에 대한 조롱과 비웃음이 많다. 물론 사람이 죽었다는 것은 슬픈 일이라 하지만, 우리나라 개신교가 이 땅에서 반성 없이 벌인 죄의 대가가 아닐까 싶다. 야훼와 예수 안 믿어서 일이 안 풀렸다는 둥, 죽었다는 둥, 다른 종교는 인정하지 않는다는 둥... 이러한 행동 하나하나가 차곡차곡 쌓이고 쌓여 이런 결과를 만든 것이다. 이런 상황에서도 과연 개신교가 진실한 마음으로 반성을 할지는 의문이다. 덧글: 뭐 조롱과 비웃음이 내 양심에 정당하다는 것은 아니다. 원본 위치: http://purewell.egloos.com/3881846

창가에 아이들

부엌 창가에서 저물어가는 여름햇살을 즐기는 녀석들... 왼쪽에 세 선인장 은 키우던 로빈이 선반이나 가구 위에 올라가는 것을 막기 위해 사왔던 녀석들. 겨우내 다 죽어갔었는데, 지금은 맨 왼쪽 녀석이 위로 뾰족이 새 줄기를 낼 정도로 잘 자라고 있다. 나름 귀여웠던 용발톱 은 이름 그대로 용발톱처럼 무시무시하게 자라고 있다. (흠짓!) 가운데 나무 상자는 신혼여행 갔다오면서 몰디브 말레 공항에서 사온 차가 담겨 있던 것이다. 흙을 채우고, 꺾꽂이 하여 뿌리내린 작은 피토니아 아이들이 지내고 있다. 눈 깜짝할 사이에 겨울이 오니, 얼른 뿌리 단단히 내리길 바란다. 가장 오른쪽에는 주인님 몰래 샀다가 혼난 미모사 . 건들면 움츠리길래 수줍은 녀석인가보다 했는데, 일본에서 사먹은 푸딩그릇으로 만든 화분을 뿌리로 가득 채울 정도로 속으론 왕성한 녀석이다. 원본 위치: http://purewell.egloos.com/3881406

스피아민트

잡초처럼 끈질기고 왕성한 생명력을 자랑하는 스피아민트. 처음에 마트에서 업어 올 때 조그마한 녀석을 업어왔는데, 너무 크고 왕성하게 자라서 몇몇개는 큰 화분에 옮기고, 나머지 두 그루는 별 신경 안 쓰려고 작은 화분에 심고 방치하였다. 화분이 민트에 비해 너무 작아 자주 화분이 말랐다. 이 녀석에게 다시 눈길을 주었을 때는 이미 거짐 다 말라 죽었을 때였다. 화분에 별 관심 없는 주인님께서 보다 못해 화분을 갈아주라 하셨고, 남는 큰 화분에 분갈이를 해줬다. 가끔씩 물 주길 3주... 다 말라죽고 관심 없었던 화분이 이렇게 왕성하고 아름답게 자랐다. 안에 자세히 보면 나눠진 줄기 가운데 서넛이 땅을 기면서 뿌리를 여럿 내리고 있다. 무럭무럭 자라주렴. 원본 위치: http://purewell.egloos.com/3881381

Subversion

POSIX 표준안에 들어있는 함수는 엄청나게 많은데, 요것들을 잘 래핑해놓은 C++ 라이브러리가 없어서 그냥 투닥투닥 만들고 있다. 이걸 만들면서 동아리 서버를 애용했는데, 여러가지 이벤트 덕에 수 번 날려먹었다. 그냥 SourceForge 에 CVS 계정 하나 만들까 했다가, 위대하신 구글신께서 이미 구글코드 를 Subversion 으로 운영하시고 계시다는 소식을 팔랑귀로 접하고 바로 계정 생성!... 아니! 내가 이미 먼~ 옛 날에 만들어놨잖아! 오우, 프로그래머에게 정말 감명 깊은, 깔끔하디 깔끔한 웹 인터패이스와 Subversion. 좋구먼~ 낼름 만들던 소스 올려주고 룰루랄라~* 지금 약 한 달 썼나? 쓰면서 느낀 것은 미친 듯이 느리다 . 일단 Subversion이 동일 조건에서 CVS보다 훨 느린 것 같다. (물론 기능은 CVS보다 좋긴 하지만) 게다가 구글코드는 한국 네트워크에 없는지... 혼자 개발하고, 백업을 미친 듯이 하기 때문에 미친 듯이 commit을 때리려고 했지만, 못하겠더라. 뭐... 공짜로 쓰는데 이 정도 불편함 정도는... (타협 중) 덧글: purewell 프로젝트 홈페이지: http://code.google.com/p/purewell 원본 위치: http://purewell.egloos.com/3872766

호시노

엠파스 열린검색 : '호시노아키' * 호시노 아키 (ほしのあき) 영화배우 * 출생 : 1977년 3월 14일 (일본 도쿄) * 방송 : 쓰레기 변호사 (2006) * 영화 : 가면 라이더 - 덴오 (2007), 아와 댄스 (2007) * 수상 : 2004년 제3회 일본DV시네마대상 신인상 호시노 감독 하면 자꾸 호시노 아키 가 생각나~* 하악하악 원본 위치: http://purewell.egloos.com/3872729

Double free

각종 표준에는 이미 해체한 메모리를 다시 해체하려고 할 때 행동을 정의하지 않고 있으나, GLIBC는 깔끔하게 자살해주고 있다. 자살할 때 패턴을 눈에 익혀 놓으면 나중에 왜 죽었지?하는 일이 줄어들 것이다. #include <stdlib.h> int main(int argc, char* argv[]) { void* p(malloc(1024)); free(p); free(p); return 0; } 컴파일 및 실행 $ g++ -O2 -g dblfree.cpp -o dblfree $ ./dblfree *** glibc detected *** ./dblfree: double free or corruption (top): 0x000000001460a010 *** ======= Backtrace: ========= /lib64/libc.so.6[0x3704671684] /lib64/libc.so.6(cfree+0x8c)[0x3704674ccc] ./dblfree(__gxx_personality_v0+0x10e)[0x4005de] /lib64/libc.so.6(__libc_start_main+0xf4)[0x370461d8b4] ./dblfree(__gxx_personality_v0+0x39)[0x400509] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 08:07 45776987 /home/purewell/tmp/dblfree 00600000-00601000 rw-p 00000000 08:07 45776987 /home/purewell/tmp/dblfree 1460a000-1462b000 rw-p 1460a000 00:00 0 3703600000-370361a000 r-xp 00000000 08:03 4845228

POSIX shared memory

일전에 언급한 SysV 에서 처음으로 세상에 내동댕이 쳐진 IPC 집합 가운데에서 공유메모리부터 보겠다. SysV가 가진 API는 POSIX.1-2001에도 올라와 있는 녀석이긴 하다. 함수는 shmget, shmat, shmdt, shmctl 등이 있다. 엄청나게 유명한 녀석이기 때문에 따로 자세히 설명하지 않겠다. shmget으로 공유메모리를 커널에 요청한다. 그럼 커널일 공유메모리객체를 만들기만 할 것이고, shmat을 통해 실제 프로세스 메모리에 공유메모리를 쳐바를(attach) 수 있다. shmdt는 쳐바른 공유메모리를 떼어내는데(detach) 사용하고, shmctl은 공유메모리객체를 정리하거나 기타 객체를 조작하는데 잠깐 이용한다. - 설명끝 - shm_open은 SysV와 별도로 POSIX.1-2001에 올라온 녀석인데, 역사는 잘 모르겠고(2001년에 나왔겠지~ 하하하~), SysV용과 달리 메모리 사용량 조절이 가능하다. 왜냐구? 파일이니까. shm_open는 UNIX가 가지고 있는 open함수와 매우 흡사하며, 결과값 역시 FD를 내놓는다. 파일을 다루는 각종 함수를 사용할 수도 있고, mmap 함수를 이용해서 shmat처럼 프로세스 메모리 공간에 쳐바를 수도 있다. 문제는 공유메모리라는 '파일'이 어디에 만들어지는지 모르기 때문에(OS마다 달라!) shm_unlink라는 함수도 별도로 제공한다. 일단 생김새는 open함수와 비슷하다. int shm_open(const char* name, int oflag, mode_t mode); name은 공유메모리객체의 이름이 들어간다. 맨페이지에 따르면, 어디든 포팅하기 쉽게 사용하려면 슬래시가 맨 처음에 단 하나만 들어가는 이름을 사용하라고 한다. (예: /myshare.shm) oflag는 이것을 읽기용, 쓰기용, 생성, 이미 있으면 잘라버릴지를 결정한다. 플래그는 O_RDONLY, O_RDWR, O_CREAT, O_EXCL, O_TRUNC 등이 있다. mode는 접근제어로 '

FreeBSD SSL 컴파일

$ g++ ssltest.cpp -o ssltest -lssl /usr/lib/libssl.so: undefined reference to `BIO_find_type' /usr/lib/libssl.so: undefined reference to `EVP_enc_null' /usr/lib/libssl.so: undefined reference to `EVP_CIPHER_CTX_init' ... Linux에선 ssl 만 링크해도 괜찮은데, FreeBSD에선 crypto 도 링크해야 한다. orz OTL 원본 위치: http://purewell.egloos.com/3863211

ftok

IPC ... Inter Process Communication. 뭐 말 그대로 프로세스끼리 말하는 통신하는 방식이다. IPC에는 여러가지 방식이 있겠지만, 일반적으로 메시지큐, 공유메모리, 세마포어 이 세가지를 읊곤 한다. (소켓도 IPC라고!) 내 머릿속에서 이러한 세가지 단어를 엎고 있는 단어가 있었으니 이름하야 'SysV'. 전화회사(AT&T)에서 1983년에 하드웨어 팔아먹으려고(스위치 용도일까?) 만든 OS가 있었으니, 이름하여 'System 5(SysV)'. 이게 큰 히트를 치면서 현대 UNIX 구조의 기초를 만들게 되었다. 이때 첫 버전인 'System 5 Release 1(SVR1)에서 이미 위에서 언급한 IPC I/F를 가지고 있었다. 참조:  http://en.wikipedia.org/wiki/System_V 오늘 알아볼(것도 없는) ftok 함수는 위에서 언급한 SysV의 IPC I/F에서 사용하는 key_t을 만들기 위한 것이다. 일단 IPC객체를 하나 얻어오려면 커널이 알아볼 수 있는 키가 필요하다. (리눅스에서 내놔야 int형이지만...) 이 키를 만드려면 ftok함수를 써서 만들어야하며, 인자는 파일패스와 8bit 프로젝트값이다. 이 두가지 인자로 커널이 알아볼 수 있는 키가 만들어지고, 이것을 통해 IPC객체를 커널에 등록하고, 프로세스와 연결할 수 있는 것이다. 사실 과거에서 지금까지 많이 쓰이는 유구한 전통이 있는 함수라고 하는데, 학교 다닐 때 한 두 번 써본 것이 전부다. 그래서 실은 저 키를 만드는 과정이나, 주의 사항도 써야겠지만 귀찮아서 그냥 RTFM... SysV가 가진 IPC I/F가 잘못 만들어진 것은 아니지만, 개인 취향으로 POSIX가 새로 규정한 IPC I/F가 좀더 끌리기에 그것을 쓰고 있다. (장점 약간과 정리한 느낌을 주는 I/F 정도가 이유라면 이유랄까...) 다음에는 POSIX에서 규정한 IPC I/F를 소개할까 한다. (다만 국내외 문서에서 POSIX I

delete this

[16] Freestore management, C++ FAQ Lite (내 맘대로 번역) [16.15] Is it legal (and moral) for a member function to say delete this? [16.15] 멤버함수에서 'delete this'가 올바른 구문인가? As long as you're careful, it's OK for an object to commit suicide (delete this). 주의 깊게 사용한다면, 객체가 자살하는 구문(delete this)은 괜찮다. Here's how I define "careful": 어떻게 "주의 깊게" 사용하냐면: You must be absolutely 100% positive sure that this object was allocated via new (not by new[], nor by placement new, nor a local object on the stack, nor a global, nor a member of another object; but by plain ordinary new). 이 객체는 new연산자(new[]도 아니고, new 오버라이딩도 아니고, 스택에 있는 지역 객체도 아니고, 전역 객체도 아니고, 다른 객체의 멤버변수도 아닌 순수 그 자체 new연산자 )로 만들어진다는 100% 확신이 있어야한다. You must be absolutely 100% positive sure that your member function will be the last member function invoked on this object. 'delete this'를 호출한 멤버함수는 이 객체에서 호출한 가장 마지막 멤버함수 라는 100% 확신이 있어야한다. You must be absolutely 100% positive sure that the rest of your

포퓰리즘

포퓰리즘 - 네이버 백과사전 대중주의 라고도 하며, 인기영합주의 · 대중영합주의 와 같은 뜻으로 쓰인다. 일반 대중을 정치의 전면에 내세우고 동원시켜 권력을 유지하는 정치체제를 말한다. 소수의 지배집단이 통치하는 엘리트주의와 대립적인 의미이다. 포퓰리즘이라... 적당적당히 하자 좀... 원본 위치: http://purewell.egloos.com/3852089

日流에 물든 상류층

Purewell.BIZ : 수출로 번 돈 일본에 다 퍼준다 日流에 물든 상류층 "독도는 독도고... - 한국일보 독도 문제로 한국과 일본 사이에 국가의 자존심을 건 신경전이 한창이지만, 한국의 일부 상류 사회는 '다른 세상'이 연출되고 있다. 그들만의 일본 제품 및 일본식 문화 향유가 확산되는 추세다. 상류층 일각에서는 "서민층과 구별하는 '고급 아이콘'"이라고 스스럼 없이 부를 정도다. 거봐... 언론에서 괜스레 대체물품도 없고, 힘도 없는 게임쪽 패지 말고 저런 것이나 어떻게 해봐. 일본산 자동차 한 대 수입 단가 랑 게임기기/소프트웨어 수입 단가 랑 비교할 수 없을 정도로 엄청나지 않우? 원본 위치: http://purewell.egloos.com/3851486

적벽대전을 (힘겹게) 보고

적벽대전 을 아무런 사전 정보 없이 주인님과 함께 가까운 영화관에 보러 갔다가, 다음부터는 최소한 포털 사이트에 있는 별점 정도는 보고 영화를 골라 봐야겠다는 생각이 들었다. 나처럼 적벽대전을 아무런 사전 정보 없이 보러가는 사람들을 위해 최소한의 정보를 제공 해주겠다. 화려한 액션 꽃미남 꽃미녀로 채워진 삼국지 멋진 갑옷과 무기(특히 청룡언월도!) 치밀한 개연성 오우삼 감독에 대한 믿음 대규모 전투 적벽대전 알맞게 끝맺은 이야기 이런 것을 기대한 사람은 엄청난 실망 과 허무의 늪 에서 허우적거릴 것이다. 단, 이런 것은 기대해도 좋다. 다소 현실적인 액션 다소 현실적인 얼굴 다소 현실적인 전략 다소 현실적인 시간 영웅들의 그들만의 진지한 대화 하얀 비둘기 꽃미남 재갈량 원본 위치: http://purewell.egloos.com/3850869

이 블로그의 인기 게시물

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮) 찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다. 왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10 Array # 생성 declare -a empty_array declare -a ar=(haha hoho baba "long string haha hoho") # 접근 echo "ar[0]=${ar[0]}" echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다. echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다. echo "indexes=${!ar[@]}" echo "indexes=${!ar[*]}" echo "length=${#ar[@]}" echo "length=${#ar[*]}" echo "last=${ar[-1]}" echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식 # 현재 상황 declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho") ar[100]=hello # 인덱스를 건너 뛰어도 동작한다. declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]=&

설치한 패키지에서 RPM 추출하기

오래된 패키지를 관리할 저장소가 없어졌고, 기존 패키지로 다른 서버를 세팅해야할 일이 생겼다면 RPM의 리패키지 기능을 이용해보자. $ rpm -e --repackage [PACKAGE_NAME] 위와 같이 리패키지하면, /var/spool/repackage/ 에 생성한 RPM파일이 있다. :-)