'분류 전체보기'에 해당되는 글 99건
- [linux] cpu info 2012.09.16
- ssl 인증서 만들기 2012.09.09
- Chat Server with Erlang 2012.09.08
- LINE 스티커 대화 / 내위치 전송 2012.06.15
- ubuntu,centos - equinox-faenza theme install 2012.04.15
- 망하는 제품의 흔한 개발 과정 2012.03.05
- 클라우드, 빅데이터 관련 기사/글 2012.03.04
- LD_PRELOAD를 이용한 hooking, wrapping 2012.01.25
- Chat Server with Erlang 2011.12.14
- C500k in Action at Urban Airship 2011.11.23
[linux] cpu info[linux] cpu info
Posted at 2012. 9. 16. 13:30 | Posted in OS/Unix/Linux물리 cpu 수(설치된 소켓번호)
$ grep “physical id” /proc/cpuinfo | uniq
physical id : 1
물리 cpu 당 코어수
$ grep “cores” /proc/cpuinfo | uniq
cpu cores : 6
하이퍼쓰레딩 적용 여부: “cpu cores”수와 같으면 off, 배수 이면 on
$ grep “siblings” /proc/cpuinfo | uniq
siblings : 12
물리 cpu별 코어 id
$ grep “core id” /proc/cpuinfo | uniq
core id : 0
core id : 1
core id : 2
core id : 8
core id : 9
core id : 10
core id : 0
core id : 1
core id : 2
core id : 8
core id : 9
core id : 10
참고) http://www.richweb.com/cpu_info
ssl 인증서 만들기ssl 인증서 만들기
Posted at 2012. 9. 9. 12:58 | Posted in ServerGenerate a private key
key 파일 생성
$ openssl genrsa [-des3] -out test.key 1024
Generate Root CA Certificate
루트 인증기관(Root CA) 인증서 생성
$ openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3650
Generate Self Signed Certificate
자체 서명 인증서 생성
$ openssl req -new -x509 -keyout cacert.pem -out cacert.pem -days 3650
keyout과 out에 같은 파일명을 주면되며, 분리하고 싶은 경우는
RSA PRIVATE KEY부분과 CERTIFICATE부분을 다른 파일로 분리하면 된다.
Generate Certificate signing request
인증 요청서(Certificate Signing Request) 생성
$ openssl req -new -key test.key -x509 -out test.csr
Sign certificate with private key
키로 인증서에 서명하기
$ openssl x509 -req -days 3650 -in test.csr -signkey test.key -out test.crt
[Optional] key에서 Password phase 삭제
Remove Password Requirement
$ cp test.key test.key.secure
$ openssl rsa -in test.key.secure -out test.key
Generate dhparam file(Diffie-Hellman)
$ openssl dhparam -out dh512.pem 512
※ if an error, "digest too big for rsa key", occures, simply use 1024 bits. (happens on openssl-1.0.x later)
Chat Server with ErlangChat Server with Erlang
Posted at 2012. 9. 8. 23:37 | Posted in Articlehttp://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf
http://blog.whatsapp.com/index.php/2011/09/one-million/
LINE 스티커 대화 / 내위치 전송LINE 스티커 대화 / 내위치 전송
Posted at 2012. 6. 15. 10:40 | Posted in Etc매우 재밌는 홍보 영상이다.
왜 라인 홈페이지에 안 내놓나 모르겠네..
일본어 편
영문 버전도 있는데 못찾겠네..
ubuntu,centos - equinox-faenza theme installubuntu,centos - equinox-faenza theme install
Posted at 2012. 4. 15. 19:41 | Posted in OS/Unix/Linux
equinox gtk engine
* 미리 설치 할 것들
- yum install gtk2-devel (redhat 계열)
- sudo apt-get install libgtk2.0-dev (ubuntu)
* Install
http://gnome-look.org/content/show.php?content=121881&forumpage=1&PHPSESSID=ccac437ae6db2b803984fb3588d80cd8http://gnome-look.org/content/show.php?content=121881&forumpage=1&PHPSESSID=ccac437ae6db2b803984fb3588d80cd8
tar xzf 121881-equinox-1.50.tar.gz cd equinox-1.50 ./configure --prefix=/usr --enable-animation ./configure --prefix=/usr --libdir=/usr/lib64 --enable-animation make make install |
faenza icon theme
http://code.google.com/p/faenza-icon-theme/downloads/detail?name=faenza-icon-theme_1.1.tar.gz&can=2&q=
faenza-icon-theme_1.1.tar.gz 를 다운 받고 임의의 디렉토리 아래에 풀어놓고 /usr/share/icons 디렉토리로 옮겨놓으면 된다.
equinox evolution themes
http://gnome-look.org/content/show.php?content=140449
140449-equinox-themes-1.50.tar.gz 를 다운 받고, "System > Preference > Appearence" 에서 "설치" 를 눌러 다운 받은 tar.gz 파일을 선택하면 된다.
※ 설치한 테마는 ~/.themes 디렉토리에 저장된다. 잘못 설치했으면 지워주자.
망하는 제품의 흔한 개발 과정망하는 제품의 흔한 개발 과정
Posted at 2012. 3. 5. 00:07 | Posted in Article출처: http://wangsy.com/blog/2012/01/how-to-make-totally-shitty-things/
망하는 제품의 흔한 개발 과정
- 리더 : 요즘 유행하는 대세를 들고 온다. 이것이 대세다!
- 리더 : 속으로는 이런 것들을 쓰는 사람들은 사회부적응자라 생각하고 본인은 정작 써 본 적이 없다.
- 기획 : 써 본적은 없지만 들어는 봤다. 이런 것을 쓰는 사람은 격이 떨어지는 사람이라 생각하고, 내가 우아하고도 유럽 명품에 견줄 수 있는 것을 보여주어야 겠다 생각한다.
- 기획 : 해당 제품군을 모조리 조사한다. 그래서 해당 제품군의 모든 특징을 합한 고질라 같은 것을 그려 낸다.
- 리더 : 그것만으로는 뛰어 넘을 수 없다고 한다.
- 기획 : 아이디어를 동원한다. 이제 그 고질라에 스타워즈, 반지의 제왕, 해리포터를 더하기 시작한다. 자신의 상상력의 끝은 어디인가 하면서 스스로 놀라워 한다.
- 리더 : 고질라에서 빠진 게 없나 살핀다. 다소 억지 스럽지만, 비슷한류의 제품을 가져와 하나 더 붙인다. 이런게 바로 리더의 통찰력이라 으쓱거린다. 기획자의 아이디어를 보고는 기획자가 미쳐 생각하지 못한 경우의 수를 생각해서, 더 복잡하게 만든다. 아직 가르칠게 많다고 생각한다.
- 개발 : 그런건 못만들어요 불평을 늘어놓는다.
- 리더 : 내앞에서 안된다는 말은 하지 말라고 하며, 할 수 없다는 것부터 이야기하는 태도가 문제라고 한다. 그리고는, 자신의 인생 역정기를 늘어 놓는다.
- 개발 : 기획에 대한 조언을 해 줘야 겠다고 생각한다. (사실 해당 제품군을 사용해 본 유일한 사람이다.)
- 리더 : 넌 아직 인지과학, 심리학을 모른다고 일축한다.
- 기획 : 파워포인트로 찍어 내는 노가다를 시작한다.
- 리더 : 문서에서 오타를 찾아 낸다.
- 개발 : 이 프로젝트는 어짜피 산으로 갈 것이라고 떠들어 대기 시작한다.
- 리더 : 최근 세미나에서 본 솔루션들을 쓰면 금방 할 것이라고 말한다. 그리고 비싼 돈을 들여 도입을 추진한다.
- 개발 : 그게 뭔지 모른다. 다만, 대충 들어보니, 그것 보다는 자기간 만들어 놓은 자작 솔루션이 훨씬 더 좋은거라고 속으로 생각한다.(사실 지금 이 상황에 그걸 배워서 만드는 것은 엄두가 나지 않는다) 그리고, 쓰는 척 시늉만 하기로 결심한다. 타인이 만든 것을 사용하는 것은 하수들이나 하는 짓이라 생각한다.
- 리더 : 개발기간은 3개월이라 한다.
- 개발 : 불가능한 일정이라 하고, 기획안을 조정하라고 주장한다.
- 리더 : 나는 어찌 저런 무능하고 게으른 개발자만 옆에 있는지 탄식한다. 나에게 해외 유수기업의 개발자를 붙여주면 단박에 성공 할 수 있으리라 생각한다.
- 개발 : 투덜거리며 밤 샌다. 불행하게도 고질라를 만들어 내는 과정과 SF 가 붙여 지는 과정은 개발 과정 진행중에 병행해서 발행하는 일이다. 스타워즈를 다 붙여놓으면, 어느덧 스토리는 해리포터로 바뀌어 있다. 다시 밤을 샌다.
- 리더 : 3개월 후면 다 되어 있겠지 생각을 한다. 개발 과정에는 관심이 없다. 개발이 진행되는 중간 중간, 어제밤 자다가 생각난 환타스틱한 장면을 기획자에게 넣으라고 말한다. 이 장면을 놓쳤으면 이번 제품에 핵심이 빠졌을 거라고 생각하고, 이제라도 넣게 되어 다행이다 생각한다. 그리고, 자신이 얼마나 디테일에 강한가 다시 한번 생각해 본다.
- 개발 : 코드는 개떡이 되어 간다. 어짜피 이건 내탓이 아니다. 정말 제대로 된 환경에서 했다면, 난 정말 멋지게 해 낼 수 있었을 텐데, 운없이 이런 놈들이랑 팀을 해서 이렇게 된거라 생각한다. 이 제품은 내 손에서 나왔지만, 내가 만든건 아니라 생각한다.
- 리더 : 3개월후, 생각했던게 안나오자 개발자에게 책임 추궁을 해야겠다 생각한다. 처음부터 태도도 안좋았고, 자기가 말한 것을 구현해 낼 실력도 없었던 사람이었다 생각한다. 후회한다. 이 모든 것은 개발의 문제다. 하지만, 일단 출하한다.
- 기획 : 자신의 유럽 명품적 감각의 파워포인트를 어떻게 이런 제3세계 제품으로 만들어 냈는지 의아해 한다.
- 리더 : 다시 시작하자 으쌰 으쌰 해 본다. 그리고, 그 사이 대세가 바뀌지 않았다 살펴 본다.
- 개발 : 어짜피 이렇게 된거, 처음부터 다시 시작하자고 한다. 나는 다시 내가 만든 것을 들여다 보고 싶지 않다.
- 리더 : 역시 중요한 것은 사람이다 라고 생각한다.
흥하는 제품의 흔한 개발 과정
- 리더 : 자신에게 꼭 필요했던 핵심가치(기능)을 발견한다. 현존하는 타 제품에서는 발견할 수 없기에, 만들어야 겠다고 결심한다.
- 기획,개발 : 자신도 꼭 필요했던 것이라 생각하고, 만들면 정작 자신이 가장 큰 혜택을 받을 것이라 생각한다.
- 리더,기획,개발 : 다 같이 모여서 기존 제품들을 맹렬히 비판해 낸다. 왜 다 이렇게 될 수 밖에 없었는지 생각해 본다.
- 개발 : 관련된 기술을 조사한다. 그리고, 조사한 결과를 공유한다.
- 기획 : 수없이 많은 기술을 가지고, 두개의 연결(조합)을 시도한다. 전혀 상관없을 것이라 생각했던 두가지 기술을 합하니, 매우 멋진 모습이 되었다.
- 리더 : 이 멋진 조합이 핵심가치를 구현하는 결정적 요소가 아니면, 버리자고 한다. 핵심가치에만 촛점을 맞춘다.
- 개발 : 핵심가치를 구현할 가장 단순한 방법을 찾는다. 구현이 단순할 수록 생각치 못한 일이 발생할 가능성이 줄어 든다.
- 리더 : 개발된 시제품을 써 본다. 하루고 이틀이고 계속 써 본다. 불편한 점을 찾거나, 그 보다 더 단순하게 할 방법을 생각해 낸다.
- 개발 : 반복적으로 만들어 낸다. 구현 방법이 단순하였기에, 이 반복과정이 고통스럽지 않다. 이 반복과정을 더 쉽게 할 수 있는 방법을 계속 추가해 낸다.
- 기획 : 이 단순한 핵심가치를 제공하는 이 제품이 생각보다 많은 곳에서 응용될 수 있다는 것을 찾아 낸다.
- 리더 : 기쁘지만, 처음 생각한 것에 집중하기로 한다.
- 리더 : 충분히 만족스러운 상태가 되면 제품으로 출하한다. 충분히 고민한 것이기 때문에, 아주 오랫동안 다시 이 문제를 생각할 필요가 없을 거라 생각한다. 누군가 흉내내면서 새로운 것을 덧붙여 내거나 변형을 시켜내도 크게 신경 쓰지 않는다.
- 기획 : 현재까지 이룩한 것에서 최소한의 노력으로 추가할 수 있는 핵심가치를 다시 찾기 시작한다.
- 리더 : 역시 중요한 것은 사람이다 라고 생각한다.
클라우드, 빅데이터 관련 기사/글클라우드, 빅데이터 관련 기사/글
Posted at 2012. 3. 4. 20:43 | Posted in Article[빅데이터/클라우드]
LD_PRELOAD를 이용한 hooking, wrappingLD_PRELOAD를 이용한 hooking, wrapping
Posted at 2012. 1. 25. 20:18 | Posted in 개발이야기#include#include int gethostname(char *name, size_t len) { char *p = getenv("FAKE_HOSTNAME"); if (p == NULL) { p = "localhost"; } strncpy(name, p, len-1); name[len-1] = '\0'; return 0; }
wrap_hostname.c
// define to use RTLD_NEXT #define _GNU_SOURCE #include#include #include // function pointer for origin gethostname function. static int (*gethostname0)(char *name, size_t len); // __attribute((constructor)): // main함수가 호출되기 전이나, // 공유 오브젝트가 로드되었을 때 실행해야 하는 함수에 사용. void __attribute__((constructor)) init_gethostname0() { gethostname0 = dlsym(RTLD_NEXT, "gethostname"); //NOTE: dlsym이 실패한 경우는? } // hooking gethostname int gethostname(char *name, size_t len) { char *p = name; if (len > 6) { memcpy(p, "name: ", 6); p += 6; len -= 6; } return (*gethostname0)(p, len); }
Makefile
TARGET_HOOK=hook_gethostname.so TARGET_WRAP=wrap_gethostname.so all: gcc -shared -fPIC -o $(TARGET_HOOK) hook_gethostname.c gcc -shared -fPIC -o $(TARGET_WRAP) -ldl wrap_gethostname.c clean: rm -f $(TARGET_HOOK) $(TARGET_WRAP) hook: all @echo "" @echo "- hostname -------------------------------------------------------------" /bin/hostname @echo "" @echo "- hostname hooking gethostname(libc.so) --------------------------------" FAKE_HOSTNAME=fake.hostname LD_PRELOAD=./$(TARGET_HOOK) /bin/hostname wrap: all @echo "" @echo "- hostname wrapping gethostname(libc.so) -------------------------------" LD_PRELOAD=./$(TARGET_WRAP) /bin/hostname run: hook wrap
$ make run
을 실행하면,,
gcc -shared -fPIC -o hook_gethostname.so hook_gethostname.c gcc -shared -fPIC -o wrap_gethostname.so -ldl wrap_gethostname.c - hostname ------------------------------------------------------------- /bin/hostname deepblue-ubuntu - hostname hooking gethostname(libc.so) -------------------------------- FAKE_HOSTNAME=fake.hostname LD_PRELOAD=./hook_gethostname.so /bin/hostname fake.hostname - hostname wrapping gethostname(libc.so) ------------------------------- LD_PRELOAD=./wrap_gethostname.so /bin/hostname name: deepblue-ubuntu
참고: BINARY HACKS 해커가 전수하는 테크닉 100선
Chat Server with ErlangChat Server with Erlang
Posted at 2011. 12. 14. 11:12 | Posted in Articlehttp://blog.whatsapp.com/index.php/2011/09/one-million/