A Log In The Life.

May The Code Be With You !

WebSocket Server を Scheme で書いてみた

WebSocket Server を RFC 6455 を読みながら Scheme で書いてみました。
といっても、単純なエコーサーバなので、入力したものが返ってくるだけです。IO多重化もしていません。
処理系は Gauche 0.9.2 です。RFC 6455 に準拠しているブラウザで動きます。
Chrome 16でしか確認していません)

https://gist.github.com/1640609

未対応の部分や反省点はいろいろありますが、とりあえず。

Appendix
http://tools.ietf.org/html/rfc6455
https://github.com/MostAwesomeDude/txWS

zsh で brew コマンド補完

Homebrew の brew コマンドを zsh で補完します。

Homebrew には zsh の補完関数が含まれてるので、設定をすると zshbrew コマンドの補完ができるようになります。
$fpath を通しているディレクトリに _brew としてコピーします。

cp /usr/local/Library/Contributions/brew_zsh_completion.zsh ~/.zsh/_brew

bash, fish の補完関数も用意してあるようです。

$ ls /usr/local/Library/Contributions
brew_bash_completion.sh
brew_fish_completion.fish
brew_zsh_completion.zsh

fish って shell は初めて知りました。

参考

http://mxcl.github.com/homebrew/
ちょっと差がつくhomebrewのあまり知られていない使い方
http://fishshell.com/

zsh でバージョン指定

ちょっと古い環境に、いつも使ってる .zshrc を突っ込んだら "command not found: " でこけてしまいました。
新しいバージョンにしかない関数が、古いバージョンでこけたわけですね。

検索すると Stack Overflow にちょうどいい質問と回答があったので、メモしておきます。


How do I require a minimum version of zsh? - Stack Overflow


これによると、"is-at-version" 関数を使うと幸せになれそうです。
使い方は、回答そのままですがこんな感じです。

autoload -U is-at-least
if is-at-least 4.3.9; then
   ....
fi

コメントによると、この関数は zsh 3.1.6 から実装されているそうです。
zsh 3.1.6 は 2000-02-11 release なので、これ以前の zsh に出会うことはなかなかなさそうです。


2 つ目の回答のコメントにしっかり指摘されていますが、 $ZSH_VERSION > 4.1.8 の様に書いてしまうと、文字列の比較を行いますから、気をつけないといけません。


Appendix


Happy Hacking.