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にでも貼付けて使ってみてください。

現在のところ、PHPRubyのみ対応。

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/

GitX+unfuddleでバージョン管理を始める方法

ペアプログラミングのためにバージョン管理をする必要が出たので、GitとSVNを無料で試すことになって、その設定にそこそこ苦労したので方法を書き記しておこうと思います。

1. unfuddleのアカウントを作成する

unfuddleは非オープンソースプロジェクトでも無料で利用が可能なSVN or Git ホスティングサービスです。
以下のURLからunfuddleへ移動し、上部の "Sign up" からアカウントを作成します。

http://unfuddle.com/

続きを読む

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

続きを読む

GUI世代のためのCUI入門以前 — MacVimの導入

先日 iTerm を紹介したばかりでしたが、今回はMacテキストエディタのMacVimを紹介します。

MacVimはgVimと呼ばれるもののひとつで、グラフィカルでリッチな、より使いやすいCUIエディタです。と、言ってももうCUIなんだかGUIなんだかわからないような所まで進化しちゃってますが。
それでもCUIの柔軟性は失っていないので、おいしいところ取りかもしれません。今回はインストールに加えて、便利なプラグインをひとつ併せて紹介します。


続きを読む

Objective-Cの勉強のためのオープンソース

Objective-CMacintoshiPhoneのアプリケーションを開発に最も使われている言語です。Cocoaフレームワークをと密に接していることを除いても、非常に柔軟で記述が楽な、優秀な言語だと思います。

しかし、いかんせん情報が少なく、最近では本もだいぶ出てきましたがそれでも十分とは言えない状態です。

そこで、Objective-CCocoaの勉強のために何ができるかと考え、オープンソースのアプリケーションのソースコードをのぞくのが一番だろうと思い、その中から有名なものをいくつかリストアップしてみることにしました。

まだすべてのソースコードをチェクした訳ではないので、一部勘違いなどがあるかもしれませんが、ご容赦ください。
なお、ここに挙げたすべての情報は "CocoaOpen" に掲載されています。
この記事では有名なもの、コードが有用そうなものを画像とともに紹介します。


Adium

Cocoa open source IM alternative to iChat/AOL IM/Yahoo IM/MSN IM/Proteus/Fire.

言わずと知れたインスタントメッセンジャーアプリケーションです。IRC、MSN、Skype、最近ではFaceBookのチャットまで使えるようです。
ネットワーク通信を行うコードが参考になりそうです。

http://www.adiumx.com


Camino

Web browser wrapping a Cocoa UI around the Mozilla HTML rendering engine. Largely done in ObjectiveCPlusPlus

CaminoGeckoエンジンを搭載した、高速なウェブブラウザーです。
完全にCocoa製ということなので、Mozilla Firefoxのコードを読むならこちらを読んだ方がいいかもしれません。
ちなみに、記述言語は上にもあるように Objective-C++ です。

http://caminobrowser.org/

続きを読む

QuickSilverの紹介

QuickSilverMac用のユーティリティアプリケーションです。同様のアプリケーションはいくつかありますが(LaunchBarButler など)、安定性やカスタマイズ性の高さから人気のあるアプリケーションです。

僕はほとんどアプリケーションランチャーとして利用しているので使いこなしてはいないので、今回はいくつかのコマンドインターフェースを紹介します。

Primer


最初から入っているコマンドインターフェースです。
特に癖もないので、QuickSilverを導入してからしばらくはこれを使っていました。

Mini


一番場所をとらないだろうコマンドインターフェースです。
目立つユーティリティアプリケーションは嫌い、という人にはいいのではないでしょうか。

続きを読む