JooStory.net

vala Application

gitg 때문에 시작한 vala 공부를 오랜만에 했습니다. 문서가 그리 많지 않아서 공부하기가 쉽지 않았다는 핑계를 대고 싶네요.

처음엔 급하게 Window는 어떻게 만드는지, Button은 어떻게 만드는지 이런거부터 봤는데 아무래도 목적을 달성하기 위해서는 차근차근 보는게 좋을 것 같았습니다. 그래서 Application 부터입니다.

Application에서 크게 신경쓸 메소드는 3가지입니다. startup, shutdown, activate 인데 startup은 아직 Window를 만들기 전에 수행되는 것이고 menu를 만드는 등을 하면 됩니다. activate에서는 실제로 Window를 만듭니다.

public class Application : Gtk.Application {
    public Application() {
        Object(application_id: "net.joostory.hello",
           flags: ApplicationFlags.FLAGS_NONE);
    }

    protected override void startup() {
        base.startup();
        set_app_menu(make_menu());
        add_app_menu_actions();
        print ("startup\n");
    }

    protected override void shutdown() {
        print ("shutdown\n");
        base.shutdown();
    }

    protected override void activate() {
        base.activate();
        print ("activate\n");
        var window = new Window(this);
        window.show_all();
    }
}

다음은 메뉴입니다. 메뉴는 추가와 액션 연결이 따로 있는데 추가는 간단합니다.

   private GLib.Menu make_menu() {
        var menu = new GLib.Menu();
        menu.append("About", "app.about");
        menu.append("Menu1", "menu1");
        menu.append("Menu2", "menu2");
        menu.append("Menu3", "menu3");

        var section = new GLib.Menu();
        section.append("Section Menu1", "section.menu1");
        section.append("Section Menu2", "section.menu2");
        section.append("Section Menu3", "section.menu3");
        menu.append_section("Section", section);

        menu.append("Quit", "app.quit");
        return menu;
    }

메뉴에 대한 액션은 메뉴에 추가한 이름과 동일한 액션을 만들고 액션의 activate에 수행할 method를 연결해주면 됩니다. quit와 about dialog를 만드는 액션입니다.

   private void add_app_menu_actions() {
        var quit_action = new SimpleAction("quit", null);
        quit_action.activate.connect(this.quit);
        add_action(quit_action);

        var about_action = new SimpleAction("about", null);
        about_action.activate.connect(this.open_about);
        add_action(about_action);
    }

    private void open_about() {
        print ("Open About\n");
        var about = new About();
        about.show_all();
    }

추가된 메뉴들은 이런 모양으로 보이는데 액션이 연결된 메뉴만 밝은 색으로 보입니다.

오늘은 여기까지.

욕심이 부른 화 그리고 얻은 것

여느 때처럼 Ubuntu 관련 문서를 찾다가 ubuntu 14.10 alpha1 이 나온 것을 알았습니다. 지난번에 beta로 무리하게 업그레이드했다가 다시 설치한 기억이 있어서 약간 망설였지만 별일이야 있겠나싶어 그냥 업그레이드 했습니다. 조금 빨리 새 버전을 쓰고 싶은 저의 욕심이죠. 이것은 결국 부팅이 안되는 화를 불러왔고 다시 설치하게되었습니다.

화 1

다시 설치하는 길은 쉽지만은 않았습니다. 먼저, 하드디스크가 망가졌습니다. 어째 부팅할때마다 경고문구도 뜨고 가끔 부팅도 안되고 하던 것이 불안했는데 끼익끼익 소리와 함께 BIOS setup 에서도 자취를 감춰버렸습니다.

제 PC는 얼마 전에 회사에서 교체해줘서 아주 새 것입니다. 당연하게도 Windows7이 설치된 상태로 저에게 넘겨졌지만 저는 거기에 이전 PC에서 가지고 있던 하드디스크를 연결해서 Ubuntu를 사용했습니다. Windows는 혹시나해서 남겨뒀죠. 그런데 이젠 선택의 여지가 없어졌습니다. Windows가 설치된 곳을 모두 비우고 Ubuntu를 설치했습니다.

화 2

두번째 장애물은 저의 또다른 욕심때문에 만나게 되었습니다. 설치하는 도중에 터미널의 투명배경이 동작하게 하고 싶어졌습니다. 터미널의 투명배경은 사실 이전부터 안되었지만 새로 설치하니 갑자기 하고 싶어지더라구요. open source driver 대신 ATI 에서 제공하는 driver를 사용하도록 설정했습니다. 재부팅하니 low graphic mode로 진입을 하더라구요. 그래서 또다시 삭제하고 설치를 했습니다.

화 3

세번째 장애물은 한글입력입니다. 첫번째 설치했을때 신기하게도 크롬이나 에피파니에서 한글입력이 문제없이 되는겁니다. 그간 나비를 써서 몰랐는데 iBus에서는 한글 문제가 없더군요. 그래서 기쁜 맘으로 이제 iBus를 써야지 하고 두번째 설치를 끝냈는데 이번엔 한글입력자체가 안되는 겁니다. Input source에 Korean도 잘 들어가있고 전환도 잘 되는데 말이죠. 또다시 재설치를 해봐야하나 고민하는 순간이었습니다. 한참을 고생하다가 알아낸 해결책은 ibus-hangul 이라는 package를 설치해야하고 “Korean (Hangul)”을 사용해야한다는 겁니다.

얻은 것 1

제 PC는 하드디스크가 3개가 들어있었습니다. 두개는 받을때부터 있던 것이고 나머지 하나는 이전 PC에서 사용하던 겁니다. Windows가 설치되어 있던 건 첫전째 하드디스크인데 그건 무려 SSD 입니다. 두번째 하드디스크는 첫번째가 용량이 작아서 추가된 일반 하드디스크입니다. 그간 SSD 가 있음에도 사용하지 않았던 이유는 ‘빨라야 얼마나 빠르겠나’ 라는 생각때문이었는데 이번에 어쩔 수 없이 사용하게 된 이후에 그 생각은 정말 잘못된 생각이라는 것을 알았습니다.

SSD가 조금 빠르다는 것은 맥북을 사용하면서 이미 알고는 있었지만 일반 하드디스크와는 비교할 기회가 없었는데 동일한 PC에서 하드디스크와 번갈아가며 사용해보니 그건 상상이상입니다. 일단 부팅속도가 무서울 정도로 빠릅니다. 절전모드에서 돌아올때 정도의 속도로 부팅이 됩니다. 맥북이 11인치 Air인데 그렇게 빠르게 느껴진 이유가 바로 이거구나 싶었습니다. 이전에는 사용하지 않을때 절전모드로 두었는데 이젠 그냥 꺼도 되겠습니다.

얻은 것 2

위에 잠깐 언급하긴 했는데 크롬이나 에피파니에서 이제 한글입력이 잘 됩니다. iBus를 사용하니까 문제없네요. 나비는 그동안 잘 썼으니 감사한 마음만 간직하렵니다. 주의할 점은 입력소스에 한국어(Hangul)을 써야한다는 것!

엄청난 화를 입긴했지만 얻은 것도 있고 잘 해결되고나니 기분이 좋습니다.

vala mode

vala를 시작하면서 닥친 첫번째 문제는 당연히 IDE 문제입니다. 얼마전 빌드한 atom, sublime text 에는 vala가 기본 지원에서 빠져있더라구요. 그냥 하이라이트없이 사용하다가 아무래도 안되겠다 싶어 찾아보았습니다.

gedit

gedit는 기본으로 vala 하이라이트를 지원합니다. 그러나 그뿐. 개발하는데 gedit는 그리 좋은 선택이 아닙니다. plugin 들도 3년전까지만 개발되다 중단되었더군요. 그래서 포기.

sublime text

sublime text2 용으로는 나와있는데 한글도 안되는 sublime text를 쓰고 싶지는 않았습니다. 게다가 저는 sublime text3을 사용 중이라 호환될런지도 잘 모르겠고 어쨌든 포기.

atom

설마 있을까 하고 찾아보았는데 language-vala 가 있었습니다. sublime text2 용과 마찬가지 방법으로 text mate용을 포팅한 것인데 설치도 쉽고 하여 한번 써보았는데 대만족입니다. 이 정도면 딱 좋았습니다.

그래서 vala 공부는 atom과 함께 하기로 결정했습니다.