2013/09/09


このエントリーをはてなブックマークに追加
Vim のツールバーの画像は随分昔に作られた物で、見る限り古くそれだけで Vim を使うのを辞めてしまう人もいるんじゃないか、という程にクラッシックな画像でした。
vim toolbasr
実は Vim にはツールバーをスクリプトから変更出来る機能があり、画像さえ用意すればカッコいいツールバーにする事が出来る事はごく一部の Vimmer の中だけで知られていました。そして誰もこの腰の重い作業をやろうとする人はいませんでした。 そんな中、istepura という人が Silk というアイコン集を使って Vim のツールバー向けに画像を用意してくれました。
istepura/vim-toolbar-icons-silk - GitHub

README.md vim-toolbar-icons-silk GViM toolbar icons based in Silk icon theme. Theme site: http://www...

https://github.com/istepura/vim-toolbar-icons-silk
これを bundle するだけで簡単に自動的にアイコンがカッコよくなります。
vim toolbasr
オサレ...

2013/08/24


このエントリーをはてなブックマークに追加
名無しのVim使いでお馴染みの小見さんにお誘いを受け、執筆のお手伝いをさせて頂きました。
これまで僕が持っていたVim本は、「Viとは」から始まりページ数の半分くらいで操作方法、最後の方にようやく「GVimとは」が現れる、あまり奥にまで入り込んでいない書籍でした。
viデスクトップリファレンス (UNIX text processing) viデスクトップリファレンス (UNIX text processing)
Arnold Robbins
オライリー・ジャパン / (1999-06-15)
 
発送可能時間:


vi (Linux magazine books) vi (Linux magazine books)
金光 雅夫
アスキー / (2000-09)
 
発送可能時間:


ViIMproved‐Vim完全バイブル ViIMproved‐Vim完全バイブル
Steve Oualline
技術評論社 / (2004-05)
 
発送可能時間:


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

そんな中、小見さんから話を持ちかけて頂き、まさか自分がその著書を作るなんて思っても見なかったけど即答でOKを出させて頂きました。

僕が最初に見たViは大学の某研究室にあったSONYのNEWSというUNIX上で友達が動かしていた物。その時は変な操作方法だなぁとしか思ってませんでした。

それから就職した会社のワークステーションでViの基本操作を学び、出向先でViの師匠に出会った。他社の人ではあったけど、新人の僕にいろいろとViのあれこれを教えてくれた。あの時、emacsを教えられていたら、僕はVimを知ることは無かったのかもしれない。
それから数ヶ月後に社内で作業する様になり、Vimを知った。HP-UXやSPARCstation上で何度も何度も失敗しながらコンパイルし、読めない英語に苦戦しながら自分だけのVimをコンパイルした。最初に見たVimはとてもバギーで、何かすると直ぐに落ち、日本語も入力出来なかった。そのVimから日本語を入力する為にforkされたjvim+onewに出会い、Vimを使って仕事が出来るまでの環境は得た。

その頃はDOS上でitojunさんがhackしたVi(stevieベースだったかな)が動いていて、僕は何か資料整理する時はいつもそれを使っていた。今から思えば、GUIがあるのにコンソールで作業する癖はその頃身についてしまったのかもしれない。

その後、Vimはバージョン6まで進化した。それでもまだオリジナルから派生させたjvimバージョン5という位置付けでしか無かったVimに僕はイライラし始めていた。

なんでオリジナルはどんどん進化していってるのに、jvimは追従しないんだ。

なんで毎回パッチ当てなきゃ駄目なんだ。

僕はvim-devというメーリングリストに参加し、Vimの最新動向を追うようになった。
丁度その頃からVimにマルチバイトという概念が入り出した。「この流れに乗るしかない」そう思ったのかも知れない。
そしてそのMLで日本人の名前を見つけた時の事も鮮明に覚えている。今では当たり前の様に扱える、Vimのマルチバイト文字対応の正規表現エンジンに手を入れ初めていたのが、僕のこのブログをホストしてくれている香り屋のKoRoNさんだった。
その頃のVimはようやくWindowsのIMEで日本語が入力出来る様になっていて、エディタのフォントとIMEのフォントが別途設定する様な仕様だった。これは面倒臭いだろうと、patchを書き下手な英語でメールを書いた。
これが僕の最初のvim-devへの投稿になり、初めてマージされたpatchになった。

それからはKoRoNさんと僕とで殴りかける様な数のpatchを送り続け、マルチバイト文字をちゃんと扱えるエディタに進化して行った。

気付いたら、僕は今までに100を越えるpatchを送っていた。もちろんボツになったpatchもある。
最近話題のVimShellなんかが内部で使っているvimprocの一部原型でもあるsocket機能をVimにマージしてもらう為にpatchも書いた。ボツになったけど。
さらにコンソールのVimからCannna/SKK/POBoxを扱える様にする為のpatch、im_customというのも書いた。とにかくVimの為にいっぱいコードを書いた。

最近では昔程マルチバイトに関するバグも出なくなり、vim-devのメンバもマルチバイト文字に気を付けてくれる様になった。
そしてあの頃では考えられない程、vimscriptは進化し、ユーザにとっては単なる「スクリプト」から「アプリケーション」へと進化して行った。

あの頃の誰が「Vimスクリプトだけででカレンダーを動かす」なんて考えただろうか、あの頃の誰が「Vimスクリプトでシェルを動かす」なんて考えただろうか。
Vimスクリプトはアプリケーションを書ける言語になったんです。

そしてVimを扱う書籍もそろそろ今のVimを見つめ直すべき時が来たのだと思います。

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


Vimテクニックバイブル ~作業効率をカイゼンする150の技

「もう少し文字入力を楽にしたい」「バッファ操作をもっと強化したい」といった誰しもが抱く要望を、ちょっとしたテクニックやプラグインの導入で改善していく「作業効率に特化した逆引きリファレンス」
日本でも名立たる有数のVimハッカーが、あらゆる角度から150のTipsを練り上げています。

taku_o(名無しのVim使い)
yukimi
thinca(quickrun, ref.vim)
fuenor(QFixHowm, QFixGrep, JPFormat.vim, Vim-UTF8)
Shougo(neocomplcache, vimshell, vimproc, unite.vim, ...)
mattn

よくこのメンバが集まったな。そんな気もします。この本は教則本でもないし操作リファレンス本でもありません。ある意味、出版社の方達にとってはリスキーな本に成り得ます。

しかしながら「Vimを使っている方をワクワクさせたい」そんな気持ちで皆さん書いたはずです。

9月中旬に発売予定です。ぜひお手に取ってワクワクしてみて下さい。

そして、Vimスクリプトでアプリケーションを書ける人が一人でも多くなれば、今度は執筆した僕達がワクワクする事になるのだと信じています。

最後に、vim-users.jpやlingrでvimを盛り上げてくれているtyruさんやujihisaさん、他数名に感謝したいと思います。


このエントリーをはてなブックマークに追加
アスキー・メディアワークス様より、献本して頂きました。
実践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 の使い道はもっと可能性があると思うので、もう少し遊んでみたい。