기본 콘텐츠로 건너뛰기

10월, 2007의 게시물 표시

귀리가 가지는 놀라운 성장 속도!!

자주 애용하고 있는 09밥에서 고양이에게 먹이면 헤어볼을 없애는데 도움을 준다는 귀리 씨앗을 단돈 500원에 구했다. 집에 도착했을 땐 조그마한 채변봉투(?) 같은 곳에 꽤나 많은 귀리가 담겨 있었다. 귀리는 파란색을 띄고 있었는데, 그것은 소독약 때문일 것이다. 현재는 귀리가 참살이를 위한 곡물로 다시 평가를 받았지만, 이 녀석도 시대에 따라 평가가 180도 달라지는 녀석이다. 각설하고 이 녀석을 화분에 콕콕 찍어 심어놓고 하루 지났는데, 흙위로 씨앗이 도로 올라와 있길래 로빈이 장난친 것인 줄 알았다. 그런데 바로 다음날 귀리싹이 트기 시작했다. 이건 아침 10시 즈음에 찍은거고, 아래는 당일 늦은 5시에 찍은 것이다. 그리고... ㅡ_-)b 아래는 움 튼 지 이틀째... 잡초 근성을 배워야하나 말아야하나... 원본 위치: http://purewell.egloos.com/3463453

예약, 사설, 루프백 주소

범위 설명 0.0.0.0 ~ 0.255.255.255 예약 10.0.0.0 ~ 10.255.255.255 사설 127.0.0.0 ~ 127.255.255.255 루프백 128.0.0.0 ~ 128.0.255.255 예약 168.254.0.0 ~ 169.254.255.255 사설(APIPA) 172.16.0.0 ~ 172.31.255.255 사설 191.255.0.0 ~ 191.255.255.255 예약 192.0.0.0 ~ 192.0.0.255 예약 192.168.0.0 ~ 192.168.255.255 사설 223.255.255.0 ~ 223.255.255.255 예약 원본 위치: http://purewell.egloos.com/3453644

Subnet Mask 표시 방법

현재는 단순 클래스 단위 보단 서브넷을 이용한 클래스 단위 주소지정을 주로 한다. 단순클래스단위주소지정 = 네트워크ID + 호스트ID 서브넷클래스단위주소지정 = 네트워크ID + (서브넷ID + 호스트ID) 이때 네트워크ID와 기타ID 경계를 분리하기 위해 Subnet Mask라는 녀석을 쓴다. Subnet Mask는 처음 비트부터 어느 비트까지 네트워크ID인지를 비트로 표시한 것이다. 표시는 두 가지 방법을 많이 쓰는데, 1인 비트 개수만 적는 방법과, 10진수와 점을 이용한 방법이다. xxx.xxx.xxx.xxx/xx xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx 예를 들어 210.117.180.134에서 Subnet Mask가 24이면 아래와 같이 표현 가능하다. 210.117.180.134/24 255.255.255.0 이렇게 해서 Subnet Mask를 원래 아이피와 비트연산을 하면 네트워크ID는 210.117.180.0이고, 호스트ID는 0.0.0.134이다. 원본 위치: http://purewell.egloos.com/3453249

공정률 확인

터키쉬 앙고라 생산 중... 벌써 이만큼 컸구랴... 아부지께서 휴대폰으로 찍은거라 이미지가 잘 보이진 않지만... 외계인이잖아 -_- 하긴 로빈도 만만치 않았지... orz 원본 위치: http://purewell.egloos.com/3452475

epoll_ctl 오류

epoll_ctl를 이용하여, fd를 감시하라고 EPOLL_CTL_ADD한 뒤, 실수로 같은 fd를 또 추가하려고 한 경우 epoll_ctl은 EEXIST(File exists) 오류를 퉤!하고 뱉는다. 추가 되어 있지 않은 녀석을 EPOLL_CTL_MOD, EPOLL_CTL_DEL할 경우엔 ENOENT(No such file or directory) 오류를 퉤!하고 뱉는다. (드러운데 패버릴까?) 덧글: Linux Kernel 2.6.9 이전 버전은 EPOLL_CTL_DEL에 대해 네번째 인자를 반드시 요구하였지만, 이후 버전부터 삭제할 녀석에 대해 알고 싶지 않을 경우 네번째 인자를 NULL로 세팅해도 까칠하게 에러 뱉지 않는다. 원본 위치: http://purewell.egloos.com/3451855

소켓 접속 정보가 문자열일 경우...getaddrinfo

http://www.purewell.biz:80/index.html 같은 주소를 볼 때, 호스트 주소는 www.purewell.biz, 서비스(포트번호)는 80이다. 이것을 이용하여 접속을 위해 struct sockaddr_in 구조체를 만들 때, 번잡스럽게 atoi와 hton?함수를 쓸 것인가... 아직 눈앞에 닥치지는 않았지만, IPv6도 해결하고 싶은데... 그럴 때를 위해 getaddrinfo 함수를 준비하였다. #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> int connect(const char* host, const char* port) { struct addrinfo hints, *res, *ressave; int sock, ret; memset(&hints, 0x00, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if ( 0 != (ret = getaddrinfo(host, port, &hints, &res)) ) { fprintf(stderr, "%s", gai_strerror(ret)); return -1; } ressave = res; do { sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if ( -1 == sock ) { continue; } if ( 0 == connect(sock, res->ai_addr, res->ai_addrlen) ) { break;

TCP 바로 알기

회사에서 진행하고 있는 FT 구성원과 함께 찍은 사진. 허락 없이 올려도 될라나... 설마 빚쟁이한테 쫓기는 분은 없겠지... 원본 위치: http://purewell.egloos.com/3451501

보증금 반환 신청

2004년이던가... 원룸에 들어가서 살았던 적이 있었지. 보증금 내고 월세로 들어 살고 있었는데, 2005년 2월, 나갈 때 즈음해서 주인이 대문에 메모를 남긴거야. 대리인 정동성이 돈 떼먹고 날랐다 이거야. 주인은 자신과 계약하지 않은 것이고, 돈 받은 적 없다고 딱 잡아 떼면서 돈 못 주겠다는거야. 아뿔싸! 주인 등 쳐먹고 나른 대리인이나, 모르쇠 일관하는 주인새끼나 그 나물에 그 밥인게 어떻게 1년 넘게 사람이 살고 있었는데 월세나 전세, 또는 보증금을 전혀 받지 않았다고 할 수 있는건지 어처구니가 없었지. 그런데 나 혼자만 당한게 아니라 그 원룸 거의 모든 세대가 그렇게 당했더라구. 난 뭣도 모르고 제일 먼저 혼자 법원에 고소장 제출했고, 나중에서야 사람들이 모여서 소장을 제출했더라고. 담당판사에게 같은 사건이라고 같이 판결해달라고 해서, 2007년 여름에 겨우 승소했어. 판결문에는 주인에게 보증금 반환 신청을 한 날짜부터 법정금리대로 이자 쳐서 세입자에게 돌려주라고 적혀 있었지. 물론 재판 비용까지 몽땅~ 기뻤지. 당장에 돈을 돌려 받을 것을 생각하고 원룸과 집을 세입자들이 가처분 신청을 해버렸지. 돈 안 돌려주면 경매에 집이고 원룸이고 저렴한 가격에 경매에 부치겠다는거지. 이러한 기쁨도 아주 잠깐. 주인이 항소한거야. 항소장을 받아봤는데 억울하다는 이야기 외에는 바뀐게 없더라고. 보통 이렇게 별 새로운 내용이 없는데 항소하면 법원에서 기각하는거 같던데... 뭐 어떻게든 주인은 항소했고, 세입자는 집과 원룸 건물을 경매로 넘기는 일을 진행하고 있었지. 항소와 별개로 판결이 완료된 것에 대해 이런 것을 할 수 있다고 하더구만. 뭐, 항소한 재판도 1~2년 걸리겠지... 그 동안 세입자들은 원룸과 집을 모두 경매에 부쳐 팔아버리면 주인만 손해더라구. 그래서 지난 주 수요일에 주인이 전화를 했다더군. 합의하자고... 아직 딱히 어떻게 결정된 사항은 아니지만, 기록은 남겨줘야지. 원본 위치: http://purewell.egloos.com/3448653

로빈, 봉투에 사로 잡히다!

본 포스팅은 우리 회사에 임모양이 밥 먹을 때 책상을 치고 눈을 부릅뜨면서 협박했던 것과는 절대로 무관한 것으로 그냥 키우던 고양이가 하는 짓이 귀여워서 찍은 사진 몇 장 올린 것일뿐이다. 절대로 협박과는 무관하다. 절대로 때리지만 말아달라. 아프다... 요즘 로빈이 비닐봉투에 사로잡혀 있다. 조금 두껍고 질긴 비닐봉투인데, 딱 몸크기에 맞는 크기다. 좀 있으면 못 들어갈지도 모른다. 웹서핑을 하면서 고양이 용품 쇼핑몰을 탐색하던 도중, 터널 같은 것과 따스한 주머니를 발견했다. 그러나 가격이 만만치 않더구만... 터널은 마음에 드는 것이 거의 3만원 수준이고, 주머니도 별 것 아닌 것 같은데 1만원이나 했다. 결국 장바구니에서 삭제하고 집에 비닐봉투 모아둔 곳에서 꺼내준 녀석이다. ㅠ_-) 아래는 로빈 사진과 -_- 깃털 장난감에 깝쭉거리는 로빈 동영상!! 중간에 나오는 이상한 괴 생물체는 무시하도록 하자. 원본 위치: http://purewell.egloos.com/3447219

악덕 이용자 덕이 선한 이용자가 피해보는 것

개인정보보호정책이 변경됩니다. 딱히 선한 이용자가 피해를 보는 것은 아니지만, 뭔가 내 정보를 해당 서비스를 사용하지도 않는데도 계속 가지고 있다는 것은 좀 찜찜하다. 악덕한 미꾸라지 몇 마리 잡기 위해 모든 이용자를 동일 프로세스에 넣는 사례는 이글루스 뿐만 아니다. MS의 WGA를 비롯한 각종 소프트웨어 정품 이용자 인증이 악덕 이용자를 잡기 위해 모든 이용자를 동일 프로세스에 넣었다. ㅡ_-)a 뭐, 이렇게 밖에 할 수 없는 것인가... 원본 위치: http://purewell.egloos.com/3440860

해커와 ssh

흠... SSH는 꽤나 높은 암호화 수준으로 쉘을 열어주는 서비스이다. 그런데 이놈 포트도 표준으로 22번이 열려 있는데, /var/log/message나 /var/log/security에 ssh 암호 실패 로그 보면 짜증날 정도로 많은 접근을 하는 것을 볼 수 있다. 가볍게 /etc/ssh/sshd_config 에서 Port를 다른 숫자로 바꿔주고, nohup service sshd restart 해주면 가볍게 포트를 바꿀 수 있다. (빨갱이모자 기준) 원본 위치: http://purewell.egloos.com/3439007

앞으로 한국말, 한글 쓰지 마세요.

스펀지 - 한기총의 성조기는 별이 52개다! 막장테크 지대로 타는군. 아무리 1조보(-步) 양보해도, 저것들 볼 때마다 왜 이 땅에서 한글, 우리말을 쓰면서 떳떳히 살고 있는지 의문이다. 그렇게 좋으면 그냥 짐 싸들고 가. 아무도 안 말려. 원본 위치: http://purewell.egloos.com/3433100

기자에게 낚인걸까? (PIFF)

엠파스 뉴스 사실 빗물이 좔좔 새는 건물은 확실히 잘못된 것 맞지만, 정확하지 않은 보도도 문제가 있다. ...근데 하도 많이 속아서 저 기사도 맞는지 어쩌는지... 원본 위치: http://purewell.egloos.com/3432822

vimrc

내가 쓰는 vimrc. ~/.vimrc에 아래와 같이 넣고 쓰고 있지. set ts=4 set background=dark set ruler set history=100 set showcmd set incsearch set nohls set noai set nu syntax on set pastetoggle=<Ins> 원본 위치: http://purewell.egloos.com/3431441

expect를 이용한 조금 위험한 ssh login

보통 ssh에 암호 없이 로그인을 가능케하려면 ~/.ssh에 authorized_keys에 접속을 요청하는 쪽 키를 등록해야하지만, 서버가 수 백 대이고, 일일이 세팅하기 귀찮으면 조금 위험하지만 expect을 이용해 손쉽게 자동 로그인하게 할 수 있다. #!/usr/local/bin/expect -f set user [lrange $argv 0 0] set addr [lrange $argv 1 1] set pass [lrange $argv 2 2] set timeout -1 spawn ssh $user@$addr match_max 100000 expect {         "*?assword:*" {                 send -- $pass                 send -- "\r"                 send -- "\r"                 interact         } } 만약 바로 어떤 스크립트를 실행하고 끝내고 싶으면 스크립트를 인자에서 받아와서 ssh 명령 맨 뒤에 붙이고, interact 를 제거한 뒤에 맨 마지막 줄에 expect eof 를 삽입한다. 원본 위치: http://purewell.egloos.com/3431259

각종 편리한 BASH shell script 모음

http://bash.cyberciti.biz/ 원본 위치: http://purewell.egloos.com/3431219

메신저와 국어실력

기사 보기 세상 사람들은 뭔가에 연관 짓기를 정말 좋아하고, 책임을 떠넘기를 아주 좋아하는 것일까? 메신저는 편리하기 위해 만든 도구에 불과하다. 국어실력이 떨어진게 메신저 탓이 아니라, 메신저에서 짧게 치는게 편리하다고 생각하고 그렇게 적는 사람이 문제 아닌가? 나중에는 포스트잇 크기가 작아서 적을 수 있는 글자 수가 작아 국어실력이 떨어진다는 기사가 나올까 두렵다. 원본 위치: http://purewell.egloos.com/3429568

한글날

이야기 5.3을 켜면 제일 처음 떴던 것. '한글날이 국경일 이 되길...' 그리고 오늘은 한글날. 이렇게 어려움 없이 글을 쓰고, 서로 글로써 대화하는 것은 전부 세종대왕이 만든 한글 덕분이다. 원본 위치: http://purewell.egloos.com/3427977

삼색 얼룩 고양이 수컷이 희귀한 이유

스즈미야 하루히에 보면 샤미센이란 고양이가 삼색 얼룩 고양이 수컷으로 나오고, 남자 주인공 쿈이 대단히 희귀하다고 한다. 이유는 간단하다. 고양이 털 색을 결정 짓는 유전자는 X염색체에만 있는데, 정상적인 염색체를 가진 고양이라면 삼색 얼룩 고양이 조합은 암컷만이 가질 수 있다. ( 자세한 설명 ) 덧붙여 소설에 나오는 고양이가 나오려면 사실상 유전병에 해당하는 유전조합을 가져야한다. 결론은 버킹검. 덧글:: 그렇다고 그외 숫고양이가 희귀하다는건 아니다. 널리고 널린게 숫고양이. 원본 위치: http://purewell.egloos.com/3424691

요즘 로빈과 토니는!!

절대로 우리회사 오모양의 압박도, x무리 배모씨의 압박도, 달x리 차모씨의 압박에 의한 포스팅이 아니다. 그냥 순수하게 쌓인 사진 올리는거다. 정말이다. 믿어달라. ... 누구한테 하는 소린고? 로빈이 많이 컸다. 데려올 때 1.1kg이던 녀석이 접종 맞추러 병원 가서 재봤더니 2.2kg. 딱 x2로군! 얼굴도 아기 고양이에서 뭔가 성숙함이 느껴지는 얼굴로 변했다. 장모종 터키쉬앙고라답게 숫사자처럼 얼굴 양 옆으로 난 갈귀... 아, 로빈은 암컷지!? 불륜 현장을 습격한 사진이다. 벌거벗은 토니는 멀뚱멀뚱 쳐다보기만 하고, 로빈은 헉!이라고 놀란 표정. 로빈 에어로빅 체조 중. 헛둘헛둘. 로빈 요가 중...이기보단 일어나긴 귀찮고, 소리나는 곳은 보고 싶고... 그래서 베베 꼬는 저 유연성. 그랬다가 곰방 잠들고... 애견물품 사는 온라인 쇼핑몰에서 저렴하게 구입한 소쿠리. 공부방에 둘이서 열심히 스타하고 있고 소쿠리 옆에 놔뒀더니 토니가 먼저 자리 잡고 자고 있고, 다른 곳에서 자고 있는 로빈을 살포시 올려둔 설정 사진...이지만 너무 사랑스러운데!! 로빈: 너 뭐냐? 토니: 쿨~ 토니: 아, 썅... 사진 좀 찍지마... 귀여운 외모에 이면에는 악마 로빈이 있었다... 클리오네 랄까? 막 깨어난 토니 줌. 그 뒤에서 로빈이 몸단장 하고 있고... 몸단장 참 아크로바틱하게 하네... 로빈: 응? 로빈: 시방 뭐더는겨? 아가, 너 쫌 일루 와봐라. 손 좀 봐야 쓰겄다? 로빈: 아쭈? 이것이 아직도 카메라 안 끄네? 안 끌래? 잠자는 토니를 지켜보는 로빈... 로빈: 토니 보는거 지루해. 쥔장이 보면 안 되겠니? 로빈: 씨익~* (썩소작열!) '헉! 이런 곳까지!?'라는 표정. 이후... 귀찮아서 한꺼번에 올린 사진. 원본 위치: http://purewell.egloos.com/3423157

이글루스, 네이트온과 연동하다!

네이트온 연동 이벤트 오, 트랙백이나 덧글 달면 네이트온을 통해 뿅뿅뿅 나온다. 좋구나~* 그런데 역시나 리플에 SK인수와 이글루스의 색깔이란 말이 나온다. -_-a 네이트온 연동 자체와 이글루스의 색깔(비상업적인, 인간적인?)과 무슨 상관인지 모르겠다. 이글루스에서 고드름(싸이월드의 도토리 같이)을 판 것도 아닌데 말이다. ㅋㅋ 이글루스 나름대로 고객이 요구하는 기능을 알맞게 잘 개발해서 넣는 것 같다. 앞으로 무궁한 발전이 있길!! ... 남은 것은 엠파스와 검색 연동인가? 제발 빨리 좀 했으면... 원본 위치: http://purewell.egloos.com/3423121

unsigned type & loop

C/C++에는 여러가지 숫자변수형태가 있고, 이는 부호가 있는 것(signed)과 없는 것(unsigned)으로 나눌 수 있다. 오늘 할 이야기는 그 중에 하나 키가 크고요~...가 아니라 부호가 없는 것에 대한 저주스런 이야기이다. size_t i(delta); while ( i >= 0 ) { // blar blar... --i; } 이 소스는 CPU 100%를 쳐먹으면서 기계를 혹사시킬 것이다. 컴파일러나 라이브러리에 따라 그 구현이 다르겠지만, 보통 size_t는 unsigned long형이다. 십장생. i가 0이어도 루프는 한 번 더 돈다. 마지막에 i가 0이지만 감소연산을 때리면, i는 그것이 가질 수 있는 최대값으로 변모한다. 당연하지... unsigned니까. 결국 저 악마 같은 코드는 무한루프를 도는 것이다. 몇 년을 C/C++로 밥 벌어먹고 살아도 실수는 계속하기 마련인가?! 원본 위치: http://purewell.egloos.com/3417102

getopt 사용하기

Linux/UN*X에서 많이 쓰는 getopt 함수에 대해 정리한다. 다른거 다 필요 없고, 예제. #include <unistd.h> #include <stdio.h> #include <stdlib.h> void help(void) { // 중략... } int main(int argc, char* argv[]) { int opt; const char* optstr = "hf:"; char filename[1024+1] = ""; while (( opt = getopt(argc,argv,optstr) ) != -1 ) { switch (opt) { case 'h': help(); exit(EXIT_SUCCESS); case 'f': strcpy(filename,optarg);break; case '?': // invalid option exit(EXIT_FAILURE); case ':': // invalid format exit(EXIT_FAILURE); } } } 뭐... 대충 이런 식이다. 위에서 optstr에는 검출할 옵션 문자열을 정의하는 것으로 그냥 필요한 문자를 나열하고, 그 가운데 옵션이 더 필요한 녀석(예. -f filename.txt)만 뒤에 콜론을 붙여준다. 원본 위치: http://purewell.egloos.com/3414929

'string operator <' 구현은 0을 오른쪽에 두라.

string 같은 문자열에 비교 연산자를 구현할 때, strcmp 결과값이 0보다 크냐 작냐로 비교하는 것으로 한다. 이때 같다, 다르다 정도는 0이냐 아니냐로 구분을 쉽게 할 수 있지만, 크다 작다는 헷갈리기 시작한다. 자세한 사항을 기술하기도 귀찮으니 대충 이렇게 외워두면 되겠다. 'string operator <' 구현은 0을 오른쪽에 두라. 아래 소스를 보자. #include <string> #include <iostream> using namespace std; int main(int,char**) { const char* b1("12345"); const char* b2("22345"); const string s1(b1); const string s2(b2); cout << "strcmp(b1,b2): " << strcmp(b1,b2) << endl; cout << "s1.compare(s2): " << s1.compare(s2) << endl; cout << "s1.operator < (s2): " << (s1 < s2) << endl; cout << "strcmp(b1,b2) < 0: " << (strcmp(b1,b2) < 0) << endl; return 0; } 아무런 생각 없이 strcmp 결과를 왼쪽에, 0을 오른쪽에 놓으면 구현하고자 하는 연산자와 동일한 연산자로 비교할 수 있다. strcmp를 어떻게 구현했는지는 나중으로 미루자. 원본 위치: http://purewell.egloos.com/3414658