2013/08/24


このエントリーをはてなブックマークに追加
アスキー・メディアワークス様より、献本して頂きました。
実践Vim 思考のスピードで編集しよう! 実践Vim 思考のスピードで編集しよう!
Drew Neil
アスキー・メディアワークス / ¥ 3,024 (2013-08-29)
 
発送可能時間:在庫あり。

まず先に総評を言ってしまいますが、Vimmer ならば買うべき本だと思います。
Big Sky :: Vimテクニックバイブル ~作業効率をカイゼンする150の技

もちろんこれらの本も僕を喜ばす事は出来たのですが、なにぶんページの殆どが知っている情報だったので僕にとって「ワクワクする本」では無かったんです。 ずっと最新情報取り入れたVim本出ないかなと思ってまし...

http://mattn.kaoriya.net/software/vim/20110810203558.htm
Vimテクニックバイブル ~作業効率をカイゼンする150の技 Vimテクニックバイブル ~作業効率をカイゼンする150の技
Vimサポーターズ
技術評論社 / ¥ 3,218 (2011-09-23)
 
発送可能時間:在庫あり。

Vim テクニックバイブルを書いた時にも何冊か Vim の本を紹介しましたが、これまで「Vim を現場で使う事にスコープを当てた本」というのは存在しませんでした。
あくまでリファレンスでしかなく、なぜ Vim はこんな動作なのか、編集する方法には複数の方法があるのに何故この方法が良いとされているのか、そういった事が書かれている本というのは僕が知る限りありませんでした。
この本は「Practical Vim」と題された、Drew Neil 氏が書いた本の日本語訳で、私も英文の方は一部だけ読んだ事があったのですがこの本が日本語で読める様になった事に大きな喜びを感じました。訳者の方やアスキー・メディアワークス様に感謝したいと思います。
The Pragmatic Bookshelf | Practical Vim

Vim, a vast improvement over its classic ancestor vi, is a serious tool for programmers, web develop...

http://pragprog.com/book/dnvim/practical-vim
今日1日かけてじっくりと読ませて頂きました。僕も自他共に認める Vim 中毒者ですので、書かれている事の殆どは知っていたりもしましたが、改めて「この本良いな」と思いました。
これまでのリファレンス本は、体裁よく頭から必要だと思われた事を淡々と説明していましたが、本書は TIPS という形式で計 121 ものシーンを用いて実際に起き得る問題を紹介し、その解法を説明しています。かつインターネットからダウンロード可能なサンプルを用いて、言葉通り「実践」(Practical)を実現しています。
例えば
// example
var a = 1
var foo = ""
var fizz = new Date()
この様なテキストを
// example
var a = 1;
var foo = "";
var fizz = new Date();
こう編集するにはどうするのが良いのか、URL が並んだテキストの一部を共通的にを編集するにはどうすれば良いのか、といった問題に対して実際のサンプルで読者と一緒に読み進めます。
つまり僕が思うに、この本は「この前こんな場面で Vim なら簡単に出来そうだけど、やり方がわからなかった」といった人にとても有用な本であって、訳者の方やアスキー・メディアワークスの方にはとても失礼かもしれませんが、本の右端を折ったり付箋紙で貼ったりしながら自分が欲しい場面をどんどん見つけて欲しい本だと思いました。

例えば「bar」単語の「a」にカーソルがあり、その単語を削除する場合、dbx, bdw, daw の3つが考えられます(実際もっとあります。ただdbxは...間違い?)。この中で、Vimmer は消した後の事も考えます。ドットをタイプし、同じ様な削除行為を繰り返したいならば、「daw」を使います。そういった内容も書かれています。
ちなみになぜ「daw」が良いのかは、この本を買って見て頂くとして本書ではこの他にも「インターネットでこの方法が良いって言われてたけど、何故なの?」などといったことを事細かに説明してくれています。テキストオブジェクトについて説明した Vim の本というのも確かにこれまで無かったのでは無いでしょうか。
ちなみにテキストオブジェクトについては、結構ページ数を割いています。
中級者から上級者になりたい、そんな方にはぜひ読んで頂きたい本だと思いました。

最後に本書を読んで、僕の頭に残った言葉を紹介したいと思います。
一歩下がって、三歩進む
Vim らしい言葉だと思います。Vim はモードのあるエディタです。カーソルキーを使わないならば、移動するだけでも1キー押さなければなりません。しかしこの一歩下がる行為がある事で Vim は三歩も四歩も、いや数十歩先を進む事が出来るのです。

2013/08/21


このエントリーをはてなブックマークに追加
etcd って何と聞かれた場合、一言で言ってしまえば zookeeper なんだけど
Documentation · CoreOS

etcd etcd is a highly-available key value store for shared configuration and service discovery.

http://coreos.com/docs/etcd/
coreos/etcd - GitHub
https://github.com/coreos/etcd
etcd の良い所は
  • curl で使える様な簡単な API
  • SSL Cert 認証もオプションとして使える
  • ベンチマークで 1000s of writes/s per instance を出せるくらい速い
  • Raft を使って正確に、確実に分散する
という感じらしい。作ってるのは CoreOS。
etcd はキーをパス形式で指定し、値を入出力出来るのだけど、例えば
  • /app/foo に test1
  • /app/bar に test2
この様に設定して /app を参照すると foobar の両方が参照出来る。
curl からも簡単に実行出来るので、ちょっと値を更新といった場合にもいちいちプログラムを書かなくても良い。
etcd はみんな大好きGo言語で書かれていて Windows でもビルド出来るし、linux のノードと混ぜて運用する事も出来る。Go言語で書かれた go-etcd というクライアントを使えば、簡単に etcd を操作出来る。
coreos/go-etcd - GitHub

This etcd client library is under heavy development. Check back soon for more docs. In the meantime, check out etcd for details on the client protocol.

https://github.com/coreos/go-etcd
この etcd を使った小さなプログラムを書いてみた。
mattn/etcdenv - GitHub

etcd + env = awesome!

https://github.com/mattn/etcdenv
通常、unix で env と言えば
$ env DB=newdb CACHE=mycache foo
の様に環境変数を指定してプロセスを起動する物で、shebang で使われる事が多い。
例えば上記の様に書かれたプログラムが複数のサーバで起動するシステムであった場合、環境変数の内容を書き換えるとなれば大変だ。もちろんデプロイしてしまえばいいんだけど、そもそも環境変数値を動的に変えたいなんてニーズはある訳だ。
そこで
$ etcdenv -key=/app foo
この様にキーを指定して起動すると、etcd から環境変数値を取得して foo を起動する。利用シーンで言えば以下の様な感じ。
$ curl http://127.0.0.1:4001/v1/keys/app/db -d value="newdb"
$ curl http://127.0.0.1:4001/v1/keys/app/cache -d value="new cache"

$ curl http://localhost:4001/v1/keys/app
[{"action":"GET","key":"/app/db","value":"newdb","index":4},{"action":"GET","key":"/app/cache","value":"new cache","index":4}]

$ etcdenv -key=/app/
DB=newdb
CACHE=new cache

$ etcdenv -key=/app/ ruby web.rb
foreman や goreman の Procfile で以下の様に指定してもいい。
$ cat Procfile
web: etcdenv -key=/app ruby web.rb
後は複数あるシステムの環境変数を変えたければ curl で更新すればいい。

なお、etcd は設定情報に特化はしているけど、よく考えたらこれってファイルシステムだよね、とひらめいたので vim から etcd をファイルシステムとして扱える物を作ってみた。
mattn/vim-metarw-etcd - GitHub

vim-metarw-etcd etcd filesystem for vim

https://github.com/mattn/vim-metarw-etcd
:e etcd:/app/
とすれば上記の DB や CACHE が一覧され、ENTER で参照出来る。更新は :w で ok。
vim-metarw-etcd

TAB で補完も出来るのでファイルシステムそっくりに扱える。ちなみに僕はこの2日程、etcd 上で日記を書いてる。
etcd の使い道はもっと可能性があると思うので、もう少し遊んでみたい。

2013/08/15


このエントリーをはてなブックマークに追加
airline の為だけに hahhah-vim を autoload 化しました。
mattn/hahhah-vim - GitHub
https://github.com/mattn/hahhah-vim
そして vim-airline-hahhah
mattn/vim-airline-hahhah - GitHub
https://github.com/mattn/vim-airline-hahhah
ハァハァ
powerline、airline 等を試して来ましたが、これが無いとやっぱり vim 使ってる気になれませんね。

2013/08/13


このエントリーをはてなブックマークに追加
readline って言うと、便利な反面 Windows だと問題が多く発生して、Windows でも動かすスクリプトでの使用は敬遠してたんですが、Caroline だと多い日も安心。
tokuhirom/Caroline - GitHub

Yet another line editing library

https://github.com/tokuhirom/Caroline
readline なんかと違って、内部は utf-8 なので unix 等のスクリプトと同じ動きをします。ヒストリも保存出来るし、入力補完も自作出来ます。
eg/suddenly_death.pl を見るといいです。

$ perl -Ilib eg/suddenly_death.pl
hello> 
ここで m を入力してタブキーをタイプすると...
$ perl -Ilib eg/suddenly_death.pl
hello> 突然のmattn
そして ENTER キーをタイプすれば
_人人人人人人_
> 突然のmattn <
 ̄^Y^Y^Y^Y^Y^ ̄