Vim+PHP 関数一覧を表示する関数
ふと思い立ってPHPのクラスメソッドを表示させて、選択することでその場所に飛ぶような仕組みを作ってみた。
map! =f <ESC>:call Gfunc()<CR> map! =fun <ESC>:call Gfunc()<CR> map! =func <ESC>:call Gfunc()<CR> " Grep functions and displaies with cw function! Gfunc() if &filetype=='php' vimgrep /^\s*\(public\|protected\|private\)\=\s*\(static\)\=\s*function\s*(*/ % | cw else if &filetype=='ruby' vimgrep /^\s*def\s\=(*)*/ % | cw elseif &filetype=='vim' vimgrep /function!\= *\(*\)/ % | cw else echo "unknown filetype" endif endfunction
仕組みは簡単で、filetypeで分岐してそれに合った正規表現をvimgrepを使って "%(編集中のファイル)" に対してgrepして、その結果を cw(copen)しているだけ。
使い方は関数を調べたいファイルで
<ESC> : =f <ENTER>
もしくは =fun, =func とするだけ。~/.vimrcにでも貼付けて使ってみてください。
Vimの正規表現は書くのに慣れが必要なのでちょっとした練習にもなりました。お使いの言語に対応した正規表現を書いた方は是非教えてください。僕も他の言語用のものを書いたらこちらに加筆します。
では。
プログラミングErlang 第10章 分散プログラミングのサンプルが動かない問題の解決方法
久しぶりの記事です。最近は題名の『プログラミングErlang/Joe Armstrong (著), 榊原一矢 (翻訳) 』を読みながらErlangを習得しようと奮闘しています。
その本の139ページから始まる「第10章 分散プログラミング」のサンプルコードが動かなかったため、調べてみると海外のフォーラムではかなり動かないという相談を見かけました。ただ、日本語での情報がなかったので、この本とErlangの普及の為にも書き残しておきます。
環境は Mac OSX 10.6.1(Snow Leopard)、Erlang R13B02 (erts-5.7.3) 、Eshell V5.7.3、使用シェルはzsh 4.3.9 (i386-apple-darwin10.0)です。
問題が発生するのは142ページのステージ2です。クライアントとサーバーが1つのホストの別のノードにある場合に、その二つの間で通信を行うコードで、以下のようにして二つのノードを立ち上げ、rpcライブラリモジュールを使ってkvsを呼び出すのですが…
$ erl -sname gandalf (gandalf@hogename) 1> kvs:start(). true
ここまではうまくいくはずですが
$ erl -sname bilbo (bilbo@hogename) 1> rpc:call(gandalf@localhost, kvs, store, [weather, fine]).
と打つと
{badrpc,nodedown} (bilbo@hogename) 2> =ERROR REPORT==== 18-Nov-2009::17:02:18 === Error in process <0.39.0> on node 'bilbo@hogename' with exit value: {badarg,[{erlang,list_to_existing_atom, ["gandalf@hogename"]},{dist_util,recv_challenge,1},{dist_util,handshake_we_started,1}]}
とエラーを吐かれてしまいます。上の "hogename" は共有の「コンピューター名」です。これを変更するには「環境設定 > 共有」で開く画面の上の方にあるテキストインプットを編集します。
さて、解決方法ですが二通りあります。
ひとつめは erl の起動時につけるオプションを変更する方法です。
$ erl -sname gandalf@localhost
とします。bibloの方も同様にします。こうすることで先ほどは
(gandalf@hogename) 1>
だったところが
(gandalf@localhost) 1>
となっているはずです。
ふたつめの解決策は "/etc/hosts" に "hogename" を書き加える方法です。
$ sudo vim /etc/hosts 127.0.0.1 hogename # <= これを書き加える
あとは端末を一度再起動して、
(biblo@hogename) 1> rpc:call(gandalf@hogename, kvs, store, [weather, fine]).
とすれば動作するはずです。
海外の情報は、日本ではあまりまだメジャーではない環境や言語では特に助かるということを思い知りました…。
ではまた。
参考サイト
http://blog.getintheloop.eu/2009/5/17/running-rabbit-mq-on-mac-osx-solving-badrpc-nodedown
http://cammacrae.com/blog/2007/06/27/erlang-example-error/
http://somic.org/2009/02/19/on-rabbitmqctl-and-badrpcnodedown/
Project.vim - Vimでのプログラミングを猛烈に支援してくれるプラグイン
こんばんは。Google Chrome Extensionに関する記事を書こうと思っていたのに、うまくいかなくて紹介記事に逃げました。
今晩はProject.vimを紹介します。
Project.vimはプログラムに限らず、Vimで編集するテキストデータを管理するためのプラグインです。
iTermからMacVimに乗り換えて非常に不便だったのがファイルの扱いで、IDEの便利さを恨めしくも思いましたが、Project.vimがそんな雑念をも消し去ってくれます。
上が利用中のスクリーンショットです。こんな風に左側に小さくプロジェクトに関係のあるファイルを表示させておいて、ファイルを選択すれば右側で即座に開いて編集を行うことができます。
ダウンロードはこちら
http://www.vim.org/scripts/script.php?script_id=69
Objective-Cの勉強のためのオープンソース
Objective-CはMacintoshやiPhoneのアプリケーションを開発に最も使われている言語です。Cocoaフレームワークをと密に接していることを除いても、非常に柔軟で記述が楽な、優秀な言語だと思います。
しかし、いかんせん情報が少なく、最近では本もだいぶ出てきましたがそれでも十分とは言えない状態です。
そこで、Objective-CとCocoaの勉強のために何ができるかと考え、オープンソースのアプリケーションのソースコードをのぞくのが一番だろうと思い、その中から有名なものをいくつかリストアップしてみることにしました。
まだすべてのソースコードをチェクした訳ではないので、一部勘違いなどがあるかもしれませんが、ご容赦ください。
なお、ここに挙げたすべての情報は "CocoaOpen" に掲載されています。
この記事では有名なもの、コードが有用そうなものを画像とともに紹介します。
Adium
Cocoa open source IM alternative to iChat/AOL IM/Yahoo IM/MSN IM/Proteus/Fire.
言わずと知れたインスタントメッセンジャーアプリケーションです。IRC、MSN、Skype、最近ではFaceBookのチャットまで使えるようです。
ネットワーク通信を行うコードが参考になりそうです。
Camino
Web browser wrapping a Cocoa UI around the Mozilla HTML rendering engine. Largely done in ObjectiveCPlusPlus
CaminoはGeckoエンジンを搭載した、高速なウェブブラウザーです。
完全にCocoa製ということなので、Mozilla Firefoxのコードを読むならこちらを読んだ方がいいかもしれません。
ちなみに、記述言語は上にもあるように Objective-C++ です。
QuickSilverの紹介
QuickSilverはMac用のユーティリティアプリケーションです。同様のアプリケーションはいくつかありますが(LaunchBar、Butler など)、安定性やカスタマイズ性の高さから人気のあるアプリケーションです。
僕はほとんどアプリケーションランチャーとして利用しているので使いこなしてはいないので、今回はいくつかのコマンドインターフェースを紹介します。
Primer
最初から入っているコマンドインターフェースです。
特に癖もないので、QuickSilverを導入してからしばらくはこれを使っていました。