json editorjson editor

Posted at 2012. 9. 16. 13:32 | Posted in 개발이야기

http://jsoneditor.appspot.com/ ? 기능 막강

http://www.thomasfrank.se/json_editor.html ? 다운로드 가능(PC에 다운 받아서 쓰면 됨). 대체로 쓸만함.

http://jsonlint.com/ ? 크롬 확장프로그램으로 설치 가능 (But, “바로가기” 라는거..)

//

[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 Server

Generate 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 Article

http://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 개발이야기
hook_gethostname.c
 
#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 Article
http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf
http://blog.whatsapp.com/index.php/2011/09/one-million/

 
//