2011년 1월 27일 목요일

using DEX graph DB

DEX의 최근 소식

http://www.sparsity-technologies.com/events.php

Neo4J보다 훨씬 빠른 성능을 보여준다.


* wikipedia를 load해서 테스트 한 결과 차이가 현저하다.
* We can see that 4.2 billion traversals are made with an average of 295K nodes traversed per second.

아쉽게도 오픈소스가 아니다. 평가판은 1M개이하에서만 동작한다. 라이센스 조건은 contact해야 한다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 1월 26일 수요일

hello,world Using neo4j

1. neo4j.1.4를 다운로드 한다.
  http://neo4j.org

2.eclipse에서 Java Project 를 생성한다.

3. reference(external) library에 neo4j/lib에 있는 *.jar 파일들을 넣는다.

4. http://wiki.neo4j.org/content/One_Minute_Guide_Complete_Code

java class를 생성하여, 여기에 있는 소스를 넣는다.

5.  run하면, Hello, brave Neo4j world!

실행이 확인된다.

jar 파일들을 보면, 버젼이 1.0이 넘지 않는 파일들이 꽤 많습니다.
아직 미성숙한 것처럼 보이지만, 이 프로젝트는 앞으로 유망하다고 판단됩니다.
계속 지켜보면서 그래프 데이터베이스의 발전을 지켜볼 생각입니다.
가능하다면,  contribute 도 하고 싶습니다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 1월 25일 화요일

3D Game Engines in iPhone and Android

다음은 iphone에서 알려진 3d engine들이다.

1. oolongengine
2. SIO2
3. shiva3D
4. unity3D
5. airplay SDK
--> 1,2는 소스를 제공함. 3,4는 소스를 제공하지 않음.
--> SIO2는 c소스임. 구조화 미숙. 하지만, 많은 기능들을 제공함.
--> oolongengine은 아직 할 일이 너무 많음.

--> 3,4번 모두 소스를 제공하지 않는다.

하지만, 중요한 것은 android 지원여부인데, 3,4번은 지원함.
--> 모두 inmature(미숙) 상태로 판단됨. 왜냐하면, 게임개발을 위한 풍부한 샘플이 존재하지 않고, 툴셋이 부족함.

소스를 제공하면서, 안드로이드까지 지원하는 엔진은 없음.
(소스 제공여부가 중요한 이유는, 게임의 특징이 엔진의 기능을 넘어설때 매우 중요하다!
 엔진의 기능 이하에서 구현한다고 할 경우에는, 가장 안정된 SDK를 선택하는 것이 나을 것이다.)


따라서, 소스 오픈이 중요하다면, 차라리 기존의 오픈소스엔진인 OGRE와 IrrLicht를 선택하는 것이 나음.
둘 중에 배우기 쉬운 인터페이스와 게임개발 리소스가 많은 것을 선택하는 편이 나음.
android와 iphone을 안정적으로 지원하느냐가 큰 선택 사항이 될 것임.
어떤 게임을 만드느냐도 큰 영향을 끼칠 것임.
 ( http://gbox3d.tistory.com/: irrlicht Engine 관련 )
( http://parkpd.egloos.com/3202581 : Ogre Engine 관련 )

몇일전까지만 해도, irrlicht에 대해서 호감이 더 있었지만,
설치에 있어서, irrlicht는 해줘야 할 일이 많고, 다른 플랫폼과 소스를 다르게 써야하는 문제가 생겨서 당분간은 보류하고, 그 문제를 푼 이후에 다시 시도하기로 했다.
따라서, 현재로서는 iPhone,MacOSX에서는 Ogre3D가 오픈소스중에서는 최고라고 봐야 할 듯 하다.
알아보니, ogremax라는 exporter도 지원해서(비록, 윈도우에서만 실행되지만), ogre가 더 낫다고 판단된다.
Ogre를 android에서 돌리는 것은, jni를 사용해야 할 듯 한데, irrlicht에서 사용하는 것과 같은 방식으로 해야 할 듯 하다. 아직은 정식으로 지원하지 않는 듯 하다.

또한, airplay sdk라는 cross-platform sdk가 있다. 아직 평가해보진 않았지만, 반드시 해 보아야 할 sdk이다.하지만, unity3d가 가장 인기가 있고 안정적으로 보인다.
( unity3d를 설명하는 동영상 http://www.youtube.com/user/TornadoTwins#p/c/11F87EB39F84E292/0/5-X-Ebh1kYA )

Ogre3D,Irrlicht 모두 MacOSX에서 제대로 build하는 것은 까다롭다.
공부용으로 쓴다면, Mac이 아닌 Windows에서 할 것을 권장하고,
Release가 필요할때, 다른 플랫폼으로 옮기는 것을 따로 셋업하는 것을 권장한다.
그때가 되면, 큰 문제이긴 하지만, 풀 수 있거나, 이미 풀 수 있을 것이다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

Rapid Prototyping a 3D game, IMHO.

단지, 3D게임에만 국한되는 일은 아니다.

3D Primitive 단위를 Game Object 단위로 빨리 만들어야 한다.
즉, Game Object와 동기화 되는 단위를 프로그래밍해야
게임 프로그래밍이지, 그 이하의 프로그래밍은 게임 프로그래밍이 아닌
3D Programming셈이다.

그런데, 게임에서는 그 단위가 기획마다 다르다.
모델링,애니메이션,이펙트 등등...

어떤 게임을 만들어야 할지부터 정해야 그 요소들이 정해지는 것이다.

그런 다음에, 3D Game Primitive(Domain Specific Primitive or Language(aka DSL)) 로 프로그래밍하라!

다시 말하지만,다음 두가지 질문을 해보라.
"엔진이 구현하고자 하는 내용을 쉽게 구현할 수 있게 서포트하는가?"
"엔진이 구현하고자 하는 내용을 구현하도록 아키텍쳐가 허용하는가?"

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

using jME,Netty, jcuda, jxta, and Java AppEngine

1. jME - java로 만든 3d Game Engine

http://www.jmonkeyengine.com/

( netbeans를 게임개발환경으로 만든 노력, 언리얼보다는 못하지만, 오픈 소스인 것을 감안하면 매우 높은 완성도, 웹에서도 실행되는 cross platform지원,
android support http://stackoverflow.com/questions/2508879/can-i-use-jmonkeyengine-on-android
 xmlvm을 이용하면 iphone에서 실행됨.
http://jmonkeyengine.org/wiki/doku.php/ideas_list  )


2. Netty - java로 만든 네트워크 서버 프레임워크

http://www.jboss.org/netty/performance/20081006-tlee.html

(google protocol buf를 쓸 수 있고, NIO를 잘 지원함. linux epoll을 잘 지원한. zero copy로 되어 있음. )

3. jcuda - java로 만든 cuda 지원 라이브러리 ( 서버/클라이언트 최적화에 쓸 수 있음. )

http://www.jcuda.de/samples/samples.html

4. Web Server는 Google AppEngine 을 사용.

- Java Playframework
- Java Spring Roo
- JRuby
중에서 선택.

Java Playframework로 결정!
왜냐하면, JRuby는 아직 Ruby 3.0을 지원하지 않고, Ruby on Rails가 익숙한 사람에게는 좋지만, 나처럼 아직 Ruby에 익숙하지 않은 사람에게는 Java만 배우는 게 좋다.
Java Playframework도 충분히 쉽게 웹을 만들 수 있다.


5. java p2p

http://java.sun.com/othertech/jxta/index.jsp
(죽은 프로젝트가 많지만, 아이디어를 많이 가져와서 이와 같은 것을 구현해야겠다.)



6. 클라이언트/서버가 모두 자바라서, 자바에 익숙해질 기회

- 자바 라이브러리/오픈소스들을 많이 쓸 수 있게 됨.
- scala도 함께 쓸 수 있음.
- 자바 기반 noSQL(log4j)도 쓸 수 있음.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 1월 20일 목요일

using node.js and jquery

node.js + jquery mobile 로 왠만한 모바일 앱은 만들 수 있을 듯 하다.

no.de에서 호스팅 받고 appengine(djanggo)에서 서버도 그냥 쓸 수 있고

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

using c++ cuda templates



cuda를 좀 더 쉽게 코딩할 수 없을까 찾던차에 다음과 같은 오픈소스를 찾았다.

http://cudatemplates.sourceforge.net/doc/html/

보시다시피 라인수가 꽤 많이 줄었다.

더불어 cmake에서 cuda 를 빌드 할 수 있는 plugin도 찾았다.
( cudatemplates 컴파일을 위해서 필요하다. )

https://gforge.sci.utah.edu/gf/project/findcuda/

GLEW를 MacOSX에서 설치하기 

http://julovi.net/j/?p=21

OpenCV 설치하기

 http://opencv.willowgarage.com/wiki/InstallGuide

그런데, MacOSX에서 컴파일이 안된다.;; 수정이 필요하다.;;
고생끝에, 몇가지를 수정하여, 일부분이라도 컴파일이 되게 하였다.
일단, libpng, libzlib 을 설치해야 한다.

또한, /usr/X11/include/GL 을 /usr/include/GL로 copy했다.

testing/CMakeLists.txt에서 빌드가 안되는 것을 comment out하면,
몇몇개는 빌드가 되는 것을 볼 수 있다.;;;

MacOSX에서는 완벽히 지원안되는 것 같다.;;
Linux에서 다시 시도해 봐야겠고, 그것도 안되면, CUDA는 윈도우에서만 쓸 수 있을 것이다;;

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 1월 19일 수요일

installing kumofs in ubuntu 10.10

1.  ruby를 설치합니다.
 1) sudo apt-get install ruby
  -> patch level이 최신이 아닙니다.
  2) ruby 홈페이지에 가서 ruby 1.8.7최신 버전(p302)을 받아서 풀고,
  #./configure
  #make
  #sudo make install 합니다.
  #ruby --version 을 하면 예전 ruby가 실행됩니다.
  PATH에 /usr/local/bin이 우선되면 최신  ruby가 실행됩니다.

2. tokyocabinet을 설치합니다.
 1) 홈페이지에서 다운로드해서 압축을 풉니다.
 2) libbz2-dev 를 설치합니다.
  #sudo apt-get install libbz2-dev
  3) compile및 설치하니다.
    #./configure
    #make
    #sudo make install

3. messagepack을 설치합니다.
  #wget http://downloads.sourceforget.net/project/msgpack/msgpack/cpp/msgpack-0.5.2.tar.gz
  #tar xvfz msgpack-0.5.2.tar.gz
  #cd msgpack-0.5.2
  #./configure
  #make
  #sudo make install

4. bootstrap을 실행하면 다음을 추가로 설치해야 합니다.
 #sudo apt-get install ragel #sudo apt-get install libtool
 #sudo apt-get install automake
 #./bootstrap 이 성공적으로 수행됩니다.


5. #./configure
    #make
    #sudo make install


설치 완료!


이제 설치를 확인해야 합니다.

kumo 홈페이지의 example을 실행해보면 됩니다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

using cuda in Ubuntu 10.10

1. Ubuntu 10.10 을 설치합니다.

2. 시냅틱 꾸러미 관리자를 실행합니다.
  1) g++ 을 설치합니다.
   또는 sudo apt-get install g++
  2) nvidia-current 를 설치합니다.
   또는 sudo apt-get install nvidia-current
  3) sudo nvidia-config 를 실행하고, 재부팅합니다.

3. nvidia cuda developer zone에 들어가서,
 1) cuda toolkit을 가져옵니다.
   #chmod 755 cudatoolkit_3.2.16_linux_32_ubuntu10.04.run
   #sudo ./cudatoolkit_3.2.16_linux_32_ubuntu10.04.run
   #ch ~
   #vi .profile
   후에 PATH="/usr/local/cuda/bin:$PATH" 을 추가합니다.
   #source .profile
   #cd /etc/ld.so.conf
   #sudo vi cuda.conf
   /usr/local/cuda/lib
  을 저장합니다.
   #sudo ldconfig

 2) cuda_by_example을 가져옵니다.
  #cd chapter_03
  #nvcc enum_gpu.cu
  #./a.out

 실행되는지 확인이 됩니다.

 자, 이제 cuda로 병렬 컴퓨팅 프로그래밍을 할 준비가 되었습니다.
 Enjoy it!

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

choosing type-value store for user account DB - scalaris, kumofs

천만이상/억대의 유저의 계정 정보를 관리하는 계정 데이터베이스를 운영하고 싶다.
그것도, 가장 효율적인 방식으로.

계정은 가장 간단하게만 설계한다면,
ID/Password와 Password Recovery를 위한 정보만 가지면 된다.
결국, 하나의 ID에 Key-Value Pair의 Array를 가지게 된다.

효율적으로 최적화해야 할 부분은 다음과 같다.
1. 최초 계정 생성시 ID중복 여부를 빠르게 체크하기
2. 로그인시 PW 확인을 빠르게 체크하기
3. 로그인시 중복 로그인을 빠르게 체크하기
4. 로그인 컨펌이후에, 서비스를 위한 데이터 로드하기
5. 로그인 컨펌이후에, 각 서비스에 대한 권한 확인하기
6. 로그인이후에, 서비스 사용 데이터 기록하기
 
1,2번을 위해서 Distributed In-Memory Database가 필요하다. 또한 인덱싱이 잘 되어 있어야 한다.
하지만, 결국 메모리에 다 넣을 수는 없다. Persistent Storage가 필요하다.
3번을 위해서, Double Login Check Middleware Server를 만들기도 한다. 하지만, 데이터베이스로
가능하면 좋지 않을까?

이를 위해서 NoSQL쪽을 조사해 보았다.
다음의 아티클을 보자.


http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores

저자의 요구사항과 나의 요구사항과 비슷하다.
DHT(Distributed hash Table)을 사용해야 하고, low-latency가 필요하다.

저자의 의견대로 Scalaris가 가장 우수한 후보이다. ( http://code.google.com/p/scalaris )

하지만, In-Memory에서만 지원한다. 지금 보니 TokyoCabinet을 통해서 Persistent Storage도 지원한다.

일단 Scalaris를 써보기로 했다.
MySQL과의 벤치마킹 결과를 나중에 올려야겠다.

다른 후보로는,
Kumofs이다. (  http://kumofs.sourceforge.net )
비록 In-Memory는 아니지만,
홈페이지의 주장에 따르면, 매우 빠르다!
이것데 대한 벤치마킹 결과도 올려야겠다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

2011년 1월 17일 월요일

using thrift

thrift 는 간단히 말하면, IDL 을 정의해서, 서버/클라이언트간 통신을 손쉽게 해주는 소스 생성기 입니다. RPC 라이브러리라고 생각해도 됩니다.
놀라운 것은 C++이외에도 많은 언어를 지원해줍니다.
C#,ErLang,OCaml,Haskell,Java,C/Cocoa,PHP,Python,Perl,Ruby까지~
기본적인 async operation도 지원합니다.
게다가,Binary Protocol과 JSon Protocol을 모두 지원하네요.

아쉬운 점은 thrift 자체가 robust한 서버를 위한 것은 아니라서,
외부 인터넷 클라이언트가 접속하는 서버용은 아니라는 점이죠.
향후 발전 되길 바라구요.
아직 알아보지 못했지만, protocol header 와 protocol의 내용의 암/복호화를
정의할 수 있어야 할텐데, 가능한지 아직 모르겠네요.

어쨌든, 서버 프로세스간 통신하기에는 안성맞춤입니다.
트위터가 사용한 flockdb에서도 thrift를 사용했습니다.

사용방법도 매우 간단합니다.

http://wiki.apache.org/thrift/ThriftUsageC%2B%2B

MacOSX에서의 설치도 간단한 편입니다.
boost의 설치가 먼저 필요합니다.
http://wiki.apache.org/thrift/ThriftInstallationMacOSX

haskell binding은설치하다가 에러가 납니다.
haskell을 굳이 쓰지 않는다면,
lib/Makefile에서 hs부분을 제거하고 설치하시면 됩니다.

Nonblocking Socket방식의 통신을 원한다면,
libevent를 설치해야 합니다.
http://monkey.org/~provos/libevent/

flockdb를 사용하기 위해서는 thrift 0.2.0을 사용해야 하네요.
조심하시길..

저도 앞으로 서버간 통신에는 thrift를 사용하려고 합니다.
제가 아쉬웠던 점을 commit할 수 있는 영광이 있으면 더 좋겠네요. ^^

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^