2016. 3. 31.

GXUI 에서 한글 출력하기

github.com/google/gxui에서 GUI 를 사용하려고 했는데, 한글 출력이 안 됐다. 어느 일본인이 Twitter 앱을 만든 앱이 하나 있길래 봤는데 솔직히 어떻게 구성을 했는지 잘 이해가 되지않았다. 입문자는 최대를 뻘짓을 통해서 해결 할 수 밖에 없다.

func appMain(driver gxui.Driver) {
    g := new(gxuitter)
    g.LoadConfig()
    theme := dark.CreateTheme(driver)
    fontFile := g.ConfigString("FontFile")
    fontSize := g.ConfigInt("FontSize")
    if fontSize <= 0 {
        fontSize = 12
    }
    if fontFile != "" {
        b, err := ioutil.ReadFile(fontFile)
        font, err := driver.CreateFont(b, fontSize)
        if err == nil {
            theme.SetDefaultFont(font)
        }
    }
}

위에는 appMain 에 font를 설정하는 방법

golang.kr 에서 질문 글을 올려서 해결책을 찾게 되었습니다.

한글이 나오지 않는 이유는 기본으로 제공하고있는 roboto 폰트가 한글을 지원하지 않는 것이었습니다. 저도 go 언어는 기본적으로 utf-8 로 작성되는 언어인데 한글 출력이 안된다는 점을 이상하게 생각했는데 의외로 간단한 문제 였습니다.

1, 첫번째 방법은 나눔폰트를 go generate 하는 방법

go generate 란

매크로를 활용해야 하는 경우라면 지금까지 나열한 방법으로 해결되지 않습니다. C 언어 등에서 제공하는 매크로는 전처리기를 통하여 소스 코드를 혹장하여 컴파일합니다. 비슷한 도구가 go 도구에 있습니다.

300p, 책 디스커터리 Go 안에서

$GOPATH/src/github.com/google/gxui/gxfont/mkfont.go 파일에서 urls 이름의 map에 적당한 한글폰트 하나를 추가합니다.

var urls = map[string]string{
    "roboto_regular":  "https://github.com/google/fonts/raw/master/apache/roboto/Roboto-Regular.ttf",
    "droid_sans_mono": "https://github.com/google/fonts/raw/master/apache/droidsansmono/DroidSansMono.ttf",
    "nanumgothic":     "https://github.com/google/fonts/raw/master/ofl/nanumgothic/NanumGothic-Regular.ttf",
}
$ go run mkfont.go

mkfont.go 파일을 이용해서 generation 합니다.

func appMain(driver gxui.Driver) {
    theme := flags.CreateTheme(driver)

    fontdata, err := ioutil.ReadFile("malgun.ttf")
    if err != nil {
        log.Fatalln(err)
    }
    font, err := driver.CreateFont(fontdata, 12)
    if err != nil {
        log.Fatalln(err)
    }
    theme.SetDefaultFont(font)

nanumgothic.go 라는 파일이 생성 된 것을 확인 할 수 있을 것입니다.

mkfont.go 와 같은 디렉토리의 파일 $GOPATH/src/github.com/google/gxui/gxfont/gxfont.go 파일의 Default를 robo_regular에서 nanumgothic 으로 바꿉니다.

var (
    // Default is the standard GXUI sans-serif font.
    Default []byte = inflate(nanumgothic)

    // Monospace is the standard GXUI fixed-width font.
    Monospace []byte = inflate(droid_sans_mono)
$ go install

로 컴파일 해주면, 이제 한글이 보입니다.

2번째 방법은,

gxui.Driver 를 통해서 theme에 SetDefaultFont 를 설정하는 방법입니다.

실행 파일과 같은 곳에 malgun.ttf 파일을 복사해 넣고,

func appMain(driver gxui.Driver) {
    theme := flags.CreateTheme(driver)

    fontdata, err := ioutil.ReadFile("malgun.ttf")
    if err != nil {
        log.Fatalln(err)
    }
    font, err := driver.CreateFont(fontdata, 12)
    if err != nil {
        log.Fatalln(err)
    }
    theme.SetDefaultFont(font)

다음과 같은 fontdata 와 font 코드를 추가해 줍니다.

$ goimports -w

를 통해서 import 라인을 다시 수정하면 됩니다.

2016. 3. 27.

Go 설정하기 osx

http://golang.org 에서 다운를 받는다

2pUiIQO.png

이런 귀여운 아이콘이 존재한다. pkg 파일로 구성되어 있어서 깔끔하게 설치할 수 있을 것이다. 하지만, 이것으로 설치가 끝난 것은 아니다. PATH 를 설정해야 된다. 이것을 설정 안 해준다면, go get 명령어를 실행할 수가 없다.

자신이 원하는 작업폴더를 만든다. 일단 mkdir -p $HOME/Programming/go 를 만들었다. (-p 옵션은 Programming 폴더가 존재하지않으면 이 폴더도 함께 만들어 주는 기능을 한다.) 이제부터 모든 작업들을 이 폴더의 하위폴더에서 작업을 할 것이다.

nano ~/.bash_profile 을 입력, 아래와 같은 줄을 추가한다.

exprot GOPATH=$HOME/Programming/go
export PATH=$GOPATH/bin:$PATH

일단 이렇게 설정을하고 Terminal을 종료했다가 다시 실행한다. ~/.bash_profile 설정을 다시 불러들여와야 하기 때문이다. 이 때문에 안되는 경우도 있다.

터미널을 실행했다면 종료하기 직전에 있었던 디렉토리 위치에 있을 것이다.

go get golang.org/x/tools/cmd/…

실행하면, 잠시 로딩이 되는 것을 알수 있다. golang 에 있는 커맨드들을 다운받아오는 과정

일단 이게 된다면, GOPATH 설정은 제대로 된것입니다.
명령어가 잘 작동하는지 테스트 해 봅시다.

goimports —help

제대로 설정이 되었다면, 아래와 같은 메세지를 출력할 것입니다.

usage: goimports [flags] [path ...]
-d        display diffs instead of rewriting files
-e        report all errors (not just the first 10 on different lines)
-l        list files whose formatting differs from goimport's
-srcdir dir
        choose imports as if source code is from dir
-w        write result to (source) file instead of stdout

수고하셨습니다.

2016. 3. 13.

일산 이마트타운에서 만난 구슬함바그,

GRMIVmx.png

금요일 저녁, 장을 보고 저녁도 먹을 겸해서 일산 이마트 타운에 갔다. 유명한 초마짬뽕과 구슬 함바그를 고민하다 홍대에서 먹어본 그 맛이 생각났다. 그러나 이 선택이 후회하게 될 줄이야.

구슬함바그는 홍대에서도 유명한 먹거리 음식이다. 유명해서 줄을 서서 먹는게 일상적인 일이다. 무쇠에 달궈져서 나오는 함바그 위에 얹어서 나오는 반속 계란 후라이는 함바그의 맛을 시각적으로도 끌어올려주었다. 고기는 두껍고, 부드러웠으며 소스는 독특했다. 하지만, 일산에서 만난 구슬함바그에서는 그 날의 기억을 최악으로 바꿔놓기에 충분한 맛이었다. 그리고, 한동안 잊고 있었던 블로그를 적게 해 주는 원동력이 되었다.

이마트타운 구슬함바그의 고기는 공장에서 찍어나오는 고기 패드였다. 수제함바그로 유명한 그 맛이 아니었다. 달기만 하고, 소스는 일반 마트에서 파는 소스와 같았다. 직접 만드는 소스의 독특하면서도 투박한 맛이 아니었다.

맛없는 맛을 자세히 쓰기 어렵다. 그래서 사진 한장 남겨왔다. 고기가 남짝하고, 속은 볼품없다. 내 기대 또한 볼품없어 졌다. 최근에 먹었던 윤씨밀방 함바그가 생각나는 식사였다.

구슬함바그는 꼭 본점에서 맛을 봐야 할꺼 같다. 하아..