Below you will find pages that utilize the taxonomy term “go”
Posts
go 용 web framework 벤치마크, 특징.
이전글 에 잠깐 언급했었던 http://kasw.blogspot.kr/2014/10/pythongolang-web-framework.html
go 용 web framework를 비교 테스트 해봤습니다.
그때 이후로 beego, revel , martini 이외에 딱히 떠오르는 것은 없는것 같아서 일단 평가가 별로인(듯한) martini는 빼고 ( 나중에 시간나면 한번 보고 싶긴 합니다. )
beego와 revel 만을 검토해 보았습니다.
사용한 기계의 spec
linux mint 17.1 cinnamon x64 Linux kasw-work 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux i7-4790 3.6x4 4c8t ram 8G single channel ab -c 100 -n 500000 http://localhost:8080/
Posts
go testing 패키지 사용중 주의점
go 언어는 테스팅을 위한 전용 패키지 testing을 가지고 있어 아주 유용하게 사용할수 있습니다.
다만 이를 사용할때는 source code의 naming rule을 따라야 하는데 테스트할소스코드이름_test.go 형태를 지켜야 합니다.
이를 지키지 않으면 flag 패키지를 사용해서 command line argument를 받는 프로그램 작성시 -? 등으로 command line help를 보게 되면
-test.bench="": regular expression to select benchmarks to run -test.benchmem=false: print memory allocations for benchmarks -test.benchtime=1s: approximate run time for each benchmark -test.blockprofile="": write a goroutine blocking profile to the named file after execution -test.
Posts
go 언어로 만든 코드를 웹 브라우저에서 실행하기
asm.js를 보다가 갑자기 궁금해져서 기록삼아 적는 포스트
google 의 chrome/V8 에 이어서 mozilla 가 야심차게 밀고 있는 http://asmjs.org/ : http://ejohn.org/blog/asmjs-javascript-compile-target/ 와 이를 활용하는 http://kripken.github.io/emscripten-site/
등이 나오고 있는 와중에
요즘 주로 작업하고 있는 golang도 이 대세에 동참할수 있을까 하고 찾아본 기록들 .
더이상 개발이 진행되고 있지 않은 https://github.com/kless/go2js
emscripten 은 llvm 을 asm.js로 변환 하는 프로젝트이니 go 를 llvm으로 변환 하는 ( Go -> LLVM -> Emscripten -> asm.js ) https://github.com/axw/llgo
Posts
goguelike 클라이언트를 개선하고 있습니다.
reference 구현이라고는 해도 보기 좋고 쓰기 좋아야 한다고 생각해서 손을 대고 있는데 생각보다 손볼곳도 많고 시간도 꽤 들어가고 있습니다.
일단 grid를 추가하고 이전에 시야에 들어 왔던 부분은 현재 시야에서 안보이더라도 화면에 약간 어둡게 표시하도록 수정했는데 이것 만으로도 많이 좋아 보이게 되더군요. ^^
Posts
goguelike 클라이언트 개선
이런 저런 시도후에 제일 보기 좋은 형태를 찾았습니다. 화면 표시와는 별개로 아직 조작감은 좀 떨어지는 문제가 있지만 일단 이런 형태로 개선해 나갈 생각입니다.
Posts
goguelike 진행사항
13일 동영상
15일 동영상
일단 karma 가 추가 되었고 , 장착 가능한 아이템들(그림은 아직 없지만) 그리고 ai 끼리의 전투가 추가 되었습니다.
기본적으로 상대방이 system ai인지 사람인지 구별을 하지 않는(못하는) 시스템으로 계획하고 있기에 사람끼리의 전투도 같은 형태입니다.
지금은 테스트 용이라 frame이 좀 빠릅니다만 실제 사용자가 control 하려면 속도를 좀 낮춰야 할것 같습니다.
동영상에서 오른쪽에 나오는 글 정보를 참고하시면 도움이 될듯 합니다.
그리고 층간 이동시 효과가 없어서 효과를 추가했습니다.
Posts
만들고 있는 것의 상태2 : "@"의 모험
^^;;
일단은 nethack 과 classic ultima 사이의 어딘가 가 될것 같습니다.
자동 생성 지형 + 방(집?) + 방을 연결하는 길 + 테라스 불,마그마,땅,물,얼음,(높은)돌벽, 창문(낮은 벽), 돌길, 열린문, 닫힌문, 잠긴 문 땅에 떨어져 있는 아이템, 돌아다니는 user . 사방으로 무한 반복되는 floor 여러 플로어로 이루어진 tower (들) 정도의 구성 요소를 가질 계획 입니다.
만들어질 서비스의 종류는 Role Playing Simulator. 줄여서 RPS ^^ 또는 (+system을 해서 ) RPSS
제작자의 특성상 Game이라기 보단 로그인 해서 사용하는( use , not play) simulator 가 될것 같습니다.
Posts
요즘 제가 만들고 있는 것
클라이언트 프로토타입 랜덤워크 지형 생성 기반 데이터 시각화 생성된 지형 ( 표준 도시형 )
궁금해 하시는 분도 있는 것 같아서 올려 봅니다. 기본 적으로 online server - client , 턴제 , tile 기반의 floor, 자동 생성 지형등을 특징으로 하는 것일 예정입니다. 아직 클라이언트 그래픽이 없는 관계로 위와 같은 모양입니다.
Posts
go4game의 spatial partition을 octree로 바꿨습니다.
설명: ai3의 회피 알고리즘 테스트 동영상 - 글내용과 무관함 ^^
기존 wxgame2에서 부터 충돌 검사와 AI 를 의해 사용해 오던 준 동적 공간분할 대신 나름 정통 공간 분할인 octree로 바꿨습니다.
기존에는 공간을 매 프레임 마다 총 object의 수에 비례하는 (축당 math.pow(ocount, 1/3)) 배열로 분할 해서 충돌 검사 및 AI에게 주변 환경정보를 제공하는데 사용해 왔습니다.
하지만 아무래도 약식이라 부족한 점이 많아서 공간 분할을 하는 몇가지 알고리즘 중에 일단 octree를 선택, 구현 해봤습니다.
Posts
go4game 추가 사항들 정리
github commit log로 부터 역으로 만들어낸 내용입니다.
설명: 실제 여러 월드가 동작하는 화면
설명: 월드내 팀의 자세한 상태 - 배경색이 team color
설명: 추가된 장식물, home object
최근 부터 역순으로 team 의 world 간 이동 기능 homepos to home object json config load / save log format 정리 장식물(decoration object)들 추가 collision 관련 성능, 구조 개선 object, team, world struct 간 상호 pointer 줄이기. 같은 기능이 추가 되었습니다. 코드상으로는 많은 변화가 있었지만 실제 외견(어차피 서버라 외견이랄게 없지만)상으로 변화한 것은 별로 없습니다.
Posts
go4game 에 웹 클라이언트를 추가 했습니다.
사진 설명 : go4game web client
소스코드는 언제나 처럼 https://github.com/kasworld/go4game 에 있습니다.
go언어는 서버에서 사용하는 것을 중점으로 하고 있기 때문에 client UI 를 작성할 만한 라이브러리가 적당한 것이 없습니다.
기본 라이브러리만이 아니고 3rd party 에서도 아직까지는 딱히 이거다 라고 할만한 것이 없더군요.
그에 반해서 서버를 만들기 위한 라이브러리는 tcp/http 불문하고 넘칠 정도로 많고 또 잘되어 있는데 아마도 go언어로 만든 프로그램의 UI는 당연히 web으로 작성하라는 의미 같습니다.
그런 관계로 go4game도 client UI는 웹으로 작성해야 겠다는 생각이 들어서 ( 사실은 클라이언트 UI 라이브러리를 찾다 포기하고 ^^; ) 웹 작업을 했습니다.
Posts
go4game - go 언어로 만드는 게임 서버
몇 년 전부터 생각하고 있던 go언어를 사용한 게임 서버의 개발을 시작했습니다.
일단 첫 번째 작동 버전은 언제나처럼 github에 있습니다. 지금까지 만들어진 것은 서버를 구성하기 위한 가장 기본 적인 구조들 GameService, World, Team, GameObject 과 client 와 tcp 로 패킷을 주고 받을 수 있는 구조들 정도 입니다. 지금 사용하는 패킷은 int32 len + json 형태의 패킷입니다.
참고로 그동안 제가 적은 go 관련 스터디 포스트 들입니다. The Go Programming Language : 2009년 글입니다.
Posts
wxgame2의 네트웍버전을 위한 기반 작업을 진행하고 있습니다.
이전 글 이후에 강의 준비를 하면서 코드를 보니 코드가 오래 되기도 했고 또 설계상의 결정들이 맘에 들지 않아 전체적인 재 정리를 해야겠다고 생각하고 있었습니다.
지난 주부터 시간 되는 대로 작업을 진행해서 로직을 수행하는 wxgame2server.py와 서버로 부터 받은 정보를 시각화하는 뷰어인 wxgame2client.py 로 만드는 것을 일정부분 끝냈습니다.
현재까지는 네트웍으로 데이터를 주고 받는 것은 안되어 있으며 간단하게 file/pickle 을 상용해서 서버-> 클라이언트간 정보를 전달하고 있습니다.
코드를 작성하다 보니 구조가 맘에 들지 않아 거의 뜯어 고치게 되었습니다.
Posts
구글 go 언어를 공부하면서 몇몇 중요 포인트를 메모중입니다. (5/N)
오랫만에 다시 go 이야깁니다.
오랬만에 기억을 되살리기 위해 이런 저런 이야기를 잠깐 해보면 go 언어의 특징중 가장 두드러지는 것을 하나 들면 goroutine을 들 수 있을 텐데요.
많은 서버와 대용량의 데이터(소위 big data)를 처리 하고 있는 구글은 이를 위해서 여러 언어를 사용하고 있다고 알려져 있습니다. 하지만 각각의 언어들은 장단점이 있는 관계로 구미에 딱 맞는 언어가 필요하여 go 언어를 만들었다는 게 사람들의 짐작 입니다.
그래서 go 언어에는 구글이 가장 필요로 하는 goroutine 과 channel 이 기본으로 존재합니다.
Posts
우분투에서 서브라임 에디터로 go 개발을 하(려)다보니.
서브라임 에디터로 go 개발을 하기 위해 필요한 패키지를 찾아보면 바로 보이는 것이 go build 패키지라서 일단 설치는 해두었습니다. 이번 주말에 집에서 오랫 만에 go 코드를 만질 일이 있어서 ( 실은 요즘 매일 python 만 하고 있어서 go 도 좀 해두려고.. )
서브라임에서 전에 만들어둔 go 소스를 열고 작업을 시작했습니다. 이왕 하는 김에 제대로 환경을 세팅하려고 프로젝트도 만들고 빌드를 했는데 아무 반응이 없습니다. 물론 터미널을 열고 빌드하면 당연히 잘 되고 .. 에디터 내의 빌드 명령인 <ctrl-b> 로 빌드를 시도하면 아무 반응이 없는 겁니다.
Posts
구글 go 언어를 공부하면서 몇몇 중요 포인트를 메모중입니다. (4/N)
금방 끝날줄 알았는데 남은것이 많더군요.
이제부터는 좀 두서없는 내용이 이어집니다.
reflection package 를 사용해서 func TypeOf(i interface{}) Type func ValueOf(i interface{}) Value 를 사용할수 있습니다. 이런게 얻어진 Value object에 대해서 struct object 였다면 Method( 2 ).Call( some args ) 형태로 실행을 시킬수도 있습니다.
os.Stdin : 표준 입력입니다. os.Open 을 사용해서 파일을 열수 있습니다. io/ioutil 패키지에 ReadFile 을 사용하면 파일을 한번에 읽고, WriteFile로 한번에 씁니다. fmt.Fscanln을 사용하면 space separated file 을 편하게 읽을수 있습니다.
Posts
구글 go 언어를 공부하면서 몇몇 중요 포인트를 메모중입니다. (3/N)
그 세번째 입니다.
이전글은 http://kasw.blogspot.com/2012/09/go-2n.html
Interface Interface는 object의 behavior 를 규정한다. ( 수행 가능한 method 들의 signature 를 정의한다. ) type InterfaceNamer interface { Method1( params ) returns Method2( params ) returns } 관용적으로 er로 끝나는 이름을 사용한다. ( Printer, Reader, Logger 등등 ) 가능한 짦게 만든다 ( primitive 하게 만든다 ) var interfaceReference InterFaceNamer = someObject struct를 정의할때 어떤 interface를 구현하는지 지정할 필요가 없다. interface에 정의된 method가 구현되어 있다면 자동으로 사용가능하다.
Posts
구글 go 언어를 공부하면서 몇몇 중요 포인트를 메모중입니다. (2/N)
그 두번째 입니다. ( 총 몇회가 될지 모르니 2/N 입니다. ^^ )
첫 글은 http://kasw.blogspot.com/2012/09/go.html 를 보시면 됩니다.
Maps key 로 사용 가능한 것은 == , != 이 정의 된 type string,int,float 는 가능 array,slice,struct 는 불가능 pointer, interface 는 가능 struct 를 key로 쓰고 싶으면 Key() 나 Hash() method 를 만들고 그 결과를 키로 사용할것. value 는 아무거나 사용 가능 var map1 map[keytype]valuetype = make( map[keytype]valuetype , capacity ) map1 := map[keytype]valuetype{} map is reference type len(map1) map1[notInMapKey] is zero-value of value type not error val1,isPresent = map1[key1] 형태로 존재하는지 확인 가능 delete(map1, key1) 로 항목을 삭제 가능하면 없는 항목이어도 에러는 없다.
Posts
구글 go 언어를 공부하면서 몇몇 중요 포인트를 메모중입니다. (1/N)
다음 프로젝트에 go 언어를 쓸 생각이어서 공부하는 김에 몇가지 중요 포인트들을 메모 하고 있습니다. 원래는 다 끝나면 한꺼번에 블로그에 올리려고 했는데 적다보니 양이 많아져서 일단 앞부분만 먼저 정리합니다.
주의 할 것은 제가 보기 위해 적은 것이라 기본적으로 C/C++/java/C# 에대한 지식과 추가로 python 같은 스크립트언어도 안다고 가정한 상태에서 적은 것입니다. 게다가 go 언어의 구체적인 syntax 에 대해서도 http://golang.org/ref/spec 같은 곳에서 한번 정도 읽어 봤다고 가정합니다. ( 조건이 너무 까다롭군요. ;; )
Posts
현재 까지 언어별 투자시간
세월이 하수상하지만 ( 정치건 it 판이건 ) 곰곰히 생각해보니 python을 실무에 적용해서 써 온지도 어느덧 10000시간이 넘어간듯 합니다.
얼마전 아는 후배가 첫 8bit kid들이 아직 프로그래밍을 하고 있으면 대충 30년이 되었다고 하는글을 올렸는데 그 글을 보면서 만감이 교차 하더군요.
정말로 30년이 된겁니다. ㅠㅠ 살아온 시간의 3/4 이상을 컴퓨터와 함께 지낸거지요.
그래서 생각해본 언어별 투자? 시간입니다. ( 중복 시간이 있으니 총합은 30년이 넘을수 있습니다 ) basic ( apple soft ) : 5년 Assembly : ( 6502 ) : 3년 ?
Posts
The Go Programming Language
구글에서 만든 언어랩니다. ^^ http://golang.org/ 구글정도되면 이미 충분한 파워와 실력이 있으니 궁금해서 조금(^^) 공부해 봤습니다. 블럭으로 {}를 써서 마치 C/C++/java/C# 유사품 처럼 보이지만 ^^ 내용은 pascal/modula 2의 후계자에 더 가까운듯 합니다.
coroutine의 강화(?)판인 goroutine이 있는것도 재미있고, 컴파일이 빠르다고 주장(표준 라이브러리를 풀빌드하는데 10초가 안걸립니다.)하는것도 turbo pascal 생각이 나구 말이죠. 덤으로 대입 연산이 := 입니다. ㅋㅋㅋ native binary를 만들면서 garbage collection이 되는 점은 D language가 생각 나기도 하고 말이죠. ^^ 무어보다 맘에 드는건 생성된 바이너리의 속도가 C의 80~90%속도가 난다는 점입니다.