기본 콘텐츠로 건너뛰기

12월, 2009의 게시물 표시

숫자

주문한 튤립 도착

크리스마스엔 화분을~ 유후~* 주문한 튤립이 도착했다. 알이 모두 굵직굵직하고 단단한 놈이 왔다. ㅡ///-)b 옥살리스는 꼭 냉이처럼 생겨먹었네. 그렇다고 먹을껀 아니고... 역시나 밖에 얼어붙은 흙에 뜨신 물 부어 녹인 뒤 화분 두 개 뚝딱 만들어 심었다. 튤립은 ... 순서는 모르겠고, 일반적인 노란색 튤립만 기존 튤립이 있는 검은 화분에 심고, 나머지는 차례대로 하얀 색 긴 화분에 꽂아주었다. (나중에 봐서 이전 녀석처럼 흙으로 덮어버릴까 생각 중...) 옥살리스는 포장지에 지름 10cm 화분에 3개 정도 심으라고 했는데... 남는 흙도 없어서 그냥 다섯 개 몽땅 다 심었다... 열심히 살아남길 바래. 해바라기는 올해 키워본 결과 키우기도 쉽고 꽃도 예뻐서 다시 주문했다. = _=| 꽃씨 가격이 두 배로 뛴 것 같은데... 착각인가... 암튼 해바라기는 내년 3~4월 경에 천천히 심을 예정이다. 원본 위치: http://purewell.egloos.com/4626168

크리스마스엔~

회사에서 배급(?) 받은 케이크. 옆에는 덤으로 딸려온 곰인형. 곧 이어 주인님 실력 발휘! 연어 데리야끼~ > ㅂ<)b 맛있었다는~ 똘꿍! 사랑해요~ 원본 위치: http://purewell.egloos.com/4626148

OpenSSL을 비동기 소켓에 적용하기 - 세션 맺기

SSL을 처음부터 구현하는 것은 결코 쉽지 않다. 각종 형식과 암호 알고리즘을 이해하고 짜더라도 검증은 누가 할 것인가! 그래서 이미 많은 선지자가 SSL 라이브러리를 잘 만들어 놓았다. 그 가운데 POSIX 시스템에서 자주 쓰이는 OpenSSL 이 있다. 어지간한 오픈소스로 유지하는 POSIX 시스템에서 기본 패키지로 사용할 정도로 매우 유용하고 검증 또한 잘 되어 있다. 아~ 이것만 갖다 쓰면 만사 오케이로구나!!...라고 생각했는데, 그것은 나의 착각. Layer 라이브러리답게 모든걸 추상화 해놓고 대부분 자동화... 게다가 처음에 SSL 세션 맺는 과정(handshake)에서 "SSL_connect/SSL_accept만 쓰세염~ 데헷~♡" 이라고만 쓰여 있다. SSL 세션을 맺는 과정을 잠깐 살펴보자. 아잉... 화살표가 도대체 몇개여... 대충 간추리면, SSL 쓸꺼라고 서로 인사하고(1, 2), 서버에서 공개키 내려주고(4), 클라이언트에서 사용할 암호키를 공개키로 암호화 해서 보내고(8), 서버에서 그거 풀어서 암호키를 얻어내면(13) 그 다음부터는 암호키로 암호화 해서 데이터를 전송(14, 15)한다. 대충 간추려도 저런 작업이고, 세션마다 프로세스를 할당해주는 방식이 아니라면, 보통 비동기 소켓을 열어서 이벤트(select, epoll, kqueue 등을 통해)가 있을 때마다 상태값에 따라 행동을 분기해야할텐데 OpenSSL에서는 "SSL_connect/SSL_accept만 쓰세염~ 데헷~♡" 이라고만 써 있는데... 아쒸... 물론 OpenSSL에서 저 Handshake 과정을 따로따로 구현할 수는 있다. 그런데 소스 까보니까 그것도 사람이 할 짓은 아닌 것 같더라. (급 나약해지게 만드는 수 많은 case문...) 그렇다고 SSL을 포기할 것인가? 그렇지 않다. 레퍼런스에 있는대로 SSL_connect/SSL_accept만 쓰면 해결할 수 있다. 두 함수는 비동기 소켓에 대해 오류를 반환할 때, SSL

크리스마스엔 화분을~

원래 내가 화분에 사용할 수 있는 돈을 이미 다 썼는데, 오늘 주인님께서 특별히 크리스마스라고 크리스마스 배 맞고 배틀로얄 (그냥 혼자 지어 본 것)을 통해 딴 돈만큼 더 지를 수 있도록 해주셨다. (오~ 주인님~ 감사합니다~) 처음 7~8판 내리 지다가, 뒷심을 발휘해 내리 이겨주는 센스!! 결국 2만 원 어치 더 지를 수 있게 되었나. 아이 좋아~ (다 큰 어른이 2만 원에 울고 웃는구나!) 일단 올해 몰디브 갔다 온다고 망친 해바라기 농사를 위해 다시 해바라기를 주문했고, 눈독 들였던 튤립 시리즈를 장바구니에 하나씩 넣어주었다. (얼마나 구질구질해... 보통 5~10개씩 사서 심는데, 종류마다 하나씩이라니...) 남은 돈으로 뭘 살까 고민하다가 주인님 눈에 띈 옥살리스 당첨~* 아하하하하하하~* 왠지 스쿠루지 밑에서 일하는 사람이 생각나지만... 뭐, 행복하면 그걸로 족해~ 아하하하하하하하~* 메리 크리스마스~!! 원본 위치: http://purewell.egloos.com/4621597

증강현실 그리고 전뇌코일

증강현실이란 각종 정보를 이용하여 현실과 혼합된 것을 보여주는 것을 의미한다고 한다. (참고: 위키백과: 증강현실 ) PSP 게임 타이틀 Invizimals 과 Sekia Camera 서비스 를 보면서 증강현실 기술이 제법 발전했고, 점차 애니매이션 전뇌코일 같은 현실이 다가 올 것 같다. 후후후후... 그날이 오면 어떤 서비스가 우리를 기다리고 있을까... 덧글: 증강현실이라는 어감이 그다지 입에 안 붙음. 현실혼합? 덧글2: 전뇌코일 같은 세상이 왔는데, 온통 광고 투성이면 대략 낭패. 원본 위치: http://purewell.egloos.com/4620242

튤립과 기타 떨거지들

어제 받은 튤립과 익시아를 심었다. 좀 헷갈리는게 히야시스는 알뿌리가 살짝 흙 위로 나오게 심어야하는데, 익시아는 흙에 완전히 덮히게 심어야 쓰러지지 않는다고 한다. 헷갈려 헷갈려... 일단 튤립 전체 샷. 상황 봐서 흙을 더 덮을 예정이다. 저 화분도 밖에 있던 건데 얼었길래 뜨신 물 부어서 언 흙을 녹였다. 물론 뜨신 물이 모두 식은 뒤에 심었다. 꽃잎 끝이 레이스 같이 생긴 녀석으로 4가지 종류를 2개씩 샀는데, 회사 사람에게 하나 선물했다. 카나스타... 빨간 꽃잎에 끝이 하얗다. 다벤포트... 빨간 꽃잎에 끝이 노랗다. 슈퍼마리오에서 나오는 뻐끔플라워 닮았다. 무시무시... 허니문... 희멀건~하다. 람바다... 빨간 꽃잎에 끝이 주황색? 세트 할인 하길래 훅! 샀는데, 하나 빼고 모두 뻘겋네... 좌빨 튤립이로구나!! 나중에 노란색 업어와야겠다. 이미 싹이 튼 크로커스 사이사이에 익시아를 메뚜기 시켰다. 아래 하나가 익시아... 익시아와 크로커스의 환상의 하모니...는 개뿔. 지져분... 공짜로 얻어온 아마릴리스 씨앗이 이렇게 자랄 줄이야... 시골에 내려갔을 때, 부모님이랑 꺾어온 앵두와 개나리. 앵두는 여기 말고도 여기저기에 꼽사리 끼어 있다. 나중에 앵두 자라면 분재해야지. 히히히히히 회사에 얻어온 화분에 있던 무스카리. 어마어마하게 자라서 머리 좀 깎아줬다. 쥔님이 부추(또는 미친년 산발머리)라고 놀린다는... 신발장을 차지한 녀석들... 조용히 화분하나 꾀 차고 있는 히야신스. 지난 겨울에 진하고 예쁜 꽃 피우더니, 한 해 동안 열심히 몸뚱이를 키워 새끼를 내었나 보다. 잎사귀가 세 군데나 나오고 있으니 말이다. 꽃도 세 군데 나오겠지? 그냥 마삭줄 보다 노리끼리한 황금 마삭줄. 왼쪽에 꼽사리로 쿠페아가 비집고 들어 앉았다. 철을 모르고 꽃을 계속 피우는 욕망덩어리 제라늄. 쥔님이 그나마 괜찮아 하는 화분 가운데 하나다. 히히히... 나중에 빨간 색으로 하나 업어와야겠다. 밖에 화분대를 거실 구석으로 가져오면서 얼어죽을 만한 화분을 옮겨 왔

익시아

익시아(Ixia) 구근 식물이고 키가 50cm 정도로 다소 크네. 배달 왔을 때부터 이미 초록빛 싹을 쑥쑥 내놓고 있었다. 알뿌리 크기는 마늘 한 조각 정도이고, 크로커스만하달까... 튤립과 달리 아프리카에서 와서 그런지 노지에서 1박 2일하면 얼어죽는 녀석이다. 구글이나 각종 검색엔진 뒤지면 푸른빛 나는 하얀색 꽃을 많이 볼 수 있는데, 그거 말고 혼합종을 샀다. 여러 색이면 더 예쁘잖아. 히히히히... 3월에 만개할 찬란한 익시아를 꿈꿔본다. 원본 위치: http://purewell.egloos.com/4615873

튤립 질렀다!

바야흐로 가을/겨울은 꽃씨 지름 계절인데, 가을에 돈이 없어서 못 질렀다가 마침 꽃씨몰 홍보문자 받고 냉큼 질렀다. 아하하하하하하하하~ 곧 월급이잖아~ 아하하하하하하하하하하하 원본 위치: http://purewell.egloos.com/4613701

이 블로그의 인기 게시물

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]=&

SQLite에서 파일 크기 줄이기

간단한 개인 프로젝트를 하고 있는데, SQLite DB파일 크기가 매우 커져서 테이블에 필요 없는 레코드를 날렸다. 그런데 날리고도 파일크기가 그대로라서 여기저기 뒤져보니 VACUUM 커맨드를 사용하란다. 사용법은 매우 간단하다. 그저 "VACUUM;"이라고 날려주면 동작한다. (참조: http://sqlite.org/lang_vacuum.html ) 다만, 동작이 매우 느려서 자주 쓸만한 것은 아니다. 실제로 100MB짜리 파일을 7KB로 줄이는데 수 분이 걸렸다. 소스를 봐야겠지만, DB를 EXPORT한 뒤에, 파일을 지우고 다시 IMPORT하는게 아닐까 하는 의구심이 든다. 매번 하기 귀찮으면 "PRAGMA auto_vacuum=1;"를 하면, 새로운 빈 페이지(DELETE나 DROP TABLE 같은...)가 생길 때마다, VACUUM을 실행한다. 다만, SQLite구조 문제로 테이블을 생성하기 전에 미리 날려야하는 안타까움이 있다. (참조: http://sqlite.org/pragma.html#pragma_auto_vacuum )

Java에서 클라이언트 인증받는 TLS/SSL 연결 만들기

열심히 OpenSSL 소스 까보면서 공부해서 Java로(??!) 소켓 연결 맺기 해보는 중이다... 물론 Java에서 SSLSocketFactory에서 SSLSocket을 만들어 Buffer 연결하고 깔작거리면 얼마나 좋으련만, 세상이 녹록치 않더라. TLS/SSL은 클라이언트가 서버를 인증하는 것도 있지만, 서버가 클라이언트 인증을 필요로 할 때도 있다. 그래서 이땐 클라이언트가 사전에 서버쪽이랑 깔짝거려서 발급받은 인증서를 미리 쥐고 있다가, 서버에 접속(정확히는 접속해서 Handshake과정에서)할 때 넘겨줘야한다. SSLSocketFactory에서 그냥 깔짝깔짝 하는 걸로는 어림 반푼어치가 없더라고... SSLSocket부터 올라가보니, SSLContext라는 익숙한 놈이 있고, 이놈을 만들려면 KeyManagerFactory가 있어야 하고 TrustManagerFactory도 있어야 하는데, 각각은 KeyStore를 필요로 하고, KeyStore는 PKCS12 인증서를 필요로 하더라... 학학학 일단 잡다한 소리 집어치우고, 암호 설정한 PKCS12 인증서를 준비하자. 참고로 암호 안 걸리면 인증서 읽다가 널뽀인따 맞고 죽더라. 인증서 내보내기(export)할 때 꼭 6자 이상 암호 걸어서 내보내자. 순서는 아래와 같다. KeyStore 객체를 PKCS12 알고리즘으로 생성하고, 준비한 인증서 파일을 읽는다. KeyManagerFactory 객체를 SunX509 알고리즘으로 생성하고, 1에서 만들어진 KeyStore로 초기화한다. TrustManagerFactory 객체를 SunX509 알고리즘으로 생성하고, 1에서 만들어진 KeyStore로 초기화한다. SSLContext를 TLS 알고리즘(또는 필요에 따라 다른 것도 가능)으로 생성하고, 2, 3에서 만들어진 KeyManagerFactory와 TrustManagerFactory를 통해 만든 KeyManager[]와 TrustManager[]로 초기화한다. S