Posts
최근에 바뀐 go 언어 프로그래밍의 습관, 나름대로의 규칙들. #2
이전 글에 이어 지는 내용입니다. (http://kasw.blogspot.kr/2015/05/go.html)
가능한 작은 단위 까지도 각 struct를 독립 package화 하기 이것은 정말로 습관화하려고 노력하는 것입니다. package 이름을 struct 이름과 같게 하고 패키지내 파일 이름들을 ( 좀 규모가 되는 struct 인경우만 ) structnameattrib.go struct 의 정의와 New() 함수 , field 의 accessor 들을 정의 structname.go
struct 가 해야 하는 기능들을 정의 structname_test.go
go test 용 로 정하기
작은 규모의 struct인 경우는 상관 없지만 좀 큰 규모의 struct는 아무 생각없이 한 파일에 코드를 짜넣다 보면 1000라인이 넘어 가는 경우도 생기더군요.
Posts
최근에 바뀐 go 언어 프로그래밍의 습관, 나름대로의 규칙들.
나름대로는 go 언어를 꽤 많이 쓴 편이라고 생각하고 있었습니다만
( go4game, goguelike 둘다 코드의 양도 있는 편이고 사용하는 기능도 tcp/ip, http, client, websocket 등 꽤 다양하게 사용합니다. )
최근에 google/gxui 코드를 보면서 이런저런 것들을 많이 생각하게 되었습니다. https://github.com/google/gxui
그 여파로 goguelike2에 이런 저런 refactoring을 시도 하게 되었는데. 그 중 적어 볼만한 것들을 적어 봅니다. (이 것이 정답이라고 말할수는 없겠지만 )
1. private interface , public interface 전에 interface에 대해 적은 적이 있는데 (http://kasw.
Posts
goguelike2 의 몇몇 스크린 샷들. 작업 진행 사항.
(거의) 재작성한 goguelike는 일단 goguelike2로 부르고 있습니다.
goguelike : version 0.x ~ goguelike2 : version 1.x ~
인셈이지요. 현재는 inventory 와 status effect(버프) 작업을 진행하고 있는데 ( 기존엔 장비와 장비 슬롯 은 있었지만 인벤토리는 없었습니다. )
진도가 잘 안나가는 관계로 기분전환삼아 작성하는 포스트 입니다. ;; 일단 실시간 서버모니터링 툴인 towerviewer 의 스샷들입니다. 최근 새로한 texture가 적용된 플레이맵 - observer mode라 시야 제한이 없는 view입니다. 층 전체가 보이는 map view
또다른 playmap
Posts
texture image file을 쪼개서 여러개의 tile file로 만들고 싶을 때.
ImageMagick 을 사용하면 좋다.
– 끝 – 이라고 쓰고 말면 ( 미래의 나 로부터 ) 욕먹을테니…
goguelike “client” 용 tile image가 필요해서 Dungeon Crawl Stone Soup 의 http://crawl.develz.org/wordpress/
tile 들을 가져다 쓰고 있었습니다만. ( 라이선스도 자유 이용이라 좋더군요. )
역시 부족한 타일들이 좀 있어서 몇개는 되도 않는 손놀림으로 gimp를 사용해 어떻게 만들어 쓰고 있었습니다만 ..
역시 어설픈 관계로 구할수 있는 큰 크기의 texture들을 쪼개서 (32x32 png ) 만들어 보기로 하고 역시 gimp로 노가다를 하고 있자니 한숨만 나오고.
Posts
무선 랜으로 연결된 노트북을 서버로 사용할때
개발환경을 통일 하기위해서 노트북을 서버로 사용하고 있습니다. 이렇게 하면 데스크탑에서 작업하다가 나갈일이 생겨도 서버로 sync를 하고 ( unison으로 작업 폴더를 싱크하고, 노트북에 gitlab 서버를 설치해 쓰고 있습니다. ) 노트북을 들고나가면 문제가 없게 되지요.
게다가 노트북은 ssd 라 조용하고 또 전기도 적게 먹으니 media 서버만 nas로 돌리면 작업데이터용 서버로는 최적인것 같습니다.
아무튼 이렇게 노트북을 서버로 쓰면서 유선lan으로 연결하면 ( giga bit lan이라 빠르긴 하지만 ) 선이 귀찮아 지기때문에 ( 전송할 데이터가 많은 경우만 연결하고 ) 보통때는 무선으로 연결하고 있습니다.
Posts
오래된 컴퓨터가 전원이 바로 들어 오지 않는 경우.
집에서 사용하는 컴퓨터가 대략 1년 전부터 전원버튼을 눌러도 켜지는데 까지 시간이 걸리는 증상이 있었습니다.
(오해가 없도록 ) 정확히 말하면 전원 버튼을 눌러도 bios의 post가 바로 시작되는 것이 아니고 수십초(또는 수분) 정도의 시간이 지나야 (메인보드에 전원이 들어오면서 ) post가 시작되는 증상입니다.
저만 그런 것이 아니고 제 와이프가 사용하고 있는 (동일 구매 시점) 동일 사양의 기계에서도 같은 증상이 일어나고 있었습니다.
약 4년 전에 산 intel i2500 cpu + gigabyte p67a-ud3r-b3 인데 슬슬 수명이 다되 가는 것이겠거니 하고 포기 하고 있었습니다.
Posts
MMO를 만드는 것에 로망이 있다면 .
세상을 만들고 그 세상의 규칙을 정하는 경험을 해볼수 있다는 점일 것입니다.
goguelike도 일단 MMO의 범주에 들어가기때문에 ( MMORLG - mmo RogueLike Game ^^ ) 그런 경험을 즐길수 있습니다.
그를 위해서 terrain을 만든는 map script도 만들고 그 안에서 살아갈 AI들도 만들고 있습니다만 .. 역시 글자(log)로만 봐서는 확 하고 느낌이 오지 않는 관계로
기존의 webinfo 페이지 이외에 실시간으로 서버내 상황을 볼수 있는 viewer를 만들었습니다.
최근에 만들었던 terrainviewer를 확장해서 terrain만이 아니고 그 속의 AO/PO 들까지 볼수 있게 확장 한것입니다.
Posts
goguelike의 지형 생성 부분을 완전 재작업 하고 있습니다.
기존의 지형 시스템의 부족함이 느껴저서 새로 작업을 진행하고 있습니다.
기존과 같이 terrainscript+ random 을 사용해서 생성하는 것은 같으나 더 많은 구성 요소들과 더 정교한 로직을 사용하도록 바꿨습니다.
그랬더니 script만으로는 어떤 형태의 지형이 만들어 질지(+debug)상상하기 힘들어져서 간단한 terrain generation viewer를 만들었습니다..
오류가 발생했습니다. www.youtube.com에서 동영상을 시청하거나 브라우저에서 자바스크립트가 사용 중지된 경우 사용 설정하세요.
작업중인 동영상
그렇데 이런 구조라면 AI를 만드는 것이 더욱더 힘들어 질것 같습니다. (특히 client AI는 많이 힘들어 질듯 .
Posts
goguelike에 대량의 수정을 시도하다가.
말하자면 fork를 해서 작업을 시작할 정도로 대형 수정 작업을 진행하고 있었습니다만.
( 잠정적으론 goguelike2 가 될 것으로 예상하고 있습니다. )
습관적으로 *.a 파일을 지우기 위해 ctrl-a , shift-del 을 했다가 소스를 홀라당 날려 먹었습니다. ( pkg 폴더가 아니고 src 폴더더군요. ;; )
..
..
..
..
..
..
*.a 를 지우는 것은 gosublime 이 background build 해둔 package 파일들이 가끔 문제를 일으켜서 생긴 습관입니다만..
이것이 문제를 일으킬줄이야. ;;;
소스를 날려 먹은 것을 깨닿고 침착하게 git 에서 꺼내오려고 하니.
Posts
go 언어에서 goroutine group을 같이 종료 시키기
update 15-03-29) http://blog.labix.org/2011/10/09/death-of-goroutines-under-control 를 같이 보시는 것도 재밌을것 같습니다. 비슷한 고민을 다르게 해결한 경우라고나 할까요.
update) 페북에 올라온 의견을 읽다보니 이글의 설명이 부족한듯 합니다. 아래 상황은 같은 context를 공유하는 goroutine들 간에 종료 신호를 주고 받기위한 방법중 (아마도 )가장 가볍고 빠른 방법을 만들어본것입니다. 이 제한이 없다면 다른 무수한 방법들이 가능할것입니다. 당장 map + mutex를 사용해서도 동일한 효과를 볼수 있을껍니다. ( 크고 무겁겠지요 ^^ ) 여기서 context를 공유한다는 것은 runstate를 struct의 field로 만들고 만들어진 object를 공유하는 여러 goroutine을 생각하시면 됩니다.