기본 콘텐츠로 건너뛰기

11월, 2006의 게시물 표시

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

AdSense, 이글루에는 달 수 없어!

이글루는 스크립트 태그를 꽉꽉 막아놨다. 당연하지. 이용객이 이글루에 왔다가 쀍스런 웹어플 깔리거나 이상한 사이트로 가는 것을 막기 위한 것이다. 그런데 그것 때문에 AdSense를 내 이글루에 달 수 없다니... 난 뭘 해먹고 살아야하나. 흑흑 원본 위치: http://purewell.egloos.com/2848042

IPv6 확산

기사원문 거라쥐~* 우리나라 강점 가운데 하나는 시장 크기가 적절하다는 것이다. 미국이나 중국 같이 거대한 나라가 표준 한 번 바꾸려고 하면 대박난다. 이런 강점을 가지고 IPv6를 먼저 주도했으면 한다. 휴대전화 24핀 데이터캐이블 통합과 현재 추진하고 있는 노트북 충전단자 통합 그리고 IPv6로 통합. * ㅂ*) 기대하고 있겠어. 원본 위치: http://purewell.egloos.com/2843917

죽어! 죽지마!?

이 놈의 서버가 미쳤다. 무슨 프로그램이든 버그를 고칠 때 중요한 정보가 몇가지 있다. 그 가운데 하나는 재현 이다. 그런데 미칠 것 같은 경우는 재현이 잘 안 되는 경우이다. 썅, 잡으려고 하니 숨어버리는 버그. 그렇다고 그냥 지나치기 너무 찜찜하다. 원본 위치: http://purewell.egloos.com/2834032

Jet Lag

으읔! 몰디브와 우리나라는 4시간 차이가 난다. 몰디브에 가서 생활할 때는 크게 어려움을 못 느꼈지만 우리나라에 돌아오니 몸이 엉망이다. 몸이 너무 무거워... :-$ 원본 위치: http://purewell.egloos.com/2833912

signal 처리 중에 signal이 발생하면?

이것저것 더 테스트 해봐야하지만, signal 처리 시 signal 이 발생하면 무슨 일이 생길까? sf.cpp 원문 #include <signal.h> #include <iostream> using namespace std; void sigFunc(int sig) {         cerr << "SIGNUM: " << sig << endl;         cerr << "I'll make segmentation fault" << endl; /*         char* p(NULL);         *p = 20; */         abort(); } int main(int,char**) {         signal(SIGSEGV, sigFunc);         char* p(NULL);         *p = 20;         return 0; } 컴파일 $ g++ -g -o sf sf.cpp 실행 ./sf SIGNUM: 11 I'll make segmentation fault Aborted (core dumped) 디버깅 $gdb -c core.24262 ./sf GNU gdb Red Hat Linux (6.3.0.0-1.63rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB.  Type "show warranty" for deta

MD5와 Brute force attack

MD5 는 해시함수이다. 따라서 알고리즘에 버그가 있지 않는 이상, 해시 결과값을 알았다고 해서 원문을 알아낼 수 없다. 이런 특성을 이용하여 인증처리할 때 암호를 MD5로 변환하여 사용하는 방법이 많다. 이러한 MD5 방식은 원본 문자열을 알 수 없지만 다른 원본 문자열에 대해 동일한 해시 결과값이 분명히 존재한다. 따라서 해커는 원본문자열을 찾으려고 하지 않는다. MD5 해시 결과값을 얻어냈다면 동일 조건에서 같은 해시값을 만드는 다른 원본 문자열을 가장 무식하고 가장 위험한 방법인 brute force attack으로 얻어낸다. 예를 들어 'abcd'의 MD5 해시값이 'F0F0'이며 'hacker_killer_0029'의 MD5 해시값 역시 동일한 'F0F0'이다. 이렇다면 해커는 단순히 'abcd'라는 원본 문자열을 찾을 필요 없이 암호에 'hacker_killer_0029'를 넣으면 동일한 해시로 인해 일반적인 인증에서 무사히 통과할 것이다. brute force attack은 문자열을 차례대로 조합하면서 일일이 대입하는 공격법인데 단점이라면 보통 시간이 많이 걸린다는 것이다. 이러한 단점은 컴퓨터가 빨라지면서 사라지고 있다. 게다가 컴퓨터가 여러개라면 병렬처리해서 작업해야할 문자열을 나눠서 대입할 수도 있다. 검색해보면 해당 논의가 엄청나고 툴도 다양하다는 것을 쉽게 알 수 있다. 결론 1. 해시값을 감춰야할 것이다. 결론 2. 젝필드 삼종세트!! ㅡ_-)b 막고 품는데 장사 없다. 원본 위치: http://purewell.egloos.com/2809109

메신저 보안

뻥뻥 뚫리는 메신저 난 도대체 기자가 무슨 생각으로 저렇게 쓰는지 모르겠다. 일단 터트리고 보자가 분명하다. 분명 교수진이 말하고자 한 것은 간단한 암호는 Brute Force Attack으로 쉽게 풀린다는 것이다. 이건 여느 시스템이나 같은 논리이다. 암호가 1234이면 최소 1234번 대입해보면 당연히 뚫리는거다. 종양일보 기자, 뭘 믿고 저럴까? 원본 위치: http://purewell.egloos.com/2808668

softirq

리눅스 2.4.x에서 등장한 것으로 인터럽트 핸들러가 처리하는 시간이 길어지는 동안 동일 비중의 인터럽트 처리가 늦어지거나 인터럽트 이벤트를 놓치는 것을 최대한 막고자 해당 인터럽트를 소프트웨어적으로 나누어 처리하는 것이다. ksoftirqd이라는 커널 스레드가 관리하는데 보통 엄청난 양의 인터럽트가 한꺼번에 발생할 때 나타나서 cpu 점유율을 상승한다. ksoftirqd의 cpu 점유율이 상승하는  때는 보통 디스크 오류로 인해 디스크 I/O가 원할하지 않거나 네트워크 부하가 심할 때 발생한다. 알아야할 사항: Top-half: 인터럽트 핸들을 빠르게 처리한다. Bottom-half: 핸들처리를 빨리 하지 않아도 되는 경우. 인터럽트 이벤트를 미리 받아놓고 softirq가 나중에 가끔씩 처리하게 하는 방식. 원본 위치: http://purewell.egloos.com/2804177

vim tip

:set is - Increase search: 한 글자 칠 때마다 바로바로 찾아서 간다. (FF 기본 찾기가 이런 식이지) :set hls - Highlight search: 찾은 단어에 하이라이트를 먹인다. zf - 소스 접기(fold) zo - 소스 열기(open) :mkview - 폴드(를 비롯한 여러) 상태 저장 :loadview - 폴드(를 비롯한 여러) 상태 복원 KLDP위키 내용이 충실하군 원본 위치: http://purewell.egloos.com/2802913

blar == 부랄?

회사에서 같이 근무하는 A군 과 대화한 것. A군: 그 모시기냐. 패킷 패킹하는 부분 보여줄 수 있어? 참고 좀 하게. ㅋㅋ 유빈: #pragma pack(1) typedef struct _header_t { blar blar blar } header_t; #pragma pack() A군: 이게 모시다냐? 유빈: 패킹 A군: blar 부랄 이네... 오우~ 저질이야~ ㅋㄷㅋㄷ 원본 위치: http://purewell.egloos.com/2801305

네이트 ⓜ 메신저

http://pandora.tv/channel/prg/default.asp?mode=view&ch_userid=beliefjihun&id=2581231 TV에 나오는 네이트 ⓜ 메신저 이다. 언뜻 보기에 ' 네이트온 인가?' 했지만 역시나 아니었다. 네이트온 메신저와 전혀 다른 종류 서비스였다. 근데 어찌 네이트온 메신저에서 사용하는 캐릭터하고 이리 비스무레하게 만들었을까? (짝퉁 같다 ㅋㄷㅋㄷ) 원본 위치: http://purewell.egloos.com/2800783

Memory Map

Memory-map은 파일내용을 메모리와 동기화하는 것이다. 예를 들어 mmap.txt에 'Hello, World!'를 저장하면 mmap.txt를 연결한 프로세스의 메모리에 해당 내용이 바뀐다. #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <unistd.h> #include <fcntl.h> #include <iostream> using namespace std; size_t memsize = 30; int main(int,char**) {     int fd = open("mmap.txt", O_RDWR|O_CREAT);     if (0 > fd)     {         cerr << "failed to create or open file" << endl;         return 1;     }     char* fp(NULL);     fp = (char*)mmap(0, memsize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);     if ( MAP_FAILED == fp )     {         cerr << "failed to map memory" << endl;         return 1;     }     cerr << "fp: " << (void*)fp << endl;     cerr << "write" << endl;     sprintf(fp, "Hello, world!");     cerr << "all done." << endl;     return 0; } 이렇게 하면 파일에 ;H

Linux에서 램디스크 잡기

전에 올린 RAMdisk하고는 조금 다른 개념으로 Linux에 RAMdisk를 이용하여 DC의 안정성을 확보하는 어떨까한다. RAMdisk는 HDD의 Block-device와 동일한 인터패이스를 제공한다. 따라서 별 다른 포팅 없이도 read/write로 입출력을 제어할 수 있다. 가장 큰 장점은 다른 거의 모든 저장 장치에 비해 미칠 듯이 빠르다는 것이다. (랜덤 억세스 단위가 ns) 단점은 휘발성과 가격이겠지만... 각설하고 아래와 같은 테스트 상황을 만들었다. 환경 CPU: AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ OS: Linux 2.6.18-1.2798.fc6 RAM: 2,055,528 KB Compiler: gcc 4.1.1 20061011 (Red Hat 4.1.1-30) 소스 #define _LARGEFILE64_SOURCE #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <libgen.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> uint64_t getNow(void) {         static struct timeval tv;         gettimeofday(&tv, NULL);         return (uint64_t)tv.tv_sec*1000000ULL + (uint64_t)tv.tv_usec; } int main(int argc,char* argv[]) {         const char* proc = basename(argv[0]);         char name[1024];         sprintf(name, ".%s.swp", proc)

Performancing, egloos, category

뭐... 뭐지? 전에는 분명히 카테고리 무시하고 언제나 '미분류'였는데, 어제부터 왠지 모르게 카테고리를 잘 반영하고 있다. 그새 반영한거야? 빠른데? 관련글: 이글루스는 Performancing의 카테고리를 인식할 수 없나? 원본 위치: http://purewell.egloos.com/2793833

싱크가 깨진다는 건 정말 무서운 일이야

가끔씩 같은 일을 하는 서버를 여러개 둘 때마다 골치 아픈게 싱크. 데이터 싱크가 안 맞아서 같은 답을 내와야할 때 서로 다른 답을 내놓는다면 그것만큼 위험한 것도 없다. :o) 하지만, 이 세상 어디에도 완벽한 싱크를 하는 서버군은 없다는 것이 내 마음을 위로해준다. (그래도 싱크 깨지면 안 돼!) 원본 위치: http://purewell.egloos.com/2792076

스왑 테스트

아래 소스는 필요한 만큼 메모리를 소비해서 아무 글쇠나 누를 때까지 기다려주는 간단한 프로그램이다. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc,char** argv) {     if (argc < 2)     {         printf("bigmem [memory size, MB]\n");         return 1;     }     size_t size = atoi(argv[1]) * 1024 * 1024;     if ( size <= 0 )     {         printf("invalid argument: %s", argv[1]);         return 1;     }     char* ptr = (char*)malloc(size);     if ( !ptr )     {         printf("failed to allocation\n");         return 1;     }     char* ptr2 = ptr;     for (size_t i = 0; i < size; i++)     {         *ptr2 = 0x00;         ++ptr2;     }     printf("press return key to exit.\n");     fd_set rtest, ts;     FD_ZERO(&rtest);     FD_SET(0, &rtest);     struct timeval tv;     do     {         *(ptr + (rand()%size)) = 0x00;         ts = rtest;         memset(&tv, 0x00, sizeof(tv));         select(FD_SETSIZE, &

블로그 이전 프로그램

블로그 이전 프로그램 은 각 블로그에서 제공하는 API를 이용하여 블로그를 복제하는 툴이다. > ㅂ<)/ 만든 사람에게 찬사를 보낸다. 그러나 이사 자주 하는 사람치고 글에 신경 쓰는 사람 별로 못 본 관계로 일단 정착. ㅡ,.-); 원본 위치: http://purewell.egloos.com/2791415

이 블로그의 인기 게시물

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