2011/05/13


vimキチの皆さんこんばんわ。今日もvimscript書いてますか?

今日はGoogle TasksのAPIが公開されたので、Google Tasksをvimから操作出来るvimscriptを書いてみました。
今回はoauth2で、client認証方式を取りました。Twitterの様な認証方式になります。
いつものごとく、bundleディレクトリに放り込んで
:GoogleTasks と実行するとブラウザが起動して
googletasks1
という画面が出るので、テキストボックスの中身をコピーしてvim上の CODE: という部分に張り付けます。
すると
googletasks2
こんな風に一覧が表示され(初めて使う人は空っぽです)、メニューのキーをタイプします。
後は画面操作に従えば、登録・更新・削除・参照が出来ます。またeをタイプするとvim上で編集でき、":w"で書き込めます。
なお、タスク期限やタスク完了フラグの更新はまだ出来てません。とりあえず動いたよ!って所です。
動作にはwebapi-vimの最新版が必要です。
よかったら遊んでみて下さい。
mattn/webapi-vim - GitHub

Vim Interface to Web API

https://github.com/mattn/webapi-vim
mattn/googletasks-vim - GitHub

This is vimscript for googletasks

https://github.com/mattn/googletasks-vim
Posted at by



2011/05/12


以前、githubにsshポートが通らなくてもpush出来る方法をご紹介しましたが、今日はbitbucketです。
bitbucketは元々https経由でpush出来ますが、sshプロトコルを使わない場合はbasic認証になってしまいパスワードを毎回尋ねられます。またそれを省略しようと思うと、Clone URLを hg clone https://username:password@bitbucket.org/username/example といった感じにしなければならなく、とても危険です。
出来る事ならばsshを使いたいですね。実はgithubと方法はまったく同じ。
bitbucketのアカウントページにid_rsa.pubの値を貼り付け、ssh/configファイルを修正します。

~/.ssh/config Host bitbucket.org
    Port 443

もしプロキシを使っておられるなら、ココにあるconnectを.ssh内に置き Host bitbucket.org
    Port 443
    ProxyCommand /home/mattn/.ssh/connect -h bitbucket.org 443
とすればOK。後はpushしまくれ。
Posted at by



2011/05/11


僕にとってデカいニュースが飛び込んできた。
Goの開発プロジェクトに関わってて良かった。今日はそう思える日になりそうだ。
まだGoogle App Engine Blogにもエントリされてないが、Google App EngineにGo言語が仲間入りした。
Downloads - Google App Engine - Google Code

Google App Engine SDK for Go

http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Go
Go言語は元々Google社員が開発している言語で、コンパイル型言語とは言えDuckTypingを前面に押し出した、スクリプト言語に近い仕様になっています。またWebに関するAPIは豊富で短いコードで簡単にWebアプリケーションを書く事が出来る様になっています。
例えば、先日書いたコマンドライン向けTwitter Clientであれば、OAuthライブラリこそ他に頼っているがメインのコードは350行だ。

さて今回公開されたGoogle App Engine for Goだが仕組みはGoが元々持っているWebサーバ機能を使っている。ソースはコンパイルせずに配置しapp.yamlファイルは以下の様に書く。 application: helloworld
vesion: 1
runtime: go
api_version: 1

handlers:
url: .*
  script: _go_app
この _go_app は固定。実行すると内部でコンパイルされ、applicationで指定したパッケージのinit関数が呼び出される。アプリケーションはあくまでパッケージとして提供し、main関数は書かない。なのでinitでハンドラを登録する。
極端に簡単なアプリケーションを書くとすると、以下の様になる。 package helloworld

import "http"

func init() {
    http.HandleFunc("/"func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type""text/plain")
        w.Write([]byte("Hello, World"))
    })
}
まぁ簡単。もちろんGoogle App Engine上で動く言語 Python や Java と同様に appspot.com でホストする場合はローカルディスクにはアクセス出来ない。ただし既に
  • blobstore
  • datastore
  • mail
  • memcache
  • taskque
  • urlfetch
  • user
という他の言語と同じだけのAPIは既に用意されている。Goにはポインタやアドレスという概念がある為にメモリに直接アクセスする様な事も出来るが、Goはその全てをランタイムを介して行っているのでそれらを例外として扱う事が出来る。
なお、appengine向けのGoランタイム上で動作する為、appspot.com でホストする場合にはコンパイル済みのモジュールを配置する事が出来ない。こちらは python で pyd が置けないのと同じですね。

まさかPerlよりも先にGoogle App Engine向け言語として採用されるとは思ってませんでした。ようやく日の目を浴びる事になりますね。

Go言語はじまったな

Posted at by