先日、庭で子供のプールを汗だくになりながら膨らませ、子供に本気で水をかけられずぶ濡れ状態だった中、ちょっと大きめの郵便が届いた。
送り元はGoogle Inc
なんとなく中身は予想できていた。
2011/08/30
2011/08/24
鳥Vimmerコンテスト
- Vimが無いと俺はコーディングも出来ないのかよ
- タイピングだけは一流のところをみせてやるぜ
- ネオコンプリートフラシュだぜ 信じらんねぇ
- 補完候補は見える、でもこれじゃだめなんだろ?
- Vimの補完実装は晴れ時々大荒れ いいね、いいUNIX臭さだよ
- vimrcを…vimrcを書き換えるんだ…!
- typoしてる・・・分かってる! うぅぅわあああああ!!
- ifとendifのネストがあってない!!うぅうわあああああああ!!!
- あああpatchラッシュがああああ!!うっっごけええええ!!
- ああー!ひどいっ!
- 直れ!直らんかああ!
2011/08/04
Go言語でuWSGIリスナ書いた。
最近はクラウドサーバ等、割と色んな所で見かける様になったuWSGIですが...
ちなみにcontribフォルダにはrubyやjavaのコードも置いてあります。つまりuWSGIプロトコルを実装すれば、言語を問わずフロントエンドをnginxとしたワーカーが作れるって事ですかね。
Go言語も仲間に入れてよ!って事でuWSGIリスナを書いてみました。
nginx.confが
uWSGIPerlだとhirataraさんが書いた記事や
uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C.
http://projects.unbit.it/uwsgi/
Hokkaido.pmでuWSGIについてLTした - a geek born in TomakomaiPlack::App::uWSGIが参考になります。
uWSGI はデフォルトではhttpではなくuwsgiプロトコルを喋るので、uwsgiプロトコルを喋れるフロントエンドを立ち上げます...
http://d.hatena.ne.jp/hiratara/20110718/1310950381
hiratara/p5-Plack-App-uWSGI - GitHubこちらはuwsgiに付属のpsgiプラグインを使っています。なお、uwsgiのcontribフォルダにはPlack::Handler::Uwsgiが同梱されているので、例えばnginx.confに
Plack::App::uWSGI - a PSGI frontend of uwsgi.
https://github.com/hiratara/p5-Plack-App-uWSGI
server {
listen 8082;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9999;
}
}
と書いておき
use Plack::Handler::Uwsgi;
my $app = sub {
return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ] ];
};
Plack::Handler::Uwsgi->new(host=>'127.0.0.1', port=>9999)->run($app)
こんな感じに走らせると、"http://server:8082/" で"Hello World"が表示されます。もちろんフロントエンドであるnginxの設定を弄ればキャッシュやタイムアウトも変更出来るという仕組みです。ちなみにcontribフォルダにはrubyやjavaのコードも置いてあります。つまりuWSGIプロトコルを実装すれば、言語を問わずフロントエンドをnginxとしたワーカーが作れるって事ですかね。
Go言語も仲間に入れてよ!って事でuWSGIリスナを書いてみました。
mattn/go-uwsgi - GitHubあくまでリスナという位置づけなので、unixドメインソケットのファイルや、tcpソケットなど、goでnet.Listenerとして扱える物であれば何でもokです。これを使うとファイルサーバがほんの数行で書けてしまいます。
uwsgi implement for go
https://github.com/mattn/go-uwsgi
nginx.confが
server {
listen 8081;
location / {
include uwsgi_params;
uwsgi_pass unix:///var/run/go-uwsgi/socket;
}
}
であれば
package main
import (
"net"
"http"
"github.com/mattn/go-uwsgi"
"os"
)
func main() {
s := "/var/run/go-uwsgi/socket"
os.Remove(s)
l, e := net.Listen("unix", s)
if e != nil { panic(e.String()) }
http.Serve(&uwsgi.Listener{l}, http.FileServer(http.Dir(".")))
}
これだけですね。簡単です。