2011/01/22


go-gtk meets webkit!先日書いたのですが、ようやく形になってきたのでご報告。
Go言語でGTKを扱えるライブラリ、go-gtkのWidget上にwebkitブラウザをembed出来るライブラリを書きました。
mattn/go-webkit - GitHub

Go bindings for WebKit

https://github.com/mattn/go-webkit/
使い方もgo-gtkのWidgetと同じです。
簡単なサンプルだとこう書けます。
package main

import "os"
import "gtk"
import "webkit"

func main() {
    gtk.Init(nil)
    window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL)
    window.SetTitle("webkit")
    window.Connect("destroy", gtk.MainQuit, nil)

    swin := gtk.ScrolledWindow(nil, nil)
    swin.SetPolicy(gtk.GTK_POLICY_AUTOMATIC, gtk.GTK_POLICY_AUTOMATIC)
    swin.SetShadowType(gtk.GTK_SHADOW_IN)

    webview := webkit.WebView()
    webview.Connect("load-committed", func() {
        entry.SetText(webview.GetUri())
    }, nil)
    swin.Add(webview)

    window.Add(swin)
    window.SetSizeRequest(600, 600)
    window.ShowAll()

    proxy := os.Getenv("HTTP_PROXY")
    if len(proxy) > 0 {
        soup_uri := webkit.SoupUri(proxy)
        webkit.GetDefaultSession().Set("proxy-uri", soup_uri)
        soup_uri.Free()
    }
    webview.LoadUri("http://mattn.kaoriya.net/")

    gtk.Main()
}
簡単ですね!
go言語はWebサーバが簡単に書けるライブラリがたくさんあります。web.gotwisterを使えばfotofloみたいなサイトも簡単に書けます。これ、コンパイルされた実行モジュールで動いてるんですよ。かっこいいすよね。
garyburd/fotoflo - GitHub

This project is the source for fotoflo.info

https://github.com/garyburd/fotoflo
こういったWebサーバと埋め込みブラウザを使った1つのアプリケーションを提供出来る様になるって事です。面白いですね。
ぜひ楽しいアプリケーションを作ってみて下さい。
Posted at by




「Go言語?もうピーク過ぎたよね?」とか言ってる人達こんばんわ。
Go言語、終わってません。いまdev-listではすごい量のメールが飛び交っていて、毎日かなりの量の議論が行われています。
僕としては、ようやく始まったと言えます。もうすぐWindowsでcgoも実行出来る様になります。現在dev-listには既にパッチが投稿されていて、レビュー中です。そろそろ出るんじゃないかと思います。
ただし現状cgoが無いWindowsでもダイナミックローディングが出来ない訳ではありません。syscall.LoadLibraryとsyscall.GetProcAddressを使ってライブラリ関数を取得し、syscall.Syscallで呼び出す事も出来ます。cgo待ってられない!って人でも今すぐDLLを呼び出す拡張モジュールが書けるのです。
今日はその方法を使って、GoからCOM(Component Object Model)を扱えるライブラリを書きました。名前は「go-ole」としました。
mattn/go-ole - GitHub

win32 ole implementation for golang

https://github.com/mattn/go-ole/
GO言語のstructを使って、vtblを作成しています。まぁ先頭ポインタからオフセットでメンバにアクセス出来る言語であれば大体実現出来ますね。
今のところ、プリミティブな型でしか操作出来ません。配列もSAFEARRAYで扱ってません。これからという所です。皆さんのパッチお待ちしています。
サンプルとしてMSAgentでおしゃべりする物が動きました。
go-ole
go-oleだと以下の様なソースになります。簡単ですね。
package main

import "ole"
import "ole/oleutil"
import "syscall"

func main() {
        ole.CoInitialize(0)
        agent, _ := oleutil.CreateDispatch("Agent.Control.1")
        oleutil.PutProperty(agent, "Connected", true)
        result, _ := oleutil.GetProperty(agent, "Characters")
        characters := result.ToIDispatch()
        oleutil.CallMethod(characters, "Load", "Merlin", "c:\\windows\\msagent\\chars\\Merlin.acs")
        result, _ = oleutil.CallMethod(characters, "Character", "Merlin")
        character := result.ToIDispatch()
        oleutil.CallMethod(character, "Show")
        oleutil.CallMethod(character, "Speak", "こんにちわ世界")

        syscall.Sleep(4000000000)
}
よかったら遊んでみて下さい。
Posted at by



2010/07/31


まぁネタですが...
mattn's go-translate at master - GitHub

google language translate library

http://github.com/mattn/go-translate
これ使うと println(translate.Translate("en", "ja", "i'm zakarite what is emperor in cosmic")) こんなコードで 私は宇宙の皇帝zakariteよ こんな結果が得られます。
便利ですね!

あっ歳ばれる。
ちなみにどうやっても帝王って出せないんですけど...
Posted at by