블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Technical Article 2013. 3. 24. 22:48

SQLER on windows azure open camp 6차 DB

,
Technical Article 2013. 3. 10. 19:52

SQLER on windows azure open camp 5차 Web Site

,
Technical Article 2013. 2. 23. 12:04

SQLER on windows azure open camp 4차 Cloud Service 후기

,
Technical Article 2013. 2. 15. 22:29

Erlang 놀이 #1

윈도우에서 Erlang 기본 경로 수정

 

설치경로 : C:\Program Files\erl5.9.3.1

작업경로 : C:\Dev\erlang_test

 

1. 설치경로/usr/.erlang 파일 추가

C:\Program Files\erl5.9.3.1\usr\.erlang

 

2. c:cd("working_path"). <<< 경로 수정

 

io:format("consulting .erlang in ~p~n", [element(2,file:get_cwd())]).
c:cd("C:/Dev/erlang_test").
io:format("Now in : ~p~n", [element(2, file:get_cwd())]).

 

 

리스트 합 구하기

<Src>

-module(cal).
-export([sum/1]).

sum(L) ->
 sum(L, 0).

sum([], N) ->
 io:format("[], N=~p~n", [N]),
 N;

sum([H|T], N) ->
 io:format("[H=~p|T=~p], N=~p~n", [H,T,N]),
 sum(T, H+N).

 

<Output>

Erlang R15B03 (erts-5.9.3.1) [64-bit] [smp:4:4] [async-threads:0]

consulting .erlang in "C:/Program Files/erl5.9.3.1/usr"
C:/Dev/erlang_test
Now in : "C:/Dev/erlang_test"
Eshell V5.9.3.1  (abort with ^G)
1> c(cal).
{ok,cal}
2> L = [1,2,3,4,5].
[1,2,3,4,5]
3> cal:sum(L).
[H=1|T=[2,3,4,5]], N=0
[H=2|T=[3,4,5]], N=1
[H=3|T=[4,5]], N=3
[H=4|T=[5]], N=6
[H=5|T=[]], N=10
[], N=15
15

 

 

 

,
Technical Article 2013. 1. 27. 00:34

cpp-netlib 0.9.4 visual studio 2010 사용해보자!

왜???

클라우드, 스마트폰 => HTTP 서버, 클라이언트

결국 스케일 아웃을 위해서 Restful 방식으로 될 수 밖에!

 

- MS casandra

native C++ 을 위한 MS의 restful 지원책 => 실제로는 azure에 끌어들이기 위한것 아닌가?

공식 사이트에서도 설명했지만 production 레벨로 권고하지 않음. 아직 개발단계이니...

성능 테스트 해봤을 때 좀 실망적...

 

- Boost ASIO + custom HTTP

간단하게 짜기 좋으며 성능도 짱.

 

- Boost cpp-netlib

아직 정식 boost 배포에 포함되지는 않았지만 노력중인듯.

HTTP, URI, header 등... 필요한 건 다 있는듯

 

 

 

cpp-netlib 0.9.4 빌드 방법

 

1. Jamroot파일에서 주석처리

#build-project libs/network/test ;
#build-project libs/mime/test ;

 

2. libs/network/build/Jamfile.v2 에서 from -> to 로 변경

from: lib cppnetlib-uri : libs/network/src/uri/parse.cpp ;
to: lib cppnetlib-uri : libs/network/src/uri/uri.cpp libs/network/src/uri/schemes.cpp ;

3. boost 폴더에서 bjam 복사

 

4. 실행

cd cpp-netlib-0.9.4

 

bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=32 variant=debug link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=32 variant=release link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=64 variant=debug link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=64 variant=release link=static

 

5. 빌드 후 라이브러리 파일 경로

cpp-netlib-0.9.4\libs\network\build\bin

 

* 파일명이 빌드타입이나 비트에 따라 별도로 생성 안 됨 ㅡㅡ;

 

 

참조  : https://groups.google.com/forum/?fromgroups#!topic/cpp-netlib/HCahOzmLe54

 

 

 

샘플 테스트

 

 

서버> node.js

var cluster = require('cluster');

var numCPUs = require('os').cpus().length;
// var numCPUs = 1;

if ( cluster.isMaster )
{   
 for (var i = 0; i < numCPUs; i++) {
  cluster.fork();  
 }   
 
 cluster.on('death', function(worker)  {   
  logger.info('worker ' + worker.pid + ' died & restart');
  cluster.fork();                   
 }); 
}
else
{
 var sys = require("sys"),
 my_http = require("http");
 my_http.createServer(function(request,response){ 
  response.writeHeader(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
 }).listen(80);
 sys.puts("Server Running on 80"); 
}

 

 

샘플>
#include <boost/network/protocol/http/client.hpp>
#include <iostream>

#pragma comment(lib, "libcppnetlib-client-connections.lib")
#pragma comment(lib, "libcppnetlib-server-parsers.lib")
#pragma comment(lib, "libcppnetlib-uri.lib")


int _tmain(int argc, _TCHAR* argv[])
{
 using namespace boost::network;
 /*
 if (argc != 2) {
  std::cout << "Usage: " << argv[0] << " [url]" << std::endl;
  return 1;
 }
 */

 char* uri = "http://127.0.0.1";

 http::client client;
// http::client::request request(argv[1]);
 http::client::request request(uri);
 request << header("Connection", "close");
 http::client::response response = client.get(request);
 std::cout << body(response) << std::endl;

 return 0;
}

 

 

결과>

b
Hello World
0


계속하려면 아무 키나 누르십시오 . . .

 

 

,
Technical Article 2012. 2. 27. 20:51

Boost::ASIO 사용을 위한 1.48.0 빌드 (VS2005)

다운 & 압축해제
http://boost.org

bjam, b2 빌드
 D:\Vendor 경로 기준

cd D:\Vendor\boost_1_48_0\tools\build\v2

bootstrap.bat

b2 install --prefix=D:\Vendor\boost_1_48_0

set path=%path%;D:\Vendor\boost_1_48_0\bin



 boost 빌드

cd D:\Vendor\boost_1_48_0

bjam --toolset=msvc --build-type=complete --with-system --with-thread --with-date_time --with-regex --with-serialization stage


D:\Vendor\boost_1_48_0\bin.v2\libs 
*.lib 파일 적당한(?)곳에 복사 후 사용



기타
vs2010, vs2005가 둘다 설치되어 있으면 vs2010으로만 빌드가 됨 ㅡㅡ;;
환경변수 때문인듯 한데... 아시는분은 답글 좀 달아주세요 ^^;





,
Technical Article/Mac & iPhone 2012. 1. 31. 20:44

[Xcode4.2] 스토리 보드 기반 탭바 프로젝트에 + cocos2d + Box2D 연동


- 2개 프로젝트 생성
cocos2d 프로젝트(이하 A)생성
스토리 보드 이용하는 프로젝트(이하 B)  생성 (ARC 옵션 사용 안함)

- A의 libs와 resources를 B에 복사 후 프로젝트에 추가
GameConfig.h, GLES_Render.*, HelloWorldLayer.* 도 모두 복사 후 프로젝트 추가 

 

* 만약 ARC 옵션을 사용했다면 다음과 같이 NO로 변경 




- 프로젝트 설정 변경







- 라이브러리 추가 



- 프로젝트에서 빌드 되나 확인 ^^;

- UIViewContoller 추가
m 확장자를 mm으로 바꿔줘야 에러 발생 안함 


- 뷰에 붙이기

#import "HelloWorldLayer.h"
.
.
.

- (void)viewDidLoad

{

    [super viewDidLoad];


    if(![CCDirector setDirectorType:kCCDirectorTypeDisplayLink]) {

[CCDirector setDirectorType:kCCDirectorTypeDefault];

}

    

CCDirector *director = [CCDirector sharedDirector];

    

    CGRect screenRect = [[UIScreen mainScreen] bounds];


  EAGLView *glView = [EAGLView viewWithFrame:screenRect

  pixelFormat:kEAGLColorFormatRGB565

  depthFormat:0

];

[director setOpenGLView:glView];

[director setAnimationInterval:1.0/60];

[director setDisplayFPS:YES];

[self setView:glView];

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

[[CCDirector sharedDirector] runWithScene: [HelloWorldLayer scene]];

}



- (void)viewDidUnload

{

   [[CCDirector sharedDirector] end];

    [super viewDidUnload]; 
}

  

 

 
- 빌드 후 확인 
,
Technical Article/Mac & iPhone 2012. 1. 26. 20:44

[OSX] 단축키


캡쳐(파일 저장)
전체화면 : Cmd+Shift+[3]
화면일부 : Cmd+Shift+[4]
윈도우 : Cmd+Shift+[4] , 해당 윈도우 커서 이동 [Space]
- 클립보드로 저장하고자 하면 Ctrl 추가

프로세스
강제종료 : Cmd + Opt + ESC
전환 : Cmd + TAB

Safari
Refresh : Cmd + R

Xcode 4.2
소스 헤더 전환 : Ctlr + Cmd + [UP]
실행(디버깅) : Cmd + R
빌드 : Cmd + B
실행된거 정지 : Cmd + .(점)

디버깅 창 : Ctrl + Cmd + R
콘솔 창 지우기 : Ctrl + K

 
,
Technical Article 2011. 6. 27. 17:51

xcode 4.0.2 에서 cocos2d 0.99.5 설치 및 테스트 프로젝트 빌드 하기

부제 : Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

cocos2d 0.99.5 안정 버젼
http://cocos2d-iphone.googlecode.com/files/cocos2d-iphone-0.99.5.tar.gz

xcode4용 템플릿(www.cocos2d-iphone.org/archives/1412)
http://cocos2d-iphone.googlecode.com/files/cocos2d-1.0.0.-beta-templates.tar.gz

cocos2d-iphone-0.99.5.tar.gz 를 압축 해제하고 터미널에서
$ sudo ./install-templates.sh
설치 완료 후 템플릿이 보일수도 있고 안보일 수도 있다.

이제 템플릿을 받아서 터미널에서
$ mkdir -p ~/Library/Developer/Xcode/Templates
$ cd ~/Library/Developer/Xcode/Templates
$ tar xzvf cocos2d-1.0.0-beta_templates.tar.gz

하고 새로 xcode를 실행하면 정상적으로 빌드가 된다.

,
Technical Article 2009. 8. 15. 10:21

온라인 게임 보안툴 분석

게임 서버 프로그래머이지만 게임을 개발하는 사람으로써 우리가 원하는

컨텐츠를 사용자가 즐기는데 있어서 장애가 될만한 요소를 제거하는것이

의무가 아닐까?

서비스를 하게되면 일반적으로 게임전용 보안툴을 클라이언트와 같이 배포하게

되는데 정식 서비스를 하면서 게임 보안용 툴을 설치하지 않는 클라이언트는

별로 없을 것이다.

최근 몇가지 보안툴의 분석을 통해 알아본 몇가지 특정을 간략히 정리해

보고자 한다.


<기술적인 차단 기능>

1. App와 Driver의 통신에 사용되는 DeviceIO를 차단한다.

2. 전역후킹을 사용가능하지만 보안툴이 떠있는 중에 후킹을

Load, Unload하게 되면 Application 자체를 차단시킨다.

일반적으로 강제 프로세스 종료를 차단하고 기능을 동작하지 못하게 한다.

3. 기본적인 필터 드라이버를 차단한다.

4. 바이너리는 실행파일 압축을 하고 Anti-Debug가 붙어있다.

5. 바이너리의 해쉬를 서버에서 검증한다.


<문제점>

1. App와 Driver 통신시 DeviceIO이외의 방법을 사용하면 막지 못한다.

2. HID 드라이버로 구현했을때 막지 못한다.

3. 개발자가 디버깅하는데도 충돌한다.


,
TOTAL TODAY