Posts
go 언어를 사용 할때 자주 쓰게 되는 코드 패턴들. serial ID 생성
package id
var genCh chan int64
func init() {
genCh = make(chan int64)
go func() {
var i int64
for {
i++
genCh <- i
}
}()
}
func GenCh() <-chan int64 {
return genCh
}
과 같이 쓰면 goroutine safe 한 id 생성기를 사용할수 있습니다.
실제 위 코드는 goguelike 의 id module의 일부 코드이기도 합니다.
사용할때는
objid := <-id.GenCh()
과 같은 형태를 사용하면 됩니다.
genCh 변수를 글로벌 변수 GenCh로 선언하지 않고 로컬 변수로 선언 한것은 다른 모듈에서 수정할 가능성을 막기 위해서 이며,
Posts
blogger에 프로그램 코드를 넣기 테스트.
type DoFn func(int, int) bool
func Call8WayTile(ox, oy int, fn DoFn) []uint8 {
TileDirs := []uint8{}
for i := uint8(1); i <= 8; i++ {
x, y := ox+Dir2Info[i].Vt[0], oy+Dir2Info[i].Vt[1]
if fn(x, y) {
TileDirs = append(TileDirs, i)
}
}
return TileDirs
}
잘되는 군요. ^^ https://code.google.com/p/google-code-prettify/wiki/GettingStarted
golang도 잘 지원 되는 것 같이 보입니다. ( 일단은 )
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
개발할때 필요한 최신 버전 개발 툴들을 추가하기. - 계속 업데이트 예정
아무래도 표준 ubuntu/mint repository는 약간 보수적으로 안전한 패키지만이 추가 되어 있는 관계로 최신 개발 툴을 사용하려면 따로 설치를 해야 해서 메모겸 정리 하고 있는 포스트.
node.js https://github.com/nodesource/distributions curl -sL https://deb.nodesource.com/setup | sudo bash -
pypy https://launchpad.net/~pypy/+archive/ubuntu/ppa sudo add-apt-repository ppa:pypy/ppa
blender https://launchpad.net/~irie/+archive/ubuntu/blender sudo add-apt-repository ppa:irie/blender
추가로 CUDA toolkit 설치 sudo apt-get install nvidia-cuda-toolkit
아직 좀 갈길이 멀어 보이지만 앞으로가 기대 되는 atom editor http://www.webupd8.org/2014/05/install-atom-text-editor-in-ubuntu-via-ppa.html sudo add-apt-repository ppa:webupd8team/atom
주 editor로는 sublime 2를 사용하지만 보조용으로 gvim과 함께 활약하는 geany https://launchpad.
Posts
pycrust의 split 이 가로로 되는 것을 세로로 바꾸기.
pycrust는 wxpython에 따라오는 ( wxtools 에있음 ) interactive python shell로 ipython을 쓰기 전에 잘 쓰던 것이었습니다.
최근 ipython 이 살짝 이상해진 관계로 다시 pycrust를 쓰고 있는데 역시 wide 화면에서 가로 분할 윈도우는 짜증 나는 관계로 수정을 시도 하였습니다.
패치가 이루어진 다음엔
과 같이 와이드 화면에 어울리게 된 것을 볼 수 있습니다. /usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/py 에 존재하는 crust.py 내의
self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset) 를 self.SplitVertically(self.shell, self.notebook, -self.sashoffset) 로 바꾸면 됩니다.
( 두번 나옵니다. , _CheckShouldSplit 와 ToggleTools 함수 )
Posts
한글 identifier 를 지원 하는 언어에서 한글로 프로그램 짜기.
요즘 나오는 언어들은 프로그램 내의 identifier이름으로 unicode 를 지원 하는 경우가 많습니다. http://rosettacode.org/wiki/Unicode_variable_names
애초에 새로 언어를 디자인 하면서 이를 지원하지 않게 디자인 하는게 이상한것이겠지요.
아마 제가 처음으로 한글 변수 명 한글 함수명이 사용 가능한것을 보게 된것은 java 였던 것 같습니다. 뭐 그전에 “씨앗"이라고 하는 한글 프로그래밍 언어도 있었습니다만..
그래서 이제는 unicode를 지원하니 이제는 맘껏 한글 이름 변수명과 함수명 클래스 이름을 사용해도 좋을까 하는것이 주제 입니다.
그 전에 잠시 집고 넘어갈것이 있는데, 회사에서 프로그램을 작성할때 한글 이름 파일명을 사용하는지 궁금합니다.
Posts
goguelike:baised 진행사항
딱히 외적으로 변화한 부분이 없는 관계로 포스팅이 뜸했습니다만..
내부적으로는 격변이라고 할 만큼의 수정이 있었습니다. ( 거의 모든 코드가 수정된 듯. )
기본적으로는 기존의 코드를 모두 refactoring해서 30여개의 모듈로 분리하는 작업이 완료 되었습니다.
그리고 client AI 를 위한 a-star 모듈과 이를 사용한 client AI 작업이 진행되었고 또 이를 이용한 loadtester 역시 만들었습니다.
클라이언트 쪽 변경사항이라면 서버와 같이 모듈화 작업이 진행되면서 다양한 형태의 클라이언트를 만들기 위한 clientbase 모듈을 만들고 이를 sdlclient 와 loadtester에 적욯하였습니다.
Posts
오랫만에 리눅스가 말썽을 일으킨 이야기. - 기록용
요즘 linux container 가 유행이라서 테스트나해볼까하고 (docker와 쌍벽을 이루고 있는? ) lxc를 설치해봤습니다.
최신 버전을 찾아서 ppa를 추가 하는 식으로 설치할수도 있겠지만 요즘은 패키지 설치를 좀 보수적으로 하고 있는 편이라 기본 repository 에서 검색을 해보고 있기에 그것을 설치했습니다.
저녁 약속이 있어서 나가야 하기에 설치만 하고 종료를 했는데 깜빡한 것이 있어 처리 하기 위해 컴퓨터를 켰는데…
grub화면이 지나고 mint부팅 화면에서 멈춰 있기에 esc를 눌러서 부팅 콘솔을 봤더니
scanning for btrfs file systems
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:Biased의 테스트 버전을 릴리즈 했습니다.
지난 몇일간 릴리즈를 위한 작업을 진행했습니다.
아직 완성된 것은 아니지만 실행해 볼수 있는 테스트 버전을 릴리즈 합니다.
일단 앞으로 goguelike관련 포스팅은 모두 http://goguelike.blogspot.kr/
에 올릴 예정입니다.
일단 실행 가능한 바이너리만 릴리즈 했으며 소스의 공개는 현재로서는 예정이 없습니다. 클라이언트인 sdlclient 와 서버 접속 라이브러리인 goguelib은 좀 정리가 되면 해볼까 고민 중입니다.
map editor인 edittower는 공개할만한 수준이 못되어 이번 릴리즈에서는 빠졌습니다.