2012년 6월 28일 목요일

erlang node


riak에서 riak-admin join을 하다가
unreachable이 나와서, 알아보다가 실수를 하였다. -.-;

node().
를 쉘에서 넣으면, 현재 node의 이름이 나온다.
erlang:get_cookie()
를 넣으면, 현재 세팅된 cookie가 나온다.
net_adm:ping('some@remote.ip').
하면, 리모트 노드와 연결 가능한 상태인지 알 수 있다.
이때  cookie가 다르면, pang이 뜬다.
command shell에서 ping이 되더라도,
cookie값이 다른지 스펠링부터 확인하자.


2012년 6월 27일 수요일

list_to_atom and apply


외부에서 callback 으로 설정할 모듈:함수 이름을 전달했다고 치자.

M=list_to_atom(ConfigModuleName).
F=list_to_atom(ConfigFuncName).
Args=[1,2,3].
apply(M,F,Args).

이렇게 하면, 원하는 함수를 실행시킬 수 있다.
다만, DoS를 피하려면, list_to_existing_atom 을 쓰면 안전하다.



mongoDB to riak + postgres


http://vimeo.com/42744689

mongoDB로 고생하다가
riak + postgres로 바꾼 스토리다.

덤덤하게 이야기하지만, 많이 고생했을 것 같다.


2012년 6월 15일 금요일

using riakpool_client in erlang

https://github.com/dweldon/riakpool

riakpool_client는 riak pb client에 connection pooling 기능을 넣어서 쓸 수 있게 해준다.
간단하게 쓸 수 있다. 하지만, 실전에 쓰기에는 아직 부족함이 많다.
riak http client ( https://github.com/basho/riak-erlang-http-client )을 쓰는 것이 맞을지도 모르겠다. 어떤 것을 쓰는게 빠를지 테스트 해 볼 예정이다.

riak은 key-value store다. value에 attribute들을 여러개 넣으려면,  record를 저장해야 할텐데, binary로 변환해서 저장한다. 즉, record를 꽉 채워서 넣어야 한다. 일부 field만 저장하는 것은 지원하지 않는다. 그렇게 하려면, record를 읽어와서, 바뀐 field만 다시 record에 넣고, put해야 한다. 이 부분은, 좀 아쉽다! 근데, 다른 key-value store도 내부적으로 그렇게 할 듯 하다. 확인이 필요한 부분이다. 현재까지 내가 확인 한 것은 그렇다. -.-;;
다음은 간단히 record를 put하는 예제를 구현해 봤다.

1> rd(item, {id,name} ).
item
2> It=#item{ id= <<"aaa">> , name = <<"bbb">> }.
#item{id = <<"aaa">>,name = <<"bbb">>}

3> riakpool_client:put( <<"aaa">> , <<"bbb">> , term_to_binary(It) ).
ok
4> { ok , R } =  riakpool_client:get( <<"aaa">> , <<"bbb">> ).

5> binary_to_term(R).
#item{id = <<"aaa">>,name = <<"bbb">>}
6> R2 = binary_to_term(R).
#item{id = <<"aaa">>,name = <<"bbb">>}
7> R2#item.id.
<<"aaa">>


2012년 6월 14일 목요일

erlang in production leads to haskell


Erlang으로 프로젝트를 시작한지 3주.
아주 만족스럽다.
deployment와 management,scale 이슈만 커버하면 거의 다 마스터 될 듯.

Erlang을 입문하는데, 어려움을 겪고 있다면,
webmachine,mochiweb을 써서 간단한 것이라도 만들어 보길 권한다.
금새 익숙해 질 것이다. ^^

최근에 다시 haskell을 보기 시작했는데,
Erlang에 익숙해지니, 전에 어렵게 느껴지던 haskell도 훨씬 쉬워 보인다.

Haskell에 OTP의 기능들이 들어오면 좋을텐데...
Haskell/OTP 프로젝트 없을까? ^^

DB는 mnesia와 riak을 프로젝트에 쓸 것이다.
두개의 성능 테스트의 결과가 흥미진진하다.


2012년 6월 10일 일요일

10 year project


* Erlang/Haskell으로 web/game을 위한 서버사이드의 모든 미들웨어와 서비스를 구현
-> 2~3년내에 가능

* GPGPU를 활용하는 언어 디자인
그에 따른 게임엔진 구현
그에 따른 게임 구현

10년을 투자할만하지 않을까? ^^


erlang in production

erlang으로 드디어 실제 서비스에 들어갈 작업을 한다.
2주 정도만에, 프로토타입을 완성했다.

mochiweb,webmachine,mnesia을 이용하여, 서버를 구현하고,
html/javascript/jquery로 웹 클라이언트,
iOS에선 Obj-c로 앱 클라이언트를 구현했다.

이곳저곳에서 웹서핑을 하며, 예제를 구하고, 테스트 하고, 코딩하면서
즐겁게 코딩했다.

erlang의 위대함을 느낄 수 있었다.

데이터베이스는 mnesia를 쓰고 있지만,
riak이나 couchBase등을 쓸 계획도 있다. 물론 모두 테스트 해서 어플리케이션에 맞는 DB를 고를 것이다.

erlang으로 작업하고 있자니, 내버려둔 haskell이 생각나서, haskell도 다시 보려고 한다.
haskell로 production에 써야 할텐데...

앱 클라이언트로는 native하게 obj-c로 쓰긴 했지만,
cross platform용으로 mosync를 쓸 생각이다.