기본 콘텐츠로 건너뛰기

12월, 2007의 게시물 표시

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

요즘 게임

요즘 게임, 초호화 그래픽에 각종 현실에 가까운 시스템(물리+조작)을 보여주고 있다. 오~ 박수박수~ 짝짝짝... 그런데 주인님이랑 같이 할만한 게임은 없네? 역시 Wii가 대세인가? 원본 위치: http://purewell.egloos.com/3539493

레진, 웰컴백이여?

우왕ㅋ굳ㅋ 망콘콘은 너무 애니 위주라 그다지... 역시 축구블로그 레진이 최고! 원본 위치: http://purewell.egloos.com/3530691

virtual destructor in C++

소스 #include <iostream> using namespace std; #define SHOWFUN() do { cerr << __PRETTY_FUNCTION__ << endl; } while(false) class CParent1 { public: explicit CParent1() {SHOWFUN();} ~CParent1() {SHOWFUN();} virtual void doWhat(void) const {SHOWFUN();} }; class CChild1 : public CParent1 { public: explicit CChild1() {SHOWFUN();} ~CChild1() {SHOWFUN();} virtual void doWhat(void) const {SHOWFUN();} }; class CParent2 { public: explicit CParent2() {SHOWFUN();} virtual ~CParent2() {SHOWFUN();} virtual void doWhat(void) const {SHOWFUN();} }; class CChild2 : public CParent2 { public: explicit CChild2() {SHOWFUN();} virtual ~CChild2() {SHOWFUN();} virtual void doWhat(void) const {SHOWFUN();} }; class CChild3 : public CParent1 { public: explicit CChild3() {SHOWFUN();} virtual ~CChild3() {SHOWFUN();} virtual void doWhat(void) const {SHOWFUN();} }; class CChild4 : public CParent2 { public: explicit CChild4() {SHOWF

산타 이슬이, 네이트온!

친구목록창에 등장한 산타 이슬이 그리고 대화창에 '크리스마스'를 입력하면 나타나는 키워드 대화창 난 솔로 가 아니므로 별 감흥 없음~* 원본 위치: http://purewell.egloos.com/3528465

누구 잘못인지 좌시하지 않겠다

풀리지 않던 수수께기가 오늘 풀렸다. 열심히 어떤 I/F를 호출하는데 인자로 'name'이 들어가야 한다. 그러나 오늘 vim으로 내가 짠 소스를 다시 까보니 'nmae'이라고 들어가 있었다. 분명히 난 'name'으로 썼단 말이다! 이것은 음모야! Linux, VIM, GCC, BASH 이 중에 하나야. 누구 잘못인지 좌시하지 않겠다! Powered by ScribeFire . 원본 위치: http://purewell.egloos.com/3525106

이글루스, 엠파스와 손잡다!

검색 서비스 변경 사항 안내 이글루스 검색 엠파스와 통합해줘, 제발! 어후, 이제야 통합하는겨? 엠파스 엔진만 썼든, 엠파스와 연동하든 중요한 건 전문검색엔진이 내 블로그 안에 문서를 손쉽게 찾아줄 수 있다는 것! 정말이지 파인더는 안습이었어. SK컴즈 인수합병은 이런 양질 시너지를 만들어내는군. 후후후... 이제 SK컴즈에서 고드름(또는 도토리?)만 팔면 완성(?)인 것인가? 덧글: 아마 이글루스는 이글루스 성질을 그대로 이어 가서 고드름 같은 것은 절대로 팔지 않을 성 싶다. 이글루스 수익은 블로그 광고라는 새로운 돌파구를 찾은 듯 하니까. 원본 위치: http://purewell.egloos.com/3523903

구라 생일빵 위임장

감기몸살보단 고양이에 쩔어 꾀병으로 월요일 출근을 하지 않은 샤드르 친필로 쓴 구라 생일빵 위임장 감기몸살과 과로, 우울한 생각 등에 쩔어 월요일에도 조낸 빡신 근무 중인 백탄환 친필로 쓴 구라 생일빵 위임장 ㄱ- 정확히 잘 받았다. 이거 들고가서 조낸 패버려야지. 원본 위치: http://purewell.egloos.com/3523437

find_if 찾지 못하면?

당연한 결과겠지만, 맨 뒷 녀석이 나오겠지. #include <algorithm> #include <functional> #include <iostream> using namespace std; int main(int argc, char* argv[]) { const char buf[] = "Hello, world!"; const char* pb(buf); const char* pe(buf+sizeof(buf)); const char* r1(NULL); const char* r2(NULL); r1 = find_if(pb,pe,bind2nd(equal_to<char>(), 'w')); r2 = find_if(pb,pe,bind2nd(equal_to<char>(), '*')); cout << "Source: " << buf << endl; cout << "pb: " << (void*)pb << endl; cout << "pe: " << (void*)pe << endl; cout << "find_if(w): " << (void*)r1 << endl; cout << "find_if(*): " << (void*)r2 << endl; return EXIT_SUCCESS; } 결과는... $ ./find_if Source: Hello, world! pb: 0x7fffd0010550 pe: 0x7fffd001055e find_if(w): 0x7fffd0010557 find_if(*): 0x7fffd001055e

찌질이 동영상을 본 누님

샘이: 찌질이 동영상 봐바. 스푸키: 금방 봤다. -_- 미친... 지가 능력 없고 눈만 높아서 취직 안 되는 걸... 디자인 전공 안 해도 얼마든지 능력만 있고 의지만 있음 일할 수 있는데... 무슨... 아, 열 받네! 샘이: 힘 없고 돈 없고 백 없는 형이 참아. 참고로 스푸키 누님은 나와 같이 산꼴짝 전자정보공학부를 나오신 분이다. 현재는 Mobile Application에 들어가는 각종 디자인 작업을 하시는 분. 아주 잘 벌진 못해도 자신이 하고 싶은 일 '즐기면서' 행복하게 사시는 분이다. Powered by ScribeFire . 원본 위치: http://purewell.egloos.com/3519489

bind2nd 컴파일 오류2

bind2nd 컴파일 오류 아, 시바스 리갈 같은 상황. 이럴꺼면 뭣하러 STL써! #include <list> #include <algorithm> #include <functional> #include <iostream> using namespace std; typedef struct mystorage { int i; char c; } mystorage; #if defined(POINTER_TYPE) typedef list<mystorage*> mylist; #else typedef list<mystorage> mylist; #endif #if defined(POINTER_TYPE) inline bool check(const mystorage* _s, int id) { const mystorage& s(*_s); #else inline bool check(const mystorage s, int id) // You can't use below function type. // Standard C++ does not support ref of ref. //check(const mystorage& s, int id) { #endif return s.i == id; } void addList(mylist& lst) { for ( size_t i(0); i<1000; i++ ) { #if defined(POINTER_TYPE) lst.push_front(new mystorage); mystorage& s(**lst.begin()); #else lst.push_front(mystorage()); mystorage& s(*lst.begin()); #endif s.i = i; s.c = i%26+'A';

HSBC Direct?

우리은행랑 거래 안 할래 예금자보호가 되며, 연 5% 복리를 퉷퉷 뱉어주는 자율통장 가운데 대표적인 것은 동양종금CMA이다. 은행 체크카드처럼 여기서도 체크카드 주고, 은행에서 만든 통장으로 할 수 있는 것을 모두 할 수 있기에 너도 나도 이곳으로 월급통장 갈아타기를 하고 있다. (서민홀대은행 안녕~!) 난? HSBC Direct 쓰고 있다. 위에 언급한 이율을 그대로 주고 있다. 매일매일 확인도 가능하고, 매달 SMS로 이자가 얼마 붙고 세금을 얼마 뗐는지 보내준다. 아흥~* 그러나 아직 월급통장을 HSBC Direct로 옮기지 않았다. 이유는 아직 HSBC에는 체크카드가 없다. 내년에 만들어준다고 하는데... 흠... 괜히 사서 고생하지 말고 동양종금CMA로 옮길까나... 원본 위치: http://purewell.egloos.com/3516871

bind2nd 컴파일 오류

아래와 같은 소스에서 bind2nd에서 컴파일 오류가 난다. #include <list> #include <algorithm> #include <functional> using namespace std; typedef struct mystorage { int i; char c; } mystorage; typedef list<char*> mylist; inline bool check(const mystorage& s, int id) { return s.i == id; } int main(int,char**) { mylist lst; mylist::iterator ib; bind2nd(ptr_fun(check), 10); return 0; } 아래는 컴파일과 오류이다. $ g++ -c bind2nd.cpp /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h: In instantiation of ‘std::binder2nd<std::pointer_to_binary_function<const mystorage&, int, bool> >’: /home/daldev/purewell/stuff/pwprj/src/bind2nd/main.cpp:27:   instantiated from here /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h:439: error: forming reference to reference type ‘const mystorage&’ /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_func

Linux 프로세스별 CPU 점유율 구하기

이 방법은 전체시간에 대해 프로세스 소모시간을 구한 것이고, 순간순간마다 구하려면 이전 상태를 저장하고 있어야한다. /proc/uptime에서 첫번째 항목을 저장한다. - uptime /proc/pid/stat 에서 starttime, utime, stime을 각각 저장한다. percent = (utime+stime) / (uptime-starttime/HZ) * HZ는 <sys/param.h>에서 sysconf(_SC_CLK_TCK)로 정의함. Powered by ScribeFire . 원본 위치: http://purewell.egloos.com/3516509

Linux /proc/pid/stat 구조

Linux 2.6 / 출처: http://linux.die.net/man/5/proc ㅡ_-) 중간에 쓰이지 않는 '0' 필드가 있으니 주의!!! pid %d     The process ID. comm %s     The filename of the executable, in parentheses. This is visible whether or not the executable is swapped out. state %c     One character from the string "RSDZTW" where R is running, S is sleeping in an interruptible wait, D is waiting in uninterruptible disk sleep, Z is zombie, T is traced or stopped (on a signal), and W is paging. ppid %d     The PID of the parent. pgrp %d     The process group ID of the process. session %d     The session ID of the process. tty_nr %d     The tty the process uses. tpgid %d     The process group ID of the process which currently owns the tty that the process is connected to. flags %lu     The kernel flags word of the process. For bit meanings, see the PF_* defines in <linux/sched.h>. Details depend on the kernel version. minflt %lu     The number of minor faults the process has made which have not required loa

Linux에서 CPU 사용률 구하기

procps 패키지에서 top 소스를 까보면 쉽게 알 수 있다. 일단 CPU개수를 구해야하는데, sysconf(_SC_NPROCESSORS_ONLN)로 쉽게 구할 수 있다. (아쉽게도 표준이 아니므로 다른 OS에서 잘 돌아간다는 보장은 없다) 다음은 현재 CPU 사용률을 구해야하는데 리눅스는 이것을 /proc/stat에 텍스트 형태로 저장한다. 형태는 아래와 같다. cpu user system nice idle wait hi si zero cpu? user system nice idle wait hi si zero (반복...) 첫 라인은 전체 cpu 평균을 가르키는 것 같다.(막가는거지요?) 다음 줄부터는 CPU 정보를 cpu0부터 표기하였다. 각 필드는 리눅스 시간 단위인 jiffies로 내용은 아래와 같다. user : 사용자 영역 코드 실행 시간 system: 커널 영역 코드 실행 시간 nice : 기본보다 낮은 우선순위로 실행한 사용자 영역 코드 실행 시간 idle : I/O 완료가 아닌 대기 시간 wait : I/O 완료 대기 시간 hi : Hard Interrupt(IRQ) si : Soft Interrupt(SoftIRQ) zero : 끝 위 필드는 stat파일을 열 때, 컴퓨터를 켠 시점부터 jiffies누적이므로 top에서 보여주는 사용률을 구하기 위해서 이전 값을 저장해서 현재 값과 차를 구해야한다. 각 사용률(percent)를 위한 총합은 위에 제시한 모든 필드를 몽땅 더하는 것으로 구할 수 있다. 참고로 위 값은 커널 버전에 따라 wait, hi, si 필드가 없을 수 있다. 2.6 이상 버전은 모두 표시하기때문에 가볍게 넘어가도록 하자. Powered by ScribeFire . 원본 위치: http://purewell.egloos.com/3513312

FreeBSD: Limiting open port RST response from xxx to 200 packets/sec

FreeBSD에서 /var/log/message 안에 "Limiting open port RST response from xxx to 200 packets/sec" 라는 메시지를 볼 수 있다. 외부로부터 잘못된 SYN요청이 과도하게 들어와서 RST로 응답하는 회수를 초당 200건으로 제한했다는 의미이다. 이게 SYN 공격을 통해서 발생할 수도 있지만, 의도치 않게 네트워크 상황에 따라 발생할 수도 있다. 예를 들어 해외에 NAT로 묶인 망이 있고, 그곳에 서비스 이용 클라이언트가 3,000개(순단 시 자동으로 재접속 시도가 있다는 것도 가정!)가 있다는 가정을 해보자. 해외망 특성상 네트워크 순단이 숨쉬기보다 조금 덜 발생 하는데, 위에서 말한 망이 살짝 순단일 경우 동시에 3,000개 접속(session)이 떨궈진다. 이때 거의 한정적인 아이피 - NAT에 묶여 있으니 - 에서 많은 SYN이 발생할 것이다. 게다가 이런 경우 심심치 않게 중간 망이나 NAT쪽 망이 갑자기 부하가 몰려 장비가 앉았다 일어났다를 빠르게 반복할 수도 있다. NAT에 묶인 클라이언트 OS는 connection timeout를 뿜기 전에 SYN을 몇 번 더 보내볼 것이고... 덕분에 서비스를 제공한 서버로 의도와 상관 없이 DDoS SYN attack을 날려주는 멋진 결과를 선사한다. 공격이라고 생각한다면 tcpdump를 이용해서 패킷을 걸러내는 문서 를 참조해보자. Powered by ScribeFire . 원본 위치: http://purewell.egloos.com/3513098

이 블로그의 인기 게시물

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파일이 있다. :-)