Fork me on GitHub

2011/06/24


このエントリーをはてなブックマークに追加
Go言語フリークの皆さんこんばんわ。
テンポラリ的にキャプチャ画像をアップロードする際にはgyazoが一般的ですよね。僕もよく利用しています。
今日はこのgyazoに画像をアップロードするクライアントと、サーバを書きました。
mattn/gyago - GitHub

Gyazo application written in go

https://github.com/mattn/gyago
Gyago

Gyazo on AppEngine

http://go-gyazo.appspot.com/
コマンドラインで動くクライアントと、GoogleAppEngineで動くサーバです。クライアントはキャプチャ動作はしませんが、引数で与えたpngファイルをgyazoサーバにアップロード出来ます。またサーバはdatastoreを使って画像データをblobに格納する事でgyazoサーバを実現しています。

タイトルページはGoogle WebFont APIを使ってなんなーくカッコいい感じにしてみました。ほんとになんとなーくです。
Google Web Fonts

Google Web Fonts lets you browse all the fonts available via theGoogle Web Fonts API. All fonts in t...

http://www.google.com/webfonts
GoogleAppEngineの無料枠なので、すぐMax Quotaになっちゃうかも知れませんが、良かったら遊んでみて下さい。
なお、クライアントはデフォルトではgyazo.comにアップロードしちゃうので
# gyago -e=http://go-gyazo.appspot.com/ imagefile.png
という感じにアップロード先のエンドポイントを指定してあげて下さい。 ちなみに、sendさんがsinatraで書いたgyazoサーバにアップロードしたい場合は
# gyago -e=http://gyazo.send.sh/ imagefile.png
と指定すれば動きますが、現状のGoはmultipartの処理で、先頭に空白行が1行入る動作になっていて、rack-1.2と相性が悪い(先頭に空白行があるとマッチしない)ので、golang-devにパッチを投げてあります。
と書いた所で再度見たら、もうsubmitされてましたので、hg pullしてtipsにすると入ってます。

ちなみに、rack-1.3では先頭に空白行が入っていても正しく読める様な修正が入っている模様です。

Posted at 02:30 in ソフトウェア::lang::go
Tagged as: go, golang
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2011/05/02


このエントリーをはてなブックマークに追加
普段からvimでtwitterしてますが、どっちかっていうとtwitter見たりボヤいたりするのにもコンソールのままでいたい派です。
ページャとか、自分で拾うのでコンソールにまま出力されてくれればいい...そんなtwitterクライアントが欲しかったので自分で書いた。
mattn/twty - GitHub

twty: command-line twitter client

https://github.com/mattn/twty
Go言語で書いたのは一度ビルドすればexeだけでランタイムが要らないから。あとGoだと簡単に書けるのよね。僕は。
ただ残念ながらどうしてもWindowsのコマンドプロンプトをサポートから外す訳にいかなかったのでGoのiconv拡張だけはライブラリとして入れる必要があります。
なお、この場合出来上がったexeとiconv.dllだけあれば動作します。USBかなんかで持ち歩けばどこでもtwitter出来ます。

実行すると初回は自動でブラウザが起動して、PINコードの入力を求められるので、ブラウザに出てる番号をコピペして下さい。使い方は
# twty -h
で分かる内容のままですが、だいたいこんな動きになります。
# twty -h
Usage of twty:
  -f ID: specify favorite ID
  -i ID: specify in-reply ID, if not specify text, it will be RT.
  -l USER/LIST: show list's timeline (ex: mattn_jp/subtech)
  -u USER: show user's timeline
  -r: show replies
  -v: detail display

# twty
mattn_jp: あーあー
☃☃☃☃☃☃☃☃☃: いーいー
...

こんな感じ

# twty -r
☃☃☃☃☃☃☃☃: @mattn_jp こちらこそです。ドキュメント直したり、ソースに手を入れて pull したりという程の腕も頭もないです。この程度のお手伝いでしたら、喜んでヤリマッセw
☃☃☃☃☃☃☃☃: ハァハァwww RT @mattn_jp: うし。コマンドラインで使えるtwitter clientでけた。goで書いたからランタイム要らない。USBに入れとけばいつでもどこでも... もちろんwin32も対応。
...

こんな感じ

# twty -u mattn_jp
mattn_jp: うし。コマンドラインで使えるtwitter clientでけた。goで書いたからランタイム要らない。URLに入れとけばいつでもどこでも... もちろんwin32も対応。
mattn_jp: URLってなんだ。USBねw
...

こんな感じ

# twty -l mattn_jp/subtech
☃☃☃☃☃☃☃☃☃: java-ja からきました、っていえば下品なこともいい放題ですし。
☃☃☃☃☃: 懇談会どこ? #perlcasual
...

こんな感じ

# twty -v
☃☃☃☃☃: ☃☃☃☃☃☃☃
  懇談会どこ? #perlcasual
  XXXXXXXXXXXXXXXXX
  Thu Apr 28 10:11:08 +0000 2011

☃☃☃☃☃☃☃☃☃: ☃☃ ☃☃
  朝までのんでればいいんじゃ RT @☃☃☃☃☃: >< RT @☃☃☃☃☃☃☃☃: 俺明日早いんすよねー RT @☃☃☃☃☃: @☃☃☃☃☃☃☃☃ 見せ決まったらおしえて///  #perlcasual
  YYYYYYYYYYYYYYYYY
  Thu Apr 28 10:14:34 +0000 2011
設定ファイルはWindows XPデフォルトだと
%USERPROFILE¥Application Data¥&twty¥settings.json
に格納されます。
Posted at 04:07 in ソフトウェア::lang::go
Tagged as: go, twitter
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2009/12/04


このエントリーをはてなブックマークに追加
GtkTreeModelとか面倒くさい部分に差し掛かってます。でもこれないとコンボボックスもツリーもリストも作れないんすよね。
go-gtk-20091204
いまんところこんな感じ。
イベントクロージャが内包出来てJavaScriptを書いているかの様にGTKプログラミングが出来ています。
    //--------------------------------------------------------
    // GtkButton
    //--------------------------------------------------------
    button := gtk.ButtonWithLabel("Button with label");
    button.Clicked(func(w *gtk.GtkWidget, args []unsafe.Pointer) {
        print("button clicked: ", button.GetLabel(), "\n");
        dialog := gtk.MessageDialog(
            button.GetTopLevelAsWindow(),
            gtk.GTK_DIALOG_MODAL,
            gtk.GTK_MESSAGE_INFO,
            gtk.GTK_BUTTONS_OK,
            entry.GetText()
        );
        dialog.Response(func(w *gtk.GtkWidget, args []unsafe.Pointer) {
            println("Dialog OK!")
        }, nil);
        dialog.Run();
        dialog.Destroy();
    }, nil);
    buttons.Add(button);
完成はまだまだ先です。頑張ります。
Posted at 00:30 in ソフトウェア::lang::go
Tagged as: go, golang, gtk
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2009/11/28


このエントリーをはてなブックマークに追加
やっぱり新しい言語が出来たらGUIだよね!
って事でGTKバインディング作ります!

mattn's go-gtk at master - GitHub

gtk extension for go

http://github.com/mattn/go-gtk
Goでは継承が使えないので、例えばGtkBoxを継承したGtkVBox/GtkHBox、GtkWidgetを継承したGtkWindow/GtkButton/GtkLabel...が上手く表現出来ません。
出来ないというか、GtkButtonにGtkWidgetと同じメソッドを生やそうと思うと、同じコードを書かなければなりません。
色々と模索した結果、gtk.Window()やgtk.Button()で返すのは常にGtkWidgetとし、GtkWindowやGtkButton独自のメソッドを呼び出したい場合には
(&gtk.GtkWindow{window.Widget}).SetTitle("GTK Go!");
こういう風に型変換して貰う事にしました。まぁコンポジションぽい物?
C言語バージョンにおいても同じ処理をする時には
gtk_window_set_title(GTK_WINDOW(w), "GTK Go!");
とする訳だし、似てると言えば似てる訳だし...
要は、Widget毎にGtkWidgetからGtkXXXへの変換関数なんか作ってらんねぇよ。バカ!
という訳です。

現状、コールバック(gtk_signal_connect)も動作しています。少しハマった理由としては、goroutineを勝手にスレッドだと思っていたので、スレッド間通信を想定してpipeのコードを書いていましたが、よく考えたらscheduled coroutineだし、自分のwrite pipeを自分でreadしてどうするよ...って気付いたのです。
結局変数ポーリングに変えて現状上手く動いています。
GoでGTKのプログラミングをすると、以下の様なコードになります。
package main

import (
  "os";
  "gtk";
  "unsafe";
)

func main() {
    gtk.Init(&os.Args);
    window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL);
    (&gtk.GtkWindow{window.Widget}).SetTitle("GTK Go!");

    vbox := gtk.VBox(0, 1);

    label := gtk.Label("ハローワールド");
    (&gtk.GtkBox{vbox.Widget}).PackStart(label, 0, 1, 0);

    entry := gtk.Entry();
    (&gtk.GtkEntry{entry.Widget}).SetText("入力エリア!");
    vbox.Add(entry);

    button := gtk.ButtonWithLabel("こんにちわ!こんにちわ!");
    button.Connect("clicked", func(widget *gtk.GtkWidget, data unsafe.Pointer){
        println("button clicked");
        println((&gtk.GtkButton{button.Widget}).GetLabel());
    }, nil);
    vbox.Add(button);

    window.Add(vbox);

    window.ShowAll();
    gtk.Main();
}
そして実行画面。
go-gtk
まだ、GtkWindow/GtkButton/GtkLabel/GtkVBox/GtkHBox/GtkEntryのそれぞれ一部のメソッドしか動いていませんが、宜しければ遊んでみて下さい。
そしてもし「おおし!おいらも作るお!」って方が居られたら、ぜひgithubでforkして下さい。

Posted at 00:55 in ソフトウェア::lang::go
Tagged as: go, golang, GTK
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip